@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,101 @@
1
+ /**
2
+ * Sync commands (pull, push, status) for Confluence CLI.
3
+ */
4
+ import { Command, Options } from "@effect/cli";
5
+ import * as Console from "effect/Console";
6
+ import * as Effect from "effect/Effect";
7
+ import { GitService } from "../GitService.js";
8
+ import { SyncEngine } from "../SyncEngine.js";
9
+ // === Pull command ===
10
+ const forceOption = Options.boolean("force").pipe(Options.withAlias("f"), Options.withDescription("Overwrite local changes"));
11
+ const replayHistoryOption = Options.boolean("replay-history").pipe(Options.withDescription("Replay version history as individual git commits"));
12
+ export const pullCommand = Command.make("pull", { force: forceOption, replayHistory: replayHistoryOption }, ({ force, replayHistory }) => Effect.gen(function* () {
13
+ const engine = yield* SyncEngine;
14
+ yield* Console.log("Pulling pages from Confluence...");
15
+ const onProgress = (current, total, message) => {
16
+ process.stdout.write(`\r Replaying history: ${current}/${total} - ${message}`);
17
+ };
18
+ const result = yield* engine.pull({
19
+ force,
20
+ replayHistory,
21
+ ...(replayHistory ? { onProgress } : {})
22
+ });
23
+ if (replayHistory) {
24
+ process.stdout.write("\r" + " ".repeat(80) + "\r");
25
+ }
26
+ yield* Console.log(`Pulled ${result.pulled} pages`);
27
+ if (result.commits > 0) {
28
+ yield* Console.log(`Created ${result.commits} git commits`);
29
+ }
30
+ if (result.errors.length > 0) {
31
+ yield* Console.error("Errors:", result.errors.join("\n"));
32
+ }
33
+ })).pipe(Command.withDescription("Download pages from Confluence to local markdown"));
34
+ // === Push command ===
35
+ const dryRunOption = Options.boolean("dry-run").pipe(Options.withAlias("n"), Options.withDescription("Show changes without applying"));
36
+ export const pushCommand = Command.make("push", { dryRun: dryRunOption }, ({ dryRun }) => Effect.gen(function* () {
37
+ const engine = yield* SyncEngine;
38
+ const git = yield* GitService;
39
+ // Check for uncommitted changes
40
+ const gitStatus = yield* git.status();
41
+ if (gitStatus.hasChanges) {
42
+ yield* Console.log("Uncommitted changes detected. Run 'confluence commit' first.");
43
+ return;
44
+ }
45
+ yield* Console.log(dryRun ? "Dry run - showing changes..." : "Pushing changes to Confluence...");
46
+ const result = yield* engine.push({ dryRun });
47
+ if (result.pushed === 0 && result.created === 0 && result.deleted === 0) {
48
+ yield* Console.log("Nothing to push");
49
+ }
50
+ else {
51
+ yield* Console.log(`Pushed: ${result.pushed}, Created: ${result.created}, Deleted: ${result.deleted}`);
52
+ }
53
+ if (result.errors.length > 0) {
54
+ yield* Console.error("Errors:", result.errors.join("\n"));
55
+ }
56
+ })).pipe(Command.withDescription("Upload local markdown changes to Confluence"));
57
+ // === Status command ===
58
+ export const statusCommand = Command.make("status", {}, () => Effect.gen(function* () {
59
+ const engine = yield* SyncEngine;
60
+ const git = yield* GitService;
61
+ // Show git status
62
+ const gitInit = yield* git.isInitialized();
63
+ if (gitInit) {
64
+ const gitStatus = yield* git.status();
65
+ const commitCount = yield* git.log({ n: 1 }).pipe(Effect.map((commits) => commits.length > 0 ? "has commits" : "no commits"), Effect.catchAll(() => Effect.succeed("unknown")));
66
+ yield* Console.log(`Git: initialized (${commitCount})`);
67
+ if (gitStatus.hasChanges) {
68
+ const staged = gitStatus.entries.filter((e) => e.staged).length;
69
+ const unstaged = gitStatus.entries.filter((e) => !e.staged).length;
70
+ yield* Console.log(` Changes: ${staged} staged, ${unstaged} unstaged`);
71
+ }
72
+ if (gitStatus.hasConflicts) {
73
+ yield* Console.log(` Conflicts: ${gitStatus.conflictedFiles.length} files`);
74
+ }
75
+ }
76
+ else {
77
+ yield* Console.log("Git: not initialized (run 'confluence git init')");
78
+ }
79
+ const result = yield* engine.status();
80
+ yield* Console.log(`
81
+ Sync Status:
82
+ Synced: ${result.synced}
83
+ Local Modified: ${result.localModified}
84
+ Remote Modified: ${result.remoteModified}
85
+ Conflicts: ${result.conflicts}
86
+ Local Only: ${result.localOnly}
87
+ Remote Only: ${result.remoteOnly}
88
+ `);
89
+ if (result.files.length > 0 && result.synced < result.files.length) {
90
+ yield* Console.log("Changed files:");
91
+ for (const file of result.files) {
92
+ if (file._tag !== "Synced" && file._tag !== "RemoteOnly") {
93
+ yield* Console.log(` [${file._tag}] ${file.path}`);
94
+ }
95
+ else if (file._tag === "RemoteOnly") {
96
+ yield* Console.log(` [${file._tag}] ${file.page.title}`);
97
+ }
98
+ }
99
+ }
100
+ })).pipe(Command.withDescription("Show sync status"));
101
+ //# sourceMappingURL=sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -6,11 +6,20 @@
6
6
  * @packageDocumentation
