@commitspark/git-adapter-github 0.8.3 → 0.20.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 (131) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/README.md +24 -2
  3. package/dist/cjs/{axios-cache-key-generator.js → axios/cache-key-generator.js} +4 -4
  4. package/dist/cjs/axios/cache-key-generator.js.map +1 -0
  5. package/dist/cjs/axios/cached-instance.js +19 -0
  6. package/dist/cjs/axios/cached-instance.js.map +1 -0
  7. package/dist/cjs/github-adapter.js +126 -0
  8. package/dist/cjs/github-adapter.js.map +1 -0
  9. package/dist/cjs/index.js +10 -6
  10. package/dist/cjs/index.js.map +1 -1
  11. package/dist/cjs/model/addition.model.js.map +1 -0
  12. package/dist/cjs/model/deletion.model.js.map +1 -0
  13. package/dist/cjs/util/entries-to-actions-converter.js +28 -0
  14. package/dist/cjs/util/entries-to-actions-converter.js.map +1 -0
  15. package/dist/cjs/util/entry-factory.js +20 -0
  16. package/dist/cjs/util/entry-factory.js.map +1 -0
  17. package/dist/cjs/{graphql-query-factory.service.js → util/graphql-query-factory.js} +16 -16
  18. package/dist/cjs/util/graphql-query-factory.js.map +1 -0
  19. package/dist/cjs/util/path-factory.js +18 -0
  20. package/dist/cjs/util/path-factory.js.map +1 -0
  21. package/dist/cjs/util/types.js +7 -0
  22. package/dist/cjs/util/types.js.map +1 -0
  23. package/dist/esm/{axios-cache-key-generator.js → axios/cache-key-generator.js} +2 -3
  24. package/dist/esm/axios/cache-key-generator.js.map +1 -0
  25. package/dist/esm/axios/cached-instance.js +12 -0
  26. package/dist/esm/axios/cached-instance.js.map +1 -0
  27. package/dist/esm/github-adapter.js +108 -0
  28. package/dist/esm/github-adapter.js.map +1 -0
  29. package/dist/esm/index.js +10 -4
  30. package/dist/esm/index.js.map +1 -1
  31. package/dist/esm/model/addition.model.js.map +1 -0
  32. package/dist/esm/model/deletion.model.js.map +1 -0
  33. package/dist/esm/util/entries-to-actions-converter.js +25 -0
  34. package/dist/esm/util/entries-to-actions-converter.js.map +1 -0
  35. package/dist/esm/util/entry-factory.js +17 -0
  36. package/dist/esm/util/entry-factory.js.map +1 -0
  37. package/{src/graphql-query-factory.service.ts → dist/esm/util/graphql-query-factory.js} +12 -16
  38. package/dist/esm/util/graphql-query-factory.js.map +1 -0
  39. package/dist/esm/util/path-factory.js +12 -0
  40. package/dist/esm/util/path-factory.js.map +1 -0
  41. package/dist/esm/util/types.js +4 -0
  42. package/dist/esm/util/types.js.map +1 -0
  43. package/dist/tsconfig.build.cjs.tsbuildinfo +1 -1
  44. package/dist/tsconfig.build.esm.tsbuildinfo +1 -1
  45. package/dist/tsconfig.build.types.tsbuildinfo +1 -1
  46. package/dist/types/axios/cache-key-generator.d.ts +3 -0
  47. package/dist/types/axios/cache-key-generator.d.ts.map +1 -0
  48. package/dist/types/axios/cached-instance.d.ts +4 -0
  49. package/dist/types/axios/cached-instance.d.ts.map +1 -0
  50. package/dist/types/github-adapter.d.ts +9 -0
  51. package/dist/types/github-adapter.d.ts.map +1 -0
  52. package/dist/types/index.d.ts +3 -4
  53. package/dist/types/index.d.ts.map +1 -1
  54. package/dist/types/model/addition.model.d.ts.map +1 -0
  55. package/dist/types/model/deletion.model.d.ts.map +1 -0
  56. package/dist/types/util/entries-to-actions-converter.d.ts +8 -0
  57. package/dist/types/util/entries-to-actions-converter.d.ts.map +1 -0
  58. package/dist/types/{entry-factory.service.d.ts → util/entry-factory.d.ts} +2 -4
  59. package/dist/types/util/entry-factory.d.ts.map +1 -0
  60. package/dist/types/util/graphql-query-factory.d.ts +5 -0
  61. package/dist/types/util/graphql-query-factory.d.ts.map +1 -0
  62. package/dist/types/util/path-factory.d.ts +4 -0
  63. package/dist/types/util/path-factory.d.ts.map +1 -0
  64. package/dist/types/util/types.d.ts +4 -0
  65. package/dist/types/util/types.d.ts.map +1 -0
  66. package/package.json +3 -3
  67. package/src/{axios-cache-key-generator.ts → axios/cache-key-generator.ts} +1 -3
  68. package/src/axios/cached-instance.ts +17 -0
  69. package/src/github-adapter.ts +179 -0
  70. package/src/index.ts +24 -7
  71. package/src/util/entries-to-actions-converter.ts +36 -0
  72. package/src/util/entry-factory.ts +34 -0
  73. package/{dist/esm/graphql-query-factory.service.js → src/util/graphql-query-factory.ts} +18 -18
  74. package/src/util/path-factory.ts +19 -0
  75. package/src/util/types.ts +3 -0
  76. package/dist/cjs/addition.model.js.map +0 -1
  77. package/dist/cjs/axios-cache-key-generator.js.map +0 -1
  78. package/dist/cjs/container.js +0 -25
  79. package/dist/cjs/container.js.map +0 -1
  80. package/dist/cjs/deletion.model.js.map +0 -1
  81. package/dist/cjs/entries-to-actions-converter.service.js +0 -31
  82. package/dist/cjs/entries-to-actions-converter.service.js.map +0 -1
  83. package/dist/cjs/entry-factory.service.js +0 -25
  84. package/dist/cjs/entry-factory.service.js.map +0 -1
  85. package/dist/cjs/git-hub-adapter.service.js +0 -154
  86. package/dist/cjs/git-hub-adapter.service.js.map +0 -1
  87. package/dist/cjs/graphql-query-factory.service.js.map +0 -1
  88. package/dist/cjs/path-factory.service.js +0 -20
  89. package/dist/cjs/path-factory.service.js.map +0 -1
  90. package/dist/esm/addition.model.js.map +0 -1
  91. package/dist/esm/axios-cache-key-generator.js.map +0 -1
  92. package/dist/esm/container.js +0 -19
  93. package/dist/esm/container.js.map +0 -1
  94. package/dist/esm/deletion.model.js.map +0 -1
  95. package/dist/esm/entries-to-actions-converter.service.js +0 -27
  96. package/dist/esm/entries-to-actions-converter.service.js.map +0 -1
  97. package/dist/esm/entry-factory.service.js +0 -21
  98. package/dist/esm/entry-factory.service.js.map +0 -1
  99. package/dist/esm/git-hub-adapter.service.js +0 -135
  100. package/dist/esm/git-hub-adapter.service.js.map +0 -1
  101. package/dist/esm/graphql-query-factory.service.js.map +0 -1
  102. package/dist/esm/path-factory.service.js +0 -14
  103. package/dist/esm/path-factory.service.js.map +0 -1
  104. package/dist/types/addition.model.d.ts.map +0 -1
  105. package/dist/types/axios-cache-key-generator.d.ts +0 -4
  106. package/dist/types/axios-cache-key-generator.d.ts.map +0 -1
  107. package/dist/types/container.d.ts +0 -3
  108. package/dist/types/container.d.ts.map +0 -1
  109. package/dist/types/deletion.model.d.ts.map +0 -1
  110. package/dist/types/entries-to-actions-converter.service.d.ts +0 -10
  111. package/dist/types/entries-to-actions-converter.service.d.ts.map +0 -1
  112. package/dist/types/entry-factory.service.d.ts.map +0 -1
  113. package/dist/types/git-hub-adapter.service.d.ts +0 -24
  114. package/dist/types/git-hub-adapter.service.d.ts.map +0 -1
  115. package/dist/types/graphql-query-factory.service.d.ts +0 -7
  116. package/dist/types/graphql-query-factory.service.d.ts.map +0 -1
  117. package/dist/types/path-factory.service.d.ts +0 -6
  118. package/dist/types/path-factory.service.d.ts.map +0 -1
  119. package/src/container.ts +0 -27
  120. package/src/entries-to-actions-converter.service.ts +0 -37
  121. package/src/entry-factory.service.ts +0 -35
  122. package/src/git-hub-adapter.service.ts +0 -205
  123. package/src/path-factory.service.ts +0 -21
  124. /package/dist/cjs/{addition.model.js → model/addition.model.js} +0 -0
  125. /package/dist/cjs/{deletion.model.js → model/deletion.model.js} +0 -0
  126. /package/dist/esm/{addition.model.js → model/addition.model.js} +0 -0
  127. /package/dist/esm/{deletion.model.js → model/deletion.model.js} +0 -0
  128. /package/dist/types/{addition.model.d.ts → model/addition.model.d.ts} +0 -0
  129. /package/dist/types/{deletion.model.d.ts → model/deletion.model.d.ts} +0 -0
  130. /package/src/{addition.model.ts → model/addition.model.ts} +0 -0
  131. /package/src/{deletion.model.ts → model/deletion.model.ts} +0 -0
