@t1mmen/srtd 0.4.0 → 0.4.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/README.md +24 -22
- package/dist/__tests__/apply.test.d.ts +1 -0
- package/dist/__tests__/apply.test.js +69 -0
- package/dist/__tests__/apply.test.js.map +1 -0
- package/dist/__tests__/build.test.d.ts +1 -0
- package/dist/__tests__/build.test.js +67 -0
- package/dist/__tests__/build.test.js.map +1 -0
- package/dist/__tests__/watch.test.js +9 -3
- package/dist/__tests__/watch.test.js.map +1 -1
- package/dist/commands/_app.js +11 -17
- package/dist/commands/_app.js.map +1 -1
- package/dist/commands/apply.d.ts +2 -1
- package/dist/commands/apply.js +16 -19
- package/dist/commands/apply.js.map +1 -1
- package/dist/commands/build.d.ts +5 -1
- package/dist/commands/build.js +25 -9
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/index.js +2 -1
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/register.js +6 -5
- package/dist/commands/register.js.map +1 -1
- package/dist/commands/watch.js +35 -23
- package/dist/commands/watch.js.map +1 -1
- package/dist/components/Branding.js +7 -7
- package/dist/components/Branding.js.map +1 -1
- package/dist/components/Debug.d.ts +2 -0
- package/dist/components/Debug.js +160 -0
- package/dist/components/Debug.js.map +1 -0
- package/dist/components/ProcessingResults.d.ts +9 -0
- package/dist/components/ProcessingResults.js +32 -0
- package/dist/components/ProcessingResults.js.map +1 -0
- package/dist/components/Quittable.js +1 -1
- package/dist/components/customTheme.d.ts +10 -0
- package/dist/components/customTheme.js +66 -0
- package/dist/components/customTheme.js.map +1 -0
- package/dist/hooks/useDatabaseConnection.js +21 -32
- package/dist/hooks/useDatabaseConnection.js.map +1 -1
- package/dist/hooks/useTemplateProcessor.d.ts +11 -0
- package/dist/hooks/useTemplateProcessor.js +71 -0
- package/dist/hooks/useTemplateProcessor.js.map +1 -0
- package/dist/lib/templateManager.d.ts +4 -0
- package/dist/lib/templateManager.js +29 -6
- package/dist/lib/templateManager.js.map +1 -1
- package/dist/lib/templateManager.test.js +54 -31
- package/dist/lib/templateManager.test.js.map +1 -1
- package/dist/types.d.ts +3 -0
- package/dist/utils/databaseConnection.d.ts +5 -0
- package/dist/utils/databaseConnection.js +36 -21
- package/dist/utils/databaseConnection.js.map +1 -1
- package/dist/utils/store.d.ts +5 -0
- package/dist/utils/store.js +10 -0
- package/dist/utils/store.js.map +1 -0
- package/package.json +2 -1
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { useEffect, useRef, useState } from 'react';
|
|
2
|
+
import { TemplateManager } from '../lib/templateManager.js';
|
|
3
|
+
import { disconnect } from '../utils/databaseConnection.js';
|
|
4
|
+
export function useTemplateProcessor(options) {
|
|
5
|
+
const [result, setResult] = useState({
|
|
6
|
+
applied: [],
|
|
7
|
+
errors: [],
|
|
8
|
+
skipped: [],
|
|
9
|
+
built: [],
|
|
10
|
+
});
|
|
11
|
+
const [isProcessing, setIsProcessing] = useState(true);
|
|
12
|
+
const managerRef = useRef();
|
|
13
|
+
const processedRef = useRef(false);
|
|
14
|
+
useEffect(() => {
|
|
15
|
+
let mounted = true;
|
|
16
|
+
async function doProcess() {
|
|
17
|
+
// Prevent duplicate processing
|
|
18
|
+
if (processedRef.current)
|
|
19
|
+
return;
|
|
20
|
+
processedRef.current = true;
|
|
21
|
+
try {
|
|
22
|
+
if (!managerRef.current) {
|
|
23
|
+
managerRef.current = await TemplateManager.create(process.cwd(), {
|
|
24
|
+
silent: true,
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
const result = await managerRef.current.processTemplates(options);
|
|
28
|
+
if (options.apply) {
|
|
29
|
+
await disconnect();
|
|
30
|
+
}
|
|
31
|
+
if (mounted) {
|
|
32
|
+
setResult(result);
|
|
33
|
+
setIsProcessing(false);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
catch (err) {
|
|
37
|
+
console.error('Processing error:', err);
|
|
38
|
+
if (options.apply) {
|
|
39
|
+
await disconnect();
|
|
40
|
+
}
|
|
41
|
+
if (mounted) {
|
|
42
|
+
setResult(prev => ({
|
|
43
|
+
...prev,
|
|
44
|
+
errors: [
|
|
45
|
+
...prev.errors,
|
|
46
|
+
{
|
|
47
|
+
file: 'process',
|
|
48
|
+
templateName: 'global',
|
|
49
|
+
error: err instanceof Error ? err.message : String(err),
|
|
50
|
+
},
|
|
51
|
+
],
|
|
52
|
+
}));
|
|
53
|
+
setIsProcessing(false);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
void doProcess();
|
|
58
|
+
return () => {
|
|
59
|
+
mounted = false;
|
|
60
|
+
// Only dispose if we're unmounting
|
|
61
|
+
if (managerRef.current) {
|
|
62
|
+
void disconnect();
|
|
63
|
+
managerRef.current[Symbol.dispose]?.();
|
|
64
|
+
managerRef.current = undefined;
|
|
65
|
+
processedRef.current = false;
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
}, [options]);
|
|
69
|
+
return { result, isProcessing };
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=useTemplateProcessor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTemplateProcessor.js","sourceRoot":"","sources":["../../src/hooks/useTemplateProcessor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import EventEmitter from 'node:events';
|
|
2
|
+
import type { FSWatcher } from 'chokidar';
|
|
2
3
|
import type { ProcessedTemplateResult, TemplateStatus } from '../types.js';
|
|
4
|
+
declare global {
|
|
5
|
+
var __srtd_watchers: FSWatcher[];
|
|
6
|
+
}
|
|
3
7
|
export declare class TemplateManager extends EventEmitter implements Disposable {
|
|
4
8
|
private watcher;
|
|
5
9
|
private baseDir;
|
|
@@ -11,6 +11,9 @@ import { isWipTemplate } from '../utils/isWipTemplate.js';
|
|
|
11
11
|
import { loadBuildLog } from '../utils/loadBuildLog.js';
|
|
12
12
|
import { logger } from '../utils/logger.js';
|
|
13
13
|
import { saveBuildLog } from '../utils/saveBuildLog.js';
|
|
14
|
+
if (!global.__srtd_watchers) {
|
|
15
|
+
global.__srtd_watchers = [];
|
|
16
|
+
}
|
|
14
17
|
export class TemplateManager extends EventEmitter {
|
|
15
18
|
watcher = null;
|
|
16
19
|
baseDir;
|
|
@@ -75,6 +78,7 @@ export class TemplateManager extends EventEmitter {
|
|
|
75
78
|
currentHash,
|
|
76
79
|
migrationHash: null,
|
|
77
80
|
buildState,
|
|
81
|
+
wip: await isWipTemplate(templatePath),
|
|
78
82
|
};
|
|
79
83
|
this.templateCache.set(templatePath, {
|
|
80
84
|
status,
|
|
@@ -126,7 +130,7 @@ export class TemplateManager extends EventEmitter {
|
|
|
126
130
|
}
|
|
127
131
|
return result;
|
|
128
132
|
}
|
|
129
|
-
return { errors: [], applied: [] };
|
|
133
|
+
return { errors: [], applied: [], skipped: [template.name], built: [] };
|
|
130
134
|
}
|
|
131
135
|
catch (error) {
|
|
132
136
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
@@ -145,6 +149,8 @@ export class TemplateManager extends EventEmitter {
|
|
|
145
149
|
},
|
|
146
150
|
],
|
|
147
151
|
applied: [],
|
|
152
|
+
skipped: [],
|
|
153
|
+
built: [],
|
|
148
154
|
};
|
|
149
155
|
}
|
|
150
156
|
}
|
|
@@ -180,6 +186,8 @@ export class TemplateManager extends EventEmitter {
|
|
|
180
186
|
pollInterval: 50,
|
|
181
187
|
},
|
|
182
188
|
});
|
|
189
|
+
// Track watcher globally
|
|
190
|
+
global.__srtd_watchers.push(watcher);
|
|
183
191
|
// Do initial scan once
|
|
184
192
|
const existingFiles = await glob(path.join(templatePath, this.config.filter));
|
|
185
193
|
for (const file of existingFiles) {
|
|
@@ -197,8 +205,16 @@ export class TemplateManager extends EventEmitter {
|
|
|
197
205
|
.on('error', error => {
|
|
198
206
|
this.log(`Watcher error: ${error}`, 'error');
|
|
199
207
|
});
|
|
208
|
+
// Update cleanup
|
|
200
209
|
this.watcher = watcher;
|
|
201
|
-
return
|
|
210
|
+
return {
|
|
211
|
+
close: async () => {
|
|
212
|
+
await watcher.close();
|
|
213
|
+
const idx = global.__srtd_watchers.indexOf(watcher);
|
|
214
|
+
if (idx > -1)
|
|
215
|
+
global.__srtd_watchers.splice(idx, 1);
|
|
216
|
+
},
|
|
217
|
+
};
|
|
202
218
|
}
|
|
203
219
|
async applyTemplate(templatePath) {
|
|
204
220
|
const template = await this.getTemplateStatus(templatePath);
|
|
@@ -220,7 +236,7 @@ export class TemplateManager extends EventEmitter {
|
|
|
220
236
|
};
|
|
221
237
|
await this.saveBuildLogs();
|
|
222
238
|
this.invalidateCache(templatePath);
|
|
223
|
-
return { errors: [], applied: [template.name] };
|
|
239
|
+
return { errors: [], applied: [template.name], skipped: [], built: [] };
|
|
224
240
|
}
|
|
225
241
|
// On error, don't update hash but track the error
|
|
226
242
|
this.localBuildLog.templates[relPath] = {
|
|
@@ -228,7 +244,7 @@ export class TemplateManager extends EventEmitter {
|
|
|
228
244
|
lastAppliedError: result.error,
|
|
229
245
|
};
|
|
230
246
|
await this.saveBuildLogs();
|
|
231
|
-
return { errors: [result], applied: [] };
|
|
247
|
+
return { errors: [result], applied: [], skipped: [], built: [] };
|
|
232
248
|
}
|
|
233
249
|
catch (error) {
|
|
234
250
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
@@ -282,10 +298,10 @@ export class TemplateManager extends EventEmitter {
|
|
|
282
298
|
}
|
|
283
299
|
async processTemplates(options) {
|
|
284
300
|
const templates = await this.findTemplates();
|
|
285
|
-
const result = { errors: [], applied: [] };
|
|
301
|
+
const result = { errors: [], applied: [], built: [], skipped: [] };
|
|
286
302
|
this.log('\n');
|
|
287
303
|
if (options.apply) {
|
|
288
|
-
const connectionTimeout = new Promise((_, reject) => setTimeout(() => reject(new Error('Database connection timeout')),
|
|
304
|
+
const connectionTimeout = new Promise((_, reject) => setTimeout(() => reject(new Error('Database connection timeout')), 1000));
|
|
289
305
|
const isConnected = await Promise.race([testConnection(), connectionTimeout]);
|
|
290
306
|
if (!isConnected) {
|
|
291
307
|
this.log('Failed to connect to database, cannot proceed. Is Supabase running?', 'error');
|
|
@@ -299,6 +315,7 @@ export class TemplateManager extends EventEmitter {
|
|
|
299
315
|
const processResult = await this.processTemplate(templatePath, options.force);
|
|
300
316
|
result.errors.push(...processResult.errors);
|
|
301
317
|
result.applied.push(...processResult.applied);
|
|
318
|
+
result.skipped.push(...processResult.skipped);
|
|
302
319
|
}
|
|
303
320
|
if (result.applied.length === 0 && result.errors.length === 0) {
|
|
304
321
|
this.log('No changes to apply', 'skip');
|
|
@@ -323,12 +340,18 @@ export class TemplateManager extends EventEmitter {
|
|
|
323
340
|
const template = await this.getTemplateStatus(templatePath);
|
|
324
341
|
if (options.force || template.currentHash !== template.buildState.lastBuildHash) {
|
|
325
342
|
await this.buildTemplate(templatePath, options.force);
|
|
343
|
+
result.built.push(template.name);
|
|
326
344
|
built++;
|
|
327
345
|
}
|
|
328
346
|
else {
|
|
347
|
+
result.skipped.push(template.name);
|
|
329
348
|
skipped++;
|
|
330
349
|
}
|
|
331
350
|
}
|
|
351
|
+
else {
|
|
352
|
+
result.skipped.push(path.basename(templatePath, '.sql'));
|
|
353
|
+
skipped++;
|
|
354
|
+
}
|
|
332
355
|
}
|
|
333
356
|
if (built > 0) {
|
|
334
357
|
this.log(`Generated ${built} migration file(s)`, 'success');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templateManager.js","sourceRoot":"","sources":["../../src/lib/templateManager.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"templateManager.js","sourceRoot":"","sources":["../../src/lib/templateManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -59,6 +59,15 @@ import { calculateMD5 } from '../utils/calculateMD5.js';
|
|
|
59
59
|
import { connect, disconnect } from '../utils/databaseConnection.js';
|
|
60
60
|
import { ensureDirectories } from '../utils/ensureDirectories.js';
|
|
61
61
|
import { TemplateManager } from './templateManager.js';
|
|
62
|
+
const waitForCondition = async (condition, timeout = 5000, interval = 100) => {
|
|
63
|
+
const start = Date.now();
|
|
64
|
+
while (Date.now() - start < timeout) {
|
|
65
|
+
if (await condition())
|
|
66
|
+
return true;
|
|
67
|
+
await new Promise(resolve => setTimeout(resolve, interval));
|
|
68
|
+
}
|
|
69
|
+
return false;
|
|
70
|
+
};
|
|
62
71
|
describe('TemplateManager', () => {
|
|
63
72
|
const testContext = {
|
|
64
73
|
timestamp: Date.now(),
|
|
@@ -113,7 +122,7 @@ describe('TemplateManager', () => {
|
|
|
113
122
|
return createTemplate(name, content, dir);
|
|
114
123
|
};
|
|
115
124
|
it('should create migration file when template changes', async () => {
|
|
116
|
-
await createTemplateWithFunc(`test-${testContext.timestamp}.sql
|
|
125
|
+
await createTemplateWithFunc(`test-${testContext.timestamp}.sql`, '_file_change');
|
|
117
126
|
const manager = await TemplateManager.create(testContext.testDir);
|
|
118
127
|
await manager.processTemplates({ generateFiles: true });
|
|
119
128
|
const migrations = await fs.readdir(join(testContext.testDir, 'test-migrations'));
|
|
@@ -121,7 +130,7 @@ describe('TemplateManager', () => {
|
|
|
121
130
|
expect(relevantMigrations).toHaveLength(1);
|
|
122
131
|
});
|
|
123
132
|
it('should not allow building WIP templates', async () => {
|
|
124
|
-
await createTemplateWithFunc(`test-${testContext.timestamp}.wip.sql
|
|
133
|
+
await createTemplateWithFunc(`test-${testContext.timestamp}.wip.sql`, '_wip_wont_build');
|
|
125
134
|
const manager = await TemplateManager.create(testContext.testDir);
|
|
126
135
|
await manager.processTemplates({ generateFiles: true });
|
|
127
136
|
const migrations = await fs.readdir(join(testContext.testDir, 'test-migrations'));
|
|
@@ -202,29 +211,43 @@ describe('TemplateManager', () => {
|
|
|
202
211
|
}
|
|
203
212
|
});
|
|
204
213
|
it('should handle sequential template operations', async () => {
|
|
205
|
-
const templates = await Promise.all([...Array(5)].map((_, i) => createTemplateWithFunc(`sequencetest-${i}-${testContext.timestamp}.sql`, `_sequence_test_${i}`)));
|
|
214
|
+
const templates = await Promise.all([...Array(5)].map(async (_, i) => createTemplateWithFunc(`sequencetest-${i}-${testContext.timestamp}.sql`, `_sequence_test_${i}`)));
|
|
206
215
|
const manager = await TemplateManager.create(testContext.testDir);
|
|
207
|
-
// Apply templates one by one
|
|
208
|
-
for (const _templatePath of templates) {
|
|
209
|
-
const result = await manager.processTemplates({ apply: true });
|
|
210
|
-
expect(result.errors).toHaveLength(0);
|
|
211
|
-
}
|
|
212
|
-
await new Promise(resolve => setTimeout(resolve, 100));
|
|
213
216
|
const client = await connect();
|
|
214
217
|
try {
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
218
|
+
// Start transaction for isolation
|
|
219
|
+
await client.query('BEGIN');
|
|
220
|
+
// Apply templates and verify each one
|
|
221
|
+
for (const [index, _] of templates.entries()) {
|
|
222
|
+
const result = await manager.processTemplates({ apply: true });
|
|
223
|
+
expect(result.errors).toHaveLength(0);
|
|
224
|
+
// Wait for function to appear with retry logic
|
|
225
|
+
const functionExists = await waitForCondition(async () => {
|
|
226
|
+
const res = await client.query(`SELECT proname FROM pg_proc WHERE proname = $1`, [
|
|
227
|
+
`${testContext.testFunctionName}_sequence_test_${index}`,
|
|
228
|
+
]);
|
|
229
|
+
return res.rows.length === 1;
|
|
230
|
+
});
|
|
231
|
+
expect(functionExists).toBe(true);
|
|
220
232
|
}
|
|
233
|
+
// Verify final state
|
|
234
|
+
const allFunctions = await client.query(`SELECT proname FROM pg_proc WHERE proname LIKE $1`, [
|
|
235
|
+
`${testContext.testFunctionName}_sequence_test_%`,
|
|
236
|
+
]);
|
|
237
|
+
expect(allFunctions.rows).toHaveLength(5);
|
|
238
|
+
}
|
|
239
|
+
catch (error) {
|
|
240
|
+
console.error('Test failed:', error);
|
|
241
|
+
throw error;
|
|
221
242
|
}
|
|
222
243
|
finally {
|
|
244
|
+
// Cleanup
|
|
245
|
+
await client.query('ROLLBACK');
|
|
223
246
|
client.release();
|
|
224
247
|
}
|
|
225
248
|
});
|
|
226
249
|
it('should generate unique timestamps for multiple templates', async () => {
|
|
227
|
-
const templates = await Promise.all([...Array(10)].map((_, i) => createTemplateWithFunc(`timestamptest-${i}-${testContext.timestamp}.sql`, `
|
|
250
|
+
const templates = await Promise.all([...Array(10)].map((_, i) => createTemplateWithFunc(`timestamptest-${i}-${testContext.timestamp}.sql`, `_unique_timestamps_${i}`)));
|
|
228
251
|
const manager = await TemplateManager.create(testContext.testDir);
|
|
229
252
|
await manager.processTemplates({ generateFiles: true });
|
|
230
253
|
const migrations = await fs.readdir(join(testContext.testDir, 'test-migrations'));
|
|
@@ -234,7 +257,7 @@ describe('TemplateManager', () => {
|
|
|
234
257
|
expect(timestamps).toEqual([...timestamps].sort());
|
|
235
258
|
});
|
|
236
259
|
it('should handle mix of working and broken templates', async () => {
|
|
237
|
-
await createTemplateWithFunc(`a-test-good-${testContext.timestamp}.sql`, '
|
|
260
|
+
await createTemplateWithFunc(`a-test-good-${testContext.timestamp}.sql`, '_good_and_broken_mix');
|
|
238
261
|
await createTemplate(`a-test-bad-${testContext.timestamp}.sql`, 'INVALID SQL SYNTAX;');
|
|
239
262
|
const manager = await TemplateManager.create(testContext.testDir);
|
|
240
263
|
const result = await manager.processTemplates({ apply: true });
|
|
@@ -243,7 +266,7 @@ describe('TemplateManager', () => {
|
|
|
243
266
|
const client = await connect();
|
|
244
267
|
try {
|
|
245
268
|
const res = await client.query(`SELECT COUNT(*) FROM pg_proc WHERE proname = $1`, [
|
|
246
|
-
`${testContext.testFunctionName}
|
|
269
|
+
`${testContext.testFunctionName}_good_and_broken_mix`,
|
|
247
270
|
]);
|
|
248
271
|
expect(Number.parseInt(res.rows[0].count)).toBe(1);
|
|
249
272
|
}
|
|
@@ -281,7 +304,7 @@ describe('TemplateManager', () => {
|
|
|
281
304
|
});
|
|
282
305
|
it('should handle large batches of templates', async () => {
|
|
283
306
|
// Create 50 templates
|
|
284
|
-
await Promise.all([...Array(50)].map((_, i) => createTemplateWithFunc(`test-${i}-${testContext.timestamp}.sql`, `
|
|
307
|
+
await Promise.all([...Array(50)].map((_, i) => createTemplateWithFunc(`test-${i}-${testContext.timestamp}.sql`, `_large_batch_${i}`)));
|
|
285
308
|
const manager = await TemplateManager.create(testContext.testDir);
|
|
286
309
|
const result = await manager.processTemplates({ generateFiles: true });
|
|
287
310
|
expect(result.errors).toHaveLength(0);
|
|
@@ -333,7 +356,7 @@ describe('TemplateManager', () => {
|
|
|
333
356
|
}
|
|
334
357
|
});
|
|
335
358
|
it('should maintain template state across manager instances', async () => {
|
|
336
|
-
const template = await createTemplateWithFunc(`test-${testContext.timestamp}.sql
|
|
359
|
+
const template = await createTemplateWithFunc(`test-${testContext.timestamp}.sql`, 'maintain_state');
|
|
337
360
|
// First manager instance
|
|
338
361
|
const manager1 = await TemplateManager.create(testContext.testDir);
|
|
339
362
|
await manager1.processTemplates({ generateFiles: true });
|
|
@@ -350,7 +373,7 @@ describe('TemplateManager', () => {
|
|
|
350
373
|
});
|
|
351
374
|
const watcher = await manager.watch();
|
|
352
375
|
// Add new template after watch started
|
|
353
|
-
await createTemplateWithFunc(`test-new-${testContext.timestamp}.sql
|
|
376
|
+
await createTemplateWithFunc(`test-new-${testContext.timestamp}.sql`, '_watch_addition');
|
|
354
377
|
await new Promise(resolve => setTimeout(resolve, 150));
|
|
355
378
|
watcher.close();
|
|
356
379
|
expect(changes).toContain(`test-new-${testContext.timestamp}`);
|
|
@@ -389,7 +412,7 @@ describe('TemplateManager', () => {
|
|
|
389
412
|
// Create various file types
|
|
390
413
|
await fs.writeFile(join(testContext.testDir, 'test-templates/test.txt'), 'not sql');
|
|
391
414
|
await fs.writeFile(join(testContext.testDir, 'test-templates/test.md'), 'not sql');
|
|
392
|
-
await createTemplateWithFunc(`test-sql-${testContext.timestamp}.sql
|
|
415
|
+
await createTemplateWithFunc(`test-sql-${testContext.timestamp}.sql`, '_watch_sql_only');
|
|
393
416
|
await new Promise(resolve => setTimeout(resolve, 500));
|
|
394
417
|
watcher.close();
|
|
395
418
|
expect(changes).toHaveLength(1);
|
|
@@ -482,12 +505,12 @@ describe('TemplateManager', () => {
|
|
|
482
505
|
});
|
|
483
506
|
await manager.watch();
|
|
484
507
|
// Create template before disposal
|
|
485
|
-
await createTemplateWithFunc(`test-before-dispose-${testContext.timestamp}.sql
|
|
508
|
+
await createTemplateWithFunc(`test-before-dispose-${testContext.timestamp}.sql`, 'before_dispose');
|
|
486
509
|
await new Promise(resolve => setTimeout(resolve, 100));
|
|
487
510
|
// Dispose and verify cleanup
|
|
488
511
|
manager[Symbol.dispose]();
|
|
489
512
|
// Try creating template after disposal
|
|
490
|
-
await createTemplateWithFunc(`test-after-dispose-${testContext.timestamp}.sql
|
|
513
|
+
await createTemplateWithFunc(`test-after-dispose-${testContext.timestamp}.sql`, 'after_dispose');
|
|
491
514
|
await new Promise(resolve => setTimeout(resolve, 100));
|
|
492
515
|
expect(changes).toHaveLength(1);
|
|
493
516
|
expect(changes[0]).toBe(`test-before-dispose-${testContext.timestamp}`);
|
|
@@ -502,7 +525,7 @@ describe('TemplateManager', () => {
|
|
|
502
525
|
changes.push(template.name);
|
|
503
526
|
});
|
|
504
527
|
await manager.watch();
|
|
505
|
-
await createTemplateWithFunc(`test-during-scope-${testContext.timestamp}.sql
|
|
528
|
+
await createTemplateWithFunc(`test-during-scope-${testContext.timestamp}.sql`, 'during_scope');
|
|
506
529
|
await new Promise(resolve => setTimeout(resolve, 100));
|
|
507
530
|
}
|
|
508
531
|
catch (e_1) {
|
|
@@ -514,13 +537,13 @@ describe('TemplateManager', () => {
|
|
|
514
537
|
}
|
|
515
538
|
})();
|
|
516
539
|
// After scope exit, create another template
|
|
517
|
-
await createTemplateWithFunc(`test-after-scope-${testContext.timestamp}.sql
|
|
540
|
+
await createTemplateWithFunc(`test-after-scope-${testContext.timestamp}.sql`, 'after_scope');
|
|
518
541
|
await new Promise(resolve => setTimeout(resolve, 100));
|
|
519
542
|
expect(changes).toHaveLength(1);
|
|
520
543
|
expect(changes[0]).toBe(`test-during-scope-${testContext.timestamp}`);
|
|
521
544
|
});
|
|
522
545
|
it('should not process unchanged templates', async () => {
|
|
523
|
-
const templatePath = await createTemplateWithFunc(`test-unchanged-${testContext.timestamp}.sql
|
|
546
|
+
const templatePath = await createTemplateWithFunc(`test-unchanged-${testContext.timestamp}.sql`, 'unchanged');
|
|
524
547
|
const manager = await TemplateManager.create(testContext.testDir);
|
|
525
548
|
await manager.watch();
|
|
526
549
|
// First processing
|
|
@@ -558,7 +581,7 @@ describe('TemplateManager', () => {
|
|
|
558
581
|
expect(changes[0]).toBe(`modified_tmpl_1-${testContext.timestamp}`);
|
|
559
582
|
});
|
|
560
583
|
it('should correctly update local buildlog on apply', async () => {
|
|
561
|
-
const templatePath = await createTemplateWithFunc(`test-buildlog-${testContext.timestamp}.sql
|
|
584
|
+
const templatePath = await createTemplateWithFunc(`test-buildlog-${testContext.timestamp}.sql`, '_buildlog');
|
|
562
585
|
const manager = await TemplateManager.create(testContext.testDir);
|
|
563
586
|
const localBuildlogPath = join(testContext.testDir, '.buildlog-test.local.json');
|
|
564
587
|
// Initial apply
|
|
@@ -583,7 +606,7 @@ describe('TemplateManager', () => {
|
|
|
583
606
|
expect(newHash).not.toBe(initialHash);
|
|
584
607
|
});
|
|
585
608
|
it('should skip apply if template hash matches local buildlog', async () => {
|
|
586
|
-
const templatePath = await createTemplateWithFunc(`test-skip-${testContext.timestamp}.sql
|
|
609
|
+
const templatePath = await createTemplateWithFunc(`test-skip-${testContext.timestamp}.sql`, '_skip_apply');
|
|
587
610
|
const manager = await TemplateManager.create(testContext.testDir);
|
|
588
611
|
const localBuildlogPath = join(testContext.testDir, '.buildlog-test.local.json');
|
|
589
612
|
// Initial apply
|
|
@@ -645,7 +668,7 @@ describe('TemplateManager', () => {
|
|
|
645
668
|
});
|
|
646
669
|
it('should process unapplied templates on startup', async () => {
|
|
647
670
|
// Create template but don't process it
|
|
648
|
-
await createTemplateWithFunc(`startup-test-${testContext.timestamp}.sql
|
|
671
|
+
await createTemplateWithFunc(`startup-test-${testContext.timestamp}.sql`, '_startup_test');
|
|
649
672
|
// Create a new manager instance
|
|
650
673
|
const manager = await TemplateManager.create(testContext.testDir);
|
|
651
674
|
const changes = [];
|
|
@@ -685,7 +708,7 @@ describe('TemplateManager', () => {
|
|
|
685
708
|
]);
|
|
686
709
|
});
|
|
687
710
|
it('should maintain correct state through manager restarts', async () => {
|
|
688
|
-
const templatePath = await createTemplateWithFunc(`restart-test-${testContext.timestamp}.sql
|
|
711
|
+
const templatePath = await createTemplateWithFunc(`restart-test-${testContext.timestamp}.sql`, 'restart_test');
|
|
689
712
|
// First manager instance
|
|
690
713
|
const manager1 = await TemplateManager.create(testContext.testDir);
|
|
691
714
|
await manager1.processTemplates({ apply: true });
|
|
@@ -709,7 +732,7 @@ describe('TemplateManager', () => {
|
|
|
709
732
|
expect(applied).toContain(`restart-test-${testContext.timestamp}`);
|
|
710
733
|
});
|
|
711
734
|
it('should properly format and propagate error messages', async () => {
|
|
712
|
-
const templatePath = await createTemplateWithFunc(`error-format-${testContext.timestamp}.sql
|
|
735
|
+
const templatePath = await createTemplateWithFunc(`error-format-${testContext.timestamp}.sql`, 'error_format');
|
|
713
736
|
const manager = await TemplateManager.create(testContext.testDir);
|
|
714
737
|
const errors = [];
|
|
715
738
|
manager.on('templateError', err => errors.push(err));
|