7
7
  */
8
8
  export * from "./Brand.js";
9
+ export { ConfluenceAuth, type ConfluenceAuthService, layer as ConfluenceAuthLayer } from "./ConfluenceAuth.js";
9
10
  export { ConfluenceClient, type ConfluenceClientConfig, type CreatePageRequest, layer as ConfluenceClientLayer, type UpdatePageRequest } from "./ConfluenceClient.js";
10
11
  export { ConfluenceConfig, createConfigFile, layer as ConfluenceConfigLayer, layerFromValues as ConfluenceConfigLayerFromValues } from "./ConfluenceConfig.js";
11
12
  export * from "./ConfluenceError.js";
12
13
  export { layer as LocalFileSystemLayer, type LocalFile, LocalFileSystem } from "./LocalFileSystem.js";
13
14
  export { layer as MarkdownConverterLayer, MarkdownConverter } from "./MarkdownConverter.js";
14
15
  export * from "./Schemas.js";
15
- export { layer as SyncEngineLayer, type PullResult, type PushResult, type StatusResult, SyncEngine, type SyncResult, type SyncStatus } from "./SyncEngine.js";
16
+ export { layer as SyncEngineLayer, type ProgressCallback, type PullOptions, type PullResult, type PushResult, type StatusResult, SyncEngine, type SyncStatus } from "./SyncEngine.js";
17
+ export * from "./ast/index.js";
18
+ export { parseConfluenceHtml } from "./parsers/ConfluenceParser.js";
19
+ export { parseMarkdown } from "./parsers/MarkdownParser.js";
20
+ export { serializeToConfluence } from "./serializers/ConfluenceSerializer.js";
21
+ export { serializeToMarkdown } from "./serializers/MarkdownSerializer.js";
22
+ export { DocumentFromConfluence } from "./schemas/ConfluenceSchema.js";
23
+ export { DocumentFromMarkdown } from "./schemas/MarkdownSchema.js";
24
+ export { MigrationError, ParseError, SerializeError } from "./SchemaConverterError.js";
16
25
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,cAAc,YAAY,CAAA;AAC1B,OAAO,EACL,gBAAgB,EAChB,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,EACtB,KAAK,IAAI,qBAAqB,EAC9B,KAAK,iBAAiB,EACvB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,KAAK,IAAI,qBAAqB,EAC9B,eAAe,IAAI,+BAA+B,EACnD,MAAM,uBAAuB,CAAA;AAC9B,cAAc,sBAAsB,CAAA;AACpC,OAAO,EAAE,KAAK,IAAI,oBAAoB,EAAE,KAAK,SAAS,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACrG,OAAO,EAAE,KAAK,IAAI,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC3F,cAAc,cAAc,CAAA;AAC5B,OAAO,EACL,KAAK,IAAI,eAAe,EACxB,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,UAAU,EACV,KAAK,UAAU,EACf,KAAK,UAAU,EAChB,MAAM,iBAAiB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,cAAc,YAAY,CAAA;AAC1B,OAAO,EAAE,cAAc,EAAE,KAAK,qBAAqB,EAAE,KAAK,IAAI,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAC9G,OAAO,EACL,gBAAgB,EAChB,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,EACtB,KAAK,IAAI,qBAAqB,EAC9B,KAAK,iBAAiB,EACvB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,KAAK,IAAI,qBAAqB,EAC9B,eAAe,IAAI,+BAA+B,EACnD,MAAM,uBAAuB,CAAA;AAC9B,cAAc,sBAAsB,CAAA;AACpC,OAAO,EAAE,KAAK,IAAI,oBAAoB,EAAE,KAAK,SAAS,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACrG,OAAO,EAAE,KAAK,IAAI,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC3F,cAAc,cAAc,CAAA;AAC5B,OAAO,EACL,KAAK,IAAI,eAAe,EACxB,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,UAAU,EACV,KAAK,UAAU,EAChB,MAAM,iBAAiB,CAAA;AAGxB,cAAc,gBAAgB,CAAA;AAG9B,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAA;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAG3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAA;AAC7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAA;AAGzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAA;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAGlE,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA"}
package/dist/index.js CHANGED
@@ -6,6 +6,7 @@
6
6
  * @packageDocumentation