@@ -1,205 +0,0 @@
1
- import { GraphqlQueryFactoryService } from './graphql-query-factory.service'
2
- import {
3
- Commit,
4
- CommitDraft,
5
- Entry,
6
- GitAdapter,
7
- } from '@commitspark/git-adapter'
8
- import { EntriesToActionsConverterService } from './entries-to-actions-converter.service'
9
- import { AxiosCacheInstance, CacheAxiosResponse } from 'axios-cache-interceptor'
10
- import { GitHubRepositoryOptions } from './index'
11
- import { PathFactoryService } from './path-factory.service'
12
- import { EntryFactoryService } from './entry-factory.service'
13
-
14
- export class GitHubAdapterService implements GitAdapter {
15
- static readonly QUERY_CACHE_SECONDS = 10 * 60
16
-
17
- static readonly API_URL = 'https://api.github.com/graphql'
18
-
19
- private gitRepositoryOptions: GitHubRepositoryOptions | undefined
20
-
21
- constructor(
22
- private readonly cachedHttpAdapter: AxiosCacheInstance,
23
- private graphqlQueryFactory: GraphqlQueryFactoryService,
24
- private entriesToActionsConverter: EntriesToActionsConverterService,
25
- private pathFactory: PathFactoryService,
26
- private entryFactory: EntryFactoryService,
27
- ) {}
28
-
29
- public async setRepositoryOptions(
30
- repositoryOptions: GitHubRepositoryOptions,
31
- ): Promise<void> {
32
- this.gitRepositoryOptions = repositoryOptions
33
- }
34
-
35
- public async getEntries(commitHash: string): Promise<Entry[]> {
36
- if (this.gitRepositoryOptions === undefined) {
37
- throw new Error('Repository options must be set before reading')
38
- }
39
-
40
- const token = this.gitRepositoryOptions.accessToken
41
- const pathEntryFolder = this.pathFactory.getPathEntryFolder(
42
- this.gitRepositoryOptions,
43
- )
44
-
45
- const queryFilesContent = this.graphqlQueryFactory.createBlobsContentQuery()
46
- const filesContentResponse = await this.cachedHttpAdapter.post(
47
- GitHubAdapterService.API_URL,
48
- {
49
- query: queryFilesContent,
50
- variables: {
51
- repositoryOwner: this.gitRepositoryOptions.repositoryOwner,
52
- repositoryName: this.gitRepositoryOptions.repositoryName,
53
- expression: `${commitHash}:${pathEntryFolder}`,
54
- },
55
- },
56
- {
57
- headers: {
58
- authorization: `Bearer ${token}`,
59
- },
60
- },
61
- )
62
-
63
- if (!filesContentResponse.data.data.repository?.object?.entries) {
64
- return []
65
- }
66
-
67
- return this.entryFactory.createFromBlobsQueryResponseData(
68
- filesContentResponse.data.data.repository.object.entries,
69
- )
70
- }
71
-
72
- public async getSchema(commitHash: string): Promise<string> {
73
- if (this.gitRepositoryOptions === undefined) {
74
- throw new Error('Repository options must be set before reading')
75
- }
76
-
77
- const repositoryOwner = this.gitRepositoryOptions.repositoryOwner
78
- const repositoryName = this.gitRepositoryOptions.repositoryName
79
- const token = this.gitRepositoryOptions.accessToken
80
- const schemaFilePath = this.pathFactory.getPathSchema(
81
- this.gitRepositoryOptions,
82
- )
83
-
84
- const queryContent = this.graphqlQueryFactory.createBlobContentQuery()
85
- const response = await this.cachedHttpAdapter.post(
86
- GitHubAdapterService.API_URL,
87
- {
88
- query: queryContent,
89
- variables: {
90
- repositoryOwner: repositoryOwner,
91
- repositoryName: repositoryName,
92
- expression: `${commitHash}:${schemaFilePath}`,
93
- },
94
- },
95
- {
96
- headers: {
97
- authorization: `Bearer ${token}`,
98
- },
99
- },
100
- )
101
- const schema = response.data?.data?.repository?.object?.text
102
-
103
- if (!schema) {
104
- throw new Error(
105
- `"${schemaFilePath}" not found in Git repository "${repositoryOwner}/${repositoryName}" at commit "${commitHash}"`,
106
- )
107
- }
108
-
109
- return schema
110
- }
111
-
112
- public async getLatestCommitHash(ref: string): Promise<string> {
113
- if (this.gitRepositoryOptions === undefined) {
114
- throw new Error('Repository options must be set before reading')
115
- }
116
-
117
- const token = this.gitRepositoryOptions.accessToken
118
-
119
- const queryLatestCommit = this.graphqlQueryFactory.createLatestCommitQuery()
120
-
121
- const response = await this.cachedHttpAdapter.post(
122
- GitHubAdapterService.API_URL,
123
- {
124
- query: queryLatestCommit,
125
- variables: {
126
- repositoryOwner: this.gitRepositoryOptions.repositoryOwner,
127
- repositoryName: this.gitRepositoryOptions.repositoryName,
128
- ref: ref,
129
- },
130
- },
131
- {
132
- cache: false, // must not use cache, so we always get the branch's current head
133
- headers: {
134
- authorization: `Bearer ${token}`,
135
- },
136
- },
137
- )
138
-
139
- if (!response.data.data.repository) {
140
- throw new Error(
141
- `No repository found "${this.gitRepositoryOptions.repositoryOwner}/${this.gitRepositoryOptions.repositoryName}"`,
142
- )
143
- }
144
-
145
- const lastCommit =
146
- response.data.data.repository.ref?.target?.oid ??
147
- response.data.data.repository.object?.oid ??
148
- undefined
149
- if (!lastCommit) {
150
- throw new Error(`No commit found for ref "${ref}"`)
151
- }
152
-
153
- return lastCommit
154
- }
155
-
156
- public async createCommit(commitDraft: CommitDraft): Promise<Commit> {
157
- if (this.gitRepositoryOptions === undefined) {
158
- throw new Error('Repository options must be set before committing')
159
- }
160
-
161
- const token = this.gitRepositoryOptions.accessToken
162
- const pathEntryFolder = this.pathFactory.getPathEntryFolder(
163
- this.gitRepositoryOptions,
164
- )
165
-
166
- const { additions, deletions } = this.entriesToActionsConverter.convert(
167
- commitDraft.entries,
168
- pathEntryFolder,
169
- )
170
-
171
- const mutateCommit = this.graphqlQueryFactory.createCommitMutation()
172
- const response: CacheAxiosResponse = await this.cachedHttpAdapter.post(
173
- GitHubAdapterService.API_URL,
174
- {
175
- query: mutateCommit,
176
- variables: {
177
- repositoryNameWithOwner: `${this.gitRepositoryOptions.repositoryOwner}/${this.gitRepositoryOptions.repositoryName}`,
178
- branchName: commitDraft.ref,
179
- commitMessage: commitDraft.message ?? '-',
180
- precedingCommitSha: commitDraft.parentSha,
181
- additions: additions,
182
- deletions: deletions,
183
- },
184
- },
185
- {
186
- cache: false,
187
- headers: {
188
- authorization: `Bearer ${token}`,
189
- },
190
- },
191
- )
192
-
193
- if (response.data.errors) {
194
- throw new Error(JSON.stringify(response.data.errors))
195
- }
196
-
197
- const mutationResult = response.data.data.commitCreate
198
-
199
- if (mutationResult.errors) {
200
- throw new Error(JSON.stringify(mutationResult.errors))
201
- }
202
-
203
- return { ref: mutationResult.commit.oid }
204
- }
205
- }
@@ -1,21 +0,0 @@
1
- import { GitHubRepositoryOptions } from './index'
2
- import { PATH_ENTRY_FOLDER, PATH_SCHEMA_FILE } from '@commitspark/git-adapter'
3
-
4
- export class PathFactoryService {
5
- public getPathSchema(gitRepositoryOptions: GitHubRepositoryOptions) {
6
- return gitRepositoryOptions.pathSchemaFile ?? PATH_SCHEMA_FILE
7
- }
8
-
9
- public getPathEntryFolder(
10
- gitRepositoryOptions: GitHubRepositoryOptions,
11
- ): string {
12
- const pathEntryFolder =
13
- gitRepositoryOptions.pathEntryFolder ?? PATH_ENTRY_FOLDER
14
-
15
- if (pathEntryFolder.endsWith('/')) {
16
- return pathEntryFolder.substring(0, pathEntryFolder.length - 1)
17
- }
18
-
19
- return pathEntryFolder
20
- }
21
- }