@t1mmen/srtd 0.4.4 → 0.4.6

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 (39) hide show
  1. package/README.md +79 -31
  2. package/dist/__tests__/helpers.d.ts +27 -0
  3. package/dist/__tests__/helpers.js +55 -0
  4. package/dist/__tests__/helpers.js.map +1 -0
  5. package/dist/__tests__/promote.test.d.ts +1 -0
  6. package/dist/__tests__/promote.test.js +9 -0
  7. package/dist/__tests__/promote.test.js.map +1 -0
  8. package/dist/commands/apply.js +4 -5
  9. package/dist/commands/apply.js.map +1 -1
  10. package/dist/commands/build.js +2 -6
  11. package/dist/commands/build.js.map +1 -1
  12. package/dist/commands/index.js +6 -1
  13. package/dist/commands/index.js.map +1 -1
  14. package/dist/commands/init.js +7 -2
  15. package/dist/commands/init.js.map +1 -1
  16. package/dist/commands/promote.d.ts +8 -0
  17. package/dist/commands/promote.js +159 -0
  18. package/dist/commands/promote.js.map +1 -0
  19. package/dist/commands/register.js +20 -7
  20. package/dist/commands/register.js.map +1 -1
  21. package/dist/hooks/useTemplateManager.d.ts +1 -1
  22. package/dist/hooks/useTemplateManager.js +4 -2
  23. package/dist/hooks/useTemplateManager.js.map +1 -1
  24. package/dist/hooks/useTemplateProcessor.d.ts +1 -0
  25. package/dist/hooks/useTemplateProcessor.js +84 -41
  26. package/dist/hooks/useTemplateProcessor.js.map +1 -1
  27. package/dist/hooks/useTemplateState.js +2 -1
  28. package/dist/hooks/useTemplateState.js.map +1 -1
  29. package/dist/lib/templateManager.test.js +3 -0
  30. package/dist/lib/templateManager.test.js.map +1 -1
  31. package/dist/utils/findProjectRoot.d.ts +1 -0
  32. package/dist/utils/findProjectRoot.js +25 -0
  33. package/dist/utils/findProjectRoot.js.map +1 -0
  34. package/dist/utils/registerTemplate.js +7 -3
  35. package/dist/utils/registerTemplate.js.map +1 -1
  36. package/dist/utils/registerTemplate.test.d.ts +1 -0
  37. package/dist/utils/registerTemplate.test.js +142 -0
  38. package/dist/utils/registerTemplate.test.js.map +1 -0
  39. package/package.json +4 -2