7
7
  */
8
8
  export * from "./Brand.js";
9
+ export { ConfluenceAuth, layer as ConfluenceAuthLayer } from "./ConfluenceAuth.js";
9
10
  export { ConfluenceClient, layer as ConfluenceClientLayer } from "./ConfluenceClient.js";
10
11
  export { ConfluenceConfig, createConfigFile, layer as ConfluenceConfigLayer, layerFromValues as ConfluenceConfigLayerFromValues } from "./ConfluenceConfig.js";
11
12
  export * from "./ConfluenceError.js";
@@ -13,4 +14,17 @@ export { layer as LocalFileSystemLayer, LocalFileSystem } from "./LocalFileSyste
13
14
  export { layer as MarkdownConverterLayer, MarkdownConverter } from "./MarkdownConverter.js";
14
15
  export * from "./Schemas.js";
15
16
  export { layer as SyncEngineLayer, SyncEngine } from "./SyncEngine.js";
17
+ // AST types
18
+ export * from "./ast/index.js";
19
+ // Parsers
20
+ export { parseConfluenceHtml } from "./parsers/ConfluenceParser.js";
21
+ export { parseMarkdown } from "./parsers/MarkdownParser.js";
22
+ // Serializers
23
+ export { serializeToConfluence } from "./serializers/ConfluenceSerializer.js";
24
+ export { serializeToMarkdown } from "./serializers/MarkdownSerializer.js";
25
+ // Bi-directional schemas
26
+ export { DocumentFromConfluence } from "./schemas/ConfluenceSchema.js";
27
+ export { DocumentFromMarkdown } from "./schemas/MarkdownSchema.js";
28
+ // Schema converter errors
29
+ export { MigrationError, ParseError, SerializeError } from "./SchemaConverterError.js";
16
30
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,cAAc,YAAY,CAAA;AAC1B,OAAO,EACL,gBAAgB,EAGhB,KAAK,IAAI,qBAAqB,EAE/B,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,KAAK,IAAI,qBAAqB,EAC9B,eAAe,IAAI,+BAA+B,EACnD,MAAM,uBAAuB,CAAA;AAC9B,cAAc,sBAAsB,CAAA;AACpC,OAAO,EAAE,KAAK,IAAI,oBAAoB,EAAkB,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACrG,OAAO,EAAE,KAAK,IAAI,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC3F,cAAc,cAAc,CAAA;AAC5B,OAAO,EACL,KAAK,IAAI,eAAe,EAIxB,UAAU,EAGX,MAAM,iBAAiB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,cAAc,YAAY,CAAA;AAC1B,OAAO,EAAE,cAAc,EAA8B,KAAK,IAAI,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAC9G,OAAO,EACL,gBAAgB,EAGhB,KAAK,IAAI,qBAAqB,EAE/B,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,KAAK,IAAI,qBAAqB,EAC9B,eAAe,IAAI,+BAA+B,EACnD,MAAM,uBAAuB,CAAA;AAC9B,cAAc,sBAAsB,CAAA;AACpC,OAAO,EAAE,KAAK,IAAI,oBAAoB,EAAkB,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACrG,OAAO,EAAE,KAAK,IAAI,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC3F,cAAc,cAAc,CAAA;AAC5B,OAAO,EACL,KAAK,IAAI,eAAe,EAMxB,UAAU,EAEX,MAAM,iBAAiB,CAAA;AAExB,YAAY;AACZ,cAAc,gBAAgB,CAAA;AAE9B,UAAU;AACV,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAA;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAE3D,cAAc;AACd,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAA;AAC7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAA;AAEzE,yBAAyB;AACzB,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAA;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAElE,0BAA0B;AAC1B,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * HTTP Server factory layer using Node.js http module.
3
+ *
4
+ * @category Layers
5
+ */
6
+ export declare const HttpServerFactoryLive: import("effect/Layer").Layer<import("./oauthServer.js").HttpServerFactoryTag, never, never>;
7
+ //# sourceMappingURL=NodeLayers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NodeLayers.d.ts","sourceRoot":"","sources":["../../src/internal/NodeLayers.ts"],"names":[],"mappings":"AAaA;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,6FAEjC,CAAA"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Node.js-specific layer implementations.
3
+ *
4
+ * This is the ONLY file that should import directly from node:* modules.
5
+ * All other code should use Effect platform abstractions.
6
+ *
7
+ * @module
8
+ * @internal
9
+ */
10
+ import * as NodeHttpServer from "@effect/platform-node/NodeHttpServer";
11
+ import { createServer } from "node:http";
12
+ import { makeHttpServerFactory } from "./oauthServer.js";
13
+ /**
14
+ * HTTP Server factory layer using Node.js http module.
15
+ *
16
+ * @category Layers
17
+ */
18
+ export const HttpServerFactoryLive = makeHttpServerFactory((port) => NodeHttpServer.layerServer(createServer, { port }));
19
+ //# sourceMappingURL=NodeLayers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NodeLayers.js","sourceRoot":"","sources":["../../src/internal/NodeLayers.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,cAAc,MAAM,sCAAsC,CAAA;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACxC,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAA;AAExD;;;;GAIG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,qBAAqB,CACxD,CAAC,IAAI,EAAE,EAAE,CAAC,cAAc,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,CAAC,CAC7D,CAAA"}
@@ -35,4 +35,14 @@ export declare const parseMarkdown: (filePath: string, content: string) => Effec
35
35
  * @internal
