@erode-app/core 0.6.0-beta.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 (326) hide show
  1. package/dist/adapters/adapter-factory.d.ts +3 -0
  2. package/dist/adapters/adapter-factory.d.ts.map +1 -0
  3. package/dist/adapters/adapter-factory.js +19 -0
  4. package/dist/adapters/adapter-factory.js.map +1 -0
  5. package/dist/adapters/adapter-metadata.d.ts +12 -0
  6. package/dist/adapters/adapter-metadata.d.ts.map +1 -0
  7. package/dist/adapters/adapter-metadata.js +2 -0
  8. package/dist/adapters/adapter-metadata.js.map +1 -0
  9. package/dist/adapters/architecture-adapter.d.ts +42 -0
  10. package/dist/adapters/architecture-adapter.d.ts.map +1 -0
  11. package/dist/adapters/architecture-adapter.js +2 -0
  12. package/dist/adapters/architecture-adapter.js.map +1 -0
  13. package/dist/adapters/architecture-types.d.ts +32 -0
  14. package/dist/adapters/architecture-types.d.ts.map +1 -0
  15. package/dist/adapters/architecture-types.js +2 -0
  16. package/dist/adapters/architecture-types.js.map +1 -0
  17. package/dist/adapters/base-patcher.d.ts +38 -0
  18. package/dist/adapters/base-patcher.d.ts.map +1 -0
  19. package/dist/adapters/base-patcher.js +266 -0
  20. package/dist/adapters/base-patcher.js.map +1 -0
  21. package/dist/adapters/dsl-validation.d.ts +2 -0
  22. package/dist/adapters/dsl-validation.d.ts.map +1 -0
  23. package/dist/adapters/dsl-validation.js +24 -0
  24. package/dist/adapters/dsl-validation.js.map +1 -0
  25. package/dist/adapters/likec4/adapter.d.ts +37 -0
  26. package/dist/adapters/likec4/adapter.d.ts.map +1 -0
  27. package/dist/adapters/likec4/adapter.js +302 -0
  28. package/dist/adapters/likec4/adapter.js.map +1 -0
  29. package/dist/adapters/likec4/dsl-validator.d.ts +3 -0
  30. package/dist/adapters/likec4/dsl-validator.d.ts.map +1 -0
  31. package/dist/adapters/likec4/dsl-validator.js +22 -0
  32. package/dist/adapters/likec4/dsl-validator.js.map +1 -0
  33. package/dist/adapters/likec4/index.d.ts +2 -0
  34. package/dist/adapters/likec4/index.d.ts.map +1 -0
  35. package/dist/adapters/likec4/index.js +2 -0
  36. package/dist/adapters/likec4/index.js.map +1 -0
  37. package/dist/adapters/likec4/likec4-types.d.ts +7 -0
  38. package/dist/adapters/likec4/likec4-types.d.ts.map +1 -0
  39. package/dist/adapters/likec4/likec4-types.js +2 -0
  40. package/dist/adapters/likec4/likec4-types.js.map +1 -0
  41. package/dist/adapters/likec4/metadata.d.ts +3 -0
  42. package/dist/adapters/likec4/metadata.d.ts.map +1 -0
  43. package/dist/adapters/likec4/metadata.js +30 -0
  44. package/dist/adapters/likec4/metadata.js.map +1 -0
  45. package/dist/adapters/likec4/patcher.d.ts +15 -0
  46. package/dist/adapters/likec4/patcher.d.ts.map +1 -0
  47. package/dist/adapters/likec4/patcher.js +69 -0
  48. package/dist/adapters/likec4/patcher.js.map +1 -0
  49. package/dist/adapters/likec4/version-check.d.ts +11 -0
  50. package/dist/adapters/likec4/version-check.d.ts.map +1 -0
  51. package/dist/adapters/likec4/version-check.js +75 -0
  52. package/dist/adapters/likec4/version-check.js.map +1 -0
  53. package/dist/adapters/model-patcher.d.ts +49 -0
  54. package/dist/adapters/model-patcher.d.ts.map +1 -0
  55. package/dist/adapters/model-patcher.js +15 -0
  56. package/dist/adapters/model-patcher.js.map +1 -0
  57. package/dist/adapters/structurizr/adapter.d.ts +39 -0
  58. package/dist/adapters/structurizr/adapter.d.ts.map +1 -0
  59. package/dist/adapters/structurizr/adapter.js +372 -0
  60. package/dist/adapters/structurizr/adapter.js.map +1 -0
  61. package/dist/adapters/structurizr/dsl-validator.d.ts +3 -0
  62. package/dist/adapters/structurizr/dsl-validator.d.ts.map +1 -0
  63. package/dist/adapters/structurizr/dsl-validator.js +26 -0
  64. package/dist/adapters/structurizr/dsl-validator.js.map +1 -0
  65. package/dist/adapters/structurizr/index.d.ts +2 -0
  66. package/dist/adapters/structurizr/index.d.ts.map +1 -0
  67. package/dist/adapters/structurizr/index.js +2 -0
  68. package/dist/adapters/structurizr/index.js.map +1 -0
  69. package/dist/adapters/structurizr/metadata.d.ts +3 -0
  70. package/dist/adapters/structurizr/metadata.d.ts.map +1 -0
  71. package/dist/adapters/structurizr/metadata.js +35 -0
  72. package/dist/adapters/structurizr/metadata.js.map +1 -0
  73. package/dist/adapters/structurizr/patcher.d.ts +15 -0
  74. package/dist/adapters/structurizr/patcher.d.ts.map +1 -0
  75. package/dist/adapters/structurizr/patcher.js +53 -0
  76. package/dist/adapters/structurizr/patcher.js.map +1 -0
  77. package/dist/adapters/structurizr/structurizr-cli.d.ts +2 -0
  78. package/dist/adapters/structurizr/structurizr-cli.d.ts.map +1 -0
  79. package/dist/adapters/structurizr/structurizr-cli.js +91 -0
  80. package/dist/adapters/structurizr/structurizr-cli.js.map +1 -0
  81. package/dist/adapters/structurizr/structurizr-types.d.ts +3 -0
  82. package/dist/adapters/structurizr/structurizr-types.d.ts.map +1 -0
  83. package/dist/adapters/structurizr/structurizr-types.js +2 -0
  84. package/dist/adapters/structurizr/structurizr-types.js.map +1 -0
  85. package/dist/adapters/url-utils.d.ts +3 -0
  86. package/dist/adapters/url-utils.d.ts.map +1 -0
  87. package/dist/adapters/url-utils.js +53 -0
  88. package/dist/adapters/url-utils.js.map +1 -0
  89. package/dist/analysis/analysis-types.d.ts +152 -0
  90. package/dist/analysis/analysis-types.d.ts.map +1 -0
  91. package/dist/analysis/analysis-types.js +2 -0
  92. package/dist/analysis/analysis-types.js.map +1 -0
  93. package/dist/analysis/prompt-builder.d.ts +27 -0
  94. package/dist/analysis/prompt-builder.d.ts.map +1 -0
  95. package/dist/analysis/prompt-builder.js +159 -0
  96. package/dist/analysis/prompt-builder.js.map +1 -0
  97. package/dist/analysis/prompt-variables.d.ts +72 -0
  98. package/dist/analysis/prompt-variables.d.ts.map +1 -0
  99. package/dist/analysis/prompt-variables.js +2 -0
  100. package/dist/analysis/prompt-variables.js.map +1 -0
  101. package/dist/analysis/prompts/component-selection.md +50 -0
  102. package/dist/analysis/prompts/dependency-extraction.md +219 -0
  103. package/dist/analysis/prompts/drift-analysis.md +154 -0
  104. package/dist/analysis/prompts/model-patch.md +29 -0
  105. package/dist/analysis/section-formatters.d.ts +54 -0
  106. package/dist/analysis/section-formatters.d.ts.map +1 -0
  107. package/dist/analysis/section-formatters.js +95 -0
  108. package/dist/analysis/section-formatters.js.map +1 -0
  109. package/dist/analysis/template-engine.d.ts +11 -0
  110. package/dist/analysis/template-engine.d.ts.map +1 -0
  111. package/dist/analysis/template-engine.js +64 -0
  112. package/dist/analysis/template-engine.js.map +1 -0
  113. package/dist/ci-entry.d.ts +3 -0
  114. package/dist/ci-entry.d.ts.map +1 -0
  115. package/dist/ci-entry.js +67 -0
  116. package/dist/ci-entry.js.map +1 -0
  117. package/dist/errors.d.ts +60 -0
  118. package/dist/errors.d.ts.map +1 -0
  119. package/dist/errors.js +134 -0
  120. package/dist/errors.js.map +1 -0
  121. package/dist/index.d.ts +45 -0
  122. package/dist/index.d.ts.map +1 -0
  123. package/dist/index.js +38 -0
  124. package/dist/index.js.map +1 -0
  125. package/dist/output/ci-output.d.ts +13 -0
  126. package/dist/output/ci-output.d.ts.map +1 -0
  127. package/dist/output/ci-output.js +106 -0
  128. package/dist/output/ci-output.js.map +1 -0
  129. package/dist/output/structured-output.d.ts +89 -0
  130. package/dist/output/structured-output.d.ts.map +1 -0
  131. package/dist/output/structured-output.js +2 -0
  132. package/dist/output/structured-output.js.map +1 -0
  133. package/dist/output.d.ts +73 -0
  134. package/dist/output.d.ts.map +1 -0
  135. package/dist/output.js +304 -0
  136. package/dist/output.js.map +1 -0
  137. package/dist/pipelines/analyze.d.ts +35 -0
  138. package/dist/pipelines/analyze.d.ts.map +1 -0
  139. package/dist/pipelines/analyze.js +316 -0
  140. package/dist/pipelines/analyze.js.map +1 -0
  141. package/dist/pipelines/check.d.ts +48 -0
  142. package/dist/pipelines/check.d.ts.map +1 -0
  143. package/dist/pipelines/check.js +218 -0
  144. package/dist/pipelines/check.js.map +1 -0
  145. package/dist/pipelines/components.d.ts +8 -0
  146. package/dist/pipelines/components.d.ts.map +1 -0
  147. package/dist/pipelines/components.js +14 -0
  148. package/dist/pipelines/components.js.map +1 -0
  149. package/dist/pipelines/connections.d.ts +34 -0
  150. package/dist/pipelines/connections.d.ts.map +1 -0
  151. package/dist/pipelines/connections.js +53 -0
  152. package/dist/pipelines/connections.js.map +1 -0
  153. package/dist/pipelines/pr-creation.d.ts +30 -0
  154. package/dist/pipelines/pr-creation.d.ts.map +1 -0
  155. package/dist/pipelines/pr-creation.js +26 -0
  156. package/dist/pipelines/pr-creation.js.map +1 -0
  157. package/dist/pipelines/progress.d.ts +23 -0
  158. package/dist/pipelines/progress.d.ts.map +1 -0
  159. package/dist/pipelines/progress.js +22 -0
  160. package/dist/pipelines/progress.js.map +1 -0
  161. package/dist/pipelines/publish.d.ts +39 -0
  162. package/dist/pipelines/publish.d.ts.map +1 -0
  163. package/dist/pipelines/publish.js +125 -0
  164. package/dist/pipelines/publish.js.map +1 -0
  165. package/dist/pipelines/validate.d.ts +24 -0
  166. package/dist/pipelines/validate.d.ts.map +1 -0
  167. package/dist/pipelines/validate.js +79 -0
  168. package/dist/pipelines/validate.js.map +1 -0
  169. package/dist/platforms/bitbucket/api-client.d.ts +21 -0
  170. package/dist/platforms/bitbucket/api-client.d.ts.map +1 -0
  171. package/dist/platforms/bitbucket/api-client.js +98 -0
  172. package/dist/platforms/bitbucket/api-client.js.map +1 -0
  173. package/dist/platforms/bitbucket/index.d.ts +3 -0
  174. package/dist/platforms/bitbucket/index.d.ts.map +1 -0
  175. package/dist/platforms/bitbucket/index.js +3 -0
  176. package/dist/platforms/bitbucket/index.js.map +1 -0
  177. package/dist/platforms/bitbucket/reader.d.ts +9 -0
  178. package/dist/platforms/bitbucket/reader.d.ts.map +1 -0
  179. package/dist/platforms/bitbucket/reader.js +119 -0
  180. package/dist/platforms/bitbucket/reader.js.map +1 -0
  181. package/dist/platforms/bitbucket/writer.d.ts +15 -0
  182. package/dist/platforms/bitbucket/writer.d.ts.map +1 -0
  183. package/dist/platforms/bitbucket/writer.js +172 -0
  184. package/dist/platforms/bitbucket/writer.js.map +1 -0
  185. package/dist/platforms/github/index.d.ts +3 -0
  186. package/dist/platforms/github/index.d.ts.map +1 -0
  187. package/dist/platforms/github/index.js +3 -0
  188. package/dist/platforms/github/index.js.map +1 -0
  189. package/dist/platforms/github/reader.d.ts +9 -0
  190. package/dist/platforms/github/reader.d.ts.map +1 -0
  191. package/dist/platforms/github/reader.js +141 -0
  192. package/dist/platforms/github/reader.js.map +1 -0
  193. package/dist/platforms/github/writer.d.ts +15 -0
  194. package/dist/platforms/github/writer.d.ts.map +1 -0
  195. package/dist/platforms/github/writer.js +225 -0
  196. package/dist/platforms/github/writer.js.map +1 -0
  197. package/dist/platforms/gitlab/index.d.ts +3 -0
  198. package/dist/platforms/gitlab/index.d.ts.map +1 -0
  199. package/dist/platforms/gitlab/index.js +3 -0
  200. package/dist/platforms/gitlab/index.js.map +1 -0
  201. package/dist/platforms/gitlab/reader.d.ts +9 -0
  202. package/dist/platforms/gitlab/reader.d.ts.map +1 -0
  203. package/dist/platforms/gitlab/reader.js +136 -0
  204. package/dist/platforms/gitlab/reader.js.map +1 -0
  205. package/dist/platforms/gitlab/writer.d.ts +14 -0
  206. package/dist/platforms/gitlab/writer.d.ts.map +1 -0
  207. package/dist/platforms/gitlab/writer.js +130 -0
  208. package/dist/platforms/gitlab/writer.js.map +1 -0
  209. package/dist/platforms/platform-factory.d.ts +7 -0
  210. package/dist/platforms/platform-factory.d.ts.map +1 -0
  211. package/dist/platforms/platform-factory.js +53 -0
  212. package/dist/platforms/platform-factory.js.map +1 -0
  213. package/dist/platforms/platform-utils.d.ts +12 -0
  214. package/dist/platforms/platform-utils.d.ts.map +1 -0
  215. package/dist/platforms/platform-utils.js +48 -0
  216. package/dist/platforms/platform-utils.js.map +1 -0
  217. package/dist/platforms/source-platform.d.ts +117 -0
  218. package/dist/platforms/source-platform.d.ts.map +1 -0
  219. package/dist/platforms/source-platform.js +2 -0
  220. package/dist/platforms/source-platform.js.map +1 -0
  221. package/dist/providers/ai-provider.d.ts +23 -0
  222. package/dist/providers/ai-provider.d.ts.map +1 -0
  223. package/dist/providers/ai-provider.js +2 -0
  224. package/dist/providers/ai-provider.js.map +1 -0
  225. package/dist/providers/analysis-phase.d.ts +13 -0
  226. package/dist/providers/analysis-phase.d.ts.map +1 -0
  227. package/dist/providers/analysis-phase.js +14 -0
  228. package/dist/providers/analysis-phase.js.map +1 -0
  229. package/dist/providers/anthropic/models.d.ts +5 -0
  230. package/dist/providers/anthropic/models.d.ts.map +1 -0
  231. package/dist/providers/anthropic/models.js +5 -0
  232. package/dist/providers/anthropic/models.js.map +1 -0
  233. package/dist/providers/anthropic/provider.d.ts +12 -0
  234. package/dist/providers/anthropic/provider.d.ts.map +1 -0
  235. package/dist/providers/anthropic/provider.js +47 -0
  236. package/dist/providers/anthropic/provider.js.map +1 -0
  237. package/dist/providers/base-provider.d.ts +34 -0
  238. package/dist/providers/base-provider.d.ts.map +1 -0
  239. package/dist/providers/base-provider.js +100 -0
  240. package/dist/providers/base-provider.js.map +1 -0
  241. package/dist/providers/gemini/models.d.ts +5 -0
  242. package/dist/providers/gemini/models.d.ts.map +1 -0
  243. package/dist/providers/gemini/models.js +5 -0
  244. package/dist/providers/gemini/models.js.map +1 -0
  245. package/dist/providers/gemini/provider.d.ts +12 -0
  246. package/dist/providers/gemini/provider.d.ts.map +1 -0
  247. package/dist/providers/gemini/provider.js +42 -0
  248. package/dist/providers/gemini/provider.js.map +1 -0
  249. package/dist/providers/openai/models.d.ts +5 -0
  250. package/dist/providers/openai/models.d.ts.map +1 -0
  251. package/dist/providers/openai/models.js +5 -0
  252. package/dist/providers/openai/models.js.map +1 -0
  253. package/dist/providers/openai/provider.d.ts +12 -0
  254. package/dist/providers/openai/provider.d.ts.map +1 -0
  255. package/dist/providers/openai/provider.js +49 -0
  256. package/dist/providers/openai/provider.js.map +1 -0
  257. package/dist/providers/provider-factory.d.ts +3 -0
  258. package/dist/providers/provider-factory.d.ts.map +1 -0
  259. package/dist/providers/provider-factory.js +45 -0
  260. package/dist/providers/provider-factory.js.map +1 -0
  261. package/dist/schemas/bitbucket-api.schema.d.ts +52 -0
  262. package/dist/schemas/bitbucket-api.schema.d.ts.map +1 -0
  263. package/dist/schemas/bitbucket-api.schema.js +50 -0
  264. package/dist/schemas/bitbucket-api.schema.js.map +1 -0
  265. package/dist/schemas/common.schema.d.ts +46 -0
  266. package/dist/schemas/common.schema.d.ts.map +1 -0
  267. package/dist/schemas/common.schema.js +67 -0
  268. package/dist/schemas/common.schema.js.map +1 -0
  269. package/dist/schemas/dependency-extraction.schema.d.ts +17 -0
  270. package/dist/schemas/dependency-extraction.schema.d.ts.map +1 -0
  271. package/dist/schemas/dependency-extraction.schema.js +13 -0
  272. package/dist/schemas/dependency-extraction.schema.js.map +1 -0
  273. package/dist/schemas/drift-analysis.schema.d.ts +40 -0
  274. package/dist/schemas/drift-analysis.schema.d.ts.map +1 -0
  275. package/dist/schemas/drift-analysis.schema.js +15 -0
  276. package/dist/schemas/drift-analysis.schema.js.map +1 -0
  277. package/dist/schemas/gitlab-api.schema.d.ts +33 -0
  278. package/dist/schemas/gitlab-api.schema.d.ts.map +1 -0
  279. package/dist/schemas/gitlab-api.schema.js +33 -0
  280. package/dist/schemas/gitlab-api.schema.js.map +1 -0
  281. package/dist/schemas/likec4.schema.d.ts +26 -0
  282. package/dist/schemas/likec4.schema.d.ts.map +1 -0
  283. package/dist/schemas/likec4.schema.js +23 -0
  284. package/dist/schemas/likec4.schema.js.map +1 -0
  285. package/dist/schemas/package.schema.d.ts +5 -0
  286. package/dist/schemas/package.schema.d.ts.map +1 -0
  287. package/dist/schemas/package.schema.js +5 -0
  288. package/dist/schemas/package.schema.js.map +1 -0
  289. package/dist/schemas/source-platform.schema.d.ts +56 -0
  290. package/dist/schemas/source-platform.schema.d.ts.map +1 -0
  291. package/dist/schemas/source-platform.schema.js +49 -0
  292. package/dist/schemas/source-platform.schema.js.map +1 -0
  293. package/dist/schemas/structurizr.schema.d.ts +234 -0
  294. package/dist/schemas/structurizr.schema.d.ts.map +1 -0
  295. package/dist/schemas/structurizr.schema.js +54 -0
  296. package/dist/schemas/structurizr.schema.js.map +1 -0
  297. package/dist/skip-patterns +62 -0
  298. package/dist/utils/config.d.ts +156 -0
  299. package/dist/utils/config.d.ts.map +1 -0
  300. package/dist/utils/config.js +267 -0
  301. package/dist/utils/config.js.map +1 -0
  302. package/dist/utils/error-utils.d.ts +2 -0
  303. package/dist/utils/error-utils.d.ts.map +1 -0
  304. package/dist/utils/error-utils.js +6 -0
  305. package/dist/utils/error-utils.js.map +1 -0
  306. package/dist/utils/git-diff.d.ts +35 -0
  307. package/dist/utils/git-diff.d.ts.map +1 -0
  308. package/dist/utils/git-diff.js +114 -0
  309. package/dist/utils/git-diff.js.map +1 -0
  310. package/dist/utils/model-source.d.ts +30 -0
  311. package/dist/utils/model-source.d.ts.map +1 -0
  312. package/dist/utils/model-source.js +167 -0
  313. package/dist/utils/model-source.js.map +1 -0
  314. package/dist/utils/retry.d.ts +9 -0
  315. package/dist/utils/retry.d.ts.map +1 -0
  316. package/dist/utils/retry.js +51 -0
  317. package/dist/utils/retry.js.map +1 -0
  318. package/dist/utils/skip-patterns.d.ts +7 -0
  319. package/dist/utils/skip-patterns.d.ts.map +1 -0
  320. package/dist/utils/skip-patterns.js +35 -0
  321. package/dist/utils/skip-patterns.js.map +1 -0
  322. package/dist/utils/validation.d.ts +4 -0
  323. package/dist/utils/validation.d.ts.map +1 -0
  324. package/dist/utils/validation.js +37 -0
  325. package/dist/utils/validation.js.map +1 -0
  326. package/package.json +78 -0
