@t1mmen/srtd 0.4.5 → 0.4.7

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 CHANGED
@@ -35,19 +35,19 @@ Say hello to `srtd`.
35
35
  ## Key Features ✨
36
36
 
37
37
  - **Live Reload**: Changes to your SQL templates instantly update your local database
38
- - **Single Source of Truth**: Templates are the source of all (non-mutable) database objects, improving code-review clarity
39
- - **Just SQL**: Templates build as standard [Supabase](https://supabase.com) migrations when you're ready to deploy
40
- - **Developer Friendly**: Interactive CLI with visual feedback for all operations
38
+ - **Templates as source of truth**: Templates are the source of (non-mutable) database objects
39
+ - **Just SQL**: Templates as just SQL, and `build` to standard [Supabase](https://supabase.com) migrations when you're ready to ship
40
+ - **Sane code reviews**: Templates evolve like regular code, with diffs in PR's working `git blame`.
41
+ - **Developer Friendly**: Interactive CLI with visual feedback for all operations.
41
42
 
42
43
  Built specifically for projects using the standard [Supabase](https://supabase.com) stack (but probably works alright for other Postgres-based projects, too).
43
44
 
44
- ## Requirements
45
+ ## Quick Start 🚀
45
46
 
46
- - Node.js v20.x or higher
47
- - [Supabase](https://supabase.com) CLI installed and project initialized (with `/supabase` directory)
48
- - Local Postgres instance running (typically via `supabase start`)
47
+ ### Requirements
49
48
 
50
- ## Quick Start 🚀
49
+ - Node.js v20.x or higher
50
+ - [Supabase](https://supabase.com) project initialized (in `/supabase`).
51
51
 
52
52
  ### Installation
53
53
 
@@ -74,7 +74,8 @@ npx @t1mmen/srtd init # Creates srtd.config.json, not required
74
74
  Create `supabase/migrations-templates/my_function.sql`:
75
75
 
76
76
  ```sql
77
- CREATE OR REPLACE FUNCTION my_function()
77
+ DROP FUNCTION IF EXISTS public.my_function; -- Makes it easier to change args later
78
+ CREATE FUNCTION my_function()
78
79
  RETURNS void AS $$
79
80
  BEGIN
80
81
  -- Your function logic here
@@ -95,8 +96,7 @@ npx @t1mmen/srtd build # Creates timestamped migration file
95
96
  supabase migration up # Apply using Supabase CLI
96
97
  ```
97
98
 
98
-
99
- > [!INFO]
99
+ > [!TIP]
100
100
  > To reduce noise in PR's, consider adding `migration-templates/*srtd*.sql linguist-generated=true` to your [`.gitattributes` file.](https://docs.github.com/en/repositories/working-with-files/managing-files/customizing-how-changed-files-appear-on-github) (unless you manually edit the generated files)
101
101
 
102
102
 
@@ -110,7 +110,8 @@ Without templates, the smallest change to a function would show up as a complete
110
110
  ✅ Database functions:
111
111
  ```diff
112
112
  -- Event notifications
113
- CREATE OR REPLACE FUNCTION notify_changes()
113
+ DROP FUNCTION IF EXISTS notify_changes;
114
+ CREATE FUNCTION notify_changes()
114
115
  RETURNS trigger AS $$
115
116
  BEGIN
116
117
  PERFORM pg_notify(
@@ -173,12 +174,31 @@ Without templates, the smallest change to a function would show up as a complete
173
174
  ALTER TYPE notification_type ADD VALUE IF NOT EXISTS 'push';
174
175
  ALTER TYPE notification_type ADD VALUE IF NOT EXISTS 'pusher';
175
176
  ALTER TYPE notification_type ADD VALUE IF NOT EXISTS 'webhook';
176
- + ALTER TYPE notification_type ADD VALUE IF NOT EXISTS 'email';
177
+ + ALTER TYPE notification_type ADD VALUE IF NOT EXISTS 'whatsapp';
177
178
  END $$;
178
179
  ```
179
180
 
180
- ### Not Recommended For
181
+ Triggers
182
+ ```diff
183
+ DROP TRIGGER IF EXISTS on_new_user ON auth.users;
184
+ DROP FUNCTION IF EXISTS public.setup_new_user;
185
+
186
+ CREATE FUNCTION public.setup_new_user() RETURNS TRIGGER LANGUAGE plpgsql SECURITY DEFINER
187
+ SET search_path = public AS $$
188
+ BEGIN
189
+ -- Existing logic for new users
190
+
191
+ + -- Your new changes go here..
192
+ END;
193
+ $$;
194
+
195
+ CREATE TRIGGER on_new_user AFTER INSERT ON auth.users FOR EACHW EXECUTE PROCEDURE public.setup_new_user ();
196
+ ```
197
+
198
+ > [!TIP]
199
+ > You don't need to specifying parameters in drop functions. E.g `DROP FUNCTION IF EXISTS public.my_function;`. This ensures you don't end up with multiple functions with the same name, but different parameters.
181
200
 
201
+ ### Not Recommended Fo
182
202
  * ❌ Table structures
183
203
  * ❌ Indexes
184
204
  * ❌ Data modifications
@@ -191,13 +211,13 @@ Use regular [Supabase](https://supabase.com) migrations for these cases.
191
211
 
192
212
  ### Interactive Mode
193
213
 
194
- Running `npx @t1mmen/srtd` without arguments opens an interactive menu:
214
+ Running `npx @t1mmen/srtd` without arguments opens an interactive menu. All commands can also be run directly:
195
215
 
216
+ - 👀 `srtd watch` - Watch and auto-apply changes
196
217
  - 🏗️ `srtd build [--force]` - Generate migrations from templates
197
218
  - ▶️ `srtd apply [--force]` - Apply templates directly to local database
198
219
  - ✍️ `srtd register [file.sql...]` - Mark templates as already built
199
220
  - 🚀 `srtd promote - [file.sql ...]` - Promote WIP template to buildable templates
200
- - 👀 `srtd watch` - Watch and auto-apply changes
201
221
  - 🧹 `srtd clean` - Remove all logs and reset config
202
222
 
203
223
  > [!IMPORTANT]
@@ -205,7 +225,7 @@ Running `npx @t1mmen/srtd` without arguments opens an interactive menu:
205
225
 
206
226
  ## Configuration 📝
207
227
 
208
- `srtd.config.json` created during initialization:
228
+ `srtd.config.json` can be created with `init` command. It is not necessary, if the defaults suit your needs.
209
229
 
210
230
  ```jsonc
211
231
  {
@@ -245,7 +265,7 @@ Add `.wip.sql` extension to prevent migration generation:
245
265
  my_function.wip.sql # Only applied locally, never built
246
266
  ```
247
267
 
248
- Make a WIP templates buildable my renaming it, or using the `promote` command:
268
+ Make a WIP template buildable as migration by renaming it, or using the `promote` command:
249
269
  ```bash
250
270
  npx @t1mmen/srtd promote my_function.wip.sql
251
271
  ```
@@ -0,0 +1,27 @@
1
+ interface TestContext {
2
+ timestamp: number;
3
+ testDir: string;
4
+ testFunctionName: string;
5
+ templateCounter: number;
6
+ }
7
+ /**
8
+ * Creates a test context with all the goodies we need! 🎁
9
+ */
10
+ export declare function createTestContext(name?: string): TestContext;
11
+ /**
12
+ * Get unique template names - perfect for testing! 🏷️
13
+ */
14
+ export declare function getNextTemplateName(context: TestContext, prefix?: string): string;
15
+ /**
16
+ * Create a template file with whatever content you want! 📝
17
+ */
18
+ export declare function createTemplate(context: TestContext, name: string, content: string, dir?: string): Promise<string>;
19
+ /**
20
+ * Create a template with a basic Postgres function - the bread and butter of testing! 🍞
21
+ */
22
+ export declare function createTemplateWithFunc(context: TestContext, prefix: string, funcSuffix?: string, dir?: string): Promise<string>;
23
+ /**
24
+ * Clean up after our tests like good citizens! 🧹
25
+ */
26
+ export declare function cleanupTestContext(context: TestContext): Promise<void>;
27
+ export {};
@@ -0,0 +1,55 @@
1
+ // src/__tests__/helpers.ts
2
+ import fs from 'node:fs/promises';
3
+ import path from 'node:path';
4
+ import { TEST_FN_PREFIX } from './vitest.setup.js';
5
+ /**
6
+ * Creates a test context with all the goodies we need! 🎁
7
+ */
8
+ export function createTestContext(name = 'test') {
9
+ return {
10
+ timestamp: Date.now(),
11
+ testDir: path.join(process.env.TMPDIR || '/tmp', `srtd-${name}-${Date.now()}`),
12
+ testFunctionName: `${TEST_FN_PREFIX}${Date.now()}`,
13
+ templateCounter: 0,
14
+ };
15
+ }
16
+ /**
17
+ * Get unique template names - perfect for testing! 🏷️
18
+ */
19
+ export function getNextTemplateName(context, prefix = 'template') {
20
+ context.templateCounter++;
21
+ return `${prefix}_${context.timestamp}_${context.templateCounter}`;
22
+ }
23
+ /**
24
+ * Create a template file with whatever content you want! 📝
25
+ */
26
+ export async function createTemplate(context, name, content, dir) {
27
+ const fullPath = dir
28
+ ? path.join(context.testDir, 'test-templates', dir, name)
29
+ : path.join(context.testDir, 'test-templates', name);
30
+ try {
31
+ await fs.mkdir(path.dirname(fullPath), { recursive: true });
32
+ await fs.writeFile(fullPath, content);
33
+ return fullPath;
34
+ }
35
+ catch (error) {
36
+ console.error('Error creating template:', error);
37
+ throw error;
38
+ }
39
+ }
40
+ /**
41
+ * Create a template with a basic Postgres function - the bread and butter of testing! 🍞
42
+ */
43
+ export async function createTemplateWithFunc(context, prefix, funcSuffix = '', dir) {
44
+ const name = `${getNextTemplateName(context, prefix)}.sql`;
45
+ const funcName = `${context.testFunctionName}${funcSuffix}`;
46
+ const content = `CREATE OR REPLACE FUNCTION ${funcName}() RETURNS void AS $$ BEGIN NULL; END; $$ LANGUAGE plpgsql;`;
47
+ return createTemplate(context, name, content, dir);
48
+ }
49
+ /**
50
+ * Clean up after our tests like good citizens! 🧹
51
+ */
52
+ export async function cleanupTestContext(context) {
53
+ await fs.rm(context.testDir, { recursive: true, force: true });
54
+ }
55
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/__tests__/helpers.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAC3B,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AASnD;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAI,GAAG,MAAM;IAC7C,OAAO;QACL,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,MAAM,EAAE,QAAQ,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QAC9E,gBAAgB,EAAE,GAAG,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE;QAClD,eAAe,EAAE,CAAC;KACnB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAoB,EAAE,MAAM,GAAG,UAAU;IAC3E,OAAO,CAAC,eAAe,EAAE,CAAC;IAC1B,OAAO,GAAG,MAAM,IAAI,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;AACrE,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAAoB,EACpB,IAAY,EACZ,OAAe,EACf,GAAY;IAEZ,MAAM,QAAQ,GAAG,GAAG;QAClB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,EAAE,IAAI,CAAC;QACzD,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,gBAAgB,EAAE,IAAI,CAAC,CAAC;IAEvD,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACtC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;QACjD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,OAAoB,EACpB,MAAc,EACd,UAAU,GAAG,EAAE,EACf,GAAY;IAEZ,MAAM,IAAI,GAAG,GAAG,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC;IAC3D,MAAM,QAAQ,GAAG,GAAG,OAAO,CAAC,gBAAgB,GAAG,UAAU,EAAE,CAAC;IAC5D,MAAM,OAAO,GAAG,8BAA8B,QAAQ,6DAA6D,CAAC;IACpH,OAAO,cAAc,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;AACrD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAAoB;IAC3D,MAAM,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AACjE,CAAC"}
package/dist/cli.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env -S node --no-warnings
2
2
  import Pastel from 'pastel';
3
3
  import updateNotifier from 'update-notifier';
4
- import packageJson from '../package.json' assert { type: 'json' };
4
+ import packageJson from '../package.json' with { type: 'json' };
5
5
  updateNotifier({ pkg: packageJson }).notify();
6
6
  const app = new Pastel({
7
7
  importMeta: import.meta,
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.tsx"],"names":[],"mappings":";AACA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,cAAc,MAAM,iBAAiB,CAAC;AAC7C,OAAO,WAAW,MAAM,iBAAiB,CAAC,SAAS,IAAI,EAAE,MAAM,EAAE,CAAC;AAElE,cAAc,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;AAE9C,MAAM,GAAG,GAAG,IAAI,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC,IAAI;CACxB,CAAC,CAAC;AAEH,MAAM,GAAG,CAAC,GAAG,EAAE,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.tsx"],"names":[],"mappings":";AACA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,cAAc,MAAM,iBAAiB,CAAC;AAC7C,OAAO,WAAW,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAEhE,cAAc,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;AAE9C,MAAM,GAAG,GAAG,IAAI,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC,IAAI;CACxB,CAAC,CAAC;AAEH,MAAM,GAAG,CAAC,GAAG,EAAE,CAAC"}
@@ -8,6 +8,7 @@ import Branding from '../components/Branding.js';
8
8
  import Quittable from '../components/Quittable.js';
9
9
  import { COLOR_ERROR, COLOR_SUCCESS, COLOR_WARNING } from '../components/customTheme.js';
10
10
  import { useTemplateState } from '../hooks/useTemplateState.js';
11
+ import { findProjectRoot } from '../utils/findProjectRoot.js';
11
12
  import { registerTemplate } from '../utils/registerTemplate.js';
12
13
  // Support both array of filenames as arguments and interactive selection
13
14
  export const args = zod
@@ -33,14 +34,24 @@ export default function Register({ args: templateArgs }) {
33
34
  setErrorMessage('');
34
35
  let successCount = 0;
35
36
  let failCount = 0;
36
- for (const path of templates) {
37
- try {
38
- await registerTemplate(path, process.cwd());
39
- successCount++;
37
+ try {
38
+ const projectRoot = await findProjectRoot();
39
+ for (const path of templates) {
40
+ try {
41
+ await registerTemplate(path, projectRoot);
42
+ successCount++;
43
+ }
44
+ catch (err) {
45
+ console.error(err);
46
+ failCount++;
47
+ }
40
48
  }
41
- catch {
42
- failCount++;
49
+ }
50
+ catch (err) {
51
+ if (err instanceof Error) {
52
+ setErrorMessage(err.message);
43
53
  }
54
+ process.exit(1);
44
55
  }
45
56
  if (failCount > 0) {
46
57
  setErrorMessage(`Failed to register ${failCount} template(s).`);
@@ -103,7 +114,9 @@ export default function Register({ args: templateArgs }) {
103
114
  React.createElement(Box, { gap: 2 }, options.length === 0 ? (React.createElement(Box, { flexDirection: "column" },
104
115
  React.createElement(Text, { color: COLOR_WARNING },
105
116
  figures.warning,
106
- " No templates found"),
117
+ " No templates ",
118
+ !showAll && 'unregistered',
119
+ " found"),
107
120
  !showAll && !!items.length && (React.createElement(Text, { dimColor: true },
108
121
  figures.info,
109
122
  " Press r to show registered templates")),
@@ -1 +1 @@
1
- {"version":3,"file":"register.js","sourceRoot":"","sources":["../../src/commands/register.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"register.js","sourceRoot":"","sources":["../../src/commands/register.tsx"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { Badge } from '@inkjs/ui';
2
2
  import { Box, Text } from 'ink';
3
3
  import React from 'react';
4
- import packageJson from '../../package.json' assert { type: 'json' };
4
+ import packageJson from '../../package.json' with { type: 'json' };
5
5
  import { useDatabaseConnection } from '../hooks/useDatabaseConnection.js';
6
6
  import { COLOR_ERROR, COLOR_SUPABASE, COLOR_WARNING } from './customTheme.js';
7
7
  export default function Branding({ subtitle }) {
@@ -1 +1 @@
1
- {"version":3,"file":"Branding.js","sourceRoot":"","sources":["../../src/components/Branding.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,WAAW,MAAM,oBAAoB,CAAC,SAAS,IAAI,EAAE,MAAM,EAAE,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAM9E,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,EAAE,QAAQ,EAAS;IAClD,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,qBAAqB,EAAE,CAAC;IAEvD,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC;IACtF,OAAO,CACL,oBAAC,GAAG,IAAC,YAAY,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,aAAa,EAAC,QAAQ;QAChE,oBAAC,GAAG,IAAC,GAAG,EAAE,CAAC;YACT,oBAAC,KAAK,IAAC,KAAK,EAAE,UAAU,aAAgB;YACvC,QAAQ,CAAC,CAAC,CAAC,CACV,oBAAC,IAAI,QAAE,QAAQ,CAAQ,CACxB,CAAC,CAAC,CAAC,CACF,oBAAC,IAAI;gBACH,oBAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAE,cAAc,QAEzB;;gBACC,GAAG;gBACX,oBAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAE,cAAc,QAEzB;;gBACG,GAAG;gBACb,oBAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAE,cAAc,QAEzB;;gBACC,GAAG;gBACX,oBAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAE,cAAc,QAEzB;6BAEF,CACR;YACD,oBAAC,IAAI,IAAC,QAAQ;;gBAAI,WAAW,CAAC,OAAO,CAAQ,CACzC,CACF,CACP,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"Branding.js","sourceRoot":"","sources":["../../src/components/Branding.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,WAAW,MAAM,oBAAoB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAM9E,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,EAAE,QAAQ,EAAS;IAClD,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,qBAAqB,EAAE,CAAC;IAEvD,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC;IACtF,OAAO,CACL,oBAAC,GAAG,IAAC,YAAY,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,aAAa,EAAC,QAAQ;QAChE,oBAAC,GAAG,IAAC,GAAG,EAAE,CAAC;YACT,oBAAC,KAAK,IAAC,KAAK,EAAE,UAAU,aAAgB;YACvC,QAAQ,CAAC,CAAC,CAAC,CACV,oBAAC,IAAI,QAAE,QAAQ,CAAQ,CACxB,CAAC,CAAC,CAAC,CACF,oBAAC,IAAI;gBACH,oBAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAE,cAAc,QAEzB;;gBACC,GAAG;gBACX,oBAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAE,cAAc,QAEzB;;gBACG,GAAG;gBACb,oBAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAE,cAAc,QAEzB;;gBACC,GAAG;gBACX,oBAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAE,cAAc,QAEzB;6BAEF,CACR;YACD,oBAAC,IAAI,IAAC,QAAQ;;gBAAI,WAAW,CAAC,OAAO,CAAQ,CACzC,CACF,CACP,CAAC;AACJ,CAAC"}
@@ -19,4 +19,4 @@ export interface UseTemplateManager {
19
19
  latestPath?: string;
20
20
  templateDir?: string;
21
21
  }
22
- export declare function useTemplateManager(cwd?: string): UseTemplateManager;
22
+ export declare function useTemplateManager(baseDir?: string): UseTemplateManager;
@@ -2,7 +2,8 @@
2
2
  import { useEffect, useMemo, useRef, useState } from 'react';
3
3
  import { TemplateManager } from '../lib/templateManager.js';
4
4
  import { getConfig } from '../utils/config.js';
5
- export function useTemplateManager(cwd = process.cwd()) {
5
+ import { findProjectRoot } from '../utils/findProjectRoot.js';
6
+ export function useTemplateManager(baseDir) {
6
7
  const [templates, setTemplates] = useState([]);
7
8
  const [updates, setUpdates] = useState([]);
8
9
  const [errors, setErrors] = useState(new Map());
@@ -29,6 +30,7 @@ export function useTemplateManager(cwd = process.cwd()) {
29
30
  let mounted = true;
30
31
  async function init() {
31
32
  try {
33
+ const cwd = baseDir || (await findProjectRoot());
32
34
  const config = await getConfig(cwd);
33
35
  setTemplateDir(config.templateDir);
34
36
  managerRef.current = await TemplateManager.create(cwd, { silent: true });
@@ -110,7 +112,7 @@ export function useTemplateManager(cwd = process.cwd()) {
110
112
  mounted = false;
111
113
  managerRef.current?.[Symbol.dispose]();
112
114
  };
113
- }, [cwd]);
115
+ }, [baseDir]);
114
116
  return {
115
117
  templates: sortedTemplates,
116
118
  updates,
@@ -1 +1 @@
1
- {"version":3,"file":"useTemplateManager.js","sourceRoot":"","sources":["../../src/hooks/useTemplateManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useTemplateManager.js","sourceRoot":"","sources":["../../src/hooks/useTemplateManager.ts"],"names":[],"mappings":"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"}
@@ -52,6 +52,7 @@ var __disposeResources = (this && this.__disposeResources) || (function (Suppres
52
52
  });
53
53
  import { useEffect, useRef, useState } from 'react';
54
54
  import { TemplateManager } from '../lib/templateManager.js';
55
+ import { findProjectRoot } from '../utils/findProjectRoot.js';
55
56
  export function useTemplateProcessor(options) {
56
57
  const [result, setResult] = useState({
57
58
  applied: [],
@@ -69,7 +70,8 @@ export function useTemplateProcessor(options) {
69
70
  try {
70
71
  const env_1 = { stack: [], error: void 0, hasError: false };
71
72
  try {
72
- const manager = __addDisposableResource(env_1, await TemplateManager.create(process.cwd(), { silent: true }), false);
73
+ const projectRoot = await findProjectRoot();
74
+ const manager = __addDisposableResource(env_1, await TemplateManager.create(projectRoot, { silent: true }), false);
73
75
  const result = await manager.processTemplates(options);
74
76
  setResult(result);
75
77
  setIsProcessing(false);
@@ -1 +1 @@
1
- {"version":3,"file":"useTemplateProcessor.js","sourceRoot":"","sources":["../../src/hooks/useTemplateProcessor.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAU5D,MAAM,UAAU,oBAAoB,CAAC,OAAyB;IAC5D,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAA0B;QAC5D,OAAO,EAAE,EAAE;QACX,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,EAAE;QACX,KAAK,EAAE,EAAE;KACV,CAAC,CAAC;IACH,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IACvD,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAEhC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,SAAS,CAAC,OAAO;YAAE,OAAO;QAC9B,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC;QAEzB,KAAK,UAAU,YAAY;YACzB,IAAI,CAAC;;;oBACH,MAAM,OAAO,kCAAG,MAAM,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,QAAA,CAAC;oBAC9E,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;oBACvD,SAAS,CAAC,MAAM,CAAC,CAAC;oBAClB,eAAe,CAAC,KAAK,CAAC,CAAC;oBACvB,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;;;;;;;;;aACxB;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC;gBACxC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACjB,GAAG,IAAI;oBACP,MAAM,EAAE;wBACN,GAAG,IAAI,CAAC,MAAM;wBACd;4BACE,IAAI,EAAE,SAAS;4BACf,YAAY,EAAE,QAAQ;4BACtB,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;yBACxD;qBACF;iBACF,CAAC,CAAC,CAAC;gBACJ,eAAe,CAAC,KAAK,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;QAED,KAAK,YAAY,EAAE,CAAC;IACtB,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;AAClC,CAAC"}
1
+ {"version":3,"file":"useTemplateProcessor.js","sourceRoot":"","sources":["../../src/hooks/useTemplateProcessor.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE5D,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAS9D,MAAM,UAAU,oBAAoB,CAAC,OAAyB;IAC5D,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAA0B;QAC5D,OAAO,EAAE,EAAE;QACX,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,EAAE;QACX,KAAK,EAAE,EAAE;KACV,CAAC,CAAC;IACH,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IACvD,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAEhC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,SAAS,CAAC,OAAO;YAAE,OAAO;QAC9B,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC;QAEzB,KAAK,UAAU,YAAY;YACzB,IAAI,CAAC;;;oBACH,MAAM,WAAW,GAAG,MAAM,eAAe,EAAE,CAAC;oBAC5C,MAAM,OAAO,kCAAG,MAAM,eAAe,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,QAAA,CAAC;oBAC5E,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;oBACvD,SAAS,CAAC,MAAM,CAAC,CAAC;oBAClB,eAAe,CAAC,KAAK,CAAC,CAAC;oBACvB,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;;;;;;;;;aACxB;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC;gBACxC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACjB,GAAG,IAAI;oBACP,MAAM,EAAE;wBACN,GAAG,IAAI,CAAC,MAAM;wBACd;4BACE,IAAI,EAAE,SAAS;4BACf,YAAY,EAAE,QAAQ;4BACtB,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;yBACxD;qBACF;iBACF,CAAC,CAAC,CAAC;gBACJ,eAAe,CAAC,KAAK,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;QAED,KAAK,YAAY,EAAE,CAAC;IACtB,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;AAClC,CAAC"}
@@ -1,6 +1,7 @@
1
1
  // hooks/useTemplateState.ts
2
2
  import { useEffect, useState } from 'react';
3
3
  import { TemplateManager } from '../lib/templateManager.js';
4
+ import { findProjectRoot } from '../utils/findProjectRoot.js';
4
5
  export function useTemplateState() {
5
6
  const [loading, setLoading] = useState(true);
6
7
  const [error, setError] = useState(null);
@@ -8,7 +9,7 @@ export function useTemplateState() {
8
9
  useEffect(() => {
9
10
  async function fetchStatus() {
10
11
  try {
11
- const baseDir = process.cwd();
12
+ const baseDir = await findProjectRoot();
12
13
  const manager = await TemplateManager.create(baseDir);
13
14
  const templates = await manager.findTemplates();
14
15
  const statuses = await Promise.all(templates.map(t => manager.getTemplateStatus(t)));
@@ -1 +1 @@
1
- {"version":3,"file":"useTemplateState.js","sourceRoot":"","sources":["../../src/hooks/useTemplateState.ts"],"names":[],"mappings":"AAAA,4BAA4B;AAC5B,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAG5D,MAAM,UAAU,gBAAgB;IAC9B,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IACxD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAmB,EAAE,CAAC,CAAC;IAEzD,SAAS,CAAC,GAAG,EAAE;QACb,KAAK,UAAU,WAAW;YACxB,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;gBAC9B,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBACtD,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,aAAa,EAAE,CAAC;gBAChD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACrF,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACrB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,QAAQ,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;YACjE,CAAC;oBAAS,CAAC;gBACT,UAAU,CAAC,KAAK,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;QACD,WAAW,EAAE,CAAC;IAChB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AACnC,CAAC"}
1
+ {"version":3,"file":"useTemplateState.js","sourceRoot":"","sources":["../../src/hooks/useTemplateState.ts"],"names":[],"mappings":"AAAA,4BAA4B;AAC5B,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE5D,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,MAAM,UAAU,gBAAgB;IAC9B,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IACxD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAmB,EAAE,CAAC,CAAC;IAEzD,SAAS,CAAC,GAAG,EAAE;QACb,KAAK,UAAU,WAAW;YACxB,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,eAAe,EAAE,CAAC;gBACxC,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBACtD,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,aAAa,EAAE,CAAC;gBAChD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACrF,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACrB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,QAAQ,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;YACjE,CAAC;oBAAS,CAAC;gBACT,UAAU,CAAC,KAAK,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;QACD,WAAW,EAAE,CAAC;IAChB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AACnC,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function findProjectRoot(startDir?: string): Promise<string>;
@@ -0,0 +1,25 @@
1
+ import path from 'node:path';
2
+ import { fileExists } from './fileExists.js';
3
+ async function isProjectDir(dir) {
4
+ // Check for srtd config files
5
+ if (await fileExists(path.join(dir, 'srtd.config.json')))
6
+ return true;
7
+ // Check for package.json
8
+ if (await fileExists(path.join(dir, 'package.json')))
9
+ return true;
10
+ // Check for supabase directory
11
+ if (await fileExists(path.join(dir, 'supabase')))
12
+ return true;
13
+ return false;
14
+ }
15
+ export async function findProjectRoot(startDir) {
16
+ let currentDir = startDir || process.cwd();
17
+ while (currentDir !== path.parse(currentDir).root) {
18
+ if (await isProjectDir(currentDir)) {
19
+ return currentDir;
20
+ }
21
+ currentDir = path.dirname(currentDir);
22
+ }
23
+ throw new Error('Could not find project root. Are you in a Supabase project directory?');
24
+ }
25
+ //# sourceMappingURL=findProjectRoot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"findProjectRoot.js","sourceRoot":"","sources":["../../src/utils/findProjectRoot.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,KAAK,UAAU,YAAY,CAAC,GAAW;IACrC,8BAA8B;IAC9B,IAAI,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAEtE,yBAAyB;IACzB,IAAI,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAElE,+BAA+B;IAC/B,IAAI,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAE9D,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,QAAiB;IACrD,IAAI,UAAU,GAAG,QAAQ,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAE3C,OAAO,UAAU,KAAK,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC;QAClD,IAAI,MAAM,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC;YACnC,OAAO,UAAU,CAAC;QACpB,CAAC;QACD,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACxC,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;AAC3F,CAAC"}
@@ -7,10 +7,11 @@ import { fileExists } from './fileExists.js';
7
7
  import { loadBuildLog } from './loadBuildLog.js';
8
8
  import { saveBuildLog } from './saveBuildLog.js';
9
9
  export async function registerTemplate(templatePath, baseDir) {
10
- const config = await getConfig(baseDir);
11
- // Try multiple path resolutions
10
+ const config = await getConfig();
12
11
  const pathsToTry = [
13
- path.join(baseDir, config.templateDir, templatePath), // In templates dir
12
+ path.resolve(templatePath),
13
+ path.resolve(baseDir, templatePath),
14
+ path.join(baseDir, templatePath),
14
15
  ];
15
16
  let resolvedPath = null;
16
17
  for (const p of pathsToTry) {
@@ -26,6 +27,9 @@ export async function registerTemplate(templatePath, baseDir) {
26
27
  }
27
28
  throw new Error(`Template ${templatePath} not found`);
28
29
  }
30
+ if (!resolvedPath.startsWith(path.resolve(baseDir, config.templateDir))) {
31
+ throw new Error(`Template in wrong directly, must be located inside of configured templateDir: ${config.templateDir}/*`);
32
+ }
29
33
  const content = await fs.readFile(resolvedPath, 'utf-8');
30
34
  const hash = await calculateMD5(content);
31
35
  const relativePath = path.relative(baseDir, resolvedPath);
@@ -1 +1 @@
1
- {"version":3,"file":"registerTemplate.js","sourceRoot":"","sources":["../../src/utils/registerTemplate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,YAAoB,EAAE,OAAe;IAC1E,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC;IAExC,gCAAgC;IAChC,MAAM,UAAU,GAAG;QACjB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,WAAW,EAAE,YAAY,CAAC,EAAE,mBAAmB;KAC1E,CAAC;IAEF,IAAI,YAAY,GAAkB,IAAI,CAAC;IACvC,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,IAAI,MAAM,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;YACxB,YAAY,GAAG,CAAC,CAAC;YACjB,MAAM;QACR,CAAC;IACH,CAAC;IAED,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,iCAAiC,CAAC,CAAC;QACpE,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7D,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,YAAY,YAAY,YAAY,CAAC,CAAC;IACxD,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IACzD,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;IACzC,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAC1D,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAErC,mBAAmB;IACnB,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACvD,QAAQ,CAAC,SAAS,CAAC,YAAY,CAAC,GAAG;QACjC,aAAa,EAAE,IAAI;QACnB,aAAa,EAAE,GAAG;QAClB,iBAAiB,EAAE,EAAE,EAAE,4CAA4C;KACpE,CAAC;IAEF,MAAM,YAAY,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,wBAAwB,CAAC,EAAE,YAAY,CAAC,CAAC;AACnE,CAAC"}
1
+ {"version":3,"file":"registerTemplate.js","sourceRoot":"","sources":["../../src/utils/registerTemplate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,YAAoB,EAAE,OAAe;IAC1E,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;IAEjC,MAAM,UAAU,GAAG;QACjB,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;QAC1B,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,YAAY,CAAC;QACnC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC;KACjC,CAAC;IAEF,IAAI,YAAY,GAAkB,IAAI,CAAC;IACvC,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,IAAI,MAAM,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;YACxB,YAAY,GAAG,CAAC,CAAC;YACjB,MAAM;QACR,CAAC;IACH,CAAC;IAED,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,iCAAiC,CAAC,CAAC;QACpE,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7D,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,YAAY,YAAY,YAAY,CAAC,CAAC;IACxD,CAAC;IAED,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;QACxE,MAAM,IAAI,KAAK,CACb,iFAAiF,MAAM,CAAC,WAAW,IAAI,CACxG,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IACzD,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;IACzC,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAC1D,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAErC,mBAAmB;IACnB,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACvD,QAAQ,CAAC,SAAS,CAAC,YAAY,CAAC,GAAG;QACjC,aAAa,EAAE,IAAI;QACnB,aAAa,EAAE,GAAG;QAClB,iBAAiB,EAAE,EAAE,EAAE,4CAA4C;KACpE,CAAC;IAEF,MAAM,YAAY,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,wBAAwB,CAAC,EAAE,YAAY,CAAC,CAAC;AACnE,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,142 @@
1
+ import fs from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import { afterEach, beforeEach, describe, expect, it } from 'vitest';
4
+ import { TEST_ROOT } from '../__tests__/vitest.setup.js';
5
+ import { calculateMD5 } from '../utils/calculateMD5.js';
6
+ import { getConfig } from '../utils/config.js';
7
+ import { registerTemplate } from '../utils/registerTemplate.js';
8
+ describe('registerTemplate', () => {
9
+ const testContext = {
10
+ testId: 0,
11
+ testDir: '',
12
+ templateCounter: 0,
13
+ };
14
+ beforeEach(async () => {
15
+ testContext.testId = Math.floor(Math.random() * 1000000);
16
+ testContext.testDir = path.join(TEST_ROOT, `register-template-${testContext.testId}`);
17
+ testContext.templateCounter = 0;
18
+ // Create test directories using config paths
19
+ const config = await getConfig(testContext.testDir);
20
+ await fs.mkdir(path.join(testContext.testDir, config.templateDir), { recursive: true });
21
+ });
22
+ afterEach(async () => {
23
+ await fs.rm(testContext.testDir, { recursive: true, force: true });
24
+ });
25
+ const getNextTemplateName = (prefix = 'template') => {
26
+ testContext.templateCounter++;
27
+ return `${prefix}_${testContext.testId}_${testContext.templateCounter}`;
28
+ };
29
+ const createTemplate = async (name, content, dir) => {
30
+ const config = await getConfig(testContext.testDir);
31
+ const fullPath = dir
32
+ ? path.join(testContext.testDir, config.templateDir, dir, name)
33
+ : path.join(testContext.testDir, config.templateDir, name);
34
+ try {
35
+ await fs.mkdir(path.dirname(fullPath), { recursive: true });
36
+ await fs.writeFile(fullPath, content);
37
+ return fullPath;
38
+ }
39
+ catch (error) {
40
+ console.error('Error creating template:', error);
41
+ throw error;
42
+ }
43
+ };
44
+ it('successfully registers a valid template 🎯', async () => {
45
+ const templateName = getNextTemplateName('success');
46
+ const templateContent = `
47
+ CREATE FUNCTION test()
48
+ RETURNS void AS $$
49
+ BEGIN
50
+ NULL;
51
+ END;
52
+ $$ LANGUAGE plpgsql;
53
+ `;
54
+ const templatePath = await createTemplate(`${templateName}.sql`, templateContent);
55
+ const config = await getConfig(testContext.testDir);
56
+ await registerTemplate(templatePath, testContext.testDir);
57
+ const buildLog = JSON.parse(await fs.readFile(path.join(testContext.testDir, config.buildLog), 'utf-8'));
58
+ const relPath = path.relative(testContext.testDir, templatePath);
59
+ expect(buildLog.templates[relPath]).toBeDefined();
60
+ expect(buildLog.templates[relPath].lastBuildHash).toBe(await calculateMD5(templateContent));
61
+ expect(buildLog.templates[relPath].lastBuildDate).toMatch(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/);
62
+ expect(buildLog.templates[relPath].lastMigrationFile).toBe('');
63
+ });
64
+ it('prevents registering templates outside templateDir 🔒', async () => {
65
+ // Try to register a template from outside the configured template directory
66
+ const outsideContent = 'SELECT 1;';
67
+ const outsidePath = path.join(testContext.testDir, 'outside.sql');
68
+ await fs.writeFile(outsidePath, outsideContent);
69
+ await expect(registerTemplate(outsidePath, testContext.testDir)).rejects.toThrow(/Template in wrong directly/);
70
+ // Also try with a path that looks like it's in templateDir but isn't
71
+ const sneakyPath = path.join(testContext.testDir, 'fake-test-templates', 'sneaky.sql');
72
+ await fs.mkdir(path.dirname(sneakyPath), { recursive: true });
73
+ await fs.writeFile(sneakyPath, outsideContent);
74
+ await expect(registerTemplate(sneakyPath, testContext.testDir)).rejects.toThrow(/Template in wrong directly/);
75
+ });
76
+ it('handles templates in nested directories 📂', async () => {
77
+ const templateName = getNextTemplateName('nested');
78
+ const templatePath = await createTemplate(`${templateName}.sql`, 'SELECT 1;', 'deep/nested/dir');
79
+ await registerTemplate(templatePath, testContext.testDir);
80
+ const config = await getConfig(testContext.testDir);
81
+ const buildLog = JSON.parse(await fs.readFile(path.join(testContext.testDir, config.buildLog), 'utf-8'));
82
+ const relPath = path.relative(testContext.testDir, templatePath);
83
+ expect(buildLog.templates[relPath]).toBeDefined();
84
+ });
85
+ it('updates existing template registration 🔄', async () => {
86
+ const templateName = getNextTemplateName('update');
87
+ const templatePath = await createTemplate(`${templateName}.sql`, 'SELECT 1;');
88
+ const config = await getConfig(testContext.testDir);
89
+ await registerTemplate(templatePath, testContext.testDir);
90
+ const initialBuildLog = JSON.parse(await fs.readFile(path.join(testContext.testDir, config.buildLog), 'utf-8'));
91
+ const relPath = path.relative(testContext.testDir, templatePath);
92
+ const initialHash = initialBuildLog.templates[relPath].lastBuildHash;
93
+ const newContent = 'SELECT 2;';
94
+ await fs.writeFile(templatePath, newContent);
95
+ await registerTemplate(templatePath, testContext.testDir);
96
+ const updatedBuildLog = JSON.parse(await fs.readFile(path.join(testContext.testDir, config.buildLog), 'utf-8'));
97
+ expect(updatedBuildLog.templates[relPath].lastBuildHash).toBe(await calculateMD5(newContent));
98
+ expect(updatedBuildLog.templates[relPath].lastBuildHash).not.toBe(initialHash);
99
+ });
100
+ it('handles empty template files 📄', async () => {
101
+ const templateName = getNextTemplateName('empty');
102
+ const templatePath = await createTemplate(`${templateName}.sql`, '');
103
+ await registerTemplate(templatePath, testContext.testDir);
104
+ const config = await getConfig(testContext.testDir);
105
+ const buildLog = JSON.parse(await fs.readFile(path.join(testContext.testDir, config.buildLog), 'utf-8'));
106
+ const relPath = path.relative(testContext.testDir, templatePath);
107
+ expect(buildLog.templates[relPath].lastBuildHash).toBe(await calculateMD5(''));
108
+ });
109
+ it('handles large template files efficiently 📚', async () => {
110
+ const templateName = getNextTemplateName('large');
111
+ const largeContent = `
112
+ SELECT ${`'x'`.repeat(100 * 1024)};
113
+ `;
114
+ const templatePath = await createTemplate(`${templateName}.sql`, largeContent);
115
+ const startTime = Date.now();
116
+ await registerTemplate(templatePath, testContext.testDir);
117
+ const duration = Date.now() - startTime;
118
+ expect(duration).toBeLessThan(1000);
119
+ const config = await getConfig(testContext.testDir);
120
+ const buildLog = JSON.parse(await fs.readFile(path.join(testContext.testDir, config.buildLog), 'utf-8'));
121
+ const relPath = path.relative(testContext.testDir, templatePath);
122
+ expect(buildLog.templates[relPath].lastBuildHash).toBe(await calculateMD5(largeContent));
123
+ });
124
+ it('gracefully handles non-existent templates 🚫', async () => {
125
+ const config = await getConfig(testContext.testDir);
126
+ const nonExistentPath = path.join(testContext.testDir, config.templateDir, 'nope.sql');
127
+ await expect(registerTemplate(nonExistentPath, testContext.testDir)).rejects.toThrow(/Template.*not found/);
128
+ });
129
+ it('fails gracefully with filesystem errors 💥', async () => {
130
+ const templateName = getNextTemplateName('permission');
131
+ const templatePath = await createTemplate(`${templateName}.sql`, 'SELECT 1;', 'locked');
132
+ const templateDir = path.dirname(templatePath);
133
+ try {
134
+ await fs.chmod(templateDir, 0o000);
135
+ await expect(registerTemplate(templatePath, testContext.testDir)).rejects.toThrow();
136
+ }
137
+ finally {
138
+ await fs.chmod(templateDir, 0o755);
139
+ }
140
+ });
141
+ });
142
+ //# sourceMappingURL=registerTemplate.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registerTemplate.test.js","sourceRoot":"","sources":["../../src/utils/registerTemplate.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@t1mmen/srtd",
3
- "version": "0.4.5",
3
+ "version": "0.4.7",
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": {