@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.
- package/dist/adapters/adapter-factory.d.ts +3 -0
- package/dist/adapters/adapter-factory.d.ts.map +1 -0
- package/dist/adapters/adapter-factory.js +19 -0
- package/dist/adapters/adapter-factory.js.map +1 -0
- package/dist/adapters/adapter-metadata.d.ts +12 -0
- package/dist/adapters/adapter-metadata.d.ts.map +1 -0
- package/dist/adapters/adapter-metadata.js +2 -0
- package/dist/adapters/adapter-metadata.js.map +1 -0
- package/dist/adapters/architecture-adapter.d.ts +42 -0
- package/dist/adapters/architecture-adapter.d.ts.map +1 -0
- package/dist/adapters/architecture-adapter.js +2 -0
- package/dist/adapters/architecture-adapter.js.map +1 -0
- package/dist/adapters/architecture-types.d.ts +32 -0
- package/dist/adapters/architecture-types.d.ts.map +1 -0
- package/dist/adapters/architecture-types.js +2 -0
- package/dist/adapters/architecture-types.js.map +1 -0
- package/dist/adapters/base-patcher.d.ts +38 -0
- package/dist/adapters/base-patcher.d.ts.map +1 -0
- package/dist/adapters/base-patcher.js +266 -0
- package/dist/adapters/base-patcher.js.map +1 -0
- package/dist/adapters/dsl-validation.d.ts +2 -0
- package/dist/adapters/dsl-validation.d.ts.map +1 -0
- package/dist/adapters/dsl-validation.js +24 -0
- package/dist/adapters/dsl-validation.js.map +1 -0
- package/dist/adapters/likec4/adapter.d.ts +37 -0
- package/dist/adapters/likec4/adapter.d.ts.map +1 -0
- package/dist/adapters/likec4/adapter.js +302 -0
- package/dist/adapters/likec4/adapter.js.map +1 -0
- package/dist/adapters/likec4/dsl-validator.d.ts +3 -0
- package/dist/adapters/likec4/dsl-validator.d.ts.map +1 -0
- package/dist/adapters/likec4/dsl-validator.js +22 -0
- package/dist/adapters/likec4/dsl-validator.js.map +1 -0
- package/dist/adapters/likec4/index.d.ts +2 -0
- package/dist/adapters/likec4/index.d.ts.map +1 -0
- package/dist/adapters/likec4/index.js +2 -0
- package/dist/adapters/likec4/index.js.map +1 -0
- package/dist/adapters/likec4/likec4-types.d.ts +7 -0
- package/dist/adapters/likec4/likec4-types.d.ts.map +1 -0
- package/dist/adapters/likec4/likec4-types.js +2 -0
- package/dist/adapters/likec4/likec4-types.js.map +1 -0
- package/dist/adapters/likec4/metadata.d.ts +3 -0
- package/dist/adapters/likec4/metadata.d.ts.map +1 -0
- package/dist/adapters/likec4/metadata.js +30 -0
- package/dist/adapters/likec4/metadata.js.map +1 -0
- package/dist/adapters/likec4/patcher.d.ts +15 -0
- package/dist/adapters/likec4/patcher.d.ts.map +1 -0
- package/dist/adapters/likec4/patcher.js +69 -0
- package/dist/adapters/likec4/patcher.js.map +1 -0
- package/dist/adapters/likec4/version-check.d.ts +11 -0
- package/dist/adapters/likec4/version-check.d.ts.map +1 -0
- package/dist/adapters/likec4/version-check.js +75 -0
- package/dist/adapters/likec4/version-check.js.map +1 -0
- package/dist/adapters/model-patcher.d.ts +49 -0
- package/dist/adapters/model-patcher.d.ts.map +1 -0
- package/dist/adapters/model-patcher.js +15 -0
- package/dist/adapters/model-patcher.js.map +1 -0
- package/dist/adapters/structurizr/adapter.d.ts +39 -0
- package/dist/adapters/structurizr/adapter.d.ts.map +1 -0
- package/dist/adapters/structurizr/adapter.js +372 -0
- package/dist/adapters/structurizr/adapter.js.map +1 -0
- package/dist/adapters/structurizr/dsl-validator.d.ts +3 -0
- package/dist/adapters/structurizr/dsl-validator.d.ts.map +1 -0
- package/dist/adapters/structurizr/dsl-validator.js +26 -0
- package/dist/adapters/structurizr/dsl-validator.js.map +1 -0
- package/dist/adapters/structurizr/index.d.ts +2 -0
- package/dist/adapters/structurizr/index.d.ts.map +1 -0
- package/dist/adapters/structurizr/index.js +2 -0
- package/dist/adapters/structurizr/index.js.map +1 -0
- package/dist/adapters/structurizr/metadata.d.ts +3 -0
- package/dist/adapters/structurizr/metadata.d.ts.map +1 -0
- package/dist/adapters/structurizr/metadata.js +35 -0
- package/dist/adapters/structurizr/metadata.js.map +1 -0
- package/dist/adapters/structurizr/patcher.d.ts +15 -0
- package/dist/adapters/structurizr/patcher.d.ts.map +1 -0
- package/dist/adapters/structurizr/patcher.js +53 -0
- package/dist/adapters/structurizr/patcher.js.map +1 -0
- package/dist/adapters/structurizr/structurizr-cli.d.ts +2 -0
- package/dist/adapters/structurizr/structurizr-cli.d.ts.map +1 -0
- package/dist/adapters/structurizr/structurizr-cli.js +91 -0
- package/dist/adapters/structurizr/structurizr-cli.js.map +1 -0
- package/dist/adapters/structurizr/structurizr-types.d.ts +3 -0
- package/dist/adapters/structurizr/structurizr-types.d.ts.map +1 -0
- package/dist/adapters/structurizr/structurizr-types.js +2 -0
- package/dist/adapters/structurizr/structurizr-types.js.map +1 -0
- package/dist/adapters/url-utils.d.ts +3 -0
- package/dist/adapters/url-utils.d.ts.map +1 -0
- package/dist/adapters/url-utils.js +53 -0
- package/dist/adapters/url-utils.js.map +1 -0
- package/dist/analysis/analysis-types.d.ts +152 -0
- package/dist/analysis/analysis-types.d.ts.map +1 -0
- package/dist/analysis/analysis-types.js +2 -0
- package/dist/analysis/analysis-types.js.map +1 -0
- package/dist/analysis/prompt-builder.d.ts +27 -0
- package/dist/analysis/prompt-builder.d.ts.map +1 -0
- package/dist/analysis/prompt-builder.js +159 -0
- package/dist/analysis/prompt-builder.js.map +1 -0
- package/dist/analysis/prompt-variables.d.ts +72 -0
- package/dist/analysis/prompt-variables.d.ts.map +1 -0
- package/dist/analysis/prompt-variables.js +2 -0
- package/dist/analysis/prompt-variables.js.map +1 -0
- package/dist/analysis/prompts/component-selection.md +50 -0
- package/dist/analysis/prompts/dependency-extraction.md +219 -0
- package/dist/analysis/prompts/drift-analysis.md +154 -0
- package/dist/analysis/prompts/model-patch.md +29 -0
- package/dist/analysis/section-formatters.d.ts +54 -0
- package/dist/analysis/section-formatters.d.ts.map +1 -0
- package/dist/analysis/section-formatters.js +95 -0
- package/dist/analysis/section-formatters.js.map +1 -0
- package/dist/analysis/template-engine.d.ts +11 -0
- package/dist/analysis/template-engine.d.ts.map +1 -0
- package/dist/analysis/template-engine.js +64 -0
- package/dist/analysis/template-engine.js.map +1 -0
- package/dist/ci-entry.d.ts +3 -0
- package/dist/ci-entry.d.ts.map +1 -0
- package/dist/ci-entry.js +67 -0
- package/dist/ci-entry.js.map +1 -0
- package/dist/errors.d.ts +60 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +134 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +45 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +38 -0
- package/dist/index.js.map +1 -0
- package/dist/output/ci-output.d.ts +13 -0
- package/dist/output/ci-output.d.ts.map +1 -0
- package/dist/output/ci-output.js +106 -0
- package/dist/output/ci-output.js.map +1 -0
- package/dist/output/structured-output.d.ts +89 -0
- package/dist/output/structured-output.d.ts.map +1 -0
- package/dist/output/structured-output.js +2 -0
- package/dist/output/structured-output.js.map +1 -0
- package/dist/output.d.ts +73 -0
- package/dist/output.d.ts.map +1 -0
- package/dist/output.js +304 -0
- package/dist/output.js.map +1 -0
- package/dist/pipelines/analyze.d.ts +35 -0
- package/dist/pipelines/analyze.d.ts.map +1 -0
- package/dist/pipelines/analyze.js +316 -0
- package/dist/pipelines/analyze.js.map +1 -0
- package/dist/pipelines/check.d.ts +48 -0
- package/dist/pipelines/check.d.ts.map +1 -0
- package/dist/pipelines/check.js +218 -0
- package/dist/pipelines/check.js.map +1 -0
- package/dist/pipelines/components.d.ts +8 -0
- package/dist/pipelines/components.d.ts.map +1 -0
- package/dist/pipelines/components.js +14 -0
- package/dist/pipelines/components.js.map +1 -0
- package/dist/pipelines/connections.d.ts +34 -0
- package/dist/pipelines/connections.d.ts.map +1 -0
- package/dist/pipelines/connections.js +53 -0
- package/dist/pipelines/connections.js.map +1 -0
- package/dist/pipelines/pr-creation.d.ts +30 -0
- package/dist/pipelines/pr-creation.d.ts.map +1 -0
- package/dist/pipelines/pr-creation.js +26 -0
- package/dist/pipelines/pr-creation.js.map +1 -0
- package/dist/pipelines/progress.d.ts +23 -0
- package/dist/pipelines/progress.d.ts.map +1 -0
- package/dist/pipelines/progress.js +22 -0
- package/dist/pipelines/progress.js.map +1 -0
- package/dist/pipelines/publish.d.ts +39 -0
- package/dist/pipelines/publish.d.ts.map +1 -0
- package/dist/pipelines/publish.js +125 -0
- package/dist/pipelines/publish.js.map +1 -0
- package/dist/pipelines/validate.d.ts +24 -0
- package/dist/pipelines/validate.d.ts.map +1 -0
- package/dist/pipelines/validate.js +79 -0
- package/dist/pipelines/validate.js.map +1 -0
- package/dist/platforms/bitbucket/api-client.d.ts +21 -0
- package/dist/platforms/bitbucket/api-client.d.ts.map +1 -0
- package/dist/platforms/bitbucket/api-client.js +98 -0
- package/dist/platforms/bitbucket/api-client.js.map +1 -0
- package/dist/platforms/bitbucket/index.d.ts +3 -0
- package/dist/platforms/bitbucket/index.d.ts.map +1 -0
- package/dist/platforms/bitbucket/index.js +3 -0
- package/dist/platforms/bitbucket/index.js.map +1 -0
- package/dist/platforms/bitbucket/reader.d.ts +9 -0
- package/dist/platforms/bitbucket/reader.d.ts.map +1 -0
- package/dist/platforms/bitbucket/reader.js +119 -0
- package/dist/platforms/bitbucket/reader.js.map +1 -0
- package/dist/platforms/bitbucket/writer.d.ts +15 -0
- package/dist/platforms/bitbucket/writer.d.ts.map +1 -0
- package/dist/platforms/bitbucket/writer.js +172 -0
- package/dist/platforms/bitbucket/writer.js.map +1 -0
- package/dist/platforms/github/index.d.ts +3 -0
- package/dist/platforms/github/index.d.ts.map +1 -0
- package/dist/platforms/github/index.js +3 -0
- package/dist/platforms/github/index.js.map +1 -0
- package/dist/platforms/github/reader.d.ts +9 -0
- package/dist/platforms/github/reader.d.ts.map +1 -0
- package/dist/platforms/github/reader.js +141 -0
- package/dist/platforms/github/reader.js.map +1 -0
- package/dist/platforms/github/writer.d.ts +15 -0
- package/dist/platforms/github/writer.d.ts.map +1 -0
- package/dist/platforms/github/writer.js +225 -0
- package/dist/platforms/github/writer.js.map +1 -0
- package/dist/platforms/gitlab/index.d.ts +3 -0
- package/dist/platforms/gitlab/index.d.ts.map +1 -0
- package/dist/platforms/gitlab/index.js +3 -0
- package/dist/platforms/gitlab/index.js.map +1 -0
- package/dist/platforms/gitlab/reader.d.ts +9 -0
- package/dist/platforms/gitlab/reader.d.ts.map +1 -0
- package/dist/platforms/gitlab/reader.js +136 -0
- package/dist/platforms/gitlab/reader.js.map +1 -0
- package/dist/platforms/gitlab/writer.d.ts +14 -0
- package/dist/platforms/gitlab/writer.d.ts.map +1 -0
- package/dist/platforms/gitlab/writer.js +130 -0
- package/dist/platforms/gitlab/writer.js.map +1 -0
- package/dist/platforms/platform-factory.d.ts +7 -0
- package/dist/platforms/platform-factory.d.ts.map +1 -0
- package/dist/platforms/platform-factory.js +53 -0
- package/dist/platforms/platform-factory.js.map +1 -0
- package/dist/platforms/platform-utils.d.ts +12 -0
- package/dist/platforms/platform-utils.d.ts.map +1 -0
- package/dist/platforms/platform-utils.js +48 -0
- package/dist/platforms/platform-utils.js.map +1 -0
- package/dist/platforms/source-platform.d.ts +117 -0
- package/dist/platforms/source-platform.d.ts.map +1 -0
- package/dist/platforms/source-platform.js +2 -0
- package/dist/platforms/source-platform.js.map +1 -0
- package/dist/providers/ai-provider.d.ts +23 -0
- package/dist/providers/ai-provider.d.ts.map +1 -0
- package/dist/providers/ai-provider.js +2 -0
- package/dist/providers/ai-provider.js.map +1 -0
- package/dist/providers/analysis-phase.d.ts +13 -0
- package/dist/providers/analysis-phase.d.ts.map +1 -0
- package/dist/providers/analysis-phase.js +14 -0
- package/dist/providers/analysis-phase.js.map +1 -0
- package/dist/providers/anthropic/models.d.ts +5 -0
- package/dist/providers/anthropic/models.d.ts.map +1 -0
- package/dist/providers/anthropic/models.js +5 -0
- package/dist/providers/anthropic/models.js.map +1 -0
- package/dist/providers/anthropic/provider.d.ts +12 -0
- package/dist/providers/anthropic/provider.d.ts.map +1 -0
- package/dist/providers/anthropic/provider.js +47 -0
- package/dist/providers/anthropic/provider.js.map +1 -0
- package/dist/providers/base-provider.d.ts +34 -0
- package/dist/providers/base-provider.d.ts.map +1 -0
- package/dist/providers/base-provider.js +100 -0
- package/dist/providers/base-provider.js.map +1 -0
- package/dist/providers/gemini/models.d.ts +5 -0
- package/dist/providers/gemini/models.d.ts.map +1 -0
- package/dist/providers/gemini/models.js +5 -0
- package/dist/providers/gemini/models.js.map +1 -0
- package/dist/providers/gemini/provider.d.ts +12 -0
- package/dist/providers/gemini/provider.d.ts.map +1 -0
- package/dist/providers/gemini/provider.js +42 -0
- package/dist/providers/gemini/provider.js.map +1 -0
- package/dist/providers/openai/models.d.ts +5 -0
- package/dist/providers/openai/models.d.ts.map +1 -0
- package/dist/providers/openai/models.js +5 -0
- package/dist/providers/openai/models.js.map +1 -0
- package/dist/providers/openai/provider.d.ts +12 -0
- package/dist/providers/openai/provider.d.ts.map +1 -0
- package/dist/providers/openai/provider.js +49 -0
- package/dist/providers/openai/provider.js.map +1 -0
- package/dist/providers/provider-factory.d.ts +3 -0
- package/dist/providers/provider-factory.d.ts.map +1 -0
- package/dist/providers/provider-factory.js +45 -0
- package/dist/providers/provider-factory.js.map +1 -0
- package/dist/schemas/bitbucket-api.schema.d.ts +52 -0
- package/dist/schemas/bitbucket-api.schema.d.ts.map +1 -0
- package/dist/schemas/bitbucket-api.schema.js +50 -0
- package/dist/schemas/bitbucket-api.schema.js.map +1 -0
- package/dist/schemas/common.schema.d.ts +46 -0
- package/dist/schemas/common.schema.d.ts.map +1 -0
- package/dist/schemas/common.schema.js +67 -0
- package/dist/schemas/common.schema.js.map +1 -0
- package/dist/schemas/dependency-extraction.schema.d.ts +17 -0
- package/dist/schemas/dependency-extraction.schema.d.ts.map +1 -0
- package/dist/schemas/dependency-extraction.schema.js +13 -0
- package/dist/schemas/dependency-extraction.schema.js.map +1 -0
- package/dist/schemas/drift-analysis.schema.d.ts +40 -0
- package/dist/schemas/drift-analysis.schema.d.ts.map +1 -0
- package/dist/schemas/drift-analysis.schema.js +15 -0
- package/dist/schemas/drift-analysis.schema.js.map +1 -0
- package/dist/schemas/gitlab-api.schema.d.ts +33 -0
- package/dist/schemas/gitlab-api.schema.d.ts.map +1 -0
- package/dist/schemas/gitlab-api.schema.js +33 -0
- package/dist/schemas/gitlab-api.schema.js.map +1 -0
- package/dist/schemas/likec4.schema.d.ts +26 -0
- package/dist/schemas/likec4.schema.d.ts.map +1 -0
- package/dist/schemas/likec4.schema.js +23 -0
- package/dist/schemas/likec4.schema.js.map +1 -0
- package/dist/schemas/package.schema.d.ts +5 -0
- package/dist/schemas/package.schema.d.ts.map +1 -0
- package/dist/schemas/package.schema.js +5 -0
- package/dist/schemas/package.schema.js.map +1 -0
- package/dist/schemas/source-platform.schema.d.ts +56 -0
- package/dist/schemas/source-platform.schema.d.ts.map +1 -0
- package/dist/schemas/source-platform.schema.js +49 -0
- package/dist/schemas/source-platform.schema.js.map +1 -0
- package/dist/schemas/structurizr.schema.d.ts +234 -0
- package/dist/schemas/structurizr.schema.d.ts.map +1 -0
- package/dist/schemas/structurizr.schema.js +54 -0
- package/dist/schemas/structurizr.schema.js.map +1 -0
- package/dist/skip-patterns +62 -0
- package/dist/utils/config.d.ts +156 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +267 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/error-utils.d.ts +2 -0
- package/dist/utils/error-utils.d.ts.map +1 -0
- package/dist/utils/error-utils.js +6 -0
- package/dist/utils/error-utils.js.map +1 -0
- package/dist/utils/git-diff.d.ts +35 -0
- package/dist/utils/git-diff.d.ts.map +1 -0
- package/dist/utils/git-diff.js +114 -0
- package/dist/utils/git-diff.js.map +1 -0
- package/dist/utils/model-source.d.ts +30 -0
- package/dist/utils/model-source.d.ts.map +1 -0
- package/dist/utils/model-source.js +167 -0
- package/dist/utils/model-source.js.map +1 -0
- package/dist/utils/retry.d.ts +9 -0
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/utils/retry.js +51 -0
- package/dist/utils/retry.js.map +1 -0
- package/dist/utils/skip-patterns.d.ts +7 -0
- package/dist/utils/skip-patterns.d.ts.map +1 -0
- package/dist/utils/skip-patterns.js +35 -0
- package/dist/utils/skip-patterns.js.map +1 -0
- package/dist/utils/validation.d.ts +4 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +37 -0
- package/dist/utils/validation.js.map +1 -0
- 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":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAQ5D,MAAM,OAAO,kBAAkB;IACZ,OAAO,CAAS;IAChB,KAAK,CAAqB;IAE3C,YAAY,KAAc;QACxB,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;QAC7C,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC;IAC1C,CAAC;IAEO,YAAY,CAAC,KAA8B;QACjD,MAAM,OAAO,GAA2B;YACtC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1E,GAAG,KAAK;SACT,CAAC;QACF,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,+EAA+E;IACvE,eAAe,CAAC,KAAa;QACnC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,OAAO,SAAS,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAChC,CAAC;QACD,OAAO,UAAU,KAAK,EAAE,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,OAAO,CACX,IAAY,EACZ,MAAoB,EACpB,UAAmC,EAAE;QAErC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK;YAC/B,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC;YAC3C,IAAI,EAAE,OAAO,CAAC,IAAI;SACnB,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAW,EAAE,CAAC,eAAe,CAAC,CAAC;YACxE,MAAM,IAAI,QAAQ,CAChB,wBAAwB,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,EAC/F,QAAQ,CAAC,MAAM,EACf,EAAE,QAAQ,EAAE,WAAW,EAAE,CAC1B,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,IAAY,EAAE,UAAmC,EAAE;QACnE,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK;YAC/B,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;YACxE,IAAI,EAAE,OAAO,CAAC,IAAI;SACnB,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAW,EAAE,CAAC,eAAe,CAAC,CAAC;YACxE,MAAM,IAAI,QAAQ,CAChB,wBAAwB,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,EAC/F,QAAQ,CAAC,MAAM,EACf,EAAE,QAAQ,EAAE,WAAW,EAAE,CAC1B,CAAC;QACJ,CAAC;QACD,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,IAAY,EAAE,UAAmC,EAAE;QACnE,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK;YAC/B,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC;YAC3C,IAAI,EAAE,OAAO,CAAC,IAAI;SACnB,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAW,EAAE,CAAC,eAAe,CAAC,CAAC;YACxE,MAAM,IAAI,QAAQ,CAChB,wBAAwB,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,EAC/F,QAAQ,CAAC,MAAM,EACf,EAAE,QAAQ,EAAE,WAAW,EAAE,CAC1B,CAAC;QACJ,CAAC;IACH,CAAC;IAED,6DAA6D;IAC7D,KAAK,CAAC,QAAQ,CAAI,IAAY,EAAE,UAAwB;QACtD,MAAM,UAAU,GAAG,CAAC;aACjB,MAAM,CAAC;YACN,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC;YAC3B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;SAC5B,CAAC;aACD,KAAK,EAAE,CAAC;QAEX,MAAM,KAAK,GAAQ,EAAE,CAAC;QACtB,IAAI,GAAG,GAAuB,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,CAAC;QAEvD,OAAO,GAAG,EAAE,CAAC;YACX,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;gBAChC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE;aAC7B,CAAC,CAAC;YACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAW,EAAE,CAAC,eAAe,CAAC,CAAC;gBACxE,MAAM,IAAI,QAAQ,CAChB,wBAAwB,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,EAC/F,QAAQ,CAAC,MAAM,EACf,EAAE,QAAQ,EAAE,WAAW,EAAE,CAC1B,CAAC;YACJ,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnC,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACpC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;YAC3B,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;gBAC7C,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;gBAChD,IAAI,UAAU,KAAK,UAAU,EAAE,CAAC;oBAC9B,MAAM,IAAI,QAAQ,CAChB,4CAA4C,UAAU,SAAS,UAAU,EAAE,EAC3E,CAAC,EACD,EAAE,QAAQ,EAAE,WAAW,EAAE,CAC1B,CAAC;gBACJ,CAAC;YACH,CAAC;YACD,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC;QAClB,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
|
|
@@ -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 @@
|
|
|
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":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EACL,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,yCAAyC,CAAC;AACjD,OAAO,EACL,yBAAyB,EACzB,4BAA4B,EAC5B,0BAA0B,GAC3B,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE9E,MAAM,wBAAwB,GAC5B,sEAAsE,CAAC;AAEzE,oEAAoE;AACpE,SAAS,cAAc,CAAC,GAAW;IACjC,MAAM,KAAK,GAAG,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5C,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;IAC3D,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,GAAG,IAAI,SAAS,EAAE,KAAK,EAAE,qBAAqB,EAAE,CAAC;AAClE,CAAC;AAED,MAAM,OAAO,eAAe;IAClB,GAAG,CAAqB;IAEhC,YAAY,KAAc;QACxB,IAAI,CAAC,GAAG,GAAG,IAAI,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED,qBAAqB,CAAC,GAAW;QAC/B,MAAM,KAAK,GAAG,wBAAwB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,UAAU,CAClB,oHAAoH,EACpH,SAAS,CAAC,oBAAoB,EAC9B,oHAAoH,CACrH,CAAC;QACJ,CAAC;QACD,MAAM,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC;QAChD,IAAI,CAAC,SAAS,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,EAAE,CAAC;YACzC,MAAM,IAAI,UAAU,CAClB,iFAAiF,EACjF,SAAS,CAAC,oBAAoB,EAC9B,iFAAiF,CAClF,CAAC;QACJ,CAAC;QACD,OAAO;YACL,MAAM,EAAE,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC;YAC9B,GAAG;YACH,aAAa,EAAE,yBAAyB,SAAS,IAAI,QAAQ,EAAE;YAC/D,UAAU,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE;SACjD,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,GAAqB;QAC5C,MAAM,SAAS,GAAG,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC;QACvC,MAAM,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC;QACrC,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC;QACxB,MAAM,QAAQ,GAAG,iBAAiB,SAAS,IAAI,QAAQ,iBAAiB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QAEvF,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,yBAAyB,CAAC,CAAC;YAEvE,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,CAC7C,GAAG,QAAQ,WAAW,EACtB,4BAA4B,CAC7B,CAAC;YAEF,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,CAC3C,GAAG,QAAQ,UAAU,EACrB,0BAA0B,CAC3B,CAAC;YAEF,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,QAAQ,OAAO,CAAC,CAAC;YAE/D,MAAM,KAAK,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBAC5C,QAAQ,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,IAAI,KAAK,CAAC,GAAG,EAAE,IAAI,IAAI,SAAS;gBACzD,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,SAAS,EAAE,KAAK,CAAC,WAAW;gBAC5B,SAAS,EAAE,KAAK,CAAC,aAAa;gBAC9B,OAAO,EAAE,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,aAAa;gBAChD,KAAK,EAAE,SAAS,EAAE,sDAAsD;aACzE,CAAC,CAAC,CAAC;YAEJ,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAChE,MAAM,EACJ,KAAK,EAAE,cAAc,EACrB,YAAY,EACZ,gBAAgB,GACjB,GAAG,mBAAmB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;YAE3C,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;YACtE,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;YAEtE,MAAM,MAAM,GAAG;gBACb,MAAM,EAAE,EAAE,CAAC,EAAE;gBACb,KAAK,EAAE,EAAE,CAAC,KAAK;gBACf,IAAI,EAAE,EAAE,CAAC,WAAW,IAAI,IAAI;gBAC5B,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE;gBAC7B,MAAM,EAAE;oBACN,KAAK,EAAE,EAAE,CAAC,MAAM,EAAE,QAAQ,IAAI,SAAS;oBACvC,IAAI,EAAE,EAAE,CAAC,MAAM,EAAE,YAAY;iBAC9B;gBACD,IAAI,EAAE;oBACJ,GAAG,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI;oBAC/B,GAAG,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI;iBAChC;gBACD,IAAI,EAAE;oBACJ,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI;oBAC1B,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI;iBAC3B;gBACD,OAAO,EAAE,aAAa,CAAC,MAAM;gBAC7B,SAAS,EAAE,cAAc;gBACzB,SAAS,EAAE,cAAc;gBACzB,aAAa,EAAE,eAAe,CAAC,MAAM;gBACrC,KAAK,EAAE,cAAc;gBACrB,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE;oBACL,KAAK,EAAE,cAAc,GAAG,cAAc;oBACtC,SAAS,EAAE,cAAc;oBACzB,SAAS,EAAE,cAAc;iBAC1B;gBACD,YAAY;gBACZ,gBAAgB;aACjB,CAAC;YACF,OAAO,QAAQ,CAAC,uBAAuB,EAAE,MAAM,EAAE,+BAA+B,CAAC,CAAC;QACpF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,iBAAiB,CAAC,KAAK,EAAE,WAAW,EAAE,iCAAiC,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;IAED,KAAK,CAAC,yBAAyB,CAAC,GAAqB;QACnD,MAAM,SAAS,GAAG,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC;QACvC,MAAM,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC;QACrC,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC;QACxB,MAAM,QAAQ,GAAG,iBAAiB,SAAS,IAAI,QAAQ,iBAAiB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QAEvF,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,QAAQ,UAAU,EAAE,0BAA0B,CAAC,CAAC;YAC3F,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;gBACpC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC1D,OAAO;oBACL,GAAG,EAAE,MAAM,CAAC,IAAI;oBAChB,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;iBACxB,CAAC;YACJ,CAAC,CAAC,CAAC;YACH,OAAO,QAAQ,CACb,CAAC,CAAC,KAAK,CAAC,yBAAyB,CAAC,EAClC,MAAM,EACN,kCAAkC,CACnC,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,iBAAiB,CAAC,KAAK,EAAE,WAAW,EAAE,yCAAyC,CAAC,CAAC;QACnF,CAAC;IACH,CAAC;CACF"}
|
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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"}
|