critical-gate 2.0.1 → 2.1.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 (173) hide show
  1. package/README.md +163 -0
  2. package/dist/cli.d.ts +8 -2
  3. package/dist/cli.d.ts.map +1 -1
  4. package/dist/cli.js +484 -22
  5. package/dist/cli.js.map +1 -1
  6. package/dist/config/critical-gate-config.d.ts +41 -0
  7. package/dist/config/critical-gate-config.d.ts.map +1 -1
  8. package/dist/config/critical-gate-config.js +193 -4
  9. package/dist/config/critical-gate-config.js.map +1 -1
  10. package/dist/config/index.d.ts +2 -1
  11. package/dist/config/index.d.ts.map +1 -1
  12. package/dist/config/index.js +2 -1
  13. package/dist/config/index.js.map +1 -1
  14. package/dist/config/learning-policy.d.ts +9 -0
  15. package/dist/config/learning-policy.d.ts.map +1 -0
  16. package/dist/config/learning-policy.js +34 -0
  17. package/dist/config/learning-policy.js.map +1 -0
  18. package/dist/detectors/api-surface-detector.d.ts.map +1 -1
  19. package/dist/detectors/api-surface-detector.js +123 -5
  20. package/dist/detectors/api-surface-detector.js.map +1 -1
  21. package/dist/detectors/confidence-calibration.d.ts +11 -0
  22. package/dist/detectors/confidence-calibration.d.ts.map +1 -0
  23. package/dist/detectors/confidence-calibration.js +53 -0
  24. package/dist/detectors/confidence-calibration.js.map +1 -0
  25. package/dist/detectors/existing-solution-detector.js +6 -0
  26. package/dist/detectors/existing-solution-detector.js.map +1 -1
  27. package/dist/detectors/expected-companions-detector.d.ts.map +1 -1
  28. package/dist/detectors/expected-companions-detector.js +208 -10
  29. package/dist/detectors/expected-companions-detector.js.map +1 -1
  30. package/dist/detectors/index.d.ts +1 -0
  31. package/dist/detectors/index.d.ts.map +1 -1
  32. package/dist/detectors/index.js +1 -0
  33. package/dist/detectors/index.js.map +1 -1
  34. package/dist/detectors/intent-verification-detector.d.ts.map +1 -1
  35. package/dist/detectors/intent-verification-detector.js +64 -1
  36. package/dist/detectors/intent-verification-detector.js.map +1 -1
  37. package/dist/detectors/reason-chain.d.ts +4 -0
  38. package/dist/detectors/reason-chain.d.ts.map +1 -0
  39. package/dist/detectors/reason-chain.js +102 -0
  40. package/dist/detectors/reason-chain.js.map +1 -0
  41. package/dist/detectors/repair-contract.d.ts +4 -0
  42. package/dist/detectors/repair-contract.d.ts.map +1 -0
  43. package/dist/detectors/repair-contract.js +45 -0
  44. package/dist/detectors/repair-contract.js.map +1 -0
  45. package/dist/detectors/repository-intelligence-detector.d.ts.map +1 -1
  46. package/dist/detectors/repository-intelligence-detector.js +17 -4
  47. package/dist/detectors/repository-intelligence-detector.js.map +1 -1
  48. package/dist/detectors/rewrite-detector.d.ts.map +1 -1
  49. package/dist/detectors/rewrite-detector.js +5 -2
  50. package/dist/detectors/rewrite-detector.js.map +1 -1
  51. package/dist/detectors/runner.d.ts +1 -0
  52. package/dist/detectors/runner.d.ts.map +1 -1
  53. package/dist/detectors/runner.js +50 -3
  54. package/dist/detectors/runner.js.map +1 -1
  55. package/dist/detectors/scope-detector.d.ts.map +1 -1
  56. package/dist/detectors/scope-detector.js +1 -8
  57. package/dist/detectors/scope-detector.js.map +1 -1
  58. package/dist/detectors/secret-path-detector.js +1 -1
  59. package/dist/detectors/secret-path-detector.js.map +1 -1
  60. package/dist/detectors/test-weakening-detector.d.ts.map +1 -1
  61. package/dist/detectors/test-weakening-detector.js +188 -39
  62. package/dist/detectors/test-weakening-detector.js.map +1 -1
  63. package/dist/detectors/types.d.ts +2 -0
  64. package/dist/detectors/types.d.ts.map +1 -1
  65. package/dist/diff/git-diff-reader.d.ts +1 -0
  66. package/dist/diff/git-diff-reader.d.ts.map +1 -1
  67. package/dist/diff/git-diff-reader.js +6 -3
  68. package/dist/diff/git-diff-reader.js.map +1 -1
  69. package/dist/diff/path-classifier.d.ts.map +1 -1
  70. package/dist/diff/path-classifier.js +9 -1
  71. package/dist/diff/path-classifier.js.map +1 -1
  72. package/dist/frameworks/detect.d.ts +11 -0
  73. package/dist/frameworks/detect.d.ts.map +1 -0
  74. package/dist/frameworks/detect.js +29 -0
  75. package/dist/frameworks/detect.js.map +1 -0
  76. package/dist/frameworks/index.d.ts +5 -0
  77. package/dist/frameworks/index.d.ts.map +1 -0
  78. package/dist/frameworks/index.js +4 -0
  79. package/dist/frameworks/index.js.map +1 -0
  80. package/dist/frameworks/packs.d.ts +3 -0
  81. package/dist/frameworks/packs.d.ts.map +1 -0
  82. package/dist/frameworks/packs.js +146 -0
  83. package/dist/frameworks/packs.js.map +1 -0
  84. package/dist/frameworks/path-patterns.d.ts +3 -0
  85. package/dist/frameworks/path-patterns.d.ts.map +1 -0
  86. package/dist/frameworks/path-patterns.js +16 -0
  87. package/dist/frameworks/path-patterns.js.map +1 -0
  88. package/dist/frameworks/types.d.ts +15 -0
  89. package/dist/frameworks/types.d.ts.map +1 -0
  90. package/dist/frameworks/types.js +2 -0
  91. package/dist/frameworks/types.js.map +1 -0
  92. package/dist/index.d.ts +2 -0
  93. package/dist/index.d.ts.map +1 -1
  94. package/dist/index.js +2 -0
  95. package/dist/index.js.map +1 -1
  96. package/dist/intent/diff-coherence-score.d.ts +13 -0
  97. package/dist/intent/diff-coherence-score.d.ts.map +1 -0
  98. package/dist/intent/diff-coherence-score.js +125 -0
  99. package/dist/intent/diff-coherence-score.js.map +1 -0
  100. package/dist/intent/index.d.ts +2 -0
  101. package/dist/intent/index.d.ts.map +1 -1
  102. package/dist/intent/index.js +2 -0
  103. package/dist/intent/index.js.map +1 -1
  104. package/dist/intent/intent-core.d.ts.map +1 -1
  105. package/dist/intent/intent-core.js +17 -1
  106. package/dist/intent/intent-core.js.map +1 -1
  107. package/dist/intent/intent-model.d.ts.map +1 -1
  108. package/dist/intent/intent-model.js +39 -2
  109. package/dist/intent/intent-model.js.map +1 -1
  110. package/dist/intent/task-intent-quality.d.ts +4 -0
  111. package/dist/intent/task-intent-quality.d.ts.map +1 -0
  112. package/dist/intent/task-intent-quality.js +98 -0
  113. package/dist/intent/task-intent-quality.js.map +1 -0
  114. package/dist/knowledge/history-index.d.ts.map +1 -1
  115. package/dist/knowledge/history-index.js +10 -3
  116. package/dist/knowledge/history-index.js.map +1 -1
  117. package/dist/knowledge/index.d.ts +2 -1
  118. package/dist/knowledge/index.d.ts.map +1 -1
  119. package/dist/knowledge/index.js +1 -0
  120. package/dist/knowledge/index.js.map +1 -1
  121. package/dist/knowledge/normal-change-model.d.ts +8 -0
  122. package/dist/knowledge/normal-change-model.d.ts.map +1 -0
  123. package/dist/knowledge/normal-change-model.js +121 -0
  124. package/dist/knowledge/normal-change-model.js.map +1 -0
  125. package/dist/knowledge/solution-index.d.ts.map +1 -1
  126. package/dist/knowledge/solution-index.js +43 -3
  127. package/dist/knowledge/solution-index.js.map +1 -1
  128. package/dist/knowledge/types.d.ts +11 -0
  129. package/dist/knowledge/types.d.ts.map +1 -1
  130. package/dist/reporters/index.d.ts +4 -1
  131. package/dist/reporters/index.d.ts.map +1 -1
  132. package/dist/reporters/index.js +6 -0
  133. package/dist/reporters/index.js.map +1 -1
  134. package/dist/reporters/markdown-reporter.d.ts.map +1 -1
  135. package/dist/reporters/markdown-reporter.js +67 -0
  136. package/dist/reporters/markdown-reporter.js.map +1 -1
  137. package/dist/reporters/pr-comment-reporter.d.ts +3 -0
  138. package/dist/reporters/pr-comment-reporter.d.ts.map +1 -0
  139. package/dist/reporters/pr-comment-reporter.js +105 -0
  140. package/dist/reporters/pr-comment-reporter.js.map +1 -0
  141. package/dist/reporters/repair-contract.d.ts +3 -0
  142. package/dist/reporters/repair-contract.d.ts.map +1 -0
  143. package/dist/reporters/repair-contract.js +25 -0
  144. package/dist/reporters/repair-contract.js.map +1 -0
  145. package/dist/reporters/repair-reporter.d.ts.map +1 -1
  146. package/dist/reporters/repair-reporter.js +19 -1
  147. package/dist/reporters/repair-reporter.js.map +1 -1
  148. package/dist/reporters/reviewer-checklist.d.ts +10 -0
  149. package/dist/reporters/reviewer-checklist.d.ts.map +1 -0
  150. package/dist/reporters/reviewer-checklist.js +112 -0
  151. package/dist/reporters/reviewer-checklist.js.map +1 -0
  152. package/dist/repository/api-snapshot.d.ts +41 -0
  153. package/dist/repository/api-snapshot.d.ts.map +1 -0
  154. package/dist/repository/api-snapshot.js +219 -0
  155. package/dist/repository/api-snapshot.js.map +1 -0
  156. package/dist/repository/index.d.ts +2 -0
  157. package/dist/repository/index.d.ts.map +1 -1
  158. package/dist/repository/index.js +2 -0
  159. package/dist/repository/index.js.map +1 -1
  160. package/dist/repository/monorepo.d.ts +7 -0
  161. package/dist/repository/monorepo.d.ts.map +1 -0
  162. package/dist/repository/monorepo.js +189 -0
  163. package/dist/repository/monorepo.js.map +1 -0
  164. package/dist/schema/gate-result.schema.d.ts +272 -0
  165. package/dist/schema/gate-result.schema.d.ts.map +1 -1
  166. package/dist/schema/gate-result.schema.js +148 -1
  167. package/dist/schema/gate-result.schema.js.map +1 -1
  168. package/dist/schema/index.d.ts +1 -1
  169. package/dist/schema/index.d.ts.map +1 -1
  170. package/dist/schema/index.js.map +1 -1
  171. package/dist/schema/types.d.ts +63 -0
  172. package/dist/schema/types.d.ts.map +1 -1
  173. package/package.json +1 -1
