codingbuddy 0.0.0-dev.20251218084041.e5f3ffe → 0.0.0-dev.20251218092414.9ab52bd

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/dist/src/analyzer/analyzer.module.d.ts +2 -0
  2. package/dist/src/analyzer/analyzer.module.js +21 -0
  3. package/dist/src/analyzer/analyzer.module.js.map +1 -0
  4. package/dist/src/analyzer/analyzer.service.d.ts +10 -0
  5. package/dist/src/analyzer/analyzer.service.js +73 -0
  6. package/dist/src/analyzer/analyzer.service.js.map +1 -0
  7. package/dist/src/analyzer/analyzer.service.spec.d.ts +1 -0
  8. package/dist/src/analyzer/analyzer.service.spec.js +67 -0
  9. package/dist/src/analyzer/analyzer.service.spec.js.map +1 -0
  10. package/dist/src/analyzer/analyzer.types.d.ts +70 -0
  11. package/dist/src/analyzer/analyzer.types.js +3 -0
  12. package/dist/src/analyzer/analyzer.types.js.map +1 -0
  13. package/dist/src/analyzer/code.sampler.d.ts +7 -0
  14. package/dist/src/analyzer/code.sampler.js +200 -0
  15. package/dist/src/analyzer/code.sampler.js.map +1 -0
  16. package/dist/src/analyzer/code.sampler.spec.d.ts +1 -0
  17. package/dist/src/analyzer/code.sampler.spec.js +153 -0
  18. package/dist/src/analyzer/code.sampler.spec.js.map +1 -0
  19. package/dist/src/analyzer/config.analyzer.d.ts +7 -0
  20. package/dist/src/analyzer/config.analyzer.js +178 -0
  21. package/dist/src/analyzer/config.analyzer.js.map +1 -0
  22. package/dist/src/analyzer/config.analyzer.spec.d.ts +1 -0
  23. package/dist/src/analyzer/config.analyzer.spec.js +146 -0
  24. package/dist/src/analyzer/config.analyzer.spec.js.map +1 -0
  25. package/dist/src/analyzer/directory.analyzer.d.ts +12 -0
  26. package/dist/src/analyzer/directory.analyzer.js +149 -0
  27. package/dist/src/analyzer/directory.analyzer.js.map +1 -0
  28. package/dist/src/analyzer/directory.analyzer.spec.d.ts +1 -0
  29. package/dist/src/analyzer/directory.analyzer.spec.js +119 -0
  30. package/dist/src/analyzer/directory.analyzer.spec.js.map +1 -0
  31. package/dist/src/analyzer/index.d.ts +7 -0
  32. package/dist/src/analyzer/index.js +32 -0
  33. package/dist/src/analyzer/index.js.map +1 -0
  34. package/dist/src/analyzer/package.analyzer.d.ts +12 -0
  35. package/dist/src/analyzer/package.analyzer.js +118 -0
  36. package/dist/src/analyzer/package.analyzer.js.map +1 -0
  37. package/dist/src/analyzer/package.analyzer.spec.d.ts +1 -0
  38. package/dist/src/analyzer/package.analyzer.spec.js +109 -0
  39. package/dist/src/analyzer/package.analyzer.spec.js.map +1 -0
  40. package/dist/src/config/config.loader.d.ts +22 -0
  41. package/dist/src/config/config.loader.js +105 -0
  42. package/dist/src/config/config.loader.js.map +1 -0
  43. package/dist/src/config/config.loader.spec.d.ts +1 -0
  44. package/dist/src/config/config.loader.spec.js +86 -0
  45. package/dist/src/config/config.loader.spec.js.map +1 -0
  46. package/dist/src/config/config.module.d.ts +2 -0
  47. package/dist/src/config/config.module.js +21 -0
  48. package/dist/src/config/config.module.js.map +1 -0
  49. package/dist/src/config/config.schema.d.ts +24 -24
  50. package/dist/src/config/config.service.d.ts +33 -0
  51. package/dist/src/config/config.service.js +126 -0
  52. package/dist/src/config/config.service.js.map +1 -0
  53. package/dist/src/config/context.loader.d.ts +24 -0
  54. package/dist/src/config/context.loader.js +153 -0
  55. package/dist/src/config/context.loader.js.map +1 -0
  56. package/dist/src/config/context.loader.spec.d.ts +1 -0
  57. package/dist/src/config/context.loader.spec.js +123 -0
  58. package/dist/src/config/context.loader.spec.js.map +1 -0
  59. package/dist/src/config/ignore.parser.d.ts +12 -0
  60. package/dist/src/config/ignore.parser.js +134 -0
  61. package/dist/src/config/ignore.parser.js.map +1 -0
  62. package/dist/src/config/ignore.parser.spec.d.ts +1 -0
  63. package/dist/src/config/ignore.parser.spec.js +130 -0
  64. package/dist/src/config/ignore.parser.spec.js.map +1 -0
  65. package/dist/src/config/index.d.ts +9 -0
  66. package/dist/src/config/index.js +26 -1
  67. package/dist/src/config/index.js.map +1 -1
  68. package/dist/tsconfig.tsbuildinfo +1 -1
  69. package/package.json +1 -1