@@ -0,0 +1,159 @@
1
+ import fs from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import { Select, Spinner } from '@inkjs/ui';
4
+ import figures from 'figures';
5
+ import { glob } from 'glob';
6
+ import { Box, Text, useApp } from 'ink';
7
+ import { argument } from 'pastel';
8
+ import React, { useCallback, useEffect, useState } from 'react';
9
+ import zod from 'zod';
10
+ import Branding from '../components/Branding.js';
11
+ import Quittable from '../components/Quittable.js';
12
+ import { COLOR_ERROR, COLOR_SUCCESS, COLOR_WARNING } from '../components/customTheme.js';
13
+ import { getConfig } from '../utils/config.js';
14
+ import { loadBuildLog } from '../utils/loadBuildLog.js';
15
+ import { saveBuildLog } from '../utils/saveBuildLog.js';
16
+ export const args = zod
17
+ .array(zod.string())
18
+ .optional()
19
+ .describe(argument({
20
+ name: 'templates',
21
+ description: 'Template files to promote (optional)',
22
+ }));
23
+ export default function Promote({ args: templateArgs }) {
24
+ const { exit } = useApp();
25
+ const [templates, setTemplates] = useState([]);
26
+ const [error, setError] = useState(null);
27
+ const [success, setSuccess] = useState(null);
28
+ const [config, setConfig] = useState(null);
29
+ const findWipTemplates = useCallback(async () => {
30
+ try {
31
+ const config = await getConfig(process.cwd());
32
+ setConfig(config);
33
+ const templatePath = path.join(process.cwd(), config.templateDir);
34
+ const pattern = `**/*${config.wipIndicator}*.sql`;
35
+ const matches = await glob(pattern, { cwd: templatePath });
36
+ const fullPaths = matches.map(m => path.join(templatePath, m));
37
+ setTemplates(fullPaths);
38
+ return fullPaths;
39
+ }
40
+ catch (err) {
41
+ const msg = err instanceof Error ? err.message : String(err);
42
+ setError(`Failed to find WIP templates: ${msg}`);
43
+ return [];
44
+ }
45
+ }, []);
46
+ const promoteTemplate = useCallback(async (templatePath) => {
47
+ try {
48
+ const config = await getConfig(process.cwd());
49
+ const newPath = templatePath.replace(config.wipIndicator, '');
50
+ // Load build log before file operations
51
+ const buildLog = await loadBuildLog(process.cwd(), 'local');
52
+ const relOldPath = path.relative(process.cwd(), templatePath);
53
+ const relNewPath = path.relative(process.cwd(), newPath);
54
+ // Check if source file exists
55
+ await fs.access(templatePath);
56
+ // Rename the file
57
+ await fs.rename(templatePath, newPath);
58
+ // Update build logs if template was tracked
59
+ if (buildLog.templates[relOldPath]) {
60
+ buildLog.templates[relNewPath] = buildLog.templates[relOldPath];
61
+ delete buildLog.templates[relOldPath];
62
+ await saveBuildLog(process.cwd(), buildLog, 'local');
63
+ }
64
+ const templateName = path.basename(newPath, '.sql');
65
+ setSuccess(`Successfully promoted ${templateName}`);
66
+ // Exit after short delay
67
+ setTimeout(() => exit(), 0);
68
+ }
69
+ catch (err) {
70
+ const msg = err instanceof Error ? err.message : String(err);
71
+ setError(`Failed to promote template: ${msg}`);
72
+ }
73
+ }, [exit]);
74
+ useEffect(() => {
75
+ const init = async () => {
76
+ const config = await getConfig(process.cwd());
77
+ await findWipTemplates();
78
+ if (templateArgs?.length) {
79
+ // Handle CLI mode
80
+ const templateName = templateArgs[0];
81
+ const templateDir = path.join(process.cwd(), config.templateDir);
82
+ const pattern = `**/*${templateName}*`;
83
+ const matches = await glob(pattern, { cwd: templateDir });
84
+ const isWip = config.wipIndicator && templateName?.includes(config.wipIndicator);
85
+ if (matches.length === 0 || !isWip) {
86
+ setError(`No WIP template found matching: ${templateName} in ${config.templateDir}`);
87
+ exit();
88
+ }
89
+ if (!isWip) {
90
+ setError(`Template is not a WIP template: ${templateName}`);
91
+ exit();
92
+ }
93
+ const match = matches[0] ? path.join(templateDir, matches[0]) : '';
94
+ if (!match) {
95
+ setError(`No valid match found for template: ${templateName} in ${config.templateDir}`);
96
+ exit();
97
+ }
98
+ await promoteTemplate(match);
99
+ }
100
+ };
101
+ init();
102
+ }, [templateArgs, findWipTemplates, promoteTemplate, exit]);
103
+ // UI status displays
104
+ if (error) {
105
+ return (React.createElement(Box, { flexDirection: "column" },
106
+ React.createElement(Branding, { subtitle: "\uD83D\uDE80 Promote WIP template" }),
107
+ React.createElement(Text, { color: COLOR_ERROR },
108
+ figures.cross,
109
+ " ",
110
+ error)));
111
+ }
112
+ if (success) {
113
+ return (React.createElement(Box, { flexDirection: "column" },
114
+ React.createElement(Branding, { subtitle: "\uD83D\uDE80 Promote WIP template" }),
115
+ React.createElement(Box, { gap: 1, flexDirection: "column" },
116
+ React.createElement(Text, { color: COLOR_SUCCESS },
117
+ figures.tick,
118
+ " ",
119
+ success),
120
+ React.createElement(Text, { dimColor: true }, "Run `build` command to generate migrations"))));
121
+ }
122
+ // Interactive UI mode
123
+ if (!templateArgs?.length) {
124
+ if (templates.length === 0) {
125
+ return (React.createElement(Box, { flexDirection: "column" },
126
+ React.createElement(Branding, { subtitle: "\uD83D\uDE80 Promote WIP template" }),
127
+ React.createElement(Text, { color: COLOR_WARNING },
128
+ figures.warning,
129
+ " No WIP templates found in ",
130
+ config?.templateDir,
131
+ ' ',
132
+ React.createElement(Text, { bold: true },
133
+ "(",
134
+ config?.wipIndicator,
135
+ ")")),
136
+ React.createElement(Quittable, null)));
137
+ }
138
+ const menuItems = templates.map(t => ({
139
+ label: path.basename(t),
140
+ value: t,
141
+ }));
142
+ return (React.createElement(Box, { flexDirection: "column" },
143
+ React.createElement(Branding, { subtitle: "\uD83D\uDE80 Promote WIP template" }),
144
+ React.createElement(Box, { gap: 1, marginBottom: 1 },
145
+ React.createElement(Text, null, "Select a template to promote"),
146
+ React.createElement(Text, { dimColor: true },
147
+ "(removes ",
148
+ config?.wipIndicator,
149
+ " in filename)")),
150
+ React.createElement(Box, { gap: 1, flexDirection: "column" },
151
+ React.createElement(Select, { visibleOptionCount: 30, options: menuItems, onChange: promoteTemplate })),
152
+ React.createElement(Quittable, null)));
153
+ }
154
+ // Loading state for CLI mode
155
+ return (React.createElement(Box, { flexDirection: "column" },
156
+ React.createElement(Branding, { subtitle: "\uD83D\uDE80 Promote WIP template" }),
157
+ React.createElement(Spinner, { label: "Loading..." })));
158
+ }
159
+ //# sourceMappingURL=promote.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promote.js","sourceRoot":"","sources":["../../src/commands/promote.tsx"],"names":[],"mappings":"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"}
@@ -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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"}
@@ -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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"}
@@ -3,6 +3,7 @@ interface ProcessorOptions {
3
3
  force?: boolean;
4
4
  apply?: boolean;
5
5
  generateFiles?: boolean;
6
+ onComplete?: () => void;
6
7
  }
