@nahisaho/musubix-library-learner 2.1.1 → 2.2.0

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 (81) hide show
  1. package/dist/EnhancedLibraryLearner.d.ts +159 -0
  2. package/dist/EnhancedLibraryLearner.d.ts.map +1 -0
  3. package/dist/EnhancedLibraryLearner.js +296 -0
  4. package/dist/EnhancedLibraryLearner.js.map +1 -0
  5. package/dist/domain/DomainAwareAbstractor.d.ts +226 -0
  6. package/dist/domain/DomainAwareAbstractor.d.ts.map +1 -0
  7. package/dist/domain/DomainAwareAbstractor.js +237 -0
  8. package/dist/domain/DomainAwareAbstractor.js.map +1 -0
  9. package/dist/domain/__tests__/DomainAwareAbstractor.test.d.ts +9 -0
  10. package/dist/domain/__tests__/DomainAwareAbstractor.test.d.ts.map +1 -0
  11. package/dist/domain/__tests__/DomainAwareAbstractor.test.js +217 -0
  12. package/dist/domain/__tests__/DomainAwareAbstractor.test.js.map +1 -0
  13. package/dist/domain/index.d.ts +7 -0
  14. package/dist/domain/index.d.ts.map +1 -0
  15. package/dist/domain/index.js +6 -0
  16. package/dist/domain/index.js.map +1 -0
  17. package/dist/hierarchy/HierarchyManager.d.ts +227 -0
  18. package/dist/hierarchy/HierarchyManager.d.ts.map +1 -0
  19. package/dist/hierarchy/HierarchyManager.js +342 -0
  20. package/dist/hierarchy/HierarchyManager.js.map +1 -0
  21. package/dist/hierarchy/index.d.ts +9 -0
  22. package/dist/hierarchy/index.d.ts.map +1 -0
  23. package/dist/hierarchy/index.js +8 -0
  24. package/dist/hierarchy/index.js.map +1 -0
  25. package/dist/index.d.ts +18 -0
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +13 -0
  28. package/dist/index.js.map +1 -1
  29. package/dist/library/IterativeCompressor.d.ts +196 -0
  30. package/dist/library/IterativeCompressor.d.ts.map +1 -0
  31. package/dist/library/IterativeCompressor.js +367 -0
  32. package/dist/library/IterativeCompressor.js.map +1 -0
  33. package/dist/library/PatternVersionManager.d.ts +177 -0
  34. package/dist/library/PatternVersionManager.d.ts.map +1 -0
  35. package/dist/library/PatternVersionManager.js +223 -0
  36. package/dist/library/PatternVersionManager.js.map +1 -0
  37. package/dist/library/__tests__/IterativeCompressor.test.d.ts +9 -0
  38. package/dist/library/__tests__/IterativeCompressor.test.d.ts.map +1 -0
  39. package/dist/library/__tests__/IterativeCompressor.test.js +200 -0
  40. package/dist/library/__tests__/IterativeCompressor.test.js.map +1 -0
  41. package/dist/library/__tests__/PatternVersionManager.test.d.ts +9 -0
  42. package/dist/library/__tests__/PatternVersionManager.test.d.ts.map +1 -0
  43. package/dist/library/__tests__/PatternVersionManager.test.js +218 -0
  44. package/dist/library/__tests__/PatternVersionManager.test.js.map +1 -0
  45. package/dist/library/index.d.ts +4 -0
  46. package/dist/library/index.d.ts.map +1 -1
  47. package/dist/library/index.js +4 -0
  48. package/dist/library/index.js.map +1 -1
  49. package/dist/metrics/MetricsExporter.d.ts +128 -0
  50. package/dist/metrics/MetricsExporter.d.ts.map +1 -0
  51. package/dist/metrics/MetricsExporter.js +157 -0
  52. package/dist/metrics/MetricsExporter.js.map +1 -0
  53. package/dist/metrics/index.d.ts +9 -0
  54. package/dist/metrics/index.d.ts.map +1 -0
  55. package/dist/metrics/index.js +8 -0
  56. package/dist/metrics/index.js.map +1 -0
  57. package/dist/rewrite/RewriteRuleSet.d.ts +136 -0
  58. package/dist/rewrite/RewriteRuleSet.d.ts.map +1 -0
  59. package/dist/rewrite/RewriteRuleSet.js +460 -0
  60. package/dist/rewrite/RewriteRuleSet.js.map +1 -0
  61. package/dist/rewrite/index.d.ts +9 -0
  62. package/dist/rewrite/index.d.ts.map +1 -0
  63. package/dist/rewrite/index.js +8 -0
  64. package/dist/rewrite/index.js.map +1 -0
  65. package/dist/search/TypeDirectedPruner.d.ts +138 -0
  66. package/dist/search/TypeDirectedPruner.d.ts.map +1 -0
  67. package/dist/search/TypeDirectedPruner.js +245 -0
  68. package/dist/search/TypeDirectedPruner.js.map +1 -0
  69. package/dist/search/index.d.ts +9 -0
  70. package/dist/search/index.d.ts.map +1 -0
  71. package/dist/search/index.js +8 -0
  72. package/dist/search/index.js.map +1 -0
  73. package/dist/updater/IncrementalUpdater.d.ts +152 -0
  74. package/dist/updater/IncrementalUpdater.d.ts.map +1 -0
  75. package/dist/updater/IncrementalUpdater.js +283 -0
  76. package/dist/updater/IncrementalUpdater.js.map +1 -0
  77. package/dist/updater/index.d.ts +7 -0
  78. package/dist/updater/index.d.ts.map +1 -0
  79. package/dist/updater/index.js +6 -0
  80. package/dist/updater/index.js.map +1 -0
  81. package/package.json +1 -1