36
36
  */
37
37
  export declare const serializeMarkdown: (frontMatter: PageFrontMatter, content: string) => string;
38
+ /**
39
+ * Serialize a new page markdown with minimal front-matter.
40
+ *
41
+ * @param frontMatter - The new page front-matter (title only)
42
+ * @param content - The markdown content
43
+ * @returns The serialized markdown file content
44
+ *
45
+ * @internal
46
+ */
47
+ export declare const serializeNewPageMarkdown: (frontMatter: NewPageFrontMatter, content: string) => string;
38
48
  //# sourceMappingURL=frontmatter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"frontmatter.d.ts","sourceRoot":"","sources":["../../src/internal/frontmatter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAGvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAGxE;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,WAAW,EAAE,eAAe,GAAG,kBAAkB,GAAG,IAAI,CAAA;IACjE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;CACxB;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,aAAa,GACxB,UAAU,MAAM,EAChB,SAAS,MAAM,KACd,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,gBAAgB,CAqC7C,CAAA;AAEJ;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB,GAC5B,aAAa,eAAe,EAC5B,SAAS,MAAM,KACd,MAYF,CAAA"}
1
+ {"version":3,"file":"frontmatter.d.ts","sourceRoot":"","sources":["../../src/internal/frontmatter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAGvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAGxE;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,WAAW,EAAE,eAAe,GAAG,kBAAkB,GAAG,IAAI,CAAA;IACjE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;CACxB;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,aAAa,GACxB,UAAU,MAAM,EAChB,SAAS,MAAM,KACd,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,gBAAgB,CAqC7C,CAAA;AAEJ;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB,GAC5B,aAAa,eAAe,EAC5B,SAAS,MAAM,KACd,MAYF,CAAA;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,wBAAwB,GACnC,aAAa,kBAAkB,EAC/B,SAAS,MAAM,KACd,MAOF,CAAA"}
@@ -66,4 +66,20 @@ export const serializeMarkdown = (frontMatter, content) => {
66
66
  };
67
67
  return matter.stringify(content, fm);
68
68
  };
69
+ /**
70
+ * Serialize a new page markdown with minimal front-matter.
71
+ *
72
+ * @param frontMatter - The new page front-matter (title only)
73
+ * @param content - The markdown content
74
+ * @returns The serialized markdown file content
75
+ *
76
+ * @internal
77
+ */
78
+ export const serializeNewPageMarkdown = (frontMatter, content) => {
79
+ const fm = {
80
+ title: frontMatter.title,
81
+ ...(frontMatter.parentId !== undefined ? { parentId: frontMatter.parentId } : {})
82
+ };
83
+ return matter.stringify(content, fm);
84
+ };
69
85
  //# sourceMappingURL=frontmatter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"frontmatter.js","sourceRoot":"","sources":["../../src/internal/frontmatter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"frontmatter.js","sourceRoot":"","sources":["../../src/internal/frontmatter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,78 @@