7
8
  export declare function useTemplateProcessor(options: ProcessorOptions): {
8
9
  result: ProcessedTemplateResult;
@@ -1,6 +1,58 @@
1
+ var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) {
2
+ if (value !== null && value !== void 0) {
3
+ if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
4
+ var dispose, inner;
5
+ if (async) {
6
+ if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
7
+ dispose = value[Symbol.asyncDispose];
8
+ }
9
+ if (dispose === void 0) {
10
+ if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
11
+ dispose = value[Symbol.dispose];
12
+ if (async) inner = dispose;
13
+ }
14
+ if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
15
+ if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };
16
+ env.stack.push({ value: value, dispose: dispose, async: async });
17
+ }
18
+ else if (async) {
19
+ env.stack.push({ async: true });
20
+ }
21
+ return value;
22
+ };
23
+ var __disposeResources = (this && this.__disposeResources) || (function (SuppressedError) {
24
+ return function (env) {
25
+ function fail(e) {
26
+ env.error = env.hasError ? new SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;
27
+ env.hasError = true;
28
+ }
29
+ var r, s = 0;
30
+ function next() {
31
+ while (r = env.stack.pop()) {
32
+ try {
33
+ if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);
34
+ if (r.dispose) {
35
+ var result = r.dispose.call(r.value);
36
+ if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });
37
+ }
38
+ else s |= 1;
39
+ }
40
+ catch (e) {
41
+ fail(e);
42
+ }
43
+ }
44
+ if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();
45
+ if (env.hasError) throw env.error;
46
+ }
47
+ return next();
48
+ };
49
+ })(typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
50
+ var e = new Error(message);
51
+ return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
52
+ });
1
53
  import { useEffect, useRef, useState } from 'react';
2
54
  import { TemplateManager } from '../lib/templateManager.js';
