@schnick371/devsteps-shared 0.7.0-next.3 → 0.7.0-next.4

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 (41) hide show
  1. package/dist/core/auto-migrate.d.ts +154 -0
  2. package/dist/core/auto-migrate.d.ts.map +1 -0
  3. package/dist/core/auto-migrate.js +383 -0
  4. package/dist/core/auto-migrate.js.map +1 -0
  5. package/dist/core/auto-migrate.test.d.ts +7 -0
  6. package/dist/core/auto-migrate.test.d.ts.map +1 -0
  7. package/dist/core/auto-migrate.test.js +364 -0
  8. package/dist/core/auto-migrate.test.js.map +1 -0
  9. package/dist/core/index-rebuild.d.ts +75 -0
  10. package/dist/core/index-rebuild.d.ts.map +1 -0
  11. package/dist/core/index-rebuild.js +260 -0
  12. package/dist/core/index-rebuild.js.map +1 -0
  13. package/dist/core/index-rebuild.test.d.ts +8 -0
  14. package/dist/core/index-rebuild.test.d.ts.map +1 -0
  15. package/dist/core/index-rebuild.test.js +582 -0
  16. package/dist/core/index-rebuild.test.js.map +1 -0
  17. package/dist/core/index-refs.d.ts +155 -0
  18. package/dist/core/index-refs.d.ts.map +1 -0
  19. package/dist/core/index-refs.js +442 -0
  20. package/dist/core/index-refs.js.map +1 -0
  21. package/dist/core/index-refs.test.d.ts +7 -0
  22. package/dist/core/index-refs.test.d.ts.map +1 -0
  23. package/dist/core/index-refs.test.js +367 -0
  24. package/dist/core/index-refs.test.js.map +1 -0
  25. package/dist/migration/fix-missing-eisenhower.d.ts +8 -0
  26. package/dist/migration/fix-missing-eisenhower.d.ts.map +1 -0
  27. package/dist/migration/fix-missing-eisenhower.js +58 -0
  28. package/dist/migration/fix-missing-eisenhower.js.map +1 -0
  29. package/dist/migration/remove-priority-field.d.ts +15 -0
  30. package/dist/migration/remove-priority-field.d.ts.map +1 -0
  31. package/dist/migration/remove-priority-field.js +113 -0
  32. package/dist/migration/remove-priority-field.js.map +1 -0
  33. package/dist/schemas/index-refs.schema.d.ts +103 -0
  34. package/dist/schemas/index-refs.schema.d.ts.map +1 -0
  35. package/dist/schemas/index-refs.schema.js +88 -0
  36. package/dist/schemas/index-refs.schema.js.map +1 -0
  37. package/dist/types/index-refs.types.d.ts +123 -0
  38. package/dist/types/index-refs.types.d.ts.map +1 -0
  39. package/dist/types/index-refs.types.js +71 -0
  40. package/dist/types/index-refs.types.js.map +1 -0
  41. package/package.json +1 -1