@@ -0,0 +1,223 @@
1
+ /**
2
+ * PatternVersionManager - Pattern Version History Management
3
+ * @module @nahisaho/musubix-library-learner
4
+ * @see TSK-LL-105
5
+ * @see DES-LL-105
6
+ * @see REQ-LL-105 Pattern versioning with rollback capability
7
+ */
8
+ // ============================================================================
9
+ // Default Implementation
10
+ // ============================================================================
11
+ /**
12
+ * Default PatternVersionManager implementation
13
+ */
14
+ export class DefaultPatternVersionManager {
15
+ config;
16
+ versions;
17
+ versionCounter;
18
+ constructor(config) {
19
+ this.config = {
20
+ maxVersionsPerPattern: config?.maxVersionsPerPattern ?? 50,
21
+ autoCleanup: config?.autoCleanup ?? true,
22
+ };
23
+ this.versions = new Map();
24
+ this.versionCounter = new Map();
25
+ }
26
+ /**
27
+ * Record a new version of a pattern
28
+ */
29
+ recordVersion(pattern, metadata) {
30
+ const patternId = pattern.id;
31
+ // Get or initialize version list
32
+ if (!this.versions.has(patternId)) {
33
+ this.versions.set(patternId, []);
34
+ this.versionCounter.set(patternId, 0);
35
+ }
36
+ // Increment version counter
37
+ const versionNumber = (this.versionCounter.get(patternId) ?? 0) + 1;
38
+ this.versionCounter.set(patternId, versionNumber);
39
+ // Generate version ID
40
+ const versionId = `v${versionNumber}-${Date.now()}`;
41
+ // Create version entry
42
+ const entry = {
43
+ versionId,
44
+ versionNumber,
45
+ timestamp: new Date(),
46
+ snapshot: this.deepClone(pattern),
47
+ metadata,
48
+ };
49
+ // Add to history
50
+ const history = this.versions.get(patternId);
51
+ history.push(entry);
52
+ // Cleanup if needed
53
+ if (this.config.autoCleanup && history.length > this.config.maxVersionsPerPattern) {
54
+ this.cleanupOldVersions(patternId);
55
+ }
56
+ return versionId;
57
+ }
58
+ /**
59
+ * Get version history for a pattern
60
+ */
61
+ getHistory(patternId) {
62
+ return this.versions.get(patternId) ?? [];
63
+ }
64
+ /**
65
+ * Get specific version
66
+ */
67
+ getVersion(patternId, versionId) {
68
+ const history = this.versions.get(patternId);
69
+ if (!history)
70
+ return undefined;
71
+ const entry = history.find((e) => e.versionId === versionId);
72
+ return entry ? this.deepClone(entry.snapshot) : undefined;
73
+ }
74
+ /**
75
+ * Get latest version
76
+ */
77
+ getLatestVersion(patternId) {
78
+ const history = this.versions.get(patternId);
79
+ if (!history || history.length === 0)
80
+ return undefined;
81
+ return this.deepClone(history[history.length - 1].snapshot);
82
+ }
83
+ /**
84
+ * Rollback to specific version
85
+ */
86
+ async rollback(patternId, versionId) {
87
+ const history = this.versions.get(patternId);
88
+ if (!history) {
89
+ throw new Error(`Pattern ${patternId} not found`);
90
+ }
91
+ const entry = history.find((e) => e.versionId === versionId);
92
+ if (!entry) {
93
+ throw new Error(`Version ${versionId} not found for pattern ${patternId}`);
94
+ }
95
+ // Create a new version with rolled back content
96
+ const rolledBackPattern = this.deepClone(entry.snapshot);
97
+ rolledBackPattern.lastUsedAt = new Date();
98
+ // Record the rollback as a new version
99
+ this.recordVersion(rolledBackPattern, {
100
+ reason: `Rollback to version ${versionId}`,
101
+ rollbackFrom: versionId,
102
+ });
103
+ return rolledBackPattern;
104
+ }
105
+ /**
106
+ * Compare two versions
107
+ */
108
+ compareVersions(patternId, versionId1, versionId2) {
109
+ const v1 = this.getVersion(patternId, versionId1);
110
+ const v2 = this.getVersion(patternId, versionId2);
111
+ const changes = [];
112
+ if (!v1 || !v2) {
113
+ return { fromVersion: versionId1, toVersion: versionId2, changes };
114
+ }
115
+ // Compare fields
116
+ const fieldsToCompare = ['name', 'usageCount', 'confidence', 'tags'];
117
+ for (const field of fieldsToCompare) {
118
+ const val1 = v1[field];
119
+ const val2 = v2[field];
120
+ if (JSON.stringify(val1) !== JSON.stringify(val2)) {
121
+ changes.push({
122
+ field,
123
+ oldValue: val1,
124
+ newValue: val2,
125
+ });
126
+ }
127
+ }
128
+ return {
129
+ fromVersion: versionId1,
130
+ toVersion: versionId2,
131
+ changes,
132
+ };
133
+ }
134
+ /**
135
+ * Get statistics
136
+ */
137
+ getStatistics() {
138
+ let totalVersions = 0;
139
+ const totalPatterns = this.versions.size;
140
+ for (const history of this.versions.values()) {
141
+ totalVersions += history.length;
142
+ }
143
+ return {
144
+ totalVersions,
145
+ totalPatterns,
146
+ averageVersionsPerPattern: totalPatterns > 0 ? totalVersions / totalPatterns : 0,
147
+ };
148
+ }
149
+ /**
150
+ * Cleanup old versions for a pattern
151
+ */
152
+ cleanupOldVersions(patternId) {
153
+ const history = this.versions.get(patternId);
154
+ if (!history)
155
+ return;
156
+ const maxToKeep = this.config.maxVersionsPerPattern;
157
+ if (history.length > maxToKeep) {
158
+ // Keep only the most recent versions
159
+ const toRemove = history.length - maxToKeep;
160
+ history.splice(0, toRemove);
161
+ }
162
+ }
163
+ /**
164
+ * Deep clone an object
165
+ */
166
+ deepClone(obj) {
167
+ return JSON.parse(JSON.stringify(obj));
168
+ }
169
+ /**
170
+ * Serialize to JSON
171
+ */
172
+ toJSON() {
173
+ const data = {};
174
+ for (const [patternId, history] of this.versions.entries()) {
175
+ data[patternId] = history.map((entry) => ({
176
+ ...entry,
177
+ timestamp: entry.timestamp,
178
+ }));
179
+ }
180
+ return JSON.stringify({
181
+ config: this.config,
182
+ patterns: data,
183
+ counters: Object.fromEntries(this.versionCounter),
184
+ });
185
+ }
186
+ /**
187
+ * Deserialize from JSON
188
+ */
189
+ fromJSON(json) {
190
+ const data = JSON.parse(json);
191
+ if (data.config) {
192
+ this.config = { ...this.config, ...data.config };
193
+ }
194
+ if (data.patterns) {
195
+ this.versions.clear();
196
+ for (const [patternId, history] of Object.entries(data.patterns)) {
197
+ const entries = history.map((entry) => ({
198
+ ...entry,
199
+ timestamp: new Date(entry.timestamp),
200
+ }));
201
+ this.versions.set(patternId, entries);
202
+ }
203
+ }
204
+ if (data.counters) {
205
+ this.versionCounter.clear();
206
+ for (const [patternId, count] of Object.entries(data.counters)) {
207
+ this.versionCounter.set(patternId, count);
208
+ }
209
+ }
210
+ }
211
+ }
212
+ // ============================================================================
213
+ // Factory Function
214
+ // ============================================================================
215
+ /**
216
+ * Create a PatternVersionManager instance
217
+ * @param config - Optional configuration
218
+ * @returns PatternVersionManager instance
219
+ */
220
+ export function createPatternVersionManager(config) {
221
+ return new DefaultPatternVersionManager(config);
222
+ }
223
+ //# sourceMappingURL=PatternVersionManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PatternVersionManager.js","sourceRoot":"","sources":["../../src/library/PatternVersionManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * IterativeCompressor Tests
3
+ * @module @nahisaho/musubix-library-learner
4
+ * @see TSK-LL-103
5
+ * @see DES-LL-103
6
+ * @see REQ-LL-103 30%+ size reduction, 95% coverage retention
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=IterativeCompressor.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IterativeCompressor.test.d.ts","sourceRoot":"","sources":["../../../src/library/__tests__/IterativeCompressor.test.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
@@ -0,0 +1,200 @@
1
+ /**
2
+ * IterativeCompressor Tests
3
+ * @module @nahisaho/musubix-library-learner
4
+ * @see TSK-LL-103
5
+ * @see DES-LL-103
6
+ * @see REQ-LL-103 30%+ size reduction, 95% coverage retention
7
+ */
8
+ import { describe, it, expect, beforeEach } from 'vitest';
9
+ import { createIterativeCompressor, } from '../IterativeCompressor.js';
10
+ describe('IterativeCompressor', () => {
11
+ let compressor;
12
+ // Helper to create mock patterns
13
+ const createPattern = (id, name, similarity) => ({
14
+ id,
15
+ name,
16
+ level: 1,
17
+ content: {
18
+ id,
19
+ ast: { type: 'Expression', value: similarity },
20
+ occurrenceCount: 5,
21
+ locations: [],
22
+ },
23
+ usageCount: 10,
24
+ confidence: 0.8,
25
+ createdAt: new Date(),
26
+ lastUsedAt: new Date(),
27
+ tags: [`group-${Math.floor(similarity * 10)}`],
28
+ });
29
+ beforeEach(() => {
30
+ compressor = createIterativeCompressor();
31
+ });
32
+ describe('Factory Function', () => {
33
+ it('should create an IterativeCompressor instance', () => {
34
+ const instance = createIterativeCompressor();
35
+ expect(instance).toBeDefined();
36
+ expect(typeof instance.compress).toBe('function');
37
+ });
38
+ it('should create with custom config', () => {
39
+ const instance = createIterativeCompressor({
40
+ similarityThreshold: 0.85,
41
+ minPatterns: 50,
42
+ targetReduction: 0.4,
43
+ });
44
+ expect(instance).toBeDefined();
45
+ });
46
+ });
47
+ describe('shouldCompress', () => {
48
+ it('should return false for less than 100 patterns', () => {
49
+ const patterns = Array.from({ length: 50 }, (_, i) => createPattern(`PAT-${i}`, `Pattern ${i}`, 0.5));
50
+ expect(compressor.shouldCompress(patterns)).toBe(false);
51
+ });
52
+ it('should return true for 100+ patterns', () => {
53
+ const patterns = Array.from({ length: 100 }, (_, i) => createPattern(`PAT-${i}`, `Pattern ${i}`, (i % 10) / 10));
54
+ expect(compressor.shouldCompress(patterns)).toBe(true);
55
+ });
56
+ it('should respect custom minimum threshold', () => {
57
+ const customCompressor = createIterativeCompressor({ minPatterns: 50 });
58
+ const patterns = Array.from({ length: 60 }, (_, i) => createPattern(`PAT-${i}`, `Pattern ${i}`, 0.5));
59
+ expect(customCompressor.shouldCompress(patterns)).toBe(true);
60
+ });
61
+ });
62
+ describe('compress', () => {
63
+ it('should reduce pattern count by 30%+', async () => {
64
+ // Create 150 patterns with some similar ones
65
+ const patterns = [];
66
+ for (let group = 0; group < 15; group++) {
67
+ for (let i = 0; i < 10; i++) {
68
+ patterns.push(createPattern(`PAT-${group}-${i}`, `Pattern ${group}-${i}`, group * 0.1 + i * 0.01));
69
+ }
70
+ }
71
+ const result = await compressor.compress(patterns);
72
+ expect(result.compressedPatterns).toBeDefined();
73
+ expect(result.compressedPatterns.length).toBeLessThan(patterns.length);
74
+ const reduction = 1 - result.compressedPatterns.length / patterns.length;
75
+ expect(reduction).toBeGreaterThanOrEqual(0.3);
76
+ });
77
+ it('should maintain 95%+ coverage', async () => {
78
+ const patterns = Array.from({ length: 120 }, (_, i) => createPattern(`PAT-${i}`, `Pattern ${i}`, (i % 5) / 10));
79
+ const result = await compressor.compress(patterns);
80
+ expect(result.coverageRetained).toBeGreaterThanOrEqual(0.95);
81
+ });
82
+ it('should return compression report', async () => {
83
+ const patterns = Array.from({ length: 100 }, (_, i) => createPattern(`PAT-${i}`, `Pattern ${i}`, (i % 10) / 10));
84
+ const result = await compressor.compress(patterns);
85
+ expect(result.originalCount).toBe(100);
86
+ expect(result.compressedCount).toBeDefined();
87
+ expect(result.mergedGroups).toBeDefined();
88
+ expect(result.coverageRetained).toBeDefined();
89
+ expect(result.compressionRatio).toBeDefined();
90
+ });
91
+ it('should handle empty patterns array', async () => {
92
+ const result = await compressor.compress([]);
93
+ expect(result.compressedPatterns).toEqual([]);
94
+ expect(result.originalCount).toBe(0);
95
+ expect(result.compressedCount).toBe(0);
96
+ });
97
+ it('should handle patterns with no similar groups', async () => {
98
+ // Each pattern completely unique
99
+ const patterns = Array.from({ length: 100 }, (_, i) => createPattern(`PAT-${i}`, `Unique Pattern ${i}`, i / 100));
100
+ const result = await compressor.compress(patterns);
101
+ // Should still compress some based on other criteria
102
+ expect(result.compressedPatterns).toBeDefined();
103
+ });
104
+ });
105
+ describe('Similarity Calculation', () => {
106
+ it('should identify similar patterns correctly', () => {
107
+ const pattern1 = createPattern('PAT-1', 'ValidateInput', 0.5);
108
+ const pattern2 = createPattern('PAT-2', 'ValidateForm', 0.5);
109
+ const pattern3 = createPattern('PAT-3', 'SendEmail', 0.9);
110
+ const similarity12 = compressor.calculateSimilarity(pattern1, pattern2);
111
+ const similarity13 = compressor.calculateSimilarity(pattern1, pattern3);
112
+ // Similar patterns should have higher similarity
113
+ expect(similarity12).toBeGreaterThan(similarity13);
114
+ });
115
+ it('should return 1.0 for identical patterns', () => {
116
+ const pattern = createPattern('PAT-1', 'TestPattern', 0.5);
117
+ const similarity = compressor.calculateSimilarity(pattern, pattern);
118
+ expect(similarity).toBe(1.0);
119
+ });
120
+ });
121
+ describe('Merge Patterns', () => {
122
+ it('should merge similar patterns into one', async () => {
123
+ const similarPatterns = [
124
+ createPattern('PAT-1', 'ValidateInput', 0.5),
125
+ createPattern('PAT-2', 'ValidateForm', 0.5),
126
+ createPattern('PAT-3', 'ValidateData', 0.5),
127
+ ];
128
+ const merged = await compressor.mergePatterns(similarPatterns);
129
+ expect(merged).toBeDefined();
130
+ expect(merged.usageCount).toBe(30); // Combined usage
131
+ expect(merged.confidence).toBeGreaterThanOrEqual(Math.max(...similarPatterns.map((p) => p.confidence)));
132
+ });
133
+ it('should preserve highest confidence after merge', async () => {
134
+ const patterns = [
135
+ { ...createPattern('PAT-1', 'Test1', 0.5), confidence: 0.7 },
136
+ { ...createPattern('PAT-2', 'Test2', 0.5), confidence: 0.9 },
137
+ { ...createPattern('PAT-3', 'Test3', 0.5), confidence: 0.8 },
138
+ ];
139
+ const merged = await compressor.mergePatterns(patterns);
140
+ expect(merged.confidence).toBe(0.9);
141
+ });
142
+ });
143
+ describe('Statistics', () => {
144
+ it('should track compression statistics', async () => {
145
+ const patterns = Array.from({ length: 100 }, (_, i) => createPattern(`PAT-${i}`, `Pattern ${i}`, (i % 10) / 10));
146
+ await compressor.compress(patterns);
147
+ const stats = compressor.getStatistics();
148
+ expect(stats.totalCompressions).toBeGreaterThanOrEqual(1);
149
+ expect(stats.averageReduction).toBeGreaterThanOrEqual(0);
150
+ expect(stats.lastCompressionTime).toBeDefined();
151
+ });
152
+ it('should reset statistics', async () => {
153
+ const patterns = Array.from({ length: 100 }, (_, i) => createPattern(`PAT-${i}`, `Pattern ${i}`, 0.5));
154
+ await compressor.compress(patterns);
155
+ compressor.resetStatistics();
156
+ const stats = compressor.getStatistics();
157
+ expect(stats.totalCompressions).toBe(0);
158
+ });
159
+ });
160
+ describe('Configuration', () => {
161
+ it('should get current config', () => {
162
+ const config = compressor.getConfig();
163
+ expect(config.similarityThreshold).toBeDefined();
164
+ expect(config.minPatterns).toBeDefined();
165
+ expect(config.targetReduction).toBeDefined();
166
+ });
167
+ it('should update config', () => {
168
+ compressor.updateConfig({ similarityThreshold: 0.9 });
169
+ const config = compressor.getConfig();
170
+ expect(config.similarityThreshold).toBe(0.9);
171
+ });
172
+ });
173
+ describe('Serialization', () => {
174
+ it('should serialize to JSON', () => {
175
+ const json = compressor.toJSON();
176
+ expect(typeof json).toBe('string');
177
+ const parsed = JSON.parse(json);
178
+ expect(parsed.config).toBeDefined();
179
+ expect(parsed.statistics).toBeDefined();
180
+ });
181
+ it('should deserialize from JSON', () => {
182
+ const json = JSON.stringify({
183
+ config: {
184
+ similarityThreshold: 0.9,
185
+ minPatterns: 200,
186
+ targetReduction: 0.5,
187
+ },
188
+ statistics: {
189
+ totalCompressions: 5,
190
+ averageReduction: 0.4,
191
+ lastCompressionTime: new Date().toISOString(),
192
+ },
193
+ });
194
+ expect(() => compressor.fromJSON(json)).not.toThrow();
195
+ const config = compressor.getConfig();
196
+ expect(config.similarityThreshold).toBe(0.9);
197
+ });
198
+ });
199
+ });
200
+ //# sourceMappingURL=IterativeCompressor.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IterativeCompressor.test.js","sourceRoot":"","sources":["../../../src/library/__tests__/IterativeCompressor.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * PatternVersionManager Tests
3
+ * @module @nahisaho/musubix-library-learner
4
+ * @see TSK-LL-105
5
+ * @see DES-LL-105
6
+ * @see REQ-LL-105 Pattern version management with rollback
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=PatternVersionManager.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PatternVersionManager.test.d.ts","sourceRoot":"","sources":["../../../src/library/__tests__/PatternVersionManager.test.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}