@knpkv/codecommit-core 0.5.0 → 0.5.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 (138) hide show
  1. package/dist/AwsClient/getDifferences.d.ts +16 -0
  2. package/dist/AwsClient/getDifferences.d.ts.map +1 -0
  3. package/dist/AwsClient/getDifferences.js +22 -0
  4. package/dist/AwsClient/getDifferences.js.map +1 -0
  5. package/dist/AwsClient/getPullRequest.d.ts.map +1 -1
  6. package/dist/AwsClient/getPullRequest.js +26 -5
  7. package/dist/AwsClient/getPullRequest.js.map +1 -1
  8. package/dist/AwsClient/getPullRequests.d.ts.map +1 -1
  9. package/dist/AwsClient/getPullRequests.js +29 -11
  10. package/dist/AwsClient/getPullRequests.js.map +1 -1
  11. package/dist/AwsClient/index.d.ts +21 -13
  12. package/dist/AwsClient/index.d.ts.map +1 -1
  13. package/dist/AwsClient/index.js +3 -1
  14. package/dist/AwsClient/index.js.map +1 -1
  15. package/dist/AwsClient/internal.d.ts +23 -0
  16. package/dist/AwsClient/internal.d.ts.map +1 -1
  17. package/dist/AwsClient/internal.js +4 -1
  18. package/dist/AwsClient/internal.js.map +1 -1
  19. package/dist/CacheService/Database.d.ts.map +1 -1
  20. package/dist/CacheService/Database.js +9 -1
  21. package/dist/CacheService/Database.js.map +1 -1
  22. package/dist/CacheService/index.d.ts +3 -2
  23. package/dist/CacheService/index.d.ts.map +1 -1
  24. package/dist/CacheService/index.js +2 -1
  25. package/dist/CacheService/index.js.map +1 -1
  26. package/dist/CacheService/migrations/0007_stats_columns.d.ts +5 -0
  27. package/dist/CacheService/migrations/0007_stats_columns.d.ts.map +1 -0
  28. package/dist/CacheService/migrations/0007_stats_columns.js +13 -0
  29. package/dist/CacheService/migrations/0007_stats_columns.js.map +1 -0
  30. package/dist/CacheService/migrations/0008_merged_by.d.ts +5 -0
  31. package/dist/CacheService/migrations/0008_merged_by.d.ts.map +1 -0
  32. package/dist/CacheService/migrations/0008_merged_by.js +4 -0
  33. package/dist/CacheService/migrations/0008_merged_by.js.map +1 -0
  34. package/dist/CacheService/migrations/0009_approved_by.d.ts +5 -0
  35. package/dist/CacheService/migrations/0009_approved_by.d.ts.map +1 -0
  36. package/dist/CacheService/migrations/0009_approved_by.js +4 -0
  37. package/dist/CacheService/migrations/0009_approved_by.js.map +1 -0
  38. package/dist/CacheService/migrations/0010_commented_by.d.ts +5 -0
  39. package/dist/CacheService/migrations/0010_commented_by.d.ts.map +1 -0
  40. package/dist/CacheService/migrations/0010_commented_by.js +4 -0
  41. package/dist/CacheService/migrations/0010_commented_by.js.map +1 -0
  42. package/dist/CacheService/repos/PullRequestRepo/index.d.ts +132 -0
  43. package/dist/CacheService/repos/PullRequestRepo/index.d.ts.map +1 -0
  44. package/dist/CacheService/repos/PullRequestRepo/index.js +35 -0
  45. package/dist/CacheService/repos/PullRequestRepo/index.js.map +1 -0
  46. package/dist/CacheService/repos/PullRequestRepo/internal.d.ts +72 -0
  47. package/dist/CacheService/repos/PullRequestRepo/internal.d.ts.map +1 -0
  48. package/dist/CacheService/repos/PullRequestRepo/internal.js +69 -0
  49. package/dist/CacheService/repos/PullRequestRepo/internal.js.map +1 -0
  50. package/dist/CacheService/repos/PullRequestRepo/mutations.d.ts +24 -0
  51. package/dist/CacheService/repos/PullRequestRepo/mutations.d.ts.map +1 -0
  52. package/dist/CacheService/repos/PullRequestRepo/mutations.js +94 -0
  53. package/dist/CacheService/repos/PullRequestRepo/mutations.js.map +1 -0
  54. package/dist/CacheService/repos/PullRequestRepo/queries.d.ts +113 -0
  55. package/dist/CacheService/repos/PullRequestRepo/queries.d.ts.map +1 -0
  56. package/dist/CacheService/repos/PullRequestRepo/queries.js +89 -0
  57. package/dist/CacheService/repos/PullRequestRepo/queries.js.map +1 -0
  58. package/dist/CacheService/repos/StatsRepo/index.d.ts +93 -0
  59. package/dist/CacheService/repos/StatsRepo/index.d.ts.map +1 -0
  60. package/dist/CacheService/repos/StatsRepo/index.js +41 -0
  61. package/dist/CacheService/repos/StatsRepo/index.js.map +1 -0
  62. package/dist/CacheService/repos/StatsRepo/internal.d.ts +120 -0
  63. package/dist/CacheService/repos/StatsRepo/internal.d.ts.map +1 -0
  64. package/dist/CacheService/repos/StatsRepo/internal.js +34 -0
  65. package/dist/CacheService/repos/StatsRepo/internal.js.map +1 -0
  66. package/dist/CacheService/repos/StatsRepo/queries.d.ts +42 -0
  67. package/dist/CacheService/repos/StatsRepo/queries.d.ts.map +1 -0
  68. package/dist/CacheService/repos/StatsRepo/queries.js +182 -0
  69. package/dist/CacheService/repos/StatsRepo/queries.js.map +1 -0
  70. package/dist/CacheService/repos/StatsRepo/reviewerData.d.ts +47 -0
  71. package/dist/CacheService/repos/StatsRepo/reviewerData.d.ts.map +1 -0
  72. package/dist/CacheService/repos/StatsRepo/reviewerData.js +172 -0
  73. package/dist/CacheService/repos/StatsRepo/reviewerData.js.map +1 -0
  74. package/dist/DateUtils.d.ts +28 -0
  75. package/dist/DateUtils.d.ts.map +1 -1
  76. package/dist/DateUtils.js +69 -1
  77. package/dist/DateUtils.js.map +1 -1
  78. package/dist/Domain.d.ts +13 -3
  79. package/dist/Domain.d.ts.map +1 -1
  80. package/dist/Domain.js +6 -5
  81. package/dist/Domain.js.map +1 -1
  82. package/dist/PRService/index.d.ts +3 -3
  83. package/dist/PRService/index.d.ts.map +1 -1
  84. package/dist/PRService/index.js +1 -1
  85. package/dist/PRService/index.js.map +1 -1
  86. package/dist/PRService/internal.d.ts +24 -2
  87. package/dist/PRService/internal.d.ts.map +1 -1
  88. package/dist/PRService/internal.js +23 -8
  89. package/dist/PRService/internal.js.map +1 -1
  90. package/dist/PRService/refresh.d.ts +1 -1
  91. package/dist/PRService/refresh.d.ts.map +1 -1
  92. package/dist/PRService/refresh.js +2 -0
  93. package/dist/PRService/refresh.js.map +1 -1
  94. package/dist/PRService/refreshDiffs.d.ts +16 -0
  95. package/dist/PRService/refreshDiffs.d.ts.map +1 -0
  96. package/dist/PRService/refreshDiffs.js +54 -0
  97. package/dist/PRService/refreshDiffs.js.map +1 -0
  98. package/dist/PRService/refreshEnrich.d.ts +1 -1
  99. package/dist/PRService/refreshEnrich.d.ts.map +1 -1
  100. package/dist/PRService/refreshEnrich.js +3 -1
  101. package/dist/PRService/refreshEnrich.js.map +1 -1
  102. package/dist/PRService/refreshFetch.d.ts +1 -1
  103. package/dist/PRService/refreshFetch.d.ts.map +1 -1
  104. package/dist/PRService/refreshFetch.js +12 -3
  105. package/dist/PRService/refreshFetch.js.map +1 -1
  106. package/dist/PRService/refreshHistory.d.ts +19 -0
  107. package/dist/PRService/refreshHistory.d.ts.map +1 -0
  108. package/dist/PRService/refreshHistory.js +110 -0
  109. package/dist/PRService/refreshHistory.js.map +1 -0
  110. package/dist/PRService/refreshResolve.d.ts +1 -1
  111. package/dist/PRService/refreshResolve.d.ts.map +1 -1
  112. package/dist/PRService/refreshResolve.js +1 -1
  113. package/dist/PRService/refreshResolve.js.map +1 -1
  114. package/dist/PRService/refreshScore.d.ts +1 -1
  115. package/dist/PRService/refreshScore.d.ts.map +1 -1
  116. package/dist/PRService/refreshScore.js +1 -1
  117. package/dist/PRService/refreshScore.js.map +1 -1
  118. package/dist/PRService/refreshSinglePR.d.ts +1 -1
  119. package/dist/PRService/refreshSinglePR.d.ts.map +1 -1
  120. package/dist/PRService/refreshSinglePR.js +4 -3
  121. package/dist/PRService/refreshSinglePR.js.map +1 -1
  122. package/dist/StatsService/WeeklyStats.d.ts +174 -0
  123. package/dist/StatsService/WeeklyStats.d.ts.map +1 -0
  124. package/dist/StatsService/WeeklyStats.js +110 -0
  125. package/dist/StatsService/WeeklyStats.js.map +1 -0
  126. package/dist/StatsService/index.d.ts +45 -0
  127. package/dist/StatsService/index.d.ts.map +1 -0
  128. package/dist/StatsService/index.js +145 -0
  129. package/dist/StatsService/index.js.map +1 -0
  130. package/dist/index.d.ts +1 -0
  131. package/dist/index.d.ts.map +1 -1
  132. package/dist/index.js +1 -0
  133. package/dist/index.js.map +1 -1
  134. package/package.json +1 -1
  135. package/dist/CacheService/repos/PullRequestRepo.d.ts +0 -112
  136. package/dist/CacheService/repos/PullRequestRepo.d.ts.map +0 -1
  137. package/dist/CacheService/repos/PullRequestRepo.js +0 -146
  138. package/dist/CacheService/repos/PullRequestRepo.js.map +0 -1
