@t1mmen/srtd 0.4.3 โ 0.4.5
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 +45 -17
- package/dist/__tests__/apply.test.js +2 -2
- package/dist/__tests__/build.test.js +4 -4
- package/dist/__tests__/build.test.js.map +1 -1
- package/dist/__tests__/promote.test.d.ts +1 -0
- package/dist/__tests__/promote.test.js +9 -0
- package/dist/__tests__/promote.test.js.map +1 -0
- package/dist/__tests__/vitest.setup.js +2 -1
- package/dist/__tests__/vitest.setup.js.map +1 -1
- package/dist/__tests__/watch.test.js +2 -0
- package/dist/__tests__/watch.test.js.map +1 -1
- package/dist/commands/_app.js +0 -8
- package/dist/commands/_app.js.map +1 -1
- package/dist/commands/apply.js +6 -9
- package/dist/commands/apply.js.map +1 -1
- package/dist/commands/build.js +6 -11
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/clear.js +10 -2
- package/dist/commands/clear.js.map +1 -1
- package/dist/commands/index.js +11 -12
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/init.js +7 -2
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/promote.d.ts +8 -0
- package/dist/commands/promote.js +159 -0
- package/dist/commands/promote.js.map +1 -0
- package/dist/commands/register.d.ts +1 -1
- package/dist/commands/register.js +62 -16
- package/dist/commands/register.js.map +1 -1
- package/dist/commands/watch.js +25 -28
- package/dist/commands/watch.js.map +1 -1
- package/dist/components/Branding.js +1 -1
- package/dist/components/Branding.js.map +1 -1
- package/dist/components/ProcessingResults.js +26 -14
- package/dist/components/ProcessingResults.js.map +1 -1
- package/dist/components/Quittable.js +6 -4
- package/dist/components/Quittable.js.map +1 -1
- package/dist/components/StatBadge.d.ts +6 -0
- package/dist/components/StatBadge.js +14 -0
- package/dist/components/StatBadge.js.map +1 -0
- package/dist/components/TimeSince.js +9 -5
- package/dist/components/TimeSince.js.map +1 -1
- package/dist/hooks/useDatabaseConnection.js +2 -1
- package/dist/hooks/useDatabaseConnection.js.map +1 -1
- package/dist/hooks/useFullscreen.d.ts +1 -0
- package/dist/hooks/useFullscreen.js +18 -0
- package/dist/hooks/useFullscreen.js.map +1 -0
- package/dist/hooks/useTemplateProcessor.d.ts +1 -0
- package/dist/hooks/useTemplateProcessor.js +82 -47
- package/dist/hooks/useTemplateProcessor.js.map +1 -1
- package/dist/lib/templateManager.js +41 -26
- package/dist/lib/templateManager.js.map +1 -1
- package/dist/lib/templateManager.test.js +794 -488
- package/dist/lib/templateManager.test.js.map +1 -1
- package/dist/utils/applyMigrations.test.js +4 -1
- package/dist/utils/applyMigrations.test.js.map +1 -1
- package/dist/utils/databaseConnection.js +21 -19
- package/dist/utils/databaseConnection.js.map +1 -1
- package/dist/utils/databaseConnection.test.js +1 -4
- package/dist/utils/databaseConnection.test.js.map +1 -1
- package/dist/utils/logger.js +6 -5
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/registerTemplate.js +1 -2
- package/dist/utils/registerTemplate.js.map +1 -1
- package/package.json +5 -2
package/README.md
CHANGED
|
@@ -4,13 +4,15 @@
|
|
|
4
4
|
|
|
5
5
|
> Live-reloading SQL templates for [Supabase](https://supabase.com) projects. DX supercharged! ๐
|
|
6
6
|
|
|
7
|
-

|
|
7
|
+
[](https://www.npmjs.com/package/@t1mmen/srtd)
|
|
8
|
+
[](https://www.npmjs.com/package/@t1mmen/srtd)
|
|
8
9
|
[](https://opensource.org/licenses/MIT)
|
|
9
10
|
[](https://github.com/t1mmen/srtd/actions/workflows/ci.yml)
|
|
10
11
|
[](https://codecov.io/gh/t1mmen/srtd)
|
|
11
12
|
|
|
12
13
|
|
|
13
|
-
[](./readme-demo.gif)
|
|
15
|
+
|
|
14
16
|
|
|
15
17
|
`srtd` enhances the [Supabase](https://supabase.com) DX by adding live-reloading SQL templates into local db. The single-source-of-truth template โก๏ธ migrations system brings sanity to code reviews, making `git blame` useful.
|
|
16
18
|
|
|
@@ -28,6 +30,8 @@ I spent [nearly two years looking](https://news.ycombinator.com/item?id=37755076
|
|
|
28
30
|
|
|
29
31
|
Say hello to `srtd`.
|
|
30
32
|
|
|
33
|
+
[](./readme-screenshot.png)
|
|
34
|
+
|
|
31
35
|
## Key Features โจ
|
|
32
36
|
|
|
33
37
|
- **Live Reload**: Changes to your SQL templates instantly update your local database
|
|
@@ -62,7 +66,7 @@ npx @t1mmen/srtd
|
|
|
62
66
|
|
|
63
67
|
```bash
|
|
64
68
|
cd your-supabase-project
|
|
65
|
-
srtd init
|
|
69
|
+
npx @t1mmen/srtd init # Creates srtd.config.json, not required
|
|
66
70
|
```
|
|
67
71
|
|
|
68
72
|
### Create Your First Template
|
|
@@ -82,16 +86,20 @@ $$ LANGUAGE plpgsql;
|
|
|
82
86
|
|
|
83
87
|
1. Start watch mode:
|
|
84
88
|
```bash
|
|
85
|
-
srtd watch # Changes auto-apply to local database
|
|
89
|
+
npx @t1mmen/srtd watch # Changes auto-apply to local database
|
|
86
90
|
```
|
|
87
91
|
|
|
88
92
|
2. When ready to deploy:
|
|
89
93
|
```bash
|
|
90
|
-
srtd build
|
|
91
|
-
supabase migration up
|
|
94
|
+
npx @t1mmen/srtd build # Creates timestamped migration file
|
|
95
|
+
supabase migration up # Apply using Supabase CLI
|
|
92
96
|
```
|
|
93
97
|
|
|
94
98
|
|
|
99
|
+
> [!INFO]
|
|
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
|
+
|
|
102
|
+
|
|
95
103
|
## The Power of Templates ๐ช
|
|
96
104
|
|
|
97
105
|
Without templates, the smallest change to a function would show up as a complete rewrite in your version control system. With templates, the diff is clear and concise.
|
|
@@ -183,13 +191,12 @@ Use regular [Supabase](https://supabase.com) migrations for these cases.
|
|
|
183
191
|
|
|
184
192
|
### Interactive Mode
|
|
185
193
|
|
|
186
|
-
Running `srtd` without arguments opens an interactive menu:
|
|
187
|
-
|
|
188
|
-
### CLI Mode
|
|
194
|
+
Running `npx @t1mmen/srtd` without arguments opens an interactive menu:
|
|
189
195
|
|
|
190
196
|
- ๐๏ธ `srtd build [--force]` - Generate migrations from templates
|
|
191
197
|
- โถ๏ธ `srtd apply [--force]` - Apply templates directly to local database
|
|
192
|
-
- โ๏ธ `srtd register [file.sql]` - Mark templates as already built
|
|
198
|
+
- โ๏ธ `srtd register [file.sql...]` - Mark templates as already built
|
|
199
|
+
- ๐ `srtd promote - [file.sql ...]` - Promote WIP template to buildable templates
|
|
193
200
|
- ๐ `srtd watch` - Watch and auto-apply changes
|
|
194
201
|
- ๐งน `srtd clean` - Remove all logs and reset config
|
|
195
202
|
|
|
@@ -238,6 +245,11 @@ Add `.wip.sql` extension to prevent migration generation:
|
|
|
238
245
|
my_function.wip.sql # Only applied locally, never built
|
|
239
246
|
```
|
|
240
247
|
|
|
248
|
+
Make a WIP templates buildable my renaming it, or using the `promote` command:
|
|
249
|
+
```bash
|
|
250
|
+
npx @t1mmen/srtd promote my_function.wip.sql
|
|
251
|
+
```
|
|
252
|
+
|
|
241
253
|
### Template State Management
|
|
242
254
|
|
|
243
255
|
Two state tracking files:
|
|
@@ -246,13 +258,14 @@ Two state tracking files:
|
|
|
246
258
|
|
|
247
259
|
### Register Existing Objects
|
|
248
260
|
|
|
249
|
-
|
|
261
|
+
Registering a template is useful when you're creating templates for what is already in your database. This avoids generating migrations on `build` (until they're changed)
|
|
262
|
+
|
|
250
263
|
```bash
|
|
251
264
|
# Register specific template
|
|
252
|
-
srtd register my_function.sql
|
|
265
|
+
npx @t1mmen/srtd register my_function.sql another_fn.sql
|
|
253
266
|
|
|
254
267
|
# Interactive multi-select UI
|
|
255
|
-
srtd register
|
|
268
|
+
npx @t1mmen/srtd register
|
|
256
269
|
```
|
|
257
270
|
|
|
258
271
|
## Development ๐ ๏ธ
|
|
@@ -266,13 +279,15 @@ cd srtd
|
|
|
266
279
|
npm install
|
|
267
280
|
|
|
268
281
|
# Development
|
|
269
|
-
npm run dev
|
|
270
|
-
npm test
|
|
271
|
-
npm start
|
|
282
|
+
npm run dev # Watch mode
|
|
283
|
+
npm test # Run tests
|
|
284
|
+
npm start # Run CLI
|
|
285
|
+
npm start:link # Build, npm link, and run CLI
|
|
272
286
|
|
|
273
287
|
# Quality Checks
|
|
274
|
-
npm run typecheck
|
|
288
|
+
npm run typecheck # Type checking
|
|
275
289
|
npm run lint # Lint and fix
|
|
290
|
+
npm run format # Format code
|
|
276
291
|
npm run test:coverage # Test coverage
|
|
277
292
|
```
|
|
278
293
|
|
|
@@ -294,6 +309,19 @@ While feature-complete for our needs, we welcome:
|
|
|
294
309
|
|
|
295
310
|
Note: New features are evaluated based on alignment with project scope.
|
|
296
311
|
|
|
312
|
+
## Built With ๐ ๏ธ
|
|
313
|
+
|
|
314
|
+
### Terminal UI
|
|
315
|
+
- [Ink](https://github.com/vadimdemedes/ink) - React for CLI interfaces
|
|
316
|
+
- [Pastel](https://github.com/vadimdemedes/pastel) - Next-like framework for Ink
|
|
317
|
+
- [Figures](https://github.com/sindresorhus/figures) - Unicode symbols
|
|
318
|
+
- [Chokidar](https://github.com/paulmillr/chokidar) - File watcher
|
|
319
|
+
- [update-notifier](https://github.com/sindresorhus/update-notifier) - Version checks
|
|
320
|
+
- [Zod](https://zod.dev/) - Schema validation
|
|
321
|
+
- [Conf](https://github.com/sindresorhus/conf) - Config management
|
|
322
|
+
- [vhs](https://github.com/charmbracelet/vhs) - Video recording
|
|
323
|
+
|
|
324
|
+
|
|
297
325
|
## License
|
|
298
326
|
|
|
299
327
|
MIT License - see [LICENSE](LICENSE) file.
|
|
@@ -59,11 +59,11 @@ describe('Apply Command', () => {
|
|
|
59
59
|
});
|
|
60
60
|
test('shows progress and success', async () => {
|
|
61
61
|
const { lastFrame } = render(React.createElement(Apply, { options: { force: false } }));
|
|
62
|
-
expect(lastFrame()).toMatch(
|
|
62
|
+
expect(lastFrame()).toMatch(/โถ test\.sql/);
|
|
63
63
|
});
|
|
64
64
|
test('handles force flag', async () => {
|
|
65
65
|
const { lastFrame } = render(React.createElement(Apply, { options: { force: true } }));
|
|
66
|
-
expect(lastFrame()).toMatch(
|
|
66
|
+
expect(lastFrame()).toMatch(/โถ test\.sql/);
|
|
67
67
|
});
|
|
68
68
|
});
|
|
69
69
|
//# sourceMappingURL=apply.test.js.map
|
|
@@ -51,17 +51,17 @@ describe('Build Command', () => {
|
|
|
51
51
|
});
|
|
52
52
|
test('shows build progress and success', async () => {
|
|
53
53
|
const { lastFrame } = render(React.createElement(Build, { options: { force: false } }));
|
|
54
|
-
expect(lastFrame()).toMatch(
|
|
54
|
+
expect(lastFrame()).toMatch(/Built:\s*\n\s*โ test\.sql/);
|
|
55
55
|
});
|
|
56
56
|
test('handles force flag', async () => {
|
|
57
57
|
const { lastFrame } = render(React.createElement(Build, { options: { force: true } }));
|
|
58
|
-
expect(lastFrame()).toMatch(
|
|
58
|
+
expect(lastFrame()).toMatch(/Built:\s*\n\s*โ test\.sql/);
|
|
59
59
|
});
|
|
60
60
|
test('handles build and apply together', async () => {
|
|
61
61
|
const { lastFrame } = render(React.createElement(Build, { options: { force: false, apply: true } }));
|
|
62
62
|
// Use more precise matching that accounts for newlines
|
|
63
|
-
expect(lastFrame()).toMatch(/Built:\s*\n\s
|
|
64
|
-
expect(lastFrame()).toMatch(/Applied:\s*\n\s
|
|
63
|
+
expect(lastFrame()).toMatch(/Built:\s*\n\s*โ test\.sql/);
|
|
64
|
+
expect(lastFrame()).toMatch(/Applied:\s*\n\s*โถ test\.sql/);
|
|
65
65
|
});
|
|
66
66
|
});
|
|
67
67
|
//# sourceMappingURL=build.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.test.js","sourceRoot":"","sources":["../../src/__tests__/build.test.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"build.test.js","sourceRoot":"","sources":["../../src/__tests__/build.test.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { render } from 'ink-testing-library';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { expect, it } from 'vitest';
|
|
4
|
+
import Promote from '../commands/promote.js';
|
|
5
|
+
it('renders promote command', () => {
|
|
6
|
+
const { lastFrame } = render(React.createElement(Promote, { args: undefined }));
|
|
7
|
+
expect(lastFrame()).toContain('Promote WIP template');
|
|
8
|
+
});
|
|
9
|
+
//# sourceMappingURL=promote.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"promote.test.js","sourceRoot":"","sources":["../../src/__tests__/promote.test.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,OAAO,MAAM,wBAAwB,CAAC;AAE7C,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACjC,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,oBAAC,OAAO,IAAC,IAAI,EAAE,SAAS,GAAI,CAAC,CAAC;IAC3D,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;AACxD,CAAC,CAAC,CAAC"}
|
|
@@ -29,6 +29,7 @@ vi.mock('../utils/logger', () => ({
|
|
|
29
29
|
}));
|
|
30
30
|
beforeAll(async () => {
|
|
31
31
|
try {
|
|
32
|
+
await fs.rm(TEST_ROOT, { recursive: true, force: true });
|
|
32
33
|
await fs.mkdir(TEST_ROOT, { recursive: true });
|
|
33
34
|
}
|
|
34
35
|
catch (error) {
|
|
@@ -64,8 +65,8 @@ afterAll(async () => {
|
|
|
64
65
|
}
|
|
65
66
|
finally {
|
|
66
67
|
client.release();
|
|
68
|
+
void disconnect();
|
|
67
69
|
}
|
|
68
|
-
disconnect();
|
|
69
70
|
});
|
|
70
71
|
vi.mock('../utils/config', async (importOriginal) => {
|
|
71
72
|
const actual = (await importOriginal());
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vitest.setup.js","sourceRoot":"","sources":["../../src/__tests__/vitest.setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAErE,MAAM,CAAC,MAAM,cAAc,GAAG,wBAAwB,CAAC;AACvD,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,aAAa,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AAEnE,EAAE,CAAC,IAAI,CAAC,iBAAiB,EAAE,GAAG,EAAE,CAAC,CAAC;IAChC,MAAM,EAAE;QACN,IAAI,EAAE,GAAG,EAAE;YACT,WAAW;QACb,CAAC;QACD,OAAO,EAAE,GAAG,EAAE;YACZ,WAAW;QACb,CAAC;QACD,IAAI,EAAE,GAAG,EAAE;YACT,WAAW;QACb,CAAC;QACD,KAAK,EAAE,GAAG,EAAE;YACV,WAAW;QACb,CAAC;QACD,IAAI,EAAE,GAAG,EAAE;YACT,WAAW;QACb,CAAC;QACD,KAAK,EAAE,GAAG,EAAE;YACV,WAAW;QACb,CAAC;KACF;CACF,CAAC,CAAC,CAAC;AAEJ,SAAS,CAAC,KAAK,IAAI,EAAE;IACnB,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACjD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,EAAE,kBAAkB,CAAC,CAAC;IACxE,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,KAAK,IAAI,EAAE;IAClB,MAAM,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAEzD,uDAAuD;IACvD,MAAM,MAAM,GAAG,MAAM,OAAO,EAAE,CAAC;IAC/B,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC5B,MAAM,MAAM,CAAC,KAAK,CAAC;;;;;;;;8BAQO,cAAc;;;;;;KAMvC,CAAC,CAAC;QACH,MAAM,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC/B,MAAM,CAAC,CAAC;IACV,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,OAAO,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"vitest.setup.js","sourceRoot":"","sources":["../../src/__tests__/vitest.setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@ import { render } from 'ink-testing-library';
|
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import { beforeEach, describe, expect, test, vi } from 'vitest';
|
|
4
4
|
import Watch from '../commands/watch.js';
|
|
5
|
+
import { connect } from '../utils/databaseConnection.js';
|
|
5
6
|
vi.mock('ink', async (importOriginal) => {
|
|
6
7
|
const actual = (await importOriginal());
|
|
7
8
|
return {
|
|
@@ -15,6 +16,7 @@ describe('Watch Command', () => {
|
|
|
15
16
|
vi.clearAllMocks();
|
|
16
17
|
});
|
|
17
18
|
test('renders initial state with no templates', async () => {
|
|
19
|
+
await connect();
|
|
18
20
|
const { lastFrame } = render(React.createElement(Watch, null));
|
|
19
21
|
await wait(200); // Allow time for UI to render and DB to initialize
|
|
20
22
|
expect(lastFrame()).toContain('Watch Mode');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watch.test.js","sourceRoot":"","sources":["../../src/__tests__/watch.test.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAChE,OAAO,KAAK,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"watch.test.js","sourceRoot":"","sources":["../../src/__tests__/watch.test.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAChE,OAAO,KAAK,MAAM,sBAAsB,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAEzD,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAC,cAAc,EAAC,EAAE;IACpC,MAAM,MAAM,GAAG,CAAC,MAAM,cAAc,EAAE,CAAyB,CAAC;IAChE,OAAO;QACL,GAAG,MAAM;QACT,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;KAClC,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,MAAM,IAAI,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAE7E,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,aAAa,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,OAAO,EAAE,CAAC;QAChB,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,oBAAC,KAAK,OAAG,CAAC,CAAC;QACxC,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,mDAAmD;QAEpE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QAC5C,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/dist/commands/_app.js
CHANGED
|
@@ -18,12 +18,4 @@ export default function App({ Component, commandProps }) {
|
|
|
18
18
|
React.createElement(Component, { ...commandProps }),
|
|
19
19
|
React.createElement(Debug, null))));
|
|
20
20
|
}
|
|
21
|
-
// Fullscreen behavior
|
|
22
|
-
const enterAltScreenCommand = '\x1b[?1049h';
|
|
23
|
-
const leaveAltScreenCommand = '\x1b[?1049l';
|
|
24
|
-
process.stdout.write(enterAltScreenCommand);
|
|
25
|
-
const cleanup = () => {
|
|
26
|
-
process.stdout.write(leaveAltScreenCommand);
|
|
27
|
-
};
|
|
28
|
-
process.on('exit', cleanup);
|
|
29
21
|
//# sourceMappingURL=_app.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_app.js","sourceRoot":"","sources":["../../src/commands/_app.tsx"],"names":[],"mappings":"AAAA,wBAAwB;AACxB,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAExC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,MAAM,wBAAwB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAE1E,MAAM,CAAC,OAAO,UAAU,GAAG,CAAC,EAAE,SAAS,EAAE,YAAY,EAAY;IAC/D,MAAM,EAAE,KAAK,EAAE,GAAG,qBAAqB,EAAE,CAAC;IAE1C,OAAO,CACL,oBAAC,aAAa,IAAC,KAAK,EAAE,WAAW;QAC/B,oBAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,OAAO,EAAE,CAAC;YACnC,CAAC,CAAC,KAAK,IAAI,CACV,oBAAC,MAAM,IAAC,KAAK,EAAE,CAAC,KAAK,CAAC,IACnB,KAAK,CAAC,EAAE,CAAC,CACR,oBAAC,GAAG,IAAC,GAAG,EAAE,KAAK;gBACb,oBAAC,KAAK,IAAC,OAAO,EAAC,OAAO;oBACpB,oBAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAE,WAAW;;wBACpB,GAAG,CACL;oBACN,KAAK,CACA,CACJ,CACP,CACM,CACV;YACD,oBAAC,SAAS,OAAK,YAAY,GAAI;YAC/B,oBAAC,KAAK,OAAG,CACL,CACQ,CACjB,CAAC;AACJ,CAAC
|
|
1
|
+
{"version":3,"file":"_app.js","sourceRoot":"","sources":["../../src/commands/_app.tsx"],"names":[],"mappings":"AAAA,wBAAwB;AACxB,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAExC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,MAAM,wBAAwB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAE1E,MAAM,CAAC,OAAO,UAAU,GAAG,CAAC,EAAE,SAAS,EAAE,YAAY,EAAY;IAC/D,MAAM,EAAE,KAAK,EAAE,GAAG,qBAAqB,EAAE,CAAC;IAE1C,OAAO,CACL,oBAAC,aAAa,IAAC,KAAK,EAAE,WAAW;QAC/B,oBAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,OAAO,EAAE,CAAC;YACnC,CAAC,CAAC,KAAK,IAAI,CACV,oBAAC,MAAM,IAAC,KAAK,EAAE,CAAC,KAAK,CAAC,IACnB,KAAK,CAAC,EAAE,CAAC,CACR,oBAAC,GAAG,IAAC,GAAG,EAAE,KAAK;gBACb,oBAAC,KAAK,IAAC,OAAO,EAAC,OAAO;oBACpB,oBAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAE,WAAW;;wBACpB,GAAG,CACL;oBACN,KAAK,CACA,CACJ,CACP,CACM,CACV;YACD,oBAAC,SAAS,OAAK,YAAY,GAAI;YAC/B,oBAAC,KAAK,OAAG,CACL,CACQ,CACjB,CAAC;AACJ,CAAC"}
|
package/dist/commands/apply.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// src/commands/apply.tsx
|
|
2
2
|
import { Spinner } from '@inkjs/ui';
|
|
3
|
-
import { Box,
|
|
3
|
+
import { Box, useApp } from 'ink';
|
|
4
4
|
import { option } from 'pastel';
|
|
5
5
|
import React from 'react';
|
|
6
6
|
import zod from 'zod';
|
|
@@ -15,16 +15,13 @@ export const options = zod.object({
|
|
|
15
15
|
});
|
|
16
16
|
export default function Apply({ options }) {
|
|
17
17
|
const { exit } = useApp();
|
|
18
|
-
const { result, isProcessing } = useTemplateProcessor({
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
}
|
|
18
|
+
const { result, isProcessing } = useTemplateProcessor({
|
|
19
|
+
force: options.force,
|
|
20
|
+
apply: true,
|
|
21
|
+
onComplete: () => exit(), // Move exit here
|
|
23
22
|
});
|
|
24
23
|
return (React.createElement(Box, { flexDirection: "column", gap: 1 },
|
|
25
24
|
React.createElement(Branding, { subtitle: "\u25B6\uFE0F Apply migrations" }),
|
|
26
|
-
isProcessing ? (React.createElement(Spinner, { label: "Applying templates..." })) : (React.createElement(
|
|
27
|
-
React.createElement(ProcessingResults, { result: result, showApply: true }),
|
|
28
|
-
React.createElement(Text, { dimColor: true }, "Press any key to exit")))));
|
|
25
|
+
isProcessing ? (React.createElement(Spinner, { label: "Applying templates..." })) : (React.createElement(ProcessingResults, { result: result, showApply: true }))));
|
|
29
26
|
}
|
|
30
27
|
//# sourceMappingURL=apply.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apply.js","sourceRoot":"","sources":["../../src/commands/apply.tsx"],"names":[],"mappings":"AAAA,yBAAyB;AACzB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,GAAG,EAAE,
|
|
1
|
+
{"version":3,"file":"apply.js","sourceRoot":"","sources":["../../src/commands/apply.tsx"],"names":[],"mappings":"AAAA,yBAAyB;AACzB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,QAAQ,MAAM,2BAA2B,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAExE,MAAM,CAAC,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC;IAChC,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,QAAQ,CAC3B,MAAM,CAAC;QACL,WAAW,EAAE,uDAAuD;QACpE,KAAK,EAAE,GAAG;KACX,CAAC,CACH;CACF,CAAC,CAAC;AAMH,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,EAAE,OAAO,EAAS;IAC9C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC;IAC1B,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,oBAAoB,CAAC;QACpD,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,KAAK,EAAE,IAAI;QACX,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,iBAAiB;KAC5C,CAAC,CAAC;IAEH,OAAO,CACL,oBAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,GAAG,EAAE,CAAC;QAChC,oBAAC,QAAQ,IAAC,QAAQ,EAAC,gCAAsB,GAAG;QAC3C,YAAY,CAAC,CAAC,CAAC,CACd,oBAAC,OAAO,IAAC,KAAK,EAAC,uBAAuB,GAAG,CAC1C,CAAC,CAAC,CAAC,CACF,oBAAC,iBAAiB,IAAC,MAAM,EAAE,MAAM,EAAE,SAAS,SAAG,CAChD,CACG,CACP,CAAC;AACJ,CAAC"}
|
package/dist/commands/build.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// commands/build.tsx
|
|
2
2
|
import { Spinner } from '@inkjs/ui';
|
|
3
|
-
import { Box,
|
|
3
|
+
import { Box, useApp } from 'ink';
|
|
4
4
|
import { option } from 'pastel';
|
|
5
5
|
import React from 'react';
|
|
6
6
|
import zod from 'zod';
|
|
@@ -24,18 +24,13 @@ export default function Build({ options }) {
|
|
|
24
24
|
const { exit } = useApp();
|
|
25
25
|
const { result, isProcessing } = useTemplateProcessor({
|
|
26
26
|
force: options.force,
|
|
27
|
-
generateFiles: true,
|
|
28
27
|
apply: options.apply,
|
|
28
|
+
generateFiles: true,
|
|
29
|
+
onComplete: () => exit(), // Move exit here
|
|
29
30
|
});
|
|
30
|
-
|
|
31
|
-
if (!isProcessing) {
|
|
32
|
-
exit();
|
|
33
|
-
}
|
|
34
|
-
});
|
|
31
|
+
const forced = options.force ? '(forced)' : '';
|
|
35
32
|
return (React.createElement(Box, { flexDirection: "column", gap: 1 },
|
|
36
|
-
React.createElement(Branding, { subtitle:
|
|
37
|
-
isProcessing ? (React.createElement(Spinner, { label:
|
|
38
|
-
React.createElement(ProcessingResults, { result: result, showBuild: true, showApply: !!option.apply }),
|
|
39
|
-
React.createElement(Text, { dimColor: true }, "Press any key to exit")))));
|
|
33
|
+
React.createElement(Branding, { subtitle: `๐๏ธ Build migrations ${forced}` }),
|
|
34
|
+
isProcessing ? (React.createElement(Spinner, { label: `Building templates...` })) : (React.createElement(ProcessingResults, { result: result, showBuild: true, showApply: !!option.apply }))));
|
|
40
35
|
}
|
|
41
36
|
//# sourceMappingURL=build.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.tsx"],"names":[],"mappings":"AAAA,qBAAqB;AACrB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,GAAG,EAAE,
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.tsx"],"names":[],"mappings":"AAAA,qBAAqB;AACrB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,QAAQ,MAAM,2BAA2B,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAExE,MAAM,CAAC,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC;IAChC,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,QAAQ,CAC3B,MAAM,CAAC;QACL,WAAW,EAAE,0DAA0D;QACvE,KAAK,EAAE,GAAG;KACX,CAAC,CACH;IACD,KAAK,EAAE,GAAG;SACP,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CACP,MAAM,CAAC;QACL,WAAW,EAAE,2BAA2B;QACxC,KAAK,EAAE,GAAG;KACX,CAAC,CACH;CACJ,CAAC,CAAC;AAMH,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,EAAE,OAAO,EAAS;IAC9C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC;IAC1B,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,oBAAoB,CAAC;QACpD,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,aAAa,EAAE,IAAI;QACnB,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,iBAAiB;KAC5C,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;IAE/C,OAAO,CACL,oBAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,GAAG,EAAE,CAAC;QAChC,oBAAC,QAAQ,IAAC,QAAQ,EAAE,yBAAyB,MAAM,EAAE,GAAI;QACxD,YAAY,CAAC,CAAC,CAAC,CACd,oBAAC,OAAO,IAAC,KAAK,EAAE,uBAAuB,GAAI,CAC5C,CAAC,CAAC,CAAC,CACF,oBAAC,iBAAiB,IAAC,MAAM,EAAE,MAAM,EAAE,SAAS,QAAC,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,GAAI,CAC3E,CACG,CACP,CAAC;AACJ,CAAC"}
|
package/dist/commands/clear.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { Select, Spinner } from '@inkjs/ui';
|
|
2
|
-
import
|
|
2
|
+
import figures from 'figures';
|
|
3
|
+
import { Box, Text, useApp } from 'ink';
|
|
3
4
|
import React from 'react';
|
|
4
5
|
import Branding from '../components/Branding.js';
|
|
5
6
|
import Quittable from '../components/Quittable.js';
|
|
7
|
+
import { COLOR_SUCCESS } from '../components/customTheme.js';
|
|
6
8
|
import { clearBuildLogs, resetConfig } from '../utils/config.js';
|
|
7
9
|
const clearOptions = [
|
|
8
10
|
{ label: 'Clear local build logs', value: 'local' },
|
|
@@ -12,6 +14,7 @@ const clearOptions = [
|
|
|
12
14
|
export default function Clear() {
|
|
13
15
|
const { exit } = useApp();
|
|
14
16
|
const [isResetting, setIsResetting] = React.useState(false);
|
|
17
|
+
const [isDone, setIsDone] = React.useState(false);
|
|
15
18
|
const handleSelect = async (value) => {
|
|
16
19
|
try {
|
|
17
20
|
setIsResetting(true);
|
|
@@ -29,6 +32,8 @@ export default function Clear() {
|
|
|
29
32
|
default:
|
|
30
33
|
throw new Error('Invalid option');
|
|
31
34
|
}
|
|
35
|
+
setIsDone(true);
|
|
36
|
+
setIsResetting(false);
|
|
32
37
|
exit();
|
|
33
38
|
}
|
|
34
39
|
catch (err) {
|
|
@@ -38,7 +43,10 @@ export default function Clear() {
|
|
|
38
43
|
return (React.createElement(React.Fragment, null,
|
|
39
44
|
React.createElement(Branding, { subtitle: "\uD83E\uDDF9 Maintenance" }),
|
|
40
45
|
React.createElement(Select, { options: clearOptions, onChange: handleSelect }),
|
|
41
|
-
|
|
46
|
+
isDone ? (React.createElement(Box, { marginY: 1 },
|
|
47
|
+
React.createElement(Text, { color: COLOR_SUCCESS },
|
|
48
|
+
figures.tick,
|
|
49
|
+
" Reset complete. Exiting"))) : isResetting ? (React.createElement(Box, { marginY: 1 },
|
|
42
50
|
React.createElement(Spinner, { label: "Resetting..." }))) : (React.createElement(Quittable, null))));
|
|
43
51
|
}
|
|
44
52
|
//# sourceMappingURL=clear.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clear.js","sourceRoot":"","sources":["../../src/commands/clear.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"clear.js","sourceRoot":"","sources":["../../src/commands/clear.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AACxC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,QAAQ,MAAM,2BAA2B,CAAC;AACjD,OAAO,SAAS,MAAM,4BAA4B,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjE,MAAM,YAAY,GAAG;IACnB,EAAE,KAAK,EAAE,wBAAwB,EAAE,KAAK,EAAE,OAAO,EAAE;IACnD,EAAE,KAAK,EAAE,yBAAyB,EAAE,KAAK,EAAE,QAAQ,EAAE;IACrD,EAAE,KAAK,EAAE,2CAA2C,EAAE,KAAK,EAAE,YAAY,EAAE;CAC5E,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,KAAK;IAC3B,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC;IAC1B,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5D,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAElD,MAAM,YAAY,GAAG,KAAK,EAAE,KAAa,EAAE,EAAE;QAC3C,IAAI,CAAC;YACH,cAAc,CAAC,IAAI,CAAC,CAAC;YACrB,QAAQ,KAAK,EAAE,CAAC;gBACd,KAAK,OAAO;oBACV,MAAM,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC;oBAC7C,MAAM;gBACR,KAAK,QAAQ;oBACX,MAAM,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC;oBAC9C,MAAM;gBACR,KAAK,YAAY;oBACf,MAAM,WAAW,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;oBACjC,MAAM,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;oBAC5C,MAAM;gBACR;oBACE,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;YACtC,CAAC;YACD,SAAS,CAAC,IAAI,CAAC,CAAC;YAChB,cAAc,CAAC,KAAK,CAAC,CAAC;YACtB,IAAI,EAAE,CAAC;QACT,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC;QACzE,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,CACL;QACE,oBAAC,QAAQ,IAAC,QAAQ,EAAC,0BAAgB,GAAG;QACtC,oBAAC,MAAM,IAAC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,GAAI;QACxD,MAAM,CAAC,CAAC,CAAC,CACR,oBAAC,GAAG,IAAC,OAAO,EAAE,CAAC;YACb,oBAAC,IAAI,IAAC,KAAK,EAAE,aAAa;gBAAG,OAAO,CAAC,IAAI;2CAAgC,CACrE,CACP,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAChB,oBAAC,GAAG,IAAC,OAAO,EAAE,CAAC;YACb,oBAAC,OAAO,IAAC,KAAK,EAAC,cAAc,GAAG,CAC5B,CACP,CAAC,CAAC,CAAC,CACF,oBAAC,SAAS,OAAG,CACd,CACA,CACJ,CAAC;AACJ,CAAC"}
|
package/dist/commands/index.js
CHANGED
|
@@ -1,18 +1,16 @@
|
|
|
1
1
|
// commands/index.tsx
|
|
2
|
-
import { Select
|
|
3
|
-
import { Box
|
|
2
|
+
import { Select } from '@inkjs/ui';
|
|
3
|
+
import { Box } from 'ink';
|
|
4
4
|
import React from 'react';
|
|
5
5
|
import Branding from '../components/Branding.js';
|
|
6
6
|
import Quittable from '../components/Quittable.js';
|
|
7
|
-
import { COLOR_ERROR } from '../components/customTheme.js';
|
|
8
|
-
import { useDatabaseConnection } from '../hooks/useDatabaseConnection.js';
|
|
9
7
|
import Apply from './apply.js';
|
|
10
8
|
import Build from './build.js';
|
|
11
9
|
import Clear from './clear.js';
|
|
10
|
+
import Promote from './promote.js';
|
|
12
11
|
import Register from './register.js';
|
|
13
12
|
import Watch from './watch.js';
|
|
14
13
|
export default function UI() {
|
|
15
|
-
const { error, isChecking, isConnected } = useDatabaseConnection();
|
|
16
14
|
const [selectedCommand, setSelectedCommand] = React.useState(null);
|
|
17
15
|
const handleOnChange = async (value) => {
|
|
18
16
|
setSelectedCommand(value);
|
|
@@ -32,22 +30,23 @@ export default function UI() {
|
|
|
32
30
|
if (selectedCommand === 'clear') {
|
|
33
31
|
return React.createElement(Clear, null);
|
|
34
32
|
}
|
|
33
|
+
if (selectedCommand === 'promote') {
|
|
34
|
+
return React.createElement(Promote, null);
|
|
35
|
+
}
|
|
35
36
|
const menuItems = [
|
|
36
37
|
{
|
|
37
|
-
label: '๐
|
|
38
|
+
label: '๐ watch - Watch for changes, apply directly to db',
|
|
38
39
|
value: 'watch',
|
|
39
40
|
},
|
|
40
41
|
{ label: 'โถ๏ธ apply - Apply templates directly to db', value: 'apply' },
|
|
41
42
|
{ label: '๐๏ธ build - Build templates as Supabase migrations', value: 'build' },
|
|
42
43
|
{ label: 'โ๏ธ register - Register templates as already built', value: 'register' },
|
|
43
|
-
{ label: '
|
|
44
|
+
{ label: '๐ promote - Promote WIP template to buildable templates', value: 'promote' },
|
|
45
|
+
{ label: '๐งน maintenance - Clear build logs and reset config', value: 'clear' },
|
|
44
46
|
];
|
|
45
47
|
return (React.createElement(Box, { flexDirection: "column" },
|
|
46
48
|
React.createElement(Branding, null),
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
React.createElement(Text, null, "Check your database connection and try again."))) : (React.createElement(Select, { options: menuItems, isDisabled: !isConnected, onChange: handleOnChange })),
|
|
50
|
-
isChecking ? (React.createElement(Box, { marginTop: 1 },
|
|
51
|
-
React.createElement(Spinner, { label: "Checking database connection..." }))) : (React.createElement(Quittable, null))));
|
|
49
|
+
React.createElement(Select, { visibleOptionCount: 10, options: menuItems, onChange: handleOnChange }),
|
|
50
|
+
React.createElement(Quittable, null)));
|
|
52
51
|
}
|
|
53
52
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.tsx"],"names":[],"mappings":"AAAA,qBAAqB;AACrB,OAAO,EAAE,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.tsx"],"names":[],"mappings":"AAAA,qBAAqB;AACrB,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,QAAQ,MAAM,2BAA2B,CAAC;AACjD,OAAO,SAAS,MAAM,4BAA4B,CAAC;AACnD,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,QAAQ,MAAM,eAAe,CAAC;AACrC,OAAO,KAAK,MAAM,YAAY,CAAC;AAE/B,MAAM,CAAC,OAAO,UAAU,EAAE;IACxB,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAElF,MAAM,cAAc,GAAG,KAAK,EAAE,KAAa,EAAE,EAAE;QAC7C,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC,CAAC;IAEF,IAAI,eAAe,KAAK,UAAU,EAAE,CAAC;QACnC,OAAO,oBAAC,QAAQ,IAAC,IAAI,EAAE,SAAS,GAAI,CAAC;IACvC,CAAC;IAED,IAAI,eAAe,KAAK,OAAO,EAAE,CAAC;QAChC,OAAO,oBAAC,KAAK,IAAC,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAI,CAAC;IAC9C,CAAC;IAED,IAAI,eAAe,KAAK,OAAO,EAAE,CAAC;QAChC,OAAO,oBAAC,KAAK,IAAC,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAI,CAAC;IAC9C,CAAC;IAED,IAAI,eAAe,KAAK,OAAO,EAAE,CAAC;QAChC,OAAO,oBAAC,KAAK,OAAG,CAAC;IACnB,CAAC;IAED,IAAI,eAAe,KAAK,OAAO,EAAE,CAAC;QAChC,OAAO,oBAAC,KAAK,OAAG,CAAC;IACnB,CAAC;IAED,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;QAClC,OAAO,oBAAC,OAAO,OAAG,CAAC;IACrB,CAAC;IAED,MAAM,SAAS,GAAG;QAChB;YACE,KAAK,EAAE,qDAAqD;YAC5D,KAAK,EAAE,OAAO;SACf;QACD,EAAE,KAAK,EAAE,4CAA4C,EAAE,KAAK,EAAE,OAAO,EAAE;QACvE,EAAE,KAAK,EAAE,qDAAqD,EAAE,KAAK,EAAE,OAAO,EAAE;QAChF,EAAE,KAAK,EAAE,oDAAoD,EAAE,KAAK,EAAE,UAAU,EAAE;QAClF,EAAE,KAAK,EAAE,2DAA2D,EAAE,KAAK,EAAE,SAAS,EAAE;QACxF,EAAE,KAAK,EAAE,qDAAqD,EAAE,KAAK,EAAE,OAAO,EAAE;KACjF,CAAC;IAEF,OAAO,CACL,oBAAC,GAAG,IAAC,aAAa,EAAC,QAAQ;QACzB,oBAAC,QAAQ,OAAG;QACZ,oBAAC,MAAM,IAAC,kBAAkB,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,GAAI;QAChF,oBAAC,SAAS,OAAG,CACT,CACP,CAAC;AACJ,CAAC"}
|
package/dist/commands/init.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import fs from 'node:fs/promises';
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import chalk from 'chalk';
|
|
4
|
+
import { useApp } from 'ink';
|
|
4
5
|
import React from 'react';
|
|
5
6
|
import { CONFIG_FILE } from '../constants.js';
|
|
6
7
|
import { getConfig, saveConfig } from '../utils/config.js';
|
|
@@ -9,6 +10,7 @@ import { ensureDirectories } from '../utils/ensureDirectories.js';
|
|
|
9
10
|
import { fileExists } from '../utils/fileExists.js';
|
|
10
11
|
import { logger } from '../utils/logger.js';
|
|
11
12
|
export default function Init() {
|
|
13
|
+
const { exit } = useApp();
|
|
12
14
|
React.useEffect(() => {
|
|
13
15
|
async function doInit() {
|
|
14
16
|
console.log(`${chalk.green('\nโจ Initializing srtd\n')}`);
|
|
@@ -67,14 +69,17 @@ export default function Init() {
|
|
|
67
69
|
else {
|
|
68
70
|
logger.skip(`.gitignore already contains ${ignoreEntry}`);
|
|
69
71
|
}
|
|
72
|
+
exit();
|
|
70
73
|
}
|
|
71
74
|
catch (error) {
|
|
72
75
|
logger.error(`Failed to initialize: ${JSON.stringify(error)}`);
|
|
73
|
-
|
|
76
|
+
if (error instanceof Error) {
|
|
77
|
+
exit(error);
|
|
78
|
+
}
|
|
74
79
|
}
|
|
75
80
|
}
|
|
76
81
|
doInit();
|
|
77
|
-
}, []);
|
|
82
|
+
}, [exit]);
|
|
78
83
|
return null;
|
|
79
84
|
}
|
|
80
85
|
//# sourceMappingURL=init.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import zod from 'zod';
|
|
3
|
+
export declare const args: zod.ZodOptional<zod.ZodArray<zod.ZodString, "many">>;
|
|
4
|
+
interface Props {
|
|
5
|
+
args?: zod.infer<typeof args>;
|
|
6
|
+
}
|
|
7
|
+
export default function Promote({ args: templateArgs }: Props): React.JSX.Element;
|
|
8
|
+
export {};
|