@t1mmen/srtd 0.2.2 → 0.3.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.
- package/README.md +148 -89
- package/dist/__tests__/watch.test.js +0 -1
- package/dist/__tests__/watch.test.js.map +1 -1
- package/dist/cli.js +3 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/_app.js +22 -2
- package/dist/commands/_app.js.map +1 -1
- package/dist/commands/apply.d.ts +13 -1
- package/dist/commands/apply.js +18 -6
- package/dist/commands/apply.js.map +1 -1
- package/dist/commands/build.d.ts +13 -1
- package/dist/commands/build.js +14 -4
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/index.js +20 -10
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/register.js +9 -6
- package/dist/commands/register.js.map +1 -1
- package/dist/commands/watch.js +105 -117
- package/dist/commands/watch.js.map +1 -1
- package/dist/components/Branding.js +5 -4
- package/dist/components/Branding.js.map +1 -1
- package/dist/components/Quittable.d.ts +6 -0
- package/dist/components/Quittable.js +36 -0
- package/dist/components/Quittable.js.map +1 -0
- package/dist/hooks/useDatabaseConnection.d.ts +7 -0
- package/dist/hooks/useDatabaseConnection.js +68 -0
- package/dist/hooks/useDatabaseConnection.js.map +1 -0
- package/dist/hooks/useTemplateManager.d.ts +24 -0
- package/dist/hooks/useTemplateManager.js +141 -0
- package/dist/hooks/useTemplateManager.js.map +1 -0
- package/dist/lib/templateManager.d.ts +3 -3
- package/dist/lib/templateManager.js +24 -17
- package/dist/lib/templateManager.js.map +1 -1
- package/dist/types.d.ts +2 -1
- package/dist/utils/config.js +1 -0
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/databaseConnection.d.ts +5 -1
- package/dist/utils/databaseConnection.js +27 -8
- package/dist/utils/databaseConnection.js.map +1 -1
- package/dist/utils/logger.d.ts +1 -0
- package/package.json +12 -7
- package/dist/commands/help.d.ts +0 -1
- package/dist/commands/help.js +0 -2
- package/dist/commands/help.js.map +0 -1
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
// src/hooks/useTemplateManager.ts
|
|
2
|
+
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
3
|
+
import { TemplateManager } from '../lib/templateManager.js';
|
|
4
|
+
import { getConfig } from '../utils/config.js';
|
|
5
|
+
export function useTemplateManager(cwd = process.cwd()) {
|
|
6
|
+
const [templates, setTemplates] = useState([]);
|
|
7
|
+
const [isLoading, setIsLoading] = useState(true);
|
|
8
|
+
const [errors, setErrors] = useState(new Map());
|
|
9
|
+
const [updates, setUpdates] = useState([]);
|
|
10
|
+
const [templateDir, setTemplateDir] = useState();
|
|
11
|
+
const managerRef = useRef();
|
|
12
|
+
const latestPath = useRef();
|
|
13
|
+
const mounted = useRef(true);
|
|
14
|
+
const updateTimeoutRef = useRef();
|
|
15
|
+
const sortedTemplates = useMemo(() => {
|
|
16
|
+
return [...templates].sort((a, b) => {
|
|
17
|
+
const dateA = a.buildState.lastAppliedDate || '';
|
|
18
|
+
const dateB = b.buildState.lastAppliedDate || '';
|
|
19
|
+
if (dateA !== dateB) {
|
|
20
|
+
return dateA.localeCompare(dateB);
|
|
21
|
+
}
|
|
22
|
+
const folderA = a.path.split('/').slice(0, -1).join('/');
|
|
23
|
+
const folderB = b.path.split('/').slice(0, -1).join('/');
|
|
24
|
+
return folderA.localeCompare(folderB);
|
|
25
|
+
});
|
|
26
|
+
}, [templates]);
|
|
27
|
+
const stats = useMemo(() => ({
|
|
28
|
+
total: templates.length,
|
|
29
|
+
needsBuild: templates.filter(t => !t.buildState.lastBuildDate || t.currentHash !== t.buildState.lastBuildHash).length,
|
|
30
|
+
recentlyChanged: updates.filter(u => {
|
|
31
|
+
const timestamp = new Date(u.timestamp);
|
|
32
|
+
const fiveMinutesAgo = new Date(Date.now() - 5 * 60 * 1000);
|
|
33
|
+
return timestamp > fiveMinutesAgo;
|
|
34
|
+
}).length,
|
|
35
|
+
errors: errors.size,
|
|
36
|
+
}), [templates, updates, errors]);
|
|
37
|
+
const updateTemplate = useCallback(async (template, type, errorMsg) => {
|
|
38
|
+
if (!mounted.current || !managerRef.current)
|
|
39
|
+
return;
|
|
40
|
+
if (updateTimeoutRef.current) {
|
|
41
|
+
clearTimeout(updateTimeoutRef.current);
|
|
42
|
+
}
|
|
43
|
+
updateTimeoutRef.current = setTimeout(async () => {
|
|
44
|
+
try {
|
|
45
|
+
const status = await managerRef.current?.getTemplateStatus(template.path);
|
|
46
|
+
if (status) {
|
|
47
|
+
latestPath.current = status.path;
|
|
48
|
+
setTemplates(prev => {
|
|
49
|
+
const rest = prev.filter(t => t.path !== status.path);
|
|
50
|
+
return [...rest, status];
|
|
51
|
+
});
|
|
52
|
+
if (type === 'error' && errorMsg) {
|
|
53
|
+
setErrors(prev => new Map(prev).set(template.path, errorMsg));
|
|
54
|
+
}
|
|
55
|
+
else if (type === 'applied') {
|
|
56
|
+
setErrors(prev => {
|
|
57
|
+
const next = new Map(prev);
|
|
58
|
+
next.delete(template.path);
|
|
59
|
+
return next;
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
const update = {
|
|
63
|
+
type,
|
|
64
|
+
template: status,
|
|
65
|
+
timestamp: new Date().toISOString(),
|
|
66
|
+
error: errorMsg,
|
|
67
|
+
path: template.path,
|
|
68
|
+
};
|
|
69
|
+
setUpdates(prev => [update, ...prev]
|
|
70
|
+
.filter((u, i, arr) => i === arr.findIndex(t => t.path === u.path && t.type === u.type))
|
|
71
|
+
.slice(0, 50));
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
catch (err) {
|
|
75
|
+
const errorMessage = err instanceof Error ? err.message : String(err);
|
|
76
|
+
console.error('Failed to update template:', errorMessage);
|
|
77
|
+
}
|
|
78
|
+
}, 500); // Todo: performance should be looked at here, likely
|
|
79
|
+
}, []);
|
|
80
|
+
useEffect(() => {
|
|
81
|
+
let watcher;
|
|
82
|
+
async function init() {
|
|
83
|
+
try {
|
|
84
|
+
setIsLoading(true);
|
|
85
|
+
const config = await getConfig(cwd);
|
|
86
|
+
setTemplateDir(config.templateDir);
|
|
87
|
+
managerRef.current = await TemplateManager.create(cwd, { silent: true });
|
|
88
|
+
async function loadTemplates() {
|
|
89
|
+
const initialTemplates = await managerRef.current?.findTemplates();
|
|
90
|
+
const statuses = await Promise.all(initialTemplates?.map(t => managerRef.current?.getTemplateStatus(t)) ?? []);
|
|
91
|
+
const validStatuses = statuses.filter((s) => s !== null);
|
|
92
|
+
const needsApply = validStatuses.some(t => !t.buildState.lastAppliedHash || t.currentHash !== t.buildState.lastAppliedHash);
|
|
93
|
+
if (mounted.current) {
|
|
94
|
+
setTemplates(validStatuses);
|
|
95
|
+
setIsLoading(false);
|
|
96
|
+
if (needsApply) {
|
|
97
|
+
await managerRef.current?.processTemplates({ apply: true });
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
await loadTemplates();
|
|
102
|
+
watcher = await managerRef.current?.watch();
|
|
103
|
+
managerRef.current?.on('templateAdded', () => void loadTemplates());
|
|
104
|
+
managerRef.current?.on('templateChanged', t => void updateTemplate(t, 'changed'));
|
|
105
|
+
managerRef.current?.on('templateApplied', t => void updateTemplate(t, 'applied'));
|
|
106
|
+
managerRef.current?.on('templateError', ({ template, error: err }) => {
|
|
107
|
+
const errorMsg = err instanceof Error
|
|
108
|
+
? err.message
|
|
109
|
+
: typeof err === 'object' && err !== null
|
|
110
|
+
? JSON.stringify(err)
|
|
111
|
+
: String(err);
|
|
112
|
+
void updateTemplate(template, 'error', errorMsg);
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
catch (err) {
|
|
116
|
+
if (mounted.current) {
|
|
117
|
+
setErrors(new Map().set('global', err instanceof Error ? err.message : String(err)));
|
|
118
|
+
setIsLoading(false);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
void init();
|
|
123
|
+
return () => {
|
|
124
|
+
mounted.current = false;
|
|
125
|
+
watcher?.close();
|
|
126
|
+
if (updateTimeoutRef.current) {
|
|
127
|
+
clearTimeout(updateTimeoutRef.current);
|
|
128
|
+
}
|
|
129
|
+
};
|
|
130
|
+
}, [cwd, updateTemplate]);
|
|
131
|
+
return {
|
|
132
|
+
templates: sortedTemplates,
|
|
133
|
+
updates,
|
|
134
|
+
stats,
|
|
135
|
+
isLoading,
|
|
136
|
+
errors,
|
|
137
|
+
latestPath: latestPath.current,
|
|
138
|
+
templateDir,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=useTemplateManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTemplateManager.js","sourceRoot":"","sources":["../../src/hooks/useTemplateManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import EventEmitter from 'node:events';
|
|
2
|
-
import type {
|
|
2
|
+
import type { ProcessedTemplateResult, TemplateStatus } from '../types.js';
|
|
3
3
|
export declare class TemplateManager extends EventEmitter {
|
|
4
4
|
private baseDir;
|
|
5
5
|
private buildLog;
|
|
@@ -21,12 +21,12 @@ export declare class TemplateManager extends EventEmitter {
|
|
|
21
21
|
watch(): Promise<{
|
|
22
22
|
close: () => void;
|
|
23
23
|
}>;
|
|
24
|
-
applyTemplate(templatePath: string): Promise<
|
|
24
|
+
applyTemplate(templatePath: string): Promise<ProcessedTemplateResult>;
|
|
25
25
|
buildTemplate(templatePath: string, force?: boolean): Promise<void>;
|
|
26
26
|
private log;
|
|
27
27
|
processTemplates(options: {
|
|
28
28
|
apply?: boolean;
|
|
29
29
|
generateFiles?: boolean;
|
|
30
30
|
force?: boolean;
|
|
31
|
-
}): Promise<
|
|
31
|
+
}): Promise<ProcessedTemplateResult>;
|
|
32
32
|
}
|
|
@@ -5,6 +5,7 @@ import { glob } from 'glob';
|
|
|
5
5
|
import { applyMigration } from '../utils/applyMigration.js';
|
|
6
6
|
import { calculateMD5 } from '../utils/calculateMD5.js';
|
|
7
7
|
import { getConfig } from '../utils/config.js';
|
|
8
|
+
import { testConnection } from '../utils/databaseConnection.js';
|
|
8
9
|
import { getNextTimestamp } from '../utils/getNextTimestamp.js';
|
|
9
10
|
import { isWipTemplate } from '../utils/isWipTemplate.js';
|
|
10
11
|
import { loadBuildLog } from '../utils/loadBuildLog.js';
|
|
@@ -96,7 +97,7 @@ export class TemplateManager extends EventEmitter {
|
|
|
96
97
|
const chokidar = await import('chokidar');
|
|
97
98
|
const templatePath = path.join(this.baseDir, this.config.templateDir);
|
|
98
99
|
const watcher = chokidar.watch(templatePath, {
|
|
99
|
-
ignoreInitial:
|
|
100
|
+
ignoreInitial: false,
|
|
100
101
|
depth: 0,
|
|
101
102
|
ignored: /(^|[\\])\../,
|
|
102
103
|
});
|
|
@@ -147,12 +148,14 @@ export class TemplateManager extends EventEmitter {
|
|
|
147
148
|
return;
|
|
148
149
|
}
|
|
149
150
|
const timestamp = await getNextTimestamp(this.buildLog);
|
|
150
|
-
const
|
|
151
|
+
const prefix = this.config.migrationPrefix ? `${this.config.migrationPrefix}-` : '';
|
|
152
|
+
const migrationName = `${timestamp}_${prefix}${template.name}.sql`;
|
|
151
153
|
const migrationPath = path.join(this.config.migrationDir, migrationName);
|
|
152
|
-
const header = `-- Generated from template: ${this.config.templateDir}/${template.name}.sql\n`;
|
|
154
|
+
const header = `-- Generated with srtd from template: ${this.config.templateDir}/${template.name}.sql\n`;
|
|
153
155
|
const banner = this.config.banner ? `-- ${this.config.banner}\n` : '\n';
|
|
154
|
-
const
|
|
155
|
-
const
|
|
156
|
+
const lastBuildAt = this.buildLog.templates[relPath]?.lastMigrationFile;
|
|
157
|
+
const footer = `${this.config.footer}\n-- Last built: ${lastBuildAt || 'Never'}\n-- Built with https://github.com/t1mmen/srtd\n`;
|
|
158
|
+
const safeContent = this.config.wrapInTransaction ? `BEGIN;\n\n${content}\n\nCOMMIT;` : content;
|
|
156
159
|
const migrationContent = `${header}${banner}\n${safeContent}\n${footer}`;
|
|
157
160
|
await fs.writeFile(path.resolve(this.baseDir, migrationPath), migrationContent);
|
|
158
161
|
this.buildLog.templates[relPath] = {
|
|
@@ -166,23 +169,26 @@ export class TemplateManager extends EventEmitter {
|
|
|
166
169
|
await this.saveBuildLogs();
|
|
167
170
|
this.emit('templateBuilt', template);
|
|
168
171
|
}
|
|
169
|
-
log(msg,
|
|
172
|
+
log(msg, logLevel = 'info') {
|
|
170
173
|
if (this.silent)
|
|
171
174
|
return;
|
|
172
|
-
|
|
173
|
-
logger.error(msg);
|
|
174
|
-
else if (type === 'success')
|
|
175
|
-
logger.success(msg);
|
|
176
|
-
else if (type === 'skip')
|
|
177
|
-
logger.skip(msg);
|
|
178
|
-
else
|
|
179
|
-
logger.info(msg);
|
|
175
|
+
logger[logLevel](msg);
|
|
180
176
|
}
|
|
181
177
|
async processTemplates(options) {
|
|
182
178
|
const templates = await this.findTemplates();
|
|
183
179
|
const result = { errors: [], applied: [] };
|
|
180
|
+
this.log('\n');
|
|
184
181
|
if (options.apply) {
|
|
185
|
-
|
|
182
|
+
const isConnected = await testConnection();
|
|
183
|
+
if (isConnected) {
|
|
184
|
+
this.log('Connected to database', 'success');
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
this.log('Failed to connect to database, cannot proceed. Is Supabase running?', 'error');
|
|
188
|
+
return result;
|
|
189
|
+
}
|
|
190
|
+
const action = options.force ? 'Force applying' : 'Applying';
|
|
191
|
+
this.log(`${action} changed templates to local database...`, 'success');
|
|
186
192
|
let hasChanges = false;
|
|
187
193
|
for (const templatePath of templates) {
|
|
188
194
|
const template = await this.getTemplateStatus(templatePath);
|
|
@@ -196,7 +202,7 @@ export class TemplateManager extends EventEmitter {
|
|
|
196
202
|
}
|
|
197
203
|
}
|
|
198
204
|
if (!hasChanges) {
|
|
199
|
-
this.log('No changes to apply');
|
|
205
|
+
this.log('No changes to apply', 'skip');
|
|
200
206
|
}
|
|
201
207
|
else if (result.errors.length > 0) {
|
|
202
208
|
this.log(`${result.errors.length} template(s) failed to apply`, 'error');
|
|
@@ -211,6 +217,7 @@ export class TemplateManager extends EventEmitter {
|
|
|
211
217
|
if (options.generateFiles) {
|
|
212
218
|
let built = 0;
|
|
213
219
|
let skipped = 0;
|
|
220
|
+
this.log('Building migration files from templates...', 'success');
|
|
214
221
|
for (const templatePath of templates) {
|
|
215
222
|
const isWip = await isWipTemplate(templatePath);
|
|
216
223
|
if (!isWip) {
|
|
@@ -228,7 +235,7 @@ export class TemplateManager extends EventEmitter {
|
|
|
228
235
|
this.log(`Generated ${built} migration file(s)`, 'success');
|
|
229
236
|
}
|
|
230
237
|
else if (skipped > 0) {
|
|
231
|
-
this.log('No changes to build');
|
|
238
|
+
this.log('No new changes to build', 'skip');
|
|
232
239
|
}
|
|
233
240
|
}
|
|
234
241
|
return result;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templateManager.js","sourceRoot":"","sources":["../../src/lib/templateManager.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,
|
|
1
|
+
{"version":3,"file":"templateManager.js","sourceRoot":"","sources":["../../src/lib/templateManager.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -27,11 +27,12 @@ export interface CLIConfig {
|
|
|
27
27
|
footer: string;
|
|
28
28
|
templateDir: string;
|
|
29
29
|
migrationDir: string;
|
|
30
|
+
migrationPrefix?: string;
|
|
30
31
|
buildLog: string;
|
|
31
32
|
localBuildLog: string;
|
|
32
33
|
pgConnection: string;
|
|
33
34
|
}
|
|
34
|
-
export interface
|
|
35
|
+
export interface ProcessedTemplateResult {
|
|
35
36
|
errors: MigrationError[];
|
|
36
37
|
applied: string[];
|
|
37
38
|
}
|
package/dist/utils/config.js
CHANGED
|
@@ -3,6 +3,7 @@ import path from 'node:path';
|
|
|
3
3
|
import { CONFIG_FILE } from '../constants.js';
|
|
4
4
|
const defaultConfig = {
|
|
5
5
|
wipIndicator: '.wip',
|
|
6
|
+
migrationPrefix: 'srtd',
|
|
6
7
|
filter: '**/*.sql',
|
|
7
8
|
banner: 'You very likely **DO NOT** want to manually edit this generated file.',
|
|
8
9
|
footer: '',
|
package/dist/utils/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAG9C,MAAM,aAAa,GAAc;IAC/B,YAAY,EAAE,MAAM;IACpB,MAAM,EAAE,UAAU;IAClB,MAAM,EAAE,uEAAuE;IAC/E,MAAM,EAAE,EAAE;IACV,iBAAiB,EAAE,IAAI;IACvB,WAAW,EAAE,+BAA+B;IAC5C,YAAY,EAAE,qBAAqB;IACnC,QAAQ,EAAE,mDAAmD;IAC7D,aAAa,EAAE,yDAAyD;IACxE,YAAY,EAAE,yDAAyD;CACxE,CAAC;AAEF,IAAI,YAAmC,CAAC;AAExC,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;IACzD,IAAI,YAAY;QAAE,OAAO,YAAY,CAAC;IAEtC,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QAC/C,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACvD,YAAY,GAAG,EAAE,GAAG,aAAa,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;IAC9D,CAAC;IAAC,MAAM,CAAC;QACP,YAAY,GAAG,aAAa,CAAC;IAC/B,CAAC;IAED,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAAe,EAAE,MAA0B;IAC1E,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACnD,MAAM,WAAW,GAAG,EAAE,GAAG,aAAa,EAAE,GAAG,MAAM,EAAE,CAAC;IACpD,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACrE,YAAY,GAAG,WAAW,CAAC;AAC7B,CAAC;AAED,2CAA2C;AAC3C,2BAA2B;AAC3B,gCAAgC;AAChC,iDAAiD;AAEjD,yBAAyB;AAEzB,yEAAyE;AACzE,mBAAmB;AACnB,yCAAyC;AACzC,MAAM;AACN,mBAAmB;AACnB,IAAI;AAEJ,qCAAqC;AACrC,0BAA0B;AAC1B,wBAAwB;AACxB,qFAAqF;AACrF,gBAAgB;AAChB,6BAA6B;AAC7B,kDAAkD;AAClD,yCAAyC;AACzC,8DAA8D;AAC9D,yEAAyE;AACzE,6EAA6E;AAC7E,KAAK;AAEL,sEAAsE;AACtE,0CAA0C;AAC1C,wDAAwD;AACxD,UAAU;AACV,8DAA8D;AAC9D,8CAA8C;AAC9C,kDAAkD;AAClD,cAAc;AACd,4BAA4B;AAC5B,MAAM;AACN,IAAI;AAEJ,iGAAiG;AACjG,wDAAwD;AACxD,yDAAyD;AACzD,0EAA0E;AAC1E,IAAI"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAG9C,MAAM,aAAa,GAAc;IAC/B,YAAY,EAAE,MAAM;IACpB,eAAe,EAAE,MAAM;IACvB,MAAM,EAAE,UAAU;IAClB,MAAM,EAAE,uEAAuE;IAC/E,MAAM,EAAE,EAAE;IACV,iBAAiB,EAAE,IAAI;IACvB,WAAW,EAAE,+BAA+B;IAC5C,YAAY,EAAE,qBAAqB;IACnC,QAAQ,EAAE,mDAAmD;IAC7D,aAAa,EAAE,yDAAyD;IACxE,YAAY,EAAE,yDAAyD;CACxE,CAAC;AAEF,IAAI,YAAmC,CAAC;AAExC,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;IACzD,IAAI,YAAY;QAAE,OAAO,YAAY,CAAC;IAEtC,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QAC/C,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACvD,YAAY,GAAG,EAAE,GAAG,aAAa,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;IAC9D,CAAC;IAAC,MAAM,CAAC;QACP,YAAY,GAAG,aAAa,CAAC;IAC/B,CAAC;IAED,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAAe,EAAE,MAA0B;IAC1E,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACnD,MAAM,WAAW,GAAG,EAAE,GAAG,aAAa,EAAE,GAAG,MAAM,EAAE,CAAC;IACpD,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACrE,YAAY,GAAG,WAAW,CAAC;AAC7B,CAAC;AAED,2CAA2C;AAC3C,2BAA2B;AAC3B,gCAAgC;AAChC,iDAAiD;AAEjD,yBAAyB;AAEzB,yEAAyE;AACzE,mBAAmB;AACnB,yCAAyC;AACzC,MAAM;AACN,mBAAmB;AACnB,IAAI;AAEJ,qCAAqC;AACrC,0BAA0B;AAC1B,wBAAwB;AACxB,qFAAqF;AACrF,gBAAgB;AAChB,6BAA6B;AAC7B,kDAAkD;AAClD,yCAAyC;AACzC,8DAA8D;AAC9D,yEAAyE;AACzE,6EAA6E;AAC7E,KAAK;AAEL,sEAAsE;AACtE,0CAA0C;AAC1C,wDAAwD;AACxD,UAAU;AACV,8DAA8D;AAC9D,8CAA8C;AAC9C,kDAAkD;AAClD,cAAc;AACd,4BAA4B;AAC5B,MAAM;AACN,IAAI;AAEJ,iGAAiG;AACjG,wDAAwD;AACxD,yDAAyD;AACzD,0EAA0E;AAC1E,IAAI"}
|
|
@@ -1,3 +1,7 @@
|
|
|
1
1
|
import pg from 'pg';
|
|
2
|
-
export declare
|
|
2
|
+
export declare const RETRY_DELAY = 1000;
|
|
3
|
+
export declare function connect(params?: {
|
|
4
|
+
silent?: boolean;
|
|
5
|
+
}): Promise<pg.PoolClient>;
|
|
3
6
|
export declare function disconnect(): Promise<void>;
|
|
7
|
+
export declare function testConnection(): Promise<boolean>;
|
|
@@ -1,19 +1,20 @@
|
|
|
1
|
-
// utils/
|
|
1
|
+
// utils/databaseConnection.ts
|
|
2
2
|
import pg from 'pg';
|
|
3
3
|
import { getConfig } from './config.js';
|
|
4
4
|
import { logger } from './logger.js';
|
|
5
5
|
let pool;
|
|
6
6
|
let connectionAttempts = 0;
|
|
7
7
|
const MAX_RETRIES = 3;
|
|
8
|
-
const RETRY_DELAY = 1000;
|
|
8
|
+
export const RETRY_DELAY = 1000;
|
|
9
9
|
async function createPool() {
|
|
10
10
|
const config = await getConfig(process.cwd());
|
|
11
11
|
return new pg.Pool({
|
|
12
12
|
connectionString: config.pgConnection,
|
|
13
|
-
connectionTimeoutMillis:
|
|
13
|
+
connectionTimeoutMillis: 500,
|
|
14
14
|
});
|
|
15
15
|
}
|
|
16
|
-
async function retryConnection() {
|
|
16
|
+
async function retryConnection(params) {
|
|
17
|
+
const { silent = true } = params || {};
|
|
17
18
|
connectionAttempts++;
|
|
18
19
|
logger.debug(`Connection attempt ${connectionAttempts}`);
|
|
19
20
|
try {
|
|
@@ -23,23 +24,41 @@ async function retryConnection() {
|
|
|
23
24
|
}
|
|
24
25
|
catch (err) {
|
|
25
26
|
if (connectionAttempts < MAX_RETRIES) {
|
|
26
|
-
|
|
27
|
+
if (!silent) {
|
|
28
|
+
logger.warn(`Connection failed, retrying in ${RETRY_DELAY}ms...`);
|
|
29
|
+
}
|
|
27
30
|
await new Promise(resolve => setTimeout(resolve, RETRY_DELAY));
|
|
28
|
-
return retryConnection();
|
|
31
|
+
return retryConnection(params);
|
|
29
32
|
}
|
|
30
33
|
throw new Error(`Database connection failed after ${MAX_RETRIES} attempts: ${err}`);
|
|
31
34
|
}
|
|
32
35
|
}
|
|
33
|
-
export async function connect() {
|
|
36
|
+
export async function connect(params) {
|
|
34
37
|
connectionAttempts = 0;
|
|
35
|
-
return retryConnection();
|
|
38
|
+
return retryConnection(params);
|
|
36
39
|
}
|
|
37
40
|
export async function disconnect() {
|
|
38
41
|
if (pool) {
|
|
42
|
+
// Add poolPendingCount check to avoid hanging on
|
|
43
|
+
// pending queries during shutdown
|
|
44
|
+
if (pool.totalCount !== pool.idleCount) {
|
|
45
|
+
await new Promise(resolve => setTimeout(resolve, RETRY_DELAY));
|
|
46
|
+
}
|
|
39
47
|
await pool.end();
|
|
40
48
|
pool = undefined;
|
|
41
49
|
}
|
|
42
50
|
return;
|
|
43
51
|
}
|
|
52
|
+
export async function testConnection() {
|
|
53
|
+
try {
|
|
54
|
+
const client = await connect();
|
|
55
|
+
await client.query('SELECT 1');
|
|
56
|
+
client.release();
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
44
63
|
process.on('exit', async () => await disconnect());
|
|
45
64
|
//# sourceMappingURL=databaseConnection.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"databaseConnection.js","sourceRoot":"","sources":["../../src/utils/databaseConnection.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"databaseConnection.js","sourceRoot":"","sources":["../../src/utils/databaseConnection.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,IAAI,IAAyB,CAAC;AAC9B,IAAI,kBAAkB,GAAG,CAAC,CAAC;AAC3B,MAAM,WAAW,GAAG,CAAC,CAAC;AACtB,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC;AAEhC,KAAK,UAAU,UAAU;IACvB,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAC9C,OAAO,IAAI,EAAE,CAAC,IAAI,CAAC;QACjB,gBAAgB,EAAE,MAAM,CAAC,YAAY;QACrC,uBAAuB,EAAE,GAAG;KAC7B,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,MAA6B;IAC1D,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC;IACvC,kBAAkB,EAAE,CAAC;IACrB,MAAM,CAAC,KAAK,CAAC,sBAAsB,kBAAkB,EAAE,CAAC,CAAC;IAEzD,IAAI,CAAC;QACH,IAAI,CAAC,IAAI;YAAE,IAAI,GAAG,MAAM,UAAU,EAAE,CAAC;QACrC,OAAO,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;IAC9B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,kBAAkB,GAAG,WAAW,EAAE,CAAC;YACrC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,CAAC,IAAI,CAAC,kCAAkC,WAAW,OAAO,CAAC,CAAC;YACpE,CAAC;YACD,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;YAC/D,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,oCAAoC,WAAW,cAAc,GAAG,EAAE,CAAC,CAAC;IACtF,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,MAA6B;IACzD,kBAAkB,GAAG,CAAC,CAAC;IACvB,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,IAAI,IAAI,EAAE,CAAC;QACT,iDAAiD;QACjD,kCAAkC;QAClC,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;YACvC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;QACjE,CAAC;QACD,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC;QACjB,IAAI,GAAG,SAAS,CAAC;IACnB,CAAC;IACD,OAAO;AACT,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,OAAO,EAAE,CAAC;QAC/B,MAAM,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC/B,MAAM,CAAC,OAAO,EAAE,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,UAAU,EAAE,CAAC,CAAC"}
|
package/dist/utils/logger.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@t1mmen/srtd",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "Supabase Repeatable Template Definitions (srtd): 🪄 Live-reloading SQL templates for Supabase DX. Make your database changes reviewable and migrations maintainable! 🚀",
|
|
6
6
|
"bin": {
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
"node": ">=20"
|
|
12
12
|
},
|
|
13
13
|
"scripts": {
|
|
14
|
+
"clean": "rm -rf dist; rm -rf build; rm -rf coverage; npm run supabase:stop",
|
|
14
15
|
"changeset": "changeset",
|
|
15
16
|
"version": "changeset version",
|
|
16
17
|
"release": "npm run build && changeset publish",
|
|
@@ -20,9 +21,11 @@
|
|
|
20
21
|
"format": "biome format . --write",
|
|
21
22
|
"dev": "tsc --watch",
|
|
22
23
|
"test": "vitest",
|
|
23
|
-
"test:coverage": "vitest run --coverage",
|
|
24
|
-
"start": "npm run build && npm link && chmod u+x ./dist/cli.js && srtd",
|
|
25
|
-
"repomix": "npx repomix"
|
|
24
|
+
"test:coverage": "vitest run --coverage --reporter=junit --outputFile=test-report.junit.xml",
|
|
25
|
+
"start": "npm run build && npm link --force && chmod u+x ./dist/cli.js && srtd",
|
|
26
|
+
"repomix": "mkdir build; npx repomix",
|
|
27
|
+
"supabase:start": "npx supabase start",
|
|
28
|
+
"supabase:stop": "npx supabase stop"
|
|
26
29
|
},
|
|
27
30
|
"files": [
|
|
28
31
|
"dist"
|
|
@@ -70,22 +73,24 @@
|
|
|
70
73
|
"pastel": "^3.0.0",
|
|
71
74
|
"pg": "^8.13.1",
|
|
72
75
|
"react": "^18.3.0",
|
|
76
|
+
"update-notifier": "^7.3.1",
|
|
73
77
|
"zod": "^3.24.1"
|
|
74
78
|
},
|
|
75
79
|
"devDependencies": {
|
|
76
80
|
"@biomejs/biome": "1.9.4",
|
|
77
81
|
"@changesets/cli": "^2.27.11",
|
|
78
82
|
"@sindresorhus/tsconfig": "^7.0.0",
|
|
83
|
+
"@types/glob": "^8.1.0",
|
|
84
|
+
"@types/node": "^20.17.10",
|
|
79
85
|
"@types/pg": "^8.11.10",
|
|
80
86
|
"@types/react": "^18.3.0",
|
|
87
|
+
"@types/update-notifier": "^6.0.8",
|
|
81
88
|
"@vitest/coverage-v8": "^2.1.8",
|
|
82
89
|
"chalk": "^5.4.1",
|
|
83
90
|
"ink-testing-library": "^4.0.0",
|
|
84
91
|
"lefthook": "^1.10.1",
|
|
85
92
|
"tsx": "^4.19.2",
|
|
86
93
|
"typescript": "^5.7.2",
|
|
87
|
-
"vitest": "^2.1.8"
|
|
88
|
-
"@types/glob": "^8.1.0",
|
|
89
|
-
"@types/node": "^20.17.10"
|
|
94
|
+
"vitest": "^2.1.8"
|
|
90
95
|
}
|
|
91
96
|
}
|
package/dist/commands/help.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
package/dist/commands/help.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/commands/help.tsx"],"names":[],"mappings":""}
|