1
+ import type * as CommandExecutor from "@effect/platform/CommandExecutor";
2
+ import * as Effect from "effect/Effect";
3
+ import { GitError, GitNotInstalledError } from "../GitError.js";
4
+ /**
5
+ * Git file status codes from `git status --porcelain`.
6
+ */
7
+ export type GitFileStatus = "modified" | "added" | "deleted" | "renamed" | "copied" | "untracked" | "ignored" | "unmerged";
8
+ /**
9
+ * Parsed git status entry.
10
+ */
11
+ export interface GitStatusEntry {
12
+ readonly status: GitFileStatus;
13
+ readonly path: string;
14
+ readonly staged: boolean;
15
+ }
16
+ /**
17
+ * Parsed git log entry.
18
+ */
19
+ export interface GitLogEntry {
20
+ readonly hash: string;
21
+ readonly author: string;
22
+ readonly email: string;
23
+ readonly date: Date;
24
+ readonly message: string;
25
+ }
26
+ /**
27
+ * Run a git command in the specified working directory.
28
+ *
29
+ * @param args - Git command arguments
30
+ * @param cwd - Working directory
31
+ * @returns Command output
32
+ *
33
+ * @internal
34
+ */
35
+ export declare const runGit: (args: ReadonlyArray<string>, cwd: string) => Effect.Effect<string, GitError | GitNotInstalledError, CommandExecutor.CommandExecutor>;
36
+ /**
37
+ * Run a git command that may fail with exit code 1 (e.g., diff with no changes).
38
+ * Returns empty string on exit code 1.
39
+ *
40
+ * @internal
41
+ */
42
+ export declare const runGitAllowEmpty: (args: ReadonlyArray<string>, cwd: string) => Effect.Effect<string, GitError | GitNotInstalledError, CommandExecutor.CommandExecutor>;
43
+ /**
44
+ * Parse git status --porcelain output.
45
+ *
46
+ * @param output - Raw output from `git status --porcelain`
47
+ * @returns Parsed status entries
48
+ *
49
+ * @internal
50
+ */
51
+ export declare const parseGitStatus: (output: string) => ReadonlyArray<GitStatusEntry>;
52
+ /**
53
+ * Parse git log output with custom format.
54
+ *
55
+ * Uses format: hash<|>author<|>email<|>date<|>message
56
+ *
57
+ * @param output - Raw output from git log
58
+ * @returns Parsed log entries
59
+ *
60
+ * @internal
61
+ */
62
+ export declare const parseGitLog: (output: string) => ReadonlyArray<GitLogEntry>;
63
+ /**
64
+ * Git log format string for parseGitLog.
65
+ *
66
+ * @internal
67
+ */
68
+ export declare const GIT_LOG_FORMAT = "%H<|>%an<|>%ae<|>%aI<|>%s";
69
+ /**
70
+ * Check if output indicates merge conflicts.
71
+ *
72
+ * @param statusOutput - Output from `git status --porcelain`
73
+ * @returns List of conflicted files
74
+ *
75
+ * @internal
76
+ */
77
+ export declare const getConflictedFiles: (statusOutput: string) => ReadonlyArray<string>;
78
+ //# sourceMappingURL=gitCommands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitCommands.d.ts","sourceRoot":"","sources":["../../src/internal/gitCommands.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,KAAK,eAAe,MAAM,kCAAkC,CAAA;AAExE,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AAE/D;;GAEG;AACH,MAAM,MAAM,aAAa,GACrB,UAAU,GACV,OAAO,GACP,SAAS,GACT,SAAS,GACT,QAAQ,GACR,WAAW,GACX,SAAS,GACT,UAAU,CAAA;AAEd;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAA;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAA;IACnB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB;AAoBD;;;;;;;;GAQG;AACH,eAAO,MAAM,MAAM,GACjB,MAAM,aAAa,CAAC,MAAM,CAAC,EAC3B,KAAK,MAAM,KACV,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,GAAG,oBAAoB,EAAE,eAAe,CAAC,eAAe,CAarF,CAAA;AAEJ;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAC3B,MAAM,aAAa,CAAC,MAAM,CAAC,EAC3B,KAAK,MAAM,KACV,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,GAAG,oBAAoB,EAAE,eAAe,CAAC,eAAe,CAMtF,CAAA;AAEH;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc,GAAI,QAAQ,MAAM,KAAG,aAAa,CAAC,cAAc,CAkB3E,CAAA;AA4BD;;;;;;;;;GASG;AACH,eAAO,MAAM,WAAW,GAAI,QAAQ,MAAM,KAAG,aAAa,CAAC,WAAW,CAkCrE,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,cAAc,8BAA8B,CAAA;AAEzD;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,GAAI,cAAc,MAAM,KAAG,aAAa,CAAC,MAAM,CAK7E,CAAA"}
@@ -0,0 +1,156 @@
1
+ /**
2
+ * Git shell command helpers.
3
+ *
4
+ * @module
5
+ * @internal
6
+ */
7
+ import * as Command from "@effect/platform/Command";
8
+ import * as Effect from "effect/Effect";
9
+ import * as String from "effect/String";
10
+ import { GitError, GitNotInstalledError } from "../GitError.js";
11
+ /**
12
+ * Convert PlatformError to GitError or GitNotInstalledError.
13
+ */
14
+ const mapPlatformError = (error, commandStr) => {
15
+ if (error._tag === "SystemError" && error.reason === "NotFound") {
16
+ return new GitNotInstalledError({
17
+ message: `Git not found: ${error.message}. Please install git.`
18
+ });
19
+ }
20
+ return new GitError({
21
+ command: commandStr,
22
+ message: error.message
23
+ });
24
+ };
25
+ /**
26
+ * Run a git command in the specified working directory.
27
+ *
28
+ * @param args - Git command arguments
29
+ * @param cwd - Working directory
30
+ * @returns Command output
31
+ *
32
+ * @internal
33
+ */
34
+ export const runGit = (args, cwd) => Effect.gen(function* () {
35
+ const command = Command.make("git", ...args).pipe(Command.workingDirectory(cwd));
36
+ const commandStr = `git ${args.join(" ")}`;
37
+ const result = yield* Command.string(command).pipe(Effect.mapError((error) => mapPlatformError(error, commandStr)));
38
+ return result;
39
+ });
40
+ /**
41
+ * Run a git command that may fail with exit code 1 (e.g., diff with no changes).
42
+ * Returns empty string on exit code 1.
43
+ *
44
+ * @internal
45
+ */
46
+ export const runGitAllowEmpty = (args, cwd) => runGit(args, cwd).pipe(Effect.catchIf((e) => e._tag === "GitError", () => Effect.succeed("")));
47
+ /**
48
+ * Parse git status --porcelain output.
49
+ *
50
+ * @param output - Raw output from `git status --porcelain`
51
+ * @returns Parsed status entries
52
+ *
53
+ * @internal
54
+ */
55
+ export const parseGitStatus = (output) => {
56
+ if (String.isEmpty(output.trim())) {
57
+ return [];
58
+ }
59
+ return output
60
+ .split("\n")
61
+ .filter((line) => line.length >= 3) // Valid lines have XY + space + path
62
+ .map((line) => {
63
+ const indexStatus = line[0] ?? " ";
64
+ const workTreeStatus = line[1] ?? " ";
65
+ const path = line.slice(3);
66
+ const staged = indexStatus !== " " && indexStatus !== "?";
67
+ const status = parseStatusCode(staged ? indexStatus : workTreeStatus);
68
+ return { status, path, staged };
69
+ });
70
+ };
71
+ /**
72
+ * Parse a single status code character.
73
+ */
74
+ const parseStatusCode = (code) => {
75
+ switch (code) {
76
+ case "M":
77
+ return "modified";
78
+ case "A":
79
+ return "added";
80
+ case "D":
81
+ return "deleted";
82
+ case "R":
83
+ return "renamed";
84
+ case "C":
85
+ return "copied";
86
+ case "?":
87
+ return "untracked";
88
+ case "!":
89
+ return "ignored";
90
+ case "U":
91
+ return "unmerged";
92
+ default:
93
+ return "modified";
94
+ }
95
+ };
96
+ /**
97
+ * Parse git log output with custom format.
98
+ *
99
+ * Uses format: hash<|>author<|>email<|>date<|>message
100
+ *
101
+ * @param output - Raw output from git log
102
+ * @returns Parsed log entries
103
+ *
104
+ * @internal
105
+ */
106
+ export const parseGitLog = (output) => {
107
+ if (String.isEmpty(output.trim())) {
108
+ return [];
109
+ }
110
+ return output
111
+ .trim()
112
+ .split("\n")
113
+ .flatMap((line) => {
114
+ const parts = line.split("<|>");
115
+ if (parts.length < 5) {
116
+ return [];
117
+ }
118
+ const hash = parts[0];
119
+ const author = parts[1];
120
+ const email = parts[2];
121
+ const dateStr = parts[3];
122
+ const messageParts = parts.slice(4);
123
+ if (hash === undefined || author === undefined || email === undefined || dateStr === undefined) {
124
+ return [];
125
+ }
126
+ const message = messageParts.join("<|>");
127
+ return [{
128
+ hash: hash.trim(),
129
+ author: author.trim(),
130
+ email: email.trim(),
131
+ date: new Date(dateStr.trim()),
132
+ message: message.trim()
133
+ }];
134
+ });
135
+ };
136
+ /**
137
+ * Git log format string for parseGitLog.
138
+ *
139
+ * @internal
140
+ */
141
+ export const GIT_LOG_FORMAT = "%H<|>%an<|>%ae<|>%aI<|>%s";
142
+ /**
143
+ * Check if output indicates merge conflicts.
144
+ *
145
+ * @param statusOutput - Output from `git status --porcelain`
146
+ * @returns List of conflicted files
147
+ *
148
+ * @internal
149
+ */
150
+ export const getConflictedFiles = (statusOutput) => {
151
+ const entries = parseGitStatus(statusOutput);
152
+ return entries
153
+ .filter((e) => e.status === "unmerged")
154
+ .map((e) => e.path);
155
+ };
156
+ //# sourceMappingURL=gitCommands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitCommands.js","sourceRoot":"","sources":["../../src/internal/gitCommands.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,OAAO,MAAM,0BAA0B,CAAA;AAGnD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AAmC/D;;GAEG;AACH,MAAM,gBAAgB,GAAG,CACvB,KAAkC,EAClC,UAAkB,EACe,EAAE;IACnC,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,IAAI,KAAK,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QAChE,OAAO,IAAI,oBAAoB,CAAC;YAC9B,OAAO,EAAE,kBAAkB,KAAK,CAAC,OAAO,uBAAuB;SAChE,CAAC,CAAA;IACJ,CAAC;IACD,OAAO,IAAI,QAAQ,CAAC;QAClB,OAAO,EAAE,UAAU;QACnB,OAAO,EAAE,KAAK,CAAC,OAAO;KACvB,CAAC,CAAA;AACJ,CAAC,CAAA;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CACpB,IAA2B,EAC3B,GAAW,EAC8E,EAAE,CAC3F,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC,IAAI,CAC/C,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAC9B,CAAA;IAED,MAAM,UAAU,GAAG,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAA;IAE1C,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAChD,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,gBAAgB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAChE,CAAA;IAED,OAAO,MAAM,CAAA;AACf,CAAC,CAAC,CAAA;AAEJ;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,IAA2B,EAC3B,GAAW,EAC8E,EAAE,CAC3F,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,CACpB,MAAM,CAAC,OAAO,CACZ,CAAC,CAAC,EAAiB,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,EAC3C,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CACzB,CACF,CAAA;AAEH;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,MAAc,EAAiC,EAAE;IAC9E,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;QAClC,OAAO,EAAE,CAAA;IACX,CAAC;IAED,OAAO,MAAM;SACV,KAAK,CAAC,IAAI,CAAC;SACX,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,qCAAqC;SACxE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACZ,MAAM,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAA;QAClC,MAAM,cAAc,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAA;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QAE1B,MAAM,MAAM,GAAG,WAAW,KAAK,GAAG,IAAI,WAAW,KAAK,GAAG,CAAA;QACzD,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,CAAA;QAErE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;IACjC,CAAC,CAAC,CAAA;AACN,CAAC,CAAA;AAED;;GAEG;AACH,MAAM,eAAe,GAAG,CAAC,IAAY,EAAiB,EAAE;IACtD,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,GAAG;YACN,OAAO,UAAU,CAAA;QACnB,KAAK,GAAG;YACN,OAAO,OAAO,CAAA;QAChB,KAAK,GAAG;YACN,OAAO,SAAS,CAAA;QAClB,KAAK,GAAG;YACN,OAAO,SAAS,CAAA;QAClB,KAAK,GAAG;YACN,OAAO,QAAQ,CAAA;QACjB,KAAK,GAAG;YACN,OAAO,WAAW,CAAA;QACpB,KAAK,GAAG;YACN,OAAO,SAAS,CAAA;QAClB,KAAK,GAAG;YACN,OAAO,UAAU,CAAA;QACnB;YACE,OAAO,UAAU,CAAA;IACrB,CAAC;AACH,CAAC,CAAA;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,MAAc,EAA8B,EAAE;IACxE,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;QAClC,OAAO,EAAE,CAAA;IACX,CAAC;IAED,OAAO,MAAM;SACV,IAAI,EAAE;SACN,KAAK,CAAC,IAAI,CAAC;SACX,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAChB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QAC/B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,OAAO,EAAE,CAAA;QACX,CAAC;QAED,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;QACrB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;QACvB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;QACtB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;QACxB,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QAEnC,IAAI,IAAI,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC/F,OAAO,EAAE,CAAA;QACX,CAAC;QAED,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAExC,OAAO,CAAC;gBACN,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;gBACjB,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE;gBACrB,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE;gBACnB,IAAI,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;gBAC9B,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE;aACxB,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACN,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,2BAA2B,CAAA;AAEzD;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,YAAoB,EAAyB,EAAE;IAChF,MAAM,OAAO,GAAG,cAAc,CAAC,YAAY,CAAC,CAAA;IAC5C,OAAO,OAAO;SACX,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC;SACtC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;AACvB,CAAC,CAAA"}
@@ -1,4 +1,44 @@
1
+ /**
2
+ * Content hashing utilities for change detection.
3
+ *
4
+ * @module
5
+ * @internal
6
+ */
7
+ import * as Context from "effect/Context";
8
+ import * as Effect from "effect/Effect";
9
+ import * as Layer from "effect/Layer";
1
10
  import type { ContentHash } from "../Brand.js";
