@t1mmen/srtd 0.2.2 → 0.4.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 (52) hide show
  1. package/README.md +170 -146
  2. package/dist/__tests__/vitest.setup.js +41 -25
  3. package/dist/__tests__/vitest.setup.js.map +1 -1
  4. package/dist/__tests__/watch.test.js +0 -1
  5. package/dist/__tests__/watch.test.js.map +1 -1
  6. package/dist/cli.js +3 -0
  7. package/dist/cli.js.map +1 -1
  8. package/dist/commands/_app.js +31 -3
  9. package/dist/commands/_app.js.map +1 -1
  10. package/dist/commands/apply.d.ts +13 -1
  11. package/dist/commands/apply.js +19 -6
  12. package/dist/commands/apply.js.map +1 -1
  13. package/dist/commands/build.d.ts +13 -1
  14. package/dist/commands/build.js +14 -4
  15. package/dist/commands/build.js.map +1 -1
  16. package/dist/commands/clear.d.ts +2 -0
  17. package/dist/commands/clear.js +45 -0
  18. package/dist/commands/clear.js.map +1 -0
  19. package/dist/commands/index.js +25 -10
  20. package/dist/commands/index.js.map +1 -1
  21. package/dist/commands/register.js +9 -6
  22. package/dist/commands/register.js.map +1 -1
  23. package/dist/commands/watch.js +121 -117
  24. package/dist/commands/watch.js.map +1 -1
  25. package/dist/components/Branding.js +5 -4
  26. package/dist/components/Branding.js.map +1 -1
  27. package/dist/components/Quittable.d.ts +6 -0
  28. package/dist/components/Quittable.js +36 -0
  29. package/dist/components/Quittable.js.map +1 -0
  30. package/dist/hooks/useDatabaseConnection.d.ts +7 -0
  31. package/dist/hooks/useDatabaseConnection.js +68 -0
  32. package/dist/hooks/useDatabaseConnection.js.map +1 -0
  33. package/dist/hooks/useTemplateManager.d.ts +22 -0
  34. package/dist/hooks/useTemplateManager.js +124 -0
  35. package/dist/hooks/useTemplateManager.js.map +1 -0
  36. package/dist/lib/templateManager.d.ts +12 -5
  37. package/dist/lib/templateManager.js +166 -60
  38. package/dist/lib/templateManager.js.map +1 -1
  39. package/dist/lib/templateManager.test.js +452 -15
  40. package/dist/lib/templateManager.test.js.map +1 -1
  41. package/dist/types.d.ts +2 -1
  42. package/dist/utils/config.d.ts +2 -0
  43. package/dist/utils/config.js +27 -40
  44. package/dist/utils/config.js.map +1 -1
  45. package/dist/utils/databaseConnection.d.ts +5 -1
  46. package/dist/utils/databaseConnection.js +40 -9
  47. package/dist/utils/databaseConnection.js.map +1 -1
  48. package/dist/utils/logger.d.ts +1 -0
  49. package/package.json +12 -7
  50. package/dist/commands/help.d.ts +0 -1
  51. package/dist/commands/help.js +0 -2
  52. package/dist/commands/help.js.map +0 -1
@@ -1,3 +1,5 @@
1
1
  import type { CLIConfig } from '../types.js';
2
2
  export declare function getConfig(dir?: string): Promise<CLIConfig>;
3
3
  export declare function saveConfig(baseDir: string, config: Partial<CLIConfig>): Promise<void>;
4
+ export declare function resetConfig(baseDir: string): Promise<void>;
5
+ export declare function clearBuildLogs(baseDir: string, type: 'local' | 'shared' | 'both'): Promise<void>;
@@ -1,8 +1,10 @@
1
1
  import fs from 'node:fs/promises';
2
2
  import path from 'node:path';
3
3
  import { CONFIG_FILE } from '../constants.js';
