github-issue-tower-defence-management 1.154.0 → 1.154.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.
Files changed (23) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/README.md +6 -3
  3. package/bin/adapter/repositories/GraphqlProjectRepository.js +102 -114
  4. package/bin/adapter/repositories/GraphqlProjectRepository.js.map +1 -1
  5. package/bin/adapter/repositories/RestProjectRepository.js +95 -0
  6. package/bin/adapter/repositories/RestProjectRepository.js.map +1 -0
  7. package/bin/adapter/repositories/projectFieldDefinition.js +88 -0
  8. package/bin/adapter/repositories/projectFieldDefinition.js.map +1 -0
  9. package/package.json +1 -1
  10. package/src/adapter/repositories/GraphqlProjectRepository.diskCache.test.ts +16 -4
  11. package/src/adapter/repositories/GraphqlProjectRepository.test.ts +8 -27
  12. package/src/adapter/repositories/GraphqlProjectRepository.ts +139 -151
  13. package/src/adapter/repositories/GraphqlProjectRepositoryProjectLocation.test.ts +296 -0
  14. package/src/adapter/repositories/RestProjectRepository.test.ts +277 -0
  15. package/src/adapter/repositories/RestProjectRepository.ts +129 -0
  16. package/src/adapter/repositories/projectFieldDefinition.test.ts +189 -0
  17. package/src/adapter/repositories/projectFieldDefinition.ts +131 -0
  18. package/types/adapter/repositories/GraphqlProjectRepository.d.ts +6 -1
  19. package/types/adapter/repositories/GraphqlProjectRepository.d.ts.map +1 -1
  20. package/types/adapter/repositories/RestProjectRepository.d.ts +18 -0
  21. package/types/adapter/repositories/RestProjectRepository.d.ts.map +1 -0
  22. package/types/adapter/repositories/projectFieldDefinition.d.ts +17 -0
  23. package/types/adapter/repositories/projectFieldDefinition.d.ts.map +1 -0
