codingbuddy 0.2.5 → 0.2.6
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/cli.types.d.ts +2 -0
- package/dist/src/cli/init/config.writer.d.ts +2 -1
- package/dist/src/cli/init/config.writer.js +11 -1
- package/dist/src/cli/init/config.writer.js.map +1 -1
- package/dist/src/cli/init/init.command.js +92 -36
- package/dist/src/cli/init/init.command.js.map +1 -1
- package/dist/src/cli/init/templates/frameworks/default.template.d.ts +2 -0
- package/dist/src/cli/init/templates/frameworks/default.template.js +75 -0
- package/dist/src/cli/init/templates/frameworks/default.template.js.map +1 -0
- package/dist/src/cli/init/templates/frameworks/express.template.d.ts +2 -0
- package/dist/src/cli/init/templates/frameworks/express.template.js +58 -0
- package/dist/src/cli/init/templates/frameworks/express.template.js.map +1 -0
- package/dist/src/cli/init/templates/frameworks/index.d.ts +9 -0
- package/dist/src/cli/init/templates/frameworks/index.js +24 -0
- package/dist/src/cli/init/templates/frameworks/index.js.map +1 -0
- package/dist/src/cli/init/templates/frameworks/nestjs.template.d.ts +2 -0
- package/dist/src/cli/init/templates/frameworks/nestjs.template.js +62 -0
- package/dist/src/cli/init/templates/frameworks/nestjs.template.js.map +1 -0
- package/dist/src/cli/init/templates/frameworks/nextjs.template.d.ts +2 -0
- package/dist/src/cli/init/templates/frameworks/nextjs.template.js +68 -0
- package/dist/src/cli/init/templates/frameworks/nextjs.template.js.map +1 -0
- package/dist/src/cli/init/templates/frameworks/node.template.d.ts +2 -0
- package/dist/src/cli/init/templates/frameworks/node.template.js +55 -0
- package/dist/src/cli/init/templates/frameworks/node.template.js.map +1 -0
- package/dist/src/cli/init/templates/frameworks/react.template.d.ts +2 -0
- package/dist/src/cli/init/templates/frameworks/react.template.js +61 -0
- package/dist/src/cli/init/templates/frameworks/react.template.js.map +1 -0
- package/dist/src/cli/init/templates/index.d.ts +4 -0
- package/dist/src/cli/init/templates/index.js +13 -0
- package/dist/src/cli/init/templates/index.js.map +1 -0
- package/dist/src/cli/init/templates/template.renderer.d.ts +3 -0
- package/dist/src/cli/init/templates/template.renderer.js +162 -0
- package/dist/src/cli/init/templates/template.renderer.js.map +1 -0
- package/dist/src/cli/init/templates/template.selector.d.ts +5 -0
- package/dist/src/cli/init/templates/template.selector.js +60 -0
- package/dist/src/cli/init/templates/template.selector.js.map +1 -0
- package/dist/src/cli/init/templates/template.types.d.ts +33 -0
- package/dist/src/cli/init/templates/template.types.js +3 -0
- package/dist/src/cli/init/templates/template.types.js.map +1 -0
- package/dist/src/config/config-diff.service.d.ts +23 -0
- package/dist/src/config/config-diff.service.js +166 -0
- package/dist/src/config/config-diff.service.js.map +1 -0
- package/dist/src/config/config.module.js +3 -2
- package/dist/src/config/config.module.js.map +1 -1
- package/dist/src/config/index.d.ts +2 -0
- package/dist/src/config/index.js +3 -1
- package/dist/src/config/index.js.map +1 -1
- package/dist/src/mcp/mcp.module.js +7 -1
- package/dist/src/mcp/mcp.module.js.map +1 -1
- package/dist/src/mcp/mcp.service.d.ts +6 -1
- package/dist/src/mcp/mcp.service.js +36 -2
- package/dist/src/mcp/mcp.service.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +2 -2
|
@@ -3,8 +3,9 @@ export declare const CONFIG_FILE_NAMES: readonly ["codingbuddy.config.js", "codi
|
|
|
3
3
|
export type ConfigFormat = 'js' | 'json';
|
|
4
4
|
export interface WriteConfigOptions {
|
|
5
5
|
format?: ConfigFormat;
|
|
6
|
+
raw?: boolean;
|
|
6
7
|
}
|
|
7
8
|
export declare function formatConfigAsJs(config: CodingBuddyConfig): string;
|
|
8
9
|
export declare function formatConfigAsJson(config: CodingBuddyConfig): string;
|
|
9
10
|
export declare function findExistingConfig(projectRoot: string): Promise<string | null>;
|
|
10
|
-
export declare function writeConfig(projectRoot: string, config: CodingBuddyConfig, options?: WriteConfigOptions): Promise<string>;
|
|
11
|
+
export declare function writeConfig(projectRoot: string, config: CodingBuddyConfig | string, options?: WriteConfigOptions): Promise<string>;
|
|
@@ -35,7 +35,17 @@ async function findExistingConfig(projectRoot) {
|
|
|
35
35
|
async function writeConfig(projectRoot, config, options = {}) {
|
|
36
36
|
const format = options.format ?? 'js';
|
|
37
37
|
const fileName = format === 'json' ? 'codingbuddy.config.json' : 'codingbuddy.config.js';
|
|
38
|
-
|
|
38
|
+
let content;
|
|
39
|
+
if (options.raw && typeof config === 'string') {
|
|
40
|
+
content = config;
|
|
41
|
+
}
|
|
42
|
+
else if (typeof config === 'object') {
|
|
43
|
+
content =
|
|
44
|
+
format === 'json' ? formatConfigAsJson(config) : formatConfigAsJs(config);
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
throw new Error('Invalid config: expected object or string with raw option');
|
|
48
|
+
}
|
|
39
49
|
const filePath = path.join(projectRoot, fileName);
|
|
40
50
|
await fs.writeFile(filePath, content, 'utf-8');
|
|
41
51
|
return filePath;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.writer.js","sourceRoot":"","sources":["../../../../src/cli/init/config.writer.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"config.writer.js","sourceRoot":"","sources":["../../../../src/cli/init/config.writer.ts"],"names":[],"mappings":";;;AAoCA,4CAMC;AAKD,gDAEC;AAOD,gDAaC;AAUD,kCA8BC;AAvGD,kCAAkC;AAClC,6BAA6B;AAMhB,QAAA,iBAAiB,GAAG;IAC/B,uBAAuB;IACvB,yBAAyB;CACjB,CAAC;AAoBX,SAAgB,gBAAgB,CAAC,MAAyB;IACxD,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAEpD,OAAO;mBACU,WAAW;CAC7B,CAAC;AACF,CAAC;AAKD,SAAgB,kBAAkB,CAAC,MAAyB;IAC1D,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;AAChD,CAAC;AAOM,KAAK,UAAU,kBAAkB,CACtC,WAAmB;IAEnB,KAAK,MAAM,QAAQ,IAAI,yBAAiB,EAAE,CAAC;QACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QAClD,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC1B,OAAO,QAAQ,CAAC;QAClB,CAAC;QAAC,MAAM,CAAC;QAET,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAUM,KAAK,UAAU,WAAW,CAC/B,WAAmB,EACnB,MAAkC,EAClC,UAA8B,EAAE;IAEhC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC;IAEtC,MAAM,QAAQ,GACZ,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,uBAAuB,CAAC;IAE1E,IAAI,OAAe,CAAC;IAEpB,IAAI,OAAO,CAAC,GAAG,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAE9C,OAAO,GAAG,MAAM,CAAC;IACnB,CAAC;SAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAEtC,OAAO;YACL,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC9E,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CACb,2DAA2D,CAC5D,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAElD,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAE/C,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -6,6 +6,7 @@ const analyzer_1 = require("../../analyzer");
|
|
|
6
6
|
const config_generator_1 = require("./config.generator");
|
|
7
7
|
const config_writer_1 = require("./config.writer");
|
|
8
8
|
const console_1 = require("../utils/console");
|
|
9
|
+
const templates_1 = require("./templates");
|
|
9
10
|
function getApiKey(options) {
|
|
10
11
|
if (options.apiKey) {
|
|
11
12
|
return options.apiKey;
|
|
@@ -15,18 +16,97 @@ function getApiKey(options) {
|
|
|
15
16
|
}
|
|
16
17
|
return null;
|
|
17
18
|
}
|
|
19
|
+
async function runTemplateInit(options, console) {
|
|
20
|
+
console.log.step('🔍', 'Analyzing project...');
|
|
21
|
+
const analyzer = new analyzer_1.AnalyzerService();
|
|
22
|
+
const analysis = await analyzer.analyzeProject(options.projectRoot);
|
|
23
|
+
console.log.success('Project analysis complete');
|
|
24
|
+
if (analysis.packageInfo) {
|
|
25
|
+
console.log.step('📦', `Package: ${analysis.packageInfo.name}`);
|
|
26
|
+
}
|
|
27
|
+
if (analysis.detectedPatterns.length > 0) {
|
|
28
|
+
console.log.step('🏗️', `Patterns: ${analysis.detectedPatterns.join(', ')}`);
|
|
29
|
+
}
|
|
30
|
+
console.log.step('📁', `Files: ${analysis.directoryStructure.totalFiles}`);
|
|
31
|
+
console.log.step('📋', 'Selecting template...');
|
|
32
|
+
const { template, reason, detectedFrameworks } = (0, templates_1.selectTemplate)(analysis);
|
|
33
|
+
console.log.success(`Template: ${template.metadata.name}`);
|
|
34
|
+
console.log.info(` ${reason}`);
|
|
35
|
+
if (detectedFrameworks.length > 0) {
|
|
36
|
+
console.log.info(` Detected: ${detectedFrameworks.join(', ')}`);
|
|
37
|
+
}
|
|
38
|
+
console.log.step('✨', 'Generating configuration...');
|
|
39
|
+
const projectName = analysis.packageInfo?.name;
|
|
40
|
+
const renderOptions = {
|
|
41
|
+
projectName,
|
|
42
|
+
language: options.language,
|
|
43
|
+
};
|
|
44
|
+
const configContent = options.format === 'json'
|
|
45
|
+
? (0, templates_1.renderConfigAsJson)(template, renderOptions)
|
|
46
|
+
: (0, templates_1.renderConfigAsJs)(template, renderOptions);
|
|
47
|
+
console.log.step('💾', 'Writing configuration file...');
|
|
48
|
+
const configPath = await (0, config_writer_1.writeConfig)(options.projectRoot, configContent, {
|
|
49
|
+
format: options.format,
|
|
50
|
+
raw: true,
|
|
51
|
+
});
|
|
52
|
+
console.log.success(`Configuration saved to ${configPath}`);
|
|
53
|
+
console.log.success('');
|
|
54
|
+
console.log.step('✅', `codingbuddy.config.${options.format} created!`);
|
|
55
|
+
console.log.info('');
|
|
56
|
+
console.log.info('Please review the generated configuration.');
|
|
57
|
+
console.log.info('');
|
|
58
|
+
console.log.info('💡 TIP: Use MCP tools to get config update suggestions');
|
|
59
|
+
console.log.info(' as your project evolves.');
|
|
60
|
+
return {
|
|
61
|
+
success: true,
|
|
62
|
+
configPath,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
async function runAiInit(options, console) {
|
|
66
|
+
const apiKey = getApiKey(options);
|
|
67
|
+
if (!apiKey) {
|
|
68
|
+
console.log.error('No API key provided for AI generation.');
|
|
69
|
+
console.log.info('Set ANTHROPIC_API_KEY environment variable or use --api-key option.');
|
|
70
|
+
console.log.info('');
|
|
71
|
+
console.log.info('💡 TIP: Run without --ai flag to use template-based generation');
|
|
72
|
+
console.log.info(' (no API key required)');
|
|
73
|
+
return {
|
|
74
|
+
success: false,
|
|
75
|
+
error: 'No API key provided. Set ANTHROPIC_API_KEY or remove --ai flag for template mode.',
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
console.log.step('🔍', 'Analyzing project...');
|
|
79
|
+
const analyzer = new analyzer_1.AnalyzerService();
|
|
80
|
+
const analysis = await analyzer.analyzeProject(options.projectRoot);
|
|
81
|
+
console.log.success('Project analysis complete');
|
|
82
|
+
if (analysis.packageInfo) {
|
|
83
|
+
console.log.step('📦', `Package: ${analysis.packageInfo.name}`);
|
|
84
|
+
}
|
|
85
|
+
if (analysis.detectedPatterns.length > 0) {
|
|
86
|
+
console.log.step('🏗️', `Patterns: ${analysis.detectedPatterns.join(', ')}`);
|
|
87
|
+
}
|
|
88
|
+
console.log.step('📁', `Files: ${analysis.directoryStructure.totalFiles}`);
|
|
89
|
+
console.log.step('🤖', 'AI is generating configuration...');
|
|
90
|
+
const generator = new config_generator_1.ConfigGenerator({ apiKey });
|
|
91
|
+
const config = await generator.generate(analysis);
|
|
92
|
+
console.log.success('Configuration generated');
|
|
93
|
+
console.log.step('💾', 'Writing configuration file...');
|
|
94
|
+
const configPath = await (0, config_writer_1.writeConfig)(options.projectRoot, config, {
|
|
95
|
+
format: options.format,
|
|
96
|
+
});
|
|
97
|
+
console.log.success(`Configuration saved to ${configPath}`);
|
|
98
|
+
console.log.success('');
|
|
99
|
+
console.log.step('✅', `codingbuddy.config.${options.format} created!`);
|
|
100
|
+
console.log.info('');
|
|
101
|
+
console.log.info('Please review the generated configuration.');
|
|
102
|
+
return {
|
|
103
|
+
success: true,
|
|
104
|
+
configPath,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
18
107
|
async function runInit(options) {
|
|
19
108
|
const console = (0, console_1.createConsoleUtils)();
|
|
20
109
|
try {
|
|
21
|
-
const apiKey = getApiKey(options);
|
|
22
|
-
if (!apiKey) {
|
|
23
|
-
console.log.error('No API key provided.');
|
|
24
|
-
console.log.info('Set ANTHROPIC_API_KEY environment variable or use --api-key option.');
|
|
25
|
-
return {
|
|
26
|
-
success: false,
|
|
27
|
-
error: 'No API key provided. Set ANTHROPIC_API_KEY environment variable.',
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
110
|
const existingConfig = await (0, config_writer_1.findExistingConfig)(options.projectRoot);
|
|
31
111
|
if (existingConfig && !options.force) {
|
|
32
112
|
console.log.error(`Configuration file already exists: ${existingConfig}`);
|
|
@@ -39,34 +119,10 @@ async function runInit(options) {
|
|
|
39
119
|
if (existingConfig && options.force) {
|
|
40
120
|
console.log.warn(`Overwriting existing config: ${existingConfig}`);
|
|
41
121
|
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
const analysis = await analyzer.analyzeProject(options.projectRoot);
|
|
45
|
-
console.log.success('Project analysis complete');
|
|
46
|
-
if (analysis.packageInfo) {
|
|
47
|
-
console.log.step('📦', `Package: ${analysis.packageInfo.name}`);
|
|
48
|
-
}
|
|
49
|
-
if (analysis.detectedPatterns.length > 0) {
|
|
50
|
-
console.log.step('🏗️', `Patterns: ${analysis.detectedPatterns.join(', ')}`);
|
|
122
|
+
if (options.useAi) {
|
|
123
|
+
return await runAiInit(options, console);
|
|
51
124
|
}
|
|
52
|
-
|
|
53
|
-
console.log.step('🤖', 'AI is generating configuration...');
|
|
54
|
-
const generator = new config_generator_1.ConfigGenerator({ apiKey });
|
|
55
|
-
const config = await generator.generate(analysis);
|
|
56
|
-
console.log.success('Configuration generated');
|
|
57
|
-
console.log.step('💾', 'Writing configuration file...');
|
|
58
|
-
const configPath = await (0, config_writer_1.writeConfig)(options.projectRoot, config, {
|
|
59
|
-
format: options.format,
|
|
60
|
-
});
|
|
61
|
-
console.log.success(`Configuration saved to ${configPath}`);
|
|
62
|
-
console.log.success('');
|
|
63
|
-
console.log.step('✅', `codingbuddy.config.${options.format} created!`);
|
|
64
|
-
console.log.info('');
|
|
65
|
-
console.log.info('Please review the generated configuration.');
|
|
66
|
-
return {
|
|
67
|
-
success: true,
|
|
68
|
-
configPath,
|
|
69
|
-
};
|
|
125
|
+
return await runTemplateInit(options, console);
|
|
70
126
|
}
|
|
71
127
|
catch (error) {
|
|
72
128
|
const message = error instanceof Error ? error.message : String(error);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.command.js","sourceRoot":"","sources":["../../../../src/cli/init/init.command.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"init.command.js","sourceRoot":"","sources":["../../../../src/cli/init/init.command.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.defaultTemplate = void 0;
|
|
4
|
+
exports.defaultTemplate = {
|
|
5
|
+
metadata: {
|
|
6
|
+
id: 'default',
|
|
7
|
+
name: 'Default',
|
|
8
|
+
description: 'Generic project template',
|
|
9
|
+
matchPatterns: [],
|
|
10
|
+
},
|
|
11
|
+
config: {
|
|
12
|
+
language: 'ko',
|
|
13
|
+
techStack: {},
|
|
14
|
+
architecture: {},
|
|
15
|
+
conventions: {
|
|
16
|
+
naming: {
|
|
17
|
+
files: 'kebab-case',
|
|
18
|
+
functions: 'camelCase',
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
testStrategy: {
|
|
22
|
+
approach: 'tdd',
|
|
23
|
+
coverage: 90,
|
|
24
|
+
mockingStrategy: 'minimal',
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
comments: {
|
|
28
|
+
header: `// ============================================================
|
|
29
|
+
// CodingBuddy Configuration
|
|
30
|
+
// 프로젝트 설정 파일
|
|
31
|
+
//
|
|
32
|
+
// 이 파일은 AI 코딩 어시스턴트가 프로젝트 컨텍스트를 이해하는 데 사용됩니다.
|
|
33
|
+
// 프로젝트에 맞게 값을 수정하세요.
|
|
34
|
+
// ============================================================`,
|
|
35
|
+
language: `// 🌍 언어 설정
|
|
36
|
+
// AI 응답 언어를 지정합니다. ('ko', 'en', 'ja' 등)`,
|
|
37
|
+
projectInfo: `// 📦 프로젝트 정보
|
|
38
|
+
// projectName: 프로젝트 이름
|
|
39
|
+
// description: 프로젝트 설명`,
|
|
40
|
+
techStack: `// 🛠️ 기술 스택
|
|
41
|
+
// 프로젝트에서 사용하는 기술을 정의하세요.
|
|
42
|
+
//
|
|
43
|
+
// techStack: {
|
|
44
|
+
// languages: ['TypeScript', 'Python'],
|
|
45
|
+
// frontend: ['React', 'Next.js'],
|
|
46
|
+
// backend: ['NestJS', 'FastAPI'],
|
|
47
|
+
// database: ['PostgreSQL', 'Redis'],
|
|
48
|
+
// infrastructure: ['Docker', 'AWS'],
|
|
49
|
+
// tools: ['GitHub Actions', 'Sentry'],
|
|
50
|
+
// }`,
|
|
51
|
+
architecture: `// 🏗️ 아키텍처
|
|
52
|
+
// 프로젝트 구조와 패턴을 정의합니다.
|
|
53
|
+
//
|
|
54
|
+
// architecture: {
|
|
55
|
+
// pattern: 'feature-based', // 'layered', 'clean', 'modular'
|
|
56
|
+
// componentStyle: 'grouped', // 'flat', 'feature-based'
|
|
57
|
+
// structure: ['src', 'lib', 'tests'],
|
|
58
|
+
// }`,
|
|
59
|
+
conventions: `// 📝 코딩 컨벤션
|
|
60
|
+
// 네이밍 규칙 및 코드 스타일을 정의합니다.`,
|
|
61
|
+
testStrategy: `// 🧪 테스트 전략
|
|
62
|
+
// approach: 'tdd' (테스트 먼저) | 'test-after' (구현 후 테스트) | 'mixed'
|
|
63
|
+
// coverage: 목표 테스트 커버리지 (%)
|
|
64
|
+
// mockingStrategy: 'minimal' (최소 모킹) | 'no-mocks' | 'extensive'`,
|
|
65
|
+
footer: `// ============================================================
|
|
66
|
+
// 💡 TIP: MCP 사용 시 동기화
|
|
67
|
+
//
|
|
68
|
+
// codingbuddy MCP가 프로젝트를 분석하여 설정 업데이트를 제안합니다.
|
|
69
|
+
// 프로젝트가 변경되면 'suggest_config_updates' 도구로 확인하세요.
|
|
70
|
+
//
|
|
71
|
+
// 📚 문서: https://github.com/anthropics/codingbuddy
|
|
72
|
+
// ============================================================`,
|
|
73
|
+
},
|
|
74
|
+
};
|
|
75
|
+
//# sourceMappingURL=default.template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"default.template.js","sourceRoot":"","sources":["../../../../../../src/cli/init/templates/frameworks/default.template.ts"],"names":[],"mappings":";;;AAMa,QAAA,eAAe,GAAmB;IAC7C,QAAQ,EAAE;QACR,EAAE,EAAE,SAAS;QACb,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,0BAA0B;QACvC,aAAa,EAAE,EAAE;KAClB;IACD,MAAM,EAAE;QACN,QAAQ,EAAE,IAAI;QACd,SAAS,EAAE,EAAE;QACb,YAAY,EAAE,EAAE;QAChB,WAAW,EAAE;YACX,MAAM,EAAE;gBACN,KAAK,EAAE,YAAY;gBACnB,SAAS,EAAE,WAAW;aACvB;SACF;QACD,YAAY,EAAE;YACZ,QAAQ,EAAE,KAAK;YACf,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,SAAS;SAC3B;KACF;IACD,QAAQ,EAAE;QACR,MAAM,EAAE;;;;;;gEAMoD;QAC5D,QAAQ,EAAE;2CAC6B;QACvC,WAAW,EAAE;;0BAES;QACtB,SAAS,EAAE;;;;;;;;;;OAUR;QACH,YAAY,EAAE;;;;;;;OAOX;QACH,WAAW,EAAE;6BACY;QACzB,YAAY,EAAE;;;mEAGiD;QAC/D,MAAM,EAAE;;;;;;;kEAOsD;KAC/D;CACF,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.expressTemplate = void 0;
|
|
4
|
+
exports.expressTemplate = {
|
|
5
|
+
metadata: {
|
|
6
|
+
id: 'express',
|
|
7
|
+
name: 'Express',
|
|
8
|
+
description: 'Express.js backend API server',
|
|
9
|
+
matchPatterns: ['express', 'fastify', 'koa'],
|
|
10
|
+
},
|
|
11
|
+
config: {
|
|
12
|
+
language: 'ko',
|
|
13
|
+
techStack: {
|
|
14
|
+
languages: ['TypeScript'],
|
|
15
|
+
backend: ['Express'],
|
|
16
|
+
},
|
|
17
|
+
architecture: {
|
|
18
|
+
pattern: 'layered',
|
|
19
|
+
structure: ['routes', 'controllers', 'services', 'models'],
|
|
20
|
+
},
|
|
21
|
+
conventions: {
|
|
22
|
+
naming: {
|
|
23
|
+
files: 'kebab-case',
|
|
24
|
+
functions: 'camelCase',
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
testStrategy: {
|
|
28
|
+
approach: 'tdd',
|
|
29
|
+
coverage: 90,
|
|
30
|
+
mockingStrategy: 'minimal',
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
comments: {
|
|
34
|
+
header: `// ============================================================
|
|
35
|
+
// CodingBuddy Configuration
|
|
36
|
+
// Express 프로젝트용 설정 파일
|
|
37
|
+
//
|
|
38
|
+
// 이 파일은 AI 코딩 어시스턴트가 프로젝트 컨텍스트를 이해하는 데 사용됩니다.
|
|
39
|
+
// 프로젝트에 맞게 값을 수정하세요.
|
|
40
|
+
// ============================================================`,
|
|
41
|
+
language: `// 🌍 언어 설정`,
|
|
42
|
+
projectInfo: `// 📦 프로젝트 정보`,
|
|
43
|
+
techStack: `// 🛠️ 기술 스택
|
|
44
|
+
// 미들웨어 및 데이터베이스를 추가하세요.
|
|
45
|
+
// 예: backend: ['Express', 'Passport'], database: ['MongoDB']`,
|
|
46
|
+
architecture: `// 🏗️ 아키텍처
|
|
47
|
+
// Express는 routes → controllers → services → models 패턴을 권장합니다.`,
|
|
48
|
+
conventions: `// 📝 코딩 컨벤션`,
|
|
49
|
+
testStrategy: `// 🧪 테스트 전략
|
|
50
|
+
// supertest를 사용한 API 테스트를 권장합니다.`,
|
|
51
|
+
footer: `// ============================================================
|
|
52
|
+
// 💡 TIP: MCP 사용 시 동기화
|
|
53
|
+
//
|
|
54
|
+
// codingbuddy MCP가 프로젝트를 분석하여 설정 업데이트를 제안합니다.
|
|
55
|
+
// ============================================================`,
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
//# sourceMappingURL=express.template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"express.template.js","sourceRoot":"","sources":["../../../../../../src/cli/init/templates/frameworks/express.template.ts"],"names":[],"mappings":";;;AAMa,QAAA,eAAe,GAAmB;IAC7C,QAAQ,EAAE;QACR,EAAE,EAAE,SAAS;QACb,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,+BAA+B;QAC5C,aAAa,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC;KAC7C;IACD,MAAM,EAAE;QACN,QAAQ,EAAE,IAAI;QACd,SAAS,EAAE;YACT,SAAS,EAAE,CAAC,YAAY,CAAC;YACzB,OAAO,EAAE,CAAC,SAAS,CAAC;SACrB;QACD,YAAY,EAAE;YACZ,OAAO,EAAE,SAAS;YAClB,SAAS,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,CAAC;SAC3D;QACD,WAAW,EAAE;YACX,MAAM,EAAE;gBACN,KAAK,EAAE,YAAY;gBACnB,SAAS,EAAE,WAAW;aACvB;SACF;QACD,YAAY,EAAE;YACZ,QAAQ,EAAE,KAAK;YACf,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,SAAS;SAC3B;KACF;IACD,QAAQ,EAAE;QACR,MAAM,EAAE;;;;;;gEAMoD;QAC5D,QAAQ,EAAE,aAAa;QACvB,WAAW,EAAE,eAAe;QAC5B,SAAS,EAAE;;gEAEiD;QAC5D,YAAY,EAAE;kEACgD;QAC9D,WAAW,EAAE,cAAc;QAC3B,YAAY,EAAE;oCACkB;QAChC,MAAM,EAAE;;;;kEAIsD;KAC/D;CACF,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ConfigTemplate } from '../template.types';
|
|
2
|
+
import { nextjsTemplate } from './nextjs.template';
|
|
3
|
+
import { reactTemplate } from './react.template';
|
|
4
|
+
import { nestjsTemplate } from './nestjs.template';
|
|
5
|
+
import { expressTemplate } from './express.template';
|
|
6
|
+
import { nodeTemplate } from './node.template';
|
|
7
|
+
import { defaultTemplate } from './default.template';
|
|
8
|
+
export declare const TEMPLATES: ConfigTemplate[];
|
|
9
|
+
export { nextjsTemplate, reactTemplate, nestjsTemplate, expressTemplate, nodeTemplate, defaultTemplate, };
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.defaultTemplate = exports.nodeTemplate = exports.expressTemplate = exports.nestjsTemplate = exports.reactTemplate = exports.nextjsTemplate = exports.TEMPLATES = void 0;
|
|
4
|
+
const nextjs_template_1 = require("./nextjs.template");
|
|
5
|
+
Object.defineProperty(exports, "nextjsTemplate", { enumerable: true, get: function () { return nextjs_template_1.nextjsTemplate; } });
|
|
6
|
+
const react_template_1 = require("./react.template");
|
|
7
|
+
Object.defineProperty(exports, "reactTemplate", { enumerable: true, get: function () { return react_template_1.reactTemplate; } });
|
|
8
|
+
const nestjs_template_1 = require("./nestjs.template");
|
|
9
|
+
Object.defineProperty(exports, "nestjsTemplate", { enumerable: true, get: function () { return nestjs_template_1.nestjsTemplate; } });
|
|
10
|
+
const express_template_1 = require("./express.template");
|
|
11
|
+
Object.defineProperty(exports, "expressTemplate", { enumerable: true, get: function () { return express_template_1.expressTemplate; } });
|
|
12
|
+
const node_template_1 = require("./node.template");
|
|
13
|
+
Object.defineProperty(exports, "nodeTemplate", { enumerable: true, get: function () { return node_template_1.nodeTemplate; } });
|
|
14
|
+
const default_template_1 = require("./default.template");
|
|
15
|
+
Object.defineProperty(exports, "defaultTemplate", { enumerable: true, get: function () { return default_template_1.defaultTemplate; } });
|
|
16
|
+
exports.TEMPLATES = [
|
|
17
|
+
nextjs_template_1.nextjsTemplate,
|
|
18
|
+
react_template_1.reactTemplate,
|
|
19
|
+
nestjs_template_1.nestjsTemplate,
|
|
20
|
+
express_template_1.expressTemplate,
|
|
21
|
+
node_template_1.nodeTemplate,
|
|
22
|
+
default_template_1.defaultTemplate,
|
|
23
|
+
];
|
|
24
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/cli/init/templates/frameworks/index.ts"],"names":[],"mappings":";;;AAOA,uDAAmD;AAqBjD,+FArBO,gCAAc,OAqBP;AApBhB,qDAAiD;AAqB/C,8FArBO,8BAAa,OAqBP;AApBf,uDAAmD;AAqBjD,+FArBO,gCAAc,OAqBP;AApBhB,yDAAqD;AAqBnD,gGArBO,kCAAe,OAqBP;AApBjB,mDAA+C;AAqB7C,6FArBO,4BAAY,OAqBP;AApBd,yDAAqD;AAqBnD,gGArBO,kCAAe,OAqBP;AAhBJ,QAAA,SAAS,GAAqB;IACzC,gCAAc;IACd,8BAAa;IACb,gCAAc;IACd,kCAAe;IACf,4BAAY;IACZ,kCAAe;CAChB,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.nestjsTemplate = void 0;
|
|
4
|
+
exports.nestjsTemplate = {
|
|
5
|
+
metadata: {
|
|
6
|
+
id: 'nestjs',
|
|
7
|
+
name: 'NestJS',
|
|
8
|
+
description: 'NestJS backend framework with dependency injection',
|
|
9
|
+
matchPatterns: ['@nestjs/core', 'nestjs'],
|
|
10
|
+
},
|
|
11
|
+
config: {
|
|
12
|
+
language: 'ko',
|
|
13
|
+
techStack: {
|
|
14
|
+
languages: ['TypeScript'],
|
|
15
|
+
backend: ['NestJS'],
|
|
16
|
+
},
|
|
17
|
+
architecture: {
|
|
18
|
+
pattern: 'layered',
|
|
19
|
+
structure: ['modules', 'controllers', 'services', 'repositories'],
|
|
20
|
+
},
|
|
21
|
+
conventions: {
|
|
22
|
+
naming: {
|
|
23
|
+
files: 'kebab-case',
|
|
24
|
+
components: 'PascalCase',
|
|
25
|
+
functions: 'camelCase',
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
testStrategy: {
|
|
29
|
+
approach: 'tdd',
|
|
30
|
+
coverage: 90,
|
|
31
|
+
mockingStrategy: 'minimal',
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
comments: {
|
|
35
|
+
header: `// ============================================================
|
|
36
|
+
// CodingBuddy Configuration
|
|
37
|
+
// NestJS 프로젝트용 설정 파일
|
|
38
|
+
//
|
|
39
|
+
// 이 파일은 AI 코딩 어시스턴트가 프로젝트 컨텍스트를 이해하는 데 사용됩니다.
|
|
40
|
+
// 프로젝트에 맞게 값을 수정하세요.
|
|
41
|
+
// ============================================================`,
|
|
42
|
+
language: `// 🌍 언어 설정`,
|
|
43
|
+
projectInfo: `// 📦 프로젝트 정보`,
|
|
44
|
+
techStack: `// 🛠️ 기술 스택
|
|
45
|
+
// NestJS 모듈 및 데이터베이스를 추가하세요.
|
|
46
|
+
// 예: backend: ['NestJS', 'TypeORM'], database: ['PostgreSQL']`,
|
|
47
|
+
architecture: `// 🏗️ 아키텍처
|
|
48
|
+
// NestJS는 모듈 기반 레이어드 아키텍처를 사용합니다.
|
|
49
|
+
// structure: 프로젝트 레이어 구조`,
|
|
50
|
+
conventions: `// 📝 코딩 컨벤션
|
|
51
|
+
// NestJS 공식 스타일 가이드를 따릅니다.`,
|
|
52
|
+
testStrategy: `// 🧪 테스트 전략
|
|
53
|
+
// NestJS의 @nestjs/testing 모듈을 활용합니다.
|
|
54
|
+
// e2e 테스트는 test/ 디렉토리에 위치합니다.`,
|
|
55
|
+
footer: `// ============================================================
|
|
56
|
+
// 💡 TIP: MCP 사용 시 동기화
|
|
57
|
+
//
|
|
58
|
+
// codingbuddy MCP가 프로젝트를 분석하여 설정 업데이트를 제안합니다.
|
|
59
|
+
// ============================================================`,
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
//# sourceMappingURL=nestjs.template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nestjs.template.js","sourceRoot":"","sources":["../../../../../../src/cli/init/templates/frameworks/nestjs.template.ts"],"names":[],"mappings":";;;AAMa,QAAA,cAAc,GAAmB;IAC5C,QAAQ,EAAE;QACR,EAAE,EAAE,QAAQ;QACZ,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,oDAAoD;QACjE,aAAa,EAAE,CAAC,cAAc,EAAE,QAAQ,CAAC;KAC1C;IACD,MAAM,EAAE;QACN,QAAQ,EAAE,IAAI;QACd,SAAS,EAAE;YACT,SAAS,EAAE,CAAC,YAAY,CAAC;YACzB,OAAO,EAAE,CAAC,QAAQ,CAAC;SACpB;QACD,YAAY,EAAE;YACZ,OAAO,EAAE,SAAS;YAClB,SAAS,EAAE,CAAC,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,cAAc,CAAC;SAClE;QACD,WAAW,EAAE;YACX,MAAM,EAAE;gBACN,KAAK,EAAE,YAAY;gBACnB,UAAU,EAAE,YAAY;gBACxB,SAAS,EAAE,WAAW;aACvB;SACF;QACD,YAAY,EAAE;YACZ,QAAQ,EAAE,KAAK;YACf,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,SAAS;SAC3B;KACF;IACD,QAAQ,EAAE;QACR,MAAM,EAAE;;;;;;gEAMoD;QAC5D,QAAQ,EAAE,aAAa;QACvB,WAAW,EAAE,eAAe;QAC5B,SAAS,EAAE;;iEAEkD;QAC7D,YAAY,EAAE;;4BAEU;QACxB,WAAW,EAAE;8BACa;QAC1B,YAAY,EAAE;;iCAEe;QAC7B,MAAM,EAAE;;;;kEAIsD;KAC/D;CACF,CAAC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.nextjsTemplate = void 0;
|
|
4
|
+
exports.nextjsTemplate = {
|
|
5
|
+
metadata: {
|
|
6
|
+
id: 'nextjs',
|
|
7
|
+
name: 'Next.js',
|
|
8
|
+
description: 'Next.js fullstack React framework with App Router',
|
|
9
|
+
matchPatterns: ['next', 'nextjs'],
|
|
10
|
+
},
|
|
11
|
+
config: {
|
|
12
|
+
language: 'ko',
|
|
13
|
+
techStack: {
|
|
14
|
+
languages: ['TypeScript'],
|
|
15
|
+
frontend: ['React', 'Next.js'],
|
|
16
|
+
},
|
|
17
|
+
architecture: {
|
|
18
|
+
pattern: 'feature-based',
|
|
19
|
+
componentStyle: 'grouped',
|
|
20
|
+
},
|
|
21
|
+
conventions: {
|
|
22
|
+
naming: {
|
|
23
|
+
files: 'kebab-case',
|
|
24
|
+
components: 'PascalCase',
|
|
25
|
+
functions: 'camelCase',
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
testStrategy: {
|
|
29
|
+
approach: 'tdd',
|
|
30
|
+
coverage: 90,
|
|
31
|
+
mockingStrategy: 'minimal',
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
comments: {
|
|
35
|
+
header: `// ============================================================
|
|
36
|
+
// CodingBuddy Configuration
|
|
37
|
+
// Next.js 프로젝트용 설정 파일
|
|
38
|
+
//
|
|
39
|
+
// 이 파일은 AI 코딩 어시스턴트가 프로젝트 컨텍스트를 이해하는 데 사용됩니다.
|
|
40
|
+
// 프로젝트에 맞게 값을 수정하세요.
|
|
41
|
+
// ============================================================`,
|
|
42
|
+
language: `// 🌍 언어 설정
|
|
43
|
+
// AI 응답 언어를 지정합니다. ('ko', 'en', 'ja' 등)`,
|
|
44
|
+
projectInfo: `// 📦 프로젝트 정보
|
|
45
|
+
// projectName, description은 자동 감지되며 필요시 수정하세요.`,
|
|
46
|
+
techStack: `// 🛠️ 기술 스택
|
|
47
|
+
// 자동 감지된 값입니다. 추가 기술이 있으면 배열에 추가하세요.
|
|
48
|
+
// 예: backend: ['Prisma', 'tRPC'], database: ['PostgreSQL']`,
|
|
49
|
+
architecture: `// 🏗️ 아키텍처
|
|
50
|
+
// pattern: 'feature-based' | 'layered' | 'clean' | 'modular'
|
|
51
|
+
// componentStyle: 'flat' | 'grouped' | 'feature-based'`,
|
|
52
|
+
conventions: `// 📝 코딩 컨벤션
|
|
53
|
+
// 프로젝트의 네이밍 규칙을 정의합니다.`,
|
|
54
|
+
testStrategy: `// 🧪 테스트 전략
|
|
55
|
+
// approach: 'tdd' (테스트 먼저) | 'test-after' | 'mixed'
|
|
56
|
+
// coverage: 목표 테스트 커버리지 (%)
|
|
57
|
+
// mockingStrategy: 'minimal' | 'no-mocks' | 'extensive'`,
|
|
58
|
+
footer: `// ============================================================
|
|
59
|
+
// 💡 TIP: MCP 사용 시 동기화
|
|
60
|
+
//
|
|
61
|
+
// codingbuddy MCP가 프로젝트를 분석하여 설정 업데이트를 제안합니다.
|
|
62
|
+
// 새로운 의존성 추가 시 'suggest_config_updates' 도구로 확인하세요.
|
|
63
|
+
//
|
|
64
|
+
// 📚 문서: https://github.com/anthropics/codingbuddy
|
|
65
|
+
// ============================================================`,
|
|
66
|
+
},
|
|
67
|
+
};
|
|
68
|
+
//# sourceMappingURL=nextjs.template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nextjs.template.js","sourceRoot":"","sources":["../../../../../../src/cli/init/templates/frameworks/nextjs.template.ts"],"names":[],"mappings":";;;AAMa,QAAA,cAAc,GAAmB;IAC5C,QAAQ,EAAE;QACR,EAAE,EAAE,QAAQ;QACZ,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,mDAAmD;QAChE,aAAa,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC;KAClC;IACD,MAAM,EAAE;QACN,QAAQ,EAAE,IAAI;QACd,SAAS,EAAE;YACT,SAAS,EAAE,CAAC,YAAY,CAAC;YACzB,QAAQ,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC;SAC/B;QACD,YAAY,EAAE;YACZ,OAAO,EAAE,eAAe;YACxB,cAAc,EAAE,SAAS;SAC1B;QACD,WAAW,EAAE;YACX,MAAM,EAAE;gBACN,KAAK,EAAE,YAAY;gBACnB,UAAU,EAAE,YAAY;gBACxB,SAAS,EAAE,WAAW;aACvB;SACF;QACD,YAAY,EAAE;YACZ,QAAQ,EAAE,KAAK;YACf,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,SAAS;SAC3B;KACF;IACD,QAAQ,EAAE;QACR,MAAM,EAAE;;;;;;gEAMoD;QAC5D,QAAQ,EAAE;2CAC6B;QACvC,WAAW,EAAE;kDACiC;QAC9C,SAAS,EAAE;;8DAE+C;QAC1D,YAAY,EAAE;;0DAEwC;QACtD,WAAW,EAAE;0BACS;QACtB,YAAY,EAAE;;;2DAGyC;QACvD,MAAM,EAAE;;;;;;;kEAOsD;KAC/D;CACF,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.nodeTemplate = void 0;
|
|
4
|
+
exports.nodeTemplate = {
|
|
5
|
+
metadata: {
|
|
6
|
+
id: 'node',
|
|
7
|
+
name: 'Node.js',
|
|
8
|
+
description: 'Generic Node.js project (CLI tools, libraries, etc.)',
|
|
9
|
+
matchPatterns: ['node', 'nodejs'],
|
|
10
|
+
},
|
|
11
|
+
config: {
|
|
12
|
+
language: 'ko',
|
|
13
|
+
techStack: {
|
|
14
|
+
languages: ['TypeScript'],
|
|
15
|
+
},
|
|
16
|
+
architecture: {
|
|
17
|
+
pattern: 'modular',
|
|
18
|
+
},
|
|
19
|
+
conventions: {
|
|
20
|
+
naming: {
|
|
21
|
+
files: 'kebab-case',
|
|
22
|
+
functions: 'camelCase',
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
testStrategy: {
|
|
26
|
+
approach: 'tdd',
|
|
27
|
+
coverage: 90,
|
|
28
|
+
mockingStrategy: 'minimal',
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
comments: {
|
|
32
|
+
header: `// ============================================================
|
|
33
|
+
// CodingBuddy Configuration
|
|
34
|
+
// Node.js 프로젝트용 설정 파일
|
|
35
|
+
//
|
|
36
|
+
// 이 파일은 AI 코딩 어시스턴트가 프로젝트 컨텍스트를 이해하는 데 사용됩니다.
|
|
37
|
+
// 프로젝트에 맞게 값을 수정하세요.
|
|
38
|
+
// ============================================================`,
|
|
39
|
+
language: `// 🌍 언어 설정`,
|
|
40
|
+
projectInfo: `// 📦 프로젝트 정보`,
|
|
41
|
+
techStack: `// 🛠️ 기술 스택
|
|
42
|
+
// 사용하는 라이브러리를 추가하세요.
|
|
43
|
+
// 예: tools: ['Commander', 'Chalk']`,
|
|
44
|
+
architecture: `// 🏗️ 아키텍처
|
|
45
|
+
// pattern: 'modular' | 'layered' | 'plugin-based'`,
|
|
46
|
+
conventions: `// 📝 코딩 컨벤션`,
|
|
47
|
+
testStrategy: `// 🧪 테스트 전략`,
|
|
48
|
+
footer: `// ============================================================
|
|
49
|
+
// 💡 TIP: MCP 사용 시 동기화
|
|
50
|
+
//
|
|
51
|
+
// codingbuddy MCP가 프로젝트를 분석하여 설정 업데이트를 제안합니다.
|
|
52
|
+
// ============================================================`,
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
//# sourceMappingURL=node.template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node.template.js","sourceRoot":"","sources":["../../../../../../src/cli/init/templates/frameworks/node.template.ts"],"names":[],"mappings":";;;AAMa,QAAA,YAAY,GAAmB;IAC1C,QAAQ,EAAE;QACR,EAAE,EAAE,MAAM;QACV,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,sDAAsD;QACnE,aAAa,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC;KAClC;IACD,MAAM,EAAE;QACN,QAAQ,EAAE,IAAI;QACd,SAAS,EAAE;YACT,SAAS,EAAE,CAAC,YAAY,CAAC;SAC1B;QACD,YAAY,EAAE;YACZ,OAAO,EAAE,SAAS;SACnB;QACD,WAAW,EAAE;YACX,MAAM,EAAE;gBACN,KAAK,EAAE,YAAY;gBACnB,SAAS,EAAE,WAAW;aACvB;SACF;QACD,YAAY,EAAE;YACZ,QAAQ,EAAE,KAAK;YACf,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,SAAS;SAC3B;KACF;IACD,QAAQ,EAAE;QACR,MAAM,EAAE;;;;;;gEAMoD;QAC5D,QAAQ,EAAE,aAAa;QACvB,WAAW,EAAE,eAAe;QAC5B,SAAS,EAAE;;sCAEuB;QAClC,YAAY,EAAE;qDACmC;QACjD,WAAW,EAAE,cAAc;QAC3B,YAAY,EAAE,cAAc;QAC5B,MAAM,EAAE;;;;kEAIsD;KAC/D;CACF,CAAC"}
|