@@ -0,0 +1,260 @@
1
+ /**
2
+ * Index Rebuild Operations
3
+ *
4
+ * Rebuilds the refs-style index from source of truth (item files).
5
+ * Scans all item directories and reconstructs index files from scratch.
6
+ *
7
+ * Use Cases:
8
+ * - Index corruption recovery
9
+ * - Manual index repair after direct file edits
10
+ * - Migration validation
11
+ * - Development/debugging
12
+ *
13
+ * @see STORY-074 Index Rebuild Command
14
+ * @see EPIC-018 Index Architecture Refactoring
15
+ */
16
+ import { readdirSync, readFileSync, existsSync, renameSync } from 'node:fs';
17
+ import { join } from 'node:path';
18
+ import { TYPE_TO_DIRECTORY, getCurrentTimestamp } from '../utils/index.js';
19
+ import { getIndexPaths, initializeRefsStyleIndex, updateIndexByType, updateIndexByStatus, updateIndexByPriority, updateCounters, } from './index-refs.js';
20
+ /**
21
+ * Scan all item files and rebuild index from scratch
22
+ *
23
+ * Algorithm:
24
+ * 1. Backup current index (if requested)
25
+ * 2. Scan all .devsteps/{type}s/ directories
26
+ * 3. Load and validate each JSON file
27
+ * 4. Group items by type, status, eisenhower
28
+ * 5. Write new index files
29
+ * 6. Verify item count consistency
30
+ *
31
+ * @param devstepsDir Path to .devsteps directory
32
+ * @param options Rebuild options
33
+ * @returns Statistics about rebuild operation
34
+ *
35
+ * @example
36
+ * ```typescript
37
+ * const result = await rebuildIndex('.devsteps', { backup: true });
38
+ * console.log(`Rebuilt index: ${result.processedItems} items`);
39
+ * ```
40
+ */
41
+ export async function rebuildIndex(devstepsDir, options = {}) {
42
+ const { backup = true, dryRun = false, onProgress } = options;
43
+ if (!existsSync(devstepsDir)) {
44
+ throw new Error(`DevSteps directory not found: ${devstepsDir}`);
45
+ }
46
+ // Initialize result
47
+ const result = {
48
+ totalItems: 0,
49
+ processedItems: 0,
50
+ skippedItems: 0,
51
+ filesCreated: 0,
52
+ errors: [],
53
+ stats: {
54
+ byType: {},
55
+ byStatus: {},
56
+ byPriority: {},
57
+ },
58
+ };
59
+ onProgress?.(0, 100, 'Scanning item files...');
60
+ // Step 1: Backup current index
61
+ if (backup && !dryRun) {
62
+ try {
63
+ const backupPath = await backupIndexBeforeRebuild(devstepsDir);
64
+ result.backupPath = backupPath;
65
+ onProgress?.(10, 100, `Backed up to: ${backupPath}`);
66
+ }
67
+ catch (error) {
68
+ // Non-fatal: index might not exist yet
69
+ onProgress?.(10, 100, 'No existing index to backup');
70
+ }
71
+ }
72
+ // Step 2: Load all items from files
73
+ onProgress?.(20, 100, 'Loading items from disk...');
74
+ const items = await loadAllItemsFromFiles(devstepsDir, (error) => {
75
+ result.errors.push(error);
76
+ result.skippedItems++;
77
+ });
78
+ result.totalItems = items.length + result.skippedItems;
79
+ result.processedItems = items.length;
80
+ onProgress?.(50, 100, `Found ${items.length} valid items`);
81
+ // Step 3: Group items by dimensions
82
+ const byType = new Map();
83
+ const byStatus = new Map();
84
+ const byPriority = new Map();
85
+ for (const item of items) {
86
+ // Group by type
87
+ if (!byType.has(item.type)) {
88
+ byType.set(item.type, []);
89
+ }
90
+ byType.get(item.type).push(item.id);
91
+ // Group by status
92
+ if (!byStatus.has(item.status)) {
93
+ byStatus.set(item.status, []);
94
+ }
95
+ byStatus.get(item.status).push(item.id);
96
+ // Group by priority
97
+ if (!byPriority.has(item.eisenhower)) {
98
+ byPriority.set(item.eisenhower, []);
99
+ }
100
+ byPriority.get(item.eisenhower).push(item.id);
101
+ }
102
+ // Calculate stats
103
+ for (const [type, ids] of byType) {
104
+ result.stats.byType[type] = ids.length;
105
+ }
106
+ for (const [status, ids] of byStatus) {
107
+ result.stats.byStatus[status] = ids.length;
108
+ }
109
+ for (const [priority, ids] of byPriority) {
110
+ result.stats.byPriority[priority] = ids.length;
111
+ }
112
+ if (dryRun) {
113
+ onProgress?.(100, 100, 'Dry-run complete (no changes made)');
114
+ return result;
115
+ }
116
+ // Step 4: Initialize index structure
117
+ onProgress?.(60, 100, 'Initializing index structure...');
118
+ // Extract counters from existing index or calculate from items
119
+ const counters = extractCountersFromItems(items);
120
+ initializeRefsStyleIndex(devstepsDir, counters);
121
+ // Step 5: Write new index files
122
+ onProgress?.(70, 100, 'Writing index files...');
123
+ let filesWritten = 0;
124
+ // Write type indexes
125
+ for (const [type, ids] of byType) {
126
+ updateIndexByType(devstepsDir, type, ids);
127
+ filesWritten++;
128
+ }
129
+ // Write status indexes
130
+ for (const [status, ids] of byStatus) {
131
+ updateIndexByStatus(devstepsDir, status, ids);
132
+ filesWritten++;
133
+ }
134
+ // Write priority indexes
135
+ for (const [priority, ids] of byPriority) {
136
+ updateIndexByPriority(devstepsDir, priority, ids);
137
+ filesWritten++;
138
+ }
139
+ // Write counters
140
+ updateCounters(devstepsDir, counters);
141
+ filesWritten++;
142
+ result.filesCreated = filesWritten;
143
+ onProgress?.(100, 100, `Rebuild complete: ${result.processedItems} items, ${filesWritten} files`);
144
+ return result;
145
+ }
146
+ /**
147
+ * Scan all item files from .devsteps/items/{type}s/ directories
148
+ *
149
+ * If old flat structure is detected, automatically migrates to new structure first.
150
+ *
151
+ * @param devstepsDir Path to .devsteps directory
152
+ * @param onError Error callback for handling corrupt files
153
+ * @returns Array of item metadata
154
+ */
155
+ async function loadAllItemsFromFiles(devstepsDir, onError) {
156
+ // Auto-migrate if old structure detected
157
+ const { needsItemsDirectoryMigration, migrateItemsDirectory } = await import('./auto-migrate.js');
158
+ if (needsItemsDirectoryMigration(devstepsDir)) {
159
+ migrateItemsDirectory(devstepsDir, { silent: true });
160
+ }
161
+ const items = [];
162
+ // Scan each item type directory (new structure only)
163
+ for (const [type, directory] of Object.entries(TYPE_TO_DIRECTORY)) {
164
+ const dirPath = join(devstepsDir, directory);
165
+ if (!existsSync(dirPath)) {
166
+ continue; // Skip missing directories (empty projects)
167
+ }
168
+ try {
169
+ const files = readdirSync(dirPath);
170
+ for (const file of files) {
171
+ // Only process JSON metadata files
172
+ if (!file.endsWith('.json')) {
173
+ continue;
174
+ }
175
+ const filePath = join(dirPath, file);
176
+ try {
177
+ const item = await loadItemMetadata(filePath);
178
+ items.push(item);
179
+ }
180
+ catch (error) {
181
+ // Handle corrupt/invalid files
182
+ onError?.({
183
+ file: filePath,
184
+ error: error instanceof Error ? error.message : String(error),
185
+ });
186
+ }
187
+ }
188
+ }
189
+ catch (error) {
190
+ // Handle directory read errors
191
+ onError?.({
192
+ file: dirPath,
193
+ error: `Failed to read directory: ${error instanceof Error ? error.message : String(error)}`,
194
+ });
195
+ }
196
+ }
197
+ return items;
198
+ }
199
+ /**
200
+ * Load item metadata from JSON file
201
+ *
202
+ * @param filePath Absolute path to item JSON file
203
+ * @returns Item metadata
204
+ */
205
+ async function loadItemMetadata(filePath) {
206
+ const content = readFileSync(filePath, 'utf-8');
207
+ const data = JSON.parse(content);
208
+ // Validate required fields
209
+ if (!data.id || !data.type || !data.status) {
210
+ throw new Error(`Invalid item metadata: missing required fields (id, type, status)`);
211
+ }
212
+ // Ensure eisenhower field exists (default to not-urgent-not-important)
213
+ if (!data.eisenhower) {
214
+ data.eisenhower = 'not-urgent-not-important';
215
+ }
216
+ return data;
217
+ }
218
+ /**
219
+ * Extract counters from items by finding highest ID per type
220
+ *
221
+ * @param items Array of item metadata
222
+ * @returns Counter map for ID generation
223
+ */
224
+ function extractCountersFromItems(items) {
225
+ const counters = {};
226
+ for (const item of items) {
227
+ // Extract number from ID (e.g., "TASK-160" -> 160)
228
+ const match = item.id.match(/-(\d+)$/);
229
+ if (match) {
230
+ const num = Number.parseInt(match[1], 10);
231
+ const prefix = item.id.replace(/-\d+$/, '');
232
+ if (!counters[prefix] || num > counters[prefix]) {
233
+ counters[prefix] = num;
234
+ }
235
+ }
236
+ }
237
+ return counters;
238
+ }
239
+ /**
240
+ * Backup current index before rebuilding
241
+ *
242
+ * Creates timestamped backup directory:
243
+ * .devsteps/index.backup-2025-12-13T14-30-00/
244
+ *
245
+ * @param devstepsDir Path to .devsteps directory
246
+ * @returns Path to backup directory
247
+ */
248
+ async function backupIndexBeforeRebuild(devstepsDir) {
249
+ const paths = getIndexPaths(devstepsDir);
250
+ if (!existsSync(paths.root)) {
251
+ throw new Error('No index to backup');
252
+ }
253
+ // Create timestamped backup name
254
+ const timestamp = getCurrentTimestamp().replace(/:/g, '-').replace(/\./g, '-');
255
+ const backupPath = join(devstepsDir, `index.backup-${timestamp}`);
256
+ // Rename index to backup
257
+ renameSync(paths.root, backupPath);
258
+ return backupPath;
259
+ }
260
+ //# sourceMappingURL=index-rebuild.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-rebuild.js","sourceRoot":"","sources":["../../src/core/index-rebuild.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Unit Tests for Index Rebuild Operations
3
+ *
4
+ * @see STORY-074 Index Rebuild Command
5
+ * @see EPIC-018 Index Architecture Refactoring
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=index-rebuild.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-rebuild.test.d.ts","sourceRoot":"","sources":["../../src/core/index-rebuild.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}