@@ -0,0 +1,189 @@
1
+ import {
2
+ ProjectFieldDefinition,
3
+ convertToFieldOptionColor,
4
+ projectFromDefinition,
5
+ } from './projectFieldDefinition';
6
+
7
+ describe('convertToFieldOptionColor', () => {
8
+ it('should preserve PINK so the Todo by human status button renders pink', () => {
9
+ expect(convertToFieldOptionColor('PINK')).toEqual('PINK');
10
+ });
11
+
12
+ it('should preserve ORANGE so the Unread status button renders orange', () => {
13
+ expect(convertToFieldOptionColor('ORANGE')).toEqual('ORANGE');
14
+ });
15
+
16
+ it('should preserve the remaining GitHub project option colors', () => {
17
+ expect(convertToFieldOptionColor('RED')).toEqual('RED');
18
+ expect(convertToFieldOptionColor('YELLOW')).toEqual('YELLOW');
19
+ expect(convertToFieldOptionColor('GREEN')).toEqual('GREEN');
20
+ expect(convertToFieldOptionColor('BLUE')).toEqual('BLUE');
21
+ expect(convertToFieldOptionColor('PURPLE')).toEqual('PURPLE');
22
+ expect(convertToFieldOptionColor('GRAY')).toEqual('GRAY');
23
+ });
24
+
25
+ it('should fall back to GRAY for an unknown color value', () => {
26
+ expect(convertToFieldOptionColor('UNKNOWN')).toEqual('GRAY');
27
+ });
28
+ });
29
+
30
+ describe('projectFromDefinition', () => {
31
+ const statusField: ProjectFieldDefinition = {
32
+ fieldId: 'PVTSSF_status',
33
+ databaseId: 12940049,
34
+ name: 'Status',
35
+ options: [
36
+ {
37
+ id: 'f75ad846',
38
+ name: 'Unread',
39
+ color: 'ORANGE',
40
+ description: '',
41
+ },
42
+ ],
43
+ };
44
+ const storyField: ProjectFieldDefinition = {
45
+ fieldId: 'PVTSSF_story',
46
+ databaseId: 133939017,
47
+ name: 'story',
48
+ options: [
49
+ {
50
+ id: '6dc26727',
51
+ name: 'regular / workflow management',
52
+ color: 'BLUE',
53
+ description: 'workflow',
54
+ },
55
+ {
56
+ id: '4ada6c4c',
57
+ name: 'regular / entertainment',
58
+ color: 'BLUE',
59
+ description: '',
60
+ },
61
+ ],
62
+ };
63
+
64
+ it('should map the status field and every optional field it finds by name', () => {
65
+ const project = projectFromDefinition({
66
+ id: 'PVT_project',
67
+ url: 'https://github.com/users/HiromiShikata/projects/48',
68
+ databaseId: 1403371,
69
+ name: 'UMINO',
70
+ fields: [
71
+ statusField,
72
+ storyField,
73
+ {
74
+ fieldId: 'PVTF_nextactiondate',
75
+ databaseId: 35978365,
76
+ name: 'nextactiondate',
77
+ options: [],
78
+ },
79
+ {
80
+ fieldId: 'PVTSSF_nextactionhour',
81
+ databaseId: 133948391,
82
+ name: 'nextactionhour',
83
+ options: [],
84
+ },
85
+ {
86
+ fieldId: 'PVTF_remaining',
87
+ databaseId: 1,
88
+ name: 'remaining estimation minutes',
89
+ options: [],
90
+ },
91
+ {
92
+ fieldId: 'PVTF_depended',
93
+ databaseId: 156128545,
94
+ name: 'Depended Issue URL separated by comma',
95
+ options: [],
96
+ },
97
+ {
98
+ fieldId: 'PVTF_completion',
99
+ databaseId: 2,
100
+ name: 'Completion Date (50% Confidence)',
101
+ options: [],
102
+ },
103
+ ],
104
+ });
105
+
106
+ expect(project).toEqual({
107
+ id: 'PVT_project',
108
+ url: 'https://github.com/users/HiromiShikata/projects/48',
109
+ databaseId: 1403371,
110
+ name: 'UMINO',
111
+ status: {
112
+ name: 'Status',
113
+ fieldId: 'PVTSSF_status',
114
+ statuses: statusField.options,
115
+ },
116
+ nextActionDate: {
117
+ name: 'nextactiondate',
118
+ fieldId: 'PVTF_nextactiondate',
119
+ },
120
+ nextActionHour: {
121
+ name: 'nextactionhour',
122
+ fieldId: 'PVTSSF_nextactionhour',
123
+ },
124
+ story: {
125
+ name: 'story',
126
+ fieldId: 'PVTSSF_story',
127
+ databaseId: 133939017,
128
+ stories: storyField.options,
129
+ workflowManagementStory: storyField.options[0],
130
+ },
131
+ remainingEstimationMinutes: {
132
+ name: 'remaining estimation minutes',
133
+ fieldId: 'PVTF_remaining',
134
+ },
135
+ dependedIssueUrlSeparatedByComma: {
136
+ name: 'Depended Issue URL separated by comma',
137
+ fieldId: 'PVTF_depended',
138
+ },
139
+ completionDate50PercentConfidence: {
140
+ name: 'Completion Date (50% Confidence)',
141
+ fieldId: 'PVTF_completion',
142
+ },
143
+ });
144
+ });
145
+
146
+ it('should leave every optional field null when the project carries only the status field', () => {
147
+ const project = projectFromDefinition({
148
+ id: 'PVT_project',
149
+ url: 'https://github.com/orgs/X-Mile/projects/7',
150
+ databaseId: 7,
151
+ name: 'minimal',
152
+ fields: [statusField],
153
+ });
154
+
155
+ expect(project.story).toBeNull();
156
+ expect(project.nextActionDate).toBeNull();
157
+ expect(project.nextActionHour).toBeNull();
158
+ expect(project.remainingEstimationMinutes).toBeNull();
159
+ expect(project.dependedIssueUrlSeparatedByComma).toBeNull();
160
+ expect(project.completionDate50PercentConfidence).toBeNull();
161
+ });
162
+
163
+ it('should leave the story null when no option names the workflow management story', () => {
164
+ const project = projectFromDefinition({
165
+ id: 'PVT_project',
166
+ url: 'https://github.com/users/HiromiShikata/projects/48',
167
+ databaseId: 1403371,
168
+ name: 'UMINO',
169
+ fields: [
170
+ statusField,
171
+ { ...storyField, options: [storyField.options[1]] },
172
+ ],
173
+ });
174
+
175
+ expect(project.story).toBeNull();
176
+ });
177
+
178
+ it('should throw when the project has no status field', () => {
179
+ expect(() =>
180
+ projectFromDefinition({
181
+ id: 'PVT_project',
182
+ url: 'https://github.com/users/HiromiShikata/projects/48',
183
+ databaseId: 1403371,
184
+ name: 'UMINO',
185
+ fields: [storyField],
186
+ }),
187
+ ).toThrow('status field is not found');
188
+ });
189
+ });
@@ -0,0 +1,131 @@
1
+ import { FieldOption, Project } from '../../domain/entities/Project';
2
+ import {
3
+ DEPENDED_ISSUE_URL_FIELD_NAME,
4
+ NEXT_ACTION_DATE_FIELD_NAME,
5
+ NEXT_ACTION_HOUR_FIELD_NAME,
6
+ STORY_FIELD_NAME,
7
+ } from '../../domain/entities/RequiredProjectField';
8
+ import { normalizeFieldName } from './utils';
9
+
10
+ export type ProjectFieldDefinition = {
11
+ fieldId: string;
12
+ databaseId: number;
13
+ name: string;
14
+ options: FieldOption[];
15
+ };
16
+
17
+ export type ProjectDefinition = {
18
+ id: string;
19
+ url: string;
20
+ databaseId: number;
21
+ name: string;
22
+ fields: ProjectFieldDefinition[];
23
+ };
24
+
25
+ export const convertToFieldOptionColor = (
26
+ color: string,
27
+ ): FieldOption['color'] => {
28
+ switch (color) {
29
+ case 'RED':
30
+ case 'YELLOW':
31
+ case 'GREEN':
32
+ case 'BLUE':
33
+ case 'PURPLE':
34
+ case 'ORANGE':
35
+ case 'PINK':
36
+ case 'GRAY':
37
+ return color;
38
+ default:
39
+ return 'GRAY';
40
+ }
41
+ };
42
+
43
+ export const projectFromDefinition = (
44
+ definition: ProjectDefinition,
45
+ ): Project => {
46
+ const nextActionDate = definition.fields.find(
47
+ (field) =>
48
+ normalizeFieldName(field.name) ===
49
+ normalizeFieldName(NEXT_ACTION_DATE_FIELD_NAME),
50
+ );
51
+ const nextActionHour = definition.fields.find(
52
+ (field) =>
53
+ normalizeFieldName(field.name) ===
54
+ normalizeFieldName(NEXT_ACTION_HOUR_FIELD_NAME),
55
+ );
56
+ const status = definition.fields.find(
57
+ (field) => normalizeFieldName(field.name) === 'status',
58
+ );
59
+ if (!status) {
60
+ throw new Error('status field is not found');
61
+ }
62
+ const story = definition.fields.find(
63
+ (field) =>
64
+ normalizeFieldName(field.name) === normalizeFieldName(STORY_FIELD_NAME),
65
+ );
66
+ const workflowManagementStory = story?.options.find((option) =>
67
+ normalizeFieldName(option.name).includes('workflowmanagement'),
68
+ );
69
+ const remainingEstimationMinutes = definition.fields.find(
70
+ (field) => normalizeFieldName(field.name) === 'remainingestimationminutes',
71
+ );
72
+ const dependedIssueUrlSeparatedByComma = definition.fields.find((field) =>
73
+ normalizeFieldName(field.name).startsWith(
74
+ normalizeFieldName(DEPENDED_ISSUE_URL_FIELD_NAME),
75
+ ),
76
+ );
77
+ const completionDate50PercentConfidence = definition.fields.find((field) =>
78
+ normalizeFieldName(field.name).startsWith('completiondate'),
79
+ );
80
+ return {
81
+ id: definition.id,
82
+ url: definition.url,
83
+ databaseId: definition.databaseId,
84
+ name: definition.name,
85
+ status: {
86
+ name: status.name,
87
+ fieldId: status.fieldId,
88
+ statuses: status.options,
89
+ },
90
+ nextActionDate: nextActionDate
91
+ ? {
92
+ name: nextActionDate.name,
93
+ fieldId: nextActionDate.fieldId,
94
+ }
95
+ : null,
96
+ nextActionHour: nextActionHour
97
+ ? {
98
+ name: nextActionHour.name,
99
+ fieldId: nextActionHour.fieldId,
100
+ }
101
+ : null,
102
+ story:
103
+ story && workflowManagementStory
104
+ ? {
105
+ name: story.name,
106
+ fieldId: story.fieldId,
107
+ databaseId: story.databaseId,
108
+ stories: story.options,
109
+ workflowManagementStory,
110
+ }
111
+ : null,
112
+ remainingEstimationMinutes: remainingEstimationMinutes
113
+ ? {
114
+ name: remainingEstimationMinutes.name,
115
+ fieldId: remainingEstimationMinutes.fieldId,
116
+ }
117
+ : null,
118
+ dependedIssueUrlSeparatedByComma: dependedIssueUrlSeparatedByComma
119
+ ? {
120
+ name: dependedIssueUrlSeparatedByComma.name,
121
+ fieldId: dependedIssueUrlSeparatedByComma.fieldId,
122
+ }
123
+ : null,
124
+ completionDate50PercentConfidence: completionDate50PercentConfidence
125
+ ? {
126
+ name: completionDate50PercentConfidence.name,
127
+ fieldId: completionDate50PercentConfidence.fieldId,
128
+ }
129
+ : null,
130
+ };
131
+ };
@@ -4,13 +4,17 @@ import { LocalStorageRepository } from './LocalStorageRepository';
4
4
  import { ProjectRepository } from '../../domain/usecases/adapter-interfaces/ProjectRepository';
