stackkit-cli 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +119 -0
- package/bin/stackkit.js +2 -0
- package/dist/commands/add.d.ts +9 -0
- package/dist/commands/add.d.ts.map +1 -0
- package/dist/commands/add.js +201 -0
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/init.d.ts +11 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +153 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/list.d.ts +7 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +107 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +50 -0
- package/dist/index.js.map +1 -0
- package/dist/types/index.d.ts +65 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/code-inject.d.ts +15 -0
- package/dist/utils/code-inject.d.ts.map +1 -0
- package/dist/utils/code-inject.js +71 -0
- package/dist/utils/code-inject.js.map +1 -0
- package/dist/utils/detect.d.ts +5 -0
- package/dist/utils/detect.d.ts.map +1 -0
- package/dist/utils/detect.js +79 -0
- package/dist/utils/detect.js.map +1 -0
- package/dist/utils/env-editor.d.ts +11 -0
- package/dist/utils/env-editor.d.ts.map +1 -0
- package/dist/utils/env-editor.js +92 -0
- package/dist/utils/env-editor.js.map +1 -0
- package/dist/utils/files.d.ts +7 -0
- package/dist/utils/files.d.ts.map +1 -0
- package/dist/utils/files.js +51 -0
- package/dist/utils/files.js.map +1 -0
- package/dist/utils/json-editor.d.ts +9 -0
- package/dist/utils/json-editor.d.ts.map +1 -0
- package/dist/utils/json-editor.js +50 -0
- package/dist/utils/json-editor.js.map +1 -0
- package/dist/utils/logger.d.ts +17 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +58 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/package-manager.d.ts +6 -0
- package/dist/utils/package-manager.d.ts.map +1 -0
- package/dist/utils/package-manager.js +79 -0
- package/dist/utils/package-manager.js.map +1 -0
- package/package.json +51 -0
- package/src/commands/add.ts +261 -0
- package/src/commands/init.ts +182 -0
- package/src/commands/list.ts +124 -0
- package/src/index.ts +53 -0
- package/src/types/index.ts +71 -0
- package/src/utils/code-inject.ts +85 -0
- package/src/utils/detect.ts +89 -0
- package/src/utils/env-editor.ts +127 -0
- package/src/utils/files.ts +59 -0
- package/src/utils/json-editor.ts +64 -0
- package/src/utils/logger.ts +62 -0
- package/src/utils/package-manager.ts +85 -0
- package/tsconfig.json +9 -0
package/README.md
ADDED
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
# StackKit CLI
|
|
2
|
+
|
|
3
|
+
The main CLI package for StackKit - a production-ready project generator and module system.
|
|
4
|
+
|
|
5
|
+
## Development
|
|
6
|
+
|
|
7
|
+
### Build
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
pnpm build
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
### Watch Mode
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
pnpm dev
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
### Test Locally
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
# Link globally
|
|
23
|
+
pnpm link --global
|
|
24
|
+
|
|
25
|
+
# Use it anywhere
|
|
26
|
+
stackkit init my-app
|
|
27
|
+
stackkit list
|
|
28
|
+
stackkit add auth
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Commands
|
|
32
|
+
|
|
33
|
+
### `stackkit init [project-name]`
|
|
34
|
+
|
|
35
|
+
Create a new project from a template.
|
|
36
|
+
|
|
37
|
+
**Options:**
|
|
38
|
+
|
|
39
|
+
- `-t, --template <template>` - Template to use
|
|
40
|
+
- `--pm <pm>` - Package manager (npm, yarn, pnpm)
|
|
41
|
+
- `--no-install` - Skip installing dependencies
|
|
42
|
+
- `--no-git` - Skip git initialization
|
|
43
|
+
- `-y, --yes` - Skip prompts and use defaults
|
|
44
|
+
|
|
45
|
+
**Example:**
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
stackkit init my-app --template next-prisma-postgres-shadcn --pm pnpm
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### `stackkit list`
|
|
52
|
+
|
|
53
|
+
List available templates and modules.
|
|
54
|
+
|
|
55
|
+
**Options:**
|
|
56
|
+
|
|
57
|
+
- `-t, --templates` - List only templates
|
|
58
|
+
- `-m, --modules` - List only modules
|
|
59
|
+
|
|
60
|
+
**Example:**
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
stackkit list
|
|
64
|
+
stackkit list --modules
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### `stackkit add <module>`
|
|
68
|
+
|
|
69
|
+
Add a module to your existing project.
|
|
70
|
+
|
|
71
|
+
**Options:**
|
|
72
|
+
|
|
73
|
+
- `--provider <provider>` - Specific provider/variant
|
|
74
|
+
- `--force` - Overwrite existing files
|
|
75
|
+
- `--dry-run` - Show what would be changed
|
|
76
|
+
- `--no-install` - Skip installing dependencies
|
|
77
|
+
|
|
78
|
+
**Example:**
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
stackkit add auth
|
|
82
|
+
stackkit add auth --dry-run
|
|
83
|
+
stackkit add auth --force
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## Architecture
|
|
87
|
+
|
|
88
|
+
### Commands (`src/commands/`)
|
|
89
|
+
|
|
90
|
+
- `init.ts` - Project initialization
|
|
91
|
+
- `list.ts` - List resources
|
|
92
|
+
- `add.ts` - Add modules
|
|
93
|
+
|
|
94
|
+
### Utils (`src/utils/`)
|
|
95
|
+
|
|
96
|
+
- `detect.ts` - Project detection (framework, router, language)
|
|
97
|
+
- `files.ts` - File operations (copy, create, read)
|
|
98
|
+
- `package-manager.ts` - Package manager detection and execution
|
|
99
|
+
- `json-editor.ts` - Safe JSON file editing
|
|
100
|
+
- `env-editor.ts` - Environment variable management
|
|
101
|
+
- `code-inject.ts` - Idempotent code injection
|
|
102
|
+
- `logger.ts` - Consistent CLI output
|
|
103
|
+
|
|
104
|
+
### Types (`src/types/`)
|
|
105
|
+
|
|
106
|
+
TypeScript type definitions for templates, modules, and options.
|
|
107
|
+
|
|
108
|
+
## Publishing
|
|
109
|
+
|
|
110
|
+
Before publishing to npm:
|
|
111
|
+
|
|
112
|
+
1. Update version in package.json
|
|
113
|
+
2. Build the package: `pnpm build`
|
|
114
|
+
3. Test locally: `pnpm link --global`
|
|
115
|
+
4. Publish: `npm publish --access public`
|
|
116
|
+
|
|
117
|
+
## License
|
|
118
|
+
|
|
119
|
+
MIT
|
package/bin/stackkit.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAWA,UAAU,UAAU;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA6GnF"}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.addCommand = addCommand;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
9
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
10
|
+
const path_1 = __importDefault(require("path"));
|
|
11
|
+
const detect_1 = require("../utils/detect");
|
|
12
|
+
const env_editor_1 = require("../utils/env-editor");
|
|
13
|
+
const files_1 = require("../utils/files");
|
|
14
|
+
const logger_1 = require("../utils/logger");
|
|
15
|
+
const package_manager_1 = require("../utils/package-manager");
|
|
16
|
+
async function addCommand(module, options) {
|
|
17
|
+
try {
|
|
18
|
+
const projectRoot = process.cwd();
|
|
19
|
+
// Detect project info
|
|
20
|
+
const spinner = logger_1.logger.startSpinner('Detecting project...');
|
|
21
|
+
const projectInfo = await (0, detect_1.detectProjectInfo)(projectRoot);
|
|
22
|
+
spinner.succeed(`Detected ${projectInfo.framework} (${projectInfo.router} router, ${projectInfo.language})`);
|
|
23
|
+
// Load module metadata
|
|
24
|
+
const modulesDir = path_1.default.join(__dirname, '..', '..', '..', '..', 'modules');
|
|
25
|
+
const moduleMetadata = await loadModuleMetadata(modulesDir, module, options.provider);
|
|
26
|
+
if (!moduleMetadata) {
|
|
27
|
+
logger_1.logger.error(`Module "${module}" not found`);
|
|
28
|
+
process.exit(1);
|
|
29
|
+
}
|
|
30
|
+
// Check if framework is supported
|
|
31
|
+
if (!moduleMetadata.supportedFrameworks.includes(projectInfo.framework)) {
|
|
32
|
+
logger_1.logger.error(`Module "${module}" does not support ${projectInfo.framework}. Supported: ${moduleMetadata.supportedFrameworks.join(', ')}`);
|
|
33
|
+
process.exit(1);
|
|
34
|
+
}
|
|
35
|
+
// Check for conflicts
|
|
36
|
+
if (module === 'auth' && projectInfo.hasAuth && !options.force) {
|
|
37
|
+
logger_1.logger.warn('Auth library already detected in this project');
|
|
38
|
+
const { proceed } = await inquirer_1.default.prompt([
|
|
39
|
+
{
|
|
40
|
+
type: 'confirm',
|
|
41
|
+
name: 'proceed',
|
|
42
|
+
message: 'Continue anyway? (use --force to skip this prompt)',
|
|
43
|
+
default: false,
|
|
44
|
+
},
|
|
45
|
+
]);
|
|
46
|
+
if (!proceed) {
|
|
47
|
+
logger_1.logger.info('Cancelled');
|
|
48
|
+
process.exit(0);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
if (options.dryRun) {
|
|
52
|
+
logger_1.logger.warn('Dry run mode - no changes will be made');
|
|
53
|
+
logger_1.logger.newLine();
|
|
54
|
+
}
|
|
55
|
+
// Apply module patches
|
|
56
|
+
await applyModulePatches(projectRoot, projectInfo, moduleMetadata, modulesDir, module, options);
|
|
57
|
+
// Add dependencies
|
|
58
|
+
if (Object.keys(moduleMetadata.dependencies).length > 0 && options.install !== false) {
|
|
59
|
+
const deps = Object.entries(moduleMetadata.dependencies).map(([name, version]) => `${name}@${version}`);
|
|
60
|
+
if (!options.dryRun) {
|
|
61
|
+
await (0, package_manager_1.addDependencies)(projectRoot, projectInfo.packageManager, deps, false);
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
logger_1.logger.info(`Would add dependencies: ${deps.join(', ')}`);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
// Add dev dependencies
|
|
68
|
+
if (moduleMetadata.devDependencies &&
|
|
69
|
+
Object.keys(moduleMetadata.devDependencies).length > 0 &&
|
|
70
|
+
options.install !== false) {
|
|
71
|
+
const devDeps = Object.entries(moduleMetadata.devDependencies).map(([name, version]) => `${name}@${version}`);
|
|
72
|
+
if (!options.dryRun) {
|
|
73
|
+
await (0, package_manager_1.addDependencies)(projectRoot, projectInfo.packageManager, devDeps, true);
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
logger_1.logger.info(`Would add dev dependencies: ${devDeps.join(', ')}`);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
// Add environment variables
|
|
80
|
+
if (moduleMetadata.envVars.length > 0) {
|
|
81
|
+
if (!options.dryRun) {
|
|
82
|
+
await (0, env_editor_1.addEnvVariables)(projectRoot, moduleMetadata.envVars, { force: options.force });
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
logger_1.logger.log(` ${chalk_1.default.dim('~')} .env.example`);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
logger_1.logger.newLine();
|
|
89
|
+
logger_1.logger.success(`Added ${chalk_1.default.bold(moduleMetadata.displayName)}`);
|
|
90
|
+
logger_1.logger.newLine();
|
|
91
|
+
// Print next steps
|
|
92
|
+
if (moduleMetadata.envVars.some((v) => v.required)) {
|
|
93
|
+
logger_1.logger.log('Next: Fill in environment variables in .env');
|
|
94
|
+
}
|
|
95
|
+
logger_1.logger.newLine();
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
logger_1.logger.error(`Failed to add module: ${error.message}`);
|
|
99
|
+
if (error instanceof Error && error.stack) {
|
|
100
|
+
logger_1.logger.log(chalk_1.default.gray(error.stack));
|
|
101
|
+
}
|
|
102
|
+
process.exit(1);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
async function loadModuleMetadata(modulesDir, moduleName, provider) {
|
|
106
|
+
if (!(await fs_extra_1.default.pathExists(modulesDir))) {
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
// Try to find module in any category
|
|
110
|
+
const categories = await fs_extra_1.default.readdir(modulesDir);
|
|
111
|
+
for (const category of categories) {
|
|
112
|
+
const categoryPath = path_1.default.join(modulesDir, category);
|
|
113
|
+
const stat = await fs_extra_1.default.stat(categoryPath);
|
|
114
|
+
if (!stat.isDirectory())
|
|
115
|
+
continue;
|
|
116
|
+
// Get all modules in this category
|
|
117
|
+
const moduleDirs = await fs_extra_1.default.readdir(categoryPath);
|
|
118
|
+
for (const moduleDir of moduleDirs) {
|
|
119
|
+
const modulePath = path_1.default.join(categoryPath, moduleDir);
|
|
120
|
+
const moduleStat = await fs_extra_1.default.stat(modulePath);
|
|
121
|
+
if (!moduleStat.isDirectory())
|
|
122
|
+
continue;
|
|
123
|
+
const metadataPath = path_1.default.join(modulePath, 'module.json');
|
|
124
|
+
if (await fs_extra_1.default.pathExists(metadataPath)) {
|
|
125
|
+
const metadata = await fs_extra_1.default.readJSON(metadataPath);
|
|
126
|
+
// Match by module name or provider
|
|
127
|
+
if (metadata.name === moduleName || (provider && moduleDir === provider)) {
|
|
128
|
+
return metadata;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return null;
|
|
134
|
+
}
|
|
135
|
+
async function applyModulePatches(projectRoot, projectInfo, moduleMetadata, modulesDir, moduleName, options) {
|
|
136
|
+
const moduleBasePath = await findModulePath(modulesDir, moduleName, options.provider);
|
|
137
|
+
if (!moduleBasePath) {
|
|
138
|
+
throw new Error('Module files not found');
|
|
139
|
+
}
|
|
140
|
+
for (const patch of moduleMetadata.patches) {
|
|
141
|
+
if (patch.type === 'create-file') {
|
|
142
|
+
const filePatch = patch;
|
|
143
|
+
// Check conditions
|
|
144
|
+
if (filePatch.condition) {
|
|
145
|
+
if (filePatch.condition.router && filePatch.condition.router !== projectInfo.router) {
|
|
146
|
+
continue; // Skip this patch
|
|
147
|
+
}
|
|
148
|
+
if (filePatch.condition.language && filePatch.condition.language !== projectInfo.language) {
|
|
149
|
+
continue; // Skip this patch
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
const sourceFile = path_1.default.join(moduleBasePath, 'files', filePatch.source);
|
|
153
|
+
let destFile = path_1.default.join(projectRoot, filePatch.destination);
|
|
154
|
+
// Replace placeholders in destination
|
|
155
|
+
destFile = destFile
|
|
156
|
+
.replace('{{router}}', (0, detect_1.getRouterBasePath)(projectInfo))
|
|
157
|
+
.replace('{{lib}}', (0, detect_1.getLibPath)(projectInfo));
|
|
158
|
+
if (!options.dryRun) {
|
|
159
|
+
if (await (0, files_1.fileExists)(sourceFile)) {
|
|
160
|
+
const content = await fs_extra_1.default.readFile(sourceFile, 'utf-8');
|
|
161
|
+
await (0, files_1.createFile)(destFile, content, { force: options.force });
|
|
162
|
+
const relativePath = path_1.default.relative(projectRoot, destFile);
|
|
163
|
+
logger_1.logger.log(` ${chalk_1.default.green('+')} ${relativePath}`);
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
logger_1.logger.warn(`Source file not found: ${filePatch.source}`);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
const relativePath = path_1.default.relative(projectRoot, destFile);
|
|
171
|
+
logger_1.logger.log(` ${chalk_1.default.dim('+')} ${relativePath}`);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
async function findModulePath(modulesDir, moduleName, provider) {
|
|
177
|
+
const categories = await fs_extra_1.default.readdir(modulesDir);
|
|
178
|
+
for (const category of categories) {
|
|
179
|
+
const categoryPath = path_1.default.join(modulesDir, category);
|
|
180
|
+
const stat = await fs_extra_1.default.stat(categoryPath);
|
|
181
|
+
if (!stat.isDirectory())
|
|
182
|
+
continue;
|
|
183
|
+
const moduleDirs = await fs_extra_1.default.readdir(categoryPath);
|
|
184
|
+
for (const moduleDir of moduleDirs) {
|
|
185
|
+
const modulePath = path_1.default.join(categoryPath, moduleDir);
|
|
186
|
+
const moduleStat = await fs_extra_1.default.stat(modulePath);
|
|
187
|
+
if (!moduleStat.isDirectory())
|
|
188
|
+
continue;
|
|
189
|
+
const metadataPath = path_1.default.join(modulePath, 'module.json');
|
|
190
|
+
if (await fs_extra_1.default.pathExists(metadataPath)) {
|
|
191
|
+
const metadata = await fs_extra_1.default.readJSON(metadataPath);
|
|
192
|
+
// Match by module name or provider
|
|
193
|
+
if (metadata.name === moduleName || (provider && moduleDir === provider)) {
|
|
194
|
+
return modulePath;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
return null;
|
|
200
|
+
}
|
|
201
|
+
//# sourceMappingURL=add.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { PackageManager } from '../utils/package-manager';
|
|
2
|
+
interface InitOptions {
|
|
3
|
+
template?: string;
|
|
4
|
+
pm?: PackageManager;
|
|
5
|
+
install?: boolean;
|
|
6
|
+
git?: boolean;
|
|
7
|
+
yes?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare function initCommand(projectName: string | undefined, options: InitOptions): Promise<void>;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=init.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAQA,OAAO,EAAgC,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAExF,UAAU,WAAW;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,EAAE,CAAC,EAAE,cAAc,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,wBAAsB,WAAW,CAC/B,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,IAAI,CAAC,CA6If"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.initCommand = initCommand;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
9
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
10
|
+
const path_1 = __importDefault(require("path"));
|
|
11
|
+
const validate_npm_package_name_1 = __importDefault(require("validate-npm-package-name"));
|
|
12
|
+
const files_1 = require("../utils/files");
|
|
13
|
+
const logger_1 = require("../utils/logger");
|
|
14
|
+
const package_manager_1 = require("../utils/package-manager");
|
|
15
|
+
async function initCommand(projectName, options) {
|
|
16
|
+
try {
|
|
17
|
+
// Validate package manager option
|
|
18
|
+
if (options.pm && !['npm', 'yarn', 'pnpm'].includes(options.pm)) {
|
|
19
|
+
logger_1.logger.error(`Invalid package manager: ${options.pm}. Use npm, yarn, or pnpm.`);
|
|
20
|
+
process.exit(1);
|
|
21
|
+
}
|
|
22
|
+
// Get available templates
|
|
23
|
+
const templatesDir = path_1.default.join(__dirname, '..', '..', '..', '..', 'templates');
|
|
24
|
+
const templates = await getAvailableTemplates(templatesDir);
|
|
25
|
+
if (templates.length === 0) {
|
|
26
|
+
logger_1.logger.error('No templates found');
|
|
27
|
+
process.exit(1);
|
|
28
|
+
}
|
|
29
|
+
// Prompt for project details if not using --yes
|
|
30
|
+
let answers;
|
|
31
|
+
if (options.yes) {
|
|
32
|
+
answers = {
|
|
33
|
+
projectName: projectName || 'my-app',
|
|
34
|
+
template: options.template || templates[0].name,
|
|
35
|
+
packageManager: options.pm || 'pnpm',
|
|
36
|
+
install: options.install !== false,
|
|
37
|
+
git: options.git !== false,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
const prompted = await inquirer_1.default.prompt([
|
|
42
|
+
{
|
|
43
|
+
type: 'input',
|
|
44
|
+
name: 'projectName',
|
|
45
|
+
message: 'Project name:',
|
|
46
|
+
default: projectName || 'my-app',
|
|
47
|
+
when: !projectName,
|
|
48
|
+
validate: (input) => {
|
|
49
|
+
const validation = (0, validate_npm_package_name_1.default)(input);
|
|
50
|
+
if (!validation.validForNewPackages) {
|
|
51
|
+
return validation.errors?.[0] || 'Invalid package name';
|
|
52
|
+
}
|
|
53
|
+
return true;
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
type: 'list',
|
|
58
|
+
name: 'template',
|
|
59
|
+
message: 'Select a template:',
|
|
60
|
+
choices: templates.map((t) => ({
|
|
61
|
+
name: `${t.displayName} - ${t.description}`,
|
|
62
|
+
value: t.name,
|
|
63
|
+
})),
|
|
64
|
+
when: !options.template,
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
type: 'list',
|
|
68
|
+
name: 'packageManager',
|
|
69
|
+
message: 'Select a package manager:',
|
|
70
|
+
choices: ['pnpm', 'npm', 'yarn'],
|
|
71
|
+
default: 'pnpm',
|
|
72
|
+
when: !options.pm,
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
type: 'confirm',
|
|
76
|
+
name: 'install',
|
|
77
|
+
message: 'Install dependencies?',
|
|
78
|
+
default: true,
|
|
79
|
+
when: options.install !== false,
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
type: 'confirm',
|
|
83
|
+
name: 'git',
|
|
84
|
+
message: 'Initialize git repository?',
|
|
85
|
+
default: true,
|
|
86
|
+
when: options.git !== false,
|
|
87
|
+
},
|
|
88
|
+
]);
|
|
89
|
+
answers = {
|
|
90
|
+
projectName: projectName || prompted.projectName,
|
|
91
|
+
template: options.template || prompted.template,
|
|
92
|
+
packageManager: options.pm || prompted.packageManager,
|
|
93
|
+
install: options.install !== false && (prompted.install ?? true),
|
|
94
|
+
git: options.git !== false && (prompted.git ?? true),
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
const targetDir = path_1.default.join(process.cwd(), answers.projectName);
|
|
98
|
+
// Check if directory exists
|
|
99
|
+
if (await fs_extra_1.default.pathExists(targetDir)) {
|
|
100
|
+
logger_1.logger.error(`Directory "${answers.projectName}" already exists`);
|
|
101
|
+
logger_1.logger.info('Please choose a different name or remove the existing directory.');
|
|
102
|
+
process.exit(1);
|
|
103
|
+
}
|
|
104
|
+
// Validate template exists
|
|
105
|
+
const selectedTemplate = templates.find((t) => t.name === answers.template);
|
|
106
|
+
if (!selectedTemplate) {
|
|
107
|
+
logger_1.logger.error(`Template "${answers.template}" not found`);
|
|
108
|
+
process.exit(1);
|
|
109
|
+
}
|
|
110
|
+
logger_1.logger.newLine();
|
|
111
|
+
// Copy template
|
|
112
|
+
const templatePath = path_1.default.join(templatesDir, answers.template);
|
|
113
|
+
await (0, files_1.copyTemplate)(templatePath, targetDir, answers.projectName);
|
|
114
|
+
// Install dependencies
|
|
115
|
+
if (answers.install) {
|
|
116
|
+
await (0, package_manager_1.installDependencies)(targetDir, answers.packageManager);
|
|
117
|
+
}
|
|
118
|
+
// Initialize git
|
|
119
|
+
if (answers.git) {
|
|
120
|
+
await (0, package_manager_1.initGit)(targetDir);
|
|
121
|
+
}
|
|
122
|
+
logger_1.logger.newLine();
|
|
123
|
+
logger_1.logger.success(`Created ${chalk_1.default.bold(answers.projectName)}`);
|
|
124
|
+
logger_1.logger.newLine();
|
|
125
|
+
logger_1.logger.log(`Next steps:`);
|
|
126
|
+
logger_1.logger.log(` ${chalk_1.default.cyan('cd')} ${answers.projectName}`);
|
|
127
|
+
if (!answers.install) {
|
|
128
|
+
logger_1.logger.log(` ${chalk_1.default.cyan(answers.packageManager)} install`);
|
|
129
|
+
}
|
|
130
|
+
logger_1.logger.log(` ${chalk_1.default.cyan(answers.packageManager)} ${answers.packageManager === 'npm' ? 'run ' : ''}dev`);
|
|
131
|
+
logger_1.logger.newLine();
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
logger_1.logger.error(`Failed to create project: ${error.message}`);
|
|
135
|
+
process.exit(1);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
async function getAvailableTemplates(templatesDir) {
|
|
139
|
+
if (!(await fs_extra_1.default.pathExists(templatesDir))) {
|
|
140
|
+
return [];
|
|
141
|
+
}
|
|
142
|
+
const templateDirs = await fs_extra_1.default.readdir(templatesDir);
|
|
143
|
+
const templates = [];
|
|
144
|
+
for (const dir of templateDirs) {
|
|
145
|
+
const metadataPath = path_1.default.join(templatesDir, dir, 'template.json');
|
|
146
|
+
if (await fs_extra_1.default.pathExists(metadataPath)) {
|
|
147
|
+
const metadata = await fs_extra_1.default.readJSON(metadataPath);
|
|
148
|
+
templates.push(metadata);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
return templates;
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAMA,UAAU,WAAW;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAiErE"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.listCommand = listCommand;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
9
|
+
const path_1 = __importDefault(require("path"));
|
|
10
|
+
const logger_1 = require("../utils/logger");
|
|
11
|
+
async function listCommand(options) {
|
|
12
|
+
const showTemplates = !options.modules || options.templates;
|
|
13
|
+
const showModules = !options.templates || options.modules;
|
|
14
|
+
try {
|
|
15
|
+
// List templates
|
|
16
|
+
if (showTemplates) {
|
|
17
|
+
const templatesDir = path_1.default.join(__dirname, '..', '..', '..', '..', 'templates');
|
|
18
|
+
const templates = await getAvailableTemplates(templatesDir);
|
|
19
|
+
logger_1.logger.log(chalk_1.default.bold('📦 Templates'));
|
|
20
|
+
logger_1.logger.newLine();
|
|
21
|
+
if (templates.length === 0) {
|
|
22
|
+
logger_1.logger.warn(' No templates found');
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
for (const template of templates) {
|
|
26
|
+
logger_1.logger.log(chalk_1.default.bold(` ${template.displayName}`));
|
|
27
|
+
logger_1.logger.log(chalk_1.default.gray(` ${template.description}`));
|
|
28
|
+
logger_1.logger.log(chalk_1.default.blue(` Command: stackkit init --template ${template.name}`));
|
|
29
|
+
logger_1.logger.log(chalk_1.default.gray(` Features: ${template.features.join(', ')}`));
|
|
30
|
+
logger_1.logger.newLine();
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
// List modules
|
|
35
|
+
if (showModules) {
|
|
36
|
+
const modulesDir = path_1.default.join(__dirname, '..', '..', '..', '..', 'modules');
|
|
37
|
+
const modules = await getAvailableModules(modulesDir);
|
|
38
|
+
logger_1.logger.log(chalk_1.default.bold('🔧 Modules'));
|
|
39
|
+
logger_1.logger.newLine();
|
|
40
|
+
if (modules.length === 0) {
|
|
41
|
+
logger_1.logger.warn(' No modules found');
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
// Group by category
|
|
45
|
+
const grouped = modules.reduce((acc, mod) => {
|
|
46
|
+
if (!acc[mod.category]) {
|
|
47
|
+
acc[mod.category] = [];
|
|
48
|
+
}
|
|
49
|
+
acc[mod.category].push(mod);
|
|
50
|
+
return acc;
|
|
51
|
+
}, {});
|
|
52
|
+
for (const [category, mods] of Object.entries(grouped)) {
|
|
53
|
+
logger_1.logger.log(chalk_1.default.yellow(` ${category.toUpperCase()}:`));
|
|
54
|
+
for (const mod of mods) {
|
|
55
|
+
logger_1.logger.log(chalk_1.default.bold(` ${mod.displayName}`));
|
|
56
|
+
logger_1.logger.log(chalk_1.default.gray(` ${mod.description}`));
|
|
57
|
+
logger_1.logger.log(chalk_1.default.blue(` Command: stackkit add ${mod.name}`));
|
|
58
|
+
logger_1.logger.log(chalk_1.default.gray(` Supports: ${mod.supportedFrameworks.join(', ')}`));
|
|
59
|
+
logger_1.logger.newLine();
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
logger_1.logger.error(`Failed to list resources: ${error.message}`);
|
|
67
|
+
process.exit(1);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
async function getAvailableTemplates(templatesDir) {
|
|
71
|
+
if (!(await fs_extra_1.default.pathExists(templatesDir))) {
|
|
72
|
+
return [];
|
|
73
|
+
}
|
|
74
|
+
const templateDirs = await fs_extra_1.default.readdir(templatesDir);
|
|
75
|
+
const templates = [];
|
|
76
|
+
for (const dir of templateDirs) {
|
|
77
|
+
const metadataPath = path_1.default.join(templatesDir, dir, 'template.json');
|
|
78
|
+
if (await fs_extra_1.default.pathExists(metadataPath)) {
|
|
79
|
+
const metadata = await fs_extra_1.default.readJSON(metadataPath);
|
|
80
|
+
templates.push(metadata);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return templates;
|
|
84
|
+
}
|
|
85
|
+
async function getAvailableModules(modulesDir) {
|
|
86
|
+
if (!(await fs_extra_1.default.pathExists(modulesDir))) {
|
|
87
|
+
return [];
|
|
88
|
+
}
|
|
89
|
+
const modules = [];
|
|
90
|
+
const categories = await fs_extra_1.default.readdir(modulesDir);
|
|
91
|
+
for (const category of categories) {
|
|
92
|
+
const categoryPath = path_1.default.join(modulesDir, category);
|
|
93
|
+
const stat = await fs_extra_1.default.stat(categoryPath);
|
|
94
|
+
if (!stat.isDirectory())
|
|
95
|
+
continue;
|
|
96
|
+
const moduleDirs = await fs_extra_1.default.readdir(categoryPath);
|
|
97
|
+
for (const moduleDir of moduleDirs) {
|
|
98
|
+
const metadataPath = path_1.default.join(categoryPath, moduleDir, 'module.json');
|
|
99
|
+
if (await fs_extra_1.default.pathExists(metadataPath)) {
|
|
100
|
+
const metadata = await fs_extra_1.default.readJSON(metadataPath);
|
|
101
|
+
modules.push(metadata);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return modules;
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":";;;;;AAWA,kCAiEC;AA5ED,kDAA0B;AAC1B,wDAA0B;AAC1B,gDAAwB;AAExB,4CAAyC;AAOlC,KAAK,UAAU,WAAW,CAAC,OAAoB;IACpD,MAAM,aAAa,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,SAAS,CAAC;IAC5D,MAAM,WAAW,GAAG,CAAC,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAE1D,IAAI,CAAC;QACH,iBAAiB;QACjB,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,YAAY,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;YAC/E,MAAM,SAAS,GAAG,MAAM,qBAAqB,CAAC,YAAY,CAAC,CAAC;YAE5D,eAAM,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;YACvC,eAAM,CAAC,OAAO,EAAE,CAAC;YAEjB,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3B,eAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;YACtC,CAAC;iBAAM,CAAC;gBACN,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;oBACjC,eAAM,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;oBACpD,eAAM,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,OAAO,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;oBACtD,eAAM,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,yCAAyC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;oBACjF,eAAM,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,iBAAiB,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;oBACxE,eAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,CAAC;YACH,CAAC;QACH,CAAC;QAED,eAAe;QACf,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;YAC3E,MAAM,OAAO,GAAG,MAAM,mBAAmB,CAAC,UAAU,CAAC,CAAC;YAEtD,eAAM,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;YACrC,eAAM,CAAC,OAAO,EAAE,CAAC;YAEjB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,eAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;YACpC,CAAC;iBAAM,CAAC;gBACN,oBAAoB;gBACpB,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAC5B,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;oBACX,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;wBACvB,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;oBACzB,CAAC;oBACD,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAC5B,OAAO,GAAG,CAAC;gBACb,CAAC,EACD,EAAsC,CACvC,CAAC;gBAEF,KAAK,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;oBACvD,eAAM,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC;oBACzD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;wBACvB,eAAM,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;wBACjD,eAAM,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;wBACnD,eAAM,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,+BAA+B,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;wBAClE,eAAM,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,mBAAmB,GAAG,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;wBAChF,eAAM,CAAC,OAAO,EAAE,CAAC;oBACnB,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,eAAM,CAAC,KAAK,CAAC,6BAA8B,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,qBAAqB,CAAC,YAAoB;IACvD,IAAI,CAAC,CAAC,MAAM,kBAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;QACzC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,kBAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACpD,MAAM,SAAS,GAAuB,EAAE,CAAC;IAEzC,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAC/B,MAAM,YAAY,GAAG,cAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE,eAAe,CAAC,CAAC;QACnE,IAAI,MAAM,kBAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YACtC,MAAM,QAAQ,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;YACjD,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,UAAkB;IACnD,IAAI,CAAC,CAAC,MAAM,kBAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;QACvC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,OAAO,GAAqB,EAAE,CAAC;IACrC,MAAM,UAAU,GAAG,MAAM,kBAAE,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAEhD,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE,CAAC;QAClC,MAAM,YAAY,GAAG,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACrD,MAAM,IAAI,GAAG,MAAM,kBAAE,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAEzC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YAAE,SAAS;QAElC,MAAM,UAAU,GAAG,MAAM,kBAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAElD,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,MAAM,YAAY,GAAG,cAAI,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;YACvE,IAAI,MAAM,kBAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;gBACtC,MAAM,QAAQ,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;gBACjD,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
|