@cxtmanager/core 1.0.9 → 1.0.11
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/LICENSE +21 -0
- package/README.md +11 -8
- package/dist/__tests__/context-manager.test.d.ts +2 -0
- package/dist/__tests__/context-manager.test.d.ts.map +1 -0
- package/dist/__tests__/context-manager.test.js +137 -0
- package/dist/__tests__/context-manager.test.js.map +1 -0
- package/dist/__tests__/file-watcher.test.d.ts +2 -0
- package/dist/__tests__/file-watcher.test.d.ts.map +1 -0
- package/dist/__tests__/file-watcher.test.js +84 -0
- package/dist/__tests__/file-watcher.test.js.map +1 -0
- package/dist/__tests__/git-repository.test.d.ts +2 -0
- package/dist/__tests__/git-repository.test.d.ts.map +1 -0
- package/dist/__tests__/git-repository.test.js +152 -0
- package/dist/__tests__/git-repository.test.js.map +1 -0
- package/dist/__tests__/plan-manager.test.d.ts +2 -0
- package/dist/__tests__/plan-manager.test.d.ts.map +1 -0
- package/dist/__tests__/plan-manager.test.js +170 -0
- package/dist/__tests__/plan-manager.test.js.map +1 -0
- package/dist/__tests__/plan-templates.test.d.ts +2 -0
- package/dist/__tests__/plan-templates.test.d.ts.map +1 -0
- package/dist/__tests__/plan-templates.test.js +93 -0
- package/dist/__tests__/plan-templates.test.js.map +1 -0
- package/dist/__tests__/validation-engine.test.d.ts +2 -0
- package/dist/__tests__/validation-engine.test.d.ts.map +1 -0
- package/dist/__tests__/validation-engine.test.js +167 -0
- package/dist/__tests__/validation-engine.test.js.map +1 -0
- package/dist/context-manager.d.ts +6 -6
- package/dist/context-manager.d.ts.map +1 -1
- package/dist/context-manager.js +108 -124
- package/dist/context-manager.js.map +1 -1
- package/dist/plan-manager.d.ts +3 -3
- package/dist/plan-manager.d.ts.map +1 -1
- package/dist/plan-manager.js +17 -7
- package/dist/plan-manager.js.map +1 -1
- package/dist/plan-templates.d.ts +4 -4
- package/dist/plan-templates.d.ts.map +1 -1
- package/dist/plan-templates.js +9 -40
- package/dist/plan-templates.js.map +1 -1
- package/dist/types.d.ts +24 -14
- package/dist/types.d.ts.map +1 -1
- package/dist/validation-engine.d.ts +5 -5
- package/dist/validation-engine.d.ts.map +1 -1
- package/dist/validation-engine.js +106 -82
- package/dist/validation-engine.js.map +1 -1
- package/package.json +2 -2
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Digital Brew LLC
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -31,7 +31,7 @@ Core library for CxtManager - context file management and Git integration.
|
|
|
31
31
|
Context files should cross-reference each other and tell a consistent story. The validation engine checks for:
|
|
32
32
|
- Structural consistency
|
|
33
33
|
- Cross-references
|
|
34
|
-
-
|
|
34
|
+
- Content quality warnings (empty, short content)
|
|
35
35
|
- Drift detection (code changes outpacing context updates)
|
|
36
36
|
|
|
37
37
|
## Installation
|
|
@@ -49,7 +49,7 @@ const manager = new ContextManager(projectRoot);
|
|
|
49
49
|
|
|
50
50
|
// Initialize context files
|
|
51
51
|
await manager.init({
|
|
52
|
-
|
|
52
|
+
mode: 'blank',
|
|
53
53
|
autoInstallHooks: true,
|
|
54
54
|
updateMode: 'manual'
|
|
55
55
|
});
|
|
@@ -91,7 +91,7 @@ Configuration is stored in `.cxt/.cxtconfig.json`:
|
|
|
91
91
|
```json
|
|
92
92
|
{
|
|
93
93
|
"version": "1.0.0",
|
|
94
|
-
"
|
|
94
|
+
"mode": "blank",
|
|
95
95
|
"git_integration": {
|
|
96
96
|
"auto_install_hooks": true
|
|
97
97
|
},
|
|
@@ -104,10 +104,11 @@ Configuration is stored in `.cxt/.cxtconfig.json`:
|
|
|
104
104
|
"enabled": true,
|
|
105
105
|
"warn_threshold": 3
|
|
106
106
|
},
|
|
107
|
-
"
|
|
108
|
-
"
|
|
109
|
-
"
|
|
110
|
-
"
|
|
107
|
+
"content_quality": {
|
|
108
|
+
"min_content_length": 100,
|
|
109
|
+
"min_content_lines": 3,
|
|
110
|
+
"empty_section_warning": true,
|
|
111
|
+
"short_content_warning": 200
|
|
111
112
|
}
|
|
112
113
|
}
|
|
113
114
|
}
|
|
@@ -128,5 +129,7 @@ npm run dev
|
|
|
128
129
|
|
|
129
130
|
## License
|
|
130
131
|
|
|
131
|
-
|
|
132
|
+
MIT License
|
|
133
|
+
|
|
134
|
+
Copyright (c) 2025 Digital Brew LLC
|
|
132
135
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-manager.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/context-manager.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
const context_manager_1 = require("../context-manager");
|
|
37
|
+
const fs = __importStar(require("fs-extra"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const os = __importStar(require("os"));
|
|
40
|
+
describe('ContextManager', () => {
|
|
41
|
+
let testDir;
|
|
42
|
+
let manager;
|
|
43
|
+
beforeEach(() => {
|
|
44
|
+
// Create a temporary directory for each test
|
|
45
|
+
testDir = path.join(os.tmpdir(), `cxtmanager-test-${Date.now()}`);
|
|
46
|
+
fs.ensureDirSync(testDir);
|
|
47
|
+
manager = new context_manager_1.ContextManager(testDir);
|
|
48
|
+
});
|
|
49
|
+
afterEach(async () => {
|
|
50
|
+
// Clean up test directory
|
|
51
|
+
if (await fs.pathExists(testDir)) {
|
|
52
|
+
await fs.remove(testDir);
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
describe('isInitialized', () => {
|
|
56
|
+
it('should return false when .cxt folder does not exist', async () => {
|
|
57
|
+
const result = await manager.isInitialized();
|
|
58
|
+
expect(result).toBe(false);
|
|
59
|
+
});
|
|
60
|
+
it('should return false when .cxt folder exists but config does not', async () => {
|
|
61
|
+
await fs.ensureDir(path.join(testDir, '.cxt'));
|
|
62
|
+
const result = await manager.isInitialized();
|
|
63
|
+
expect(result).toBe(false);
|
|
64
|
+
});
|
|
65
|
+
it('should return true when both .cxt folder and config exist', async () => {
|
|
66
|
+
await fs.ensureDir(path.join(testDir, '.cxt'));
|
|
67
|
+
await fs.writeJson(path.join(testDir, '.cxt', '.cxtconfig.json'), {
|
|
68
|
+
version: '1.0.0',
|
|
69
|
+
mode: 'auto'
|
|
70
|
+
});
|
|
71
|
+
const result = await manager.isInitialized();
|
|
72
|
+
expect(result).toBe(true);
|
|
73
|
+
});
|
|
74
|
+
it('should handle invalid JSON gracefully', async () => {
|
|
75
|
+
await fs.ensureDir(path.join(testDir, '.cxt'));
|
|
76
|
+
await fs.writeFile(path.join(testDir, '.cxt', '.cxtconfig.json'), 'invalid json');
|
|
77
|
+
// isInitialized may return true if it only checks file existence, or false if it validates JSON
|
|
78
|
+
// The actual behavior depends on implementation - test that it doesn't throw
|
|
79
|
+
const result = await manager.isInitialized();
|
|
80
|
+
expect(typeof result).toBe('boolean');
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
describe('status', () => {
|
|
84
|
+
it('should throw error when not initialized', async () => {
|
|
85
|
+
await expect(manager.status()).rejects.toThrow('CxtManager not initialized');
|
|
86
|
+
});
|
|
87
|
+
it('should return status info when initialized', async () => {
|
|
88
|
+
// Setup initialized state
|
|
89
|
+
await fs.ensureDir(path.join(testDir, '.cxt'));
|
|
90
|
+
await fs.writeJson(path.join(testDir, '.cxt', '.cxtconfig.json'), {
|
|
91
|
+
version: '1.0.0',
|
|
92
|
+
mode: 'auto'
|
|
93
|
+
});
|
|
94
|
+
// This will fail if git is not initialized, but tests the structure
|
|
95
|
+
try {
|
|
96
|
+
const status = await manager.status();
|
|
97
|
+
expect(status).toBeDefined();
|
|
98
|
+
expect(status).toHaveProperty('gitStatus');
|
|
99
|
+
expect(status).toHaveProperty('health');
|
|
100
|
+
expect(status).toHaveProperty('contextFiles');
|
|
101
|
+
expect(status).toHaveProperty('lastUpdated');
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
// Expected if git is not initialized
|
|
105
|
+
expect(error.message).toContain('Git');
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
describe('validate', () => {
|
|
110
|
+
it('should throw error when not initialized', async () => {
|
|
111
|
+
await expect(manager.validate()).rejects.toThrow('CxtManager not initialized');
|
|
112
|
+
});
|
|
113
|
+
it('should return health status when initialized', async () => {
|
|
114
|
+
// Setup initialized state
|
|
115
|
+
await fs.ensureDir(path.join(testDir, '.cxt'));
|
|
116
|
+
await fs.writeJson(path.join(testDir, '.cxt', '.cxtconfig.json'), {
|
|
117
|
+
version: '1.0.0',
|
|
118
|
+
mode: 'auto'
|
|
119
|
+
});
|
|
120
|
+
try {
|
|
121
|
+
const health = await manager.validate();
|
|
122
|
+
expect(health).toBeDefined();
|
|
123
|
+
expect(health).toHaveProperty('overall');
|
|
124
|
+
expect(health).toHaveProperty('issues');
|
|
125
|
+
expect(health).toHaveProperty('suggestions');
|
|
126
|
+
expect(health).toHaveProperty('alignments');
|
|
127
|
+
expect(health).toHaveProperty('lastChecked');
|
|
128
|
+
expect(['healthy', 'warning', 'error']).toContain(health.overall);
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
// Expected if git is not initialized
|
|
132
|
+
expect(error.message).toContain('Git');
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
//# sourceMappingURL=context-manager.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-manager.test.js","sourceRoot":"","sources":["../../src/__tests__/context-manager.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-watcher.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/file-watcher.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
const file_watcher_1 = require("../file-watcher");
|
|
37
|
+
const fs = __importStar(require("fs-extra"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const os = __importStar(require("os"));
|
|
40
|
+
describe('FileWatcher', () => {
|
|
41
|
+
let testDir;
|
|
42
|
+
let fileWatcher;
|
|
43
|
+
beforeEach(() => {
|
|
44
|
+
testDir = path.join(os.tmpdir(), `cxtmanager-watcher-test-${Date.now()}`);
|
|
45
|
+
fs.ensureDirSync(testDir);
|
|
46
|
+
fileWatcher = new file_watcher_1.FileWatcher(testDir);
|
|
47
|
+
});
|
|
48
|
+
afterEach(async () => {
|
|
49
|
+
fileWatcher.stopWatching();
|
|
50
|
+
if (await fs.pathExists(testDir)) {
|
|
51
|
+
await fs.remove(testDir);
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
describe('startWatching', () => {
|
|
55
|
+
it('should start watching files', async () => {
|
|
56
|
+
const cxtDir = path.join(testDir, '.cxt');
|
|
57
|
+
await fs.ensureDir(cxtDir);
|
|
58
|
+
const testFile = path.join(cxtDir, 'test.md');
|
|
59
|
+
fs.writeFileSync(testFile, 'initial content');
|
|
60
|
+
await fileWatcher.startWatching((filePath, event) => {
|
|
61
|
+
expect(filePath).toBeDefined();
|
|
62
|
+
expect(event).toBeDefined();
|
|
63
|
+
});
|
|
64
|
+
expect(fileWatcher).toBeDefined();
|
|
65
|
+
});
|
|
66
|
+
it('should handle missing context folder', async () => {
|
|
67
|
+
// startWatching checks for path existence and may throw or handle gracefully
|
|
68
|
+
try {
|
|
69
|
+
await fileWatcher.startWatching(() => { });
|
|
70
|
+
// If it doesn't throw, that's also valid behavior
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
expect(error.message).toContain('Context folder');
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
describe('stopWatching', () => {
|
|
78
|
+
it('should stop watching files', () => {
|
|
79
|
+
// Should not throw even if not watching
|
|
80
|
+
expect(() => fileWatcher.stopWatching()).not.toThrow();
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
//# sourceMappingURL=file-watcher.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-watcher.test.js","sourceRoot":"","sources":["../../src/__tests__/file-watcher.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kDAA8C;AAC9C,6CAA+B;AAC/B,2CAA6B;AAC7B,uCAAyB;AAEzB,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,IAAI,OAAe,CAAC;IACpB,IAAI,WAAwB,CAAC;IAE7B,UAAU,CAAC,GAAG,EAAE;QACd,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,2BAA2B,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC1E,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC1B,WAAW,GAAG,IAAI,0BAAW,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,WAAW,CAAC,YAAY,EAAE,CAAC;QAC3B,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACjC,MAAM,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;YAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC1C,MAAM,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAC9C,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;YAE9C,MAAM,WAAW,CAAC,aAAa,CAAC,CAAC,QAAgB,EAAE,KAAa,EAAE,EAAE;gBAClE,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;gBAC/B,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;YAC9B,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;YACpD,6EAA6E;YAC7E,IAAI,CAAC;gBACH,MAAM,WAAW,CAAC,aAAa,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;gBAC1C,kDAAkD;YACpD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAE,KAAe,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;YAC/D,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;QAC5B,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;YACpC,wCAAwC;YACxC,MAAM,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACzD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-repository.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/git-repository.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
const git_repository_1 = require("../git-repository");
|
|
37
|
+
const fs = __importStar(require("fs-extra"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const os = __importStar(require("os"));
|
|
40
|
+
const simple_git_1 = require("simple-git");
|
|
41
|
+
describe('GitRepository', () => {
|
|
42
|
+
let testDir;
|
|
43
|
+
let gitRepo;
|
|
44
|
+
beforeEach(() => {
|
|
45
|
+
testDir = path.join(os.tmpdir(), `cxtmanager-git-test-${Date.now()}`);
|
|
46
|
+
fs.ensureDirSync(testDir);
|
|
47
|
+
gitRepo = new git_repository_1.GitRepository(testDir);
|
|
48
|
+
});
|
|
49
|
+
afterEach(async () => {
|
|
50
|
+
if (await fs.pathExists(testDir)) {
|
|
51
|
+
await fs.remove(testDir);
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
describe('isGitRepo', () => {
|
|
55
|
+
it('should return false when not a git repository', async () => {
|
|
56
|
+
const result = await gitRepo.isGitRepo();
|
|
57
|
+
expect(result).toBe(false);
|
|
58
|
+
});
|
|
59
|
+
it('should return true after initializing git repository', async () => {
|
|
60
|
+
const git = (0, simple_git_1.simpleGit)(testDir);
|
|
61
|
+
await git.init();
|
|
62
|
+
const result = await gitRepo.isGitRepo();
|
|
63
|
+
expect(result).toBe(true);
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
describe('getStatus', () => {
|
|
67
|
+
it('should throw error when not a git repository', async () => {
|
|
68
|
+
await expect(gitRepo.getStatus()).rejects.toThrow('Not a Git repository');
|
|
69
|
+
});
|
|
70
|
+
it('should return status with empty arrays for clean repo', async () => {
|
|
71
|
+
const git = (0, simple_git_1.simpleGit)(testDir);
|
|
72
|
+
await git.init();
|
|
73
|
+
const status = await gitRepo.getStatus();
|
|
74
|
+
expect(status).toBeDefined();
|
|
75
|
+
expect(status.staged).toEqual([]);
|
|
76
|
+
expect(status.modified).toEqual([]);
|
|
77
|
+
expect(status.untracked).toEqual([]);
|
|
78
|
+
});
|
|
79
|
+
it('should detect modified files', async () => {
|
|
80
|
+
const git = (0, simple_git_1.simpleGit)(testDir);
|
|
81
|
+
await git.init();
|
|
82
|
+
try {
|
|
83
|
+
await git.addConfig('user.name', 'Test User', false, 'local');
|
|
84
|
+
await git.addConfig('user.email', 'test@example.com', false, 'local');
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
// Ignore config errors
|
|
88
|
+
}
|
|
89
|
+
// Create and modify a file
|
|
90
|
+
const testFile = path.join(testDir, 'test.txt');
|
|
91
|
+
fs.writeFileSync(testFile, 'initial');
|
|
92
|
+
await git.add(['test.txt']);
|
|
93
|
+
await git.commit('Initial commit');
|
|
94
|
+
fs.writeFileSync(testFile, 'modified');
|
|
95
|
+
const status = await gitRepo.getStatus();
|
|
96
|
+
expect(status.modified.length).toBeGreaterThan(0);
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
describe('getFileHistory', () => {
|
|
100
|
+
it('should return empty array for non-existent file', async () => {
|
|
101
|
+
const git = (0, simple_git_1.simpleGit)(testDir);
|
|
102
|
+
await git.init();
|
|
103
|
+
const history = await gitRepo.getFileHistory('nonexistent.txt');
|
|
104
|
+
expect(history).toEqual([]);
|
|
105
|
+
});
|
|
106
|
+
it('should return commit history for file', async () => {
|
|
107
|
+
const git = (0, simple_git_1.simpleGit)(testDir);
|
|
108
|
+
await git.init();
|
|
109
|
+
try {
|
|
110
|
+
await git.addConfig('user.name', 'Test User', false, 'local');
|
|
111
|
+
await git.addConfig('user.email', 'test@example.com', false, 'local');
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
// Ignore config errors
|
|
115
|
+
}
|
|
116
|
+
const testFile = path.join(testDir, 'test.txt');
|
|
117
|
+
fs.writeFileSync(testFile, 'content');
|
|
118
|
+
await git.add(['test.txt']);
|
|
119
|
+
await git.commit('Add test file');
|
|
120
|
+
const history = await gitRepo.getFileHistory('test.txt');
|
|
121
|
+
expect(history.length).toBeGreaterThan(0);
|
|
122
|
+
expect(history[0]).toHaveProperty('hash');
|
|
123
|
+
expect(history[0]).toHaveProperty('message');
|
|
124
|
+
expect(history[0]).toHaveProperty('author');
|
|
125
|
+
expect(history[0]).toHaveProperty('email');
|
|
126
|
+
expect(history[0]).toHaveProperty('date');
|
|
127
|
+
});
|
|
128
|
+
});
|
|
129
|
+
describe('addAndCommit', () => {
|
|
130
|
+
it('should throw error when not a git repository', async () => {
|
|
131
|
+
await expect(gitRepo.addAndCommit(['test.txt'], 'test message')).rejects.toThrow('Not a Git repository');
|
|
132
|
+
});
|
|
133
|
+
it('should commit files', async () => {
|
|
134
|
+
const git = (0, simple_git_1.simpleGit)(testDir);
|
|
135
|
+
await git.init();
|
|
136
|
+
try {
|
|
137
|
+
await git.addConfig('user.name', 'Test User', false, 'local');
|
|
138
|
+
await git.addConfig('user.email', 'test@example.com', false, 'local');
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
// Ignore config errors
|
|
142
|
+
}
|
|
143
|
+
const testFile = path.join(testDir, 'test.txt');
|
|
144
|
+
fs.writeFileSync(testFile, 'content');
|
|
145
|
+
await gitRepo.addAndCommit(['test.txt'], 'Test commit');
|
|
146
|
+
const log = await git.log();
|
|
147
|
+
expect(log.total).toBe(1);
|
|
148
|
+
expect(log.latest?.message).toBe('Test commit');
|
|
149
|
+
});
|
|
150
|
+
});
|
|
151
|
+
});
|
|
152
|
+
//# sourceMappingURL=git-repository.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-repository.test.js","sourceRoot":"","sources":["../../src/__tests__/git-repository.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan-manager.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/plan-manager.test.ts"],"names":[],"mappings":""}
|