5
5
  import { FieldOption, Project } from '../../domain/entities/Project';
6
6
  import { RequiredProjectFieldDefinition } from '../../domain/entities/RequiredProjectField';
7
- export declare const convertToFieldOptionColor: (color: string) => FieldOption["color"];
8
7
  export declare class GraphqlProjectRepository extends BaseGitHubRepository implements Pick<ProjectRepository, 'getProject' | 'findProjectIdByUrl' | 'getByUrl' | 'updateStoryList' | 'updateStatusList' | 'listFieldNames' | 'createField'> {
9
8
  private readonly projectIdCache;
10
9
  private readonly fetchProjectIdFailedAt;
10
+ private readonly projectLocationCache;
11
11
  private readonly projectCache?;
12
12
  private readonly projectIssuesCacheRepository;
13
+ private readonly restProjectRepository;
13
14
  constructor(localStorageRepository: LocalStorageRepository, ghToken?: string, projectCache?: Pick<LocalStorageCacheRepository, 'getLatest' | 'set' | 'getSingle' | 'setSingle'>);
15
+ private readProjectLocationFromDiskCache;
16
+ private rememberProjectLocation;
17
+ private findProjectLocation;
14
18
  private readProjectIdFromDiskCache;
15
19
  private writeProjectIdToDiskCache;
16
20
  extractProjectFromUrl: (projectUrl: string) => {
@@ -20,6 +24,7 @@ export declare class GraphqlProjectRepository extends BaseGitHubRepository imple
20
24
  fetchProjectId: (login: string, projectNumber: number) => Promise<string>;
21
25
  findProjectIdByUrl: (projectUrl: string) => Promise<Project["id"] | null>;
22
26
  getProject: (projectId: Project["id"]) => Promise<Project | null>;
27
+ private fetchProjectByGraphql;
23
28
  getByUrl: (url: string) => Promise<Project>;
24
29
  listFieldNames: (project: Project) => Promise<string[]>;
25
30
  createField: (project: Project, field: RequiredProjectFieldDefinition) => Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"GraphqlProjectRepository.d.ts","sourceRoot":"","sources":["../../../src/adapter/repositories/GraphqlProjectRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAE5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,4DAA4D,CAAC;AAC/F,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAIL,8BAA8B,EAE/B,MAAM,4CAA4C,CAAC;AAOpD,eAAO,MAAM,yBAAyB,GACpC,OAAO,MAAM,KACZ,WAAW,CAAC,OAAO,CAcrB,CAAC;AAEF,qBAAa,wBACX,SAAQ,oBACR,YACE,IAAI,CACF,iBAAiB,EACf,YAAY,GACZ,oBAAoB,GACpB,UAAU,GACV,iBAAiB,GACjB,kBAAkB,GAClB,gBAAgB,GAChB,aAAa,CAChB;IAEH,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA6B;IAC5D,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAA6B;IACpE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAG5B;IACF,OAAO,CAAC,QAAQ,CAAC,4BAA4B,CAAsC;gBAGjF,sBAAsB,EAAE,sBAAsB,EAC9C,OAAO,GAAE,MAAwC,EACjD,YAAY,CAAC,EAAE,IAAI,CACjB,2BAA2B,EAC3B,WAAW,GAAG,KAAK,GAAG,WAAW,GAAG,WAAW,CAChD;IAUH,OAAO,CAAC,0BAA0B,CAwBhC;IAEF,OAAO,CAAC,yBAAyB,CAe/B;IAEF,qBAAqB,GACnB,YAAY,MAAM,KACjB;QACD,KAAK,EAAE,MAAM,CAAC;QACd,aAAa,EAAE,MAAM,CAAC;KACvB,CAMC;IACF,cAAc,GACZ,OAAO,MAAM,EACb,eAAe,MAAM,KACpB,OAAO,CAAC,MAAM,CAAC,CA0GhB;IACF,kBAAkB,GAChB,YAAY,MAAM,KACjB,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAG9B;IACF,UAAU,GAAU,WAAW,OAAO,CAAC,IAAI,CAAC,KAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAgNpE;IACF,QAAQ,GAAU,KAAK,MAAM,KAAG,OAAO,CAAC,OAAO,CAAC,CAU9C;IACF,cAAc,GAAU,SAAS,OAAO,KAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAuC1D;IACF,WAAW,GACT,SAAS,OAAO,EAChB,OAAO,8BAA8B,KACpC,OAAO,CAAC,IAAI,CAAC,CAgDd;IACF,eAAe,GACb,SAAS,OAAO,EAChB,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG;QACvC,EAAE,EAAE,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;KAC9B,CAAC,EAAE,KACH,OAAO,CAAC,WAAW,EAAE,CAAC,CAkDvB;IACF,gBAAgB,GACd,SAAS,OAAO,EAChB,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG;QACxC,EAAE,EAAE,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;KAC9B,CAAC,EAAE,KACH,OAAO,CAAC,WAAW,EAAE,CAAC,CA+CvB;CACH"}
1
+ {"version":3,"file":"GraphqlProjectRepository.d.ts","sourceRoot":"","sources":["../../../src/adapter/repositories/GraphqlProjectRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAE5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,4DAA4D,CAAC;AAC/F,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,8BAA8B,EAAE,MAAM,4CAA4C,CAAC;AAkB5F,qBAAa,wBACX,SAAQ,oBACR,YACE,IAAI,CACF,iBAAiB,EACf,YAAY,GACZ,oBAAoB,GACpB,UAAU,GACV,iBAAiB,GACjB,kBAAkB,GAClB,gBAAgB,GAChB,aAAa,CAChB;IAEH,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA6B;IAC5D,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAA6B;IACpE,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAsC;IAC3E,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAG5B;IACF,OAAO,CAAC,QAAQ,CAAC,4BAA4B,CAAsC;IACnF,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAwB;gBAG5D,sBAAsB,EAAE,sBAAsB,EAC9C,OAAO,GAAE,MAAwC,EACjD,YAAY,CAAC,EAAE,IAAI,CACjB,2BAA2B,EAC3B,WAAW,GAAG,KAAK,GAAG,WAAW,GAAG,WAAW,CAChD;IAcH,OAAO,CAAC,gCAAgC,CAsCtC;IAEF,OAAO,CAAC,uBAAuB,CAkB7B;IAEF,OAAO,CAAC,mBAAmB,CAazB;IAEF,OAAO,CAAC,0BAA0B,CAwBhC;IAEF,OAAO,CAAC,yBAAyB,CAe/B;IAEF,qBAAqB,GACnB,YAAY,MAAM,KACjB;QACD,KAAK,EAAE,MAAM,CAAC;QACd,aAAa,EAAE,MAAM,CAAC;KACvB,CAMC;IACF,cAAc,GACZ,OAAO,MAAM,EACb,eAAe,MAAM,KACpB,OAAO,CAAC,MAAM,CAAC,CA+GhB;IACF,kBAAkB,GAChB,YAAY,MAAM,KACjB,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAG9B;IACF,UAAU,GAAU,WAAW,OAAO,CAAC,IAAI,CAAC,KAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAapE;IAEF,OAAO,CAAC,qBAAqB,CAyI3B;IACF,QAAQ,GAAU,KAAK,MAAM,KAAG,OAAO,CAAC,OAAO,CAAC,CAU9C;IACF,cAAc,GAAU,SAAS,OAAO,KAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAU1D;IACF,WAAW,GACT,SAAS,OAAO,EAChB,OAAO,8BAA8B,KACpC,OAAO,CAAC,IAAI,CAAC,CAgDd;IACF,eAAe,GACb,SAAS,OAAO,EAChB,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG;QACvC,EAAE,EAAE,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;KAC9B,CAAC,EAAE,KACH,OAAO,CAAC,WAAW,EAAE,CAAC,CAkDvB;IACF,gBAAgB,GACd,SAAS,OAAO,EAChB,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG;QACxC,EAAE,EAAE,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;KAC9B,CAAC,EAAE,KACH,OAAO,CAAC,WAAW,EAAE,CAAC,CA+CvB;CACH"}
@@ -0,0 +1,18 @@
1
+ import { BaseGitHubRepository } from './BaseGitHubRepository';
2
+ import { ProjectFieldDefinition } from './projectFieldDefinition';
3
+ import { Project } from '../../domain/entities/Project';
4
+ export type ProjectLocation = {
5
+ owner: string;
6
+ ownerType: 'users' | 'orgs';
7
+ projectNumber: number;
8
+ };
9
+ export declare const projectUrlFromLocation: (location: ProjectLocation) => string;
10
+ export declare const projectLocationFromUrl: (projectUrl: string) => ProjectLocation | null;
11
+ export declare class RestProjectRepository extends BaseGitHubRepository {
12
+ private projectApiUrl;
13
+ private requestHeaders;
14
+ listFieldDefinitions: (location: ProjectLocation) => Promise<ProjectFieldDefinition[]>;
15
+ listFieldNames: (location: ProjectLocation) => Promise<string[]>;
16
+ getProject: (location: ProjectLocation) => Promise<Project | null>;
17
+ }
18
+ //# sourceMappingURL=RestProjectRepository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RestProjectRepository.d.ts","sourceRoot":"","sources":["../../../src/adapter/repositories/RestProjectRepository.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAEL,sBAAsB,EAGvB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAExD,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,GAAG,MAAM,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAiCF,eAAO,MAAM,sBAAsB,GAAI,UAAU,eAAe,KAAG,MAC8B,CAAC;AAElG,eAAO,MAAM,sBAAsB,GACjC,YAAY,MAAM,KACjB,eAAe,GAAG,IAapB,CAAC;AAEF,qBAAa,qBAAsB,SAAQ,oBAAoB;IAC7D,OAAO,CAAC,aAAa,CACmF;IAExG,OAAO,CAAC,cAAc,CAGnB;IAEH,oBAAoB,GAClB,UAAU,eAAe,KACxB,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAkBlC;IAEF,cAAc,GAAU,UAAU,eAAe,KAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAGnE;IAEF,UAAU,GAAU,UAAU,eAAe,KAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAwBrE;CACH"}
@@ -0,0 +1,17 @@
1
+ import { FieldOption, Project } from '../../domain/entities/Project';
2
+ export type ProjectFieldDefinition = {
3
+ fieldId: string;
4
+ databaseId: number;
5
+ name: string;
6
+ options: FieldOption[];
7
+ };
8
+ export type ProjectDefinition = {
9
+ id: string;
10
+ url: string;
11
+ databaseId: number;
12
+ name: string;
13
+ fields: ProjectFieldDefinition[];
14
+ };
15
+ export declare const convertToFieldOptionColor: (color: string) => FieldOption["color"];
16
+ export declare const projectFromDefinition: (definition: ProjectDefinition) => Project;
17
+ //# sourceMappingURL=projectFieldDefinition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projectFieldDefinition.d.ts","sourceRoot":"","sources":["../../../src/adapter/repositories/projectFieldDefinition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AASrE,MAAM,MAAM,sBAAsB,GAAG;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,sBAAsB,EAAE,CAAC;CAClC,CAAC;AAEF,eAAO,MAAM,yBAAyB,GACpC,OAAO,MAAM,KACZ,WAAW,CAAC,OAAO,CAcrB,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAChC,YAAY,iBAAiB,KAC5B,OAsFF,CAAC"}