4
+ import { logger } from './logger.js';
4
5
  const defaultConfig = {
5
6
  wipIndicator: '.wip',
7
+ migrationPrefix: 'srtd',
6
8
  filter: '**/*.sql',
7
9
  banner: 'You very likely **DO NOT** want to manually edit this generated file.',
8
10
  footer: '',
@@ -33,46 +35,31 @@ export async function getConfig(dir = process.cwd()) {
33
35
  export async function saveConfig(baseDir, config) {
34
36
  const configPath = path.join(baseDir, CONFIG_FILE);
35
37
  const finalConfig = { ...defaultConfig, ...config };
36
- await fs.writeFile(configPath, JSON.stringify(finalConfig, null, 2));
38
+ await fs.writeFile(configPath, JSON.stringify(finalConfig, null, 2)).catch(e => {
39
+ logger.error(`Failed to save config: ${e.message}`);
40
+ });
37
41
  cachedConfig = finalConfig;
38
42
  }
39
- // import { CLIConfig } from '../types.js';
40
- // import path from 'path';
41
- // import fs from 'fs/promises';
42
- // import { CONFIG_FILE } from '../constants.js';
43
- // let config: CLIConfig;
44
- // export async function getConfig(baseDir: string): Promise<CLIConfig> {
45
- // if (!config) {
46
- // config = await getConfig(baseDir);
47
- // }
48
- // return config;
49
- // }
50
- // const defaultConfig: CLIConfig = {
51
- // wipIndicator: '.wip',
52
- // filter: '**/*.sql',
53
- // banner: 'You very likely **DO NOT** want to manually edit this generated file.',
54
- // footer: '',
55
- // wrapInTransaction: true,
56
- // templateDir: 'supabase/migrations-templates',
57
- // migrationDir: 'supabase/migrations',
58
- // buildLog: 'supabase/migrations-templates/.buildlog.json',
59
- // localBuildLog: 'supabase/migrations-templates/.buildlog.local.json',
60
- // pgConnection: 'postgresql://postgres:postgres@localhost:54322/postgres',
61
- // };
62
- // export async function getConfig(dir?: string): Promise<CLIConfig> {
63
- // const baseDir = dir || process.cwd();
64
- // const configPath = path.join(baseDir, CONFIG_FILE);
65
- // try {
66
- // const content = await fs.readFile(configPath, 'utf-8');
67
- // const userConfig = JSON.parse(content);
68
- // return { ...defaultConfig, ...userConfig };
69
- // } catch {
70
- // return defaultConfig;
71
- // }
72
- // }
73
- // export async function saveConfig(baseDir: string, config: Partial<CLIConfig>): Promise<void> {
74
- // const configPath = path.join(baseDir, CONFIG_FILE);
75
- // const finalConfig = { ...defaultConfig, ...config };
76
- // await fs.writeFile(configPath, JSON.stringify(finalConfig, null, 2));
77
- // }
43
+ export async function resetConfig(baseDir) {
44
+ cachedConfig = defaultConfig;
45
+ await fs.unlink(path.join(baseDir, CONFIG_FILE)).catch(() => {
46
+ /* ignore */
47
+ });
48
+ await saveConfig(baseDir, {});
49
+ }
50
+ export async function clearBuildLogs(baseDir, type) {
51
+ const config = cachedConfig || defaultConfig;
52
+ const ops = [];
53
+ if (type === 'local' || type === 'both') {
54
+ ops.push(fs.unlink(path.join(baseDir, config.localBuildLog)).catch(() => {
55
+ /* ignore */
56
+ }));
57
+ }
58
+ if (type === 'shared' || type === 'both') {
59
+ ops.push(fs.unlink(path.join(baseDir, config.buildLog)).catch(() => {
60
+ /* ignore */
61
+ }));
62
+ }
63
+ await Promise.all(ops);
64
+ }
78
65
  //# sourceMappingURL=config.js.map
@@ -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":"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"}
@@ -1,3 +1,7 @@
1
1
  import pg from 'pg';
2
- export declare function connect(): Promise<pg.PoolClient>;
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/db.connection.ts
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: 5000,
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,53 @@ async function retryConnection() {
23
24
  }
24
25
  catch (err) {
25
26
  if (connectionAttempts < MAX_RETRIES) {
26
- logger.warn(`Connection failed, retrying in ${RETRY_DELAY}ms...`);
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
  }
44
- process.on('exit', async () => await disconnect());
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
+ }
63
+ function cleanup() {
64
+ // Sync disconnect since exit handlers must be synchronous
65
+ try {
66
+ void disconnect();
67
+ }
68
+ catch (e) {
69
+ logger.error(`Error disconnecting from database: ${String(e)}`);
70
+ process.exit(1);
71
+ }
72
+ process.exit(0);
73
+ }
74
+ process.on('SIGTERM', cleanup);
75
+ process.on('SIGINT', cleanup);
45
76
  //# sourceMappingURL=databaseConnection.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"databaseConnection.js","sourceRoot":"","sources":["../../src/utils/databaseConnection.ts"],"names":[],"mappings":"AAAA,yBAAyB;AACzB,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,WAAW,GAAG,IAAI,CAAC;AAEzB,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,IAAI;KAC9B,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,eAAe;IAC5B,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,MAAM,CAAC,IAAI,CAAC,kCAAkC,WAAW,OAAO,CAAC,CAAC;YAClE,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;YAC/D,OAAO,eAAe,EAAE,CAAC;QAC3B,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,oCAAoC,WAAW,cAAc,GAAG,EAAE,CAAC,CAAC;IACtF,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO;IAC3B,kBAAkB,GAAG,CAAC,CAAC;IACvB,OAAO,eAAe,EAAE,CAAC;AAC3B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,IAAI,IAAI,EAAE,CAAC;QACT,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC;QACjB,IAAI,GAAG,SAAS,CAAC;IACnB,CAAC;IACD,OAAO;AACT,CAAC;AAED,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,UAAU,EAAE,CAAC,CAAC"}
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,SAAS,OAAO;IACd,0DAA0D;IAC1D,IAAI,CAAC;QACH,KAAK,UAAU,EAAE,CAAC;IACpB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,CAAC,KAAK,CAAC,sCAAsC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAC/B,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC"}
@@ -6,3 +6,4 @@ export declare const logger: {
6
6
  skip: (msg: string) => void;
7
7
  debug: (msg: string) => false | void | "" | undefined;
8
8
  };
9
+ export type LogLevel = keyof typeof logger;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@t1mmen/srtd",
3
- "version": "0.2.2",
3
+ "version": "0.4.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": "tsx src/cli.tsx",
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
  }
@@ -1 +0,0 @@
1
- export {};
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=help.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/commands/help.tsx"],"names":[],"mappings":""}