github-issue-tower-defence-management 1.1.0 → 1.3.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/.github/workflows/commit-lint.yml +0 -2
- package/.github/workflows/empty-format-test-job.yml +28 -0
- package/.github/workflows/test.yml +1 -0
- package/CHANGELOG.md +37 -38
- package/bin/adapter/entry-points/cli/index.js +2 -1
- package/bin/adapter/entry-points/cli/index.js.map +1 -1
- package/bin/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.js +140 -17
- package/bin/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.js.map +1 -1
- package/bin/adapter/repositories/BaseGitHubRepository.js +3 -9
- package/bin/adapter/repositories/BaseGitHubRepository.js.map +1 -1
- package/bin/adapter/repositories/GraphqlProjectRepository.js +30 -0
- package/bin/adapter/repositories/GraphqlProjectRepository.js.map +1 -1
- package/bin/adapter/repositories/LocalStorageRepository.js +6 -0
- package/bin/adapter/repositories/LocalStorageRepository.js.map +1 -1
- package/bin/adapter/repositories/SystemDateRepository.js +15 -3
- package/bin/adapter/repositories/SystemDateRepository.js.map +1 -1
- package/bin/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.js +69 -9
- package/bin/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.js.map +1 -1
- package/bin/adapter/repositories/issue/CheerioIssueRepository.js +28 -2
- package/bin/adapter/repositories/issue/CheerioIssueRepository.js.map +1 -1
- package/bin/adapter/repositories/issue/GraphqlProjectItemRepository.js +7 -0
- package/bin/adapter/repositories/issue/GraphqlProjectItemRepository.js.map +1 -1
- package/bin/adapter/repositories/issue/InternalGraphqlIssueRepository.js +19 -5
- package/bin/adapter/repositories/issue/InternalGraphqlIssueRepository.js.map +1 -1
- package/bin/adapter/repositories/issue/RestIssueRepository.js +1 -0
- package/bin/adapter/repositories/issue/RestIssueRepository.js.map +1 -1
- package/bin/adapter/repositories/utils.js +1 -6
- package/bin/adapter/repositories/utils.js.map +1 -1
- package/bin/domain/usecases/AnalyzeProblemByIssueUseCase.js +98 -65
- package/bin/domain/usecases/AnalyzeProblemByIssueUseCase.js.map +1 -1
- package/bin/domain/usecases/AnalyzeStoriesUseCase.js +173 -0
- package/bin/domain/usecases/AnalyzeStoriesUseCase.js.map +1 -0
- package/bin/domain/usecases/ChangeStatusLongInReviewIssueUseCase.js +37 -0
- package/bin/domain/usecases/ChangeStatusLongInReviewIssueUseCase.js.map +1 -0
- package/bin/domain/usecases/ClearDependedIssueURLUseCase.js +66 -0
- package/bin/domain/usecases/ClearDependedIssueURLUseCase.js.map +1 -0
- package/bin/domain/usecases/ClearNextActionHourUseCase.js +8 -2
- package/bin/domain/usecases/ClearNextActionHourUseCase.js.map +1 -1
- package/bin/domain/usecases/ConvertCheckboxToIssueInStoryIssueUseCase.js +63 -0
- package/bin/domain/usecases/ConvertCheckboxToIssueInStoryIssueUseCase.js.map +1 -0
- package/bin/domain/usecases/CreateEstimationIssueUseCase.js +100 -0
- package/bin/domain/usecases/CreateEstimationIssueUseCase.js.map +1 -0
- package/bin/domain/usecases/HandleScheduledEventUseCase.js +136 -2
- package/bin/domain/usecases/HandleScheduledEventUseCase.js.map +1 -1
- package/bin/domain/usecases/utils.js +24 -0
- package/bin/domain/usecases/utils.js.map +1 -0
- package/package.json +2 -2
- package/src/adapter/entry-points/cli/index.test.ts +1 -0
- package/src/adapter/entry-points/cli/index.ts +3 -1
- package/src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts +92 -7
- package/src/adapter/repositories/AxiosSlackRepository.test.ts +3 -0
- package/src/adapter/repositories/BaseGitHubRepository.test.ts +3 -1
- package/src/adapter/repositories/BaseGitHubRepository.ts +3 -12
- package/src/adapter/repositories/GraphqlProjectRepository.test.ts +30 -1
- package/src/adapter/repositories/GraphqlProjectRepository.ts +41 -0
- package/src/adapter/repositories/LocalStorageCacheRepository.test.ts +1 -0
- package/src/adapter/repositories/LocalStorageRepository.ts +6 -0
- package/src/adapter/repositories/SystemDateRepository.ts +17 -3
- package/src/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.test.ts +8 -0
- package/src/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.ts +123 -16
- package/src/adapter/repositories/issue/ApiV3IssueRepository.test.ts +3 -0
- package/src/adapter/repositories/issue/CheerioIssueRepository.test.ts +10 -0
- package/src/adapter/repositories/issue/CheerioIssueRepository.ts +37 -1
- package/src/adapter/repositories/issue/GraphqlProjectItemRepository.test.ts +7 -1
- package/src/adapter/repositories/issue/GraphqlProjectItemRepository.ts +15 -0
- package/src/adapter/repositories/issue/InternalGraphqlIssueRepository.test.ts +7 -1
- package/src/adapter/repositories/issue/InternalGraphqlIssueRepository.ts +22 -5
- package/src/adapter/repositories/issue/RestIssueRepository.test.ts +3 -0
- package/src/adapter/repositories/issue/RestIssueRepository.ts +5 -2
- package/src/adapter/repositories/utils.test.ts +16 -1
- package/src/adapter/repositories/utils.ts +1 -6
- package/src/domain/entities/Issue.ts +4 -0
- package/src/domain/entities/Project.ts +21 -4
- package/src/domain/usecases/AnalyzeProblemByIssueUseCase.ts +151 -115
- package/src/domain/usecases/AnalyzeStoriesUseCase.ts +296 -0
- package/src/domain/usecases/CONTRIBUTING_FOR_TEST.md +254 -0
- package/src/domain/usecases/ChangeStatusLongInReviewIssueUseCase.test.ts +204 -0
- package/src/domain/usecases/ChangeStatusLongInReviewIssueUseCase.ts +57 -0
- package/src/domain/usecases/ClearDependedIssueURLUseCase.test.ts +840 -0
- package/src/domain/usecases/ClearDependedIssueURLUseCase.ts +107 -0
- package/src/domain/usecases/ClearNextActionHourUseCase.ts +12 -2
- package/src/domain/usecases/ConvertCheckboxToIssueInStoryIssueUseCase.test.ts +490 -0
- package/src/domain/usecases/ConvertCheckboxToIssueInStoryIssueUseCase.ts +98 -0
- package/src/domain/usecases/CreateEstimationIssueUseCase.ts +157 -0
- package/src/domain/usecases/GenerateWorkingTimeReportUseCase.test.ts +8 -0
- package/src/domain/usecases/HandleScheduledEventUseCase.ts +184 -2
- package/src/domain/usecases/adapter-interfaces/DateRepository.ts +2 -0
- package/src/domain/usecases/adapter-interfaces/IssueRepository.ts +13 -1
- package/src/domain/usecases/utils.ts +28 -0
- package/types/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.d.ts +1 -1
- package/types/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.d.ts.map +1 -1
- package/types/adapter/repositories/BaseGitHubRepository.d.ts +3 -1
- package/types/adapter/repositories/BaseGitHubRepository.d.ts.map +1 -1
- package/types/adapter/repositories/GraphqlProjectRepository.d.ts.map +1 -1
- package/types/adapter/repositories/LocalStorageRepository.d.ts +1 -0
- package/types/adapter/repositories/LocalStorageRepository.d.ts.map +1 -1
- package/types/adapter/repositories/SystemDateRepository.d.ts +2 -0
- package/types/adapter/repositories/SystemDateRepository.d.ts.map +1 -1
- package/types/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.d.ts +15 -5
- package/types/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.d.ts.map +1 -1
- package/types/adapter/repositories/issue/CheerioIssueRepository.d.ts +7 -1
- package/types/adapter/repositories/issue/CheerioIssueRepository.d.ts.map +1 -1
- package/types/adapter/repositories/issue/GraphqlProjectItemRepository.d.ts +3 -0
- package/types/adapter/repositories/issue/GraphqlProjectItemRepository.d.ts.map +1 -1
- package/types/adapter/repositories/issue/InternalGraphqlIssueRepository.d.ts.map +1 -1
- package/types/adapter/repositories/issue/RestIssueRepository.d.ts +1 -1
- package/types/adapter/repositories/issue/RestIssueRepository.d.ts.map +1 -1
- package/types/adapter/repositories/utils.d.ts.map +1 -1
- package/types/domain/entities/Issue.d.ts +4 -0
- package/types/domain/entities/Issue.d.ts.map +1 -1
- package/types/domain/entities/Project.d.ts +21 -4
- package/types/domain/entities/Project.d.ts.map +1 -1
- package/types/domain/usecases/AnalyzeProblemByIssueUseCase.d.ts +13 -8
- package/types/domain/usecases/AnalyzeProblemByIssueUseCase.d.ts.map +1 -1
- package/types/domain/usecases/AnalyzeStoriesUseCase.d.ts +45 -0
- package/types/domain/usecases/AnalyzeStoriesUseCase.d.ts.map +1 -0
- package/types/domain/usecases/ChangeStatusLongInReviewIssueUseCase.d.ts +17 -0
- package/types/domain/usecases/ChangeStatusLongInReviewIssueUseCase.d.ts.map +1 -0
- package/types/domain/usecases/ClearDependedIssueURLUseCase.d.ts +13 -0
- package/types/domain/usecases/ClearDependedIssueURLUseCase.d.ts.map +1 -0
- package/types/domain/usecases/ClearNextActionHourUseCase.d.ts.map +1 -1
- package/types/domain/usecases/ConvertCheckboxToIssueInStoryIssueUseCase.d.ts +20 -0
- package/types/domain/usecases/ConvertCheckboxToIssueInStoryIssueUseCase.d.ts.map +1 -0
- package/types/domain/usecases/CreateEstimationIssueUseCase.d.ts +33 -0
- package/types/domain/usecases/CreateEstimationIssueUseCase.d.ts.map +1 -0
- package/types/domain/usecases/HandleScheduledEventUseCase.d.ts +28 -2
- package/types/domain/usecases/HandleScheduledEventUseCase.d.ts.map +1 -1
- package/types/domain/usecases/adapter-interfaces/DateRepository.d.ts +2 -0
- package/types/domain/usecases/adapter-interfaces/DateRepository.d.ts.map +1 -1
- package/types/domain/usecases/adapter-interfaces/IssueRepository.d.ts +4 -1
- package/types/domain/usecases/adapter-interfaces/IssueRepository.d.ts.map +1 -1
- package/types/domain/usecases/utils.d.ts +5 -0
- package/types/domain/usecases/utils.d.ts.map +1 -0
- package/types/index.d.ts +1 -1
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.AnalyzeProblemByIssueUseCase = void 0;
|
|
4
|
+
const utils_1 = require("./utils");
|
|
4
5
|
class AnalyzeProblemByIssueUseCase {
|
|
5
6
|
constructor(issueRepository, dateRepository) {
|
|
6
7
|
this.issueRepository = issueRepository;
|
|
@@ -8,71 +9,117 @@ class AnalyzeProblemByIssueUseCase {
|
|
|
8
9
|
this.run = async (input) => {
|
|
9
10
|
const story = input.project.story;
|
|
10
11
|
if (!story ||
|
|
11
|
-
!input.targetDates.find((targetDate) => targetDate.getHours() ===
|
|
12
|
+
!input.targetDates.find((targetDate) => targetDate.getHours() === 0 && targetDate.getMinutes() === 0)) {
|
|
12
13
|
return;
|
|
13
14
|
}
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
15
|
+
const targetDate = input.targetDates[input.targetDates.length - 1];
|
|
16
|
+
if (!targetDate) {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
await this.checkInProgress({ ...input, targetDate });
|
|
20
|
+
for (const storyObject of input.storyObjectMap.values()) {
|
|
21
|
+
const storyIssue = storyObject.storyIssue;
|
|
22
|
+
if (!storyIssue) {
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
await this.issueRepository.createComment(storyIssue, this.createSummaryCommentBody({ ...storyObject, storyIssue }));
|
|
26
|
+
await new Promise((resolve) => setTimeout(resolve, 5000));
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
this.checkInProgress = async (input) => {
|
|
30
|
+
const assigneeToNotify = [];
|
|
31
|
+
for (const member of input.members) {
|
|
32
|
+
let topIssue = null;
|
|
33
|
+
for (const story of input.storyObjectMap.values()) {
|
|
34
|
+
const storyIssueObject = input.storyObjectMap.get(story.story.name);
|
|
35
|
+
if (!storyIssueObject) {
|
|
26
36
|
continue;
|
|
27
37
|
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
// [input.manager],
|
|
49
|
-
// ['story:workflow-management'],
|
|
50
|
-
// );
|
|
38
|
+
else if (assigneeToNotify.includes(member)) {
|
|
39
|
+
break;
|
|
40
|
+
}
|
|
41
|
+
for (const issue of storyIssueObject.issues) {
|
|
42
|
+
if (!(0, utils_1.isVisibleIssue)(issue, member, input.targetDate, input.disabledStatus) ||
|
|
43
|
+
issue.status?.toLowerCase().includes('review') ||
|
|
44
|
+
issue.title.toLowerCase().includes('review') ||
|
|
45
|
+
issue.isPr) {
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
if (topIssue === null) {
|
|
49
|
+
topIssue = issue;
|
|
50
|
+
break;
|
|
51
|
+
}
|
|
52
|
+
if (!issue.isInProgress) {
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
assigneeToNotify.push(member);
|
|
56
|
+
break;
|
|
57
|
+
}
|
|
51
58
|
}
|
|
52
59
|
}
|
|
53
|
-
|
|
60
|
+
if (assigneeToNotify.length === 0) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
await this.issueRepository.createNewIssue(input.org, input.repo, 'Check in progress', `${assigneeToNotify.join('\n')}`, [input.manager], ['story:workflow-management']);
|
|
54
64
|
};
|
|
55
|
-
this.
|
|
56
|
-
|
|
57
|
-
.
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
+
this.createSummaryCommentBody = (storyObject) => {
|
|
66
|
+
const getFlowchartIdFromUrl = (url) => {
|
|
67
|
+
return url.split('/').slice(-3).join('/');
|
|
68
|
+
};
|
|
69
|
+
const issueTitleForFlowchart = (title) => {
|
|
70
|
+
return title.replace('"', "'");
|
|
71
|
+
};
|
|
72
|
+
const flowChart = `
|
|
73
|
+
\`\`\`mermaid
|
|
74
|
+
|
|
75
|
+
flowchart TD
|
|
76
|
+
${storyObject.issues
|
|
77
|
+
.map((issue) => ` ${getFlowchartIdFromUrl(issue.url)}["${issue.isClosed ? '🟣' : '🟢'}#${issue.number} ${issue.isClosed ? 'Closed' : 'Open'}<br/>${issue.assignees.map((a) => `${a}`).join('<br/>')}<br/>${issueTitleForFlowchart(issue.title)}"]`)
|
|
78
|
+
.join('\n')}
|
|
79
|
+
${storyObject.issues
|
|
80
|
+
.map((issue) => Array.from(issue.dependedIssueUrls)
|
|
81
|
+
.map((dependedIssueUrl) => {
|
|
82
|
+
if (issue.isClosed) {
|
|
83
|
+
issue.totalWorkingTimeByAssignee;
|
|
84
|
+
return ` ${getFlowchartIdFromUrl(dependedIssueUrl)} -->|total: ${this.dateRepository.formatDurationToHHMM(issue.totalWorkingTime)}<br/>${Array.from(issue.totalWorkingTimeByAssignee)
|
|
85
|
+
.map(([author, workingMinutes]) => `@${author} ${this.dateRepository.formatDurationToHHMM(workingMinutes)}`)
|
|
86
|
+
.join('<br/>')}| ${getFlowchartIdFromUrl(issue.url)}`;
|
|
87
|
+
}
|
|
88
|
+
return ` ${getFlowchartIdFromUrl(dependedIssueUrl)} -->|${issue.estimationMinutes
|
|
89
|
+
? `Estimation: ${this.dateRepository.formatDurationToHHMM(issue.estimationMinutes)}<br/>`
|
|
90
|
+
: ''}<br/>by ${issue.completionDate50PercentConfidence
|
|
91
|
+
? this.dateRepository.formatDateWithDayOfWeek(issue.completionDate50PercentConfidence)
|
|
92
|
+
: 'Unknown'}| ${getFlowchartIdFromUrl(issue.url)}`;
|
|
93
|
+
})
|
|
94
|
+
.join('\n'))
|
|
95
|
+
.join('\n')}
|
|
96
|
+
%% click event
|
|
97
|
+
${storyObject.issues
|
|
98
|
+
.map((issue) => `click ${getFlowchartIdFromUrl(issue.url)} "${issue.url}"`)
|
|
99
|
+
.join('\n')}
|
|
100
|
+
|
|
101
|
+
\`\`\``;
|
|
102
|
+
let noMultipleNewLineBody = `
|
|
103
|
+
Total: ${this.dateRepository.formatDurationToHHMM(Array.from(storyObject.issues.values()).reduce((a, b) => a + b.totalWorkingTime, 0))}
|
|
104
|
+
|
|
105
|
+
${storyObject.issues
|
|
106
|
+
.map((issue) => `- ${this.dateRepository.formatDurationToHHMM(issue.totalWorkingTime)} ${issue.url}
|
|
107
|
+
- Total
|
|
108
|
+
${Array.from(issue.totalWorkingTimeByAssignee)
|
|
109
|
+
.map(([author, workingMinutes]) => ` - ${this.dateRepository.formatDurationToHHMM(workingMinutes)}, ${author}`)
|
|
65
110
|
.join('\n')}
|
|
66
|
-
|
|
111
|
+
- Timeline
|
|
67
112
|
${issue.workingTimeline
|
|
68
|
-
.map(({ startedAt, endedAt, durationMinutes, author }) => ` - ${this.dateRepository.formatDurationToHHMM(
|
|
69
|
-
.join('\n')}`)
|
|
113
|
+
.map(({ startedAt, endedAt, durationMinutes, author }) => ` - ${this.dateRepository.formatDurationToHHMM(durationMinutes)}, ${this.dateRepository.formatStartEnd(startedAt, endedAt)}}, ${author}`)
|
|
70
114
|
.join('\n')}`)
|
|
71
115
|
.join('\n')}`;
|
|
72
116
|
while (noMultipleNewLineBody.includes('\n\n')) {
|
|
73
117
|
noMultipleNewLineBody = noMultipleNewLineBody.replace('\n\n', '\n');
|
|
74
118
|
}
|
|
75
|
-
return
|
|
119
|
+
return `${flowChart}
|
|
120
|
+
|
|
121
|
+
${noMultipleNewLineBody}
|
|
122
|
+
`;
|
|
76
123
|
};
|
|
77
124
|
this.createQuestionIssueBody = (issue, totalWorkingTime, totalWorkingTimeByAssignee) => {
|
|
78
125
|
return `Hi,
|
|
@@ -96,20 +143,6 @@ ${issue.workingTimeline
|
|
|
96
143
|
.join('\n')}
|
|
97
144
|
`;
|
|
98
145
|
};
|
|
99
|
-
this.calculateTotalWorkingMinutesByAssignee = (issue) => {
|
|
100
|
-
const workingTimeLine = issue.workingTimeline;
|
|
101
|
-
const mapWorkingTimeByAssignee = new Map();
|
|
102
|
-
for (const workingTime of workingTimeLine) {
|
|
103
|
-
const author = workingTime.author;
|
|
104
|
-
const workingMinutes = workingTime.durationMinutes;
|
|
105
|
-
if (!mapWorkingTimeByAssignee.has(author)) {
|
|
106
|
-
mapWorkingTimeByAssignee.set(author, 0);
|
|
107
|
-
}
|
|
108
|
-
const currentWorkingMinutes = mapWorkingTimeByAssignee.get(author) || 0;
|
|
109
|
-
mapWorkingTimeByAssignee.set(author, currentWorkingMinutes + workingMinutes);
|
|
110
|
-
}
|
|
111
|
-
return mapWorkingTimeByAssignee;
|
|
112
|
-
};
|
|
113
146
|
}
|
|
114
147
|
}
|
|
115
148
|
exports.AnalyzeProblemByIssueUseCase = AnalyzeProblemByIssueUseCase;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AnalyzeProblemByIssueUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/AnalyzeProblemByIssueUseCase.ts"],"names":[],"mappings":";;;AAMA,MAAa,4BAA4B;IACvC,YACW,
|
|
1
|
+
{"version":3,"file":"AnalyzeProblemByIssueUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/AnalyzeProblemByIssueUseCase.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AnalyzeStoriesUseCase = void 0;
|
|
4
|
+
const utils_1 = require("./utils");
|
|
5
|
+
class AnalyzeStoriesUseCase {
|
|
6
|
+
constructor(issueRepository, dateRepository) {
|
|
7
|
+
this.issueRepository = issueRepository;
|
|
8
|
+
this.dateRepository = dateRepository;
|
|
9
|
+
this.run = async (input) => {
|
|
10
|
+
const story = input.project.story;
|
|
11
|
+
if (!story ||
|
|
12
|
+
!input.targetDates.find((targetDate) => targetDate.getHours() === 7 && targetDate.getMinutes() === 0)) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
const phases = new Map();
|
|
16
|
+
phases.set('story:phase:requirement:opened', []);
|
|
17
|
+
phases.set('story:phase:requirement:finished-prd', []);
|
|
18
|
+
phases.set('story:phase:requirement:finished-figma', []);
|
|
19
|
+
phases.set('story:phase:requirement:finished-testcase', []);
|
|
20
|
+
phases.set('story:phase:requirement:finished-deviding-task', []);
|
|
21
|
+
phases.set('story:phase:implementation-finished', []);
|
|
22
|
+
phases.set('story:phase:finished-qa', []);
|
|
23
|
+
phases.set('others', []);
|
|
24
|
+
for (const story of input.project.story?.stories || []) {
|
|
25
|
+
const storyIssue = input.issues.find((issue) => story.name.startsWith(issue.title));
|
|
26
|
+
if (story.name.startsWith('regular / ')) {
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
else if (!storyIssue) {
|
|
30
|
+
throw new Error(`Story issue not found: ${story.name}`);
|
|
31
|
+
}
|
|
32
|
+
const storyIssueObject = {
|
|
33
|
+
...storyIssue,
|
|
34
|
+
...story,
|
|
35
|
+
};
|
|
36
|
+
if (storyIssue.status === input.disabledStatus) {
|
|
37
|
+
phases.get('others')?.push(storyIssueObject);
|
|
38
|
+
}
|
|
39
|
+
else if (storyIssue.labels.includes('story:phase:finished-qa')) {
|
|
40
|
+
phases.get('story:phase:finished-qa')?.push(storyIssueObject);
|
|
41
|
+
}
|
|
42
|
+
else if (storyIssue.labels.includes('story:phase:implementation-finished')) {
|
|
43
|
+
phases
|
|
44
|
+
.get('story:phase:implementation-finished')
|
|
45
|
+
?.push(storyIssueObject);
|
|
46
|
+
}
|
|
47
|
+
else if (storyIssue.labels.includes('story:phase:requirement:finished-deviding-task')) {
|
|
48
|
+
phases
|
|
49
|
+
.get('story:phase:requirement:finished-deviding-task')
|
|
50
|
+
?.push(storyIssueObject);
|
|
51
|
+
}
|
|
52
|
+
else if (storyIssue.labels.includes('story:phase:requirement:finished-testcase')) {
|
|
53
|
+
phases
|
|
54
|
+
.get('story:phase:requirement:finished-testcase')
|
|
55
|
+
?.push(storyIssueObject);
|
|
56
|
+
}
|
|
57
|
+
else if (storyIssue.labels.includes('story:phase:requirement:finished-figma')) {
|
|
58
|
+
phases
|
|
59
|
+
.get('story:phase:requirement:finished-figma')
|
|
60
|
+
?.push(storyIssueObject);
|
|
61
|
+
}
|
|
62
|
+
else if (storyIssue.labels.includes('story:phase:requirement:finished-prd')) {
|
|
63
|
+
phases
|
|
64
|
+
.get('story:phase:requirement:finished-prd')
|
|
65
|
+
?.push(storyIssueObject);
|
|
66
|
+
}
|
|
67
|
+
else if (storyIssue.labels.includes('story:phase:requirement:opened')) {
|
|
68
|
+
phases.get('story:phase:requirement:opened')?.push(storyIssueObject);
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
phases.get('others')?.push(storyIssueObject);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
await this.issueRepository.createNewIssue(input.org, input.repo, `Story progress`, this.createSummaryIssueBody(input.project, input.issues, phases, input.storyObjectMap, input.urlOfStoryView, input.members), [input.manager], ['story:workflow-management']);
|
|
75
|
+
};
|
|
76
|
+
this.createSummaryIssueBody = (project, issues, summaryStoryIssue, storyObjectMap, urlOfStoryView, members) => {
|
|
77
|
+
return `${this.createSummaryIssueBodyPhase(summaryStoryIssue, urlOfStoryView)}
|
|
78
|
+
${this.createSummaryIssueBodyAssignedIssueCount(project, issues, storyObjectMap, urlOfStoryView, members)}
|
|
79
|
+
`;
|
|
80
|
+
};
|
|
81
|
+
this.createStoryMark = (urlOfStoryView, issue, storyOption) => {
|
|
82
|
+
const storyColor = `:${storyOption.color === 'BLUE' ? 'large_' : ''}${storyOption.color === 'GRAY' ? 'black' : storyOption.color === 'PINK' ? 'red' : storyOption.color.toLowerCase()}_circle:`;
|
|
83
|
+
const stakeHolder = issue === null
|
|
84
|
+
? ' '
|
|
85
|
+
: issue.labels.find((label) => label === 'story:stakeholder:user')
|
|
86
|
+
? `:bust_in_silhouette:`
|
|
87
|
+
: issue.labels.find((label) => label === 'story:stakeholder:engineer')
|
|
88
|
+
? `:gear:`
|
|
89
|
+
: issue.labels.find((label) => label === 'story:stakeholder:cs-team')
|
|
90
|
+
? `:headphones:`
|
|
91
|
+
: issue.labels.find((label) => label === 'story:stakeholder:potential-user')
|
|
92
|
+
? ':busts_in_silhouette:'
|
|
93
|
+
: issue.labels.find((label) => label === 'story:stakeholder:sales-team')
|
|
94
|
+
? ':briefcase:'
|
|
95
|
+
: ':question:';
|
|
96
|
+
const boardUrl = `${urlOfStoryView}?filterQuery=story%3A%22${(0, utils_1.encodeForURI)(storyOption.name)}%22+is%3Aopen`;
|
|
97
|
+
const boardIcon = `:memo:`;
|
|
98
|
+
const isScheduleControlled = issue !== null && issue.labels.includes('story:action:schedule-control');
|
|
99
|
+
const scheduleControlledIcon = `:calendar:`;
|
|
100
|
+
const scheduleControlledUrl = `${urlOfStoryView}?filterQuery=%22Put+estimation+fields%22+%22${(0, utils_1.encodeForURI)(storyOption.name)}%22`;
|
|
101
|
+
return {
|
|
102
|
+
storyColorIcon: storyColor,
|
|
103
|
+
stakeHolderIcon: stakeHolder,
|
|
104
|
+
boardUrl,
|
|
105
|
+
boardIcon,
|
|
106
|
+
isScheduleControlled,
|
|
107
|
+
scheduleControlledIcon,
|
|
108
|
+
scheduleControlledUrl,
|
|
109
|
+
};
|
|
110
|
+
};
|
|
111
|
+
this.createSummaryIssueBodyPhase = (summaryStoryIssue, urlOfStoryView) => {
|
|
112
|
+
return `
|
|
113
|
+
|
|
114
|
+
${Array.from(summaryStoryIssue.keys())
|
|
115
|
+
.map((key) => {
|
|
116
|
+
return `
|
|
117
|
+
## ${key}
|
|
118
|
+
${summaryStoryIssue
|
|
119
|
+
.get(key)
|
|
120
|
+
?.map((issue) => {
|
|
121
|
+
const { storyColorIcon, stakeHolderIcon, boardIcon, boardUrl, isScheduleControlled, scheduleControlledIcon, scheduleControlledUrl, } = this.createStoryMark(urlOfStoryView, issue, issue);
|
|
122
|
+
const remainingIssueCount = summaryStoryIssue
|
|
123
|
+
.get(key)
|
|
124
|
+
?.filter((issue) => !issue.isClosed && !issue.isPr).length || 0;
|
|
125
|
+
return `- ${storyColorIcon} ${stakeHolderIcon} ${isScheduleControlled ? `[${scheduleControlledIcon}](${scheduleControlledUrl})` : ''} [(${remainingIssueCount})](${boardUrl}) ${issue.url} [${boardIcon}](${boardUrl})`;
|
|
126
|
+
})
|
|
127
|
+
.join('\n')}`;
|
|
128
|
+
})
|
|
129
|
+
.join('\n')}`;
|
|
130
|
+
};
|
|
131
|
+
this.createSummaryIssueBodyAssignedIssueCount = (project, issues, storyObjectMap, urlOfStoryView, members) => {
|
|
132
|
+
return `
|
|
133
|
+
<table>
|
|
134
|
+
<thead>
|
|
135
|
+
<tr>
|
|
136
|
+
<th>story/<br/>assignee</th>
|
|
137
|
+
${members.map((member) => `<th><img src="https://github.com/${member}.png?size=40" alt="${member}" /></th>`).join('\n')}
|
|
138
|
+
</tr>
|
|
139
|
+
</thead>
|
|
140
|
+
<tbody>
|
|
141
|
+
${Array.from(project.story?.stories.values() || [])
|
|
142
|
+
.map((storyOption) => {
|
|
143
|
+
const issue = issues.find((issue) => storyOption.name.startsWith(issue.title)) || null;
|
|
144
|
+
const { storyColorIcon, stakeHolderIcon, boardIcon, boardUrl, isScheduleControlled, scheduleControlledIcon, scheduleControlledUrl, } = this.createStoryMark(urlOfStoryView, issue, storyOption);
|
|
145
|
+
return `
|
|
146
|
+
<tr>
|
|
147
|
+
<td>
|
|
148
|
+
${storyOption.name}<br/>
|
|
149
|
+
<a href="${boardUrl}">${boardIcon}</a> ${storyColorIcon} ${stakeHolderIcon} ${isScheduleControlled ? `<a href="${scheduleControlledUrl}">${scheduleControlledIcon}</a>` : ''}
|
|
150
|
+
</td>
|
|
151
|
+
${members
|
|
152
|
+
.map((member) => {
|
|
153
|
+
const assignedIssuesInStory = issues.filter((issue) => issue.story === storyOption.name &&
|
|
154
|
+
!issue.isClosed &&
|
|
155
|
+
!issue.isPr &&
|
|
156
|
+
issue.assignees.includes(member));
|
|
157
|
+
return `<td>${assignedIssuesInStory.length > 0 ? assignedIssuesInStory.length : ''}</td>`;
|
|
158
|
+
})
|
|
159
|
+
.join('\n')}
|
|
160
|
+
</tr>
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
`;
|
|
164
|
+
})
|
|
165
|
+
.join('\n')}
|
|
166
|
+
</tbody>
|
|
167
|
+
</table>
|
|
168
|
+
`;
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
exports.AnalyzeStoriesUseCase = AnalyzeStoriesUseCase;
|
|
173
|
+
//# sourceMappingURL=AnalyzeStoriesUseCase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AnalyzeStoriesUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/AnalyzeStoriesUseCase.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ChangeStatusLongInReviewIssueUseCase = void 0;
|
|
4
|
+
class ChangeStatusLongInReviewIssueUseCase {
|
|
5
|
+
constructor(dateRepository, issueRepository) {
|
|
6
|
+
this.dateRepository = dateRepository;
|
|
7
|
+
this.issueRepository = issueRepository;
|
|
8
|
+
this.run = async (input) => {
|
|
9
|
+
const firstStatus = input.project.status.statuses[0];
|
|
10
|
+
if (!firstStatus) {
|
|
11
|
+
throw new Error('First status is not found');
|
|
12
|
+
}
|
|
13
|
+
for (const issue of input.issues) {
|
|
14
|
+
if (issue.isPr ||
|
|
15
|
+
issue.isClosed ||
|
|
16
|
+
!issue.status?.toLowerCase().includes('review')) {
|
|
17
|
+
continue;
|
|
18
|
+
}
|
|
19
|
+
if (issue.workingTimeline.length > 0) {
|
|
20
|
+
const latestWorkingTime = issue.workingTimeline[issue.workingTimeline.length - 1];
|
|
21
|
+
const now = await this.dateRepository.now();
|
|
22
|
+
const diff = now.getTime() - latestWorkingTime.endedAt.getTime();
|
|
23
|
+
const diffHours = diff / (1000 * 60 * 60);
|
|
24
|
+
if (diffHours < 48) {
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
await this.issueRepository.createComment(issue, `${issue.assignees.map((assignee) => `@${assignee}`).join(' ')}
|
|
29
|
+
This issue has been in review for more than 48 hours.
|
|
30
|
+
Please check the situation of PR again :pray:`);
|
|
31
|
+
await this.issueRepository.updateStatus(input.project, issue, firstStatus.id);
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
exports.ChangeStatusLongInReviewIssueUseCase = ChangeStatusLongInReviewIssueUseCase;
|
|
37
|
+
//# sourceMappingURL=ChangeStatusLongInReviewIssueUseCase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChangeStatusLongInReviewIssueUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/ChangeStatusLongInReviewIssueUseCase.ts"],"names":[],"mappings":";;;AAKA,MAAa,oCAAoC;IAC/C,YACW,cAA2C,EAC3C,eAGR;QAJQ,mBAAc,GAAd,cAAc,CAA6B;QAC3C,oBAAe,GAAf,eAAe,CAGvB;QAGH,QAAG,GAAG,KAAK,EAAE,KAMZ,EAAiB,EAAE;YAClB,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACrD,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;YAC/C,CAAC;YACD,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBACjC,IACE,KAAK,CAAC,IAAI;oBACV,KAAK,CAAC,QAAQ;oBACd,CAAC,KAAK,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAC/C,CAAC;oBACD,SAAS;gBACX,CAAC;gBACD,IAAI,KAAK,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACrC,MAAM,iBAAiB,GACrB,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;oBAC1D,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC;oBAC5C,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,iBAAiB,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;oBACjE,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;oBAC1C,IAAI,SAAS,GAAG,EAAE,EAAE,CAAC;wBACnB,SAAS;oBACX,CAAC;gBACH,CAAC;gBACD,MAAM,IAAI,CAAC,eAAe,CAAC,aAAa,CACtC,KAAK,EACL,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;;8CAExB,CACvC,CAAC;gBACF,MAAM,IAAI,CAAC,eAAe,CAAC,YAAY,CACrC,KAAK,CAAC,OAAO,EACb,KAAK,EACL,WAAW,CAAC,EAAE,CACf,CAAC;YACJ,CAAC;QACH,CAAC,CAAC;IA3CC,CAAC;CA4CL;AAnDD,oFAmDC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ClearDependedIssueURLUseCase = void 0;
|
|
4
|
+
class ClearDependedIssueURLUseCase {
|
|
5
|
+
constructor(issueRepository) {
|
|
6
|
+
this.issueRepository = issueRepository;
|
|
7
|
+
this.run = async (input) => {
|
|
8
|
+
const dependedIssueUrlSeparatedByComma = input.project.dependedIssueUrlSeparatedByComma;
|
|
9
|
+
if (!dependedIssueUrlSeparatedByComma || input.cacheUsed) {
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
for (const issue of input.issues) {
|
|
13
|
+
if (issue.dependedIssueUrls.length <= 0 || issue.isClosed) {
|
|
14
|
+
continue;
|
|
15
|
+
}
|
|
16
|
+
const circularDependedIssueUrls = issue.dependedIssueUrls.filter((dependedIssueUrl) => {
|
|
17
|
+
// get all depended issues circularly
|
|
18
|
+
const circularDependedIssues = new Set();
|
|
19
|
+
const stack = [dependedIssueUrl];
|
|
20
|
+
while (stack.length > 0) {
|
|
21
|
+
const url = stack.pop();
|
|
22
|
+
if (!url) {
|
|
23
|
+
throw new Error('url is undefined');
|
|
24
|
+
}
|
|
25
|
+
if (circularDependedIssues.has(url)) {
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
circularDependedIssues.add(url);
|
|
29
|
+
const dependedIssue = input.issues.find((issue) => issue.url === url);
|
|
30
|
+
if (!dependedIssue) {
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
stack.push(...dependedIssue.dependedIssueUrls);
|
|
34
|
+
}
|
|
35
|
+
return circularDependedIssues.has(issue.url);
|
|
36
|
+
});
|
|
37
|
+
if (circularDependedIssueUrls.length > 0) {
|
|
38
|
+
await this.issueRepository.clearProjectField(input.project, dependedIssueUrlSeparatedByComma.fieldId, issue);
|
|
39
|
+
await this.issueRepository.createComment(issue, `Circular dependency removed:
|
|
40
|
+
${circularDependedIssueUrls.map((url) => `- ${url}`).join('\n')}`);
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
const remainingDependedIssueUrls = issue.dependedIssueUrls.filter((dependedIssueUrl) => input.issues.some((issue) => {
|
|
44
|
+
const r = issue.url === dependedIssueUrl && !issue.isClosed;
|
|
45
|
+
return r;
|
|
46
|
+
}));
|
|
47
|
+
const closedDependedIssueUrls = issue.dependedIssueUrls.filter((dependedIssueUrl) => remainingDependedIssueUrls.indexOf(dependedIssueUrl) === -1);
|
|
48
|
+
if (remainingDependedIssueUrls.length === issue.dependedIssueUrls.length) {
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
if (remainingDependedIssueUrls.length === 0) {
|
|
52
|
+
await this.issueRepository.clearProjectField(input.project, dependedIssueUrlSeparatedByComma.fieldId, issue);
|
|
53
|
+
await this.issueRepository.createComment(issue, `Closed all depended issues:
|
|
54
|
+
${closedDependedIssueUrls.map((url) => `- ${url}`).join('\n')}`);
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
await this.issueRepository.updateProjectTextField(input.project, dependedIssueUrlSeparatedByComma.fieldId, issue, remainingDependedIssueUrls.join(','));
|
|
58
|
+
await this.issueRepository.createComment(issue, `Closed depended issues:
|
|
59
|
+
${closedDependedIssueUrls.map((url) => `- ${url}`).join('\n')}`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
exports.ClearDependedIssueURLUseCase = ClearDependedIssueURLUseCase;
|
|
66
|
+
//# sourceMappingURL=ClearDependedIssueURLUseCase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClearDependedIssueURLUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/ClearDependedIssueURLUseCase.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,9 +6,10 @@ class ClearNextActionHourUseCase {
|
|
|
6
6
|
this.issueRepository = issueRepository;
|
|
7
7
|
this.run = async (input) => {
|
|
8
8
|
const nextActionHour = input.project.nextActionHour;
|
|
9
|
-
if (!nextActionHour
|
|
9
|
+
if (!nextActionHour) {
|
|
10
10
|
return;
|
|
11
11
|
}
|
|
12
|
+
const nextActionDate = input.project.nextActionDate;
|
|
12
13
|
const targetDates = input.targetDates
|
|
13
14
|
.filter((targetDate) => targetDate.getMinutes() === 45)
|
|
14
15
|
.reverse();
|
|
@@ -16,7 +17,7 @@ class ClearNextActionHourUseCase {
|
|
|
16
17
|
return;
|
|
17
18
|
}
|
|
18
19
|
const targetDate = new Date(targetDates[targetDates.length - 1].getTime() + 5 * 60 * 1000);
|
|
19
|
-
const targetHour = targetDate.getHours();
|
|
20
|
+
const targetHour = targetDate.getHours() + 1;
|
|
20
21
|
const isTargetIssue = (issue) => {
|
|
21
22
|
return (issue.nextActionHour !== null &&
|
|
22
23
|
issue.nextActionHour <= targetHour &&
|
|
@@ -30,6 +31,11 @@ class ClearNextActionHourUseCase {
|
|
|
30
31
|
}
|
|
31
32
|
await this.issueRepository.clearProjectField(input.project, nextActionHour.fieldId, issue);
|
|
32
33
|
await new Promise((resolve) => setTimeout(resolve, 5000));
|
|
34
|
+
if (!nextActionDate) {
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
await this.issueRepository.clearProjectField(input.project, nextActionDate.fieldId, issue);
|
|
38
|
+
await new Promise((resolve) => setTimeout(resolve, 5000));
|
|
33
39
|
}
|
|
34
40
|
};
|
|
35
41
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClearNextActionHourUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/ClearNextActionHourUseCase.ts"],"names":[],"mappings":";;;AAIA,MAAa,0BAA0B;IACrC,YACW,eAA2D;QAA3D,oBAAe,GAAf,eAAe,CAA4C;QAGtE,QAAG,GAAG,KAAK,EAAE,KAKZ,EAAiB,EAAE;YAClB,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC;YACpD,IAAI,CAAC,cAAc,
|
|
1
|
+
{"version":3,"file":"ClearNextActionHourUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/ClearNextActionHourUseCase.ts"],"names":[],"mappings":";;;AAIA,MAAa,0BAA0B;IACrC,YACW,eAA2D;QAA3D,oBAAe,GAAf,eAAe,CAA4C;QAGtE,QAAG,GAAG,KAAK,EAAE,KAKZ,EAAiB,EAAE;YAClB,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC;YACpD,IAAI,CAAC,cAAc,EAAE,CAAC;gBACpB,OAAO;YACT,CAAC;YACD,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC;YACpD,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW;iBAClC,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC;iBACtD,OAAO,EAAE,CAAC;YACb,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC7B,OAAO;YACT,CAAC;YACD,MAAM,UAAU,GAAG,IAAI,IAAI,CACzB,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAC9D,CAAC;YACF,MAAM,UAAU,GAAG,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;YAC7C,MAAM,aAAa,GAAG,CAAC,KAAY,EAAW,EAAE;gBAC9C,OAAO,CACL,KAAK,CAAC,cAAc,KAAK,IAAI;oBAC7B,KAAK,CAAC,cAAc,IAAI,UAAU;oBAClC,CAAC,KAAK,CAAC,cAAc,KAAK,IAAI;wBAC5B,KAAK,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;oBACzD,KAAK,CAAC,KAAK,KAAK,MAAM,CACvB,CAAC;YACJ,CAAC,CAAC;YACF,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBACjC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC1B,SAAS;gBACX,CAAC;gBACD,MAAM,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAC1C,KAAK,CAAC,OAAO,EACb,cAAc,CAAC,OAAO,EACtB,KAAK,CACN,CAAC;gBACF,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;gBAC1D,IAAI,CAAC,cAAc,EAAE,CAAC;oBACpB,SAAS;gBACX,CAAC;gBACD,MAAM,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAC1C,KAAK,CAAC,OAAO,EACb,cAAc,CAAC,OAAO,EACtB,KAAK,CACN,CAAC;gBACF,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC,CAAC;IApDC,CAAC;CAqDL;AAxDD,gEAwDC"}
|