11
+ /**
12
+ * Hash computation service.
13
+ * This allows mocking in tests.
14
+ *
15
+ * @category Services
16
+ */
17
+ export interface HashService {
18
+ readonly computeSha256: (content: string) => Effect.Effect<ContentHash>;
19
+ }
20
+ declare const HashServiceTag_base: Context.TagClass<HashServiceTag, "@knpkv/confluence-to-markdown/HashService", HashService>;
21
+ /**
22
+ * Tag for the HashService.
23
+ *
24
+ * @category Services
25
+ */
26
+ export declare class HashServiceTag extends HashServiceTag_base {
27
+ }
28
+ /**
29
+ * Create a HashService layer from a hash function.
30
+ * This allows injecting platform-specific implementations.
31
+ *
32
+ * @param hashFn - Function that computes SHA256 hash
33
+ * @category Layers
34
+ */
35
+ export declare const makeHashServiceLive: (hashFn: (content: string) => Promise<string>) => Layer.Layer<HashServiceTag>;
36
+ /**
37
+ * Default implementation using Web Crypto API (available in all modern runtimes).
38
+ *
39
+ * @category Layers
40
+ */
41
+ export declare const HashServiceLive: Layer.Layer<HashServiceTag>;
2
42
  /**
3
43
  * Compute SHA256 hash of content.
4
44
  *
@@ -7,5 +47,6 @@ import type { ContentHash } from "../Brand.js";
7
47
  *
8
48
  * @internal
9
49
  */
