@paysdoc/devplatform 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (243) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +122 -0
  3. package/dist/git/bootstrapIdentity.d.ts +50 -0
  4. package/dist/git/bootstrapIdentity.d.ts.map +1 -0
  5. package/dist/git/bootstrapIdentity.js +72 -0
  6. package/dist/git/bootstrapIdentity.js.map +1 -0
  7. package/dist/git/branchOps.d.ts +27 -0
  8. package/dist/git/branchOps.d.ts.map +1 -0
  9. package/dist/git/branchOps.js +91 -0
  10. package/dist/git/branchOps.js.map +1 -0
  11. package/dist/git/claimOps.d.ts +40 -0
  12. package/dist/git/claimOps.d.ts.map +1 -0
  13. package/dist/git/claimOps.js +44 -0
  14. package/dist/git/claimOps.js.map +1 -0
  15. package/dist/git/commitOps.d.ts +35 -0
  16. package/dist/git/commitOps.d.ts.map +1 -0
  17. package/dist/git/commitOps.js +131 -0
  18. package/dist/git/commitOps.js.map +1 -0
  19. package/dist/git/consoleLogger.d.ts +8 -0
  20. package/dist/git/consoleLogger.d.ts.map +1 -0
  21. package/dist/git/consoleLogger.js +9 -0
  22. package/dist/git/consoleLogger.js.map +1 -0
  23. package/dist/git/gitContext.d.ts +150 -0
  24. package/dist/git/gitContext.d.ts.map +1 -0
  25. package/dist/git/gitContext.js +405 -0
  26. package/dist/git/gitContext.js.map +1 -0
  27. package/dist/git/gitReadOps.d.ts +33 -0
  28. package/dist/git/gitReadOps.d.ts.map +1 -0
  29. package/dist/git/gitReadOps.js +38 -0
  30. package/dist/git/gitReadOps.js.map +1 -0
  31. package/dist/git/index.d.ts +49 -0
  32. package/dist/git/index.d.ts.map +1 -0
  33. package/dist/git/index.js +44 -0
  34. package/dist/git/index.js.map +1 -0
  35. package/dist/git/processCleanup.d.ts +7 -0
  36. package/dist/git/processCleanup.d.ts.map +1 -0
  37. package/dist/git/processCleanup.js +45 -0
  38. package/dist/git/processCleanup.js.map +1 -0
  39. package/dist/git/remoteOps.d.ts +25 -0
  40. package/dist/git/remoteOps.d.ts.map +1 -0
  41. package/dist/git/remoteOps.js +30 -0
  42. package/dist/git/remoteOps.js.map +1 -0
  43. package/dist/git/repoWorkspace.d.ts +72 -0
  44. package/dist/git/repoWorkspace.d.ts.map +1 -0
  45. package/dist/git/repoWorkspace.js +85 -0
  46. package/dist/git/repoWorkspace.js.map +1 -0
  47. package/dist/git/types.d.ts +182 -0
  48. package/dist/git/types.d.ts.map +1 -0
  49. package/dist/git/types.js +10 -0
  50. package/dist/git/types.js.map +1 -0
  51. package/dist/git/workingDirectoryGuard.d.ts +39 -0
  52. package/dist/git/workingDirectoryGuard.d.ts.map +1 -0
  53. package/dist/git/workingDirectoryGuard.js +53 -0
  54. package/dist/git/workingDirectoryGuard.js.map +1 -0
  55. package/dist/git/worktreeCreateOps.d.ts +45 -0
  56. package/dist/git/worktreeCreateOps.d.ts.map +1 -0
  57. package/dist/git/worktreeCreateOps.js +208 -0
  58. package/dist/git/worktreeCreateOps.js.map +1 -0
  59. package/dist/git/worktreeProbeOps.d.ts +17 -0
  60. package/dist/git/worktreeProbeOps.d.ts.map +1 -0
  61. package/dist/git/worktreeProbeOps.js +66 -0
  62. package/dist/git/worktreeProbeOps.js.map +1 -0
  63. package/dist/git/worktreeQueryOps.d.ts +45 -0
  64. package/dist/git/worktreeQueryOps.d.ts.map +1 -0
  65. package/dist/git/worktreeQueryOps.js +129 -0
  66. package/dist/git/worktreeQueryOps.js.map +1 -0
  67. package/dist/git/worktreeRemoveOps.d.ts +27 -0
  68. package/dist/git/worktreeRemoveOps.d.ts.map +1 -0
  69. package/dist/git/worktreeRemoveOps.js +132 -0
  70. package/dist/git/worktreeRemoveOps.js.map +1 -0
  71. package/dist/git/worktreeResetOps.d.ts +18 -0
  72. package/dist/git/worktreeResetOps.d.ts.map +1 -0
  73. package/dist/git/worktreeResetOps.js +68 -0
  74. package/dist/git/worktreeResetOps.js.map +1 -0
  75. package/dist/index.d.ts +13 -0
  76. package/dist/index.d.ts.map +1 -0
  77. package/dist/index.js +13 -0
  78. package/dist/index.js.map +1 -0
  79. package/dist/providers/forgeProviders.d.ts +72 -0
  80. package/dist/providers/forgeProviders.d.ts.map +1 -0
  81. package/dist/providers/forgeProviders.js +112 -0
  82. package/dist/providers/forgeProviders.js.map +1 -0
  83. package/dist/providers/github/appAuth.d.ts +70 -0
  84. package/dist/providers/github/appAuth.d.ts.map +1 -0
  85. package/dist/providers/github/appAuth.js +243 -0
  86. package/dist/providers/github/appAuth.js.map +1 -0
  87. package/dist/providers/github/cloneUrl.d.ts +12 -0
  88. package/dist/providers/github/cloneUrl.d.ts.map +1 -0
  89. package/dist/providers/github/cloneUrl.js +20 -0
  90. package/dist/providers/github/cloneUrl.js.map +1 -0
  91. package/dist/providers/github/commands/boardCommands.d.ts +22 -0
  92. package/dist/providers/github/commands/boardCommands.d.ts.map +1 -0
  93. package/dist/providers/github/commands/boardCommands.js +66 -0
  94. package/dist/providers/github/commands/boardCommands.js.map +1 -0
  95. package/dist/providers/github/commands/issueCommands.d.ts +21 -0
  96. package/dist/providers/github/commands/issueCommands.d.ts.map +1 -0
  97. package/dist/providers/github/commands/issueCommands.js +50 -0
  98. package/dist/providers/github/commands/issueCommands.js.map +1 -0
  99. package/dist/providers/github/commands/labelCommands.d.ts +3 -0
  100. package/dist/providers/github/commands/labelCommands.d.ts.map +1 -0
  101. package/dist/providers/github/commands/labelCommands.js +8 -0
  102. package/dist/providers/github/commands/labelCommands.js.map +1 -0
  103. package/dist/providers/github/commands/prCommands.d.ts +14 -0
  104. package/dist/providers/github/commands/prCommands.d.ts.map +1 -0
  105. package/dist/providers/github/commands/prCommands.js +46 -0
  106. package/dist/providers/github/commands/prCommands.js.map +1 -0
  107. package/dist/providers/github/commands/secretCommands.d.ts +2 -0
  108. package/dist/providers/github/commands/secretCommands.d.ts.map +1 -0
  109. package/dist/providers/github/commands/secretCommands.js +5 -0
  110. package/dist/providers/github/commands/secretCommands.js.map +1 -0
  111. package/dist/providers/github/contextBinding.d.ts +11 -0
  112. package/dist/providers/github/contextBinding.d.ts.map +1 -0
  113. package/dist/providers/github/contextBinding.js +15 -0
  114. package/dist/providers/github/contextBinding.js.map +1 -0
  115. package/dist/providers/github/domain/issue.d.ts +94 -0
  116. package/dist/providers/github/domain/issue.d.ts.map +1 -0
  117. package/dist/providers/github/domain/issue.js +7 -0
  118. package/dist/providers/github/domain/issue.js.map +1 -0
  119. package/dist/providers/github/domain/pullRequest.d.ts +55 -0
  120. package/dist/providers/github/domain/pullRequest.d.ts.map +1 -0
  121. package/dist/providers/github/domain/pullRequest.js +9 -0
  122. package/dist/providers/github/domain/pullRequest.js.map +1 -0
  123. package/dist/providers/github/ghAuthToken.d.ts +28 -0
  124. package/dist/providers/github/ghAuthToken.d.ts.map +1 -0
  125. package/dist/providers/github/ghAuthToken.js +39 -0
  126. package/dist/providers/github/ghAuthToken.js.map +1 -0
  127. package/dist/providers/github/ghCommandRunner.d.ts +20 -0
  128. package/dist/providers/github/ghCommandRunner.d.ts.map +1 -0
  129. package/dist/providers/github/ghCommandRunner.js +21 -0
  130. package/dist/providers/github/ghCommandRunner.js.map +1 -0
  131. package/dist/providers/github/ghIssueApi.d.ts +29 -0
  132. package/dist/providers/github/ghIssueApi.d.ts.map +1 -0
  133. package/dist/providers/github/ghIssueApi.js +37 -0
  134. package/dist/providers/github/ghIssueApi.js.map +1 -0
  135. package/dist/providers/github/ghIssueParsers.d.ts +28 -0
  136. package/dist/providers/github/ghIssueParsers.d.ts.map +1 -0
  137. package/dist/providers/github/ghIssueParsers.js +105 -0
  138. package/dist/providers/github/ghIssueParsers.js.map +1 -0
  139. package/dist/providers/github/ghPrApi.d.ts +27 -0
  140. package/dist/providers/github/ghPrApi.d.ts.map +1 -0
  141. package/dist/providers/github/ghPrApi.js +32 -0
  142. package/dist/providers/github/ghPrApi.js.map +1 -0
  143. package/dist/providers/github/ghPrParsers.d.ts +57 -0
  144. package/dist/providers/github/ghPrParsers.d.ts.map +1 -0
  145. package/dist/providers/github/ghPrParsers.js +135 -0
  146. package/dist/providers/github/ghPrParsers.js.map +1 -0
  147. package/dist/providers/github/ghRepoApi.d.ts +33 -0
  148. package/dist/providers/github/ghRepoApi.d.ts.map +1 -0
  149. package/dist/providers/github/ghRepoApi.js +89 -0
  150. package/dist/providers/github/ghRepoApi.js.map +1 -0
  151. package/dist/providers/github/githubBoardManager.d.ts +39 -0
  152. package/dist/providers/github/githubBoardManager.d.ts.map +1 -0
  153. package/dist/providers/github/githubBoardManager.js +166 -0
  154. package/dist/providers/github/githubBoardManager.js.map +1 -0
  155. package/dist/providers/github/githubCodeHost.d.ts +73 -0
  156. package/dist/providers/github/githubCodeHost.d.ts.map +1 -0
  157. package/dist/providers/github/githubCodeHost.js +217 -0
  158. package/dist/providers/github/githubCodeHost.js.map +1 -0
  159. package/dist/providers/github/githubIdentity.d.ts +51 -0
  160. package/dist/providers/github/githubIdentity.d.ts.map +1 -0
  161. package/dist/providers/github/githubIdentity.js +110 -0
  162. package/dist/providers/github/githubIdentity.js.map +1 -0
  163. package/dist/providers/github/githubIssueTracker.d.ts +69 -0
  164. package/dist/providers/github/githubIssueTracker.d.ts.map +1 -0
  165. package/dist/providers/github/githubIssueTracker.js +209 -0
  166. package/dist/providers/github/githubIssueTracker.js.map +1 -0
  167. package/dist/providers/github/githubTokenProvider.d.ts +41 -0
  168. package/dist/providers/github/githubTokenProvider.d.ts.map +1 -0
  169. package/dist/providers/github/githubTokenProvider.js +51 -0
  170. package/dist/providers/github/githubTokenProvider.js.map +1 -0
  171. package/dist/providers/github/index.d.ts +10 -0
  172. package/dist/providers/github/index.d.ts.map +1 -0
  173. package/dist/providers/github/index.js +5 -0
  174. package/dist/providers/github/index.js.map +1 -0
  175. package/dist/providers/github/mappers.d.ts +40 -0
  176. package/dist/providers/github/mappers.d.ts.map +1 -0
  177. package/dist/providers/github/mappers.js +103 -0
  178. package/dist/providers/github/mappers.js.map +1 -0
  179. package/dist/providers/github/tokenResolver.d.ts +37 -0
  180. package/dist/providers/github/tokenResolver.d.ts.map +1 -0
  181. package/dist/providers/github/tokenResolver.js +43 -0
  182. package/dist/providers/github/tokenResolver.js.map +1 -0
  183. package/dist/providers/gitlab/gitlabApiClient.d.ts +45 -0
  184. package/dist/providers/gitlab/gitlabApiClient.d.ts.map +1 -0
  185. package/dist/providers/gitlab/gitlabApiClient.js +95 -0
  186. package/dist/providers/gitlab/gitlabApiClient.js.map +1 -0
  187. package/dist/providers/gitlab/gitlabBoardManager.d.ts +11 -0
  188. package/dist/providers/gitlab/gitlabBoardManager.d.ts.map +1 -0
  189. package/dist/providers/gitlab/gitlabBoardManager.js +27 -0
  190. package/dist/providers/gitlab/gitlabBoardManager.js.map +1 -0
  191. package/dist/providers/gitlab/gitlabCodeHost.d.ts +49 -0
  192. package/dist/providers/gitlab/gitlabCodeHost.d.ts.map +1 -0
  193. package/dist/providers/gitlab/gitlabCodeHost.js +109 -0
  194. package/dist/providers/gitlab/gitlabCodeHost.js.map +1 -0
  195. package/dist/providers/gitlab/gitlabTypes.d.ts +46 -0
  196. package/dist/providers/gitlab/gitlabTypes.d.ts.map +1 -0
  197. package/dist/providers/gitlab/gitlabTypes.js +6 -0
  198. package/dist/providers/gitlab/gitlabTypes.js.map +1 -0
  199. package/dist/providers/gitlab/index.d.ts +5 -0
  200. package/dist/providers/gitlab/index.d.ts.map +1 -0
  201. package/dist/providers/gitlab/index.js +4 -0
  202. package/dist/providers/gitlab/index.js.map +1 -0
  203. package/dist/providers/gitlab/mappers.d.ts +26 -0
  204. package/dist/providers/gitlab/mappers.d.ts.map +1 -0
  205. package/dist/providers/gitlab/mappers.js +63 -0
  206. package/dist/providers/gitlab/mappers.js.map +1 -0
  207. package/dist/providers/index.d.ts +7 -0
  208. package/dist/providers/index.d.ts.map +1 -0
  209. package/dist/providers/index.js +7 -0
  210. package/dist/providers/index.js.map +1 -0
  211. package/dist/providers/jira/adfConverter.d.ts +32 -0
  212. package/dist/providers/jira/adfConverter.d.ts.map +1 -0
  213. package/dist/providers/jira/adfConverter.js +144 -0
  214. package/dist/providers/jira/adfConverter.js.map +1 -0
  215. package/dist/providers/jira/index.d.ts +8 -0
  216. package/dist/providers/jira/index.d.ts.map +1 -0
  217. package/dist/providers/jira/index.js +5 -0
  218. package/dist/providers/jira/index.js.map +1 -0
  219. package/dist/providers/jira/jiraApiClient.d.ts +42 -0
  220. package/dist/providers/jira/jiraApiClient.d.ts.map +1 -0
  221. package/dist/providers/jira/jiraApiClient.js +84 -0
  222. package/dist/providers/jira/jiraApiClient.js.map +1 -0
  223. package/dist/providers/jira/jiraBoardManager.d.ts +11 -0
  224. package/dist/providers/jira/jiraBoardManager.d.ts.map +1 -0
  225. package/dist/providers/jira/jiraBoardManager.js +27 -0
  226. package/dist/providers/jira/jiraBoardManager.js.map +1 -0
  227. package/dist/providers/jira/jiraIssueTracker.d.ts +53 -0
  228. package/dist/providers/jira/jiraIssueTracker.d.ts.map +1 -0
  229. package/dist/providers/jira/jiraIssueTracker.js +231 -0
  230. package/dist/providers/jira/jiraIssueTracker.js.map +1 -0
  231. package/dist/providers/jira/jiraTypes.d.ts +61 -0
  232. package/dist/providers/jira/jiraTypes.d.ts.map +1 -0
  233. package/dist/providers/jira/jiraTypes.js +6 -0
  234. package/dist/providers/jira/jiraTypes.js.map +1 -0
  235. package/dist/providers/types.d.ts +271 -0
  236. package/dist/providers/types.d.ts.map +1 -0
  237. package/dist/providers/types.js +52 -0
  238. package/dist/providers/types.js.map +1 -0
  239. package/dist/providers/workspaceValidation.d.ts +18 -0
  240. package/dist/providers/workspaceValidation.d.ts.map +1 -0
  241. package/dist/providers/workspaceValidation.js +37 -0
  242. package/dist/providers/workspaceValidation.js.map +1 -0
  243. package/package.json +66 -0
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Low-level GitLab REST API v4 client using synchronous HTTP calls.
3
+ * Uses spawnSync with curl to match the synchronous CodeHost interface contract.
4
+ *
5
+ * Configuration is INJECTED (#818) — never read from the environment. Logs via the
6
+ * `Logger` port (adws/gitContext/types.ts), defaulting to `consoleLogger`.
7
+ * `runCurl` is the hermetic transport test seam; production uses a real curl.
8
+ */
9
+ import { spawnSync } from 'child_process';
10
+ import { consoleLogger } from '../../git/consoleLogger.js';
11
+ const defaultCurlRunner = (args) => spawnSync('curl', [...args], {
12
+ encoding: 'utf-8',
13
+ stdio: ['pipe', 'pipe', 'pipe'],
14
+ });
15
+ export class GitLabApiClient {
16
+ instanceUrl;
17
+ token;
18
+ logger;
19
+ runCurl;
20
+ constructor(config, deps = {}) {
21
+ this.instanceUrl = config.instanceUrl.replace(/\/+$/, '');
22
+ this.token = config.token;
23
+ this.logger = deps.logger ?? consoleLogger;
24
+ this.runCurl = deps.runCurl ?? defaultCurlRunner;
25
+ }
26
+ request(method, path, body) {
27
+ const url = `${this.instanceUrl}/api/v4/${path}`;
28
+ const args = [
29
+ '-s', '-S',
30
+ '-X', method,
31
+ '-H', `PRIVATE-TOKEN: ${this.token}`,
32
+ '-H', 'Content-Type: application/json',
33
+ '-H', 'Accept: application/json',
34
+ ];
35
+ if (body !== undefined) {
36
+ args.push('-d', JSON.stringify(body));
37
+ }
38
+ args.push(url);
39
+ const result = this.runCurl(args);
40
+ if (result.error) {
41
+ const message = `GitLab API ${method} ${path} failed: ${result.error.message}`;
42
+ this.logger(message, 'error');
43
+ throw new Error(message);
44
+ }
45
+ if (result.status !== 0) {
46
+ const message = `GitLab API ${method} ${path} curl exited with code ${result.status}: ${result.stderr}`;
47
+ this.logger(message, 'error');
48
+ throw new Error(message);
49
+ }
50
+ const stdout = result.stdout.trim();
51
+ if (!stdout) {
52
+ return undefined;
53
+ }
54
+ const parsed = JSON.parse(stdout);
55
+ // GitLab returns error objects with a `message` or `error` field
56
+ const errorObj = parsed;
57
+ if (errorObj && typeof errorObj === 'object' && ('error' in errorObj || 'message' in errorObj)) {
58
+ const errorMessage = (errorObj.error ?? errorObj.message);
59
+ if (typeof errorMessage === 'string' && errorMessage.toLowerCase().includes('unauthorized')) {
60
+ const msg = `GitLab API ${method} ${path} failed with 401: ${errorMessage}`;
61
+ this.logger(msg, 'error');
62
+ throw new Error(msg);
63
+ }
64
+ if (typeof errorMessage === 'string' && errorMessage === '404 Not Found') {
65
+ const msg = `GitLab API ${method} ${path} failed with 404: ${errorMessage}`;
66
+ this.logger(msg, 'error');
67
+ throw new Error(msg);
68
+ }
69
+ }
70
+ return parsed;
71
+ }
72
+ encodePath(projectPath) {
73
+ return encodeURIComponent(projectPath);
74
+ }
75
+ getProject(projectPath) {
76
+ return this.request('GET', `projects/${this.encodePath(projectPath)}`);
77
+ }
78
+ createMergeRequest(projectPath, payload) {
79
+ return this.request('POST', `projects/${this.encodePath(projectPath)}/merge_requests`, payload);
80
+ }
81
+ getMergeRequest(projectPath, mrIid) {
82
+ return this.request('GET', `projects/${this.encodePath(projectPath)}/merge_requests/${mrIid}`);
83
+ }
84
+ createNote(projectPath, mrIid, body) {
85
+ return this.request('POST', `projects/${this.encodePath(projectPath)}/merge_requests/${mrIid}/notes`, { body });
86
+ }
87
+ listDiscussions(projectPath, mrIid) {
88
+ return this.request('GET', `projects/${this.encodePath(projectPath)}/merge_requests/${mrIid}/discussions`);
89
+ }
90
+ listMergeRequests(projectPath, state) {
91
+ const query = state ? `?state=${state}` : '';
92
+ return this.request('GET', `projects/${this.encodePath(projectPath)}/merge_requests${query}`);
93
+ }
94
+ }
95
+ //# sourceMappingURL=gitlabApiClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitlabApiClient.js","sourceRoot":"","sources":["../../../src/providers/gitlab/gitlabApiClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * GitLab stub implementation of the BoardManager provider interface.
3
+ * All methods throw — GitLab board management is not yet supported.
4
+ */
5
+ import type { BoardManager } from '../types.js';
6
+ /**
7
+ * Factory function to create a GitLab BoardManager stub.
8
+ * @returns A BoardManager instance that throws for all operations.
9
+ */
10
+ export declare function createGitLabBoardManager(): BoardManager;
11
+ //# sourceMappingURL=gitlabBoardManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitlabBoardManager.d.ts","sourceRoot":"","sources":["../../../src/providers/gitlab/gitlabBoardManager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAoBhD;;;GAGG;AACH,wBAAgB,wBAAwB,IAAI,YAAY,CAEvD"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * GitLab stub implementation of the BoardManager provider interface.
3
+ * All methods throw — GitLab board management is not yet supported.
4
+ */
5
+ /**
6
+ * Stub BoardManager for GitLab.
7
+ * Throws "not implemented" for all methods.
8
+ */
9
+ class GitLabBoardManager {
10
+ async findBoard() {
11
+ throw new Error('BoardManager not implemented for GitLab');
12
+ }
13
+ async createBoard(_name) {
14
+ throw new Error('BoardManager not implemented for GitLab');
15
+ }
16
+ async ensureColumns(_boardId) {
17
+ throw new Error('BoardManager not implemented for GitLab');
18
+ }
19
+ }
20
+ /**
21
+ * Factory function to create a GitLab BoardManager stub.
22
+ * @returns A BoardManager instance that throws for all operations.
23
+ */
24
+ export function createGitLabBoardManager() {
25
+ return new GitLabBoardManager();
26
+ }
27
+ //# sourceMappingURL=gitlabBoardManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitlabBoardManager.js","sourceRoot":"","sources":["../../../src/providers/gitlab/gitlabBoardManager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;;GAGG;AACH,MAAM,kBAAkB;IACtB,KAAK,CAAC,SAAS;QACb,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,KAAa;QAC7B,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,QAAgB;QAClC,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC7D,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,UAAU,wBAAwB;IACtC,OAAO,IAAI,kBAAkB,EAAE,CAAC;AAClC,CAAC"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * GitLab implementation of the CodeHost interface.
3
+ * Delegates to GitLabApiClient for synchronous API calls via curl.
4
+ *
5
+ * The factory takes INJECTED configuration (#818) — never reads the environment.
6
+ */
7
+ import { type CodeHost, type CreatePROptions, type ForgeActionResult, type MergedPullRequestRecord, type PullRequest, type PullRequestRecord, type PullRequestResult, type PullRequestSummary, type RepoIdentifier, type ReviewComment } from '../types.js';
8
+ import { GitLabApiClient, type GitLabConfig, type GitLabApiClientDeps } from './gitlabApiClient.js';
9
+ /**
10
+ * GitLab-specific implementation of the CodeHost interface.
11
+ * Bound to a specific repository at construction time.
12
+ */
13
+ export declare class GitLabCodeHost implements CodeHost {
14
+ private readonly repoId;
15
+ private readonly client;
16
+ private readonly projectPath;
17
+ constructor(repoId: RepoIdentifier, client: GitLabApiClient);
18
+ /** Returns the bound RepoIdentifier. */
19
+ getRepoIdentifier(): RepoIdentifier;
20
+ /** Fetches the default branch from the GitLab project. */
21
+ getDefaultBranch(): string;
22
+ /** Fetches MR details and maps to PullRequest. */
23
+ fetchPullRequest(prNumber: number): PullRequest;
24
+ /** Posts a comment (note) on the specified MR. */
25
+ commentOnPullRequest(prNumber: number, body: string): void;
26
+ /** Fetches review comments from MR discussions. */
27
+ fetchReviewComments(prNumber: number): ReviewComment[];
28
+ /** Lists open MRs and maps to PullRequest[]. */
29
+ listOpenPullRequests(): PullRequest[];
30
+ /** Creates a pull request (MR) and returns its URL and number. */
31
+ createPullRequest(options: CreatePROptions): PullRequestResult;
32
+ findPullRequestByBranch(): PullRequestSummary | null;
33
+ isPullRequestApproved(): boolean;
34
+ approvePullRequest(): ForgeActionResult;
35
+ mergePullRequest(): ForgeActionResult;
36
+ setSecret(): void;
37
+ listMergedPullRequests(): readonly MergedPullRequestRecord[];
38
+ listPullRequests(): readonly PullRequestRecord[];
39
+ getAuthenticatedUser(): string | null;
40
+ canApprovePullRequests(): boolean;
41
+ }
42
+ /**
43
+ * Creates a GitLabCodeHost bound to `repoId` from INJECTED configuration (#818).
44
+ * Reads no environment; ADW's wiring (`repoContext.ts`) supplies `config`
45
+ * from GITLAB_TOKEN / GITLAB_INSTANCE_URL and its own logger. `deps.logger`
46
+ * defaults to `consoleLogger`, `deps.runCurl` to a real curl.
47
+ */
48
+ export declare function createGitLabCodeHost(repoId: RepoIdentifier, config: GitLabConfig, deps?: GitLabApiClientDeps): CodeHost;
49
+ //# sourceMappingURL=gitlabCodeHost.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitlabCodeHost.d.ts","sourceRoot":"","sources":["../../../src/providers/gitlab/gitlabCodeHost.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,uBAAuB,EAC5B,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,aAAa,EAEnB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,eAAe,EAAE,KAAK,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAOpG;;;GAGG;AACH,qBAAa,cAAe,YAAW,QAAQ;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;IACxC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;gBAEzB,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,eAAe;IAM3D,wCAAwC;IACxC,iBAAiB,IAAI,cAAc;IAInC,0DAA0D;IAC1D,gBAAgB,IAAI,MAAM;IAK1B,kDAAkD;IAClD,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW;IAK/C,kDAAkD;IAClD,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAI1D,mDAAmD;IACnD,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,EAAE;IAKtD,gDAAgD;IAChD,oBAAoB,IAAI,WAAW,EAAE;IAKrC,kEAAkE;IAClE,iBAAiB,CAAC,OAAO,EAAE,eAAe,GAAG,iBAAiB;IAU9D,uBAAuB,IAAI,kBAAkB,GAAG,IAAI;IAIpD,qBAAqB,IAAI,OAAO;IAIhC,kBAAkB,IAAI,iBAAiB;IAIvC,gBAAgB,IAAI,iBAAiB;IAIrC,SAAS,IAAI,IAAI;IAIjB,sBAAsB,IAAI,SAAS,uBAAuB,EAAE;IAI5D,gBAAgB,IAAI,SAAS,iBAAiB,EAAE;IAIhD,oBAAoB,IAAI,MAAM,GAAG,IAAI;IAIrC,sBAAsB,IAAI,OAAO;CAGlC;AAYD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,GAAE,mBAAwB,GAAG,QAAQ,CAI3H"}
@@ -0,0 +1,109 @@
1
+ /**
2
+ * GitLab implementation of the CodeHost interface.
3
+ * Delegates to GitLabApiClient for synchronous API calls via curl.
4
+ *
5
+ * The factory takes INJECTED configuration (#818) — never reads the environment.
6
+ */
7
+ import { validateRepoIdentifier, } from '../types.js';
8
+ import { GitLabApiClient } from './gitlabApiClient.js';
9
+ import { mapGitLabMRToPullRequest, mapGitLabDiscussionsToReviewComments, toProjectPath, } from './mappers.js';
10
+ /**
11
+ * GitLab-specific implementation of the CodeHost interface.
12
+ * Bound to a specific repository at construction time.
13
+ */
14
+ export class GitLabCodeHost {
15
+ repoId;
16
+ client;
17
+ projectPath;
18
+ constructor(repoId, client) {
19
+ this.repoId = repoId;
20
+ this.client = client;
21
+ this.projectPath = toProjectPath(repoId);
22
+ }
23
+ /** Returns the bound RepoIdentifier. */
24
+ getRepoIdentifier() {
25
+ return this.repoId;
26
+ }
27
+ /** Fetches the default branch from the GitLab project. */
28
+ getDefaultBranch() {
29
+ const project = this.client.getProject(this.projectPath);
30
+ return project.default_branch;
31
+ }
32
+ /** Fetches MR details and maps to PullRequest. */
33
+ fetchPullRequest(prNumber) {
34
+ const mr = this.client.getMergeRequest(this.projectPath, prNumber);
35
+ return mapGitLabMRToPullRequest(mr);
36
+ }
37
+ /** Posts a comment (note) on the specified MR. */
38
+ commentOnPullRequest(prNumber, body) {
39
+ this.client.createNote(this.projectPath, prNumber, body);
40
+ }
41
+ /** Fetches review comments from MR discussions. */
42
+ fetchReviewComments(prNumber) {
43
+ const discussions = this.client.listDiscussions(this.projectPath, prNumber);
44
+ return mapGitLabDiscussionsToReviewComments(discussions);
45
+ }
46
+ /** Lists open MRs and maps to PullRequest[]. */
47
+ listOpenPullRequests() {
48
+ const mrs = this.client.listMergeRequests(this.projectPath, 'opened');
49
+ return [...mrs].map(mapGitLabMRToPullRequest);
50
+ }
51
+ /** Creates a pull request (MR) and returns its URL and number. */
52
+ createPullRequest(options) {
53
+ const mr = this.client.createMergeRequest(this.projectPath, {
54
+ source_branch: options.sourceBranch,
55
+ target_branch: options.targetBranch,
56
+ title: options.title,
57
+ description: options.body,
58
+ });
59
+ return { url: mr.web_url, number: mr.iid };
60
+ }
61
+ findPullRequestByBranch() {
62
+ throw new Error('GitLabCodeHost.findPullRequestByBranch is not implemented');
63
+ }
64
+ isPullRequestApproved() {
65
+ throw new Error('GitLabCodeHost.isPullRequestApproved is not implemented');
66
+ }
67
+ approvePullRequest() {
68
+ throw new Error('GitLabCodeHost.approvePullRequest is not implemented');
69
+ }
70
+ mergePullRequest() {
71
+ throw new Error('GitLabCodeHost.mergePullRequest is not implemented');
72
+ }
73
+ setSecret() {
74
+ throw new Error('GitLabCodeHost.setSecret is not implemented');
75
+ }
76
+ listMergedPullRequests() {
77
+ throw new Error('GitLabCodeHost.listMergedPullRequests is not implemented');
78
+ }
79
+ listPullRequests() {
80
+ throw new Error('GitLabCodeHost.listPullRequests is not implemented');
81
+ }
82
+ getAuthenticatedUser() {
83
+ throw new Error('GitLabCodeHost.getAuthenticatedUser is not implemented');
84
+ }
85
+ canApprovePullRequests() {
86
+ throw new Error('GitLabCodeHost.canApprovePullRequests is not implemented');
87
+ }
88
+ }
89
+ /** Throws a library-facing message when `config` is missing a required field. The env-flavoured operator message lives in ADW's wiring (`repoContext.ts`), not here. */
90
+ function validateGitLabConfig(config) {
91
+ if (!config.token?.trim()) {
92
+ throw new Error('GitLab code host requires a non-empty token');
93
+ }
94
+ if (!config.instanceUrl?.trim()) {
95
+ throw new Error('GitLab code host requires a non-empty instanceUrl');
96
+ }
97
+ }
98
+ /**
99
+ * Creates a GitLabCodeHost bound to `repoId` from INJECTED configuration (#818).
100
+ * Reads no environment; ADW's wiring (`repoContext.ts`) supplies `config`
101
+ * from GITLAB_TOKEN / GITLAB_INSTANCE_URL and its own logger. `deps.logger`
102
+ * defaults to `consoleLogger`, `deps.runCurl` to a real curl.
103
+ */
104
+ export function createGitLabCodeHost(repoId, config, deps = {}) {
105
+ validateRepoIdentifier(repoId);
106
+ validateGitLabConfig(config);
107
+ return new GitLabCodeHost(repoId, new GitLabApiClient(config, deps));
108
+ }
109
+ //# sourceMappingURL=gitlabCodeHost.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitlabCodeHost.js","sourceRoot":"","sources":["../../../src/providers/gitlab/gitlabCodeHost.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * GitLab REST API v4 response types.
3
+ * Internal to the GitLab provider module.
4
+ */
5
+ export interface GitLabUser {
6
+ readonly id: number;
7
+ readonly username: string;
8
+ readonly name: string;
9
+ }
10
+ export interface GitLabProject {
11
+ readonly id: number;
12
+ readonly default_branch: string;
13
+ readonly path_with_namespace: string;
14
+ }
15
+ export interface GitLabMergeRequest {
16
+ readonly iid: number;
17
+ readonly title: string;
18
+ readonly description: string;
19
+ readonly source_branch: string;
20
+ readonly target_branch: string;
21
+ readonly web_url: string;
22
+ readonly state: string;
23
+ }
24
+ export interface GitLabNotePosition {
25
+ readonly new_path?: string;
26
+ readonly new_line?: number | null;
27
+ }
28
+ export interface GitLabNote {
29
+ readonly id: number;
30
+ readonly body: string;
31
+ readonly author: GitLabUser;
32
+ readonly created_at: string;
33
+ readonly type: string | null;
34
+ readonly position?: GitLabNotePosition;
35
+ }
36
+ export interface GitLabDiscussion {
37
+ readonly id: string;
38
+ readonly notes: readonly GitLabNote[];
39
+ }
40
+ export interface GitLabCreateMRPayload {
41
+ readonly source_branch: string;
42
+ readonly target_branch: string;
43
+ readonly title: string;
44
+ readonly description: string;
45
+ }
46
+ //# sourceMappingURL=gitlabTypes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitlabTypes.d.ts","sourceRoot":"","sources":["../../../src/providers/gitlab/gitlabTypes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;CACtC;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,kBAAkB,CAAC;CACxC;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,CAAC;CACvC;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * GitLab REST API v4 response types.
3
+ * Internal to the GitLab provider module.
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=gitlabTypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitlabTypes.js","sourceRoot":"","sources":["../../../src/providers/gitlab/gitlabTypes.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,5 @@
1
+ export { createGitLabCodeHost, GitLabCodeHost } from './gitlabCodeHost.js';
2
+ export type { GitLabConfig } from './gitlabApiClient.js';
3
+ export { createGitLabBoardManager } from './gitlabBoardManager.js';
4
+ export { mapGitLabMRToPullRequest, mapGitLabNoteToReviewComment, mapGitLabDiscussionsToReviewComments, toProjectPath } from './mappers.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/gitlab/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC3E,YAAY,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,wBAAwB,EAAE,4BAA4B,EAAE,oCAAoC,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { createGitLabCodeHost, GitLabCodeHost } from './gitlabCodeHost.js';
2
+ export { createGitLabBoardManager } from './gitlabBoardManager.js';
3
+ export { mapGitLabMRToPullRequest, mapGitLabNoteToReviewComment, mapGitLabDiscussionsToReviewComments, toProjectPath } from './mappers.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/providers/gitlab/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE3E,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,wBAAwB,EAAE,4BAA4B,EAAE,oCAAoC,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Pure mapper functions that convert between GitLab-specific types and
3
+ * platform-agnostic provider types.
4
+ * All functions are pure — no side effects, no imports of global state.
5
+ */
6
+ import type { PullRequest, ReviewComment, RepoIdentifier } from '../types.js';
7
+ import type { GitLabMergeRequest, GitLabNote, GitLabDiscussion } from './gitlabTypes.js';
8
+ /**
9
+ * Maps a GitLab MergeRequest API response to a platform-agnostic PullRequest.
10
+ * Uses `iid` (project-scoped ID) as the `number` field.
11
+ */
12
+ export declare function mapGitLabMRToPullRequest(mr: GitLabMergeRequest): PullRequest;
13
+ /**
14
+ * Maps a GitLab Note to a platform-agnostic ReviewComment.
15
+ */
16
+ export declare function mapGitLabNoteToReviewComment(note: GitLabNote): ReviewComment;
17
+ /**
18
+ * Flattens GitLab discussions into a flat array of ReviewComments.
19
+ * Includes both positioned (inline) and non-positioned (general) notes.
20
+ */
21
+ export declare function mapGitLabDiscussionsToReviewComments(discussions: readonly GitLabDiscussion[]): ReviewComment[];
22
+ /**
23
+ * Converts a RepoIdentifier to a GitLab project path (owner/repo).
24
+ */
25
+ export declare function toProjectPath(repoId: RepoIdentifier): string;
26
+ //# sourceMappingURL=mappers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mappers.d.ts","sourceRoot":"","sources":["../../../src/providers/gitlab/mappers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC9E,OAAO,KAAK,EAAE,kBAAkB,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAoBzF;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,kBAAkB,GAAG,WAAW,CAW5E;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,UAAU,GAAG,aAAa,CAS5E;AAED;;;GAGG;AACH,wBAAgB,oCAAoC,CAClD,WAAW,EAAE,SAAS,gBAAgB,EAAE,GACvC,aAAa,EAAE,CAIjB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAE5D"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Pure mapper functions that convert between GitLab-specific types and
3
+ * platform-agnostic provider types.
4
+ * All functions are pure — no side effects, no imports of global state.
5
+ */
6
+ /**
7
+ * Extracts the first linked issue number from a merge request description.
8
+ * Looks for patterns like `Closes #42`, `Fixes #7`, or standalone `#123`.
9
+ */
10
+ function extractLinkedIssueNumber(description) {
11
+ const closesMatch = description.match(/(?:closes|fixes|resolves)\s+#(\d+)/i);
12
+ if (closesMatch) {
13
+ return parseInt(closesMatch[1], 10);
14
+ }
15
+ const hashMatch = description.match(/#(\d+)/);
16
+ if (hashMatch) {
17
+ return parseInt(hashMatch[1], 10);
18
+ }
19
+ return undefined;
20
+ }
21
+ /**
22
+ * Maps a GitLab MergeRequest API response to a platform-agnostic PullRequest.
23
+ * Uses `iid` (project-scoped ID) as the `number` field.
24
+ */
25
+ export function mapGitLabMRToPullRequest(mr) {
26
+ return {
27
+ number: mr.iid,
28
+ title: mr.title,
29
+ body: mr.description,
30
+ sourceBranch: mr.source_branch,
31
+ targetBranch: mr.target_branch,
32
+ url: mr.web_url,
33
+ linkedIssueNumber: mr.description ? extractLinkedIssueNumber(mr.description) : undefined,
34
+ state: mr.state,
35
+ };
36
+ }
37
+ /**
38
+ * Maps a GitLab Note to a platform-agnostic ReviewComment.
39
+ */
40
+ export function mapGitLabNoteToReviewComment(note) {
41
+ return {
42
+ id: String(note.id),
43
+ body: note.body,
44
+ author: note.author.username,
45
+ createdAt: note.created_at,
46
+ path: note.position?.new_path ?? undefined,
47
+ line: note.position?.new_line ?? undefined,
48
+ };
49
+ }
50
+ /**
51
+ * Flattens GitLab discussions into a flat array of ReviewComments.
52
+ * Includes both positioned (inline) and non-positioned (general) notes.
53
+ */
54
+ export function mapGitLabDiscussionsToReviewComments(discussions) {
55
+ return discussions.flatMap((discussion) => discussion.notes.map(mapGitLabNoteToReviewComment));
56
+ }
57
+ /**
58
+ * Converts a RepoIdentifier to a GitLab project path (owner/repo).
59
+ */
60
+ export function toProjectPath(repoId) {
61
+ return `${repoId.owner}/${repoId.repo}`;
62
+ }
63
+ //# sourceMappingURL=mappers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mappers.js","sourceRoot":"","sources":["../../../src/providers/gitlab/mappers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH;;;GAGG;AACH,SAAS,wBAAwB,CAAC,WAAmB;IACnD,MAAM,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;IAC7E,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACtC,CAAC;IAED,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC9C,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACpC,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CAAC,EAAsB;IAC7D,OAAO;QACL,MAAM,EAAE,EAAE,CAAC,GAAG;QACd,KAAK,EAAE,EAAE,CAAC,KAAK;QACf,IAAI,EAAE,EAAE,CAAC,WAAW;QACpB,YAAY,EAAE,EAAE,CAAC,aAAa;QAC9B,YAAY,EAAE,EAAE,CAAC,aAAa;QAC9B,GAAG,EAAE,EAAE,CAAC,OAAO;QACf,iBAAiB,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,wBAAwB,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS;QACxF,KAAK,EAAE,EAAE,CAAC,KAAK;KAChB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,4BAA4B,CAAC,IAAgB;IAC3D,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QACnB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;QAC5B,SAAS,EAAE,IAAI,CAAC,UAAU;QAC1B,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,IAAI,SAAS;QAC1C,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,IAAI,SAAS;KAC3C,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oCAAoC,CAClD,WAAwC;IAExC,OAAO,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE,CACxC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,4BAA4B,CAAC,CACnD,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,MAAsB;IAClD,OAAO,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;AAC1C,CAAC"}
@@ -0,0 +1,7 @@
1
+ export * from './types.js';
2
+ export * from './jira/index.js';
3
+ export * from './github/index.js';
4
+ export * from './gitlab/index.js';
5
+ export * from './forgeProviders.js';
6
+ export * from './workspaceValidation.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC"}
@@ -0,0 +1,7 @@
1
+ export * from './types.js';
2
+ export * from './jira/index.js';
3
+ export * from './github/index.js';
4
+ export * from './gitlab/index.js';
5
+ export * from './forgeProviders.js';
6
+ export * from './workspaceValidation.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Lightweight converters between Markdown and Atlassian Document Format (ADF).
3
+ * Supports the most common markdown elements without external dependencies.
4
+ */
5
+ interface AdfMark {
6
+ readonly type: string;
7
+ readonly attrs?: Record<string, string>;
8
+ }
9
+ interface AdfNode {
10
+ readonly type: string;
11
+ readonly content?: readonly AdfNode[];
12
+ readonly text?: string;
13
+ readonly marks?: readonly AdfMark[];
14
+ readonly attrs?: Record<string, unknown>;
15
+ }
16
+ interface AdfDocument {
17
+ readonly version: 1;
18
+ readonly type: 'doc';
19
+ readonly content: readonly AdfNode[];
20
+ }
21
+ /**
22
+ * Converts markdown text to a minimal ADF document structure.
23
+ * Supports paragraphs, code blocks, bold, italic, headings, bullet lists, and links.
24
+ */
25
+ export declare function markdownToAdf(markdown: string): AdfDocument;
26
+ /**
27
+ * Extracts plain text from an ADF document by recursively walking content arrays.
28
+ * Falls back to empty string for unknown or malformed structures.
29
+ */
30
+ export declare function adfToPlainText(adf: unknown): string;
31
+ export {};
32
+ //# sourceMappingURL=adfConverter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adfConverter.d.ts","sourceRoot":"","sources":["../../../src/providers/jira/adfConverter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,UAAU,OAAO;IACf,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC;AAED,UAAU,OAAO;IACf,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,OAAO,EAAE,CAAC;IACtC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,OAAO,EAAE,CAAC;IACpC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC1C;AAED,UAAU,WAAW;IACnB,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,SAAS,OAAO,EAAE,CAAC;CACtC;AAsDD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,CAyE3D;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAwBnD"}