@@ -0,0 +1,182 @@
1
+ import { Effect } from "effect";
2
+ import { cacheError, whereFilters } from "./internal.js";
3
+ const fmtDate = (iso) => iso.slice(0, 16).replace("T", " ");
4
+ export const weeklyVolume = (sql) => (weekStart, weekEnd, filters) => {
5
+ const f = whereFilters(sql, filters);
6
+ return sql `
7
+ SELECT
8
+ COUNT(CASE WHEN creation_date >= ${weekStart} AND creation_date < ${weekEnd} THEN 1 END) as prs_created,
9
+ COUNT(CASE WHEN status = 'MERGED' AND COALESCE(closed_at, last_modified_date) >= ${weekStart} AND COALESCE(closed_at, last_modified_date) < ${weekEnd} THEN 1 END) as prs_merged,
10
+ COUNT(CASE WHEN status = 'CLOSED' AND COALESCE(closed_at, last_modified_date) >= ${weekStart} AND COALESCE(closed_at, last_modified_date) < ${weekEnd} THEN 1 END) as prs_closed
11
+ FROM pull_requests
12
+ WHERE (creation_date >= ${weekStart} OR COALESCE(closed_at, last_modified_date) >= ${weekStart})
13
+ ${f.repo} ${f.author} ${f.account}
14
+ `.pipe(Effect.map((rows) => rows[0] ?? { prsCreated: 0, prsMerged: 0, prsClosed: 0 }), cacheError("weeklyVolume"));
15
+ };
16
+ export const topContributors = (sql) => (weekStart, weekEnd, filters, limit = 10) => {
17
+ const f = whereFilters(sql, filters);
18
+ return sql `
19
+ SELECT author, COUNT(*) as pr_count
20
+ FROM pull_requests
21
+ WHERE creation_date >= ${weekStart} AND creation_date < ${weekEnd}
22
+ AND status != 'CLOSED'
23
+ ${f.repo} ${f.author} ${f.account}
24
+ GROUP BY author
25
+ ORDER BY pr_count DESC
26
+ LIMIT ${limit}
27
+ `.pipe(cacheError("topContributors"));
28
+ };
29
+ export const mostActivePRs = (sql) => (weekStart, weekEnd, filters, limit = 10) => {
30
+ const f = whereFilters(sql, filters);
31
+ return sql `
32
+ SELECT id, title, author, repository_name, comment_count, aws_account_id
33
+ FROM pull_requests
34
+ WHERE COALESCE(closed_at, last_modified_date) >= ${weekStart} AND COALESCE(closed_at, last_modified_date) < ${weekEnd}
35
+ AND comment_count > 0
36
+ AND status != 'CLOSED'
37
+ ${f.repo} ${f.author} ${f.account}
38
+ ORDER BY comment_count DESC
39
+ LIMIT ${limit}
40
+ `.pipe(cacheError("mostActivePRs"));
41
+ };
42
+ export const prSizeDistribution = (sql) => (weekStart, weekEnd, filters) => {
43
+ const f = whereFilters(sql, filters);
44
+ return sql `
45
+ SELECT
46
+ COUNT(CASE WHEN COALESCE(files_added,0)+COALESCE(files_modified,0)+COALESCE(files_deleted,0) < 5 THEN 1 END) as small,
47
+ COUNT(CASE WHEN COALESCE(files_added,0)+COALESCE(files_modified,0)+COALESCE(files_deleted,0) BETWEEN 5 AND 15 THEN 1 END) as medium,
48
+ COUNT(CASE WHEN COALESCE(files_added,0)+COALESCE(files_modified,0)+COALESCE(files_deleted,0) BETWEEN 16 AND 30 THEN 1 END) as large,
49
+ COUNT(CASE WHEN COALESCE(files_added,0)+COALESCE(files_modified,0)+COALESCE(files_deleted,0) > 30 THEN 1 END) as extra_large
50
+ FROM pull_requests
51
+ WHERE creation_date >= ${weekStart} AND creation_date < ${weekEnd}
52
+ AND files_added IS NOT NULL
53
+ AND status != 'CLOSED'
54
+ ${f.repo} ${f.author} ${f.account}
55
+ `.pipe(Effect.map((rows) => rows[0] ?? { small: 0, medium: 0, large: 0, extraLarge: 0 }), cacheError("prSizeDistribution"));
56
+ };
57
+ export const avgDiffSize = (sql) => (weekStart, weekEnd, filters) => {
58
+ const f = whereFilters(sql, filters);
59
+ return sql `
60
+ SELECT
61
+ AVG(files_added) as avg_added,
62
+ AVG(files_modified) as avg_modified,
63
+ AVG(files_deleted) as avg_deleted
64
+ FROM pull_requests
65
+ WHERE creation_date >= ${weekStart} AND creation_date < ${weekEnd}
66
+ AND files_added IS NOT NULL
67
+ AND status != 'CLOSED'
68
+ ${f.repo} ${f.author} ${f.account}
69
+ `.pipe(Effect.map((rows) => {
70
+ const r = rows[0];
71
+ if (!r || r.avgAdded == null)
72
+ return null;
73
+ return { filesAdded: r.avgAdded, filesModified: r.avgModified ?? 0, filesDeleted: r.avgDeleted ?? 0 };
74
+ }), cacheError("avgDiffSize"));
75
+ };
76
+ export const diffSizeByContributor = (sql) => (weekStart, weekEnd, filters, limit = 10) => {
77
+ const f = whereFilters(sql, filters);
78
+ return sql `
79
+ SELECT
80
+ author,
81
+ AVG(COALESCE(files_added,0)+COALESCE(files_modified,0)+COALESCE(files_deleted,0)) as avg_files_changed,
82
+ COUNT(*) as pr_count
83
+ FROM pull_requests
84
+ WHERE creation_date >= ${weekStart} AND creation_date < ${weekEnd}
85
+ AND files_added IS NOT NULL
86
+ AND status != 'CLOSED'
87
+ ${f.repo} ${f.author} ${f.account}
88
+ GROUP BY author
89
+ ORDER BY avg_files_changed DESC
90
+ LIMIT ${limit}
91
+ `.pipe(cacheError("diffSizeByContributor"));
92
+ };
93
+ export const stalePRs = (sql) => (nowISO, filters, limit = 10) => {
94
+ const f = whereFilters(sql, filters);
95
+ return sql `
96
+ SELECT
97
+ id, title, author, repository_name, aws_account_id,
98
+ CAST((julianday(${nowISO}) - julianday(last_modified_date)) AS INTEGER) as days_since_activity
99
+ FROM pull_requests
100
+ WHERE status = 'OPEN'
101
+ AND julianday(${nowISO}) - julianday(last_modified_date) > 7
102
+ ${f.repo} ${f.author} ${f.account}
103
+ ORDER BY days_since_activity DESC
104
+ LIMIT ${limit}
105
+ `.pipe(cacheError("stalePRs"));
106
+ };
107
+ export const healthIndicators = (sql) => (weekStart, weekEnd, filters) => {
108
+ const f = whereFilters(sql, filters);
109
+ return sql `
110
+ SELECT
111
+ COUNT(*) as total,
112
+ COUNT(CASE WHEN comment_count > 0 THEN 1 END) as with_comments,
113
+ COUNT(CASE WHEN is_approved = 1 THEN 1 END) as approved
114
+ FROM pull_requests
115
+ WHERE creation_date >= ${weekStart} AND creation_date < ${weekEnd}
116
+ AND status != 'CLOSED'
117
+ ${f.repo} ${f.author} ${f.account}
118
+ `.pipe(Effect.map((rows) => rows[0] ?? { total: 0, withComments: 0, approved: 0 }), cacheError("healthIndicators"));
119
+ };
120
+ export const filterOptions = (sql) => () => sql `
121
+ SELECT
122
+ GROUP_CONCAT(DISTINCT repository_name) as repos,
123
+ GROUP_CONCAT(DISTINCT author) as authors,
124
+ GROUP_CONCAT(DISTINCT aws_account_id) as accounts
125
+ FROM pull_requests
126
+ `.pipe(Effect.map((rows) => {
127
+ const r = rows[0];
128
+ const sorted = (s) => s?.split(",").filter(Boolean).sort() ?? [];
129
+ return {
130
+ repos: sorted(r?.repos),
131
+ authors: sorted(r?.authors),
132
+ accounts: sorted(r?.accounts)
133
+ };
134
+ }), cacheError("filterOptions"));
135
+ export const totalComments = (sql) => (weekStart, weekEnd, filters) => {
136
+ const f = whereFilters(sql, filters);
137
+ return sql `
138
+ SELECT COALESCE(SUM(comment_count), 0) as total
139
+ FROM pull_requests
140
+ WHERE COALESCE(closed_at, last_modified_date) >= ${weekStart} AND COALESCE(closed_at, last_modified_date) < ${weekEnd}
141
+ AND status != 'CLOSED'
142
+ ${f.repo} ${f.author} ${f.account}
143
+ `.pipe(Effect.map((rows) => rows[0]?.total ?? 0), cacheError("totalComments"));
144
+ };
145
+ export const mergeTimeDetails = (sql) => (weekStart, weekEnd, filters) => {
146
+ const f = whereFilters(sql, filters);
147
+ return sql `
148
+ SELECT id, title, author, repository_name, aws_account_id, creation_date,
149
+ COALESCE(closed_at, last_modified_date) as last_modified_date,
150
+ CAST((julianday(COALESCE(closed_at, last_modified_date)) - julianday(creation_date)) * 86400000 AS INTEGER) as duration_ms
151
+ FROM pull_requests
152
+ WHERE status = 'MERGED'
153
+ AND COALESCE(closed_at, last_modified_date) >= ${weekStart} AND COALESCE(closed_at, last_modified_date) < ${weekEnd}
154
+ ${f.repo} ${f.author} ${f.account}
155
+ ORDER BY COALESCE(closed_at, last_modified_date) DESC
156
+ `.pipe(Effect.map((rows) => rows.map((r) => ({
157
+ prId: r.id,
158
+ prTitle: r.title,
159
+ author: r.author,
160
+ repositoryName: r.repositoryName,
161
+ awsAccountId: r.awsAccountId,
162
+ durationMs: r.durationMs,
163
+ fromLabel: fmtDate(r.creationDate),
164
+ toLabel: fmtDate(r.lastModifiedDate)
165
+ }))), cacheError("mergeTimeDetails"));
166
+ };
167
+ export const avgTimeToMerge = (sql) => (weekStart, weekEnd, filters) => {
168
+ const f = whereFilters(sql, filters);
169
+ return sql `
170
+ SELECT AVG(
171
+ CAST((julianday(COALESCE(closed_at, last_modified_date)) - julianday(creation_date)) * 86400000 AS INTEGER)
172
+ ) as avg_ms
173
+ FROM pull_requests
174
+ WHERE status = 'MERGED'
175
+ AND COALESCE(closed_at, last_modified_date) >= ${weekStart} AND COALESCE(closed_at, last_modified_date) < ${weekEnd}
176
+ ${f.repo} ${f.author} ${f.account}
177
+ `.pipe(Effect.map((rows) => rows[0]?.avgMs ?? null), cacheError("avgTimeToMerge"));
178
+ };
179
+ export const dataAvailableSince = (sql) => () => sql `
180
+ SELECT MIN(creation_date) as earliest FROM pull_requests
181
+ `.pipe(Effect.map((rows) => rows[0]?.earliest ?? null), cacheError("dataAvailableSince"));
182
+ //# sourceMappingURL=queries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queries.js","sourceRoot":"","sources":["../../../../src/CacheService/repos/StatsRepo/queries.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * @module StatsRepo/reviewerData
3
+ *
4
+ * Hybrid SQL + in-memory computation for reviewer/approver analytics.
5
+ * Fetches PR metadata and comment JSON, then computes reviewer rankings,
6
+ * approval counts, and time-to-first-review metrics in-memory because
7
+ * the nested comment structure can't be flattened in SQL.
8
+ *
9
+ * @category CacheService
10
+ */
11
+ import type * as SqlClient from "@effect/sql/SqlClient";
12
+ import { Effect } from "effect";
13
+ import { type Filters } from "./internal.js";
14
+ export declare const reviewerData: (sql: SqlClient.SqlClient) => (weekStart: string, weekEnd: string, filters: Filters) => Effect.Effect<{
15
+ topReviewers: {
16
+ author: string;
17
+ commentCount: number;
18
+ }[];
19
+ topApprovers: {
20
+ author: string;
21
+ approvalCount: number;
22
+ }[];
23
+ avgTimeToFirstReview: number | null;
24
+ avgTimeToMerge: number | null;
25
+ avgTimeToAddressFeedback: number | null;
26
+ firstReviewDetails: {
27
+ prId: string;
28
+ prTitle: string;
29
+ author: string;
30
+ repositoryName: string;
31
+ awsAccountId: string;
32
+ durationMs: number;
33
+ fromLabel: string;
34
+ toLabel: string;
35
+ }[];
36
+ feedbackDetails: {
37
+ prId: string;
38
+ prTitle: string;
39
+ author: string;
40
+ repositoryName: string;
41
+ awsAccountId: string;
42
+ durationMs: number;
43
+ fromLabel: string;
44
+ toLabel: string;
45
+ }[];
46
+ }, import("../../CacheError.ts").CacheError, never>;
47
+ //# sourceMappingURL=reviewerData.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reviewerData.d.ts","sourceRoot":"","sources":["../../../../src/CacheService/repos/StatsRepo/reviewerData.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,KAAK,SAAS,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAA;AACvC,OAAO,EAIL,KAAK,OAAO,EAIb,MAAM,eAAe,CAAA;AAEtB,eAAO,MAAM,YAAY,GAAI,KAAK,SAAS,CAAC,SAAS,MAAM,WAAW,MAAM,EAAE,SAAS,MAAM,EAAE,SAAS,OAAO;;;;;;;;;;oBA6L7E,MAAM,GAAG,IAAI;;;cAlI/B,MAAM;iBACH,MAAM;gBACP,MAAM;wBACE,MAAM;sBACR,MAAM;oBACR,MAAM;mBACP,MAAM;iBACR,MAAM;;;cAPT,MAAM;iBACH,MAAM;gBACP,MAAM;wBACE,MAAM;sBACR,MAAM;oBACR,MAAM;mBACP,MAAM;iBACR,MAAM;;mDAoIxB,CAAA"}
@@ -0,0 +1,172 @@
1
+ import { Effect, Schema } from "effect";
2
+ import { cacheError, extractComments, LocationsFromJson, whereFilters } from "./internal.js";
3
+ export const reviewerData = (sql) => (weekStart, weekEnd, filters) => {
4
+ const f = whereFilters(sql, filters);
5
+ const fJoin = whereFilters(sql, filters, "p");
6
+ return Effect.all({
7
+ prs: sql `
8
+ SELECT id, title, author, aws_account_id, repository_name, creation_date, closed_at,
9
+ COALESCE(closed_at, last_modified_date) as last_modified_date, is_approved, status, merged_by, approved_by
10
+ FROM pull_requests
11
+ WHERE COALESCE(closed_at, last_modified_date) >= ${weekStart} AND COALESCE(closed_at, last_modified_date) < ${weekEnd}
12
+ AND status != 'CLOSED'
13
+ ${f.repo} ${f.author} ${f.account}
14
+ `,
15
+ comments: sql `
16
+ SELECT c.pull_request_id, c.aws_account_id, c.locations_json
17
+ FROM pr_comments c
18
+ INNER JOIN pull_requests p ON p.id = c.pull_request_id AND p.aws_account_id = c.aws_account_id
19
+ WHERE COALESCE(p.closed_at, p.last_modified_date) >= ${weekStart} AND COALESCE(p.closed_at, p.last_modified_date) < ${weekEnd}
20
+ AND p.status != 'CLOSED'
21
+ ${fJoin.repo} ${fJoin.author} ${fJoin.account}
22
+ `
23
+ }).pipe(Effect.flatMap(({ comments, prs }) => Effect.gen(function* () {
24
+ const prAuthors = new Map(prs.map((p) => [
25
+ `${p.awsAccountId}:${p.id}`,
26
+ {
27
+ id: p.id,
28
+ title: p.title,
29
+ author: p.author,
30
+ repositoryName: p.repositoryName,
31
+ awsAccountId: p.awsAccountId,
32
+ creationDate: new Date(p.creationDate),
33
+ closedAt: p.closedAt ? new Date(p.closedAt) : null,
34
+ lastModifiedDate: new Date(p.lastModifiedDate),
35
+ isApproved: p.isApproved === 1,
36
+ isMerged: p.status === "MERGED",
37
+ mergedBy: p.mergedBy,
38
+ approvedBy: p.approvedBy
39
+ ? p.approvedBy.split(",").map((s) => s.trim()).filter((s) => s && s !== p.author)
40
+ : []
41
+ }
42
+ ]));
43
+ // Top approvers — from approved_by column (comma-separated names)
44
+ const approverCounts = new Map();
45
+ for (const p of prs) {
46
+ if (p.approvedBy) {
47
+ for (const name of p.approvedBy.split(",")) {
48
+ const trimmed = name.trim();
49
+ if (trimmed && trimmed !== p.author) {
50
+ approverCounts.set(trimmed, (approverCounts.get(trimmed) ?? 0) + 1);
51
+ }
52
+ }
53
+ }
54
+ }
55
+ const reviewerCounts = new Map();
56
+ const firstReviewDeltas = [];
57
+ const firstReviewDetails = [];
58
+ const feedbackDeltas = [];
59
+ const feedbackDetails = [];
60
+ const prsWithCommentReview = new Set();
61
+ const wsMs = new Date(weekStart).getTime();
62
+ const weMs = new Date(weekEnd).getTime();
63
+ const fmtTs = (d) => d.toISOString().slice(0, 16).replace("T", " ");
64
+ for (const row of comments) {
65
+ const key = `${row.awsAccountId}:${row.pullRequestId}`;
66
+ const prInfo = prAuthors.get(key);
67
+ if (!prInfo)
68
+ continue;
69
+ const parsed = yield* Schema.decodeUnknown(LocationsFromJson)(row.locationsJson).pipe(Effect.catchAll(() => Effect.succeed([])));
70
+ const allComments = extractComments(parsed);
71
+ const sorted = [...allComments].sort((a, b) => a.creationDate.getTime() - b.creationDate.getTime());
72
+ // Filter to week range
73
+ const inWeek = sorted.filter((c) => c.creationDate.getTime() >= wsMs && c.creationDate.getTime() < weMs);
74
+ // Top reviewers — comments in this week (exclude self-reviews)
75
+ for (const c of inWeek) {
76
+ if (c.author !== prInfo.author) {
77
+ reviewerCounts.set(c.author, (reviewerCounts.get(c.author) ?? 0) + 1);
78
+ }
79
+ }
80
+ // (mergedBy-based approver counting moved above comment loop)
81
+ // Time to first review (comment action)
82
+ const firstReview = sorted.find((c) => c.author !== prInfo.author);
83
+ if (firstReview) {
84
+ prsWithCommentReview.add(key);
85
+ const durationMs = firstReview.creationDate.getTime() - prInfo.creationDate.getTime();
86
+ firstReviewDeltas.push(durationMs);
87
+ firstReviewDetails.push({
88
+ prId: prInfo.id,
89
+ prTitle: prInfo.title,
90
+ author: prInfo.author,
91
+ repositoryName: prInfo.repositoryName,
92
+ awsAccountId: prInfo.awsAccountId,
93
+ durationMs,
94
+ fromLabel: fmtTs(prInfo.creationDate),
95
+ toLabel: `${fmtTs(firstReview.creationDate)} (${firstReview.author})`
96
+ });
97
+ }
98
+ // Time to address feedback (review comment → next author reply)
99
+ const prFeedbackDeltas = [];
100
+ let firstFeedbackFrom;
101
+ let lastFeedbackTo;
102
+ for (let i = 0; i < sorted.length; i++) {
103
+ if (sorted[i].author !== prInfo.author) {
104
+ const nextAuthorReply = sorted.slice(i + 1).find((c) => c.author === prInfo.author);
105
+ if (nextAuthorReply) {
106
+ const dMs = nextAuthorReply.creationDate.getTime() - sorted[i].creationDate.getTime();
107
+ feedbackDeltas.push(dMs);
108
+ prFeedbackDeltas.push(dMs);
109
+ if (!firstFeedbackFrom)
110
+ firstFeedbackFrom = sorted[i].creationDate;
111
+ lastFeedbackTo = nextAuthorReply.creationDate;
112
+ }
113
+ }
114
+ }
115
+ if (prFeedbackDeltas.length > 0) {
116
+ const avgMs = prFeedbackDeltas.reduce((a, b) => a + b, 0) / prFeedbackDeltas.length;
117
+ feedbackDetails.push({
118
+ prId: prInfo.id,
119
+ prTitle: prInfo.title,
120
+ author: prInfo.author,
121
+ repositoryName: prInfo.repositoryName,
122
+ awsAccountId: prInfo.awsAccountId,
123
+ durationMs: avgMs,
124
+ fromLabel: `${fmtTs(firstFeedbackFrom)} (${prFeedbackDeltas.length} rounds)`,
125
+ toLabel: fmtTs(lastFeedbackTo)
126
+ });
127
+ }
128
+ }
129
+ // Approve-only first review: PRs approved by non-author but without non-author comments
130
+ for (const [key, prInfo] of prAuthors) {
131
+ if (prsWithCommentReview.has(key))
132
+ continue;
133
+ if (prInfo.approvedBy.length === 0)
134
+ continue;
135
+ // Use closed_at (merge time) as proxy for approval time
136
+ const reviewDate = prInfo.closedAt ?? prInfo.lastModifiedDate;
137
+ const durationMs = reviewDate.getTime() - prInfo.creationDate.getTime();
138
+ if (durationMs <= 0)
139
+ continue;
140
+ firstReviewDeltas.push(durationMs);
141
+ firstReviewDetails.push({
142
+ prId: prInfo.id,
143
+ prTitle: prInfo.title,
144
+ author: prInfo.author,
145
+ repositoryName: prInfo.repositoryName,
146
+ awsAccountId: prInfo.awsAccountId,
147
+ durationMs,
148
+ fromLabel: fmtTs(prInfo.creationDate),
149
+ toLabel: `${fmtTs(reviewDate)} (approved: ${prInfo.approvedBy[0]})`
150
+ });
151
+ }
152
+ const topReviewers = [...reviewerCounts.entries()]
153
+ .map(([author, commentCount]) => ({ author, commentCount }))
154
+ .sort((a, b) => b.commentCount - a.commentCount)
155
+ .slice(0, 10);
156
+ const topApprovers = [...approverCounts.entries()]
157
+ .map(([author, approvalCount]) => ({ author, approvalCount }))
158
+ .sort((a, b) => b.approvalCount - a.approvalCount)
159
+ .slice(0, 10);
160
+ const avg = (arr) => arr.length > 0 ? arr.reduce((a, b) => a + b, 0) / arr.length : null;
161
+ return {
162
+ topReviewers,
163
+ topApprovers,
164
+ avgTimeToFirstReview: avg(firstReviewDeltas),
165
+ avgTimeToMerge: null, // computed separately from PR dates
166
+ avgTimeToAddressFeedback: avg(feedbackDeltas),
167
+ firstReviewDetails,
168
+ feedbackDetails
169
+ };
170
+ }).pipe(Effect.withSpan("StatsRepo.reviewerData.compute"))), cacheError("reviewerData"));
171
+ };
172
+ //# sourceMappingURL=reviewerData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reviewerData.js","sourceRoot":"","sources":["../../../../src/CacheService/repos/StatsRepo/reviewerData.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,32 @@
1
+ import { Option } from "effect";
1
2
  export declare const formatDate: (date: Date) => string;