10
- export declare const computeHash: (content: string) => ContentHash;
50
+ export declare const computeHash: (content: string) => Effect.Effect<ContentHash, never, HashServiceTag>;
51
+ export {};
11
52
  //# sourceMappingURL=hashUtils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"hashUtils.d.ts","sourceRoot":"","sources":["../../src/internal/hashUtils.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAE9C;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW,GAAI,SAAS,MAAM,KAAG,WACoC,CAAA"}
1
+ {"version":3,"file":"hashUtils.d.ts","sourceRoot":"","sources":["../../src/internal/hashUtils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAE9C;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;CACxE;;AAED;;;;GAIG;AACH,qBAAa,cAAe,SAAQ,mBAGjC;CAAG;AAEN;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,GAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,KAC3C,KAAK,CAAC,KAAK,CAAC,cAAc,CAS1B,CAAA;AAEH;;;;GAIG;AACH,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,KAAK,CAAC,cAAc,CAUvD,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW,GAAI,SAAS,MAAM,KAAG,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,EAAE,cAAc,CAI1F,CAAA"}
@@ -4,7 +4,40 @@
4
4
  * @module
5
5
  * @internal
6
6
  */
7
- import * as crypto from "node:crypto";
7
+ import * as Context from "effect/Context";
8
+ import * as Effect from "effect/Effect";
9
+ import * as Layer from "effect/Layer";
10
+ /**
11
+ * Tag for the HashService.
12
+ *
13
+ * @category Services
14
+ */
15
+ export class HashServiceTag extends Context.Tag("@knpkv/confluence-to-markdown/HashService")() {
16
+ }
17
+ /**
18
+ * Create a HashService layer from a hash function.
19
+ * This allows injecting platform-specific implementations.
20
+ *
21
+ * @param hashFn - Function that computes SHA256 hash
22
+ * @category Layers
23
+ */
24
+ export const makeHashServiceLive = (hashFn) => Layer.succeed(HashServiceTag, {
25
+ computeSha256: (content) => Effect.promise(() => hashFn(content)).pipe(Effect.map((hash) => hash))
26
+ });
27
+ /**
28
+ * Default implementation using Web Crypto API (available in all modern runtimes).
29
+ *
30
+ * @category Layers
31
+ */
32
+ export const HashServiceLive = makeHashServiceLive(async (content) => {
33
+ const encoder = new TextEncoder();
34
+ const data = encoder.encode(content);
35
+ const hashBuffer = await globalThis.crypto.subtle.digest("SHA-256", data);
36
+ const hashArray = new Uint8Array(hashBuffer);
37
+ return Array.from(hashArray)
38
+ .map((b) => b.toString(16).padStart(2, "0"))
39
+ .join("");
40
+ });
8
41
  /**
9
42
  * Compute SHA256 hash of content.
10
43
  *
@@ -13,5 +46,8 @@ import * as crypto from "node:crypto";
13
46
  *
14
47
  * @internal
15
48
  */
16
- export const computeHash = (content) => crypto.createHash("sha256").update(content, "utf8").digest("hex");
49
+ export const computeHash = (content) => Effect.gen(function* () {
50
+ const hashService = yield* HashServiceTag;
51
+ return yield* hashService.computeSha256(content);
52
+ });
17
53
  //# sourceMappingURL=hashUtils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hashUtils.js","sourceRoot":"","sources":["../../src/internal/hashUtils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AAGrC;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,OAAe,EAAe,EAAE,CAC1D,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAgB,CAAA"}
1
+ {"version":3,"file":"hashUtils.js","sourceRoot":"","sources":["../../src/internal/hashUtils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAarC;;;;GAIG;AACH,MAAM,OAAO,cAAe,SAAQ,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,EAGzF;CAAG;AAEN;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,MAA4C,EACf,EAAE,CAC/B,KAAK,CAAC,OAAO,CACX,cAAc,EACd;IACE,aAAa,EAAE,CAAC,OAAe,EAAE,EAAE,CACjC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CACxC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAmB,CAAC,CAC1C;CACJ,CACF,CAAA;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAgC,mBAAmB,CAC7E,KAAK,EAAE,OAAe,EAAE,EAAE;IACxB,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAA;IACjC,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IACpC,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;IACzE,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC,UAAU,CAAC,CAAA;IAC5C,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;SACzB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;SAC3C,IAAI,CAAC,EAAE,CAAC,CAAA;AACb,CAAC,CACF,CAAA;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,OAAe,EAAqD,EAAE,CAChG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,cAAc,CAAA;IACzC,OAAO,KAAK,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;AAClD,CAAC,CAAC,CAAA"}