@foundation0/git 1.3.0 → 1.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,129 +1,129 @@
1
- export interface GiteaRouteRule {
2
- featurePath: string[]
3
- method: string
4
- swaggerPath: string
5
- staticQuery?: string[]
6
- notes?: string
7
- }
8
-
9
- const rule = (featurePath: string[], method: string, swaggerPath: string, notes?: string): GiteaRouteRule => ({
10
- featurePath,
11
- method,
12
- swaggerPath,
13
- notes,
14
- })
15
-
16
- export const EXACT_GITEA_RULES: GiteaRouteRule[] = [
17
- // Issue commands
18
- rule(['issue', 'close'], 'PATCH', '/repos/{owner}/{repo}/issues/{number}'),
19
- rule(['issue', 'comment'], 'POST', '/repos/{owner}/{repo}/issues/{number}/comments'),
20
- rule(['issue', 'create'], 'POST', '/repos/{owner}/{repo}/issues'),
21
- rule(['issue', 'delete'], 'DELETE', '/repos/{owner}/{repo}/issues/{number}'),
22
- rule(['issue', 'edit'], 'PATCH', '/repos/{owner}/{repo}/issues/{number}'),
23
- rule(['issue', 'list'], 'GET', '/repos/{owner}/{repo}/issues'),
24
- rule(['issue', 'lock'], 'PUT', '/repos/{owner}/{repo}/issues/{number}/lock'),
25
- rule(['issue', 'pin'], 'POST', '/repos/{owner}/{repo}/issues/{number}/pin'),
26
- rule(['issue', 'reopen'], 'PATCH', '/repos/{owner}/{repo}/issues/{number}'),
27
- rule(['issue', 'view'], 'GET', '/repos/{owner}/{repo}/issues/{number}'),
28
-
29
- // PR commands
30
- rule(['pr', 'comment'], 'POST', '/repos/{owner}/{repo}/issues/{number}/comments'),
31
- rule(['pr', 'create'], 'POST', '/repos/{owner}/{repo}/pulls'),
32
- rule(['pr', 'diff'], 'GET', '/repos/{owner}/{repo}/pulls/{number}.{diffType}'),
33
- rule(['pr', 'edit'], 'PATCH', '/repos/{owner}/{repo}/pulls/{number}'),
34
- rule(['pr', 'list'], 'GET', '/repos/{owner}/{repo}/pulls'),
35
- rule(['pr', 'close'], 'PATCH', '/repos/{owner}/{repo}/pulls/{number}'),
36
- rule(['pr', 'lock'], 'PUT', '/repos/{owner}/{repo}/issues/{number}/lock'),
37
- rule(['pr', 'merge'], 'POST', '/repos/{owner}/{repo}/pulls/{number}/merge'),
38
- rule(['pr', 'reopen'], 'PATCH', '/repos/{owner}/{repo}/pulls/{number}'),
39
- rule(['pr', 'view'], 'GET', '/repos/{owner}/{repo}/pulls/{number}'),
40
-
41
- // Repo commands
42
- rule(['repo', 'archive'], 'GET', '/repos/{owner}/{repo}/archive/{archive}'),
43
- rule(['repo', 'create'], 'POST', '/user/repos'),
44
- rule(['repo', 'delete'], 'DELETE', '/repos/{owner}/{repo}'),
45
- rule(['repo', 'deploy-key'], 'GET', '/repos/{owner}/{repo}/keys'),
46
- rule(['repo', 'edit'], 'PATCH', '/repos/{owner}/{repo}'),
47
- rule(['repo', 'fork'], 'POST', '/repos/{owner}/{repo}/forks'),
48
- rule(['repo', 'list'], 'GET', '/user/repos'),
49
- rule(['repo', 'sync'], 'POST', '/repos/{owner}/{repo}/mirror-sync'),
50
- rule(['repo', 'view'], 'GET', '/repos/{owner}/{repo}'),
51
-
52
- // Release commands
53
- rule(['release', 'create'], 'POST', '/repos/{owner}/{repo}/releases'),
54
- rule(['release', 'delete'], 'DELETE', '/repos/{owner}/{repo}/releases/{id}'),
55
- rule(['release', 'delete-asset'], 'DELETE', '/repos/{owner}/{repo}/releases/{id}/assets/{attachment_id}'),
56
- rule(['release', 'download'], 'GET', '/repos/{owner}/{repo}/releases/{id}/assets/{attachment_id}'),
57
- rule(['release', 'edit'], 'PATCH', '/repos/{owner}/{repo}/releases/{id}'),
58
- rule(['release', 'list'], 'GET', '/repos/{owner}/{repo}/releases'),
59
- rule(['release', 'upload'], 'POST', '/repos/{owner}/{repo}/releases/{id}/assets'),
60
- rule(['release', 'verify'], 'GET', '/repos/{owner}/{repo}/releases/{id}'),
61
- rule(['release', 'verify-asset'], 'GET', '/repos/{owner}/{repo}/releases/{id}/assets/{attachment_id}'),
62
- rule(['release', 'view'], 'GET', '/repos/{owner}/{repo}/releases/{id}'),
63
-
64
- // Content commands
65
- rule(['contents', 'create'], 'POST', '/repos/{owner}/{repo}/contents/{filepath}'),
66
- rule(['contents', 'delete'], 'DELETE', '/repos/{owner}/{repo}/contents/{filepath}'),
67
- rule(['contents', 'list'], 'GET', '/repos/{owner}/{repo}/contents/{filepath}'),
68
- rule(['contents', 'update'], 'PUT', '/repos/{owner}/{repo}/contents/{filepath}'),
69
- rule(['contents', 'view'], 'GET', '/repos/{owner}/{repo}/contents/{filepath}'),
70
-
71
- // Search commands
72
- rule(['search', 'code'], 'GET', '/repos/search'),
73
- rule(['search', 'commits'], 'GET', '/repos/search'),
74
- rule(['search', 'issues'], 'GET', '/repos/issues/search'),
75
- rule(['search', 'prs'], 'GET', '/repos/issues/search'),
76
- rule(['search', 'repos'], 'GET', '/repos/search'),
77
-
78
- // Workflow commands
79
- rule(['workflow', 'disable'], 'PUT', '/repos/{owner}/{repo}/actions/workflows/{workflow_id}/disable'),
80
- rule(['workflow', 'enable'], 'PUT', '/repos/{owner}/{repo}/actions/workflows/{workflow_id}/enable'),
81
- rule(['workflow', 'list'], 'GET', '/repos/{owner}/{repo}/actions/workflows'),
82
- rule(['workflow', 'run'], 'POST', '/repos/{owner}/{repo}/actions/workflows/{workflow_id}/dispatches'),
83
- rule(['workflow', 'view'], 'GET', '/repos/{owner}/{repo}/actions/workflows/{workflow_id}'),
84
-
85
- // Run commands (Gitea Actions tasks list is the closest analogue)
86
- rule(['run', 'list'], 'GET', '/repos/{owner}/{repo}/actions/tasks', 'maps run.list to action task list'),
87
-
88
- // Secret and variable commands
89
- rule(['secret', 'delete'], 'DELETE', '/repos/{owner}/{repo}/actions/secrets/{secretname}'),
90
- rule(['secret', 'list'], 'GET', '/repos/{owner}/{repo}/actions/secrets'),
91
- rule(['secret', 'set'], 'PUT', '/repos/{owner}/{repo}/actions/secrets/{secretname}'),
92
- rule(['variable', 'delete'], 'DELETE', '/repos/{owner}/{repo}/actions/variables/{variablename}'),
93
- rule(['variable', 'get'], 'GET', '/repos/{owner}/{repo}/actions/variables/{variablename}'),
94
- rule(['variable', 'list'], 'GET', '/repos/{owner}/{repo}/actions/variables'),
95
- rule(['variable', 'set'], 'POST', '/repos/{owner}/{repo}/actions/variables/{variablename}'),
96
-
97
- // SSH and GPG keys
98
- rule(['gpg-key', 'add'], 'POST', '/user/gpg_keys'),
99
- rule(['gpg-key', 'delete'], 'DELETE', '/user/gpg_keys/{id}'),
100
- rule(['gpg-key', 'list'], 'GET', '/user/gpg_keys'),
101
- rule(['ssh-key', 'add'], 'POST', '/user/keys'),
102
- rule(['ssh-key', 'delete'], 'DELETE', '/user/keys/{id}'),
103
- rule(['ssh-key', 'list'], 'GET', '/user/keys'),
104
-
105
- // Issue labels
106
- rule(['label', 'clone'], 'POST', '/repos/{owner}/{repo}/labels'),
107
- rule(['label', 'create'], 'POST', '/repos/{owner}/{repo}/labels'),
108
- rule(['label', 'delete'], 'DELETE', '/repos/{owner}/{repo}/labels/{id}'),
109
- rule(['label', 'edit'], 'PATCH', '/repos/{owner}/{repo}/labels/{id}'),
110
- rule(['label', 'list'], 'GET', '/repos/{owner}/{repo}/labels'),
111
- ]
112
-
113
- export const DEFAULT_GITEA_FIRST_TOKEN_RULES = new Map<string, GiteaRouteRule>([
114
- ['issue', rule(['issue'], 'GET', '/repos/{owner}/{repo}/issues', 'fallback to issue list')],
115
- ['pr', rule(['pr'], 'GET', '/repos/{owner}/{repo}/pulls', 'fallback to pull request list')],
116
- ['repo', rule(['repo'], 'GET', '/repos/{owner}/{repo}', 'fallback to repository read')],
117
- ['release', rule(['release'], 'GET', '/repos/{owner}/{repo}/releases', 'fallback to release list')],
118
- ['workflow', rule(['workflow'], 'GET', '/repos/{owner}/{repo}/actions/workflows', 'fallback to workflow list')],
119
- ['search', rule(['search'], 'GET', '/repos/search', 'fallback to global repo search')],
120
- ['secret', rule(['secret'], 'GET', '/repos/{owner}/{repo}/actions/secrets', 'fallback to repository secret list')],
121
- ['variable', rule(['variable'], 'GET', '/repos/{owner}/{repo}/actions/variables', 'fallback to repository variable list')],
122
- ['label', rule(['label'], 'GET', '/repos/{owner}/{repo}/labels', 'fallback to repository label list')],
123
- ['org', rule(['org'], 'GET', '/orgs', 'fallback to list organizations')],
124
- ])
125
-
126
- export const getExactGiteaRule = (featurePath: string[]) =>
127
- EXACT_GITEA_RULES.find((rule) => rule.featurePath.length === featurePath.length && rule.featurePath.every((value, index) => value === featurePath[index]))
128
-
129
- export const getDefaultGiteaRule = (featurePath: string[]) => DEFAULT_GITEA_FIRST_TOKEN_RULES.get(featurePath[0])
1
+ export interface GiteaRouteRule {
2
+ featurePath: string[]
3
+ method: string
4
+ swaggerPath: string
5
+ staticQuery?: string[]
6
+ notes?: string
7
+ }
8
+
9
+ const rule = (featurePath: string[], method: string, swaggerPath: string, notes?: string): GiteaRouteRule => ({
10
+ featurePath,
11
+ method,
12
+ swaggerPath,
13
+ notes,
14
+ })
15
+
16
+ export const EXACT_GITEA_RULES: GiteaRouteRule[] = [
17
+ // Issue commands
18
+ rule(['issue', 'close'], 'PATCH', '/repos/{owner}/{repo}/issues/{number}'),
19
+ rule(['issue', 'comment'], 'POST', '/repos/{owner}/{repo}/issues/{number}/comments'),
20
+ rule(['issue', 'create'], 'POST', '/repos/{owner}/{repo}/issues'),
21
+ rule(['issue', 'delete'], 'DELETE', '/repos/{owner}/{repo}/issues/{number}'),
22
+ rule(['issue', 'edit'], 'PATCH', '/repos/{owner}/{repo}/issues/{number}'),
23
+ rule(['issue', 'list'], 'GET', '/repos/{owner}/{repo}/issues'),
24
+ rule(['issue', 'lock'], 'PUT', '/repos/{owner}/{repo}/issues/{number}/lock'),
25
+ rule(['issue', 'pin'], 'POST', '/repos/{owner}/{repo}/issues/{number}/pin'),
26
+ rule(['issue', 'reopen'], 'PATCH', '/repos/{owner}/{repo}/issues/{number}'),
27
+ rule(['issue', 'view'], 'GET', '/repos/{owner}/{repo}/issues/{number}'),
28
+
29
+ // PR commands
30
+ rule(['pr', 'comment'], 'POST', '/repos/{owner}/{repo}/issues/{number}/comments'),
31
+ rule(['pr', 'create'], 'POST', '/repos/{owner}/{repo}/pulls'),
32
+ rule(['pr', 'diff'], 'GET', '/repos/{owner}/{repo}/pulls/{number}.{diffType}'),
33
+ rule(['pr', 'edit'], 'PATCH', '/repos/{owner}/{repo}/pulls/{number}'),
34
+ rule(['pr', 'list'], 'GET', '/repos/{owner}/{repo}/pulls'),
35
+ rule(['pr', 'close'], 'PATCH', '/repos/{owner}/{repo}/pulls/{number}'),
36
+ rule(['pr', 'lock'], 'PUT', '/repos/{owner}/{repo}/issues/{number}/lock'),
37
+ rule(['pr', 'merge'], 'POST', '/repos/{owner}/{repo}/pulls/{number}/merge'),
38
+ rule(['pr', 'reopen'], 'PATCH', '/repos/{owner}/{repo}/pulls/{number}'),
39
+ rule(['pr', 'view'], 'GET', '/repos/{owner}/{repo}/pulls/{number}'),
40
+
41
+ // Repo commands
42
+ rule(['repo', 'archive'], 'GET', '/repos/{owner}/{repo}/archive/{archive}'),
43
+ rule(['repo', 'create'], 'POST', '/user/repos'),
44
+ rule(['repo', 'delete'], 'DELETE', '/repos/{owner}/{repo}'),
45
+ rule(['repo', 'deploy-key'], 'GET', '/repos/{owner}/{repo}/keys'),
46
+ rule(['repo', 'edit'], 'PATCH', '/repos/{owner}/{repo}'),
47
+ rule(['repo', 'fork'], 'POST', '/repos/{owner}/{repo}/forks'),
48
+ rule(['repo', 'list'], 'GET', '/user/repos'),
49
+ rule(['repo', 'sync'], 'POST', '/repos/{owner}/{repo}/mirror-sync'),
50
+ rule(['repo', 'view'], 'GET', '/repos/{owner}/{repo}'),
51
+
52
+ // Release commands
53
+ rule(['release', 'create'], 'POST', '/repos/{owner}/{repo}/releases'),
54
+ rule(['release', 'delete'], 'DELETE', '/repos/{owner}/{repo}/releases/{id}'),
55
+ rule(['release', 'delete-asset'], 'DELETE', '/repos/{owner}/{repo}/releases/{id}/assets/{attachment_id}'),
56
+ rule(['release', 'download'], 'GET', '/repos/{owner}/{repo}/releases/{id}/assets/{attachment_id}'),
57
+ rule(['release', 'edit'], 'PATCH', '/repos/{owner}/{repo}/releases/{id}'),
58
+ rule(['release', 'list'], 'GET', '/repos/{owner}/{repo}/releases'),
59
+ rule(['release', 'upload'], 'POST', '/repos/{owner}/{repo}/releases/{id}/assets'),
60
+ rule(['release', 'verify'], 'GET', '/repos/{owner}/{repo}/releases/{id}'),
61
+ rule(['release', 'verify-asset'], 'GET', '/repos/{owner}/{repo}/releases/{id}/assets/{attachment_id}'),
62
+ rule(['release', 'view'], 'GET', '/repos/{owner}/{repo}/releases/{id}'),
63
+
64
+ // Content commands
65
+ rule(['contents', 'create'], 'POST', '/repos/{owner}/{repo}/contents/{filepath}'),
66
+ rule(['contents', 'delete'], 'DELETE', '/repos/{owner}/{repo}/contents/{filepath}'),
67
+ rule(['contents', 'list'], 'GET', '/repos/{owner}/{repo}/contents/{filepath}'),
68
+ rule(['contents', 'update'], 'PUT', '/repos/{owner}/{repo}/contents/{filepath}'),
69
+ rule(['contents', 'view'], 'GET', '/repos/{owner}/{repo}/contents/{filepath}'),
70
+
71
+ // Search commands
72
+ rule(['search', 'code'], 'GET', '/repos/search'),
73
+ rule(['search', 'commits'], 'GET', '/repos/search'),
74
+ rule(['search', 'issues'], 'GET', '/repos/issues/search'),
75
+ rule(['search', 'prs'], 'GET', '/repos/issues/search'),
76
+ rule(['search', 'repos'], 'GET', '/repos/search'),
77
+
78
+ // Workflow commands
79
+ rule(['workflow', 'disable'], 'PUT', '/repos/{owner}/{repo}/actions/workflows/{workflow_id}/disable'),
80
+ rule(['workflow', 'enable'], 'PUT', '/repos/{owner}/{repo}/actions/workflows/{workflow_id}/enable'),
81
+ rule(['workflow', 'list'], 'GET', '/repos/{owner}/{repo}/actions/workflows'),
82
+ rule(['workflow', 'run'], 'POST', '/repos/{owner}/{repo}/actions/workflows/{workflow_id}/dispatches'),
83
+ rule(['workflow', 'view'], 'GET', '/repos/{owner}/{repo}/actions/workflows/{workflow_id}'),
84
+
85
+ // Run commands (Gitea Actions tasks list is the closest analogue)
86
+ rule(['run', 'list'], 'GET', '/repos/{owner}/{repo}/actions/tasks', 'maps run.list to action task list'),
87
+
88
+ // Secret and variable commands
89
+ rule(['secret', 'delete'], 'DELETE', '/repos/{owner}/{repo}/actions/secrets/{secretname}'),
90
+ rule(['secret', 'list'], 'GET', '/repos/{owner}/{repo}/actions/secrets'),
91
+ rule(['secret', 'set'], 'PUT', '/repos/{owner}/{repo}/actions/secrets/{secretname}'),
92
+ rule(['variable', 'delete'], 'DELETE', '/repos/{owner}/{repo}/actions/variables/{variablename}'),
93
+ rule(['variable', 'get'], 'GET', '/repos/{owner}/{repo}/actions/variables/{variablename}'),
94
+ rule(['variable', 'list'], 'GET', '/repos/{owner}/{repo}/actions/variables'),
95
+ rule(['variable', 'set'], 'POST', '/repos/{owner}/{repo}/actions/variables/{variablename}'),
96
+
97
+ // SSH and GPG keys
98
+ rule(['gpg-key', 'add'], 'POST', '/user/gpg_keys'),
99
+ rule(['gpg-key', 'delete'], 'DELETE', '/user/gpg_keys/{id}'),
100
+ rule(['gpg-key', 'list'], 'GET', '/user/gpg_keys'),
101
+ rule(['ssh-key', 'add'], 'POST', '/user/keys'),
102
+ rule(['ssh-key', 'delete'], 'DELETE', '/user/keys/{id}'),
103
+ rule(['ssh-key', 'list'], 'GET', '/user/keys'),
104
+
105
+ // Issue labels
106
+ rule(['label', 'clone'], 'POST', '/repos/{owner}/{repo}/labels'),
107
+ rule(['label', 'create'], 'POST', '/repos/{owner}/{repo}/labels'),
108
+ rule(['label', 'delete'], 'DELETE', '/repos/{owner}/{repo}/labels/{id}'),
109
+ rule(['label', 'edit'], 'PATCH', '/repos/{owner}/{repo}/labels/{id}'),
110
+ rule(['label', 'list'], 'GET', '/repos/{owner}/{repo}/labels'),
111
+ ]
112
+
113
+ export const DEFAULT_GITEA_FIRST_TOKEN_RULES = new Map<string, GiteaRouteRule>([
114
+ ['issue', rule(['issue'], 'GET', '/repos/{owner}/{repo}/issues', 'fallback to issue list')],
115
+ ['pr', rule(['pr'], 'GET', '/repos/{owner}/{repo}/pulls', 'fallback to pull request list')],
116
+ ['repo', rule(['repo'], 'GET', '/repos/{owner}/{repo}', 'fallback to repository read')],
117
+ ['release', rule(['release'], 'GET', '/repos/{owner}/{repo}/releases', 'fallback to release list')],
118
+ ['workflow', rule(['workflow'], 'GET', '/repos/{owner}/{repo}/actions/workflows', 'fallback to workflow list')],
119
+ ['search', rule(['search'], 'GET', '/repos/search', 'fallback to global repo search')],
120
+ ['secret', rule(['secret'], 'GET', '/repos/{owner}/{repo}/actions/secrets', 'fallback to repository secret list')],
121
+ ['variable', rule(['variable'], 'GET', '/repos/{owner}/{repo}/actions/variables', 'fallback to repository variable list')],
122
+ ['label', rule(['label'], 'GET', '/repos/{owner}/{repo}/labels', 'fallback to repository label list')],
123
+ ['org', rule(['org'], 'GET', '/orgs', 'fallback to list organizations')],
124
+ ])
125
+
126
+ export const getExactGiteaRule = (featurePath: string[]) =>
127
+ EXACT_GITEA_RULES.find((rule) => rule.featurePath.length === featurePath.length && rule.featurePath.every((value, index) => value === featurePath[index]))
128
+
129
+ export const getDefaultGiteaRule = (featurePath: string[]) => DEFAULT_GITEA_FIRST_TOKEN_RULES.get(featurePath[0])
@@ -1,44 +1,44 @@
1
- import { buildGitApiMockResponse } from '../spec-mock'
2
- import { type GitPlatformConfig, getGitPlatformConfig } from './config'
3
- import { GiteaPlatformAdapter, type GiteaPlatformAdapterOptions, type GitApiFeatureContext, type GitApiFeatureMapping } from './gitea-adapter'
4
-
5
- export type AnyGitPlatformAdapter = GiteaPlatformAdapter
6
-
7
- export interface GitPlatformAdapterFactoryDeps {
8
- config?: Partial<GitPlatformConfig>
9
- swaggerSpec?: GiteaPlatformAdapterOptions['swaggerSpec']
10
- }
11
-
12
- export interface GitPlatformInvocationResult {
13
- mapping: GitApiFeatureMapping
14
- response: ReturnType<typeof buildGitApiMockResponse>
15
- }
16
-
17
- export const createGitPlatformAdapter = (
18
- options: GitPlatformAdapterFactoryDeps = {},
19
- ): AnyGitPlatformAdapter => {
20
- const config = getGitPlatformConfig(options.config)
21
-
22
- if (config.platform === 'GITEA') {
23
- return new GiteaPlatformAdapter({
24
- giteaHost: config.giteaHost,
25
- giteaToken: config.giteaToken,
26
- giteaSwaggerPath: config.giteaSwaggerPath,
27
- apiVersion: config.giteaApiVersion,
28
- ...(options.swaggerSpec ? { swaggerSpec: options.swaggerSpec as GiteaPlatformAdapterOptions['swaggerSpec'] } : {}),
29
- })
30
- }
31
-
32
- throw new Error(`Unsupported platform: ${config.platform}`)
33
- }
34
-
35
- export const mapGitServiceFeature = async (
36
- context: GitApiFeatureContext,
37
- options: GitPlatformAdapterFactoryDeps = {},
38
- ): Promise<GitPlatformInvocationResult> => {
39
- const adapter = createGitPlatformAdapter(options)
40
- const mapping = await adapter.mapFeature(context)
41
- const response = await adapter.mapFeatureResponse(context)
42
-
43
- return { mapping, response }
44
- }
1
+ import { buildGitApiMockResponse } from '../spec-mock'
2
+ import { type GitPlatformConfig, getGitPlatformConfig } from './config'
3
+ import { GiteaPlatformAdapter, type GiteaPlatformAdapterOptions, type GitApiFeatureContext, type GitApiFeatureMapping } from './gitea-adapter'
4
+
5
+ export type AnyGitPlatformAdapter = GiteaPlatformAdapter
6
+
7
+ export interface GitPlatformAdapterFactoryDeps {
8
+ config?: Partial<GitPlatformConfig>
9
+ swaggerSpec?: GiteaPlatformAdapterOptions['swaggerSpec']
10
+ }
11
+
12
+ export interface GitPlatformInvocationResult {
13
+ mapping: GitApiFeatureMapping
14
+ response: ReturnType<typeof buildGitApiMockResponse>
15
+ }
16
+
17
+ export const createGitPlatformAdapter = (
18
+ options: GitPlatformAdapterFactoryDeps = {},
19
+ ): AnyGitPlatformAdapter => {
20
+ const config = getGitPlatformConfig(options.config)
21
+
22
+ if (config.platform === 'GITEA') {
23
+ return new GiteaPlatformAdapter({
24
+ giteaHost: config.giteaHost,
25
+ giteaToken: config.giteaToken,
26
+ giteaSwaggerPath: config.giteaSwaggerPath,
27
+ apiVersion: config.giteaApiVersion,
28
+ ...(options.swaggerSpec ? { swaggerSpec: options.swaggerSpec as GiteaPlatformAdapterOptions['swaggerSpec'] } : {}),
29
+ })
30
+ }
31
+
32
+ throw new Error(`Unsupported platform: ${config.platform}`)
33
+ }
34
+
35
+ export const mapGitServiceFeature = async (
36
+ context: GitApiFeatureContext,
37
+ options: GitPlatformAdapterFactoryDeps = {},
38
+ ): Promise<GitPlatformInvocationResult> => {
39
+ const adapter = createGitPlatformAdapter(options)
40
+ const mapping = await adapter.mapFeature(context)
41
+ const response = await adapter.mapFeatureResponse(context)
42
+
43
+ return { mapping, response }
44
+ }