@@ -0,0 +1,98 @@
1
+ import { z } from 'zod';
2
+ import { CONFIG } from '../../utils/config.js';
3
+ import { ApiError } from '../../errors.js';
4
+ import { sanitizeErrorMessage } from '../platform-utils.js';
5
+ export class BitbucketApiClient {
6
+ baseUrl;
7
+ token;
8
+ constructor(token) {
9
+ this.token = token ?? CONFIG.bitbucket.token;
10
+ this.baseUrl = CONFIG.bitbucket.baseUrl;
11
+ }
12
+ buildHeaders(extra) {
13
+ const headers = {
14
+ ...(this.token ? { Authorization: this.buildAuthHeader(this.token) } : {}),
15
+ ...extra,
16
+ };
17
+ return headers;
18
+ }
19
+ /** App passwords use Basic auth (username:password), OAuth/PATs use Bearer. */
20
+ buildAuthHeader(token) {
21
+ if (token.includes(':')) {
22
+ return `Basic ${btoa(token)}`;
23
+ }
24
+ return `Bearer ${token}`;
25
+ }
26
+ async request(path, schema, options = {}) {
27
+ const url = `${this.baseUrl}${path}`;
28
+ const response = await fetch(url, {
29
+ method: options.method ?? 'GET',
30
+ headers: this.buildHeaders(options.headers),
31
+ body: options.body,
32
+ });
33
+ if (!response.ok) {
34
+ const text = await response.text().catch(() => 'Unknown error');
35
+ throw new ApiError(`Bitbucket API error (${String(response.status)}): ${sanitizeErrorMessage(text.slice(0, 200))}`, response.status, { provider: 'bitbucket' });
36
+ }
37
+ const json = await response.json();
38
+ return schema.parse(json);
39
+ }
40
+ async requestText(path, options = {}) {
41
+ const url = `${this.baseUrl}${path}`;
42
+ const response = await fetch(url, {
43
+ method: options.method ?? 'GET',
44
+ headers: this.buildHeaders({ Accept: 'text/plain', ...options.headers }),
45
+ body: options.body,
46
+ });
47
+ if (!response.ok) {
48
+ const text = await response.text().catch(() => 'Unknown error');
49
+ throw new ApiError(`Bitbucket API error (${String(response.status)}): ${sanitizeErrorMessage(text.slice(0, 200))}`, response.status, { provider: 'bitbucket' });
50
+ }
51
+ return response.text();
52
+ }
53
+ async requestVoid(path, options = {}) {
54
+ const url = `${this.baseUrl}${path}`;
55
+ const response = await fetch(url, {
56
+ method: options.method ?? 'GET',
57
+ headers: this.buildHeaders(options.headers),
58
+ body: options.body,
59
+ });
60
+ if (!response.ok) {
61
+ const text = await response.text().catch(() => 'Unknown error');
62
+ throw new ApiError(`Bitbucket API error (${String(response.status)}): ${sanitizeErrorMessage(text.slice(0, 200))}`, response.status, { provider: 'bitbucket' });
63
+ }
64
+ }
65
+ /** Fetch all pages of a paginated Bitbucket API response. */
66
+ async paginate(path, itemSchema) {
67
+ const pageSchema = z
68
+ .object({
69
+ values: z.array(itemSchema),
70
+ next: z.string().optional(),
71
+ })
72
+ .loose();
73
+ const items = [];
74
+ let url = `${this.baseUrl}${path}`;
75
+ while (url) {
76
+ const response = await fetch(url, {
77
+ headers: this.buildHeaders(),
78
+ });
79
+ if (!response.ok) {
80
+ const text = await response.text().catch(() => 'Unknown error');
81
+ throw new ApiError(`Bitbucket API error (${String(response.status)}): ${sanitizeErrorMessage(text.slice(0, 200))}`, response.status, { provider: 'bitbucket' });
82
+ }
83
+ const json = await response.json();
84
+ const page = pageSchema.parse(json);
85
+ items.push(...page.values);
86
+ if (page.next) {
87
+ const nextOrigin = new URL(page.next).origin;
88
+ const baseOrigin = new URL(this.baseUrl).origin;
89
+ if (nextOrigin !== baseOrigin) {
90
+ throw new ApiError(`Pagination URL origin mismatch: expected ${baseOrigin}, got ${nextOrigin}`, 0, { provider: 'bitbucket' });
91
+ }
92
+ }
93
+ url = page.next;
94
+ }
95
+ return items;
96
+ }
97
+ }
98
+ //# sourceMappingURL=api-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../../src/platforms/bitbucket/api-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { BitbucketReader } from './reader.js';
2
+ export { BitbucketWriter } from './writer.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/platforms/bitbucket/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { BitbucketReader } from './reader.js';
2
+ export { BitbucketWriter } from './writer.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/platforms/bitbucket/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { SourcePlatformReader, ChangeRequestRef, ChangeRequestData, ChangeRequestCommit } from '../source-platform.js';
2
+ export declare class BitbucketReader implements SourcePlatformReader {
3
+ private api;
4
+ constructor(token?: string);
5
+ parseChangeRequestUrl(url: string): ChangeRequestRef;
6
+ fetchChangeRequest(ref: ChangeRequestRef): Promise<ChangeRequestData>;
7
+ fetchChangeRequestCommits(ref: ChangeRequestRef): Promise<ChangeRequestCommit[]>;
8
+ }
9
+ //# sourceMappingURL=reader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reader.d.ts","sourceRoot":"","sources":["../../../src/platforms/bitbucket/reader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,oBAAoB,EACpB,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACpB,MAAM,uBAAuB,CAAC;AA2B/B,qBAAa,eAAgB,YAAW,oBAAoB;IAC1D,OAAO,CAAC,GAAG,CAAqB;gBAEpB,KAAK,CAAC,EAAE,MAAM;IAI1B,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB;IAyB9C,kBAAkB,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IA6ErE,yBAAyB,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;CAyBvF"}
@@ -0,0 +1,119 @@
1
+ import { z } from 'zod';
2
+ import { ErodeError, ErrorCode } from '../../errors.js';
3
+ import { validate } from '../../utils/validation.js';
4
+ import { ChangeRequestDataSchema, ChangeRequestCommitSchema, } from '../../schemas/source-platform.schema.js';
5
+ import { BitbucketPrResponseSchema, BitbucketDiffstatEntrySchema, BitbucketCommitEntrySchema, } from '../../schemas/bitbucket-api.schema.js';
6
+ import { BitbucketApiClient } from './api-client.js';
7
+ import { applyDiffTruncation, wrapPlatformError } from '../platform-utils.js';
8
+ const BITBUCKET_PR_URL_PATTERN = /^https?:\/\/bitbucket\.org\/([^/]+)\/([^/]+)\/pull-requests\/(\d+)$/i;
9
+ /** Parse "Name <email>" format used by Bitbucket commit authors. */
10
+ function parseAuthorRaw(raw) {
11
+ const match = /^(.+?)\s*<(.+?)>$/.exec(raw);
12
+ if (match?.[1] && match[2]) {
13
+ return { name: match[1].trim(), email: match[2].trim() };
14
+ }
15
+ return { name: raw || 'Unknown', email: 'unknown@example.com' };
16
+ }
17
+ export class BitbucketReader {
18
+ api;
19
+ constructor(token) {
20
+ this.api = new BitbucketApiClient(token);
21
+ }
22
+ parseChangeRequestUrl(url) {
23
+ const match = BITBUCKET_PR_URL_PATTERN.exec(url);
24
+ if (!match) {
25
+ throw new ErodeError('Unrecognized Bitbucket pull request URL. Expected: https://bitbucket.org/{workspace}/{repo}/pull-requests/{number}', ErrorCode.PLATFORM_INVALID_URL, 'Unrecognized Bitbucket pull request URL. Expected: https://bitbucket.org/{workspace}/{repo}/pull-requests/{number}');
26
+ }
27
+ const [, workspace, repoSlug, prNumber] = match;
28
+ if (!workspace || !repoSlug || !prNumber) {
29
+ throw new ErodeError('Incomplete Bitbucket PR URL: workspace, repo, or pull request number is missing', ErrorCode.PLATFORM_INVALID_URL, 'Incomplete Bitbucket PR URL: workspace, repo, or pull request number is missing');
30
+ }
31
+ return {
32
+ number: parseInt(prNumber, 10),
33
+ url,
34
+ repositoryUrl: `https://bitbucket.org/${workspace}/${repoSlug}`,
35
+ platformId: { owner: workspace, repo: repoSlug },
36
+ };
37
+ }
38
+ async fetchChangeRequest(ref) {
39
+ const workspace = ref.platformId.owner;
40
+ const repoSlug = ref.platformId.repo;
41
+ const prId = ref.number;
42
+ const basePath = `/repositories/${workspace}/${repoSlug}/pullrequests/${String(prId)}`;
43
+ try {
44
+ const pr = await this.api.request(basePath, BitbucketPrResponseSchema);
45
+ const diffstatEntries = await this.api.paginate(`${basePath}/diffstat`, BitbucketDiffstatEntrySchema);
46
+ const commitEntries = await this.api.paginate(`${basePath}/commits`, BitbucketCommitEntrySchema);
47
+ const rawDiff = await this.api.requestText(`${basePath}/diff`);
48
+ const files = diffstatEntries.map((entry) => ({
49
+ filename: entry.new?.path ?? entry.old?.path ?? 'unknown',
50
+ status: entry.status,
51
+ additions: entry.lines_added,
52
+ deletions: entry.lines_removed,
53
+ changes: entry.lines_added + entry.lines_removed,
54
+ patch: undefined, // Bitbucket diffstat doesn't include per-file patches
55
+ }));
56
+ const totalLines = files.reduce((sum, f) => sum + f.changes, 0);
57
+ const { files: filesToInclude, wasTruncated, truncationReason, } = applyDiffTruncation(files, totalLines);
58
+ const totalAdditions = files.reduce((sum, f) => sum + f.additions, 0);
59
+ const totalDeletions = files.reduce((sum, f) => sum + f.deletions, 0);
60
+ const result = {
61
+ number: pr.id,
62
+ title: pr.title,
63
+ body: pr.description || null,
64
+ state: pr.state.toLowerCase(),
65
+ author: {
66
+ login: pr.author?.nickname ?? 'unknown',
67
+ name: pr.author?.display_name,
68
+ },
69
+ base: {
70
+ ref: pr.destination.branch.name,
71
+ sha: pr.destination.commit.hash,
72
+ },
73
+ head: {
74
+ ref: pr.source.branch.name,
75
+ sha: pr.source.commit.hash,
76
+ },
77
+ commits: commitEntries.length,
78
+ additions: totalAdditions,
79
+ deletions: totalDeletions,
80
+ changed_files: diffstatEntries.length,
81
+ files: filesToInclude,
82
+ diff: rawDiff,
83
+ stats: {
84
+ total: totalAdditions + totalDeletions,
85
+ additions: totalAdditions,
86
+ deletions: totalDeletions,
87
+ },
88
+ wasTruncated,
89
+ truncationReason,
90
+ };
91
+ return validate(ChangeRequestDataSchema, result, 'Bitbucket change request data');
92
+ }
93
+ catch (error) {
94
+ wrapPlatformError(error, 'bitbucket', 'Could not retrieve pull request');
95
+ }
96
+ }
97
+ async fetchChangeRequestCommits(ref) {
98
+ const workspace = ref.platformId.owner;
99
+ const repoSlug = ref.platformId.repo;
100
+ const prId = ref.number;
101
+ const basePath = `/repositories/${workspace}/${repoSlug}/pullrequests/${String(prId)}`;
102
+ try {
103
+ const commits = await this.api.paginate(`${basePath}/commits`, BitbucketCommitEntrySchema);
104
+ const result = commits.map((commit) => {
105
+ const { name, email } = parseAuthorRaw(commit.author.raw);
106
+ return {
107
+ sha: commit.hash,
108
+ message: commit.message,
109
+ author: { name, email },
110
+ };
111
+ });
112
+ return validate(z.array(ChangeRequestCommitSchema), result, 'Bitbucket change request commits');
113
+ }
114
+ catch (error) {
115
+ wrapPlatformError(error, 'bitbucket', 'Could not retrieve pull request commits');
116
+ }
117
+ }
118
+ }
119
+ //# sourceMappingURL=reader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reader.js","sourceRoot":"","sources":["../../../src/platforms/bitbucket/reader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { SourcePlatformWriter, ChangeRequestRef, ChangeRequestResult, CreateOrUpdateChangeRequestOptions } from '../source-platform.js';
2
+ export declare class BitbucketWriter implements SourcePlatformWriter {
3
+ private readonly api;
4
+ private readonly workspace;
5
+ private readonly repoSlug;
6
+ constructor(targetOwner: string, targetRepo: string);
7
+ createOrUpdateChangeRequest(options: CreateOrUpdateChangeRequestOptions): Promise<ChangeRequestResult>;
8
+ commentOnChangeRequest(ref: ChangeRequestRef, body: string, options?: {
9
+ upsertMarker?: string;
10
+ }): Promise<void>;
11
+ deleteComment(ref: ChangeRequestRef, marker: string): Promise<void>;
12
+ closeChangeRequest(branchName: string): Promise<void>;
13
+ private findCommentByMarker;
14
+ }
15
+ //# sourceMappingURL=writer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writer.d.ts","sourceRoot":"","sources":["../../../src/platforms/bitbucket/writer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,oBAAoB,EACpB,gBAAgB,EAChB,mBAAmB,EACnB,kCAAkC,EACnC,MAAM,uBAAuB,CAAC;AAoB/B,qBAAa,eAAgB,YAAW,oBAAoB;IAC1D,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAqB;IACzC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAEtB,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;IAc7C,2BAA2B,CAC/B,OAAO,EAAE,kCAAkC,GAC1C,OAAO,CAAC,mBAAmB,CAAC;IAkGzB,sBAAsB,CAC1B,GAAG,EAAE,gBAAgB,EACrB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,GAClC,OAAO,CAAC,IAAI,CAAC;IAyBV,aAAa,CAAC,GAAG,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAenE,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAsB7C,mBAAmB;CAKlC"}
@@ -0,0 +1,172 @@
1
+ import { z } from 'zod';
2
+ import { CONFIG, ENV_VAR_NAMES, RC_FILENAME } from '../../utils/config.js';
3
+ import { ErodeError, ErrorCode } from '../../errors.js';
4
+ import { BitbucketCommentSchema } from '../../schemas/bitbucket-api.schema.js';
5
+ import { BitbucketApiClient } from './api-client.js';
6
+ import { wrapPlatformError } from '../platform-utils.js';
7
+ const BitbucketPrWriteResponseSchema = z
8
+ .object({
9
+ id: z.number(),
10
+ links: z.object({
11
+ html: z.object({ href: z.string() }),
12
+ }),
13
+ })
14
+ .loose();
15
+ const BitbucketPrListResponseSchema = z
16
+ .object({
17
+ values: z.array(BitbucketPrWriteResponseSchema),
18
+ })
19
+ .loose();
20
+ export class BitbucketWriter {
21
+ api;
22
+ workspace;
23
+ repoSlug;
24
+ constructor(targetOwner, targetRepo) {
25
+ const token = CONFIG.bitbucket.token;
26
+ if (!token) {
27
+ throw new ErodeError('A Bitbucket token is needed to create pull requests', ErrorCode.AUTH_KEY_MISSING, `Provide ${ENV_VAR_NAMES.bitbucketToken} in your environment or ${RC_FILENAME} to create pull requests.`);
28
+ }
29
+ this.api = new BitbucketApiClient(token);
30
+ this.workspace = targetOwner;
31
+ this.repoSlug = targetRepo;
32
+ }
33
+ async createOrUpdateChangeRequest(options) {
34
+ try {
35
+ const { branchName, title, body, fileChanges, baseBranch = 'main' } = options;
36
+ // Bitbucket has no native draft PRs — the draft option is ignored.
37
+ const repoPath = `/repositories/${this.workspace}/${this.repoSlug}`;
38
+ // Check if branch exists
39
+ let branchExists = false;
40
+ try {
41
+ await this.api.requestVoid(`${repoPath}/refs/branches/${encodeURIComponent(branchName)}`);
42
+ branchExists = true;
43
+ }
44
+ catch {
45
+ // Branch doesn't exist
46
+ }
47
+ if (!branchExists) {
48
+ // Get the base branch hash to use as the new branch target
49
+ const baseBranchInfo = await this.api.request(`${repoPath}/refs/branches/${encodeURIComponent(baseBranch)}`, z.object({ target: z.object({ hash: z.string() }) }).loose());
50
+ await this.api.requestVoid(`${repoPath}/refs/branches`, {
51
+ method: 'POST',
52
+ headers: { 'Content-Type': 'application/json' },
53
+ body: JSON.stringify({
54
+ name: branchName,
55
+ target: { hash: baseBranchInfo.target.hash },
56
+ }),
57
+ });
58
+ }
59
+ // Commit files via the source endpoint (multipart form data)
60
+ if (fileChanges.length > 0) {
61
+ const formData = new FormData();
62
+ formData.append('branch', branchName);
63
+ formData.append('message', title);
64
+ for (const file of fileChanges) {
65
+ formData.append(file.path, new Blob([file.content], { type: 'text/plain' }), file.path);
66
+ }
67
+ await this.api.requestVoid(`${repoPath}/src`, {
68
+ method: 'POST',
69
+ body: formData,
70
+ });
71
+ }
72
+ // Check for an existing open PR from this branch
73
+ const existingPrs = await this.api.request(`${repoPath}/pullrequests?q=${encodeURIComponent(`source.branch.name="${branchName}" AND state="OPEN"`)}`, BitbucketPrListResponseSchema);
74
+ const existingPr = existingPrs.values[0];
75
+ if (existingPr) {
76
+ await this.api.request(`${repoPath}/pullrequests/${String(existingPr.id)}`, BitbucketPrWriteResponseSchema, {
77
+ method: 'PUT',
78
+ headers: { 'Content-Type': 'application/json' },
79
+ body: JSON.stringify({ title, description: body }),
80
+ });
81
+ return {
82
+ url: existingPr.links.html.href,
83
+ number: existingPr.id,
84
+ action: 'updated',
85
+ branch: branchName,
86
+ };
87
+ }
88
+ // Create a new PR
89
+ const pr = await this.api.request(`${repoPath}/pullrequests`, BitbucketPrWriteResponseSchema, {
90
+ method: 'POST',
91
+ headers: { 'Content-Type': 'application/json' },
92
+ body: JSON.stringify({
93
+ title,
94
+ description: body,
95
+ source: { branch: { name: branchName } },
96
+ destination: { branch: { name: baseBranch } },
97
+ close_source_branch: true,
98
+ }),
99
+ });
100
+ return {
101
+ url: pr.links.html.href,
102
+ number: pr.id,
103
+ action: 'created',
104
+ branch: branchName,
105
+ };
106
+ }
107
+ catch (error) {
108
+ wrapPlatformError(error, 'bitbucket', 'Could not create or update pull request');
109
+ }
110
+ }
111
+ async commentOnChangeRequest(ref, body, options) {
112
+ const basePath = `/repositories/${ref.platformId.owner}/${ref.platformId.repo}/pullrequests/${String(ref.number)}`;
113
+ try {
114
+ if (options?.upsertMarker) {
115
+ const existingId = await this.findCommentByMarker(basePath, options.upsertMarker);
116
+ if (existingId) {
117
+ await this.api.requestVoid(`${basePath}/comments/${String(existingId)}`, {
118
+ method: 'PUT',
119
+ headers: { 'Content-Type': 'application/json' },
120
+ body: JSON.stringify({ content: { raw: body } }),
121
+ });
122
+ return;
123
+ }
124
+ }
125
+ await this.api.requestVoid(`${basePath}/comments`, {
126
+ method: 'POST',
127
+ headers: { 'Content-Type': 'application/json' },
128
+ body: JSON.stringify({ content: { raw: body } }),
129
+ });
130
+ }
131
+ catch (error) {
132
+ wrapPlatformError(error, 'bitbucket', 'Could not comment on pull request');
133
+ }
134
+ }
135
+ async deleteComment(ref, marker) {
136
+ const basePath = `/repositories/${ref.platformId.owner}/${ref.platformId.repo}/pullrequests/${String(ref.number)}`;
137
+ try {
138
+ const existingId = await this.findCommentByMarker(basePath, marker);
139
+ if (existingId) {
140
+ await this.api.requestVoid(`${basePath}/comments/${String(existingId)}`, {
141
+ method: 'DELETE',
142
+ });
143
+ }
144
+ }
145
+ catch (error) {
146
+ wrapPlatformError(error, 'bitbucket', 'Could not remove comment from pull request');
147
+ }
148
+ }
149
+ async closeChangeRequest(branchName) {
150
+ const repoPath = `/repositories/${this.workspace}/${this.repoSlug}`;
151
+ try {
152
+ const existingPrs = await this.api.request(`${repoPath}/pullrequests?q=${encodeURIComponent(`source.branch.name="${branchName}" AND state="OPEN"`)}`, BitbucketPrListResponseSchema);
153
+ const pr = existingPrs.values[0];
154
+ if (!pr)
155
+ return;
156
+ await this.api.requestVoid(`${repoPath}/pullrequests/${String(pr.id)}`, {
157
+ method: 'PUT',
158
+ headers: { 'Content-Type': 'application/json' },
159
+ body: JSON.stringify({ state: 'DECLINED' }),
160
+ });
161
+ }
162
+ catch (error) {
163
+ wrapPlatformError(error, 'bitbucket', 'Could not close pull request');
164
+ }
165
+ }
166
+ async findCommentByMarker(basePath, marker) {
167
+ const comments = await this.api.paginate(`${basePath}/comments`, BitbucketCommentSchema);
168
+ const match = comments.find((c) => c.content.raw.includes(marker));
169
+ return match?.id;
170
+ }
171
+ }
172
+ //# sourceMappingURL=writer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writer.js","sourceRoot":"","sources":["../../../src/platforms/bitbucket/writer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { GitHubReader } from './reader.js';
2
+ export { GitHubWriter } from './writer.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/platforms/github/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { GitHubReader } from './reader.js';
2
+ export { GitHubWriter } from './writer.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/platforms/github/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { SourcePlatformReader, ChangeRequestRef, ChangeRequestData, ChangeRequestCommit } from '../source-platform.js';
2
+ export declare class GitHubReader implements SourcePlatformReader {
3
+ private octokit;
4
+ constructor(token?: string);
5
+ parseChangeRequestUrl(url: string): ChangeRequestRef;
6
+ fetchChangeRequest(ref: ChangeRequestRef): Promise<ChangeRequestData>;
7
+ fetchChangeRequestCommits(ref: ChangeRequestRef): Promise<ChangeRequestCommit[]>;
8
+ }
9
+ //# sourceMappingURL=reader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reader.d.ts","sourceRoot":"","sources":["../../../src/platforms/github/reader.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,oBAAoB,EACpB,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACpB,MAAM,uBAAuB,CAAC;AAQ/B,qBAAa,YAAa,YAAW,oBAAoB;IACvD,OAAO,CAAC,OAAO,CAAU;gBAEb,KAAK,CAAC,EAAE,MAAM;IAO1B,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB;IAuC9C,kBAAkB,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAwFrE,yBAAyB,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;CAyBvF"}