specweave 1.0.15 → 1.0.16
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/dist/src/cli/helpers/init/external-import.d.ts.map +1 -1
- package/dist/src/cli/helpers/init/external-import.js +108 -0
- package/dist/src/cli/helpers/init/external-import.js.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/github-multi-repo.d.ts +1 -1
- package/dist/src/cli/helpers/issue-tracker/github-multi-repo.d.ts.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/github-multi-repo.js +3 -12
- package/dist/src/cli/helpers/issue-tracker/github-multi-repo.js.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/github.d.ts +2 -5
- package/dist/src/cli/helpers/issue-tracker/github.d.ts.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/github.js +9 -81
- package/dist/src/cli/helpers/issue-tracker/github.js.map +1 -1
- package/dist/src/core/repo-structure/multi-repo-configurator.d.ts +4 -3
- package/dist/src/core/repo-structure/multi-repo-configurator.d.ts.map +1 -1
- package/dist/src/core/repo-structure/multi-repo-configurator.js +103 -434
- package/dist/src/core/repo-structure/multi-repo-configurator.js.map +1 -1
- package/dist/src/core/repo-structure/prompt-consolidator.d.ts +1 -1
- package/dist/src/core/repo-structure/prompt-consolidator.d.ts.map +1 -1
- package/dist/src/core/repo-structure/prompt-consolidator.js +14 -18
- package/dist/src/core/repo-structure/prompt-consolidator.js.map +1 -1
- package/dist/src/core/repo-structure/repo-structure-manager.d.ts +6 -2
- package/dist/src/core/repo-structure/repo-structure-manager.d.ts.map +1 -1
- package/dist/src/core/repo-structure/repo-structure-manager.js +13 -39
- package/dist/src/core/repo-structure/repo-structure-manager.js.map +1 -1
- package/dist/src/core/repo-structure/setup-state-manager.d.ts +4 -0
- package/dist/src/core/repo-structure/setup-state-manager.d.ts.map +1 -1
- package/dist/src/core/repo-structure/setup-state-manager.js.map +1 -1
- package/package.json +1 -1
- package/dist/src/cli/commands/validate-parent-repo.d.ts +0 -8
- package/dist/src/cli/commands/validate-parent-repo.d.ts.map +0 -1
- package/dist/src/cli/commands/validate-parent-repo.js +0 -15
- package/dist/src/cli/commands/validate-parent-repo.js.map +0 -1
- package/dist/src/core/cicd/parent-repo-validator.d.ts +0 -42
- package/dist/src/core/cicd/parent-repo-validator.d.ts.map +0 -1
- package/dist/src/core/cicd/parent-repo-validator.js +0 -201
- package/dist/src/core/cicd/parent-repo-validator.js.map +0 -1
|
@@ -1,201 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Parent Repository Validation Utility
|
|
3
|
-
*
|
|
4
|
-
* Validates consistency of parent repo naming across:
|
|
5
|
-
* - .specweave/config.json (source of truth)
|
|
6
|
-
* - Git remote (origin)
|
|
7
|
-
* - .env file (if exists)
|
|
8
|
-
*
|
|
9
|
-
* Prevents the common mistake of creating duplicate parent repos
|
|
10
|
-
* when using multi-project mode with -shared flag.
|
|
11
|
-
*/
|
|
12
|
-
import * as fs from '../../utils/fs-native.js';
|
|
13
|
-
import * as path from 'path';
|
|
14
|
-
import { execSync } from 'child_process';
|
|
15
|
-
import chalk from 'chalk';
|
|
16
|
-
/**
|
|
17
|
-
* Extract parent repo name from config.json
|
|
18
|
-
*/
|
|
19
|
-
function getConfigParentRepoName(projectRoot) {
|
|
20
|
-
const configPath = path.join(projectRoot, '.specweave', 'config.json');
|
|
21
|
-
if (!fs.existsSync(configPath)) {
|
|
22
|
-
return null;
|
|
23
|
-
}
|
|
24
|
-
try {
|
|
25
|
-
const config = fs.readJsonSync(configPath);
|
|
26
|
-
return config.multiProject?.parentRepoName || null;
|
|
27
|
-
}
|
|
28
|
-
catch (error) {
|
|
29
|
-
console.error(chalk.yellow('⚠️ Failed to parse config.json:'), error);
|
|
30
|
-
return null;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Extract parent repo name from git remote origin
|
|
35
|
-
*/
|
|
36
|
-
function getGitRemoteRepoName(projectRoot) {
|
|
37
|
-
try {
|
|
38
|
-
const remoteUrl = execSync('git remote get-url origin', {
|
|
39
|
-
cwd: projectRoot,
|
|
40
|
-
encoding: 'utf-8',
|
|
41
|
-
stdio: ['pipe', 'pipe', 'ignore'] // Suppress stderr
|
|
42
|
-
}).trim();
|
|
43
|
-
// Extract repo name from URL
|
|
44
|
-
// Examples:
|
|
45
|
-
// - https://github.com/owner/repo.git → repo
|
|
46
|
-
// - git@github.com:owner/repo.git → repo
|
|
47
|
-
const match = remoteUrl.match(/\/([^\/]+?)(\.git)?$/);
|
|
48
|
-
return match ? match[1].replace('.git', '') : null;
|
|
49
|
-
}
|
|
50
|
-
catch (error) {
|
|
51
|
-
// Git remote doesn't exist or not a git repo
|
|
52
|
-
return null;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Extract parent repo name from .env file
|
|
57
|
-
*/
|
|
58
|
-
function getEnvParentRepoName(projectRoot) {
|
|
59
|
-
const envPath = path.join(projectRoot, '.env');
|
|
60
|
-
if (!fs.existsSync(envPath)) {
|
|
61
|
-
return null;
|
|
62
|
-
}
|
|
63
|
-
try {
|
|
64
|
-
const envContent = fs.readFileSync(envPath, 'utf-8');
|
|
65
|
-
const match = envContent.match(/^PARENT_REPO_NAME=(.*)$/m);
|
|
66
|
-
if (!match) {
|
|
67
|
-
return null;
|
|
68
|
-
}
|
|
69
|
-
// Format: shared:repo-name or repo-name
|
|
70
|
-
const value = match[1].trim();
|
|
71
|
-
const parts = value.split(':');
|
|
72
|
-
return parts.length === 2 ? parts[1] : value;
|
|
73
|
-
}
|
|
74
|
-
catch (error) {
|
|
75
|
-
console.error(chalk.yellow('⚠️ Failed to read .env:'), error);
|
|
76
|
-
return null;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
/**
|
|
80
|
-
* Get all parent repo names from different sources
|
|
81
|
-
*/
|
|
82
|
-
export function checkParentRepoSetup(projectRoot) {
|
|
83
|
-
return {
|
|
84
|
-
configParentName: getConfigParentRepoName(projectRoot),
|
|
85
|
-
gitRemoteName: getGitRemoteRepoName(projectRoot),
|
|
86
|
-
envParentName: getEnvParentRepoName(projectRoot)
|
|
87
|
-
};
|
|
88
|
-
}
|
|
89
|
-
/**
|
|
90
|
-
* Validate parent repo setup consistency
|
|
91
|
-
*/
|
|
92
|
-
export function validateParentRepoSetup(projectRoot) {
|
|
93
|
-
const result = {
|
|
94
|
-
valid: true,
|
|
95
|
-
errors: [],
|
|
96
|
-
warnings: []
|
|
97
|
-
};
|
|
98
|
-
// Get all names
|
|
99
|
-
const check = checkParentRepoSetup(projectRoot);
|
|
100
|
-
result.configName = check.configParentName || undefined;
|
|
101
|
-
result.gitRemoteName = check.gitRemoteName || undefined;
|
|
102
|
-
result.envName = check.envParentName || undefined;
|
|
103
|
-
// Check 1: Config has parent repo name (if multi-project enabled)
|
|
104
|
-
const configPath = path.join(projectRoot, '.specweave', 'config.json');
|
|
105
|
-
if (fs.existsSync(configPath)) {
|
|
106
|
-
const config = fs.readJsonSync(configPath);
|
|
107
|
-
const multiProjectEnabled = config.multiProject?.enabled === true;
|
|
108
|
-
if (multiProjectEnabled && !check.configParentName) {
|
|
109
|
-
result.valid = false;
|
|
110
|
-
result.errors.push('❌ Multi-project enabled but parentRepoName not set in config.json');
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
// Check 2: Git remote matches config (if both exist)
|
|
114
|
-
if (check.configParentName && check.gitRemoteName) {
|
|
115
|
-
if (check.configParentName !== check.gitRemoteName) {
|
|
116
|
-
result.valid = false;
|
|
117
|
-
result.errors.push('❌ Git remote mismatch!', ` Config expects: ${check.configParentName}`, ` Git remote has: ${check.gitRemoteName}`, '', ' Fix with:', ` git remote set-url origin https://github.com/OWNER/${check.configParentName}.git`);
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
// Check 3: .env matches config (if both exist)
|
|
121
|
-
if (check.configParentName && check.envParentName) {
|
|
122
|
-
if (check.configParentName !== check.envParentName) {
|
|
123
|
-
result.warnings.push('⚠️ .env mismatch (will be ignored):', ` Config: ${check.configParentName}`, ` .env: ${check.envParentName}`, '', ' Update .env to match config.json');
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
// Check 4: -shared suffix consistency
|
|
127
|
-
if (check.configParentName && check.configParentName.endsWith('-shared')) {
|
|
128
|
-
// Config has -shared, check git and env also have it
|
|
129
|
-
if (check.gitRemoteName && !check.gitRemoteName.endsWith('-shared')) {
|
|
130
|
-
result.valid = false;
|
|
131
|
-
result.errors.push('❌ Config has -shared suffix, but git remote doesn\'t', '', ` Config: ${check.configParentName} (has -shared)`, ` Git: ${check.gitRemoteName} (missing -shared)`, '');
|
|
132
|
-
}
|
|
133
|
-
if (check.envParentName && !check.envParentName.endsWith('-shared')) {
|
|
134
|
-
result.warnings.push('⚠️ Config has -shared suffix, but .env doesn\'t', '', ` Config: ${check.configParentName} (has -shared)`, ` .env: ${check.envParentName} (missing -shared)`, '');
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
return result;
|
|
138
|
-
}
|
|
139
|
-
/**
|
|
140
|
-
* Print validation result to console
|
|
141
|
-
*/
|
|
142
|
-
export function printValidationResult(result) {
|
|
143
|
-
console.log('\n🔍 Validating Parent Repo Setup...\n');
|
|
144
|
-
// Show current setup
|
|
145
|
-
console.log('📋 Current Setup:\n');
|
|
146
|
-
console.log(` Config (parentRepoName): ${result.configName || chalk.gray('<not set>')}`);
|
|
147
|
-
console.log(` Git Remote (origin): ${result.gitRemoteName || chalk.gray('<not set>')}`);
|
|
148
|
-
console.log(` .env (PARENT_REPO_NAME): ${result.envName || chalk.gray('<not set>')}`);
|
|
149
|
-
console.log('');
|
|
150
|
-
// Show errors
|
|
151
|
-
if (result.errors.length > 0) {
|
|
152
|
-
result.errors.forEach(error => {
|
|
153
|
-
console.log(chalk.red(error));
|
|
154
|
-
});
|
|
155
|
-
console.log('');
|
|
156
|
-
}
|
|
157
|
-
// Show warnings
|
|
158
|
-
if (result.warnings.length > 0) {
|
|
159
|
-
result.warnings.forEach(warning => {
|
|
160
|
-
console.log(chalk.yellow(warning));
|
|
161
|
-
});
|
|
162
|
-
console.log('');
|
|
163
|
-
}
|
|
164
|
-
// Summary
|
|
165
|
-
console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
|
|
166
|
-
if (result.valid && result.warnings.length === 0) {
|
|
167
|
-
console.log(chalk.green('✅ All checks passed!'));
|
|
168
|
-
console.log('\nYour parent repo setup is consistent across:');
|
|
169
|
-
console.log(' ✓ .specweave/config.json');
|
|
170
|
-
console.log(' ✓ git remote (origin)');
|
|
171
|
-
if (result.envName) {
|
|
172
|
-
console.log(' ✓ .env');
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
else {
|
|
176
|
-
if (!result.valid) {
|
|
177
|
-
console.log(chalk.red(`❌ Validation failed with ${result.errors.length} error(s)`));
|
|
178
|
-
}
|
|
179
|
-
if (result.warnings.length > 0) {
|
|
180
|
-
console.log(chalk.yellow(`⚠️ Found ${result.warnings.length} warning(s)`));
|
|
181
|
-
}
|
|
182
|
-
console.log('\nPlease fix the issues above before syncing to GitHub.');
|
|
183
|
-
}
|
|
184
|
-
console.log('');
|
|
185
|
-
}
|
|
186
|
-
/**
|
|
187
|
-
* Validate and exit with error code if validation fails
|
|
188
|
-
* Use this in CLI commands that require valid parent repo setup
|
|
189
|
-
*/
|
|
190
|
-
export function validateOrExit(projectRoot) {
|
|
191
|
-
const result = validateParentRepoSetup(projectRoot);
|
|
192
|
-
printValidationResult(result);
|
|
193
|
-
if (!result.valid) {
|
|
194
|
-
process.exit(1);
|
|
195
|
-
}
|
|
196
|
-
// Show warnings but don't exit
|
|
197
|
-
if (result.warnings.length > 0) {
|
|
198
|
-
console.log(chalk.yellow('⚠️ Warnings detected but continuing...\n'));
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
//# sourceMappingURL=parent-repo-validator.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parent-repo-validator.js","sourceRoot":"","sources":["../../../../src/core/cicd/parent-repo-validator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAC/C,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,KAAK,MAAM,OAAO,CAAC;AAiB1B;;GAEG;AACH,SAAS,uBAAuB,CAAC,WAAmB;IAClD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC;IAEvE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QAC3C,OAAO,MAAM,CAAC,YAAY,EAAE,cAAc,IAAI,IAAI,CAAC;IACrD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,kCAAkC,CAAC,EAAE,KAAK,CAAC,CAAC;QACvE,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,oBAAoB,CAAC,WAAmB;IAC/C,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,QAAQ,CAAC,2BAA2B,EAAE;YACtD,GAAG,EAAE,WAAW;YAChB,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,kBAAkB;SACrD,CAAC,CAAC,IAAI,EAAE,CAAC;QAEV,6BAA6B;QAC7B,YAAY;QACZ,6CAA6C;QAC7C,yCAAyC;QACzC,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;QACtD,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACrD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,6CAA6C;QAC7C,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,oBAAoB,CAAC,WAAmB;IAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAE/C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACrD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAE3D,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,IAAI,CAAC;QACd,CAAC;QAED,wCAAwC;QACxC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC/C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,0BAA0B,CAAC,EAAE,KAAK,CAAC,CAAC;QAC/D,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,WAAmB;IACtD,OAAO;QACL,gBAAgB,EAAE,uBAAuB,CAAC,WAAW,CAAC;QACtD,aAAa,EAAE,oBAAoB,CAAC,WAAW,CAAC;QAChD,aAAa,EAAE,oBAAoB,CAAC,WAAW,CAAC;KACjD,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,WAAmB;IACzD,MAAM,MAAM,GAAqB;QAC/B,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE,EAAE;KACb,CAAC;IAEF,gBAAgB;IAChB,MAAM,KAAK,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;IAChD,MAAM,CAAC,UAAU,GAAG,KAAK,CAAC,gBAAgB,IAAI,SAAS,CAAC;IACxD,MAAM,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,IAAI,SAAS,CAAC;IACxD,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,aAAa,IAAI,SAAS,CAAC;IAElD,kEAAkE;IAClE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC;IACvE,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QAC3C,MAAM,mBAAmB,GAAG,MAAM,CAAC,YAAY,EAAE,OAAO,KAAK,IAAI,CAAC;QAElE,IAAI,mBAAmB,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC;YACnD,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;YACrB,MAAM,CAAC,MAAM,CAAC,IAAI,CAChB,mEAAmE,CACpE,CAAC;QACJ,CAAC;IACH,CAAC;IAED,qDAAqD;IACrD,IAAI,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;QAClD,IAAI,KAAK,CAAC,gBAAgB,KAAK,KAAK,CAAC,aAAa,EAAE,CAAC;YACnD,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;YACrB,MAAM,CAAC,MAAM,CAAC,IAAI,CAChB,wBAAwB,EACxB,sBAAsB,KAAK,CAAC,gBAAgB,EAAE,EAC9C,sBAAsB,KAAK,CAAC,aAAa,EAAE,EAC3C,EAAE,EACF,cAAc,EACd,yDAAyD,KAAK,CAAC,gBAAgB,MAAM,CACtF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,+CAA+C;IAC/C,IAAI,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;QAClD,IAAI,KAAK,CAAC,gBAAgB,KAAK,KAAK,CAAC,aAAa,EAAE,CAAC;YACnD,MAAM,CAAC,QAAQ,CAAC,IAAI,CAClB,sCAAsC,EACtC,cAAc,KAAK,CAAC,gBAAgB,EAAE,EACtC,cAAc,KAAK,CAAC,aAAa,EAAE,EACnC,EAAE,EACF,qCAAqC,CACtC,CAAC;QACJ,CAAC;IACH,CAAC;IAED,sCAAsC;IACtC,IAAI,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,gBAAgB,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACzE,qDAAqD;QACrD,IAAI,KAAK,CAAC,aAAa,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YACpE,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;YACrB,MAAM,CAAC,MAAM,CAAC,IAAI,CAChB,sDAAsD,EACtD,EAAE,EACF,cAAc,KAAK,CAAC,gBAAgB,gBAAgB,EACpD,cAAc,KAAK,CAAC,aAAa,oBAAoB,EACrD,EAAE,CACH,CAAC;QACJ,CAAC;QAED,IAAI,KAAK,CAAC,aAAa,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YACpE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAClB,kDAAkD,EAClD,EAAE,EACF,cAAc,KAAK,CAAC,gBAAgB,gBAAgB,EACpD,cAAc,KAAK,CAAC,aAAa,oBAAoB,EACrD,EAAE,CACH,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAwB;IAC5D,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;IAEtD,qBAAqB;IACrB,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,gCAAgC,MAAM,CAAC,UAAU,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IAC5F,OAAO,CAAC,GAAG,CAAC,gCAAgC,MAAM,CAAC,aAAa,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IAC/F,OAAO,CAAC,GAAG,CAAC,gCAAgC,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACzF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,cAAc;IACd,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAED,gBAAgB;IAChB,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YAChC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAED,UAAU;IACV,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;IAExD,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;QAC9D,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;QACvC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,4BAA4B,MAAM,CAAC,MAAM,CAAC,MAAM,WAAW,CAAC,CAAC,CAAC;QACtF,CAAC;QACD,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,MAAM,CAAC,QAAQ,CAAC,MAAM,aAAa,CAAC,CAAC,CAAC;QAC9E,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,WAAmB;IAChD,MAAM,MAAM,GAAG,uBAAuB,CAAC,WAAW,CAAC,CAAC;IACpD,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAE9B,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAClB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,+BAA+B;IAC/B,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,2CAA2C,CAAC,CAAC,CAAC;IACzE,CAAC;AACH,CAAC"}
|