@@ -0,0 +1,22 @@
1
+ import { type CodingBuddyConfig } from './config.schema';
2
+ export declare const CONFIG_FILE_NAMES: readonly ["codingbuddy.config.js", "codingbuddy.config.mjs", "codingbuddy.config.json"];
3
+ export interface ConfigLoadResult {
4
+ config: CodingBuddyConfig;
5
+ source: string | null;
6
+ warnings: string[];
7
+ }
8
+ export declare class ConfigLoadError extends Error {
9
+ readonly filePath: string;
10
+ readonly cause?: Error;
11
+ constructor(message: string, filePath: string, cause?: Error);
12
+ }
13
+ export declare function findConfigFile(projectRoot: string): string | null;
14
+ export declare function loadJsConfig(filePath: string): Promise<unknown>;
15
+ export declare function loadJsonConfig(filePath: string): Promise<unknown>;
16
+ export declare function loadConfigFromFile(filePath: string): Promise<unknown>;
17
+ export declare function validateAndTransform(raw: unknown, filePath: string): {
18
+ config: CodingBuddyConfig;
19
+ warnings: string[];
20
+ };
21
+ export declare function loadConfig(projectRoot?: string): Promise<ConfigLoadResult>;
22
+ export declare function hasConfigFile(projectRoot: string): boolean;
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ConfigLoadError = exports.CONFIG_FILE_NAMES = void 0;
4
+ exports.findConfigFile = findConfigFile;
5
+ exports.loadJsConfig = loadJsConfig;
6
+ exports.loadJsonConfig = loadJsonConfig;
7
+ exports.loadConfigFromFile = loadConfigFromFile;
8
+ exports.validateAndTransform = validateAndTransform;
9
+ exports.loadConfig = loadConfig;
10
+ exports.hasConfigFile = hasConfigFile;
11
+ const fs = require("fs/promises");
12
+ const fs_1 = require("fs");
13
+ const path = require("path");
14
+ const url_1 = require("url");
15
+ const config_schema_1 = require("./config.schema");
16
+ exports.CONFIG_FILE_NAMES = [
17
+ 'codingbuddy.config.js',
18
+ 'codingbuddy.config.mjs',
19
+ 'codingbuddy.config.json',
20
+ ];
21
+ class ConfigLoadError extends Error {
22
+ constructor(message, filePath, cause) {
23
+ super(message);
24
+ this.filePath = filePath;
25
+ this.cause = cause;
26
+ this.name = 'ConfigLoadError';
27
+ }
28
+ }
29
+ exports.ConfigLoadError = ConfigLoadError;
30
+ function findConfigFile(projectRoot) {
31
+ for (const fileName of exports.CONFIG_FILE_NAMES) {
32
+ const filePath = path.join(projectRoot, fileName);
33
+ if ((0, fs_1.existsSync)(filePath)) {
34
+ return filePath;
35
+ }
36
+ }
37
+ return null;
38
+ }
39
+ async function loadJsConfig(filePath) {
40
+ try {
41
+ const fileUrl = (0, url_1.pathToFileURL)(filePath).href;
42
+ const module = await Promise.resolve(`${fileUrl}`).then(s => require(s));
43
+ return module.default ?? module;
44
+ }
45
+ catch (error) {
46
+ throw new ConfigLoadError(`Failed to load JavaScript config: ${error instanceof Error ? error.message : String(error)}`, filePath, error instanceof Error ? error : undefined);
47
+ }
48
+ }
49
+ async function loadJsonConfig(filePath) {
50
+ try {
51
+ const content = await fs.readFile(filePath, 'utf-8');
52
+ return JSON.parse(content);
53
+ }
54
+ catch (error) {
55
+ if (error instanceof SyntaxError) {
56
+ throw new ConfigLoadError(`Invalid JSON in config file: ${error.message}`, filePath, error);
57
+ }
58
+ throw new ConfigLoadError(`Failed to read config file: ${error instanceof Error ? error.message : String(error)}`, filePath, error instanceof Error ? error : undefined);
59
+ }
60
+ }
61
+ async function loadConfigFromFile(filePath) {
62
+ const ext = path.extname(filePath).toLowerCase();
63
+ if (ext === '.json') {
64
+ return loadJsonConfig(filePath);
65
+ }
66
+ if (ext === '.js' || ext === '.mjs') {
67
+ return loadJsConfig(filePath);
68
+ }
69
+ throw new ConfigLoadError(`Unsupported config file format: ${ext}`, filePath);
70
+ }
71
+ function validateAndTransform(raw, filePath) {
72
+ const result = (0, config_schema_1.validateConfig)(raw);
73
+ if (!result.success) {
74
+ const errorMessages = result.errors
75
+ .map((e) => ` - ${e.path}: ${e.message}`)
76
+ .join('\n');
77
+ throw new ConfigLoadError(`Invalid configuration:\n${errorMessages}`, filePath);
78
+ }
79
+ return {
80
+ config: result.data,
81
+ warnings: [],
82
+ };
83
+ }
84
+ async function loadConfig(projectRoot) {
85
+ const root = projectRoot ?? process.cwd();
86
+ const configPath = findConfigFile(root);
87
+ if (!configPath) {
88
+ return {
89
+ config: {},
90
+ source: null,
91
+ warnings: [],
92
+ };
93
+ }
94
+ const raw = await loadConfigFromFile(configPath);
95
+ const { config, warnings } = validateAndTransform(raw, configPath);
96
+ return {
97
+ config,
98
+ source: configPath,
99
+ warnings,
100
+ };
101
+ }
102
+ function hasConfigFile(projectRoot) {
103
+ return findConfigFile(projectRoot) !== null;
104
+ }
105
+ //# sourceMappingURL=config.loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.loader.js","sourceRoot":"","sources":["../../../src/config/config.loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const config_loader_1 = require("./config.loader");
5
+ (0, vitest_1.describe)('config.loader', () => {
6
+ (0, vitest_1.describe)('CONFIG_FILE_NAMES', () => {
7
+ (0, vitest_1.it)('should have correct priority order', () => {
8
+ (0, vitest_1.expect)(config_loader_1.CONFIG_FILE_NAMES[0]).toBe('codingbuddy.config.js');
9
+ (0, vitest_1.expect)(config_loader_1.CONFIG_FILE_NAMES[1]).toBe('codingbuddy.config.mjs');
10
+ (0, vitest_1.expect)(config_loader_1.CONFIG_FILE_NAMES[2]).toBe('codingbuddy.config.json');
11
+ });
12
+ (0, vitest_1.it)('should have 3 supported file names', () => {
13
+ (0, vitest_1.expect)(config_loader_1.CONFIG_FILE_NAMES).toHaveLength(3);
14
+ });
15
+ });
16
+ (0, vitest_1.describe)('ConfigLoadError', () => {
17
+ (0, vitest_1.it)('should create error with message and file path', () => {
18
+ const error = new config_loader_1.ConfigLoadError('Test error', '/path/to/config.js');
19
+ (0, vitest_1.expect)(error.message).toBe('Test error');
20
+ (0, vitest_1.expect)(error.filePath).toBe('/path/to/config.js');
21
+ (0, vitest_1.expect)(error.name).toBe('ConfigLoadError');
22
+ });
23
+ (0, vitest_1.it)('should include cause when provided', () => {
24
+ const cause = new Error('Original error');
25
+ const error = new config_loader_1.ConfigLoadError('Wrapped error', '/path/to/config.js', cause);
26
+ (0, vitest_1.expect)(error.cause).toBe(cause);
27
+ });
28
+ (0, vitest_1.it)('should be instanceof Error', () => {
29
+ const error = new config_loader_1.ConfigLoadError('Test', '/path');
30
+ (0, vitest_1.expect)(error).toBeInstanceOf(Error);
31
+ });
32
+ });
33
+ (0, vitest_1.describe)('validateAndTransform', () => {
34
+ (0, vitest_1.it)('should accept valid config', () => {
35
+ const raw = {
36
+ language: 'ko',
37
+ projectName: 'test-project',
38
+ techStack: {
39
+ frontend: ['React'],
40
+ },
41
+ };
42
+ const result = (0, config_loader_1.validateAndTransform)(raw, '/path/config.json');
43
+ (0, vitest_1.expect)(result.config.language).toBe('ko');
44
+ (0, vitest_1.expect)(result.config.projectName).toBe('test-project');
45
+ (0, vitest_1.expect)(result.config.techStack?.frontend).toEqual(['React']);
46
+ (0, vitest_1.expect)(result.warnings).toEqual([]);
47
+ });
48
+ (0, vitest_1.it)('should accept empty config', () => {
49
+ const result = (0, config_loader_1.validateAndTransform)({}, '/path/config.json');
50
+ (0, vitest_1.expect)(result.config).toEqual({});
51
+ (0, vitest_1.expect)(result.warnings).toEqual([]);
52
+ });
53
+ (0, vitest_1.it)('should throw ConfigLoadError for invalid config', () => {
54
+ const raw = {
55
+ testStrategy: {
56
+ coverage: 200,
57
+ },
58
+ };
59
+ (0, vitest_1.expect)(() => (0, config_loader_1.validateAndTransform)(raw, '/path/config.json')).toThrow(config_loader_1.ConfigLoadError);
60
+ });
61
+ (0, vitest_1.it)('should include field path in error message', () => {
62
+ const raw = {
63
+ conventions: {
64
+ naming: {
65
+ files: 'invalid-value',
66
+ },
67
+ },
68
+ };
69
+ try {
70
+ (0, config_loader_1.validateAndTransform)(raw, '/path/config.json');
71
+ vitest_1.expect.fail('Should have thrown');
72
+ }
73
+ catch (error) {
74
+ (0, vitest_1.expect)(error).toBeInstanceOf(config_loader_1.ConfigLoadError);
75
+ (0, vitest_1.expect)(error.message).toContain('conventions');
76
+ }
77
+ });
78
+ (0, vitest_1.it)('should throw ConfigLoadError for invalid URL in repository', () => {
79
+ const raw = {
80
+ repository: 'not-a-valid-url',
81
+ };
82
+ (0, vitest_1.expect)(() => (0, config_loader_1.validateAndTransform)(raw, '/path/config.json')).toThrow(config_loader_1.ConfigLoadError);
83
+ });
84
+ });
85
+ });
86
+ //# sourceMappingURL=config.loader.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.loader.spec.js","sourceRoot":"","sources":["../../../src/config/config.loader.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare class CodingBuddyConfigModule {
2
+ }
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.CodingBuddyConfigModule = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ const config_service_1 = require("./config.service");
12
+ let CodingBuddyConfigModule = class CodingBuddyConfigModule {
13
+ };
14
+ exports.CodingBuddyConfigModule = CodingBuddyConfigModule;
15
+ exports.CodingBuddyConfigModule = CodingBuddyConfigModule = __decorate([
16
+ (0, common_1.Module)({
17
+ providers: [config_service_1.ConfigService],
18
+ exports: [config_service_1.ConfigService],
19
+ })
20
+ ], CodingBuddyConfigModule);
21
+ //# sourceMappingURL=config.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.module.js","sourceRoot":"","sources":["../../../src/config/config.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,qDAAiD;AAM1C,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;CAAG,CAAA;AAA1B,0DAAuB;kCAAvB,uBAAuB;IAJnC,IAAA,eAAM,EAAC;QACN,SAAS,EAAE,CAAC,8BAAa,CAAC;QAC1B,OAAO,EAAE,CAAC,8BAAa,CAAC;KACzB,CAAC;GACW,uBAAuB,CAAG"}
@@ -37,16 +37,16 @@ export declare const NamingConventionSchema: z.ZodObject<{
37
37
  types: z.ZodOptional<z.ZodEnum<["PascalCase"]>>;
38
38
  interfaces: z.ZodOptional<z.ZodEnum<["PascalCase", "IPascalCase"]>>;
39
39
  }, "strip", z.ZodTypeAny, {
40
- files?: "kebab-case" | "camelCase" | "PascalCase" | "snake_case";
41
40
  components?: "kebab-case" | "PascalCase";
41
+ files?: "kebab-case" | "camelCase" | "PascalCase" | "snake_case";
42
42
  functions?: "camelCase" | "snake_case";
43
43
  variables?: "camelCase" | "snake_case";
44
44
  constants?: "camelCase" | "UPPER_SNAKE_CASE";
45
45
  types?: "PascalCase";
46
46
  interfaces?: "PascalCase" | "IPascalCase";
47
47
  }, {
48
- files?: "kebab-case" | "camelCase" | "PascalCase" | "snake_case";
49
48
  components?: "kebab-case" | "PascalCase";
49
+ files?: "kebab-case" | "camelCase" | "PascalCase" | "snake_case";
50
50
  functions?: "camelCase" | "snake_case";
51
51
  variables?: "camelCase" | "snake_case";
52
52
  constants?: "camelCase" | "UPPER_SNAKE_CASE";
@@ -75,10 +75,10 @@ export declare const TechStackConfigSchema: z.ZodObject<{
75
75
  }>>>;
76
76
  }, "strip", z.ZodTypeAny, {
77
77
  tools?: string[];
78
- languages?: string[];
79
78
  frontend?: string[];
80
79
  backend?: string[];
81
80
  database?: string[];
81
+ languages?: string[];
82
82
  infrastructure?: string[];
83
83
  details?: Record<string, {
84
84
  version?: string;
@@ -87,10 +87,10 @@ export declare const TechStackConfigSchema: z.ZodObject<{
87
87
  }>;
88
88
  }, {
89
89
  tools?: string[];
90
- languages?: string[];
91
90
  frontend?: string[];
92
91
  backend?: string[];
93
92
  database?: string[];
93
+ languages?: string[];
94
94
  infrastructure?: string[];
95
95
  details?: Record<string, {
96
96
  version?: string;
@@ -150,16 +150,16 @@ export declare const ConventionsConfigSchema: z.ZodObject<{
150
150
  types: z.ZodOptional<z.ZodEnum<["PascalCase"]>>;
151
151
  interfaces: z.ZodOptional<z.ZodEnum<["PascalCase", "IPascalCase"]>>;
152
152
  }, "strip", z.ZodTypeAny, {
153
- files?: "kebab-case" | "camelCase" | "PascalCase" | "snake_case";
154
153
  components?: "kebab-case" | "PascalCase";
154
+ files?: "kebab-case" | "camelCase" | "PascalCase" | "snake_case";
155
155
  functions?: "camelCase" | "snake_case";
156
156
  variables?: "camelCase" | "snake_case";
157
157
  constants?: "camelCase" | "UPPER_SNAKE_CASE";
158
158
  types?: "PascalCase";
159
159
  interfaces?: "PascalCase" | "IPascalCase";
160
160
  }, {
161
- files?: "kebab-case" | "camelCase" | "PascalCase" | "snake_case";
162
161
  components?: "kebab-case" | "PascalCase";
162
+ files?: "kebab-case" | "camelCase" | "PascalCase" | "snake_case";
163
163
  functions?: "camelCase" | "snake_case";
164
164
  variables?: "camelCase" | "snake_case";
165
165
  constants?: "camelCase" | "UPPER_SNAKE_CASE";
@@ -175,8 +175,8 @@ export declare const ConventionsConfigSchema: z.ZodObject<{
175
175
  rules?: Record<string, unknown>;
176
176
  style?: string;
177
177
  naming?: {
178
- files?: "kebab-case" | "camelCase" | "PascalCase" | "snake_case";
179
178
  components?: "kebab-case" | "PascalCase";
179
+ files?: "kebab-case" | "camelCase" | "PascalCase" | "snake_case";
180
180
  functions?: "camelCase" | "snake_case";
181
181
  variables?: "camelCase" | "snake_case";
182
182
  constants?: "camelCase" | "UPPER_SNAKE_CASE";
@@ -191,8 +191,8 @@ export declare const ConventionsConfigSchema: z.ZodObject<{
191
191
  rules?: Record<string, unknown>;
192
192
  style?: string;
193
193
  naming?: {
194
- files?: "kebab-case" | "camelCase" | "PascalCase" | "snake_case";
195
194
  components?: "kebab-case" | "PascalCase";
195
+ files?: "kebab-case" | "camelCase" | "PascalCase" | "snake_case";
196
196
  functions?: "camelCase" | "snake_case";
197
197
  variables?: "camelCase" | "snake_case";
198
198
  constants?: "camelCase" | "UPPER_SNAKE_CASE";
@@ -212,16 +212,16 @@ export declare const TestStrategyConfigSchema: z.ZodObject<{
212
212
  e2eDirectory: z.ZodOptional<z.ZodString>;
213
213
  mockingStrategy: z.ZodOptional<z.ZodEnum<["minimal", "extensive", "no-mocks"]>>;
214
214
  }, "strip", z.ZodTypeAny, {
215
+ coverage?: number;
215
216
  approach?: "tdd" | "bdd" | "test-after" | "mixed";
216
217
  frameworks?: string[];
217
- coverage?: number;
218
218
  unitTestPattern?: "colocated" | "separate";
219
219
  e2eDirectory?: string;
220
220
  mockingStrategy?: "minimal" | "extensive" | "no-mocks";
221
221
  }, {
222
+ coverage?: number;
222
223
  approach?: "tdd" | "bdd" | "test-after" | "mixed";
223
224
  frameworks?: string[];
224
- coverage?: number;
225
225
  unitTestPattern?: "colocated" | "separate";
226
226
  e2eDirectory?: string;
227
227
  mockingStrategy?: "minimal" | "extensive" | "no-mocks";
@@ -253,10 +253,10 @@ export declare const CodingBuddyConfigSchema: z.ZodObject<{
253
253
  }>>>;
254
254
  }, "strip", z.ZodTypeAny, {
255
255
  tools?: string[];
256
- languages?: string[];
257
256
  frontend?: string[];
258
257
  backend?: string[];
259
258
  database?: string[];
259
+ languages?: string[];
260
260
  infrastructure?: string[];
261
261
  details?: Record<string, {
262
262
  version?: string;
@@ -265,10 +265,10 @@ export declare const CodingBuddyConfigSchema: z.ZodObject<{
265
265
  }>;
266
266
  }, {
267
267
  tools?: string[];
268
- languages?: string[];
269
268
  frontend?: string[];
270
269
  backend?: string[];
271
270
  database?: string[];
271
+ languages?: string[];
272
272
  infrastructure?: string[];
273
273
  details?: Record<string, {
274
274
  version?: string;
@@ -328,16 +328,16 @@ export declare const CodingBuddyConfigSchema: z.ZodObject<{
328
328
  types: z.ZodOptional<z.ZodEnum<["PascalCase"]>>;
329
329
  interfaces: z.ZodOptional<z.ZodEnum<["PascalCase", "IPascalCase"]>>;
330
330
  }, "strip", z.ZodTypeAny, {
331
- files?: "kebab-case" | "camelCase" | "PascalCase" | "snake_case";
332
331
  components?: "kebab-case" | "PascalCase";
332
+ files?: "kebab-case" | "camelCase" | "PascalCase" | "snake_case";
333
333
  functions?: "camelCase" | "snake_case";
334
334
  variables?: "camelCase" | "snake_case";
335
335
  constants?: "camelCase" | "UPPER_SNAKE_CASE";
336
336
  types?: "PascalCase";
337
337
  interfaces?: "PascalCase" | "IPascalCase";
338
338
  }, {
339
- files?: "kebab-case" | "camelCase" | "PascalCase" | "snake_case";
340
339
  components?: "kebab-case" | "PascalCase";
340
+ files?: "kebab-case" | "camelCase" | "PascalCase" | "snake_case";
341
341
  functions?: "camelCase" | "snake_case";
342
342
  variables?: "camelCase" | "snake_case";
343
343
  constants?: "camelCase" | "UPPER_SNAKE_CASE";
@@ -353,8 +353,8 @@ export declare const CodingBuddyConfigSchema: z.ZodObject<{
353
353
  rules?: Record<string, unknown>;
354
354
  style?: string;
355
355
  naming?: {
356
- files?: "kebab-case" | "camelCase" | "PascalCase" | "snake_case";
357
356
  components?: "kebab-case" | "PascalCase";
357
+ files?: "kebab-case" | "camelCase" | "PascalCase" | "snake_case";
358
358
  functions?: "camelCase" | "snake_case";
359
359
  variables?: "camelCase" | "snake_case";
360
360
  constants?: "camelCase" | "UPPER_SNAKE_CASE";
@@ -369,8 +369,8 @@ export declare const CodingBuddyConfigSchema: z.ZodObject<{
369
369
  rules?: Record<string, unknown>;
370
370
  style?: string;
371
371
  naming?: {
372
- files?: "kebab-case" | "camelCase" | "PascalCase" | "snake_case";
373
372
  components?: "kebab-case" | "PascalCase";
373
+ files?: "kebab-case" | "camelCase" | "PascalCase" | "snake_case";
374
374
  functions?: "camelCase" | "snake_case";
375
375
  variables?: "camelCase" | "snake_case";
376
376
  constants?: "camelCase" | "UPPER_SNAKE_CASE";
@@ -390,16 +390,16 @@ export declare const CodingBuddyConfigSchema: z.ZodObject<{
390
390
  e2eDirectory: z.ZodOptional<z.ZodString>;
391
391
  mockingStrategy: z.ZodOptional<z.ZodEnum<["minimal", "extensive", "no-mocks"]>>;
392
392
  }, "strip", z.ZodTypeAny, {
393
+ coverage?: number;
393
394
  approach?: "tdd" | "bdd" | "test-after" | "mixed";
394
395
  frameworks?: string[];
395
- coverage?: number;
396
396
  unitTestPattern?: "colocated" | "separate";
397
397
  e2eDirectory?: string;
398
398
  mockingStrategy?: "minimal" | "extensive" | "no-mocks";
399
399
  }, {
400
+ coverage?: number;
400
401
  approach?: "tdd" | "bdd" | "test-after" | "mixed";
401
402
  frameworks?: string[];
402
- coverage?: number;
403
403
  unitTestPattern?: "colocated" | "separate";
404
404
  e2eDirectory?: string;
405
405
  mockingStrategy?: "minimal" | "extensive" | "no-mocks";
@@ -415,10 +415,10 @@ export declare const CodingBuddyConfigSchema: z.ZodObject<{
415
415
  repository?: string;
416
416
  techStack?: {
417
417
  tools?: string[];
418
- languages?: string[];
419
418
  frontend?: string[];
420
419
  backend?: string[];
421
420
  database?: string[];
421
+ languages?: string[];
422
422
  infrastructure?: string[];
423
423
  details?: Record<string, {
424
424
  version?: string;
@@ -441,8 +441,8 @@ export declare const CodingBuddyConfigSchema: z.ZodObject<{
441
441
  rules?: Record<string, unknown>;
442
442
  style?: string;
443
443
  naming?: {
444
- files?: "kebab-case" | "camelCase" | "PascalCase" | "snake_case";
445
444
  components?: "kebab-case" | "PascalCase";
445
+ files?: "kebab-case" | "camelCase" | "PascalCase" | "snake_case";
446
446
  functions?: "camelCase" | "snake_case";
447
447
  variables?: "camelCase" | "snake_case";
448
448
  constants?: "camelCase" | "UPPER_SNAKE_CASE";
@@ -455,9 +455,9 @@ export declare const CodingBuddyConfigSchema: z.ZodObject<{
455
455
  quotes?: "single" | "double";
456
456
  };
457
457
  testStrategy?: {
458
+ coverage?: number;
458
459
  approach?: "tdd" | "bdd" | "test-after" | "mixed";
459
460
  frameworks?: string[];
460
- coverage?: number;
461
461
  unitTestPattern?: "colocated" | "separate";
462
462
  e2eDirectory?: string;
463
463
  mockingStrategy?: "minimal" | "extensive" | "no-mocks";
@@ -472,10 +472,10 @@ export declare const CodingBuddyConfigSchema: z.ZodObject<{
472
472
  repository?: string;
473
473
  techStack?: {
474
474
  tools?: string[];
475
- languages?: string[];
476
475
  frontend?: string[];
477
476
  backend?: string[];
478
477
  database?: string[];
478
+ languages?: string[];
479
479
  infrastructure?: string[];
480
480
  details?: Record<string, {
481
481
  version?: string;
@@ -498,8 +498,8 @@ export declare const CodingBuddyConfigSchema: z.ZodObject<{
498
498
  rules?: Record<string, unknown>;
499
499
  style?: string;
500
500
  naming?: {
501
- files?: "kebab-case" | "camelCase" | "PascalCase" | "snake_case";
502
501
  components?: "kebab-case" | "PascalCase";
502
+ files?: "kebab-case" | "camelCase" | "PascalCase" | "snake_case";
503
503
  functions?: "camelCase" | "snake_case";
504
504
  variables?: "camelCase" | "snake_case";
505
505
  constants?: "camelCase" | "UPPER_SNAKE_CASE";
@@ -512,9 +512,9 @@ export declare const CodingBuddyConfigSchema: z.ZodObject<{
512
512
  quotes?: "single" | "double";
513
513
  };
514
514
  testStrategy?: {
515
+ coverage?: number;
515
516
  approach?: "tdd" | "bdd" | "test-after" | "mixed";
516
517
  frameworks?: string[];
517
- coverage?: number;
518
518
  unitTestPattern?: "colocated" | "separate";
519
519
  e2eDirectory?: string;
520
520
  mockingStrategy?: "minimal" | "extensive" | "no-mocks";
@@ -0,0 +1,33 @@
1
+ import { OnModuleInit } from '@nestjs/common';
2
+ import { type ContextFile } from './context.loader';
3
+ import type { CodingBuddyConfig } from './config.schema';
4
+ export interface ProjectConfig {
5
+ settings: CodingBuddyConfig;
6
+ ignorePatterns: string[];
7
+ contextFiles: ContextFile[];
8
+ sources: {
9
+ config: string | null;
10
+ ignore: string | null;
11
+ context: string | null;
12
+ };
13
+ }
14
+ export declare class ConfigService implements OnModuleInit {
15
+ private readonly logger;
16
+ private projectRoot;
17
+ private projectConfig;
18
+ private isLoaded;
19
+ constructor();
20
+ onModuleInit(): Promise<void>;
21
+ setProjectRoot(root: string): void;
22
+ getProjectRoot(): string;
23
+ loadProjectConfig(): Promise<ProjectConfig>;
24
+ getProjectConfig(): Promise<ProjectConfig>;
25
+ getSettings(): Promise<CodingBuddyConfig>;
26
+ getIgnorePatterns(): Promise<string[]>;
27
+ shouldIgnorePath(relativePath: string): Promise<boolean>;
28
+ getContextFiles(): Promise<ContextFile[]>;
29
+ getFormattedContext(): Promise<string>;
30
+ getLanguage(): Promise<string | undefined>;
31
+ reload(): Promise<ProjectConfig>;
32
+ isConfigLoaded(): boolean;
33
+ }