codebuff 1.0.310 → 1.0.312

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.
@@ -17,6 +17,7 @@ function handleInitializationFlowLocally() {
17
17
  const configContent = {
18
18
  description: 'Template configuration for this project. See https://www.codebuff.com/config for all options.',
19
19
  startupProcesses: [],
20
+ fileChangeHooks: [],
20
21
  };
21
22
  (0, fs_1.writeFileSync)(configPath, JSON.stringify(configContent, null, 2));
22
23
  }
@@ -1 +1 @@
1
- {"version":3,"file":"inititalization-flow.js","sourceRoot":"","sources":["../../src/cli-handlers/inititalization-flow.ts"],"names":[],"mappings":";;;;;AAOA,0EAeC;AAtBD,2BAA8C;AAC9C,gDAAuB;AAEvB,4DAAiE;AAEjE,oDAAiD;AAEjD,SAAgB,+BAA+B;IAC7C,MAAM,WAAW,GAAG,IAAA,8BAAc,GAAE,CAAA;IAEpC,gDAAgD;IAEhD,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,8BAAkB,CAAC,CAAA;IAC7D,IAAI,CAAC,IAAA,eAAU,EAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,yBAAyB;QACzB,MAAM,aAAa,GAAG;YACpB,WAAW,EACT,+FAA+F;YACjG,gBAAgB,EAAE,EAAE;SACrB,CAAA;QACD,IAAA,kBAAa,EAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;IACnE,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"inititalization-flow.js","sourceRoot":"","sources":["../../src/cli-handlers/inititalization-flow.ts"],"names":[],"mappings":";;;;;AAOA,0EAgBC;AAvBD,2BAA8C;AAC9C,gDAAuB;AAEvB,4DAAiE;AAEjE,oDAAiD;AAEjD,SAAgB,+BAA+B;IAC7C,MAAM,WAAW,GAAG,IAAA,8BAAc,GAAE,CAAA;IAEpC,gDAAgD;IAEhD,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,8BAAkB,CAAC,CAAA;IAC7D,IAAI,CAAC,IAAA,eAAU,EAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,yBAAyB;QACzB,MAAM,aAAa,GAAG;YACpB,WAAW,EACT,+FAA+F;YACjG,gBAAgB,EAAE,EAAE;YACpB,eAAe,EAAE,EAAE;SACpB,CAAA;QACD,IAAA,kBAAa,EAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;IACnE,CAAC;AACH,CAAC"}
@@ -0,0 +1,273 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ // @ts-ignore
4
+ const bun_test_1 = require("bun:test");
5
+ const constants_1 = require("../constants");
6
+ (0, bun_test_1.describe)('constants', () => {
7
+ (0, bun_test_1.describe)('codebuffConfigFile and codebuffConfigFileBackup', () => {
8
+ (0, bun_test_1.it)('should have correct file names', () => {
9
+ (0, bun_test_1.expect)(constants_1.codebuffConfigFile).toBe('codebuff.json');
10
+ (0, bun_test_1.expect)(constants_1.codebuffConfigFileBackup).toBe('codebuff.jsonc');
11
+ });
12
+ });
13
+ (0, bun_test_1.describe)('StartupProcessSchema', () => {
14
+ (0, bun_test_1.it)('should validate a minimal startup process', () => {
15
+ const validProcess = {
16
+ name: 'test-process',
17
+ command: 'echo hello',
18
+ };
19
+ const result = constants_1.StartupProcessSchema.safeParse(validProcess);
20
+ (0, bun_test_1.expect)(result.success).toBe(true);
21
+ if (result.success) {
22
+ (0, bun_test_1.expect)(result.data.enabled).toBe(true); // default value
23
+ }
24
+ });
25
+ (0, bun_test_1.it)('should validate a complete startup process', () => {
26
+ const validProcess = {
27
+ name: 'web-server',
28
+ command: 'npm start',
29
+ cwd: './web',
30
+ enabled: false,
31
+ stdoutFile: 'logs/web.log',
32
+ stderrFile: 'logs/web-error.log',
33
+ };
34
+ const result = constants_1.StartupProcessSchema.safeParse(validProcess);
35
+ (0, bun_test_1.expect)(result.success).toBe(true);
36
+ if (result.success) {
37
+ (0, bun_test_1.expect)(result.data).toEqual(validProcess);
38
+ }
39
+ });
40
+ (0, bun_test_1.it)('should reject startup process with empty name', () => {
41
+ const invalidProcess = {
42
+ name: '',
43
+ command: 'echo hello',
44
+ };
45
+ const result = constants_1.StartupProcessSchema.safeParse(invalidProcess);
46
+ (0, bun_test_1.expect)(result.success).toBe(false);
47
+ });
48
+ (0, bun_test_1.it)('should reject startup process with empty command', () => {
49
+ const invalidProcess = {
50
+ name: 'test',
51
+ command: '',
52
+ };
53
+ const result = constants_1.StartupProcessSchema.safeParse(invalidProcess);
54
+ (0, bun_test_1.expect)(result.success).toBe(false);
55
+ });
56
+ (0, bun_test_1.it)('should apply default enabled value', () => {
57
+ const process = {
58
+ name: 'test',
59
+ command: 'echo hello',
60
+ };
61
+ const result = constants_1.StartupProcessSchema.safeParse(process);
62
+ (0, bun_test_1.expect)(result.success).toBe(true);
63
+ if (result.success) {
64
+ (0, bun_test_1.expect)(result.data.enabled).toBe(true);
65
+ }
66
+ });
67
+ });
68
+ (0, bun_test_1.describe)('FileChangeHook', () => {
69
+ (0, bun_test_1.it)('should validate a minimal file change hook', () => {
70
+ const validHook = {
71
+ name: 'test-hook',
72
+ command: 'npm test',
73
+ };
74
+ const result = constants_1.FileChangeHook.safeParse(validHook);
75
+ (0, bun_test_1.expect)(result.success).toBe(true);
76
+ if (result.success) {
77
+ (0, bun_test_1.expect)(result.data.enabled).toBe(true); // default value
78
+ }
79
+ });
80
+ (0, bun_test_1.it)('should validate a complete file change hook', () => {
81
+ const validHook = {
82
+ name: 'lint-check',
83
+ command: 'eslint .',
84
+ cwd: './src',
85
+ filePattern: '**/*.ts',
86
+ enabled: false,
87
+ };
88
+ const result = constants_1.FileChangeHook.safeParse(validHook);
89
+ (0, bun_test_1.expect)(result.success).toBe(true);
90
+ if (result.success) {
91
+ (0, bun_test_1.expect)(result.data).toEqual(validHook);
92
+ }
93
+ });
94
+ (0, bun_test_1.it)('should reject hook with empty name', () => {
95
+ const invalidHook = {
96
+ name: '',
97
+ command: 'npm test',
98
+ };
99
+ const result = constants_1.FileChangeHook.safeParse(invalidHook);
100
+ (0, bun_test_1.expect)(result.success).toBe(false);
101
+ });
102
+ (0, bun_test_1.it)('should reject hook with empty command', () => {
103
+ const invalidHook = {
104
+ name: 'test',
105
+ command: '',
106
+ };
107
+ const result = constants_1.FileChangeHook.safeParse(invalidHook);
108
+ (0, bun_test_1.expect)(result.success).toBe(false);
109
+ });
110
+ });
111
+ (0, bun_test_1.describe)('CodebuffConfigSchema', () => {
112
+ (0, bun_test_1.it)('should validate an empty object as a valid config', () => {
113
+ const emptyConfig = {};
114
+ const result = constants_1.CodebuffConfigSchema.safeParse(emptyConfig);
115
+ (0, bun_test_1.expect)(result.success).toBe(true);
116
+ if (result.success) {
117
+ (0, bun_test_1.expect)(result.data.maxAgentSteps).toBe(12); // default value
118
+ (0, bun_test_1.expect)(result.data.description).toBeUndefined();
119
+ (0, bun_test_1.expect)(result.data.startupProcesses).toBeUndefined();
120
+ (0, bun_test_1.expect)(result.data.fileChangeHooks).toBeUndefined();
121
+ }
122
+ });
123
+ (0, bun_test_1.it)('should validate a minimal config with description only', () => {
124
+ const config = {
125
+ description: 'My project config',
126
+ };
127
+ const result = constants_1.CodebuffConfigSchema.safeParse(config);
128
+ (0, bun_test_1.expect)(result.success).toBe(true);
129
+ if (result.success) {
130
+ (0, bun_test_1.expect)(result.data.description).toBe('My project config');
131
+ (0, bun_test_1.expect)(result.data.maxAgentSteps).toBe(12);
132
+ }
133
+ });
134
+ (0, bun_test_1.it)('should validate a complete config', () => {
135
+ const config = {
136
+ description: 'Full configuration',
137
+ startupProcesses: [
138
+ {
139
+ name: 'web-server',
140
+ command: 'npm start',
141
+ cwd: './web',
142
+ stdoutFile: 'logs/web.log',
143
+ },
144
+ ],
145
+ fileChangeHooks: [
146
+ {
147
+ name: 'test-runner',
148
+ command: 'npm test',
149
+ filePattern: '**/*.ts',
150
+ },
151
+ ],
152
+ maxAgentSteps: 20,
153
+ };
154
+ const result = constants_1.CodebuffConfigSchema.safeParse(config);
155
+ (0, bun_test_1.expect)(result.success).toBe(true);
156
+ if (result.success) {
157
+ (0, bun_test_1.expect)(result.data).toEqual({
158
+ ...config,
159
+ startupProcesses: [
160
+ {
161
+ ...config.startupProcesses[0],
162
+ enabled: true, // default value
163
+ },
164
+ ],
165
+ fileChangeHooks: [
166
+ {
167
+ ...config.fileChangeHooks[0],
168
+ enabled: true, // default value
169
+ },
170
+ ],
171
+ });
172
+ }
173
+ });
174
+ (0, bun_test_1.it)('should accept any type for description field', () => {
175
+ const configs = [
176
+ { description: 'string description' },
177
+ { description: 42 },
178
+ { description: true },
179
+ { description: { nested: 'object' } },
180
+ { description: ['array', 'values'] },
181
+ { description: null },
182
+ ];
183
+ configs.forEach((config) => {
184
+ const result = constants_1.CodebuffConfigSchema.safeParse(config);
185
+ (0, bun_test_1.expect)(result.success).toBe(true);
186
+ });
187
+ });
188
+ (0, bun_test_1.it)('should apply default maxAgentSteps value', () => {
189
+ const config = {
190
+ description: 'Test config',
191
+ };
192
+ const result = constants_1.CodebuffConfigSchema.safeParse(config);
193
+ (0, bun_test_1.expect)(result.success).toBe(true);
194
+ if (result.success) {
195
+ (0, bun_test_1.expect)(result.data.maxAgentSteps).toBe(12);
196
+ }
197
+ });
198
+ (0, bun_test_1.it)('should allow custom maxAgentSteps value', () => {
199
+ const config = {
200
+ maxAgentSteps: 25,
201
+ };
202
+ const result = constants_1.CodebuffConfigSchema.safeParse(config);
203
+ (0, bun_test_1.expect)(result.success).toBe(true);
204
+ if (result.success) {
205
+ (0, bun_test_1.expect)(result.data.maxAgentSteps).toBe(25);
206
+ }
207
+ });
208
+ (0, bun_test_1.it)('should reject invalid startup process in array', () => {
209
+ const config = {
210
+ startupProcesses: [
211
+ {
212
+ name: '', // invalid: empty name
213
+ command: 'npm start',
214
+ },
215
+ ],
216
+ };
217
+ const result = constants_1.CodebuffConfigSchema.safeParse(config);
218
+ (0, bun_test_1.expect)(result.success).toBe(false);
219
+ });
220
+ (0, bun_test_1.it)('should reject invalid file change hook in array', () => {
221
+ const config = {
222
+ fileChangeHooks: [
223
+ {
224
+ name: 'test',
225
+ command: '', // invalid: empty command
226
+ },
227
+ ],
228
+ };
229
+ const result = constants_1.CodebuffConfigSchema.safeParse(config);
230
+ (0, bun_test_1.expect)(result.success).toBe(false);
231
+ });
232
+ (0, bun_test_1.it)('should reject non-number maxAgentSteps', () => {
233
+ const config = {
234
+ maxAgentSteps: 'not-a-number',
235
+ };
236
+ const result = constants_1.CodebuffConfigSchema.safeParse(config);
237
+ (0, bun_test_1.expect)(result.success).toBe(false);
238
+ });
239
+ (0, bun_test_1.it)('should reject non-array startupProcesses', () => {
240
+ const config = {
241
+ startupProcesses: 'not-an-array',
242
+ };
243
+ const result = constants_1.CodebuffConfigSchema.safeParse(config);
244
+ (0, bun_test_1.expect)(result.success).toBe(false);
245
+ });
246
+ (0, bun_test_1.it)('should reject non-array fileChangeHooks', () => {
247
+ const config = {
248
+ fileChangeHooks: 'not-an-array',
249
+ };
250
+ const result = constants_1.CodebuffConfigSchema.safeParse(config);
251
+ (0, bun_test_1.expect)(result.success).toBe(false);
252
+ });
253
+ });
254
+ (0, bun_test_1.describe)('TypeScript types', () => {
255
+ (0, bun_test_1.it)('should have correct TypeScript types', () => {
256
+ // This test ensures the types are properly exported and inferred
257
+ const startupProcess = {
258
+ name: 'test',
259
+ command: 'echo hello',
260
+ enabled: true,
261
+ };
262
+ const config = {
263
+ description: 'Test config',
264
+ startupProcesses: [startupProcess],
265
+ maxAgentSteps: 15,
266
+ };
267
+ // If this compiles without TypeScript errors, the types are correct
268
+ (0, bun_test_1.expect)(startupProcess.name).toBe('test');
269
+ (0, bun_test_1.expect)(config.maxAgentSteps).toBe(15);
270
+ });
271
+ });
272
+ });
273
+ //# sourceMappingURL=constants.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.test.js","sourceRoot":"","sources":["../../../src/json-config/__tests__/constants.test.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -5,6 +5,12 @@ process.env.NEXT_PUBLIC_APP_URL = 'https://codebuff.com';
5
5
  process.env.NEXT_PUBLIC_SUPPORT_EMAIL = 'support@codebuff.com';
6
6
  process.env.NEXT_PUBLIC_POSTHOG_API_KEY = 'phc_tug7g8yc10qNestK14QV8WyKwjfEl6vwzIbJkBdqeHS';
7
7
  process.env.NEXT_PUBLIC_POSTHOG_HOST_URL = 'https://us.i.posthog.com/';
8
+ process.env.NEXT_PUBLIC_CB_ENVIRONMENT = 'production';
9
+ process.env.NEXT_PUBLIC_BACKEND_URL = 'manicode-backend.onrender.com';
10
+ process.env.NEXT_PUBLIC_APP_URL = 'https://codebuff.com';
11
+ process.env.NEXT_PUBLIC_SUPPORT_EMAIL = 'support@codebuff.com';
12
+ process.env.NEXT_PUBLIC_POSTHOG_API_KEY = 'phc_tug7g8yc10qNestK14QV8WyKwjfEl6vwzIbJkBdqeHS';
13
+ process.env.NEXT_PUBLIC_POSTHOG_HOST_URL = 'https://us.i.posthog.com/';
8
14
  "use strict";
9
15
  var __importDefault = (this && this.__importDefault) || function (mod) {
10
16
  return (mod && mod.__esModule) ? mod : { "default": mod };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codebuff",
3
- "version": "1.0.310",
3
+ "version": "1.0.312",
4
4
  "description": "AI dev assistant",
5
5
  "license": "MIT",
6
6
  "main": "dist/index.js",
@@ -13,7 +13,7 @@
13
13
  "postpublish": "echo \"const fs=require('fs');fs.copyFileSync('temp.package.json','package.json');fs.unlinkSync('temp.package.json');\" | bun run -",
14
14
  "format": "prettier --write \"**/*.{ts,tsx,json,md}\"",
15
15
  "test": "jest",
16
- "start-js": "nx clean npm-app && nx build npm-app && bun run with-env -- sh -c 'TS_NODE_BASEURL=./dist node -r tsconfig-paths/register dist/index.js ..'",
16
+ "start-js": "nx build npm-app && bun run with-env -- sh -c 'TS_NODE_BASEURL=./dist node -r tsconfig-paths/register dist/index.js ..'",
17
17
  "start": "nx build npm-app > /dev/null && bun run with-env -- sh -c 'TS_NODE_PROJECT=./tsconfig.json ts-node -r tsconfig-paths/register src/index.ts ..'",
18
18
  "start-max": "nx build npm-app > /dev/null && bun run with-env -- sh -c 'TS_NODE_PROJECT=./tsconfig.json ts-node -r tsconfig-paths/register src/index.ts .. --max'",
19
19
  "start-lite": "nx build npm-app > /dev/null && bun run with-env -- sh -c 'TS_NODE_PROJECT=./tsconfig.json ts-node -r tsconfig-paths/register src/index.ts .. --lite'",
@@ -1,7 +0,0 @@
1
- import { CodebuffConfig } from './constants';
2
- /**
3
- * Loads and validates the configuration file from the project directory.
4
- * @param projectPath - The root directory of the project
5
- * @returns The parsed and validated configuration, or null if no valid config exists
6
- */
7
- export declare function loadCodebuffConfig(projectPath: string): CodebuffConfig | null;
@@ -1,51 +0,0 @@
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.loadCodebuffConfig = loadCodebuffConfig;
7
- const fs_1 = require("fs");
8
- const path_1 = __importDefault(require("path"));
9
- const jsonc_parser_1 = require("jsonc-parser");
10
- const picocolors_1 = require("picocolors");
11
- const constants_1 = require("./constants");
12
- /**
13
- * Loads and validates the configuration file from the project directory.
14
- * @param projectPath - The root directory of the project
15
- * @returns The parsed and validated configuration, or null if no valid config exists
16
- */
17
- function loadCodebuffConfig(projectPath) {
18
- const configPathPrimary = path_1.default.join(projectPath, constants_1.codebuffConfigFile);
19
- const configPathBackup = path_1.default.join(projectPath, constants_1.codebuffConfigFileBackup);
20
- const configPath = (0, fs_1.existsSync)(configPathBackup)
21
- ? configPathBackup
22
- : (0, fs_1.existsSync)(configPathPrimary)
23
- ? configPathPrimary
24
- : null;
25
- if (configPath === null) {
26
- return null;
27
- }
28
- try {
29
- const jsoncContent = (0, fs_1.readFileSync)(configPath, 'utf-8');
30
- const parsedConfig = (0, jsonc_parser_1.parse)(jsoncContent);
31
- const result = constants_1.CodebuffConfigSchema.safeParse(parsedConfig);
32
- if (!result.success) {
33
- console.warn((0, picocolors_1.yellow)(`Warning: Invalid ${constants_1.codebuffConfigFile} configuration. Please check the schema:\n` +
34
- result.error.errors
35
- .map((err) => `- ${err.path.join('.')}: ${err.message}`)
36
- .join('\n')));
37
- return null;
38
- }
39
- return result.data;
40
- }
41
- catch (error) {
42
- if (error instanceof SyntaxError) {
43
- console.warn((0, picocolors_1.yellow)(`Warning: Invalid JSON in ${constants_1.codebuffConfigFile}. Please check the syntax.`));
44
- }
45
- else {
46
- console.warn((0, picocolors_1.yellow)(`Warning: Error reading ${constants_1.codebuffConfigFile} configuration file.`));
47
- }
48
- return null;
49
- }
50
- }
51
- //# sourceMappingURL=parser.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/json-config/parser.ts"],"names":[],"mappings":";;;;;AAkBA,gDAgDC;AAlED,2BAA6C;AAC7C,gDAAuB;AAEvB,+CAAkD;AAClD,2CAAmC;AAEnC,2CAKoB;AAEpB;;;;GAIG;AACH,SAAgB,kBAAkB,CAAC,WAAmB;IACpD,MAAM,iBAAiB,GAAG,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,8BAAkB,CAAC,CAAA;IACpE,MAAM,gBAAgB,GAAG,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,oCAAwB,CAAC,CAAA;IACzE,MAAM,UAAU,GAAG,IAAA,eAAU,EAAC,gBAAgB,CAAC;QAC7C,CAAC,CAAC,gBAAgB;QAClB,CAAC,CAAC,IAAA,eAAU,EAAC,iBAAiB,CAAC;YAC7B,CAAC,CAAC,iBAAiB;YACnB,CAAC,CAAC,IAAI,CAAA;IAEV,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QACxB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,IAAA,iBAAY,EAAC,UAAU,EAAE,OAAO,CAAC,CAAA;QACtD,MAAM,YAAY,GAAG,IAAA,oBAAU,EAAC,YAAY,CAAC,CAAA;QAE7C,MAAM,MAAM,GAAG,gCAAoB,CAAC,SAAS,CAAC,YAAY,CAAC,CAAA;QAE3D,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CACV,IAAA,mBAAM,EACJ,oBAAoB,8BAAkB,4CAA4C;gBAChF,MAAM,CAAC,KAAK,CAAC,MAAM;qBAChB,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC;qBACvD,IAAI,CAAC,IAAI,CAAC,CAChB,CACF,CAAA;YACD,OAAO,IAAI,CAAA;QACb,CAAC;QAED,OAAO,MAAM,CAAC,IAAI,CAAA;IACpB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;YACjC,OAAO,CAAC,IAAI,CACV,IAAA,mBAAM,EACJ,4BAA4B,8BAAkB,4BAA4B,CAC3E,CACF,CAAA;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CACV,IAAA,mBAAM,EACJ,0BAA0B,8BAAkB,sBAAsB,CACnE,CACF,CAAA;QACH,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC"}
@@ -1,7 +0,0 @@
1
- import { CodebuffConfig } from './common/json-config/constants';
2
- /**
3
- * Loads and validates the configuration file from the project directory.
4
- * @param projectPath - The root directory of the project
5
- * @returns The parsed and validated configuration, or null if no valid config exists
6
- */
7
- export declare function loadCodebuffConfig(): CodebuffConfig | null;
@@ -1,53 +0,0 @@
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.loadCodebuffConfig = loadCodebuffConfig;
7
- const fs_1 = require("fs");
8
- const path_1 = __importDefault(require("path"));
9
- const jsonc_parser_1 = require("jsonc-parser");
10
- const picocolors_1 = require("picocolors");
11
- const constants_1 = require("./common/json-config/constants");
12
- const project_files_1 = require("./project-files");
13
- /**
14
- * Loads and validates the configuration file from the project directory.
15
- * @param projectPath - The root directory of the project
16
- * @returns The parsed and validated configuration, or null if no valid config exists
17
- */
18
- function loadCodebuffConfig() {
19
- const projectPath = (0, project_files_1.getProjectRoot)();
20
- const configPathPrimary = path_1.default.join(projectPath, constants_1.codebuffConfigFile);
21
- const configPathBackup = path_1.default.join(projectPath, constants_1.codebuffConfigFileBackup);
22
- const configPath = (0, fs_1.existsSync)(configPathBackup)
23
- ? configPathBackup
24
- : (0, fs_1.existsSync)(configPathPrimary)
25
- ? configPathPrimary
26
- : null;
27
- if (configPath === null) {
28
- return null;
29
- }
30
- try {
31
- const jsoncContent = (0, fs_1.readFileSync)(configPath, 'utf-8');
32
- const parsedConfig = (0, jsonc_parser_1.parse)(jsoncContent);
33
- const result = constants_1.CodebuffConfigSchema.safeParse(parsedConfig);
34
- if (!result.success) {
35
- console.warn((0, picocolors_1.yellow)(`Warning: Invalid ${constants_1.codebuffConfigFile} configuration. Please check the schema:\n` +
36
- result.error.errors
37
- .map((err) => `- ${err.path.join('.')}: ${err.message}`)
38
- .join('\n')));
39
- return null;
40
- }
41
- return result.data;
42
- }
43
- catch (error) {
44
- if (error instanceof SyntaxError) {
45
- console.warn((0, picocolors_1.yellow)(`Warning: Invalid JSON in ${constants_1.codebuffConfigFile}. Please check the syntax.`));
46
- }
47
- else {
48
- console.warn((0, picocolors_1.yellow)(`Warning: Error reading ${constants_1.codebuffConfigFile} configuration file.`));
49
- }
50
- return null;
51
- }
52
- }
53
- //# sourceMappingURL=json-config-parser.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"json-config-parser.js","sourceRoot":"","sources":["../src/json-config-parser.ts"],"names":[],"mappings":";;;;;AAmBA,gDAiDC;AApED,2BAA6C;AAC7C,gDAAuB;AAEvB,+CAAkD;AAClD,2CAAmC;AAEnC,4DAKqC;AACrC,mDAAgD;AAEhD;;;;GAIG;AACH,SAAgB,kBAAkB;IAChC,MAAM,WAAW,GAAG,IAAA,8BAAc,GAAE,CAAA;IACpC,MAAM,iBAAiB,GAAG,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,8BAAkB,CAAC,CAAA;IACpE,MAAM,gBAAgB,GAAG,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,oCAAwB,CAAC,CAAA;IACzE,MAAM,UAAU,GAAG,IAAA,eAAU,EAAC,gBAAgB,CAAC;QAC7C,CAAC,CAAC,gBAAgB;QAClB,CAAC,CAAC,IAAA,eAAU,EAAC,iBAAiB,CAAC;YAC7B,CAAC,CAAC,iBAAiB;YACnB,CAAC,CAAC,IAAI,CAAA;IAEV,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QACxB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,IAAA,iBAAY,EAAC,UAAU,EAAE,OAAO,CAAC,CAAA;QACtD,MAAM,YAAY,GAAG,IAAA,oBAAU,EAAC,YAAY,CAAC,CAAA;QAE7C,MAAM,MAAM,GAAG,gCAAoB,CAAC,SAAS,CAAC,YAAY,CAAC,CAAA;QAE3D,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CACV,IAAA,mBAAM,EACJ,oBAAoB,8BAAkB,4CAA4C;gBAChF,MAAM,CAAC,KAAK,CAAC,MAAM;qBAChB,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC;qBACvD,IAAI,CAAC,IAAI,CAAC,CAChB,CACF,CAAA;YACD,OAAO,IAAI,CAAA;QACb,CAAC;QAED,OAAO,MAAM,CAAC,IAAI,CAAA;IACpB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;YACjC,OAAO,CAAC,IAAI,CACV,IAAA,mBAAM,EACJ,4BAA4B,8BAAkB,4BAA4B,CAC3E,CACF,CAAA;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CACV,IAAA,mBAAM,EACJ,0BAA0B,8BAAkB,sBAAsB,CACnE,CACF,CAAA;QACH,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC"}