2
3
  export declare const formatDateTime: (date: Date) => string;
3
4
  export declare const formatRelativeTime: (date: Date, now: Date, prefix?: string) => string;
5
+ export interface WeekRange {
6
+ readonly week: string;
7
+ readonly start: Date;
8
+ readonly end: Date;
9
+ }
10
+ /**
11
+ * Parse an ISO week string (e.g. "2026-W09") into a date range.
12
+ * Returns None if the string is malformed.
13
+ */
14
+ export declare const parseISOWeek: (week: string) => Option.Option<WeekRange>;
15
+ /**
16
+ * Get the ISO week string for a given date.
17
+ */
18
+ export declare const toISOWeek: (date: Date) => string;
19
+ /**
20
+ * Format a week range as a human-readable label.
21
+ * e.g. "W09 2026 · Feb 24 – Mar 2"
22
+ */
23
+ export declare const formatWeekLabel: (range: WeekRange) => string;
24
+ /**
25
+ * Format duration in milliseconds to a human-readable string.
26
+ */
27
+ export declare const formatDuration: (ms: number) => string;
28
+ /**
29
+ * Compute the median of a numeric array. Returns null for empty arrays.
30
+ */
31
+ export declare const median: (arr: ReadonlyArray<number>) => number | null;
4
32
  //# sourceMappingURL=DateUtils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DateUtils.d.ts","sourceRoot":"","sources":["../src/DateUtils.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,UAAU,GAAI,MAAM,IAAI,KAAG,MAKvC,CAAA;AAED,eAAO,MAAM,cAAc,GAAI,MAAM,IAAI,KAAG,MAI3C,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAI,MAAM,IAAI,EAAE,KAAK,IAAI,EAAE,eAAkB,KAAG,MAS9E,CAAA"}
