cadr-cli 2.0.0 → 2.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adr/adr.d.ts +17 -0
- package/dist/adr/adr.d.ts.map +1 -0
- package/dist/{adr.js → adr/adr.js} +4 -44
- package/dist/adr/adr.js.map +1 -0
- package/dist/adr/adr.test.d.ts +5 -0
- package/dist/{adr.test.d.ts.map → adr/adr.test.d.ts.map} +1 -1
- package/dist/{adr.test.js → adr/adr.test.js} +0 -14
- package/dist/adr/adr.test.js.map +1 -0
- package/dist/adr/index.d.ts +2 -0
- package/dist/adr/index.d.ts.map +1 -0
- package/dist/adr/index.js +18 -0
- package/dist/adr/index.js.map +1 -0
- package/dist/analysis/analysis.orchestrator.d.ts +14 -0
- package/dist/analysis/analysis.orchestrator.d.ts.map +1 -0
- package/dist/analysis/analysis.orchestrator.js +175 -0
- package/dist/analysis/analysis.orchestrator.js.map +1 -0
- package/dist/analysis/analysis.orchestrator.test.d.ts +2 -0
- package/dist/analysis/analysis.orchestrator.test.d.ts.map +1 -0
- package/dist/analysis/analysis.orchestrator.test.js +177 -0
- package/dist/analysis/analysis.orchestrator.test.js.map +1 -0
- package/dist/analysis/strategies/git-strategy.d.ts +22 -0
- package/dist/analysis/strategies/git-strategy.d.ts.map +1 -0
- package/dist/analysis/strategies/git-strategy.js +114 -0
- package/dist/analysis/strategies/git-strategy.js.map +1 -0
- package/dist/analysis/strategies/git-strategy.test.d.ts +2 -0
- package/dist/analysis/strategies/git-strategy.test.d.ts.map +1 -0
- package/dist/analysis/strategies/git-strategy.test.js +147 -0
- package/dist/analysis/strategies/git-strategy.test.js.map +1 -0
- package/dist/commands/analyze.js +3 -3
- package/dist/commands/analyze.js.map +1 -1
- package/dist/commands/analyze.test.d.ts +2 -0
- package/dist/commands/analyze.test.d.ts.map +1 -0
- package/dist/commands/analyze.test.js +70 -0
- package/dist/commands/analyze.test.js.map +1 -0
- package/dist/commands/init.test.js +128 -2
- package/dist/commands/init.test.js.map +1 -1
- package/dist/config.test.js +167 -0
- package/dist/config.test.js.map +1 -1
- package/dist/git/git.errors.d.ts +6 -0
- package/dist/git/git.errors.d.ts.map +1 -0
- package/dist/git/git.errors.js +15 -0
- package/dist/git/git.errors.js.map +1 -0
- package/dist/git/git.errors.test.d.ts +2 -0
- package/dist/git/git.errors.test.d.ts.map +1 -0
- package/dist/git/git.errors.test.js +34 -0
- package/dist/git/git.errors.test.js.map +1 -0
- package/dist/git/git.operations.d.ts +12 -0
- package/dist/git/git.operations.d.ts.map +1 -0
- package/dist/git/git.operations.js +64 -0
- package/dist/git/git.operations.js.map +1 -0
- package/dist/git/git.operations.test.d.ts +2 -0
- package/dist/git/git.operations.test.d.ts.map +1 -0
- package/dist/git/git.operations.test.js +164 -0
- package/dist/git/git.operations.test.js.map +1 -0
- package/dist/git/index.d.ts +4 -0
- package/dist/git/index.d.ts.map +1 -0
- package/dist/git/index.js +19 -0
- package/dist/git/index.js.map +1 -0
- package/dist/llm/index.d.ts +3 -0
- package/dist/llm/index.d.ts.map +1 -0
- package/dist/llm/index.js +19 -0
- package/dist/llm/index.js.map +1 -0
- package/dist/llm/llm.d.ts +35 -0
- package/dist/llm/llm.d.ts.map +1 -0
- package/dist/{llm.js → llm/llm.js} +16 -58
- package/dist/llm/llm.js.map +1 -0
- package/dist/{llm.test.d.ts.map → llm/llm.test.d.ts.map} +1 -1
- package/dist/llm/llm.test.js +224 -0
- package/dist/llm/llm.test.js.map +1 -0
- package/dist/{prompts.d.ts → llm/prompts.d.ts} +1 -38
- package/dist/llm/prompts.d.ts.map +1 -0
- package/dist/{prompts.js → llm/prompts.js} +9 -54
- package/dist/llm/prompts.js.map +1 -0
- package/dist/llm/response-parser.d.ts +9 -0
- package/dist/llm/response-parser.d.ts.map +1 -0
- package/dist/llm/response-parser.js +67 -0
- package/dist/llm/response-parser.js.map +1 -0
- package/dist/llm/response-parser.test.d.ts +2 -0
- package/dist/llm/response-parser.test.d.ts.map +1 -0
- package/dist/llm/response-parser.test.js +134 -0
- package/dist/llm/response-parser.test.js.map +1 -0
- package/dist/presenters/console-presenter.d.ts +35 -0
- package/dist/presenters/console-presenter.d.ts.map +1 -0
- package/dist/presenters/console-presenter.js +114 -0
- package/dist/presenters/console-presenter.js.map +1 -0
- package/dist/presenters/console-presenter.test.d.ts +2 -0
- package/dist/presenters/console-presenter.test.d.ts.map +1 -0
- package/dist/presenters/console-presenter.test.js +227 -0
- package/dist/presenters/console-presenter.test.js.map +1 -0
- package/dist/version.test.d.ts +1 -2
- package/dist/version.test.d.ts.map +1 -1
- package/dist/version.test.js +29 -16
- package/dist/version.test.js.map +1 -1
- package/package.json +1 -1
- package/src/{adr.test.ts → adr/adr.test.ts} +10 -23
- package/src/{adr.ts → adr/adr.ts} +7 -48
- package/src/adr/index.ts +1 -0
- package/src/analysis/analysis.orchestrator.test.ts +237 -0
- package/src/analysis/analysis.orchestrator.ts +175 -0
- package/src/analysis/strategies/git-strategy.test.ts +210 -0
- package/src/analysis/strategies/git-strategy.ts +106 -0
- package/src/commands/analyze.test.ts +91 -0
- package/src/commands/analyze.ts +8 -9
- package/src/commands/init.test.ts +200 -5
- package/src/config.test.ts +232 -2
- package/src/git/git.errors.test.ts +43 -0
- package/src/git/git.errors.ts +10 -0
- package/src/git/git.operations.test.ts +222 -0
- package/src/git/git.operations.ts +85 -0
- package/src/git/index.ts +3 -0
- package/src/llm/index.ts +2 -0
- package/src/llm/llm.test.ts +315 -0
- package/src/{llm.ts → llm/llm.ts} +46 -107
- package/src/{prompts.ts → llm/prompts.ts} +30 -72
- package/src/llm/response-parser.test.ts +170 -0
- package/src/llm/response-parser.ts +90 -0
- package/src/presenters/console-presenter.test.ts +259 -0
- package/src/presenters/console-presenter.ts +152 -0
- package/src/version.test.ts +30 -16
- package/dist/adr.d.ts +0 -50
- package/dist/adr.d.ts.map +0 -1
- package/dist/adr.js.map +0 -1
- package/dist/adr.test.d.ts +0 -8
- package/dist/adr.test.js.map +0 -1
- package/dist/analysis.d.ts +0 -24
- package/dist/analysis.d.ts.map +0 -1
- package/dist/analysis.js +0 -281
- package/dist/analysis.js.map +0 -1
- package/dist/analysis.test.d.ts +0 -8
- package/dist/analysis.test.d.ts.map +0 -1
- package/dist/analysis.test.js +0 -351
- package/dist/analysis.test.js.map +0 -1
- package/dist/git.d.ts +0 -54
- package/dist/git.d.ts.map +0 -1
- package/dist/git.js +0 -204
- package/dist/git.js.map +0 -1
- package/dist/llm.d.ts +0 -73
- package/dist/llm.d.ts.map +0 -1
- package/dist/llm.js.map +0 -1
- package/dist/llm.test.js +0 -592
- package/dist/llm.test.js.map +0 -1
- package/dist/prompts.d.ts.map +0 -1
- package/dist/prompts.js.map +0 -1
- package/dist/prompts.test.d.ts +0 -2
- package/dist/prompts.test.d.ts.map +0 -1
- package/dist/prompts.test.js +0 -427
- package/dist/prompts.test.js.map +0 -1
- package/src/analysis.test.ts +0 -396
- package/src/analysis.ts +0 -262
- package/src/git.ts +0 -300
- package/src/llm.test.ts +0 -701
- package/src/prompts.test.ts +0 -515
- /package/dist/{llm.test.d.ts → llm/llm.test.d.ts} +0 -0
|
@@ -35,22 +35,148 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
const init_1 = require("./init");
|
|
37
37
|
const config = __importStar(require("../config"));
|
|
38
|
+
const fs_1 = require("fs");
|
|
39
|
+
const logger_1 = require("../logger");
|
|
38
40
|
// Mock dependencies
|
|
39
41
|
jest.mock('../config');
|
|
42
|
+
jest.mock('fs', () => ({
|
|
43
|
+
existsSync: jest.fn().mockReturnValue(false),
|
|
44
|
+
}));
|
|
45
|
+
jest.mock('../logger');
|
|
46
|
+
const mockExistsSync = fs_1.existsSync;
|
|
47
|
+
const mockCreateConfig = config.createConfig;
|
|
48
|
+
const mockGetDefaultConfigPath = config.getDefaultConfigPath;
|
|
49
|
+
const mockValidateConfig = config.validateConfig;
|
|
50
|
+
function makeValidConfig(overrides = {}) {
|
|
51
|
+
return {
|
|
52
|
+
provider: 'openai',
|
|
53
|
+
analysis_model: 'gpt-4',
|
|
54
|
+
api_key_env: 'OPENAI_API_KEY',
|
|
55
|
+
timeout_seconds: 30,
|
|
56
|
+
...overrides,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
40
59
|
describe('Init Command', () => {
|
|
60
|
+
let consoleSpy;
|
|
41
61
|
beforeEach(() => {
|
|
42
62
|
jest.clearAllMocks();
|
|
63
|
+
mockExistsSync.mockReturnValue(false);
|
|
64
|
+
mockGetDefaultConfigPath.mockReturnValue('/fake/path/cadr.yaml');
|
|
65
|
+
mockValidateConfig.mockReturnValue({ valid: true, errors: [] });
|
|
66
|
+
consoleSpy = {
|
|
67
|
+
log: jest.spyOn(console, 'log').mockImplementation(),
|
|
68
|
+
error: jest.spyOn(console, 'error').mockImplementation(),
|
|
69
|
+
warn: jest.spyOn(console, 'warn').mockImplementation(),
|
|
70
|
+
};
|
|
71
|
+
});
|
|
72
|
+
afterEach(() => {
|
|
73
|
+
consoleSpy.log.mockRestore();
|
|
74
|
+
consoleSpy.error.mockRestore();
|
|
75
|
+
consoleSpy.warn.mockRestore();
|
|
43
76
|
});
|
|
44
77
|
describe('initCommand', () => {
|
|
45
78
|
test('calls createConfig when no config exists', async () => {
|
|
46
|
-
|
|
79
|
+
mockCreateConfig.mockResolvedValue(makeValidConfig());
|
|
47
80
|
await (0, init_1.initCommand)();
|
|
48
81
|
expect(config.createConfig).toHaveBeenCalled();
|
|
49
82
|
});
|
|
50
83
|
test('handles config creation errors gracefully', async () => {
|
|
51
|
-
|
|
84
|
+
mockCreateConfig.mockRejectedValue(new Error('Permission denied'));
|
|
52
85
|
await expect((0, init_1.initCommand)()).resolves.not.toThrow();
|
|
53
86
|
});
|
|
87
|
+
test('prints already-exists message and does not call createConfig when config exists', async () => {
|
|
88
|
+
mockExistsSync.mockReturnValue(true);
|
|
89
|
+
await (0, init_1.initCommand)();
|
|
90
|
+
expect(consoleSpy.log).toHaveBeenCalledWith(expect.stringContaining('already exists'));
|
|
91
|
+
expect(mockCreateConfig).not.toHaveBeenCalled();
|
|
92
|
+
});
|
|
93
|
+
test('prints failure message and does not display summary when createConfig returns null', async () => {
|
|
94
|
+
mockCreateConfig.mockResolvedValue(null);
|
|
95
|
+
await (0, init_1.initCommand)();
|
|
96
|
+
expect(consoleSpy.error).toHaveBeenCalledWith(expect.stringContaining('Failed to create configuration'));
|
|
97
|
+
// Summary header should NOT appear
|
|
98
|
+
const logCalls = consoleSpy.log.mock.calls.map((c) => c[0]);
|
|
99
|
+
expect(logCalls).not.toEqual(expect.arrayContaining([expect.stringContaining('Configuration Summary')]));
|
|
100
|
+
});
|
|
101
|
+
test('displays summary with provider, model, api_key_env, and timeout when config is valid', async () => {
|
|
102
|
+
const cfg = makeValidConfig({
|
|
103
|
+
provider: 'gemini',
|
|
104
|
+
analysis_model: 'gemini-pro',
|
|
105
|
+
api_key_env: 'GEMINI_API_KEY',
|
|
106
|
+
timeout_seconds: 45,
|
|
107
|
+
});
|
|
108
|
+
mockCreateConfig.mockResolvedValue(cfg);
|
|
109
|
+
process.env['GEMINI_API_KEY'] = 'fake-key';
|
|
110
|
+
await (0, init_1.initCommand)();
|
|
111
|
+
expect(consoleSpy.log).toHaveBeenCalledWith('📋 Configuration Summary:');
|
|
112
|
+
expect(consoleSpy.log).toHaveBeenCalledWith(' Provider: gemini');
|
|
113
|
+
expect(consoleSpy.log).toHaveBeenCalledWith(' Model: gemini-pro');
|
|
114
|
+
expect(consoleSpy.log).toHaveBeenCalledWith(' API Key Env: GEMINI_API_KEY');
|
|
115
|
+
expect(consoleSpy.log).toHaveBeenCalledWith(' Timeout: 45s');
|
|
116
|
+
delete process.env['GEMINI_API_KEY'];
|
|
117
|
+
});
|
|
118
|
+
test('includes ignore patterns line when config has ignore_patterns', async () => {
|
|
119
|
+
const cfg = makeValidConfig({
|
|
120
|
+
ignore_patterns: ['node_modules', '*.log'],
|
|
121
|
+
});
|
|
122
|
+
mockCreateConfig.mockResolvedValue(cfg);
|
|
123
|
+
process.env['OPENAI_API_KEY'] = 'fake-key';
|
|
124
|
+
await (0, init_1.initCommand)();
|
|
125
|
+
expect(consoleSpy.log).toHaveBeenCalledWith(' Ignore Patterns: node_modules, *.log');
|
|
126
|
+
delete process.env['OPENAI_API_KEY'];
|
|
127
|
+
});
|
|
128
|
+
test('does not show ignore patterns line when ignore_patterns is undefined', async () => {
|
|
129
|
+
const cfg = makeValidConfig();
|
|
130
|
+
delete cfg.ignore_patterns;
|
|
131
|
+
mockCreateConfig.mockResolvedValue(cfg);
|
|
132
|
+
process.env['OPENAI_API_KEY'] = 'fake-key';
|
|
133
|
+
await (0, init_1.initCommand)();
|
|
134
|
+
const logCalls = consoleSpy.log.mock.calls.map((c) => c[0]);
|
|
135
|
+
expect(logCalls).not.toEqual(expect.arrayContaining([expect.stringContaining('Ignore Patterns')]));
|
|
136
|
+
delete process.env['OPENAI_API_KEY'];
|
|
137
|
+
});
|
|
138
|
+
test('does not display warning when API key env var is set', async () => {
|
|
139
|
+
const cfg = makeValidConfig({ api_key_env: 'OPENAI_API_KEY' });
|
|
140
|
+
mockCreateConfig.mockResolvedValue(cfg);
|
|
141
|
+
process.env['OPENAI_API_KEY'] = 'fake-key';
|
|
142
|
+
await (0, init_1.initCommand)();
|
|
143
|
+
expect(consoleSpy.warn).not.toHaveBeenCalled();
|
|
144
|
+
delete process.env['OPENAI_API_KEY'];
|
|
145
|
+
});
|
|
146
|
+
test('displays warning with OpenAI link when API key env var is not set for OpenAI', async () => {
|
|
147
|
+
const cfg = makeValidConfig({ provider: 'openai', api_key_env: 'OPENAI_API_KEY' });
|
|
148
|
+
mockCreateConfig.mockResolvedValue(cfg);
|
|
149
|
+
delete process.env['OPENAI_API_KEY'];
|
|
150
|
+
await (0, init_1.initCommand)();
|
|
151
|
+
expect(consoleSpy.warn).toHaveBeenCalledWith(expect.stringContaining('OPENAI_API_KEY is not set'));
|
|
152
|
+
expect(consoleSpy.warn).toHaveBeenCalledWith(expect.stringContaining('https://platform.openai.com/api-keys'));
|
|
153
|
+
});
|
|
154
|
+
test('displays warning with Gemini link when API key env var is not set for Gemini', async () => {
|
|
155
|
+
const cfg = makeValidConfig({ provider: 'gemini', api_key_env: 'GEMINI_API_KEY' });
|
|
156
|
+
mockCreateConfig.mockResolvedValue(cfg);
|
|
157
|
+
delete process.env['GEMINI_API_KEY'];
|
|
158
|
+
await (0, init_1.initCommand)();
|
|
159
|
+
expect(consoleSpy.warn).toHaveBeenCalledWith(expect.stringContaining('GEMINI_API_KEY is not set'));
|
|
160
|
+
expect(consoleSpy.warn).toHaveBeenCalledWith(expect.stringContaining('https://aistudio.google.com/app/apikey'));
|
|
161
|
+
});
|
|
162
|
+
test('logs validation warning when validateConfig returns invalid', async () => {
|
|
163
|
+
const cfg = makeValidConfig();
|
|
164
|
+
mockCreateConfig.mockResolvedValue(cfg);
|
|
165
|
+
mockValidateConfig.mockReturnValue({
|
|
166
|
+
valid: false,
|
|
167
|
+
errors: ['timeout too low'],
|
|
168
|
+
});
|
|
169
|
+
process.env['OPENAI_API_KEY'] = 'fake-key';
|
|
170
|
+
await (0, init_1.initCommand)();
|
|
171
|
+
expect(logger_1.loggerInstance.warn).toHaveBeenCalledWith('Created config has validation warnings', { errors: ['timeout too low'] });
|
|
172
|
+
delete process.env['OPENAI_API_KEY'];
|
|
173
|
+
});
|
|
174
|
+
test('catches unexpected error and prints error message', async () => {
|
|
175
|
+
mockCreateConfig.mockRejectedValue(new Error('unexpected boom'));
|
|
176
|
+
await (0, init_1.initCommand)();
|
|
177
|
+
expect(consoleSpy.error).toHaveBeenCalledWith(expect.stringContaining('unexpected error occurred'));
|
|
178
|
+
expect(logger_1.loggerInstance.error).toHaveBeenCalledWith('Init command failed', expect.objectContaining({ error: expect.any(Error) }));
|
|
179
|
+
});
|
|
54
180
|
});
|
|
55
181
|
});
|
|
56
182
|
//# sourceMappingURL=init.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.test.js","sourceRoot":"","sources":["../../src/commands/init.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iCAAqC;AACrC,kDAAoC;
|
|
1
|
+
{"version":3,"file":"init.test.js","sourceRoot":"","sources":["../../src/commands/init.test.ts"],"names":[],"mappings":"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"}
|
package/dist/config.test.js
CHANGED
|
@@ -36,9 +36,20 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
36
36
|
const config_1 = require("./config");
|
|
37
37
|
const fs = __importStar(require("fs"));
|
|
38
38
|
const yaml = __importStar(require("js-yaml"));
|
|
39
|
+
const readline = __importStar(require("readline"));
|
|
39
40
|
// Mock fs and yaml modules
|
|
40
41
|
jest.mock('fs');
|
|
41
42
|
jest.mock('js-yaml');
|
|
43
|
+
jest.mock('readline');
|
|
44
|
+
jest.mock('./logger', () => ({
|
|
45
|
+
loggerInstance: {
|
|
46
|
+
info: jest.fn(),
|
|
47
|
+
warn: jest.fn(),
|
|
48
|
+
error: jest.fn(),
|
|
49
|
+
},
|
|
50
|
+
}));
|
|
51
|
+
const logger_1 = require("./logger");
|
|
52
|
+
const mockLogger = logger_1.loggerInstance;
|
|
42
53
|
describe('Configuration Module', () => {
|
|
43
54
|
const mockConfig = {
|
|
44
55
|
provider: 'openai',
|
|
@@ -93,5 +104,161 @@ describe('Configuration Module', () => {
|
|
|
93
104
|
expect(result.errors.length).toBeGreaterThan(0);
|
|
94
105
|
});
|
|
95
106
|
});
|
|
107
|
+
// --- NEW TEST CASES ---
|
|
108
|
+
describe('loadConfig — additional branches', () => {
|
|
109
|
+
test('returns null when YAML parses to null', async () => {
|
|
110
|
+
fs.existsSync.mockReturnValue(true);
|
|
111
|
+
fs.readFileSync.mockReturnValue('');
|
|
112
|
+
yaml.load.mockReturnValue(null);
|
|
113
|
+
const result = await (0, config_1.loadConfig)('/test/cadr.yaml');
|
|
114
|
+
expect(result).toBeNull();
|
|
115
|
+
expect(mockLogger.error).toHaveBeenCalledWith('Invalid YAML configuration', expect.objectContaining({ configPath: '/test/cadr.yaml' }));
|
|
116
|
+
});
|
|
117
|
+
test('returns null when YAML parses to a string', async () => {
|
|
118
|
+
fs.existsSync.mockReturnValue(true);
|
|
119
|
+
fs.readFileSync.mockReturnValue('just a string');
|
|
120
|
+
yaml.load.mockReturnValue('just a string');
|
|
121
|
+
const result = await (0, config_1.loadConfig)('/test/cadr.yaml');
|
|
122
|
+
expect(result).toBeNull();
|
|
123
|
+
expect(mockLogger.error).toHaveBeenCalledWith('Invalid YAML configuration', expect.objectContaining({ configPath: '/test/cadr.yaml' }));
|
|
124
|
+
});
|
|
125
|
+
test('does not log warning when api_key_env is set in environment', async () => {
|
|
126
|
+
const envKey = 'TEST_API_KEY_PRESENT';
|
|
127
|
+
const configWithEnv = { ...mockConfig, api_key_env: envKey };
|
|
128
|
+
process.env[envKey] = 'some-key-value';
|
|
129
|
+
fs.existsSync.mockReturnValue(true);
|
|
130
|
+
fs.readFileSync.mockReturnValue('yaml');
|
|
131
|
+
yaml.load.mockReturnValue(configWithEnv);
|
|
132
|
+
const result = await (0, config_1.loadConfig)('/test/cadr.yaml');
|
|
133
|
+
expect(result).toEqual(configWithEnv);
|
|
134
|
+
expect(mockLogger.warn).not.toHaveBeenCalledWith('API key environment variable is not set', expect.anything());
|
|
135
|
+
delete process.env[envKey];
|
|
136
|
+
});
|
|
137
|
+
test('logs warning but still returns config when api_key_env is NOT set', async () => {
|
|
138
|
+
const envKey = 'MISSING_API_KEY_XYZ';
|
|
139
|
+
const configWithMissingEnv = { ...mockConfig, api_key_env: envKey };
|
|
140
|
+
delete process.env[envKey];
|
|
141
|
+
fs.existsSync.mockReturnValue(true);
|
|
142
|
+
fs.readFileSync.mockReturnValue('yaml');
|
|
143
|
+
yaml.load.mockReturnValue(configWithMissingEnv);
|
|
144
|
+
const result = await (0, config_1.loadConfig)('/test/cadr.yaml');
|
|
145
|
+
expect(result).toEqual(configWithMissingEnv);
|
|
146
|
+
expect(mockLogger.warn).toHaveBeenCalledWith('API key environment variable is not set', { api_key_env: envKey });
|
|
147
|
+
});
|
|
148
|
+
test('returns null when readFileSync throws a permissions error', async () => {
|
|
149
|
+
fs.existsSync.mockReturnValue(true);
|
|
150
|
+
fs.readFileSync.mockImplementation(() => {
|
|
151
|
+
throw new Error('EACCES: permission denied');
|
|
152
|
+
});
|
|
153
|
+
const result = await (0, config_1.loadConfig)('/test/cadr.yaml');
|
|
154
|
+
expect(result).toBeNull();
|
|
155
|
+
expect(mockLogger.error).toHaveBeenCalledWith('Failed to load configuration', expect.objectContaining({ configPath: '/test/cadr.yaml' }));
|
|
156
|
+
});
|
|
157
|
+
});
|
|
158
|
+
describe('validateConfig — additional cases', () => {
|
|
159
|
+
test('accepts provider gemini as valid', () => {
|
|
160
|
+
const geminiConfig = { ...mockConfig, provider: 'gemini' };
|
|
161
|
+
const result = (0, config_1.validateConfig)(geminiConfig);
|
|
162
|
+
expect(result.valid).toBe(true);
|
|
163
|
+
expect(result.errors).toHaveLength(0);
|
|
164
|
+
});
|
|
165
|
+
test('accepts timeout_seconds: 1 (min boundary) as valid', () => {
|
|
166
|
+
const config = { ...mockConfig, timeout_seconds: 1 };
|
|
167
|
+
const result = (0, config_1.validateConfig)(config);
|
|
168
|
+
expect(result.valid).toBe(true);
|
|
169
|
+
expect(result.errors).toHaveLength(0);
|
|
170
|
+
});
|
|
171
|
+
test('accepts timeout_seconds: 60 (max boundary) as valid', () => {
|
|
172
|
+
const config = { ...mockConfig, timeout_seconds: 60 };
|
|
173
|
+
const result = (0, config_1.validateConfig)(config);
|
|
174
|
+
expect(result.valid).toBe(true);
|
|
175
|
+
expect(result.errors).toHaveLength(0);
|
|
176
|
+
});
|
|
177
|
+
test('rejects timeout_seconds: 0 (below min) with error message', () => {
|
|
178
|
+
const config = { ...mockConfig, timeout_seconds: 0 };
|
|
179
|
+
const result = (0, config_1.validateConfig)(config);
|
|
180
|
+
expect(result.valid).toBe(false);
|
|
181
|
+
expect(result.errors.join('\n')).toMatch(/timeout_seconds must be at least 1 second/);
|
|
182
|
+
});
|
|
183
|
+
test('rejects timeout_seconds: 61 (above max)', () => {
|
|
184
|
+
const config = { ...mockConfig, timeout_seconds: 61 };
|
|
185
|
+
const result = (0, config_1.validateConfig)(config);
|
|
186
|
+
expect(result.valid).toBe(false);
|
|
187
|
+
expect(result.errors.join('\n')).toMatch(/timeout_seconds must not exceed 60 seconds/);
|
|
188
|
+
});
|
|
189
|
+
test('returns unknown validation error for non-yup errors', () => {
|
|
190
|
+
// We need to force validateSync to throw a non-yup error.
|
|
191
|
+
// We can do this by passing an object with a valueOf that throws.
|
|
192
|
+
const badConfig = {
|
|
193
|
+
get provider() {
|
|
194
|
+
throw new TypeError('unexpected');
|
|
195
|
+
},
|
|
196
|
+
};
|
|
197
|
+
const result = (0, config_1.validateConfig)(badConfig);
|
|
198
|
+
expect(result.valid).toBe(false);
|
|
199
|
+
expect(result.errors).toEqual(['Unknown validation error']);
|
|
200
|
+
});
|
|
201
|
+
test('accepts ignore_patterns as a valid optional array', () => {
|
|
202
|
+
const config = { ...mockConfig, ignore_patterns: ['*.md', '*.json'] };
|
|
203
|
+
const result = (0, config_1.validateConfig)(config);
|
|
204
|
+
expect(result.valid).toBe(true);
|
|
205
|
+
expect(result.errors).toHaveLength(0);
|
|
206
|
+
});
|
|
207
|
+
});
|
|
208
|
+
describe('getDefaultConfigPath', () => {
|
|
209
|
+
test('returns cadr.yaml', () => {
|
|
210
|
+
const result = (0, config_1.getDefaultConfigPath)();
|
|
211
|
+
expect(result).toBe('cadr.yaml');
|
|
212
|
+
});
|
|
213
|
+
});
|
|
214
|
+
describe('createConfig', () => {
|
|
215
|
+
function mockReadline(answers) {
|
|
216
|
+
let callIndex = 0;
|
|
217
|
+
const mockRl = {
|
|
218
|
+
question: jest.fn((_prompt, callback) => {
|
|
219
|
+
callback(answers[callIndex] || '');
|
|
220
|
+
callIndex++;
|
|
221
|
+
}),
|
|
222
|
+
close: jest.fn(),
|
|
223
|
+
};
|
|
224
|
+
readline.createInterface.mockReturnValue(mockRl);
|
|
225
|
+
return mockRl;
|
|
226
|
+
}
|
|
227
|
+
beforeEach(() => {
|
|
228
|
+
// yaml.dump needs to return a string for writeFileSync
|
|
229
|
+
yaml.dump.mockReturnValue('provider: openai\n');
|
|
230
|
+
});
|
|
231
|
+
test('creates config with openai defaults and writes to file', async () => {
|
|
232
|
+
// Answers: provider=openai, model=gpt-4, api_key_env=OPENAI_API_KEY, timeout=15, ignore_patterns=*.md
|
|
233
|
+
const mockRl = mockReadline(['openai', 'gpt-4', 'OPENAI_API_KEY', '15', '*.md']);
|
|
234
|
+
const result = await (0, config_1.createConfig)('/test/cadr.yaml');
|
|
235
|
+
expect(result).not.toBeNull();
|
|
236
|
+
expect(result.provider).toBe('openai');
|
|
237
|
+
expect(result.analysis_model).toBe('gpt-4');
|
|
238
|
+
expect(result.api_key_env).toBe('OPENAI_API_KEY');
|
|
239
|
+
expect(result.timeout_seconds).toBe(15);
|
|
240
|
+
expect(result.ignore_patterns).toEqual(['*.md']);
|
|
241
|
+
expect(fs.writeFileSync).toHaveBeenCalledWith('/test/cadr.yaml', expect.any(String), 'utf-8');
|
|
242
|
+
expect(mockRl.close).toHaveBeenCalled();
|
|
243
|
+
});
|
|
244
|
+
test('creates config with gemini defaults when gemini provider is chosen', async () => {
|
|
245
|
+
// Answer provider=gemini, then use defaults for the rest
|
|
246
|
+
mockReadline(['gemini', '', '', '15', '']);
|
|
247
|
+
// yaml.dump needs to be realistic for this call
|
|
248
|
+
yaml.dump.mockReturnValue('provider: gemini\n');
|
|
249
|
+
const result = await (0, config_1.createConfig)('/test/cadr.yaml');
|
|
250
|
+
expect(result).not.toBeNull();
|
|
251
|
+
expect(result.provider).toBe('gemini');
|
|
252
|
+
expect(result.analysis_model).toBe('gemini-1.5-pro');
|
|
253
|
+
expect(result.api_key_env).toBe('GEMINI_API_KEY');
|
|
254
|
+
});
|
|
255
|
+
test('returns null when validation fails during createConfig', async () => {
|
|
256
|
+
// Use an invalid provider to trigger validation failure
|
|
257
|
+
mockReadline(['invalid_provider', 'model', 'KEY', '15', '']);
|
|
258
|
+
const result = await (0, config_1.createConfig)('/test/cadr.yaml');
|
|
259
|
+
expect(result).toBeNull();
|
|
260
|
+
expect(fs.writeFileSync).not.toHaveBeenCalled();
|
|
261
|
+
});
|
|
262
|
+
});
|
|
96
263
|
});
|
|
97
264
|
//# sourceMappingURL=config.test.js.map
|
package/dist/config.test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.test.js","sourceRoot":"","sources":["../src/config.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config.test.js","sourceRoot":"","sources":["../src/config.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare class GitError extends Error {
|
|
2
|
+
readonly code: 'NOT_GIT_REPO' | 'GIT_NOT_FOUND' | 'GIT_ERROR';
|
|
3
|
+
readonly originalError?: Error | undefined;
|
|
4
|
+
constructor(message: string, code: 'NOT_GIT_REPO' | 'GIT_NOT_FOUND' | 'GIT_ERROR', originalError?: Error | undefined);
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=git.errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.errors.d.ts","sourceRoot":"","sources":["../../src/git/git.errors.ts"],"names":[],"mappings":"AAAA,qBAAa,QAAS,SAAQ,KAAK;aAGf,IAAI,EAAE,cAAc,GAAG,eAAe,GAAG,WAAW;aACpD,aAAa,CAAC,EAAE,KAAK;gBAFrC,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,cAAc,GAAG,eAAe,GAAG,WAAW,EACpD,aAAa,CAAC,EAAE,KAAK,YAAA;CAKxC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GitError = void 0;
|
|
4
|
+
class GitError extends Error {
|
|
5
|
+
code;
|
|
6
|
+
originalError;
|
|
7
|
+
constructor(message, code, originalError) {
|
|
8
|
+
super(message);
|
|
9
|
+
this.code = code;
|
|
10
|
+
this.originalError = originalError;
|
|
11
|
+
this.name = 'GitError';
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
exports.GitError = GitError;
|
|
15
|
+
//# sourceMappingURL=git.errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.errors.js","sourceRoot":"","sources":["../../src/git/git.errors.ts"],"names":[],"mappings":";;;AAAA,MAAa,QAAS,SAAQ,KAAK;IAGf;IACA;IAHlB,YACE,OAAe,EACC,IAAoD,EACpD,aAAqB;QAErC,KAAK,CAAC,OAAO,CAAC,CAAC;QAHC,SAAI,GAAJ,IAAI,CAAgD;QACpD,kBAAa,GAAb,aAAa,CAAQ;QAGrC,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;IACzB,CAAC;CACF;AATD,4BASC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.errors.test.d.ts","sourceRoot":"","sources":["../../src/git/git.errors.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const git_errors_1 = require("./git.errors");
|
|
4
|
+
describe('GitError', () => {
|
|
5
|
+
it('should set message, code, and name for NOT_GIT_REPO', () => {
|
|
6
|
+
const error = new git_errors_1.GitError('msg', 'NOT_GIT_REPO');
|
|
7
|
+
expect(error.message).toBe('msg');
|
|
8
|
+
expect(error.code).toBe('NOT_GIT_REPO');
|
|
9
|
+
expect(error.name).toBe('GitError');
|
|
10
|
+
});
|
|
11
|
+
it('should set code to GIT_NOT_FOUND', () => {
|
|
12
|
+
const error = new git_errors_1.GitError('msg', 'GIT_NOT_FOUND');
|
|
13
|
+
expect(error.code).toBe('GIT_NOT_FOUND');
|
|
14
|
+
});
|
|
15
|
+
it('should set code to GIT_ERROR', () => {
|
|
16
|
+
const error = new git_errors_1.GitError('msg', 'GIT_ERROR');
|
|
17
|
+
expect(error.code).toBe('GIT_ERROR');
|
|
18
|
+
});
|
|
19
|
+
it('should store originalError when provided', () => {
|
|
20
|
+
const original = new Error('original');
|
|
21
|
+
const error = new git_errors_1.GitError('msg', 'GIT_ERROR', original);
|
|
22
|
+
expect(error.originalError).toBe(original);
|
|
23
|
+
});
|
|
24
|
+
it('should have undefined originalError when not provided', () => {
|
|
25
|
+
const error = new git_errors_1.GitError('msg', 'GIT_ERROR');
|
|
26
|
+
expect(error.originalError).toBeUndefined();
|
|
27
|
+
});
|
|
28
|
+
it('should be an instance of both Error and GitError', () => {
|
|
29
|
+
const error = new git_errors_1.GitError('msg', 'NOT_GIT_REPO');
|
|
30
|
+
expect(error instanceof Error).toBe(true);
|
|
31
|
+
expect(error instanceof git_errors_1.GitError).toBe(true);
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
//# sourceMappingURL=git.errors.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.errors.test.js","sourceRoot":"","sources":["../../src/git/git.errors.test.ts"],"names":[],"mappings":";;AAAA,6CAAwC;AAExC,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACxB,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,KAAK,GAAG,IAAI,qBAAQ,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAElD,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACxC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,KAAK,GAAG,IAAI,qBAAQ,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;QAEnD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,KAAK,GAAG,IAAI,qBAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAE/C,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC;QACvC,MAAM,KAAK,GAAG,IAAI,qBAAQ,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;QAEzD,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,KAAK,GAAG,IAAI,qBAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAE/C,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,aAAa,EAAE,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,KAAK,GAAG,IAAI,qBAAQ,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAElD,MAAM,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,CAAC,KAAK,YAAY,qBAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface DiffOptions {
|
|
2
|
+
mode: 'staged' | 'all' | 'branch-diff';
|
|
3
|
+
base?: string;
|
|
4
|
+
head?: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function getStagedFiles(): Promise<string[]>;
|
|
7
|
+
export declare function getStagedDiff(): Promise<string>;
|
|
8
|
+
export declare function getAllChanges(): Promise<string[]>;
|
|
9
|
+
export declare function getAllDiff(): Promise<string>;
|
|
10
|
+
export declare function getChangedFiles(options: DiffOptions): Promise<string[]>;
|
|
11
|
+
export declare function getDiff(options: DiffOptions): Promise<string>;
|
|
12
|
+
//# sourceMappingURL=git.operations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.operations.d.ts","sourceRoot":"","sources":["../../src/git/git.operations.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,GAAG,KAAK,GAAG,aAAa,CAAC;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AA4CD,wBAAsB,cAAc,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAGxD;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,CAErD;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAGvD;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,CAElD;AAED,wBAAsB,eAAe,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAK7E;AAED,wBAAsB,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAKnE"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getStagedFiles = getStagedFiles;
|
|
4
|
+
exports.getStagedDiff = getStagedDiff;
|
|
5
|
+
exports.getAllChanges = getAllChanges;
|
|
6
|
+
exports.getAllDiff = getAllDiff;
|
|
7
|
+
exports.getChangedFiles = getChangedFiles;
|
|
8
|
+
exports.getDiff = getDiff;
|
|
9
|
+
const child_process_1 = require("child_process");
|
|
10
|
+
const util_1 = require("util");
|
|
11
|
+
const git_errors_1 = require("./git.errors");
|
|
12
|
+
const execAsync = (0, util_1.promisify)(child_process_1.exec);
|
|
13
|
+
function handleGitError(error, operation) {
|
|
14
|
+
const errorWithCode = error;
|
|
15
|
+
if (errorWithCode.code === 128) {
|
|
16
|
+
throw new git_errors_1.GitError(`Not in a Git repository. Please run 'cadr' from within a Git repository.`, 'NOT_GIT_REPO', error instanceof Error ? error : new Error(String(error)));
|
|
17
|
+
}
|
|
18
|
+
if (errorWithCode.code === 127) {
|
|
19
|
+
throw new git_errors_1.GitError('Git is not installed. Please install Git and try again.', 'GIT_NOT_FOUND', error instanceof Error ? error : new Error(String(error)));
|
|
20
|
+
}
|
|
21
|
+
throw new git_errors_1.GitError(`Unable to ${operation}. Please check repository permissions.`, 'GIT_ERROR', error instanceof Error ? error : new Error(String(error)));
|
|
22
|
+
}
|
|
23
|
+
async function execGitCommand(command) {
|
|
24
|
+
try {
|
|
25
|
+
const { stdout } = await execAsync(command);
|
|
26
|
+
return stdout;
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
handleGitError(error, command.split(' ')[1] || 'execute git command');
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
function parseFileList(stdout) {
|
|
33
|
+
return stdout
|
|
34
|
+
.split('\n')
|
|
35
|
+
.map((file) => file.trim())
|
|
36
|
+
.filter((file) => file.length > 0);
|
|
37
|
+
}
|
|
38
|
+
async function getStagedFiles() {
|
|
39
|
+
const stdout = await execGitCommand('git diff --cached --name-only');
|
|
40
|
+
return parseFileList(stdout);
|
|
41
|
+
}
|
|
42
|
+
async function getStagedDiff() {
|
|
43
|
+
return execGitCommand('git diff --cached --unified=1');
|
|
44
|
+
}
|
|
45
|
+
async function getAllChanges() {
|
|
46
|
+
const stdout = await execGitCommand('git diff HEAD --name-only');
|
|
47
|
+
return parseFileList(stdout);
|
|
48
|
+
}
|
|
49
|
+
async function getAllDiff() {
|
|
50
|
+
return execGitCommand('git diff HEAD --unified=1');
|
|
51
|
+
}
|
|
52
|
+
async function getChangedFiles(options) {
|
|
53
|
+
if (options.mode === 'staged') {
|
|
54
|
+
return getStagedFiles();
|
|
55
|
+
}
|
|
56
|
+
return getAllChanges();
|
|
57
|
+
}
|
|
58
|
+
async function getDiff(options) {
|
|
59
|
+
if (options.mode === 'staged') {
|
|
60
|
+
return getStagedDiff();
|
|
61
|
+
}
|
|
62
|
+
return getAllDiff();
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=git.operations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.operations.js","sourceRoot":"","sources":["../../src/git/git.operations.ts"],"names":[],"mappings":";;AAsDA,wCAGC;AAED,sCAEC;AAED,sCAGC;AAED,gCAEC;AAED,0CAKC;AAED,0BAKC;AApFD,iDAAqC;AACrC,+BAAiC;AACjC,6CAAwC;AAExC,MAAM,SAAS,GAAG,IAAA,gBAAS,EAAC,oBAAI,CAAC,CAAC;AAQlC,SAAS,cAAc,CAAC,KAAc,EAAE,SAAiB;IACvD,MAAM,aAAa,GAAG,KAA0B,CAAC;IAEjD,IAAI,aAAa,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;QAC/B,MAAM,IAAI,qBAAQ,CAChB,0EAA0E,EAC1E,cAAc,EACd,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAC1D,CAAC;IACJ,CAAC;IAED,IAAI,aAAa,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;QAC/B,MAAM,IAAI,qBAAQ,CAChB,yDAAyD,EACzD,eAAe,EACf,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAC1D,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,qBAAQ,CAChB,aAAa,SAAS,wCAAwC,EAC9D,WAAW,EACX,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAC1D,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,OAAe;IAC3C,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC;QAC5C,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,qBAAqB,CAAC,CAAC;IACxE,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,MAAc;IACnC,OAAO,MAAM;SACV,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACvC,CAAC;AAEM,KAAK,UAAU,cAAc;IAClC,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,+BAA+B,CAAC,CAAC;IACrE,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC;AAEM,KAAK,UAAU,aAAa;IACjC,OAAO,cAAc,CAAC,+BAA+B,CAAC,CAAC;AACzD,CAAC;AAEM,KAAK,UAAU,aAAa;IACjC,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,2BAA2B,CAAC,CAAC;IACjE,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC;AAEM,KAAK,UAAU,UAAU;IAC9B,OAAO,cAAc,CAAC,2BAA2B,CAAC,CAAC;AACrD,CAAC;AAEM,KAAK,UAAU,eAAe,CAAC,OAAoB;IACxD,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,cAAc,EAAE,CAAC;IAC1B,CAAC;IACD,OAAO,aAAa,EAAE,CAAC;AACzB,CAAC;AAEM,KAAK,UAAU,OAAO,CAAC,OAAoB;IAChD,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,aAAa,EAAE,CAAC;IACzB,CAAC;IACD,OAAO,UAAU,EAAE,CAAC;AACtB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.operations.test.d.ts","sourceRoot":"","sources":["../../src/git/git.operations.test.ts"],"names":[],"mappings":""}
|