@thanhvn14/csvibe 0.1.0 → 0.1.2
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/.csvibe/state/approaches.json +1 -0
- package/README.md +142 -3
- package/dist/commands/brainstorm.d.ts +16 -0
- package/dist/commands/brainstorm.d.ts.map +1 -0
- package/dist/commands/brainstorm.js +186 -0
- package/dist/commands/brainstorm.js.map +1 -0
- package/dist/commands/doctor.d.ts +9 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +72 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/help.d.ts.map +1 -1
- package/dist/commands/help.js +13 -7
- package/dist/commands/help.js.map +1 -1
- package/dist/commands/index.d.ts +3 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +7 -1
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/init/index.d.ts +7 -0
- package/dist/commands/init/index.d.ts.map +1 -0
- package/dist/commands/init/index.js +10 -0
- package/dist/commands/init/index.js.map +1 -0
- package/dist/commands/init/init-command.d.ts +10 -0
- package/dist/commands/init/init-command.d.ts.map +1 -0
- package/dist/commands/init/init-command.js +75 -0
- package/dist/commands/init/init-command.js.map +1 -0
- package/dist/commands/init/phases/config-handler.d.ts +10 -0
- package/dist/commands/init/phases/config-handler.d.ts.map +1 -0
- package/dist/commands/init/phases/config-handler.js +21 -0
- package/dist/commands/init/phases/config-handler.js.map +1 -0
- package/dist/commands/init/phases/detection-handler.d.ts +10 -0
- package/dist/commands/init/phases/detection-handler.d.ts.map +1 -0
- package/dist/commands/init/phases/detection-handler.js +80 -0
- package/dist/commands/init/phases/detection-handler.js.map +1 -0
- package/dist/commands/init/phases/download-handler.d.ts +9 -0
- package/dist/commands/init/phases/download-handler.d.ts.map +1 -0
- package/dist/commands/init/phases/download-handler.js +16 -0
- package/dist/commands/init/phases/download-handler.js.map +1 -0
- package/dist/commands/init/phases/prompt-handler.d.ts +10 -0
- package/dist/commands/init/phases/prompt-handler.d.ts.map +1 -0
- package/dist/commands/init/phases/prompt-handler.js +24 -0
- package/dist/commands/init/phases/prompt-handler.js.map +1 -0
- package/dist/commands/init/phases/scaffold-handler.d.ts +9 -0
- package/dist/commands/init/phases/scaffold-handler.d.ts.map +1 -0
- package/dist/commands/init/phases/scaffold-handler.js +18 -0
- package/dist/commands/init/phases/scaffold-handler.js.map +1 -0
- package/dist/commands/init/phases/validation-handler.d.ts +14 -0
- package/dist/commands/init/phases/validation-handler.d.ts.map +1 -0
- package/dist/commands/init/phases/validation-handler.js +50 -0
- package/dist/commands/init/phases/validation-handler.js.map +1 -0
- package/dist/commands/init/phases/vscode-handler.d.ts +9 -0
- package/dist/commands/init/phases/vscode-handler.d.ts.map +1 -0
- package/dist/commands/init/phases/vscode-handler.js +16 -0
- package/dist/commands/init/phases/vscode-handler.js.map +1 -0
- package/dist/commands/init/types.d.ts +28 -0
- package/dist/commands/init/types.d.ts.map +1 -0
- package/dist/commands/init/types.js +6 -0
- package/dist/commands/init/types.js.map +1 -0
- package/dist/commands/scout.d.ts +30 -0
- package/dist/commands/scout.d.ts.map +1 -0
- package/dist/commands/scout.js +116 -0
- package/dist/commands/scout.js.map +1 -0
- package/dist/config/constants.d.ts +3 -3
- package/dist/config/constants.js +3 -3
- package/dist/config/constants.js.map +1 -1
- package/dist/domains/config/generator.d.ts +17 -0
- package/dist/domains/config/generator.d.ts.map +1 -0
- package/dist/domains/config/generator.js +67 -0
- package/dist/domains/config/generator.js.map +1 -0
- package/dist/domains/config/index.d.ts +8 -0
- package/dist/domains/config/index.d.ts.map +1 -0
- package/dist/domains/config/index.js +15 -0
- package/dist/domains/config/index.js.map +1 -0
- package/dist/domains/config/types.d.ts +39 -0
- package/dist/domains/config/types.d.ts.map +1 -0
- package/dist/domains/config/types.js +6 -0
- package/dist/domains/config/types.js.map +1 -0
- package/dist/domains/config/validator.d.ts +17 -0
- package/dist/domains/config/validator.d.ts.map +1 -0
- package/dist/domains/config/validator.js +54 -0
- package/dist/domains/config/validator.js.map +1 -0
- package/dist/domains/github/auth-api.d.ts +19 -0
- package/dist/domains/github/auth-api.d.ts.map +1 -0
- package/dist/domains/github/auth-api.js +196 -0
- package/dist/domains/github/auth-api.js.map +1 -0
- package/dist/domains/github/github-client.d.ts +323 -0
- package/dist/domains/github/github-client.d.ts.map +1 -0
- package/dist/domains/github/github-client.js +192 -0
- package/dist/domains/github/github-client.js.map +1 -0
- package/dist/domains/github/index.d.ts +9 -0
- package/dist/domains/github/index.d.ts.map +1 -0
- package/dist/domains/github/index.js +23 -0
- package/dist/domains/github/index.js.map +1 -0
- package/dist/domains/github/keychain.d.ts +19 -0
- package/dist/domains/github/keychain.d.ts.map +1 -0
- package/dist/domains/github/keychain.js +132 -0
- package/dist/domains/github/keychain.js.map +1 -0
- package/dist/domains/github/types.d.ts +40 -0
- package/dist/domains/github/types.d.ts.map +1 -0
- package/dist/domains/github/types.js +6 -0
- package/dist/domains/github/types.js.map +1 -0
- package/dist/domains/health-checks/auto-healer.d.ts +14 -0
- package/dist/domains/health-checks/auto-healer.d.ts.map +1 -0
- package/dist/domains/health-checks/auto-healer.js +160 -0
- package/dist/domains/health-checks/auto-healer.js.map +1 -0
- package/dist/domains/health-checks/check-runner.d.ts +10 -0
- package/dist/domains/health-checks/check-runner.d.ts.map +1 -0
- package/dist/domains/health-checks/check-runner.js +31 -0
- package/dist/domains/health-checks/check-runner.js.map +1 -0
- package/dist/domains/health-checks/checkers/auth-checker.d.ts +10 -0
- package/dist/domains/health-checks/checkers/auth-checker.d.ts.map +1 -0
- package/dist/domains/health-checks/checkers/auth-checker.js +90 -0
- package/dist/domains/health-checks/checkers/auth-checker.js.map +1 -0
- package/dist/domains/health-checks/checkers/deps-checker.d.ts +10 -0
- package/dist/domains/health-checks/checkers/deps-checker.d.ts.map +1 -0
- package/dist/domains/health-checks/checkers/deps-checker.js +150 -0
- package/dist/domains/health-checks/checkers/deps-checker.js.map +1 -0
- package/dist/domains/health-checks/checkers/project-checker.d.ts +10 -0
- package/dist/domains/health-checks/checkers/project-checker.d.ts.map +1 -0
- package/dist/domains/health-checks/checkers/project-checker.js +124 -0
- package/dist/domains/health-checks/checkers/project-checker.js.map +1 -0
- package/dist/domains/health-checks/checkers/system-checker.d.ts +10 -0
- package/dist/domains/health-checks/checkers/system-checker.d.ts.map +1 -0
- package/dist/domains/health-checks/checkers/system-checker.js +135 -0
- package/dist/domains/health-checks/checkers/system-checker.js.map +1 -0
- package/dist/domains/health-checks/index.d.ts +9 -0
- package/dist/domains/health-checks/index.d.ts.map +1 -0
- package/dist/domains/health-checks/index.js +21 -0
- package/dist/domains/health-checks/index.js.map +1 -0
- package/dist/domains/health-checks/report-generator.d.ts +18 -0
- package/dist/domains/health-checks/report-generator.d.ts.map +1 -0
- package/dist/domains/health-checks/report-generator.js +117 -0
- package/dist/domains/health-checks/report-generator.js.map +1 -0
- package/dist/domains/health-checks/types.d.ts +35 -0
- package/dist/domains/health-checks/types.d.ts.map +1 -0
- package/dist/domains/health-checks/types.js +6 -0
- package/dist/domains/health-checks/types.js.map +1 -0
- package/dist/index.js +33 -0
- package/dist/index.js.map +1 -1
- package/dist/utils/approaches-validator.d.ts +40 -0
- package/dist/utils/approaches-validator.d.ts.map +1 -0
- package/dist/utils/approaches-validator.js +101 -0
- package/dist/utils/approaches-validator.js.map +1 -0
- package/dist/utils/dependency-analyzer.d.ts +31 -0
- package/dist/utils/dependency-analyzer.d.ts.map +1 -0
- package/dist/utils/dependency-analyzer.js +294 -0
- package/dist/utils/dependency-analyzer.js.map +1 -0
- package/dist/utils/directory-analyzer.d.ts +23 -0
- package/dist/utils/directory-analyzer.d.ts.map +1 -0
- package/dist/utils/directory-analyzer.js +81 -0
- package/dist/utils/directory-analyzer.js.map +1 -0
- package/dist/utils/downloader.d.ts +3 -3
- package/dist/utils/downloader.d.ts.map +1 -1
- package/dist/utils/downloader.js +35 -65
- package/dist/utils/downloader.js.map +1 -1
- package/dist/utils/errors.d.ts +64 -10
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +136 -22
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/gh-cli.d.ts +4 -2
- package/dist/utils/gh-cli.d.ts.map +1 -1
- package/dist/utils/gh-cli.js +33 -38
- package/dist/utils/gh-cli.js.map +1 -1
- package/dist/utils/progress.d.ts +37 -0
- package/dist/utils/progress.d.ts.map +1 -0
- package/dist/utils/progress.js +121 -0
- package/dist/utils/progress.js.map +1 -0
- package/dist/utils/prompts.d.ts +5 -1
- package/dist/utils/prompts.d.ts.map +1 -1
- package/dist/utils/prompts.js +124 -64
- package/dist/utils/prompts.js.map +1 -1
- package/package.json +7 -3
- package/test-jira-prompt.js +32 -0
- package/dist/commands/init.d.ts +0 -6
- package/dist/commands/init.d.ts.map +0 -1
- package/dist/commands/init.js +0 -147
- package/dist/commands/init.js.map +0 -1
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Dependency analysis utilities
|
|
4
|
+
* Extracts dependencies from manifest files and infers tech stack
|
|
5
|
+
*/
|
|
6
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
7
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
|
+
};
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.analyzeDependencies = analyzeDependencies;
|
|
11
|
+
exports.inferTechStack = inferTechStack;
|
|
12
|
+
exports.detectBuildTool = detectBuildTool;
|
|
13
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
14
|
+
const path_1 = __importDefault(require("path"));
|
|
15
|
+
const project_detector_1 = require("./project-detector");
|
|
16
|
+
/**
|
|
17
|
+
* Extract dependencies from project manifest files
|
|
18
|
+
*
|
|
19
|
+
* @param projectRoot - Root directory of the project
|
|
20
|
+
* @param projectType - Detected project type
|
|
21
|
+
* @returns Record of dependency names to versions
|
|
22
|
+
*/
|
|
23
|
+
async function analyzeDependencies(projectRoot, projectType) {
|
|
24
|
+
switch (projectType) {
|
|
25
|
+
case project_detector_1.ProjectType.Node:
|
|
26
|
+
case project_detector_1.ProjectType.NodeMonorepo:
|
|
27
|
+
return analyzeNodeDependencies(projectRoot);
|
|
28
|
+
case project_detector_1.ProjectType.Python:
|
|
29
|
+
return analyzePythonDependencies(projectRoot);
|
|
30
|
+
case project_detector_1.ProjectType.Rust:
|
|
31
|
+
return analyzeRustDependencies(projectRoot);
|
|
32
|
+
default:
|
|
33
|
+
return {};
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Extract Node.js dependencies from package.json
|
|
38
|
+
*/
|
|
39
|
+
async function analyzeNodeDependencies(projectRoot) {
|
|
40
|
+
const packageJsonPath = path_1.default.join(projectRoot, 'package.json');
|
|
41
|
+
if (!await fs_extra_1.default.pathExists(packageJsonPath)) {
|
|
42
|
+
return {};
|
|
43
|
+
}
|
|
44
|
+
try {
|
|
45
|
+
const pkg = await fs_extra_1.default.readJson(packageJsonPath);
|
|
46
|
+
return {
|
|
47
|
+
...(pkg.dependencies || {}),
|
|
48
|
+
...(pkg.devDependencies || {})
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
return {};
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Extract Python dependencies from requirements.txt or pyproject.toml
|
|
57
|
+
*/
|
|
58
|
+
async function analyzePythonDependencies(projectRoot) {
|
|
59
|
+
// Try requirements.txt first
|
|
60
|
+
const requirementsPath = path_1.default.join(projectRoot, 'requirements.txt');
|
|
61
|
+
if (await fs_extra_1.default.pathExists(requirementsPath)) {
|
|
62
|
+
try {
|
|
63
|
+
const content = await fs_extra_1.default.readFile(requirementsPath, 'utf-8');
|
|
64
|
+
return parseRequirementsTxt(content);
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
// Continue to try pyproject.toml
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// Try pyproject.toml
|
|
71
|
+
const pyprojectPath = path_1.default.join(projectRoot, 'pyproject.toml');
|
|
72
|
+
if (await fs_extra_1.default.pathExists(pyprojectPath)) {
|
|
73
|
+
try {
|
|
74
|
+
const content = await fs_extra_1.default.readFile(pyprojectPath, 'utf-8');
|
|
75
|
+
return parsePyprojectToml(content);
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
return {};
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return {};
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Extract Rust dependencies from Cargo.toml
|
|
85
|
+
*/
|
|
86
|
+
async function analyzeRustDependencies(projectRoot) {
|
|
87
|
+
const cargoPath = path_1.default.join(projectRoot, 'Cargo.toml');
|
|
88
|
+
if (!await fs_extra_1.default.pathExists(cargoPath)) {
|
|
89
|
+
return {};
|
|
90
|
+
}
|
|
91
|
+
try {
|
|
92
|
+
const content = await fs_extra_1.default.readFile(cargoPath, 'utf-8');
|
|
93
|
+
return parseCargoToml(content);
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
return {};
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Infer tech stack from dependencies
|
|
101
|
+
* Uses pattern matching on dependency names to identify frameworks and tools
|
|
102
|
+
*
|
|
103
|
+
* @param dependencies - Dependency map from analyzeDependencies
|
|
104
|
+
* @param projectType - Detected project type
|
|
105
|
+
* @returns Array of detected technologies
|
|
106
|
+
*/
|
|
107
|
+
function inferTechStack(dependencies, projectType) {
|
|
108
|
+
const stack = [];
|
|
109
|
+
// Language/runtime
|
|
110
|
+
if (projectType === project_detector_1.ProjectType.Node || projectType === project_detector_1.ProjectType.NodeMonorepo) {
|
|
111
|
+
if (dependencies.typescript || dependencies['@types/node']) {
|
|
112
|
+
stack.push('TypeScript');
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
stack.push('JavaScript');
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
else if (projectType === project_detector_1.ProjectType.Python) {
|
|
119
|
+
stack.push('Python');
|
|
120
|
+
}
|
|
121
|
+
else if (projectType === project_detector_1.ProjectType.Rust) {
|
|
122
|
+
stack.push('Rust');
|
|
123
|
+
}
|
|
124
|
+
// Frontend frameworks
|
|
125
|
+
if (dependencies.react)
|
|
126
|
+
stack.push('React');
|
|
127
|
+
if (dependencies.vue)
|
|
128
|
+
stack.push('Vue');
|
|
129
|
+
if (dependencies.angular || dependencies['@angular/core'])
|
|
130
|
+
stack.push('Angular');
|
|
131
|
+
if (dependencies.svelte)
|
|
132
|
+
stack.push('Svelte');
|
|
133
|
+
if (dependencies.next)
|
|
134
|
+
stack.push('Next.js');
|
|
135
|
+
if (dependencies.nuxt)
|
|
136
|
+
stack.push('Nuxt');
|
|
137
|
+
// Backend frameworks
|
|
138
|
+
if (dependencies.express)
|
|
139
|
+
stack.push('Express');
|
|
140
|
+
if (dependencies.fastify)
|
|
141
|
+
stack.push('Fastify');
|
|
142
|
+
if (dependencies.nestjs || dependencies['@nestjs/core'])
|
|
143
|
+
stack.push('NestJS');
|
|
144
|
+
if (dependencies.django)
|
|
145
|
+
stack.push('Django');
|
|
146
|
+
if (dependencies.fastapi)
|
|
147
|
+
stack.push('FastAPI');
|
|
148
|
+
if (dependencies.flask)
|
|
149
|
+
stack.push('Flask');
|
|
150
|
+
if (dependencies.actix || dependencies['actix-web'])
|
|
151
|
+
stack.push('Actix');
|
|
152
|
+
// CSS frameworks
|
|
153
|
+
if (dependencies.tailwindcss)
|
|
154
|
+
stack.push('Tailwind CSS');
|
|
155
|
+
if (dependencies['@mui/material'])
|
|
156
|
+
stack.push('MUI');
|
|
157
|
+
if (dependencies.bootstrap)
|
|
158
|
+
stack.push('Bootstrap');
|
|
159
|
+
// Databases
|
|
160
|
+
if (dependencies.pg || dependencies.postgres)
|
|
161
|
+
stack.push('PostgreSQL');
|
|
162
|
+
if (dependencies.mongodb || dependencies.mongoose)
|
|
163
|
+
stack.push('MongoDB');
|
|
164
|
+
if (dependencies.mysql || dependencies.mysql2)
|
|
165
|
+
stack.push('MySQL');
|
|
166
|
+
if (dependencies.redis)
|
|
167
|
+
stack.push('Redis');
|
|
168
|
+
// Build tools
|
|
169
|
+
if (dependencies.vite)
|
|
170
|
+
stack.push('Vite');
|
|
171
|
+
if (dependencies.webpack)
|
|
172
|
+
stack.push('Webpack');
|
|
173
|
+
if (dependencies.rollup)
|
|
174
|
+
stack.push('Rollup');
|
|
175
|
+
if (dependencies.turbopack)
|
|
176
|
+
stack.push('Turbopack');
|
|
177
|
+
// Testing frameworks
|
|
178
|
+
if (dependencies.vitest)
|
|
179
|
+
stack.push('Vitest');
|
|
180
|
+
if (dependencies.jest)
|
|
181
|
+
stack.push('Jest');
|
|
182
|
+
if (dependencies.pytest)
|
|
183
|
+
stack.push('Pytest');
|
|
184
|
+
if (dependencies.mocha)
|
|
185
|
+
stack.push('Mocha');
|
|
186
|
+
return stack;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Detect build tool from lock files
|
|
190
|
+
*
|
|
191
|
+
* @param projectRoot - Root directory of the project
|
|
192
|
+
* @param projectType - Detected project type
|
|
193
|
+
* @returns Detected build tool name
|
|
194
|
+
*/
|
|
195
|
+
async function detectBuildTool(projectRoot, projectType) {
|
|
196
|
+
switch (projectType) {
|
|
197
|
+
case project_detector_1.ProjectType.Node:
|
|
198
|
+
case project_detector_1.ProjectType.NodeMonorepo:
|
|
199
|
+
if (await fs_extra_1.default.pathExists(path_1.default.join(projectRoot, 'pnpm-lock.yaml')))
|
|
200
|
+
return 'pnpm';
|
|
201
|
+
if (await fs_extra_1.default.pathExists(path_1.default.join(projectRoot, 'yarn.lock')))
|
|
202
|
+
return 'yarn';
|
|
203
|
+
if (await fs_extra_1.default.pathExists(path_1.default.join(projectRoot, 'bun.lockb')))
|
|
204
|
+
return 'bun';
|
|
205
|
+
if (await fs_extra_1.default.pathExists(path_1.default.join(projectRoot, 'package-lock.json')))
|
|
206
|
+
return 'npm';
|
|
207
|
+
return 'npm'; // default
|
|
208
|
+
case project_detector_1.ProjectType.Python:
|
|
209
|
+
if (await fs_extra_1.default.pathExists(path_1.default.join(projectRoot, 'poetry.lock')))
|
|
210
|
+
return 'poetry';
|
|
211
|
+
if (await fs_extra_1.default.pathExists(path_1.default.join(projectRoot, 'Pipfile.lock')))
|
|
212
|
+
return 'pipenv';
|
|
213
|
+
return 'pip'; // default
|
|
214
|
+
case project_detector_1.ProjectType.Rust:
|
|
215
|
+
return 'cargo';
|
|
216
|
+
default:
|
|
217
|
+
return 'unknown';
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
// ===== Helper Parsers =====
|
|
221
|
+
/**
|
|
222
|
+
* Parse requirements.txt format
|
|
223
|
+
* Supports lines like: package==1.0.0, package>=1.0, package
|
|
224
|
+
*/
|
|
225
|
+
function parseRequirementsTxt(content) {
|
|
226
|
+
const deps = {};
|
|
227
|
+
const lines = content.split('\n');
|
|
228
|
+
for (const line of lines) {
|
|
229
|
+
const trimmed = line.trim();
|
|
230
|
+
// Skip empty lines and comments
|
|
231
|
+
if (!trimmed || trimmed.startsWith('#'))
|
|
232
|
+
continue;
|
|
233
|
+
// Match package name with optional version specifier
|
|
234
|
+
const match = trimmed.match(/^([a-zA-Z0-9_-]+)([>=<~!]=?.*)?$/);
|
|
235
|
+
if (match) {
|
|
236
|
+
const packageName = match[1];
|
|
237
|
+
const version = match[2]?.trim() || '*';
|
|
238
|
+
deps[packageName] = version;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
return deps;
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Parse pyproject.toml format (simple regex-based)
|
|
245
|
+
* Extracts dependencies from [tool.poetry.dependencies] section
|
|
246
|
+
*/
|
|
247
|
+
function parsePyprojectToml(content) {
|
|
248
|
+
const deps = {};
|
|
249
|
+
// Extract [tool.poetry.dependencies] section
|
|
250
|
+
const depSection = content.match(/\[tool\.poetry\.dependencies\]([\s\S]*?)(\[|$)/);
|
|
251
|
+
if (depSection) {
|
|
252
|
+
const lines = depSection[1].split('\n');
|
|
253
|
+
for (const line of lines) {
|
|
254
|
+
// Match: package = "^1.0.0" or package = { version = "^1.0.0" }
|
|
255
|
+
const match = line.match(/^(\w+)\s*=\s*["']([^"']+)["']/);
|
|
256
|
+
if (match) {
|
|
257
|
+
deps[match[1]] = match[2];
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
return deps;
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Parse Cargo.toml format (simple regex-based)
|
|
265
|
+
* Extracts dependencies from [dependencies] section
|
|
266
|
+
*/
|
|
267
|
+
function parseCargoToml(content) {
|
|
268
|
+
const deps = {};
|
|
269
|
+
// Extract [dependencies] section (until next section or end of file)
|
|
270
|
+
const depSection = content.match(/\[dependencies\]([\s\S]*?)(\n\[|$)/);
|
|
271
|
+
if (depSection) {
|
|
272
|
+
const lines = depSection[1].split('\n');
|
|
273
|
+
for (const line of lines) {
|
|
274
|
+
const trimmed = line.trim();
|
|
275
|
+
// Skip empty lines
|
|
276
|
+
if (!trimmed)
|
|
277
|
+
continue;
|
|
278
|
+
// Match: package = "1.0" or package = { version = "1.0" }
|
|
279
|
+
// Support hyphens in package names (e.g., actix-web)
|
|
280
|
+
const simpleMatch = trimmed.match(/^([\w-]+)\s*=\s*["']([^"']+)["']/);
|
|
281
|
+
if (simpleMatch) {
|
|
282
|
+
deps[simpleMatch[1]] = simpleMatch[2];
|
|
283
|
+
continue;
|
|
284
|
+
}
|
|
285
|
+
// Match object notation: package = { version = "1.0", ... }
|
|
286
|
+
const objectMatch = trimmed.match(/^([\w-]+)\s*=\s*\{.*version\s*=\s*["']([^"']+)["']/);
|
|
287
|
+
if (objectMatch) {
|
|
288
|
+
deps[objectMatch[1]] = objectMatch[2];
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
return deps;
|
|
293
|
+
}
|
|
294
|
+
//# sourceMappingURL=dependency-analyzer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependency-analyzer.js","sourceRoot":"","sources":["../../src/utils/dependency-analyzer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Directory structure analysis
|
|
3
|
+
* Analyzes project directory structure to identify source, test, and config directories
|
|
4
|
+
*/
|
|
5
|
+
import { ProjectType } from './project-detector';
|
|
6
|
+
/**
|
|
7
|
+
* Directory structure result
|
|
8
|
+
*/
|
|
9
|
+
export interface DirectoryStructure {
|
|
10
|
+
source: string[];
|
|
11
|
+
tests: string[];
|
|
12
|
+
config: string[];
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Analyze project directory structure
|
|
16
|
+
* Uses predefined candidate lists to identify common directory patterns
|
|
17
|
+
*
|
|
18
|
+
* @param projectRoot - Root directory of the project
|
|
19
|
+
* @param projectType - Detected project type
|
|
20
|
+
* @returns Directory structure with source, test, and config directories
|
|
21
|
+
*/
|
|
22
|
+
export declare function analyzeDirectories(projectRoot: string, projectType: ProjectType): Promise<DirectoryStructure>;
|
|
23
|
+
//# sourceMappingURL=directory-analyzer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"directory-analyzer.d.ts","sourceRoot":"","sources":["../../src/utils/directory-analyzer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC,kBAAkB,CAAC,CA6D7B"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Directory structure analysis
|
|
4
|
+
* Analyzes project directory structure to identify source, test, and config directories
|
|
5
|
+
*/
|
|
6
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
7
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
|
+
};
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.analyzeDirectories = analyzeDirectories;
|
|
11
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
12
|
+
const path_1 = __importDefault(require("path"));
|
|
13
|
+
const project_detector_1 = require("./project-detector");
|
|
14
|
+
/**
|
|
15
|
+
* Analyze project directory structure
|
|
16
|
+
* Uses predefined candidate lists to identify common directory patterns
|
|
17
|
+
*
|
|
18
|
+
* @param projectRoot - Root directory of the project
|
|
19
|
+
* @param projectType - Detected project type
|
|
20
|
+
* @returns Directory structure with source, test, and config directories
|
|
21
|
+
*/
|
|
22
|
+
async function analyzeDirectories(projectRoot, projectType) {
|
|
23
|
+
const result = {
|
|
24
|
+
source: [],
|
|
25
|
+
tests: [],
|
|
26
|
+
config: ['.'] // Root always has config files
|
|
27
|
+
};
|
|
28
|
+
try {
|
|
29
|
+
const entries = await fs_extra_1.default.readdir(projectRoot, { withFileTypes: true });
|
|
30
|
+
const dirs = entries.filter(e => e.isDirectory()).map(e => e.name);
|
|
31
|
+
// Source directories - common patterns across ecosystems
|
|
32
|
+
const sourceCandidates = ['src', 'lib', 'app', 'components', 'packages', 'apps'];
|
|
33
|
+
for (const candidate of sourceCandidates) {
|
|
34
|
+
if (dirs.includes(candidate)) {
|
|
35
|
+
result.source.push(candidate);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
// Test directories - common test directory names
|
|
39
|
+
const testCandidates = ['test', 'tests', '__tests__', 'spec', '__test__'];
|
|
40
|
+
for (const candidate of testCandidates) {
|
|
41
|
+
if (dirs.includes(candidate)) {
|
|
42
|
+
result.tests.push(candidate);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// Additional config directories for monorepos
|
|
46
|
+
if (projectType === project_detector_1.ProjectType.NodeMonorepo) {
|
|
47
|
+
// Scan packages/ for individual package configs
|
|
48
|
+
if (dirs.includes('packages')) {
|
|
49
|
+
const packagesDir = path_1.default.join(projectRoot, 'packages');
|
|
50
|
+
try {
|
|
51
|
+
const packageDirs = await fs_extra_1.default.readdir(packagesDir, { withFileTypes: true });
|
|
52
|
+
packageDirs
|
|
53
|
+
.filter(e => e.isDirectory())
|
|
54
|
+
.forEach(e => result.config.push(`packages/${e.name}`));
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
// Ignore if packages/ is not accessible
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
// Scan apps/ for individual app configs
|
|
61
|
+
if (dirs.includes('apps')) {
|
|
62
|
+
const appsDir = path_1.default.join(projectRoot, 'apps');
|
|
63
|
+
try {
|
|
64
|
+
const appDirs = await fs_extra_1.default.readdir(appsDir, { withFileTypes: true });
|
|
65
|
+
appDirs
|
|
66
|
+
.filter(e => e.isDirectory())
|
|
67
|
+
.forEach(e => result.config.push(`apps/${e.name}`));
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
// Ignore if apps/ is not accessible
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
// Return empty structure on error (graceful degradation)
|
|
77
|
+
console.warn(`Warning: Could not analyze directories: ${error}`);
|
|
78
|
+
}
|
|
79
|
+
return result;
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=directory-analyzer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"directory-analyzer.js","sourceRoot":"","sources":["../../src/utils/directory-analyzer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* GitHub asset download utilities
|
|
2
|
+
* GitHub asset download utilities using @octokit/rest
|
|
3
3
|
*/
|
|
4
4
|
/**
|
|
5
|
-
* Download .github directory from private repo
|
|
5
|
+
* Download .github directory from private repo using GitHub client
|
|
6
6
|
*/
|
|
7
7
|
export declare function downloadGithubAssets(repo?: string, branch?: string, targetDir?: string): Promise<void>;
|
|
8
8
|
/**
|
|
9
|
-
* Download config template from repo
|
|
9
|
+
* Download config template from repo using GitHub client
|
|
10
10
|
*/
|
|
11
11
|
export declare function downloadConfigTemplate(repo?: string): Promise<string>;
|
|
12
12
|
//# sourceMappingURL=downloader.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"downloader.d.ts","sourceRoot":"","sources":["../../src/utils/downloader.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"downloader.d.ts","sourceRoot":"","sources":["../../src/utils/downloader.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,GAAE,MAA4B,EAClC,MAAM,GAAE,MAAe,EACvB,SAAS,GAAE,MAAsB,GAChC,OAAO,CAAC,IAAI,CAAC,CA6Cf;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,IAAI,GAAE,MAA4B,GACjC,OAAO,CAAC,MAAM,CAAC,CAiBjB"}
|
package/dist/utils/downloader.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
* GitHub asset download utilities
|
|
3
|
+
* GitHub asset download utilities using @octokit/rest
|
|
4
4
|
*/
|
|
5
5
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
6
6
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
@@ -8,98 +8,68 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
exports.downloadGithubAssets = downloadGithubAssets;
|
|
10
10
|
exports.downloadConfigTemplate = downloadConfigTemplate;
|
|
11
|
-
const execa_1 = require("execa");
|
|
12
11
|
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
13
12
|
const path_1 = __importDefault(require("path"));
|
|
14
13
|
const constants_1 = require("../config/constants");
|
|
15
14
|
const logger_1 = require("./logger");
|
|
15
|
+
const github_1 = require("../domains/github");
|
|
16
|
+
const progress_1 = require("./progress");
|
|
16
17
|
/**
|
|
17
|
-
* Download .github directory from private repo
|
|
18
|
+
* Download .github directory from private repo using GitHub client
|
|
18
19
|
*/
|
|
19
20
|
async function downloadGithubAssets(repo = constants_1.CONSTANTS.REPO_FULL, branch = 'main', targetDir = process.cwd()) {
|
|
20
21
|
const spinner = logger_1.logger.spinner(`Downloading assets from ${repo}...`);
|
|
21
|
-
const tempDir = path_1.default.join(targetDir, '.csvibe-tmp');
|
|
22
22
|
try {
|
|
23
|
-
|
|
24
|
-
await
|
|
25
|
-
//
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
'repo',
|
|
29
|
-
'clone',
|
|
30
|
-
repo,
|
|
31
|
-
tempDir,
|
|
32
|
-
'--',
|
|
33
|
-
'--depth=1',
|
|
34
|
-
'--filter=blob:none',
|
|
35
|
-
'--sparse'
|
|
36
|
-
]);
|
|
37
|
-
// Sparse checkout .github/ directory
|
|
38
|
-
await (0, execa_1.execa)('git', [
|
|
39
|
-
'-C',
|
|
40
|
-
tempDir,
|
|
41
|
-
'sparse-checkout',
|
|
42
|
-
'set',
|
|
43
|
-
'.github'
|
|
44
|
-
]);
|
|
45
|
-
// Copy .github/ to target directory
|
|
46
|
-
const sourceGithub = path_1.default.join(tempDir, '.github');
|
|
47
|
-
const targetGithub = path_1.default.join(targetDir, '.github');
|
|
48
|
-
if (await fs_extra_1.default.pathExists(sourceGithub)) {
|
|
49
|
-
// Copy agents
|
|
50
|
-
await copyDirectory(path_1.default.join(sourceGithub, 'agents'), path_1.default.join(targetGithub, 'agents'));
|
|
51
|
-
// Copy prompts (if exists)
|
|
52
|
-
if (await fs_extra_1.default.pathExists(path_1.default.join(sourceGithub, 'prompts'))) {
|
|
53
|
-
await copyDirectory(path_1.default.join(sourceGithub, 'prompts'), path_1.default.join(targetGithub, 'prompts'));
|
|
54
|
-
}
|
|
55
|
-
// Copy instructions (if exists)
|
|
56
|
-
if (await fs_extra_1.default.pathExists(path_1.default.join(sourceGithub, 'instructions'))) {
|
|
57
|
-
await copyDirectory(path_1.default.join(sourceGithub, 'instructions'), path_1.default.join(targetGithub, 'instructions'));
|
|
58
|
-
}
|
|
59
|
-
spinner.succeed('Assets downloaded successfully');
|
|
60
|
-
}
|
|
61
|
-
else {
|
|
23
|
+
const [owner, repoName] = repo.split('/');
|
|
24
|
+
const client = await github_1.GitHubClient.create();
|
|
25
|
+
// Download .github directory contents
|
|
26
|
+
const files = await client.downloadDirectory(owner, repoName, '.github', branch);
|
|
27
|
+
if (files.length === 0) {
|
|
62
28
|
spinner.fail('No .github directory found in repository');
|
|
63
29
|
throw new Error('Repository does not contain .github directory');
|
|
64
30
|
}
|
|
31
|
+
// Create progress bar for file writing
|
|
32
|
+
const progressBar = (0, progress_1.createProgressBar)({
|
|
33
|
+
label: 'Writing files',
|
|
34
|
+
total: files.length,
|
|
35
|
+
unit: 'files',
|
|
36
|
+
});
|
|
37
|
+
let written = 0;
|
|
38
|
+
// Write files to target directory
|
|
39
|
+
for (const file of files) {
|
|
40
|
+
const targetPath = path_1.default.join(targetDir, file.path);
|
|
41
|
+
// Ensure directory exists
|
|
42
|
+
await fs_extra_1.default.ensureDir(path_1.default.dirname(targetPath));
|
|
43
|
+
// Write file
|
|
44
|
+
await fs_extra_1.default.writeFile(targetPath, file.content);
|
|
45
|
+
// Update progress
|
|
46
|
+
written++;
|
|
47
|
+
progressBar.update(written);
|
|
48
|
+
}
|
|
49
|
+
progressBar.stop();
|
|
50
|
+
spinner.succeed(`Assets downloaded successfully (${files.length} files)`);
|
|
65
51
|
}
|
|
66
52
|
catch (error) {
|
|
67
53
|
spinner.fail('Failed to download assets');
|
|
68
54
|
throw error;
|
|
69
55
|
}
|
|
70
|
-
finally {
|
|
71
|
-
// Cleanup temp directory
|
|
72
|
-
await fs_extra_1.default.remove(tempDir);
|
|
73
|
-
}
|
|
74
56
|
}
|
|
75
57
|
/**
|
|
76
|
-
* Download config template from repo
|
|
58
|
+
* Download config template from repo using GitHub client
|
|
77
59
|
*/
|
|
78
60
|
async function downloadConfigTemplate(repo = constants_1.CONSTANTS.REPO_FULL) {
|
|
79
61
|
try {
|
|
80
|
-
|
|
81
|
-
const
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
'.content'
|
|
86
|
-
]);
|
|
87
|
-
// Decode base64 content
|
|
88
|
-
const content = Buffer.from(stdout, 'base64').toString('utf-8');
|
|
89
|
-
return content;
|
|
62
|
+
const [owner, repoName] = repo.split('/');
|
|
63
|
+
const client = await github_1.GitHubClient.create();
|
|
64
|
+
// Download config template
|
|
65
|
+
const content = await client.downloadFile(owner, repoName, 'templates/config.yml.template');
|
|
66
|
+
return content.toString('utf-8');
|
|
90
67
|
}
|
|
91
68
|
catch (error) {
|
|
92
69
|
// Return default template if not found
|
|
93
70
|
return getDefaultConfigTemplate();
|
|
94
71
|
}
|
|
95
72
|
}
|
|
96
|
-
/**
|
|
97
|
-
* Copy directory recursively
|
|
98
|
-
*/
|
|
99
|
-
async function copyDirectory(src, dest) {
|
|
100
|
-
await fs_extra_1.default.ensureDir(dest);
|
|
101
|
-
await fs_extra_1.default.copy(src, dest, { overwrite: true });
|
|
102
|
-
}
|
|
103
73
|
/**
|
|
104
74
|
* Default config template (fallback)
|
|
105
75
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"downloader.js","sourceRoot":"","sources":["../../src/utils/downloader.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;
|
|
1
|
+
{"version":3,"file":"downloader.js","sourceRoot":"","sources":["../../src/utils/downloader.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;AAYH,oDAiDC;AAKD,wDAmBC;AAnFD,wDAA0B;AAC1B,gDAAwB;AACxB,mDAAgD;AAChD,qCAAkC;AAClC,8CAAiD;AACjD,yCAA+C;AAE/C;;GAEG;AACI,KAAK,UAAU,oBAAoB,CACxC,OAAe,qBAAS,CAAC,SAAS,EAClC,SAAiB,MAAM,EACvB,YAAoB,OAAO,CAAC,GAAG,EAAE;IAEjC,MAAM,OAAO,GAAG,eAAM,CAAC,OAAO,CAAC,2BAA2B,IAAI,KAAK,CAAC,CAAC;IAErE,IAAI,CAAC;QACH,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,MAAM,qBAAY,CAAC,MAAM,EAAE,CAAC;QAE3C,sCAAsC;QACtC,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QAEjF,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;YACzD,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACnE,CAAC;QAED,uCAAuC;QACvC,MAAM,WAAW,GAAG,IAAA,4BAAiB,EAAC;YACpC,KAAK,EAAE,eAAe;YACtB,KAAK,EAAE,KAAK,CAAC,MAAM;YACnB,IAAI,EAAE,OAAO;SACd,CAAC,CAAC;QAEH,IAAI,OAAO,GAAG,CAAC,CAAC;QAEhB,kCAAkC;QAClC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAEnD,0BAA0B;YAC1B,MAAM,kBAAE,CAAC,SAAS,CAAC,cAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;YAE7C,aAAa;YACb,MAAM,kBAAE,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YAE7C,kBAAkB;YAClB,OAAO,EAAE,CAAC;YACV,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC9B,CAAC;QAED,WAAW,CAAC,IAAI,EAAE,CAAC;QACnB,OAAO,CAAC,OAAO,CAAC,mCAAmC,KAAK,CAAC,MAAM,SAAS,CAAC,CAAC;IAC5E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QAC1C,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,sBAAsB,CAC1C,OAAe,qBAAS,CAAC,SAAS;IAElC,IAAI,CAAC;QACH,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,MAAM,qBAAY,CAAC,MAAM,EAAE,CAAC;QAE3C,2BAA2B;QAC3B,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,YAAY,CACvC,KAAK,EACL,QAAQ,EACR,+BAA+B,CAChC,CAAC;QAEF,OAAO,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,uCAAuC;QACvC,OAAO,wBAAwB,EAAE,CAAC;IACpC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,wBAAwB;IAC/B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiCR,CAAC;AACF,CAAC"}
|