1
+ {"version":3,"file":"DateUtils.d.ts","sourceRoot":"","sources":["../src/DateUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,MAAM,EAAE,MAAM,QAAQ,CAAA;AAEhD,eAAO,MAAM,UAAU,GAAI,MAAM,IAAI,KAAG,MAKvC,CAAA;AAED,eAAO,MAAM,cAAc,GAAI,MAAM,IAAI,KAAG,MAI3C,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAI,MAAM,IAAI,EAAE,KAAK,IAAI,EAAE,eAAkB,KAAG,MAS9E,CAAA;AAMD,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAA;IACpB,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAA;CACnB;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,KAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAclE,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,SAAS,GAAI,MAAM,IAAI,KAAG,MAOtC,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,eAAe,GAAI,OAAO,SAAS,KAAG,MAUlD,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,GAAI,IAAI,MAAM,KAAG,MAO3C,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,MAAM,GAAI,KAAK,aAAa,CAAC,MAAM,CAAC,KAAG,MAAM,GAAG,IAK5D,CAAA"}
package/dist/DateUtils.js CHANGED
@@ -1,4 +1,4 @@
1
- import { Match } from "effect";
1
+ import { Duration, Match, Option } from "effect";
2
2
  export const formatDate = (date) => {
3
3
  const d = date.getDate().toString().padStart(2, "0");
4
4
  const m = (date.getMonth() + 1).toString().padStart(2, "0");
@@ -14,4 +14,72 @@ export const formatRelativeTime = (date, now, prefix = "Updated") => {
14
14
  const seconds = Math.max(0, Math.floor((now.getTime() - date.getTime()) / 1000));
15
15
  return Match.value(seconds).pipe(Match.when((s) => s < 60, (s) => `${prefix} ${s}s ago`), Match.when((s) => s < 3600, (s) => `${prefix} ${Math.floor(s / 60)}m ago`), Match.when((s) => s < 86400, (s) => `${prefix} ${Math.floor(s / 3600)}h ago`), Match.orElse(() => `${prefix} on ${formatDate(date)}`));
16
16
  };
17
+ /**
18
+ * Parse an ISO week string (e.g. "2026-W09") into a date range.
19
+ * Returns None if the string is malformed.
20
+ */
21
+ export const parseISOWeek = (week) => {
22
+ const match = /^(\d{4})-W(\d{2})$/.exec(week);
23
+ if (!match)
24
+ return Option.none();
25
+ const year = parseInt(match[1], 10);
26
+ const weekNum = parseInt(match[2], 10);
27
+ if (weekNum < 1 || weekNum > 53)
28
+ return Option.none();
29
+ // Jan 4 is always in week 1 (ISO 8601)
30
+ const jan4 = new Date(Date.UTC(year, 0, 4));
31
+ const dayOfWeek = jan4.getUTCDay() || 7; // Monday=1 ... Sunday=7
32
+ const monday = new Date(jan4.getTime() + ((weekNum - 1) * 7 - (dayOfWeek - 1)) * 86400000);
33
+ const nextMonday = new Date(monday.getTime() + 7 * 86400000);
34
+ return Option.some({ week, start: monday, end: nextMonday });
35
+ };
36
+ /**
37
+ * Get the ISO week string for a given date.
38
+ */
39
+ export const toISOWeek = (date) => {
40
+ const d = new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate()));
41
+ const dayNum = d.getUTCDay() || 7;
42
+ d.setUTCDate(d.getUTCDate() + 4 - dayNum); // Thursday of the week
43
+ const yearStart = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));
44
+ const weekNum = Math.ceil(((d.getTime() - yearStart.getTime()) / 86400000 + 1) / 7);
45
+ return `${d.getUTCFullYear()}-W${weekNum.toString().padStart(2, "0")}`;
46
+ };
47
+ /**
48
+ * Format a week range as a human-readable label.
49
+ * e.g. "W09 2026 · Feb 24 – Mar 2"
50
+ */
51
+ export const formatWeekLabel = (range) => {
52
+ const w = range.week.split("-W");
53
+ const startMonth = range.start.toLocaleString("en-US", { month: "short", timeZone: "UTC" });
54
+ const endMonth = range.end.toLocaleString("en-US", { month: "short", timeZone: "UTC" });
55
+ const startDay = range.start.getUTCDate();
56
+ const endDay = range.end.getUTCDate();
57
+ const datePart = startMonth === endMonth
58
+ ? `${startMonth} ${startDay} – ${endDay}`
59
+ : `${startMonth} ${startDay} – ${endMonth} ${endDay}`;
60
+ return `W${w[1]} ${w[0]} · ${datePart}`;
61
+ };
62
+ /**
63
+ * Format duration in milliseconds to a human-readable string.
64
+ */
65
+ export const formatDuration = (ms) => {
66
+ const d = Duration.millis(ms);
67
+ const hours = Duration.toHours(d);
68
+ if (hours < 1)
69
+ return `${Math.round(hours * 60)}m`;
70
+ if (hours < 24)
71
+ return `${Math.floor(hours)}h`;
72
+ const days = Math.round(hours / 24 * 10) / 10;
73
+ return `${days}d`;
74
+ };
75
+ /**
76
+ * Compute the median of a numeric array. Returns null for empty arrays.
77
+ */
78
+ export const median = (arr) => {
79
+ if (arr.length === 0)
80
+ return null;
81
+ const sorted = [...arr].sort((a, b) => a - b);
82
+ const mid = Math.floor(sorted.length / 2);
83
+ return sorted.length % 2 !== 0 ? sorted[mid] : (sorted[mid - 1] + sorted[mid]) / 2;
84
+ };
17
85
  //# sourceMappingURL=DateUtils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DateUtils.js","sourceRoot":"","sources":["../src/DateUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAE9B,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAU,EAAU,EAAE;IAC/C,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACpD,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IAC3D,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,CAAA;IAC5B,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAA;AACzB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,IAAU,EAAU,EAAE;IACnD,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAA;IAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAA;IAChE,OAAO,GAAG,IAAI,IAAI,IAAI,EAAE,CAAA;AAC1B,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,IAAU,EAAE,GAAS,EAAE,MAAM,GAAG,SAAS,EAAU,EAAE;IACtF,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA;IAEhF,OAAO,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAC9B,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,EACvD,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,EAC1E,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,EAC7E,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,MAAM,OAAO,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CACvD,CAAA;AACH,CAAC,CAAA"}
