@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,175 @@
1
+ import * as Context from "effect/Context";
2
+ import * as Effect from "effect/Effect";
3
+ import * as Layer from "effect/Layer";
4
+ import { GitError, GitMergeConflictError, GitNoChangesError, GitNotInitializedError, GitNotInstalledError } from "./GitError.js";
5
+ import { type GitLogEntry, type GitStatusEntry } from "./internal/gitCommands.js";
6
+ /**
7
+ * Options for git commit.
8
+ *
9
+ * @category Types
10
+ */
11
+ export interface GitCommitOptions {
12
+ readonly message: string;
13
+ readonly author?: {
14
+ readonly name: string;
15
+ readonly email: string;
16
+ };
17
+ readonly date?: Date;
18
+ }
19
+ /**
20
+ * Options for git log.
21
+ *
22
+ * @category Types
23
+ */
24
+ export interface GitLogOptions {
25
+ readonly oneline?: boolean;
26
+ readonly n?: number;
27
+ readonly since?: string;
28
+ readonly file?: string;
29
+ }
30
+ /**
31
+ * Options for git diff.
32
+ *
33
+ * @category Types
34
+ */
35
+ export interface GitDiffOptions {
36
+ readonly staged?: boolean;
37
+ readonly commit?: string;
38
+ readonly commit2?: string;
39
+ readonly file?: string;
40
+ }
41
+ /**
42
+ * Options for git commit --amend.
43
+ *
44
+ * @category Types
45
+ */
46
+ export interface GitAmendOptions {
47
+ readonly noEdit?: boolean;
48
+ readonly message?: string;
49
+ }
50
+ /**
51
+ * Options for git reset.
52
+ *
53
+ * @category Types
54
+ */
55
+ export interface GitResetOptions {
56
+ readonly hard?: boolean;
57
+ }
58
+ /**
59
+ * Git status result.
60
+ *
61
+ * @category Types
62
+ */
63
+ export interface GitStatus {
64
+ readonly entries: ReadonlyArray<GitStatusEntry>;
65
+ readonly hasChanges: boolean;
66
+ readonly hasConflicts: boolean;
67
+ readonly conflictedFiles: ReadonlyArray<string>;
68
+ }
69
+ /**
70
+ * Union of all git-related errors.
71
+ *
72
+ * @category Types
73
+ */
74
+ export type GitServiceError = GitError | GitNotInstalledError | GitNotInitializedError | GitNoChangesError | GitMergeConflictError;
75
+ /**
76
+ * Git service interface.
77
+ *
78
+ * @category Service
79
+ */
80
+ export interface GitServiceShape {
81
+ /** Validate git is installed, return version. */
82
+ readonly validateGit: () => Effect.Effect<string, GitNotInstalledError>;
83
+ /** Check if .confluence/.git exists. */
84
+ readonly isInitialized: () => Effect.Effect<boolean>;
85
+ /** Initialize git repo in .confluence/. */
86
+ readonly init: () => Effect.Effect<void, GitServiceError>;
87
+ /** Stage all files. */
88
+ readonly addAll: () => Effect.Effect<void, GitServiceError>;
89
+ /** Commit with options. */
90
+ readonly commit: (options: GitCommitOptions) => Effect.Effect<string, GitServiceError>;
91
+ /** Get status. */
92
+ readonly status: () => Effect.Effect<GitStatus, GitServiceError>;
93
+ /** Get log. */
94
+ readonly log: (options?: GitLogOptions) => Effect.Effect<ReadonlyArray<GitLogEntry>, GitServiceError>;
95
+ /** Get diff. */
96
+ readonly diff: (options?: GitDiffOptions) => Effect.Effect<string, GitServiceError>;
97
+ /** Check for merge conflicts. */
98
+ readonly hasConflicts: () => Effect.Effect<boolean, GitServiceError>;
99
+ /** Continue merge after conflict resolution. */
100
+ readonly mergeContinue: () => Effect.Effect<void, GitServiceError>;
101
+ /** Copy files from docsPath to .confluence/. */
102
+ readonly syncFromDocs: (docsPath: string, trackedPaths: ReadonlyArray<string>) => Effect.Effect<void, GitServiceError>;
103
+ /** Copy files from .confluence/ to docsPath. */
104
+ readonly syncToDocs: (docsPath: string, trackedPaths: ReadonlyArray<string>) => Effect.Effect<void, GitServiceError>;
105
+ /** Get current HEAD commit hash. */
106
+ readonly getHead: () => Effect.Effect<string, GitServiceError>;
107
+ /** Get current branch name. */
108
+ readonly getCurrentBranch: () => Effect.Effect<string, GitServiceError>;
109
+ /** Create a new branch at current HEAD. */
110
+ readonly createBranch: (name: string) => Effect.Effect<void, GitServiceError>;
111
+ /** Checkout a branch or commit. */
112
+ readonly checkout: (ref: string) => Effect.Effect<void, GitServiceError>;
113
+ /** Reset to a commit. */
114
+ readonly reset: (ref: string, options?: GitResetOptions) => Effect.Effect<void, GitServiceError>;
115
+ /** Delete a branch. */
116
+ readonly deleteBranch: (name: string) => Effect.Effect<void, GitServiceError>;
117
+ /** Get parent commit hash. */
118
+ readonly getParent: (ref: string) => Effect.Effect<string, GitServiceError>;
119
+ /** Cherry-pick a commit. */
120
+ readonly cherryPick: (ref: string, options?: {
121
+ strategy?: "ours" | "theirs";
122
+ }) => Effect.Effect<void, GitServiceError>;
123
+ /** Get files changed in a commit. */
124
+ readonly getChangedFiles: (ref: string) => Effect.Effect<ReadonlyArray<string>, GitServiceError>;
125
+ /** Get file content at a specific ref. */
126
+ readonly showFile: (ref: string, filePath: string) => Effect.Effect<string, GitServiceError>;
127
+ /** Amend the current commit. */
128
+ readonly amend: (options?: GitAmendOptions) => Effect.Effect<void, GitServiceError>;
129
+ /** Get commits between two refs (exclusive..inclusive). */
130
+ readonly logRange: (from: string, to: string) => Effect.Effect<ReadonlyArray<GitLogEntry>, GitServiceError>;
131
+ /** Check if a branch exists. */
132
+ readonly branchExists: (name: string) => Effect.Effect<boolean, GitServiceError>;
133
+ /** Update a branch to point to a commit (without checkout). */
134
+ readonly updateBranch: (name: string, ref: string) => Effect.Effect<void, GitServiceError>;
135
+ /** Merge a branch into current. */
136
+ readonly merge: (branch: string, options?: {
137
+ noCommit?: boolean;
138
+ message?: string;
139
+ }) => Effect.Effect<void, GitServiceError>;
140
+ /** Get deleted files between two refs (files in `from` but not in `to`). */
141
+ readonly getDeletedFiles: (from: string, to: string, pathPrefix?: string) => Effect.Effect<ReadonlyArray<string>, GitServiceError>;
142
+ /** Get file content at a specific ref. */
143
+ readonly getFileContentAt: (ref: string, filePath: string) => Effect.Effect<string, GitServiceError>;
144
+ }
145
+ declare const GitService_base: Context.TagClass<GitService, "@knpkv/confluence-to-markdown/GitService", GitServiceShape>;
146
+ /**
147
+ * Git service for internal version control operations.
148
+ *
149
+ * Manages a git repository at `.confluence/` for tracking synced files.
150
+ *
151
+ * @example
152
+ * ```typescript
153
+ * import { GitService } from "@knpkv/confluence-to-markdown/GitService"
154
+ * import { Effect } from "effect"
155
+ *
156
+ * const program = Effect.gen(function* () {
157
+ * const git = yield* GitService
158
+ * yield* git.init()
159
+ * yield* git.addAll()
160
+ * yield* git.commit({ message: "Initial commit" })
161
+ * })
162
+ * ```
163
+ *
164
+ * @category Service
165
+ */
166
+ export declare class GitService extends GitService_base {
167
+ }
168
+ /**
169
+ * Create GitService layer with all platform dependencies.
170
+ *
171
+ * @category Layers
172
+ */
173
+ export declare const layer: Layer.Layer<GitService, never, never>;
174
+ export {};
175
+ //# sourceMappingURL=GitService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GitService.d.ts","sourceRoot":"","sources":["../src/GitService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,431 @@
1
+ /**
2
+ * Git operations service for internal version control.
3
+ *
4
+ * @module
5
+ */
6
+ import * as NodeCommandExecutor from "@effect/platform-node/NodeCommandExecutor";
7
+ import * as NodeContext from "@effect/platform-node/NodeContext";
8
+ import * as NodeFileSystem from "@effect/platform-node/NodeFileSystem";
9
+ import * as NodePath from "@effect/platform-node/NodePath";
10
+ import * as CommandExecutor from "@effect/platform/CommandExecutor";
11
+ import * as FileSystem from "@effect/platform/FileSystem";
12
+ import * as Path from "@effect/platform/Path";
13
+ import * as Context from "effect/Context";
14
+ import * as Effect from "effect/Effect";
15
+ import * as Layer from "effect/Layer";
16
+ import { GitError, GitMergeConflictError, GitNoChangesError, GitNotInitializedError, GitNotInstalledError } from "./GitError.js";
17
+ import { getConflictedFiles, GIT_LOG_FORMAT, parseGitLog, parseGitStatus, runGit, runGitAllowEmpty } from "./internal/gitCommands.js";
18
+ /**
19
+ * Git service for internal version control operations.
20
+ *
21
+ * Manages a git repository at `.confluence/` for tracking synced files.
22
+ *
23
+ * @example
24
+ * ```typescript
25
+ * import { GitService } from "@knpkv/confluence-to-markdown/GitService"
26
+ * import { Effect } from "effect"
27
+ *
28
+ * const program = Effect.gen(function* () {
29
+ * const git = yield* GitService
30
+ * yield* git.init()
31
+ * yield* git.addAll()
32
+ * yield* git.commit({ message: "Initial commit" })
33
+ * })
34
+ * ```
35
+ *
36
+ * @category Service
37
+ */
38
+ export class GitService extends Context.Tag("@knpkv/confluence-to-markdown/GitService")() {
39
+ }
40
+ /**
41
+ * Map PlatformError to GitError.
42
+ */
43
+ const mapFsError = (error) => new GitError({ command: "filesystem", message: error.message });
44
+ // Dependencies layer for git operations (CommandExecutor + FileSystem + Path + NodeContext)
45
+ // NodeCommandExecutor requires FileSystem, so use provideMerge to satisfy its dependencies
46
+ const GitDepsLive = NodeCommandExecutor.layer.pipe(Layer.provideMerge(NodeFileSystem.layer), Layer.provideMerge(NodePath.layer), Layer.provideMerge(NodeContext.layer));
47
+ /**
48
+ * Copy a single file, creating parent directories as needed.
49
+ */
50
+ const copyFileFn = (fs, pathService, source, dest) => Effect.gen(function* () {
51
+ const destDir = pathService.dirname(dest);
52
+ yield* fs.makeDirectory(destDir, { recursive: true }).pipe(Effect.catchAll(() => Effect.void));
53
+ yield* fs.copyFile(source, dest).pipe(Effect.mapError(mapFsError));
54
+ });
55
+ /**
56
+ * Copy a directory recursively.
57
+ */
58
+ const copyDirectoryFn = (fs, pathService, source, dest) => Effect.gen(function* () {
59
+ yield* fs.makeDirectory(dest, { recursive: true }).pipe(Effect.catchAll(() => Effect.void));
60
+ const entries = yield* fs.readDirectory(source).pipe(Effect.mapError(mapFsError));
61
+ for (const entry of entries) {
62
+ const sourcePath = pathService.join(source, entry);
63
+ const destPath = pathService.join(dest, entry);
64
+ const stat = yield* fs.stat(sourcePath).pipe(Effect.mapError(mapFsError));
65
+ if (stat.type === "Directory") {
66
+ yield* copyDirectoryFn(fs, pathService, sourcePath, destPath);
67
+ }
68
+ else {
69
+ yield* copyFileFn(fs, pathService, sourcePath, destPath);
70
+ }
71
+ }
72
+ });
73
+ /**
74
+ * Copy all markdown files recursively.
75
+ */
76
+ const copyMarkdownFilesFn = (fs, pathService, source, dest) => Effect.gen(function* () {
77
+ const exists = yield* fs.exists(source).pipe(Effect.catchAll(() => Effect.succeed(false)));
78
+ if (!exists) {
79
+ return;
80
+ }
81
+ const entries = yield* fs.readDirectory(source).pipe(Effect.mapError(mapFsError));
82
+ for (const entry of entries) {
83
+ // Skip .git directory and config.json
84
+ if (entry === ".git" || entry === "config.json") {
85
+ continue;
86
+ }
87
+ const sourcePath = pathService.join(source, entry);
88
+ const destPath = pathService.join(dest, entry);
89
+ const stat = yield* fs.stat(sourcePath).pipe(Effect.mapError(mapFsError));
90
+ if (stat.type === "Directory") {
91
+ yield* copyMarkdownFilesFn(fs, pathService, sourcePath, destPath);
92
+ }
93
+ else if (entry.endsWith(".md")) {
94
+ yield* copyFileFn(fs, pathService, sourcePath, destPath);
95
+ }
96
+ }
97
+ });
98
+ // Get paths helper - takes pathService as param
99
+ const getPaths = (pathService) => {
100
+ const cwd = process.cwd();
101
+ const confluenceDir = pathService.join(cwd, ".confluence");
102
+ const gitDir = pathService.join(confluenceDir, ".git");
103
+ return { cwd, confluenceDir, gitDir, pathService };
104
+ };
105
+ // Ensure initialized helper - takes fs and gitDir
106
+ const ensureInitializedFn = (fs, gitDir) => Effect.gen(function* () {
107
+ const initialized = yield* fs.exists(gitDir).pipe(Effect.catchAll(() => Effect.succeed(false)));
108
+ if (!initialized) {
109
+ return yield* Effect.fail(new GitNotInitializedError());
110
+ }
111
+ });
112
+ // Create the service - capture deps at construction time
113
+ const make = Effect.gen(function* () {
114
+ const fs = yield* FileSystem.FileSystem;
115
+ const pathService = yield* Path.Path;
116
+ const commandExecutor = yield* CommandExecutor.CommandExecutor;
117
+ const paths = getPaths(pathService);
118
+ const { confluenceDir, cwd, gitDir } = paths;
119
+ // Create context with captured services for providing to returned Effects
120
+ const depsContext = Context
121
+ .empty().pipe(Context.add(FileSystem.FileSystem, fs), Context.add(Path.Path, pathService), Context.add(CommandExecutor.CommandExecutor, commandExecutor));
122
+ // Helper to provide deps to an effect - uses any for R since we know depsContext covers all needs
123
+ const provideDeps = (effect) => Effect.provide(effect, depsContext);
124
+ // Ensure initialized helper using captured values
125
+ const ensureInitialized = ensureInitializedFn(fs, gitDir);
126
+ // Service implementation using captured deps - each returns Effect with deps provided
127
+ const validateGit = () => provideDeps(runGit(["--version"], cwd).pipe(Effect.map((output) => output.trim()), Effect.catchTag("GitError", () => Effect.fail(new GitNotInstalledError({ message: "Git not found" })))));
128
+ const isInitialized = () => Effect.succeed(fs).pipe(Effect.flatMap((f) => f.exists(gitDir)), Effect.catchAll(() => Effect.succeed(false)));
129
+ const init = () => provideDeps(Effect.gen(function* () {
130
+ // Check git is installed
131
+ yield* runGit(["--version"], cwd).pipe(Effect.catchTag("GitError", () => Effect.fail(new GitNotInstalledError({ message: "Git not found" }))));
132
+ const exists = yield* fs.exists(confluenceDir).pipe(Effect.catchAll(() => Effect.succeed(false)));
133
+ if (!exists) {
134
+ yield* fs.makeDirectory(confluenceDir, { recursive: true }).pipe(Effect.mapError(mapFsError));
135
+ }
136
+ const gitExists = yield* fs.exists(gitDir).pipe(Effect.catchAll(() => Effect.succeed(false)));
137
+ if (!gitExists) {
138
+ yield* runGit(["init"], confluenceDir);
139
+ // Configure local git user for commits (needed in CI environments)
140
+ yield* runGit(["config", "user.name", "Confluence Sync"], confluenceDir);
141
+ yield* runGit(["config", "user.email", "confluence-sync@local"], confluenceDir);
142
+ }
143
+ }));
144
+ const addAll = () => provideDeps(Effect.gen(function* () {
145
+ yield* ensureInitialized;
146
+ yield* runGit(["add", "."], confluenceDir);
147
+ }));
148
+ const commit = (options) => provideDeps(Effect.gen(function* () {
149
+ yield* ensureInitialized;
150
+ // Check for changes
151
+ const statusOutput = yield* runGitAllowEmpty(["status", "--porcelain"], confluenceDir);
152
+ if (statusOutput.trim() === "") {
153
+ return yield* Effect.fail(new GitNoChangesError());
154
+ }
155
+ const args = ["commit", "-m", options.message];
156
+ if (options.author) {
157
+ args.push("--author", `${options.author.name} <${options.author.email}>`);
158
+ }
159
+ if (options.date) {
160
+ args.push("--date", options.date.toISOString());
161
+ }
162
+ const output = yield* runGit(args, confluenceDir);
163
+ // Extract commit hash from output
164
+ const match = output.match(/\[[\w-]+\s+([a-f0-9]+)\]/);
165
+ return match?.[1] ?? output.trim().slice(0, 7);
166
+ }));
167
+ const status = () => provideDeps(Effect.gen(function* () {
168
+ yield* ensureInitialized;
169
+ const output = yield* runGitAllowEmpty(["status", "--porcelain"], confluenceDir);
170
+ const entries = parseGitStatus(output);
171
+ const conflictedFiles = getConflictedFiles(output);
172
+ return {
173
+ entries,
174
+ hasChanges: entries.length > 0,
175
+ hasConflicts: conflictedFiles.length > 0,
176
+ conflictedFiles
177
+ };
178
+ }));
179
+ const log = (options) => provideDeps(Effect.gen(function* () {
180
+ yield* ensureInitialized;
181
+ const args = ["log", `--format=${GIT_LOG_FORMAT}`];
182
+ if (options?.n !== undefined) {
183
+ args.push("-n", String(options.n));
184
+ }
185
+ if (options?.since) {
186
+ args.push("--since", options.since);
187
+ }
188
+ if (options?.file) {
189
+ args.push("--", options.file);
190
+ }
191
+ const output = yield* runGitAllowEmpty(args, confluenceDir);
192
+ return parseGitLog(output);
193
+ }));
194
+ const diff = (options) => provideDeps(Effect.gen(function* () {
195
+ yield* ensureInitialized;
196
+ const args = ["diff"];
197
+ if (options?.staged) {
198
+ args.push("--staged");
199
+ }
200
+ if (options?.commit) {
201
+ args.push(options.commit);
202
+ }
203
+ if (options?.commit2) {
204
+ args.push(options.commit2);
205
+ }
206
+ if (options?.file) {
207
+ args.push("--", options.file);
208
+ }
209
+ return yield* runGitAllowEmpty(args, confluenceDir);
210
+ }));
211
+ const hasConflicts = () => provideDeps(Effect.gen(function* () {
212
+ yield* ensureInitialized;
213
+ const output = yield* runGitAllowEmpty(["status", "--porcelain"], confluenceDir);
214
+ const conflicted = getConflictedFiles(output);
215
+ return conflicted.length > 0;
216
+ }));
217
+ const mergeContinue = () => provideDeps(Effect.gen(function* () {
218
+ yield* ensureInitialized;
219
+ // Check if there are still conflicts
220
+ const output = yield* runGitAllowEmpty(["status", "--porcelain"], confluenceDir);
221
+ const files = getConflictedFiles(output);
222
+ if (files.length > 0) {
223
+ return yield* Effect.fail(new GitMergeConflictError({ files }));
224
+ }
225
+ yield* runGit(["commit", "--no-edit"], confluenceDir);
226
+ }));
227
+ const syncFromDocs = (docsPath, trackedPaths) => provideDeps(Effect.gen(function* () {
228
+ yield* ensureInitialized;
229
+ const absoluteDocsPath = pathService.isAbsolute(docsPath)
230
+ ? docsPath
231
+ : pathService.join(cwd, docsPath);
232
+ // Skip if docsPath is inside .confluence/ - config validation ensures
233
+ // only ".confluence/docs" is allowed inside, which means no sync needed
234
+ if (absoluteDocsPath.startsWith(confluenceDir)) {
235
+ return;
236
+ }
237
+ // For each tracked path pattern, copy matching files
238
+ for (const pattern of trackedPaths) {
239
+ // Simple glob handling - for now just support **/*.md
240
+ if (pattern === "**/*.md") {
241
+ yield* copyMarkdownFilesFn(fs, pathService, absoluteDocsPath, confluenceDir);
242
+ }
243
+ else {
244
+ // Direct file/directory copy
245
+ const sourcePath = pathService.join(absoluteDocsPath, pattern);
246
+ const destPath = pathService.join(confluenceDir, pattern);
247
+ const exists = yield* fs.exists(sourcePath).pipe(Effect.catchAll(() => Effect.succeed(false)));
248
+ if (exists) {
249
+ const stat = yield* fs.stat(sourcePath).pipe(Effect.mapError(mapFsError));
250
+ if (stat.type === "Directory") {
251
+ yield* copyDirectoryFn(fs, pathService, sourcePath, destPath);
252
+ }
253
+ else {
254
+ yield* copyFileFn(fs, pathService, sourcePath, destPath);
255
+ }
256
+ }
257
+ }
258
+ }
259
+ }));
260
+ const syncToDocs = (docsPath, trackedPaths) => provideDeps(Effect.gen(function* () {
261
+ yield* ensureInitialized;
262
+ const absoluteDocsPath = pathService.isAbsolute(docsPath)
263
+ ? docsPath
264
+ : pathService.join(cwd, docsPath);
265
+ // Copy from .confluence/ back to docsPath
266
+ for (const pattern of trackedPaths) {
267
+ if (pattern === "**/*.md") {
268
+ yield* copyMarkdownFilesFn(fs, pathService, confluenceDir, absoluteDocsPath);
269
+ }
270
+ else {
271
+ const sourcePath = pathService.join(confluenceDir, pattern);
272
+ const destPath = pathService.join(absoluteDocsPath, pattern);
273
+ const exists = yield* fs.exists(sourcePath).pipe(Effect.catchAll(() => Effect.succeed(false)));
274
+ if (exists) {
275
+ const stat = yield* fs.stat(sourcePath).pipe(Effect.mapError(mapFsError));
276
+ if (stat.type === "Directory") {
277
+ yield* copyDirectoryFn(fs, pathService, sourcePath, destPath);
278
+ }
279
+ else {
280
+ yield* copyFileFn(fs, pathService, sourcePath, destPath);
281
+ }
282
+ }
283
+ }
284
+ }
285
+ }));
286
+ const getHead = () => provideDeps(Effect.gen(function* () {
287
+ yield* ensureInitialized;
288
+ const output = yield* runGit(["rev-parse", "HEAD"], confluenceDir);
289
+ return output.trim();
290
+ }));
291
+ const getCurrentBranch = () => provideDeps(Effect.gen(function* () {
292
+ yield* ensureInitialized;
293
+ const output = yield* runGit(["rev-parse", "--abbrev-ref", "HEAD"], confluenceDir);
294
+ return output.trim();
295
+ }));
296
+ const createBranch = (name) => provideDeps(Effect.gen(function* () {
297
+ yield* ensureInitialized;
298
+ yield* runGit(["branch", name], confluenceDir);
299
+ }));
300
+ const checkout = (ref) => provideDeps(Effect.gen(function* () {
301
+ yield* ensureInitialized;
302
+ yield* runGit(["checkout", ref], confluenceDir);
303
+ }));
304
+ const reset = (ref, options) => provideDeps(Effect.gen(function* () {
305
+ yield* ensureInitialized;
306
+ const args = ["reset"];
307
+ if (options?.hard)
308
+ args.push("--hard");
309
+ args.push(ref);
310
+ yield* runGit(args, confluenceDir);
311
+ }));
312
+ const deleteBranch = (name) => provideDeps(Effect.gen(function* () {
313
+ yield* ensureInitialized;
314
+ yield* runGit(["branch", "-D", name], confluenceDir);
315
+ }));
316
+ const getParent = (ref) => provideDeps(Effect.gen(function* () {
317
+ yield* ensureInitialized;
318
+ const output = yield* runGit(["rev-parse", `${ref}^`], confluenceDir);
319
+ return output.trim();
320
+ }));
321
+ const cherryPick = (ref, options) => provideDeps(Effect.gen(function* () {
322
+ yield* ensureInitialized;
323
+ const args = ["cherry-pick"];
324
+ if (options?.strategy) {
325
+ args.push("-X", options.strategy);
326
+ }
327
+ args.push(ref);
328
+ yield* runGit(args, confluenceDir);
329
+ }));
330
+ const getChangedFiles = (ref) => provideDeps(Effect.gen(function* () {
331
+ yield* ensureInitialized;
332
+ const output = yield* runGitAllowEmpty(["diff-tree", "--no-commit-id", "--name-only", "-r", ref], confluenceDir);
333
+ return output.trim().split("\n").filter(Boolean);
334
+ }));
335
+ const showFile = (ref, filePath) => provideDeps(Effect.gen(function* () {
336
+ yield* ensureInitialized;
337
+ const output = yield* runGit(["show", `${ref}:${filePath}`], confluenceDir);
338
+ return output;
339
+ }));
340
+ const amend = (options) => provideDeps(Effect.gen(function* () {
341
+ yield* ensureInitialized;
342
+ const args = ["commit", "--amend"];
343
+ if (options?.noEdit) {
344
+ args.push("--no-edit");
345
+ }
346
+ if (options?.message) {
347
+ args.push("-m", options.message);
348
+ }
349
+ yield* runGit(args, confluenceDir);
350
+ }));
351
+ const logRange = (from, to) => provideDeps(Effect.gen(function* () {
352
+ yield* ensureInitialized;
353
+ const output = yield* runGitAllowEmpty(["log", `--format=${GIT_LOG_FORMAT}`, `${from}..${to}`], confluenceDir);
354
+ return parseGitLog(output);
355
+ }));
356
+ const branchExists = (name) => provideDeps(Effect.gen(function* () {
357
+ yield* ensureInitialized;
358
+ const output = yield* runGitAllowEmpty(["branch", "--list", name], confluenceDir);
359
+ return output.trim().length > 0;
360
+ }));
361
+ const updateBranch = (name, ref) => provideDeps(Effect.gen(function* () {
362
+ yield* ensureInitialized;
363
+ yield* runGit(["branch", "-f", name, ref], confluenceDir);
364
+ }));
365
+ const merge = (branch, options) => provideDeps(Effect.gen(function* () {
366
+ yield* ensureInitialized;
367
+ const args = ["merge", branch];
368
+ if (options?.noCommit) {
369
+ args.push("--no-commit");
370
+ }
371
+ if (options?.message) {
372
+ args.push("-m", options.message);
373
+ }
374
+ yield* runGit(args, confluenceDir);
375
+ }));
376
+ const getDeletedFiles = (from, to, pathPrefix) => provideDeps(Effect.gen(function* () {
377
+ yield* ensureInitialized;
378
+ // git diff --name-only --diff-filter=D from..to -- pathPrefix
379
+ const args = ["diff", "--name-only", "--diff-filter=D", `${from}..${to}`];
380
+ if (pathPrefix) {
381
+ args.push("--", pathPrefix);
382
+ }
383
+ const output = yield* runGitAllowEmpty(args, confluenceDir);
384
+ return output.trim().split("\n").filter((line) => line.length > 0);
385
+ }));
386
+ const getFileContentAt = (ref, filePath) => provideDeps(Effect.gen(function* () {
387
+ yield* ensureInitialized;
388
+ // git show ref:filePath
389
+ return yield* runGit(["show", `${ref}:${filePath}`], confluenceDir);
390
+ }));
391
+ return GitService.of({
392
+ validateGit,
393
+ isInitialized,
394
+ init,
395
+ addAll,
396
+ commit,
397
+ status,
398
+ log,
399
+ diff,
400
+ hasConflicts,
401
+ mergeContinue,
402
+ syncFromDocs,
403
+ syncToDocs,
404
+ getHead,
405
+ getCurrentBranch,
406
+ createBranch,
407
+ checkout,
408
+ reset,
409
+ deleteBranch,
410
+ getParent,
411
+ cherryPick,
412
+ getChangedFiles,
413
+ showFile,
414
+ amend,
415
+ logRange,
416
+ branchExists,
417
+ updateBranch,
418
+ merge,
419
+ getDeletedFiles,
420
+ getFileContentAt
421
+ });
422
+ });
423
+ // Layer with deps - requires FileSystem, Path, CommandExecutor
424
+ const layerWithDeps = Layer.effect(GitService, make);
425
+ /**
426
+ * Create GitService layer with all platform dependencies.
427
+ *
428
+ * @category Layers
429
+ */
430
+ export const layer = layerWithDeps.pipe(Layer.provide(GitDepsLive));
431
+ //# sourceMappingURL=GitService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GitService.js","sourceRoot":"","sources":["../src/GitService.ts"],"names":[],"mappings":"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"}