@@ -0,0 +1,219 @@
1
+ import { dirname, join } from "node:path";
2
+ export const API_SURFACE_SNAPSHOT_PATH = ".critical-gate/api-surface.json";
3
+ export const API_SURFACE_SNAPSHOT_SCHEMA_VERSION = "1.0";
4
+ const packageEntrypointKeys = ["main", "module", "types", "typings", "browser"];
5
+ const fallbackEntrypoints = ["src/index.ts", "src/index.tsx", "index.ts", "index.tsx", "index.js"];
6
+ const declaredExportPattern = /^\s*export\s+(?:async\s+)?(?:declare\s+)?(function|class|interface|type|enum|const|let|var)\s+([A-Za-z_$][\w$]*)([^\n]*)/gm;
7
+ const namedExportPattern = /^\s*export\s*\{([^}]+)\}(?:\s*from\s*["']([^"']+)["'])?/gm;
8
+ const defaultExportPattern = /^\s*export\s+default\s+(?:async\s+)?(?:(function|class)\s+([A-Za-z_$][\w$]*)?|([A-Za-z_$][\w$]*))?/gm;
9
+ export function buildApiSurfaceSnapshot({ root, generatedAt, entrypoints, reader = {} }) {
10
+ const resolvedEntrypoints = normalizeEntrypoints(entrypoints !== undefined && entrypoints.length > 0
11
+ ? entrypoints
12
+ : inferPublicEntrypoints(root, reader));
13
+ const exports = resolvedEntrypoints
14
+ .flatMap((entrypoint) => {
15
+ const absolutePath = join(root, entrypoint);
16
+ if (reader.exists?.(absolutePath) === false) {
17
+ return [];
18
+ }
19
+ const sourceText = reader.readFile?.(absolutePath);
20
+ if (sourceText === undefined) {
21
+ return [];
22
+ }
23
+ return extractApiSurfaceExports(entrypoint, sourceText);
24
+ })
25
+ .sort(compareExports);
26
+ return {
27
+ schemaVersion: API_SURFACE_SNAPSHOT_SCHEMA_VERSION,
28
+ generatedAt: generatedAt.toISOString(),
29
+ entrypoints: resolvedEntrypoints,
30
+ exports
31
+ };
32
+ }
33
+ export function loadApiSurfaceSnapshot(root, reader = {}) {
34
+ const path = join(root, API_SURFACE_SNAPSHOT_PATH);
35
+ if (reader.exists?.(path) !== true) {
36
+ return undefined;
37
+ }
38
+ try {
39
+ const parsed = JSON.parse(reader.readFile?.(path) ?? "");
40
+ if (!isApiSurfaceSnapshot(parsed)) {
41
+ return undefined;
42
+ }
43
+ return parsed;
44
+ }
45
+ catch {
46
+ return undefined;
47
+ }
48
+ }
49
+ export function summarizeApiSurfaceSnapshot(snapshot) {
50
+ if (snapshot === undefined) {
51
+ return undefined;
52
+ }
53
+ return {
54
+ path: API_SURFACE_SNAPSHOT_PATH,
55
+ schemaVersion: snapshot.schemaVersion,
56
+ exportCount: snapshot.exports.length,
57
+ entrypoints: snapshot.entrypoints
58
+ };
59
+ }
60
+ export function extractApiSurfaceExports(path, sourceText) {
61
+ const exports = [];
62
+ for (const match of sourceText.matchAll(declaredExportPattern)) {
63
+ const kind = normalizeExportKind(match[1] ?? "const");
64
+ const name = match[2];
65
+ if (name === undefined) {
66
+ continue;
67
+ }
68
+ exports.push({
69
+ path,
70
+ name,
71
+ kind,
72
+ signature: normalizeSignature(match[0])
73
+ });
74
+ }
75
+ for (const match of sourceText.matchAll(namedExportPattern)) {
76
+ const exportedNames = match[1] ?? "";
77
+ const source = match[2];
78
+ for (const rawName of exportedNames.split(",")) {
79
+ const name = normalizeNamedExport(rawName);
80
+ if (name.length === 0) {
81
+ continue;
82
+ }
83
+ exports.push({
84
+ path,
85
+ name,
86
+ kind: "reexport",
87
+ signature: normalizeSignature(match[0]),
88
+ source
89
+ });
90
+ }
91
+ }
92
+ for (const match of sourceText.matchAll(defaultExportPattern)) {
93
+ exports.push({
94
+ path,
95
+ name: "default",
96
+ kind: "default",
97
+ signature: normalizeSignature(match[0])
98
+ });
99
+ }
100
+ return dedupeExports(exports).sort(compareExports);
101
+ }
102
+ export function findSnapshotExport(snapshot, path, name) {
103
+ return snapshot.exports.find((entry) => entry.path === path && entry.name === name);
104
+ }
105
+ export function hasApiSnapshotEvidence(files) {
106
+ return files.some((file) => normalizePath(file.path) === API_SURFACE_SNAPSHOT_PATH);
107
+ }
108
+ function inferPublicEntrypoints(root, reader) {
109
+ const packageJson = readPackageJson(root, reader);
110
+ const entrypoints = new Set();
111
+ if (isRecord(packageJson)) {
112
+ for (const key of packageEntrypointKeys) {
113
+ addEntrypointValue(entrypoints, packageJson[key]);
114
+ }
115
+ addEntrypointValue(entrypoints, packageJson.exports);
116
+ }
117
+ for (const fallback of fallbackEntrypoints) {
118
+ if (reader.exists?.(join(root, fallback)) === true) {
119
+ entrypoints.add(fallback);
120
+ }
121
+ }
122
+ return [...entrypoints];
123
+ }
124
+ function readPackageJson(root, reader) {
125
+ const path = join(root, "package.json");
126
+ if (reader.exists?.(path) !== true) {
127
+ return undefined;
128
+ }
129
+ try {
130
+ return JSON.parse(reader.readFile?.(path) ?? "");
131
+ }
132
+ catch {
133
+ return undefined;
134
+ }
135
+ }
136
+ function addEntrypointValue(entrypoints, value) {
137
+ if (typeof value === "string") {
138
+ const normalized = normalizeEntrypoint(value);
139
+ if (isSourceLikeEntrypoint(normalized)) {
140
+ entrypoints.add(normalized);
141
+ }
142
+ return;
143
+ }
144
+ if (Array.isArray(value)) {
145
+ for (const item of value) {
146
+ addEntrypointValue(entrypoints, item);
147
+ }
148
+ return;
149
+ }
150
+ if (isRecord(value)) {
151
+ for (const nested of Object.values(value)) {
152
+ addEntrypointValue(entrypoints, nested);
153
+ }
154
+ }
155
+ }
156
+ function normalizeEntrypoints(entrypoints) {
157
+ return [...new Set(entrypoints.map(normalizeEntrypoint).filter(Boolean))].sort();
158
+ }
159
+ function normalizeEntrypoint(path) {
160
+ return normalizePath(path.replace(/^\.\//, ""));
161
+ }
162
+ function normalizePath(path) {
163
+ return path.replace(/\\/g, "/");
164
+ }
165
+ function isSourceLikeEntrypoint(path) {
166
+ const extension = path.split(".").pop();
167
+ if (extension === undefined) {
168
+ return false;
169
+ }
170
+ return ["ts", "tsx", "js", "jsx", "mts", "cts", "mjs", "cjs"].includes(extension);
171
+ }
172
+ function normalizeExportKind(kind) {
173
+ return kind === "let" ? "var" : kind;
174
+ }
175
+ function normalizeNamedExport(rawName) {
176
+ const cleaned = rawName.trim();
177
+ const aliasMatch = /\s+as\s+([A-Za-z_$][\w$]*)$/u.exec(cleaned);
178
+ return aliasMatch?.[1] ?? cleaned.replace(/\s+as\s+.*/u, "").trim();
179
+ }
180
+ function normalizeSignature(signature) {
181
+ return signature.replace(/\s+/g, " ").trim();
182
+ }
183
+ function dedupeExports(exports) {
184
+ const byKey = new Map();
185
+ for (const entry of exports) {
186
+ byKey.set(`${entry.path}:${entry.name}:${entry.signature}`, entry);
187
+ }
188
+ return [...byKey.values()];
189
+ }
190
+ function compareExports(left, right) {
191
+ return (left.path.localeCompare(right.path) ||
192
+ left.name.localeCompare(right.name) ||
193
+ left.signature.localeCompare(right.signature));
194
+ }
195
+ function isApiSurfaceSnapshot(value) {
196
+ return (isRecord(value) &&
197
+ value.schemaVersion === API_SURFACE_SNAPSHOT_SCHEMA_VERSION &&
198
+ Array.isArray(value.entrypoints) &&
199
+ value.entrypoints.every((entrypoint) => typeof entrypoint === "string") &&
200
+ Array.isArray(value.exports) &&
201
+ value.exports.every(isApiSurfaceExport));
202
+ }
203
+ function isApiSurfaceExport(value) {
204
+ return (isRecord(value) &&
205
+ typeof value.path === "string" &&
206
+ typeof value.name === "string" &&
207
+ typeof value.kind === "string" &&
208
+ typeof value.signature === "string");
209
+ }
210
+ function isRecord(value) {
211
+ return typeof value === "object" && value !== null && !Array.isArray(value);
212
+ }
213
+ export function getApiSnapshotOutputPath(root, output) {
214
+ return output ?? join(root, API_SURFACE_SNAPSHOT_PATH);
215
+ }
216
+ export function getApiSnapshotOutputDirectory(path) {
217
+ return dirname(path);
218
+ }
219
+ //# sourceMappingURL=api-snapshot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-snapshot.js","sourceRoot":"","sources":["../../src/repository/api-snapshot.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,5 @@
1
+ export { API_SURFACE_SNAPSHOT_PATH, buildApiSurfaceSnapshot, extractApiSurfaceExports, findSnapshotExport, getApiSnapshotOutputDirectory, getApiSnapshotOutputPath, hasApiSnapshotEvidence, loadApiSurfaceSnapshot, summarizeApiSurfaceSnapshot, type ApiSnapshotReader, type ApiSurfaceExport, type ApiSurfaceSnapshot, type BuildApiSurfaceSnapshotOptions } from "./api-snapshot.js";
1
2
  export { buildRepositoryProfile, parseNameOnlyLog, type BuildRepositoryProfileOptions, type HistoryCommandRunner } from "./profile.js";
3
+ export { detectMonorepoContext, type MonorepoReader } from "./monorepo.js";
2
4
  export { buildUtilityIndex, extractExportedNames, type BuildUtilityIndexOptions, type UtilityIndexRunner } from "./utility-index.js";
3
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/repository/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,gBAAgB,EAChB,KAAK,6BAA6B,EAClC,KAAK,oBAAoB,EAC1B,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,KAAK,wBAAwB,EAC7B,KAAK,kBAAkB,EACxB,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/repository/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EACzB,uBAAuB,EACvB,wBAAwB,EACxB,kBAAkB,EAClB,6BAA6B,EAC7B,wBAAwB,EACxB,sBAAsB,EACtB,sBAAsB,EACtB,2BAA2B,EAC3B,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,8BAA8B,EACpC,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,sBAAsB,EACtB,gBAAgB,EAChB,KAAK,6BAA6B,EAClC,KAAK,oBAAoB,EAC1B,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,qBAAqB,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,KAAK,wBAAwB,EAC7B,KAAK,kBAAkB,EACxB,MAAM,oBAAoB,CAAC"}
@@ -1,3 +1,5 @@
1
+ export { API_SURFACE_SNAPSHOT_PATH, buildApiSurfaceSnapshot, extractApiSurfaceExports, findSnapshotExport, getApiSnapshotOutputDirectory, getApiSnapshotOutputPath, hasApiSnapshotEvidence, loadApiSurfaceSnapshot, summarizeApiSurfaceSnapshot } from "./api-snapshot.js";
1
2
  export { buildRepositoryProfile, parseNameOnlyLog } from "./profile.js";
3
+ export { detectMonorepoContext } from "./monorepo.js";
2
4
  export { buildUtilityIndex, extractExportedNames } from "./utility-index.js";
3
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/repository/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,gBAAgB,EAGjB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EAGrB,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/repository/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EACzB,uBAAuB,EACvB,wBAAwB,EACxB,kBAAkB,EAClB,6BAA6B,EAC7B,wBAAwB,EACxB,sBAAsB,EACtB,sBAAsB,EACtB,2BAA2B,EAK5B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,sBAAsB,EACtB,gBAAgB,EAGjB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,qBAAqB,EAAuB,MAAM,eAAe,CAAC;AAC3E,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EAGrB,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { DiffFile, MonorepoContext } from "../schema/index.js";
2
+ export interface MonorepoReader {
3
+ exists?: (path: string) => boolean;
4
+ readFile?: (path: string) => string;
5
+ }
6
+ export declare function detectMonorepoContext(root: string, files: DiffFile[], reader?: MonorepoReader): MonorepoContext | undefined;
7
+ //# sourceMappingURL=monorepo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monorepo.d.ts","sourceRoot":"","sources":["../../src/repository/monorepo.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAmB,MAAM,oBAAoB,CAAC;AAErF,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IACnC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CACrC;AAID,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,QAAQ,EAAE,EACjB,MAAM,GAAE,cAAmB,GAC1B,eAAe,GAAG,SAAS,CAmE7B"}
@@ -0,0 +1,189 @@
1
+ import { join } from "node:path";
2
+ export function detectMonorepoContext(root, files, reader = {}) {
3
+ const workspaceGlobs = [];
4
+ const tools = new Set();
5
+ const configFiles = [];
6
+ const typescriptPathAliases = [];
7
+ const rootPackage = readJsonFile(root, "package.json", reader);
8
+ const packageWorkspaceGlobs = getPackageJsonWorkspaces(rootPackage);
9
+ if (packageWorkspaceGlobs.length > 0) {
10
+ workspaceGlobs.push(...packageWorkspaceGlobs);
11
+ }
12
+ const pnpmWorkspace = readTextFile(root, "pnpm-workspace.yaml", reader);
13
+ if (pnpmWorkspace !== undefined) {
14
+ tools.add("pnpm");
15
+ configFiles.push("pnpm-workspace.yaml");
16
+ workspaceGlobs.push(...parsePnpmWorkspacePackages(pnpmWorkspace));
17
+ }
18
+ const turboJson = readJsonFile(root, "turbo.json", reader);
19
+ if (turboJson !== undefined) {
20
+ tools.add("turbo");
21
+ configFiles.push("turbo.json");
22
+ }
23
+ const nxJson = readJsonFile(root, "nx.json", reader);
24
+ if (nxJson !== undefined) {
25
+ tools.add("nx");
26
+ configFiles.push("nx.json");
27
+ workspaceGlobs.push(...getNxWorkspaceGlobs(nxJson));
28
+ }
29
+ const lernaJson = readJsonFile(root, "lerna.json", reader);
30
+ if (lernaJson !== undefined) {
31
+ tools.add("lerna");
32
+ configFiles.push("lerna.json");
33
+ workspaceGlobs.push(...getStringArrayProperty(lernaJson, "packages"));
34
+ }
35
+ const tsconfigJson = readJsonFile(root, "tsconfig.json", reader);
36
+ const pathAliases = getTypeScriptPathAliases(tsconfigJson);
37
+ if (pathAliases.length > 0) {
38
+ configFiles.push("tsconfig.json");
39
+ typescriptPathAliases.push(...pathAliases);
40
+ }
41
+ const uniqueGlobs = [...new Set(workspaceGlobs)].filter((glob) => glob.length > 0);
42
+ const packages = inferChangedPackages(root, files, uniqueGlobs, reader);
43
+ if (uniqueGlobs.length === 0 &&
44
+ tools.size === 0 &&
45
+ packages.length === 0 &&
46
+ typescriptPathAliases.length === 0) {
47
+ return undefined;
48
+ }
49
+ return {
50
+ tools: [...tools].sort(),
51
+ configFiles: [...new Set(configFiles)],
52
+ workspaceGlobs: uniqueGlobs,
53
+ typescriptPathAliases: typescriptPathAliases.length === 0 ? undefined : [...new Set(typescriptPathAliases)].sort(),
54
+ packages
55
+ };
56
+ }
57
+ function inferChangedPackages(root, files, workspaceGlobs, reader) {
58
+ const packageRoots = new Set();
59
+ for (const file of files) {
60
+ for (const glob of workspaceGlobs) {
61
+ const packageRoot = getPackageRootForGlob(file.path, glob);
62
+ if (packageRoot !== undefined) {
63
+ packageRoots.add(packageRoot);
64
+ }
65
+ }
66
+ }
67
+ return [...packageRoots].sort().map((path) => ({
68
+ path,
69
+ name: getPackageName(root, path, reader)
70
+ }));
71
+ }
72
+ function getPackageRootForGlob(path, glob) {
73
+ const normalizedPath = normalizePath(path);
74
+ const normalizedGlob = normalizePath(glob);
75
+ const wildcardIndex = normalizedGlob.indexOf("*");
76
+ if (wildcardIndex === -1) {
77
+ return normalizedPath === normalizedGlob || normalizedPath.startsWith(`${normalizedGlob}/`)
78
+ ? normalizedGlob
79
+ : undefined;
80
+ }
81
+ const prefix = normalizedGlob.slice(0, wildcardIndex).replace(/\/$/, "");
82
+ const suffix = normalizedGlob.slice(wildcardIndex + 1).replace(/^\//, "");
83
+ if (!normalizedPath.startsWith(`${prefix}/`)) {
84
+ return undefined;
85
+ }
86
+ const rest = normalizedPath.slice(prefix.length + 1);
87
+ const [packageSegment] = rest.split("/");
88
+ if (packageSegment === undefined || packageSegment.length === 0) {
89
+ return undefined;
90
+ }
91
+ const packageRoot = `${prefix}/${packageSegment}`;
92
+ if (suffix.length > 0 && !normalizedPath.startsWith(`${packageRoot}/${suffix}`)) {
93
+ return undefined;
94
+ }
95
+ return packageRoot;
96
+ }
97
+ function getPackageName(root, packageRoot, reader) {
98
+ const packageJson = readJsonFile(root, `${packageRoot}/package.json`, reader);
99
+ if (isRecord(packageJson) && typeof packageJson.name === "string") {
100
+ return packageJson.name;
101
+ }
102
+ return undefined;
103
+ }
104
+ function getPackageJsonWorkspaces(value) {
105
+ if (!isRecord(value)) {
106
+ return [];
107
+ }
108
+ if (Array.isArray(value.workspaces)) {
109
+ return value.workspaces.filter((entry) => typeof entry === "string");
110
+ }
111
+ if (isRecord(value.workspaces) && Array.isArray(value.workspaces.packages)) {
112
+ return value.workspaces.packages.filter((entry) => typeof entry === "string");
113
+ }
114
+ return [];
115
+ }
116
+ function getNxWorkspaceGlobs(value) {
117
+ if (!isRecord(value) || !isRecord(value.workspaceLayout)) {
118
+ return ["apps/*", "libs/*"];
119
+ }
120
+ const appsDir = typeof value.workspaceLayout.appsDir === "string" ? value.workspaceLayout.appsDir : "apps";
121
+ const libsDir = typeof value.workspaceLayout.libsDir === "string" ? value.workspaceLayout.libsDir : "libs";
122
+ return [`${appsDir}/*`, `${libsDir}/*`];
123
+ }
124
+ function getStringArrayProperty(value, key) {
125
+ if (!isRecord(value) || !Array.isArray(value[key])) {
126
+ return [];
127
+ }
128
+ return value[key].filter((entry) => typeof entry === "string");
129
+ }
130
+ function getTypeScriptPathAliases(value) {
131
+ if (!isRecord(value) ||
132
+ !isRecord(value.compilerOptions) ||
133
+ !isRecord(value.compilerOptions.paths)) {
134
+ return [];
135
+ }
136
+ return Object.keys(value.compilerOptions.paths).sort();
137
+ }
138
+ function parsePnpmWorkspacePackages(content) {
139
+ const lines = content.split(/\r?\n/);
140
+ const packages = [];
141
+ let inPackages = false;
142
+ for (const rawLine of lines) {
143
+ const line = rawLine.trim();
144
+ if (line.length === 0 || line.startsWith("#")) {
145
+ continue;
146
+ }
147
+ if (/^packages\s*:/.test(line)) {
148
+ inPackages = true;
149
+ continue;
150
+ }
151
+ if (inPackages && line.startsWith("-")) {
152
+ packages.push(line
153
+ .slice(1)
154
+ .trim()
155
+ .replace(/^["']|["']$/g, ""));
156
+ continue;
157
+ }
158
+ if (!rawLine.startsWith(" ") && !rawLine.startsWith("\t")) {
159
+ inPackages = false;
160
+ }
161
+ }
162
+ return packages;
163
+ }
164
+ function readJsonFile(root, relativePath, reader) {
165
+ const content = readTextFile(root, relativePath, reader);
166
+ if (content === undefined) {
167
+ return undefined;
168
+ }
169
+ try {
170
+ return JSON.parse(content);
171
+ }
172
+ catch {
173
+ return undefined;
174
+ }
175
+ }
176
+ function readTextFile(root, relativePath, reader) {
177
+ const path = join(root, relativePath);
178
+ if (reader.exists?.(path) !== true) {
179
+ return undefined;
180
+ }
181
+ return reader.readFile?.(path);
182
+ }
183
+ function normalizePath(value) {
184
+ return value.replaceAll("\\", "/").replace(/^\.\//, "").replace(/\/$/, "");
185
+ }
186
+ function isRecord(value) {
187
+ return typeof value === "object" && value !== null && !Array.isArray(value);
188
+ }
189
+ //# sourceMappingURL=monorepo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monorepo.js","sourceRoot":"","sources":["../../src/repository/monorepo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAWjC,MAAM,UAAU,qBAAqB,CACnC,IAAY,EACZ,KAAiB,EACjB,SAAyB,EAAE;IAE3B,MAAM,cAAc,GAAa,EAAE,CAAC;IACpC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAgB,CAAC;IACtC,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,MAAM,qBAAqB,GAAa,EAAE,CAAC;IAE3C,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC;IAC/D,MAAM,qBAAqB,GAAG,wBAAwB,CAAC,WAAW,CAAC,CAAC;IAEpE,IAAI,qBAAqB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrC,cAAc,CAAC,IAAI,CAAC,GAAG,qBAAqB,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,aAAa,GAAG,YAAY,CAAC,IAAI,EAAE,qBAAqB,EAAE,MAAM,CAAC,CAAC;IACxE,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;QAChC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAClB,WAAW,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACxC,cAAc,CAAC,IAAI,CAAC,GAAG,0BAA0B,CAAC,aAAa,CAAC,CAAC,CAAC;IACpE,CAAC;IAED,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;IAC3D,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACnB,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACjC,CAAC;IAED,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IACrD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAChB,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC5B,cAAc,CAAC,IAAI,CAAC,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;IAC3D,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACnB,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC/B,cAAc,CAAC,IAAI,CAAC,GAAG,sBAAsB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;IACxE,CAAC;IAED,MAAM,YAAY,GAAG,YAAY,CAAC,IAAI,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC;IACjE,MAAM,WAAW,GAAG,wBAAwB,CAAC,YAAY,CAAC,CAAC;IAC3D,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAClC,qBAAqB,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,WAAW,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACnF,MAAM,QAAQ,GAAG,oBAAoB,CAAC,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;IAExE,IACE,WAAW,CAAC,MAAM,KAAK,CAAC;QACxB,KAAK,CAAC,IAAI,KAAK,CAAC;QAChB,QAAQ,CAAC,MAAM,KAAK,CAAC;QACrB,qBAAqB,CAAC,MAAM,KAAK,CAAC,EAClC,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO;QACL,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,EAAE;QACxB,WAAW,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC;QACtC,cAAc,EAAE,WAAW;QAC3B,qBAAqB,EACnB,qBAAqB,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC,IAAI,EAAE;QAC7F,QAAQ;KACT,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAC3B,IAAY,EACZ,KAAiB,EACjB,cAAwB,EACxB,MAAsB;IAEtB,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IAEvC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;YAClC,MAAM,WAAW,GAAG,qBAAqB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAE3D,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;gBAC9B,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC7C,IAAI;QACJ,IAAI,EAAE,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC;KACzC,CAAC,CAAC,CAAC;AACN,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAY,EAAE,IAAY;IACvD,MAAM,cAAc,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,cAAc,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,aAAa,GAAG,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAElD,IAAI,aAAa,KAAK,CAAC,CAAC,EAAE,CAAC;QACzB,OAAO,cAAc,KAAK,cAAc,IAAI,cAAc,CAAC,UAAU,CAAC,GAAG,cAAc,GAAG,CAAC;YACzF,CAAC,CAAC,cAAc;YAChB,CAAC,CAAC,SAAS,CAAC;IAChB,CAAC;IAED,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACzE,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAE1E,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7C,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACrD,MAAM,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAEzC,IAAI,cAAc,KAAK,SAAS,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChE,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,WAAW,GAAG,GAAG,MAAM,IAAI,cAAc,EAAE,CAAC;IAElD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,GAAG,WAAW,IAAI,MAAM,EAAE,CAAC,EAAE,CAAC;QAChF,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,SAAS,cAAc,CACrB,IAAY,EACZ,WAAmB,EACnB,MAAsB;IAEtB,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,EAAE,GAAG,WAAW,eAAe,EAAE,MAAM,CAAC,CAAC;IAE9E,IAAI,QAAQ,CAAC,WAAW,CAAC,IAAI,OAAO,WAAW,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAClE,OAAO,WAAW,CAAC,IAAI,CAAC;IAC1B,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,wBAAwB,CAAC,KAAc;IAC9C,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;QACpC,OAAO,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC;IACxF,CAAC;IAED,IAAI,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3E,OAAO,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC;IACjG,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAc;IACzC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC;QACzD,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAED,MAAM,OAAO,GACX,OAAO,KAAK,CAAC,eAAe,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;IAC7F,MAAM,OAAO,GACX,OAAO,KAAK,CAAC,eAAe,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;IAE7F,OAAO,CAAC,GAAG,OAAO,IAAI,EAAE,GAAG,OAAO,IAAI,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAc,EAAE,GAAW;IACzD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QACnD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC;AAClF,CAAC;AAED,SAAS,wBAAwB,CAAC,KAAc;IAC9C,IACE,CAAC,QAAQ,CAAC,KAAK,CAAC;QAChB,CAAC,QAAQ,CAAC,KAAK,CAAC,eAAe,CAAC;QAChC,CAAC,QAAQ,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,EACtC,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;AACzD,CAAC;AAED,SAAS,0BAA0B,CAAC,OAAe;IACjD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,UAAU,GAAG,KAAK,CAAC;IAEvB,KAAK,MAAM,OAAO,IAAI,KAAK,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAE5B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9C,SAAS;QACX,CAAC;QAED,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,UAAU,GAAG,IAAI,CAAC;YAClB,SAAS;QACX,CAAC;QAED,IAAI,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACvC,QAAQ,CAAC,IAAI,CACX,IAAI;iBACD,KAAK,CAAC,CAAC,CAAC;iBACR,IAAI,EAAE;iBACN,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAC/B,CAAC;YACF,SAAS;QACX,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1D,UAAU,GAAG,KAAK,CAAC;QACrB,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,YAAY,CAAC,IAAY,EAAE,YAAoB,EAAE,MAAsB;IAC9E,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;IAEzD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAY,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CACnB,IAAY,EACZ,YAAoB,EACpB,MAAsB;IAEtB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAEtC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QACnC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,aAAa,CAAC,KAAa;IAClC,OAAO,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAC7E,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC"}