1
+ {"version":3,"file":"DateUtils.js","sourceRoot":"","sources":["../src/DateUtils.ts"],"names":[],"mappings":"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"}
package/dist/Domain.d.ts CHANGED
@@ -119,6 +119,9 @@ declare const PullRequest_base: Schema.Class<PullRequest, {
119
119
  commentCount: Schema.optional<typeof Schema.Number>;
120
120
  healthScore: Schema.optional<typeof Schema.Number>;
121
121
  fetchedAt: Schema.optional<typeof Schema.DateFromSelf>;
122
+ approvedBy: Schema.Array$<typeof Schema.String>;
123
+ commentedBy: Schema.Array$<typeof Schema.String>;
124
+ filesChanged: Schema.optional<typeof Schema.Number>;
122
125
  }, Schema.Struct.Encoded<{
123
126
  id: Schema.brand<typeof Schema.String, "PullRequestId">;
124
127
  title: typeof Schema.String;
@@ -137,6 +140,9 @@ declare const PullRequest_base: Schema.Class<PullRequest, {
137
140
  commentCount: Schema.optional<typeof Schema.Number>;
138
141
  healthScore: Schema.optional<typeof Schema.Number>;
139
142
  fetchedAt: Schema.optional<typeof Schema.DateFromSelf>;
143
+ approvedBy: Schema.Array$<typeof Schema.String>;
144
+ commentedBy: Schema.Array$<typeof Schema.String>;
145
+ filesChanged: Schema.optional<typeof Schema.Number>;
140
146
  }>, never, {
141
147
  readonly link: string;
142
148
  } & {
@@ -171,6 +177,12 @@ declare const PullRequest_base: Schema.Class<PullRequest, {
171
177
  readonly healthScore?: number | undefined;
172
178
  } & {
173
179
  readonly fetchedAt?: Date | undefined;
180
+ } & {
181
+ readonly approvedBy: readonly string[];
182
+ } & {
183
+ readonly commentedBy: readonly string[];
184
+ } & {
185
+ readonly filesChanged?: number | undefined;
174
186
  }, {}, {}>;
175
187
  /**
176
188
  * CodeCommit pull request.
@@ -178,11 +190,9 @@ declare const PullRequest_base: Schema.Class<PullRequest, {
178
190
  * @category Domain
179
191
  */
180
192
  export declare class PullRequest extends PullRequest_base {
181
- /**
182
- * AWS Console URL for this pull request.
183
- */
184
193
  get consoleUrl(): string;
185
194
  }
195
+ export declare const codecommitConsoleUrl: (region: string, repo: string, prId: string) => string;
186
196
  declare const Sandbox_base: Schema.Class<Sandbox, {
187
197
  id: Schema.brand<typeof Schema.String, "SandboxId">;
188
198
  pullRequestId: Schema.brand<typeof Schema.String, "PullRequestId">;
@@ -1 +1 @@
1
- {"version":3,"file":"Domain.d.ts","sourceRoot":"","sources":["../src/Domain.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAMrC;;;;GAIG;AACH,eAAO,MAAM,aAAa,qDAAoD,CAAA;AAC9E,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAC,IAAI,CAAA;AAErD;;;;GAIG;AACH,eAAO,MAAM,cAAc,sDAAqD,CAAA;AAChF,MAAM,MAAM,cAAc,GAAG,OAAO,cAAc,CAAC,IAAI,CAAA;AAEvD;;;;GAIG;AACH,eAAO,MAAM,cAAc,sDAAqD,CAAA;AAChF,MAAM,MAAM,cAAc,GAAG,OAAO,cAAc,CAAC,IAAI,CAAA;AAEvD;;;;GAIG;AACH,eAAO,MAAM,SAAS,iDAAgD,CAAA;AACtE,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC,IAAI,CAAA;AAE7C;;;;GAIG;AACH,eAAO,MAAM,SAAS,iDAAgD,CAAA;AACtE,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC,IAAI,CAAA;AAE7C;;;;GAIG;AACH,eAAO,MAAM,SAAS,iDAAgD,CAAA;AACtE,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC,IAAI,CAAA;AAM7C;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,8CAA6C,CAAA;AAC3E,MAAM,MAAM,iBAAiB,GAAG,OAAO,iBAAiB,CAAC,IAAI,CAAA;AAE7D;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,yDAAwD,CAAA;AACrF,MAAM,MAAM,gBAAgB,GAAG,OAAO,gBAAgB,CAAC,IAAI,CAAA;AAE3D;;;;GAIG;AACH,eAAO,MAAM,SAAS,8CAA6C,CAAA;AACnE,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC,IAAI,CAAA;AAE7C;;;;GAIG;AACH,eAAO,MAAM,aAAa,gGAQzB,CAAA;AACD,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAC,IAAI,CAAA;;;;;;;;;;;;;;;;AAMrD;;;;GAIG;AACH,qBAAa,OAAQ,SAAQ,YAI3B;CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEL;;;;GAIG;AACH,qBAAa,WAAY,SAAQ,gBAkB/B;IACA;;OAEG;IACH,IAAI,UAAU,IAAI,MAAM,CAEvB;CACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAED;;;;GAIG;AACH,qBAAa,OAAQ,SAAQ,YAa3B;CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEL;;;;GAIG;AACH,qBAAa,SAAU,SAAQ,cAS7B;CAAG;AAEL;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;IACxB,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,aAAa,CAAC,CAAA;CAC/C;AAED;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,aAAa,CAAC,CAAA;CAChD;AAMD,QAAA,MAAM,aAAa;;;;;;;;;EASjB,CAAA;AAEF,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,IAAI,EAAE,OAAO,aAAa,CAAC,IAAI,CAAA;IACxC,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,wBAAwB,CAAC,CAAA;CAC1D;AAOD;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB;;;;;EAKhC,CAAA;AAkBF;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GACjC,WAAW,aAAa,CAAC,iBAAiB,CAAC,KAC1C,aAAa,CAAC,OAAO,qBAAqB,CAAC,IAAI,CAM7C,CAAA;AAML,eAAO,MAAM,0BAA0B,4LAWtC,CAAA;AACD,MAAM,MAAM,0BAA0B,GAAG,OAAO,0BAA0B,CAAC,IAAI,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAE/E,qBAAa,sBAAuB,SAAQ,2BAQ1C;CAAG;AAEL,MAAM,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC;IACzC,QAAQ,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAA;KAAE,CAAA;IAC7C,QAAQ,CAAC,OAAO,EAAE;QAAE,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAA;KAAE,CAAA;IAC9C,QAAQ,CAAC,QAAQ,EAAE;QAAE,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAA;KAAE,CAAA;IAC/C,QAAQ,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;CACtE,CAAC,CAAA;AACF,eAAO,MAAM,YAAY;;;4BALgB,IAAI;;;;4BACH,IAAI;;;;4BACH,IAAI;;;;4BACN,IAAI;wBAAkB,MAAM;;;;4BAH5B,IAAI;;;;;4BACH,IAAI;;;;;4BACH,IAAI;;;;;4BACN,IAAI;wBAAkB,MAAM;;;;;;;;oCAH5B,IAAI;;;;oCACH,IAAI;;;;oCACH,IAAI;;;;oCACN,IAAI;gCAAkB,MAAM;;;;gCAH5B,IAAI;;;gCACH,IAAI;;;gCACH,IAAI;;;gCACN,IAAI;4BAAkB,MAAM;;;;;oCAH5B,IAAI;;;;oCACH,IAAI;;;;oCACH,IAAI;;;;oCACN,IAAI;gCAAkB,MAAM;;;;gCAH5B,IAAI;;;gCACH,IAAI;;;gCACH,IAAI;;;gCACN,IAAI;4BAAkB,MAAM;;;CAEV,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAM3D;;;;GAIG;AACH,qBAAa,gBAAiB,SAAQ,qBAMpC;CAAG;AAEL;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAA;CAChD;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAA;IAChC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAA;IAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;CAC1B;AAED;;;;GAIG;AACH,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAC,WAAW,CAAC,CAAA;IACjD,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,YAAY,CAAC,CAAA;IAC9C,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAA;IAC1B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACnC,QAAQ,CAAC,WAAW,CAAC,EAAE,IAAI,CAAA;IAC3B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAC9B"}
1
+ {"version":3,"file":"Domain.d.ts","sourceRoot":"","sources":["../src/Domain.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAMrC;;;;GAIG;AACH,eAAO,MAAM,aAAa,qDAAoD,CAAA;AAC9E,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAC,IAAI,CAAA;AAErD;;;;GAIG;AACH,eAAO,MAAM,cAAc,sDAAqD,CAAA;AAChF,MAAM,MAAM,cAAc,GAAG,OAAO,cAAc,CAAC,IAAI,CAAA;AAEvD;;;;GAIG;AACH,eAAO,MAAM,cAAc,sDAAqD,CAAA;AAChF,MAAM,MAAM,cAAc,GAAG,OAAO,cAAc,CAAC,IAAI,CAAA;AAEvD;;;;GAIG;AACH,eAAO,MAAM,SAAS,iDAAgD,CAAA;AACtE,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC,IAAI,CAAA;AAE7C;;;;GAIG;AACH,eAAO,MAAM,SAAS,iDAAgD,CAAA;AACtE,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC,IAAI,CAAA;AAE7C;;;;GAIG;AACH,eAAO,MAAM,SAAS,iDAAgD,CAAA;AACtE,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC,IAAI,CAAA;AAM7C;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,8CAA6C,CAAA;AAC3E,MAAM,MAAM,iBAAiB,GAAG,OAAO,iBAAiB,CAAC,IAAI,CAAA;AAE7D;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,yDAAwD,CAAA;AACrF,MAAM,MAAM,gBAAgB,GAAG,OAAO,gBAAgB,CAAC,IAAI,CAAA;AAE3D;;;;GAIG;AACH,eAAO,MAAM,SAAS,8CAA6C,CAAA;AACnE,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC,IAAI,CAAA;AAE7C;;;;GAIG;AACH,eAAO,MAAM,aAAa,gGAQzB,CAAA;AACD,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAC,IAAI,CAAA;;;;;;;;;;;;;;;;AAMrD;;;;GAIG;AACH,qBAAa,OAAQ,SAAQ,YAI3B;CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEL;;;;GAIG;AACH,qBAAa,WAAY,SAAQ,gBAqB/B;IACA,IAAI,UAAU,IAAI,MAAM,CAEvB;CACF;AAED,eAAO,MAAM,oBAAoB,GAAI,QAAQ,MAAM,EAAE,MAAM,MAAM,EAAE,MAAM,MAAM,KAAG,MAC2C,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAE7H;;;;GAIG;AACH,qBAAa,OAAQ,SAAQ,YAa3B;CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEL;;;;GAIG;AACH,qBAAa,SAAU,SAAQ,cAS7B;CAAG;AAEL;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;IACxB,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,aAAa,CAAC,CAAA;CAC/C;AAED;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,aAAa,CAAC,CAAA;CAChD;AAMD,QAAA,MAAM,aAAa;;;;;;;;;EASjB,CAAA;AAEF,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,IAAI,EAAE,OAAO,aAAa,CAAC,IAAI,CAAA;IACxC,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,wBAAwB,CAAC,CAAA;CAC1D;AAOD;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB;;;;;EAKhC,CAAA;AAkBF;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GACjC,WAAW,aAAa,CAAC,iBAAiB,CAAC,KAC1C,aAAa,CAAC,OAAO,qBAAqB,CAAC,IAAI,CAM7C,CAAA;AAML,eAAO,MAAM,0BAA0B,4LAWtC,CAAA;AACD,MAAM,MAAM,0BAA0B,GAAG,OAAO,0BAA0B,CAAC,IAAI,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAE/E,qBAAa,sBAAuB,SAAQ,2BAQ1C;CAAG;AAEL,MAAM,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC;IACzC,QAAQ,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAA;KAAE,CAAA;IAC7C,QAAQ,CAAC,OAAO,EAAE;QAAE,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAA;KAAE,CAAA;IAC9C,QAAQ,CAAC,QAAQ,EAAE;QAAE,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAA;KAAE,CAAA;IAC/C,QAAQ,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;CACtE,CAAC,CAAA;AACF,eAAO,MAAM,YAAY;;;4BALgB,IAAI;;;;4BACH,IAAI;;;;4BACH,IAAI;;;;4BACN,IAAI;wBAAkB,MAAM;;;;4BAH5B,IAAI;;;;;4BACH,IAAI;;;;;4BACH,IAAI;;;;;4BACN,IAAI;wBAAkB,MAAM;;;;;;;;oCAH5B,IAAI;;;;oCACH,IAAI;;;;oCACH,IAAI;;;;oCACN,IAAI;gCAAkB,MAAM;;;;gCAH5B,IAAI;;;gCACH,IAAI;;;gCACH,IAAI;;;gCACN,IAAI;4BAAkB,MAAM;;;;;oCAH5B,IAAI;;;;oCACH,IAAI;;;;oCACH,IAAI;;;;oCACN,IAAI;gCAAkB,MAAM;;;;gCAH5B,IAAI;;;gCACH,IAAI;;;gCACH,IAAI;;;gCACN,IAAI;4BAAkB,MAAM;;;CAEV,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAM3D;;;;GAIG;AACH,qBAAa,gBAAiB,SAAQ,qBAMpC;CAAG;AAEL;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAA;CAChD;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAA;IAChC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAA;IAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;CAC1B;AAED;;;;GAIG;AACH,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAC,WAAW,CAAC,CAAA;IACjD,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,YAAY,CAAC,CAAA;IAC9C,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAA;IAC1B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACnC,QAAQ,CAAC,WAAW,CAAC,EAAE,IAAI,CAAA;IAC3B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAC9B"}