3
- import { disconnect } from '../utils/databaseConnection.js';
55
+ import { findProjectRoot } from '../utils/findProjectRoot.js';
4
56
  export function useTemplateProcessor(options) {
5
57
  const [result, setResult] = useState({
6
58
  applied: [],
@@ -9,56 +61,47 @@ export function useTemplateProcessor(options) {
9
61
  built: [],
10
62
  });
11
63
  const [isProcessing, setIsProcessing] = useState(true);
12
- const managerRef = useRef();
13
- const processedRef = useRef(false);
64
+ const processed = useRef(false);
14
65
  useEffect(() => {
15
- let mounted = true;
16
- async function doProcess() {
17
- // Prevent duplicate processing
18
- if (processedRef.current)
19
- return;
20
- processedRef.current = true;
66
+ if (processed.current)
67
+ return;
68
+ processed.current = true;
69
+ async function doProcessing() {
21
70
  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 (mounted) {
71
+ const env_1 = { stack: [], error: void 0, hasError: false };
72
+ try {
73
+ const projectRoot = await findProjectRoot();
74
+ const manager = __addDisposableResource(env_1, await TemplateManager.create(projectRoot, { silent: true }), false);
75
+ const result = await manager.processTemplates(options);
29
76
  setResult(result);
30
77
  setIsProcessing(false);
78
+ options.onComplete?.();
79
+ }
80
+ catch (e_1) {
81
+ env_1.error = e_1;
82
+ env_1.hasError = true;
83
+ }
84
+ finally {
85
+ __disposeResources(env_1);
31
86
  }
32
87
  }
33
88
  catch (err) {
34
89
  console.error('Processing error:', err);
35
- if (mounted) {
36
- setResult(prev => ({
37
- ...prev,
38
- errors: [
39
- ...prev.errors,
40
- {
41
- file: 'process',
42
- templateName: 'global',
43
- error: err instanceof Error ? err.message : String(err),
44
- },
45
- ],
46
- }));
47
- setIsProcessing(false);
48
- }
90
+ setResult(prev => ({
91
+ ...prev,
92
+ errors: [
93
+ ...prev.errors,
94
+ {
95
+ file: 'process',
96
+ templateName: 'global',
97
+ error: err instanceof Error ? err.message : String(err),
98
+ },
99
+ ],
100
+ }));
101
+ setIsProcessing(false);
49
102
  }
50
103
  }
51
- void doProcess();
52
- return () => {
53
- mounted = false;
54
- // Only dispose if we're unmounting
55
- if (managerRef.current) {
56
- void disconnect();
57
- managerRef.current[Symbol.dispose]?.();
58
- managerRef.current = undefined;
59
- processedRef.current = false;
60
- }
61
- };
104
+ void doProcessing();
62
105
  }, [options]);
63
106
  return { result, isProcessing };
64
107
  }
@@ -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;AAE5D,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAQ5D,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,UAAU,GAAG,MAAM,EAAmB,CAAC;IAC7C,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAEnC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,OAAO,GAAG,IAAI,CAAC;QAEnB,KAAK,UAAU,SAAS;YACtB,+BAA+B;YAC/B,IAAI,YAAY,CAAC,OAAO;gBAAE,OAAO;YACjC,YAAY,CAAC,OAAO,GAAG,IAAI,CAAC;YAE5B,IAAI,CAAC;gBACH,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;oBACxB,UAAU,CAAC,OAAO,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE;wBAC/D,MAAM,EAAE,IAAI;qBACb,CAAC,CAAC;gBACL,CAAC;gBAED,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;gBAElE,IAAI,OAAO,EAAE,CAAC;oBACZ,SAAS,CAAC,MAAM,CAAC,CAAC;oBAClB,eAAe,CAAC,KAAK,CAAC,CAAC;gBACzB,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC;gBAExC,IAAI,OAAO,EAAE,CAAC;oBACZ,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;wBACjB,GAAG,IAAI;wBACP,MAAM,EAAE;4BACN,GAAG,IAAI,CAAC,MAAM;4BACd;gCACE,IAAI,EAAE,SAAS;gCACf,YAAY,EAAE,QAAQ;gCACtB,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;6BACxD;yBACF;qBACF,CAAC,CAAC,CAAC;oBACJ,eAAe,CAAC,KAAK,CAAC,CAAC;gBACzB,CAAC;YACH,CAAC;QACH,CAAC;QAED,KAAK,SAAS,EAAE,CAAC;QAEjB,OAAO,GAAG,EAAE;YACV,OAAO,GAAG,KAAK,CAAC;YAChB,mCAAmC;YACnC,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;gBACvB,KAAK,UAAU,EAAE,CAAC;gBAClB,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;gBACvC,UAAU,CAAC,OAAO,GAAG,SAAS,CAAC;gBAC/B,YAAY,CAAC,OAAO,GAAG,KAAK,CAAC;YAC/B,CAAC;QACH,CAAC,CAAC;IACJ,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"}
@@ -744,6 +744,7 @@ describe('TemplateManager', () => {
744
744
  changes.push(template.name);
745
745
  });
746
746
  await manager.watch();
747
+ await wait(100);
747
748
  await createTemplateWithFunc(`during-scope`, 'during_scope');
748
749
  await wait(100);
749
750
  }
@@ -1046,7 +1047,9 @@ describe('TemplateManager', () => {
1046
1047
  manager.on('templateError', err => errors.push(err));
1047
1048
  // Create invalid SQL
1048
1049
  await fs.writeFile(templatePath, 'SELECT * FROM nonexistent_table;');
1050
+ await wait(50);
1049
1051
  await manager.processTemplates({ apply: true });
1052
+ await wait(50);
1050
1053
  expect(errors).toHaveLength(1);
1051
1054
  const error = errors[0]?.error;
1052
1055
  expect(typeof error).toBe('string');