@tonk/cli 0.1.12 → 0.1.14
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 +22 -0
- package/dist/commands/create.d.ts.map +1 -1
- package/dist/commands/create.js +9 -9
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/dev.d.ts.map +1 -1
- package/dist/commands/dev.js +30 -12
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/hello.d.ts.map +1 -1
- package/dist/commands/hello.js +5 -31
- package/dist/commands/hello.js.map +1 -1
- package/dist/commands/prettyPrint.d.ts +3 -0
- package/dist/commands/prettyPrint.d.ts.map +1 -0
- package/dist/commands/prettyPrint.js +51 -0
- package/dist/commands/prettyPrint.js.map +1 -0
- package/dist/commands/serve.d.ts.map +1 -1
- package/dist/commands/serve.js +85 -19
- package/dist/commands/serve.js.map +1 -1
- package/dist/lib/launchGUI.d.ts +2 -0
- package/dist/lib/launchGUI.d.ts.map +1 -0
- package/dist/lib/launchGUI.js +175 -0
- package/dist/lib/launchGUI.js.map +1 -0
- package/dist/tonk.js +6 -9
- package/dist/tonk.js.map +1 -1
- package/package.json +4 -2
package/README.md
CHANGED
|
@@ -67,6 +67,28 @@ Options:
|
|
|
67
67
|
- `-k, --key <path>` - Path to SSH key file
|
|
68
68
|
- `-u, --user <name>` - SSH username (default: ec2-user)
|
|
69
69
|
- `-t, --token <token>` - Pinggy.io access token for public URL
|
|
70
|
+
- `-b, --backblaze` - Enable Backblaze B2 storage for document backup
|
|
71
|
+
- `-f, --filesystem` - Enable filesystem storage for document backup
|
|
72
|
+
|
|
73
|
+
#### Persistence Features
|
|
74
|
+
|
|
75
|
+
Tonk supports multiple options for persisting your documents:
|
|
76
|
+
|
|
77
|
+
1. **Backblaze B2 Storage**: Cloud-based backup for your documents
|
|
78
|
+
- Secure, scalable cloud storage
|
|
79
|
+
- Automatic synchronization at configurable intervals
|
|
80
|
+
- Requires a Backblaze B2 account with bucket and application keys
|
|
81
|
+
|
|
82
|
+
2. **Filesystem Storage**: Local file-based storage on your server
|
|
83
|
+
- Store documents directly on the server's filesystem
|
|
84
|
+
- Configurable storage path and sync intervals
|
|
85
|
+
- Automatic directory creation
|
|
86
|
+
|
|
87
|
+
3. **Dual Storage**: Use both Backblaze and filesystem storage
|
|
88
|
+
- Configure a primary storage option
|
|
89
|
+
- Automatic fallback to secondary storage
|
|
90
|
+
|
|
91
|
+
During deployment, you'll be guided through setting up your preferred storage options interactively if not specified via command-line options.
|
|
70
92
|
|
|
71
93
|
## Development
|
|
72
94
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAGlC,eAAO,MAAM,aAAa,
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAGlC,eAAO,MAAM,aAAa,SAyBtB,CAAC"}
|
package/dist/commands/create.js
CHANGED
|
@@ -2,26 +2,26 @@ import { Command } from 'commander';
|
|
|
2
2
|
import child_process from 'child_process';
|
|
3
3
|
export const createCommand = new Command('create')
|
|
4
4
|
.description('Create a new tonk application or component')
|
|
5
|
-
.
|
|
6
|
-
.action(
|
|
7
|
-
console.log('Creating a new tonk app...');
|
|
5
|
+
.option('-i, --init', 'initialize in the folder')
|
|
6
|
+
.action(options => {
|
|
8
7
|
try {
|
|
9
8
|
// Build the command with any passed options
|
|
10
|
-
|
|
11
|
-
// Pass through any options provided to the CLI
|
|
12
|
-
if (name)
|
|
13
|
-
createCommand += ` "${name}"`;
|
|
9
|
+
const createCommand = `npx @tonk/create ${options.init ? '-i' : ''}`;
|
|
14
10
|
console.log(createCommand);
|
|
15
11
|
// Execute the create package
|
|
16
12
|
child_process.execSync(createCommand, {
|
|
17
13
|
stdio: 'inherit',
|
|
18
14
|
env: { ...process.env },
|
|
19
15
|
});
|
|
20
|
-
console.log('🎉 Tonk app created successfully!');
|
|
21
16
|
process.exit(0);
|
|
22
17
|
}
|
|
23
18
|
catch (error) {
|
|
24
|
-
|
|
19
|
+
if (error.status === 8) {
|
|
20
|
+
console.error('Failed to generate Tonk code:', error);
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
console.error('Failed to generate Tonk code:', error);
|
|
24
|
+
}
|
|
25
25
|
process.exit(1);
|
|
26
26
|
}
|
|
27
27
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAClC,OAAO,aAAa,MAAM,eAAe,CAAC;AAE1C,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;KAC/C,WAAW,CAAC,4CAA4C,CAAC;KACzD,
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAClC,OAAO,aAAa,MAAM,eAAe,CAAC;AAE1C,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;KAC/C,WAAW,CAAC,4CAA4C,CAAC;KACzD,MAAM,CAAC,YAAY,EAAE,0BAA0B,CAAC;KAChD,MAAM,CAAC,OAAO,CAAC,EAAE;IAChB,IAAI,CAAC;QACH,4CAA4C;QAC5C,MAAM,aAAa,GAAG,oBAAoB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAErE,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAE3B,6BAA6B;QAC7B,aAAa,CAAC,QAAQ,CAAC,aAAa,EAAE;YACpC,KAAK,EAAE,SAAS;YAChB,GAAG,EAAE,EAAC,GAAG,OAAO,CAAC,GAAG,EAAC;SACtB,CAAC,CAAC;QAEH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;QACxD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAMlC,eAAO,MAAM,UAAU,SAwGnB,CAAC"}
|
package/dist/commands/dev.js
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
2
|
import path from 'path';
|
|
3
3
|
import { spawn } from 'child_process';
|
|
4
|
-
import { createServer } from '@tonk/server';
|
|
5
4
|
import chalk from 'chalk';
|
|
6
5
|
import fs from 'fs';
|
|
7
6
|
export const devCommand = new Command('dev')
|
|
8
7
|
.description('Start a Tonk app in development mode')
|
|
9
8
|
.option('-p, --port <port>', 'Port to run the sync server on', '4080')
|
|
10
9
|
.option('-f, --frontend-port <port>', 'Port to run the frontend dev server on', '3000')
|
|
11
|
-
.option('--
|
|
10
|
+
.option('--open', 'Enable auto-opening the browser')
|
|
12
11
|
.action(async (options) => {
|
|
13
12
|
const projectRoot = process.cwd();
|
|
14
13
|
const port = parseInt(options.port, 10);
|
|
@@ -20,13 +19,6 @@ export const devCommand = new Command('dev')
|
|
|
20
19
|
process.exit(1);
|
|
21
20
|
}
|
|
22
21
|
console.log(chalk.blue('Starting Tonk development environment...'));
|
|
23
|
-
// Start the sync server
|
|
24
|
-
const server = await createServer({
|
|
25
|
-
port,
|
|
26
|
-
mode: 'development',
|
|
27
|
-
verbose: true,
|
|
28
|
-
distPath: undefined,
|
|
29
|
-
});
|
|
30
22
|
// Start webpack dev server
|
|
31
23
|
const webpackArgs = [
|
|
32
24
|
'webpack',
|
|
@@ -48,14 +40,41 @@ export const devCommand = new Command('dev')
|
|
|
48
40
|
shell: true,
|
|
49
41
|
env: {
|
|
50
42
|
...process.env,
|
|
51
|
-
PORT: frontendPort.toString(),
|
|
43
|
+
// PORT: frontendPort.toString(),
|
|
44
|
+
// We now assume server is running on 8080 at all times with the hub
|
|
45
|
+
PORT: '8080',
|
|
52
46
|
},
|
|
53
47
|
});
|
|
48
|
+
let serverProcess;
|
|
49
|
+
const serverPath = path.join(projectRoot, 'server', 'dist', 'index.js');
|
|
50
|
+
try {
|
|
51
|
+
if (fs.existsSync(serverPath)) {
|
|
52
|
+
serverProcess = spawn('node', [serverPath], {
|
|
53
|
+
cwd: projectRoot,
|
|
54
|
+
stdio: 'inherit',
|
|
55
|
+
shell: true,
|
|
56
|
+
env: {
|
|
57
|
+
...process.env,
|
|
58
|
+
},
|
|
59
|
+
});
|
|
60
|
+
serverProcess.on('exit', code => {
|
|
61
|
+
if (code !== 0 && code !== null) {
|
|
62
|
+
console.error(chalk.red(`Webpack process exited with code ${code}`));
|
|
63
|
+
}
|
|
64
|
+
process.exit(code || 0);
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
catch (e) {
|
|
69
|
+
console.error(e);
|
|
70
|
+
}
|
|
54
71
|
// Handle process termination
|
|
55
72
|
const cleanup = () => {
|
|
56
73
|
console.log(chalk.yellow('\nShutting down servers...'));
|
|
57
74
|
webpackProcess.kill();
|
|
58
|
-
|
|
75
|
+
if (serverProcess) {
|
|
76
|
+
serverProcess.kill();
|
|
77
|
+
}
|
|
59
78
|
};
|
|
60
79
|
process.on('SIGINT', cleanup);
|
|
61
80
|
process.on('SIGTERM', cleanup);
|
|
@@ -64,7 +83,6 @@ export const devCommand = new Command('dev')
|
|
|
64
83
|
if (code !== 0 && code !== null) {
|
|
65
84
|
console.error(chalk.red(`Webpack process exited with code ${code}`));
|
|
66
85
|
}
|
|
67
|
-
server.stop().catch(console.error);
|
|
68
86
|
process.exit(code || 0);
|
|
69
87
|
});
|
|
70
88
|
});
|
package/dist/commands/dev.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAClC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,
|
|
1
|
+
{"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hello.d.ts","sourceRoot":"","sources":["../../src/commands/hello.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"hello.d.ts","sourceRoot":"","sources":["../../src/commands/hello.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAGlC,eAAO,MAAM,YAAY,SAKrB,CAAC"}
|
package/dist/commands/hello.js
CHANGED
|
@@ -1,36 +1,10 @@
|
|
|
1
|
-
import { Command } from 'commander';
|
|
2
1
|
import chalk from 'chalk';
|
|
2
|
+
import { Command } from 'commander';
|
|
3
|
+
import { launchTonkGUI } from '../lib/launchGUI.js';
|
|
3
4
|
export const helloCommand = new Command('hello')
|
|
4
|
-
.description('
|
|
5
|
+
.description('Launch the Tonk HUB')
|
|
5
6
|
.action(() => {
|
|
6
|
-
console.log(
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
_____ U ___ u _ _ _ __
|
|
10
|
-
|_ " _| \\/"_ \\/ | \\ |"| |"|/ /
|
|
11
|
-
| | | | | |<| \\| |> | ' /
|
|
12
|
-
/| |\\.-,_| |_| |U| |\\ |u U/| . \\\\u
|
|
13
|
-
u |_|U \\_)-\\___/ |_| \\_| |_|\\_\\
|
|
14
|
-
_// \\\\_ \\\\ || \\\\,-.,-,>> \\\\,-.
|
|
15
|
-
(__) (__) (__) (_") (_/ \\.) (_/
|
|
16
|
-
|
|
17
|
-
・。゜☆。・゜。・。゜☆。・゜★・。゜☆。・゜。・。゜☆。・゜☆。・゜
|
|
18
|
-
|
|
19
|
-
Welcome to Tonk!
|
|
20
|
-
|
|
21
|
-
We're excited to work with you in building your own ☆𝐿𝒾𝓉𝓉𝓁𝑒 𝐼𝓃𝓉𝑒𝓇𝓃𝑒𝓉☆.
|
|
22
|
-
|
|
23
|
-
To get started...
|
|
24
|
-
|
|
25
|
-
1. Create your first app by running the command: ${chalk.cyan('tonk create [app name]')}
|
|
26
|
-
2. Start the app with: ${chalk.cyan('npm run dev')}
|
|
27
|
-
3. Open in your favorite code editor and vibe.
|
|
28
|
-
|
|
29
|
-
You can find more information and how to reach us at ${chalk.blue('https://tonk.xyz')}
|
|
30
|
-
Feel free to ask for help in the Telegram chat or just say hello.
|
|
31
|
-
|
|
32
|
-
Cheers!
|
|
33
|
-
`);
|
|
34
|
-
process.exit(0);
|
|
7
|
+
console.log(chalk.blue('Launching Tonk GUI...'));
|
|
8
|
+
launchTonkGUI();
|
|
35
9
|
});
|
|
36
10
|
//# sourceMappingURL=hello.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hello.js","sourceRoot":"","sources":["../../src/commands/hello.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAClC,OAAO,
|
|
1
|
+
{"version":3,"file":"hello.js","sourceRoot":"","sources":["../../src/commands/hello.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAClC,OAAO,EAAC,aAAa,EAAC,MAAM,qBAAqB,CAAC;AAElD,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;KAC7C,WAAW,CAAC,qBAAqB,CAAC;KAClC,MAAM,CAAC,GAAG,EAAE;IACX,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC;IACjD,aAAa,EAAE,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prettyPrint.d.ts","sourceRoot":"","sources":["../../src/commands/prettyPrint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAsDlC,eAAO,MAAM,aAAa,SAWtB,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { marked } from 'marked';
|
|
4
|
+
import fs from 'fs';
|
|
5
|
+
import path from 'path';
|
|
6
|
+
// Create custom renderer extension
|
|
7
|
+
const renderer = {
|
|
8
|
+
// Block-level renderer methods
|
|
9
|
+
heading(token) {
|
|
10
|
+
const prefix = '#'.repeat(token.depth);
|
|
11
|
+
return chalk.bold.cyan(`\n${prefix} ${this.parser.parseInline(token.tokens)}\n\n`);
|
|
12
|
+
},
|
|
13
|
+
paragraph(token) {
|
|
14
|
+
return `${this.parser.parseInline(token.tokens)}\n\n`;
|
|
15
|
+
},
|
|
16
|
+
list(token) {
|
|
17
|
+
const items = token.items.map((item, index) => chalk.yellow(`${token.ordered ? `${index + 1}.` : '•'} ${this.parser.parseInline(item.tokens)}`));
|
|
18
|
+
return items.join('\n') + '\n';
|
|
19
|
+
},
|
|
20
|
+
code(token) {
|
|
21
|
+
return chalk.greenBright(token.text) + '\n\n';
|
|
22
|
+
},
|
|
23
|
+
codespan(token) {
|
|
24
|
+
return chalk.greenBright(token.text);
|
|
25
|
+
},
|
|
26
|
+
// Inline-level renderer methods
|
|
27
|
+
link(token) {
|
|
28
|
+
return chalk.blue.underline(token.href);
|
|
29
|
+
},
|
|
30
|
+
em(token) {
|
|
31
|
+
return chalk.italic(this.parser.parseInline(token.tokens));
|
|
32
|
+
},
|
|
33
|
+
strong(token) {
|
|
34
|
+
return chalk.bold(this.parser.parseInline(token.tokens));
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
// Configure marked with our custom renderer
|
|
38
|
+
marked.use({ renderer });
|
|
39
|
+
export const printMarkdown = new Command('markdown')
|
|
40
|
+
.description('Pretty prints markdown files')
|
|
41
|
+
.argument('[path to markdown file]', 'Path of the markdown file to print')
|
|
42
|
+
.action(markdownPath => {
|
|
43
|
+
// Convert markdown to formatted text
|
|
44
|
+
const contents = fs
|
|
45
|
+
.readFileSync(path.normalize(markdownPath))
|
|
46
|
+
.toString('utf8');
|
|
47
|
+
const formattedMessage = marked.parse(contents);
|
|
48
|
+
console.log(formattedMessage);
|
|
49
|
+
process.exit(0);
|
|
50
|
+
});
|
|
51
|
+
//# sourceMappingURL=prettyPrint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prettyPrint.js","sourceRoot":"","sources":["../../src/commands/prettyPrint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAC,MAAM,EAAS,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAQxB,mCAAmC;AACnC,MAAM,QAAQ,GAAG;IACf,+BAA+B;IAC/B,OAAO,CAAqB,KAAqB;QAC/C,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACvC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CACpB,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAC3D,CAAC;IACJ,CAAC;IACD,SAAS,CAAqB,KAAuB;QACnD,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;IACxD,CAAC;IACD,IAAI,CAAqB,KAAkB;QACzC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAC5C,KAAK,CAAC,MAAM,CACV,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,CACjE,IAAI,CAAC,MAAM,CACZ,EAAE,CACJ,CACF,CAAC;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACjC,CAAC;IACD,IAAI,CAAC,KAAkB;QACrB,OAAO,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;IAChD,CAAC;IACD,QAAQ,CAAC,KAAsB;QAC7B,OAAO,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;IACD,gCAAgC;IAChC,IAAI,CAAC,KAAkB;QACrB,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;IACD,EAAE,CAAqB,KAAgB;QACrC,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7D,CAAC;IACD,MAAM,CAAqB,KAAoB;QAC7C,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3D,CAAC;CACF,CAAC;AACF,4CAA4C;AAC5C,MAAM,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,CAAC;AAEvB,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC;KACjD,WAAW,CAAC,8BAA8B,CAAC;KAC3C,QAAQ,CAAC,yBAAyB,EAAE,oCAAoC,CAAC;KACzE,MAAM,CAAC,YAAY,CAAC,EAAE;IACrB,qCAAqC;IACrC,MAAM,QAAQ,GAAG,EAAE;SAChB,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;SAC1C,QAAQ,CAAC,MAAM,CAAC,CAAC;IACpB,MAAM,gBAAgB,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC9B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AA2BlC,eAAO,MAAM,YAAY,SAuQrB,CAAC"}
|
package/dist/commands/serve.js
CHANGED
|
@@ -9,9 +9,10 @@ function normalizePath(inputPath) {
|
|
|
9
9
|
const homedir = process.env.HOME || process.env.USERPROFILE || '/home/node';
|
|
10
10
|
return path.join(homedir, inputPath.substring(2));
|
|
11
11
|
}
|
|
12
|
-
// If path is an absolute path not in the user's home directory
|
|
12
|
+
// If path is an absolute path not in the user's home directory and not already expanded from ~,
|
|
13
|
+
// redirect it to tonk-data
|
|
13
14
|
if (inputPath.startsWith('/') &&
|
|
14
|
-
!inputPath.startsWith('
|
|
15
|
+
!inputPath.startsWith(process.env.HOME || process.env.USERPROFILE || '') &&
|
|
15
16
|
!inputPath.includes('node_modules')) {
|
|
16
17
|
const homedir = process.env.HOME || process.env.USERPROFILE || '/home/node';
|
|
17
18
|
return path.join(homedir, 'tonk-data', inputPath);
|
|
@@ -21,30 +22,60 @@ function normalizePath(inputPath) {
|
|
|
21
22
|
export const serveCommand = new Command('serve')
|
|
22
23
|
.description('Start a Tonk app in production mode')
|
|
23
24
|
.option('-p, --port <port>', 'Port to run the server on', '8080')
|
|
24
|
-
.option('-d, --dist <path>', 'Path to the dist directory
|
|
25
|
+
.option('-d, --dist <path>', 'Path to the dist directory for single app mode')
|
|
26
|
+
.option('-u, --userhub', 'Run in userhub mode')
|
|
27
|
+
.option('-f, --filesystem <path>', 'Filesystem path for document storage')
|
|
25
28
|
.action(async (options) => {
|
|
26
29
|
const projectRoot = process.cwd();
|
|
27
30
|
const port = parseInt(options.port, 10);
|
|
28
|
-
const distPath = path.isAbsolute(options.dist)
|
|
29
|
-
? options.dist
|
|
30
|
-
: path.join(projectRoot, options.dist);
|
|
31
31
|
const configFilePath = path.join(projectRoot, 'tonk.config.json');
|
|
32
|
-
//
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
32
|
+
// Determine whether we're using single app mode or hub mode
|
|
33
|
+
let distPath;
|
|
34
|
+
if (options.userhub) {
|
|
35
|
+
if (!options.filesystem) {
|
|
36
|
+
console.error(chalk.red(`Error: cannot run in hub mode without a filesystem path`));
|
|
37
|
+
process.exit(1);
|
|
38
|
+
}
|
|
39
|
+
// do nothing
|
|
37
40
|
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
41
|
+
else if (options.dist) {
|
|
42
|
+
// Single app mode: serve a single app from dist
|
|
43
|
+
distPath = path.isAbsolute(options.dist)
|
|
44
|
+
? options.dist
|
|
45
|
+
: path.join(projectRoot, options.dist);
|
|
46
|
+
// Check if the dist directory exists
|
|
47
|
+
if (!fs.existsSync(distPath)) {
|
|
48
|
+
console.error(chalk.red(`Error: Dist directory not found at ${distPath}. Make sure you've built the project first.`));
|
|
49
|
+
console.log(chalk.yellow(`Tip: Run 'pnpm run build' or 'yarn build' before serving.`));
|
|
50
|
+
process.exit(1);
|
|
51
|
+
}
|
|
52
|
+
// Check if dist/index.html exists
|
|
53
|
+
const indexPath = path.join(distPath, 'index.html');
|
|
54
|
+
if (!fs.existsSync(indexPath)) {
|
|
55
|
+
console.error(chalk.red(`Error: index.html not found in ${distPath}. The build output may be incomplete.`));
|
|
56
|
+
process.exit(1);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
// Neither hub nor dist specified, default to 'dist' in current directory
|
|
61
|
+
distPath = path.join(projectRoot, 'dist');
|
|
62
|
+
if (!fs.existsSync(distPath)) {
|
|
63
|
+
console.error(chalk.red(`Error: No --dist or --hub option provided, and default dist directory not found at ${distPath}.`));
|
|
64
|
+
process.exit(1);
|
|
65
|
+
}
|
|
66
|
+
// Check if dist/index.html exists
|
|
67
|
+
const indexPath = path.join(distPath, 'index.html');
|
|
68
|
+
if (!fs.existsSync(indexPath)) {
|
|
69
|
+
console.error(chalk.red(`Error: index.html not found in ${distPath}. The build output may be incomplete.`));
|
|
70
|
+
process.exit(1);
|
|
71
|
+
}
|
|
43
72
|
}
|
|
44
73
|
// Check for Backblaze and Filesystem configurations
|
|
45
74
|
let backblazeConfig = null;
|
|
46
75
|
let filesystemConfig = null;
|
|
47
76
|
let primaryStorage = null;
|
|
77
|
+
// Check if filesystem path was provided via command line
|
|
78
|
+
const hasFilesystemFlag = !!options.filesystem;
|
|
48
79
|
if (fs.existsSync(configFilePath)) {
|
|
49
80
|
try {
|
|
50
81
|
const configData = JSON.parse(fs.readFileSync(configFilePath, 'utf8'));
|
|
@@ -62,7 +93,10 @@ export const serveCommand = new Command('serve')
|
|
|
62
93
|
console.log(chalk.blue('Backblaze B2 backup enabled from config'));
|
|
63
94
|
}
|
|
64
95
|
// If filesystem storage is configured and enabled in the config file
|
|
65
|
-
|
|
96
|
+
// and no command line path was provided
|
|
97
|
+
if (!hasFilesystemFlag &&
|
|
98
|
+
configData.filesystem &&
|
|
99
|
+
configData.filesystem.enabled) {
|
|
66
100
|
let storagePath = configData.filesystem.storagePath || '~/tonk-data';
|
|
67
101
|
storagePath = normalizePath(storagePath);
|
|
68
102
|
filesystemConfig = {
|
|
@@ -86,15 +120,33 @@ export const serveCommand = new Command('serve')
|
|
|
86
120
|
console.warn(chalk.yellow(`Error details: ${error}`));
|
|
87
121
|
}
|
|
88
122
|
}
|
|
123
|
+
// If filesystem path was provided via command line, override config settings
|
|
124
|
+
if (hasFilesystemFlag) {
|
|
125
|
+
const storagePath = normalizePath(options.filesystem);
|
|
126
|
+
filesystemConfig = {
|
|
127
|
+
enabled: true,
|
|
128
|
+
storagePath,
|
|
129
|
+
syncInterval: 30000, // 30 seconds default
|
|
130
|
+
createIfMissing: true, // default to true
|
|
131
|
+
};
|
|
132
|
+
console.log(chalk.blue(`Filesystem storage enabled with path: ${storagePath}`));
|
|
133
|
+
// If no primary storage set and we have backblaze, set filesystem as primary
|
|
134
|
+
if (!primaryStorage && backblazeConfig) {
|
|
135
|
+
primaryStorage = 'filesystem';
|
|
136
|
+
console.log(chalk.blue('Primary storage set to filesystem from command line argument'));
|
|
137
|
+
}
|
|
138
|
+
}
|
|
89
139
|
console.log(chalk.blue('Starting Tonk production server...'));
|
|
90
140
|
try {
|
|
91
141
|
// Start the production server with storage configs if available
|
|
92
142
|
const serverConfig = {
|
|
93
143
|
port,
|
|
94
144
|
mode: 'production',
|
|
95
|
-
distPath,
|
|
96
145
|
verbose: true,
|
|
97
146
|
};
|
|
147
|
+
if (distPath) {
|
|
148
|
+
serverConfig.distPath = distPath;
|
|
149
|
+
}
|
|
98
150
|
// Add Backblaze configuration if available
|
|
99
151
|
if (backblazeConfig) {
|
|
100
152
|
serverConfig.storage = {
|
|
@@ -112,6 +164,9 @@ export const serveCommand = new Command('serve')
|
|
|
112
164
|
const server = await createServer(serverConfig);
|
|
113
165
|
// Log success info
|
|
114
166
|
console.log(chalk.green(`Server running at http://localhost:${port}`));
|
|
167
|
+
if (distPath) {
|
|
168
|
+
console.log(chalk.green(`Serving single app from: ${distPath}`));
|
|
169
|
+
}
|
|
115
170
|
if (backblazeConfig) {
|
|
116
171
|
console.log(chalk.green(`
|
|
117
172
|
Backblaze B2 backup is enabled for your Automerge documents.
|
|
@@ -133,7 +188,18 @@ Primary storage is set to: ${primaryStorage}
|
|
|
133
188
|
// Handle process termination
|
|
134
189
|
const cleanup = () => {
|
|
135
190
|
console.log(chalk.yellow('\nShutting down server...'));
|
|
136
|
-
server
|
|
191
|
+
server
|
|
192
|
+
.stop()
|
|
193
|
+
.then(() => {
|
|
194
|
+
console.log(chalk.green('Server shutdown complete.'));
|
|
195
|
+
// Force exit after brief delay to ensure any pending operations complete
|
|
196
|
+
setTimeout(() => process.exit(0), 2000);
|
|
197
|
+
})
|
|
198
|
+
.catch(err => {
|
|
199
|
+
console.error(chalk.red('Error during shutdown:'), err);
|
|
200
|
+
// Force exit even on error
|
|
201
|
+
process.exit(1);
|
|
202
|
+
});
|
|
137
203
|
};
|
|
138
204
|
process.on('SIGINT', cleanup);
|
|
139
205
|
process.on('SIGTERM', cleanup);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAClC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAC,YAAY,EAAC,MAAM,cAAc,CAAC;AAC1C,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,SAAS,aAAa,CAAC,SAAiB;IACtC,kDAAkD;IAClD,IAAI,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,YAAY,CAAC;QAC5E,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC;IAED,
|
|
1
|
+
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"launchGUI.d.ts","sourceRoot":"","sources":["../../src/lib/launchGUI.ts"],"names":[],"mappings":"AAMA,wBAAgB,aAAa,SAmJ5B"}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { spawn } from 'child_process';
|
|
3
|
+
import fs from 'fs';
|
|
4
|
+
import path from 'path';
|
|
5
|
+
import { fileURLToPath } from 'url';
|
|
6
|
+
export function launchTonkGUI() {
|
|
7
|
+
// Use import.meta.url and fileURLToPath instead of __dirname
|
|
8
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
9
|
+
const __dirname = path.dirname(__filename);
|
|
10
|
+
// Determine the paths - CLI is in src/commands, so we need to go up to the project root
|
|
11
|
+
const projectRoot = path.resolve(__dirname, '../../..');
|
|
12
|
+
const electronAppPath = path.resolve(projectRoot, 'hub');
|
|
13
|
+
const hubUIPath = path.resolve(electronAppPath, 'hub-ui');
|
|
14
|
+
// Check if the Electron app exists
|
|
15
|
+
if (!fs.existsSync(electronAppPath)) {
|
|
16
|
+
console.error(chalk.red(`Electron app not found at ${electronAppPath}. Please check your installation.`));
|
|
17
|
+
throw new Error(`Electron app not found at ${electronAppPath}. Please check your installation.`);
|
|
18
|
+
}
|
|
19
|
+
// Check if the hub UI exists
|
|
20
|
+
if (!fs.existsSync(hubUIPath)) {
|
|
21
|
+
console.error(chalk.red(`Hub UI not found at ${hubUIPath}. Please check your installation.`));
|
|
22
|
+
throw new Error(`Hub UI not found at ${hubUIPath}. Please check your installation.`);
|
|
23
|
+
}
|
|
24
|
+
let uiProcess = null;
|
|
25
|
+
let electronProcess = null;
|
|
26
|
+
// Function to cleanly terminate both processes
|
|
27
|
+
const cleanupProcesses = () => {
|
|
28
|
+
console.log(chalk.yellow('\nShutting down Tonk GUI...'));
|
|
29
|
+
if (electronProcess) {
|
|
30
|
+
try {
|
|
31
|
+
electronProcess.kill('SIGTERM');
|
|
32
|
+
electronProcess = null;
|
|
33
|
+
}
|
|
34
|
+
catch (err) {
|
|
35
|
+
console.error(chalk.red(`Error terminating Electron process: ${err.message}`));
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
if (uiProcess) {
|
|
39
|
+
try {
|
|
40
|
+
// First try a graceful termination
|
|
41
|
+
uiProcess.kill('SIGTERM');
|
|
42
|
+
// Force kill after a short timeout if still running
|
|
43
|
+
setTimeout(() => {
|
|
44
|
+
if (uiProcess) {
|
|
45
|
+
try {
|
|
46
|
+
// On macOS, we need SIGKILL to ensure termination
|
|
47
|
+
uiProcess.kill('SIGKILL');
|
|
48
|
+
uiProcess = null;
|
|
49
|
+
console.log(chalk.yellow('Force-terminated UI process'));
|
|
50
|
+
}
|
|
51
|
+
catch (killErr) {
|
|
52
|
+
console.error(chalk.red(`Failed to force-kill UI process: ${killErr.message}`));
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}, 1000);
|
|
56
|
+
}
|
|
57
|
+
catch (err) {
|
|
58
|
+
console.error(chalk.red(`Error terminating UI process: ${err.message}`));
|
|
59
|
+
// Try force kill if normal termination failed
|
|
60
|
+
try {
|
|
61
|
+
uiProcess.kill('SIGKILL');
|
|
62
|
+
uiProcess = null;
|
|
63
|
+
}
|
|
64
|
+
catch (killErr) {
|
|
65
|
+
console.error(chalk.red(`Failed to force-kill UI process: ${killErr.message}`));
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// Also try to kill any process that might be using port 3333
|
|
70
|
+
try {
|
|
71
|
+
// For macOS/Linux
|
|
72
|
+
const killCommand = process.platform === 'win32'
|
|
73
|
+
? spawn('cmd', [
|
|
74
|
+
'/c',
|
|
75
|
+
'FOR /F "tokens=5" %P IN (\'netstat -ano ^| findstr :3333 ^| findstr LISTENING\') DO taskkill /F /PID %P',
|
|
76
|
+
])
|
|
77
|
+
: spawn('sh', ['-c', 'lsof -ti:3333 | xargs kill -9']);
|
|
78
|
+
killCommand.on('error', err => {
|
|
79
|
+
console.error(chalk.red(`Failed to kill process on port 3333: ${err.message}`));
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
catch (err) {
|
|
83
|
+
console.error(chalk.red(`Error killing process on port 3333: ${err.message}`));
|
|
84
|
+
}
|
|
85
|
+
console.log(chalk.yellow('Tonk GUI shutdown complete.'));
|
|
86
|
+
};
|
|
87
|
+
try {
|
|
88
|
+
// Start the webpack development server for the hub UI
|
|
89
|
+
console.log(chalk.blue('Starting Hub UI development server...'));
|
|
90
|
+
uiProcess = startUIServer(hubUIPath);
|
|
91
|
+
// Give the UI server a moment to start
|
|
92
|
+
setTimeout(() => {
|
|
93
|
+
// Launch the Electron app
|
|
94
|
+
console.log(chalk.blue('Starting Electron app...'));
|
|
95
|
+
electronProcess = startElectronApp(electronAppPath, cleanupProcesses);
|
|
96
|
+
// Handle process termination
|
|
97
|
+
process.on('SIGINT', cleanupProcesses);
|
|
98
|
+
process.on('SIGTERM', cleanupProcesses);
|
|
99
|
+
process.on('exit', cleanupProcesses);
|
|
100
|
+
}, 2000); // Wait 2 seconds before starting Electron
|
|
101
|
+
}
|
|
102
|
+
catch (error) {
|
|
103
|
+
console.error(chalk.red(`Error launching Tonk GUI: ${error.message}`));
|
|
104
|
+
cleanupProcesses();
|
|
105
|
+
throw new Error(`Error launching Tonk GUI: ${error.message}`);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
function startUIServer(hubUIPath) {
|
|
109
|
+
console.log(chalk.blue(`Starting webpack dev server in ${hubUIPath}...`));
|
|
110
|
+
const uiProcess = spawn('pnpm', ['run', 'start'], {
|
|
111
|
+
cwd: hubUIPath,
|
|
112
|
+
stdio: 'pipe',
|
|
113
|
+
shell: true,
|
|
114
|
+
detached: false, // Ensure process is not detached from parent
|
|
115
|
+
});
|
|
116
|
+
uiProcess.stdout.on('data', data => {
|
|
117
|
+
const output = data.toString();
|
|
118
|
+
console.log(chalk.green(output.trim()));
|
|
119
|
+
});
|
|
120
|
+
uiProcess.stderr.on('data', data => {
|
|
121
|
+
const output = data.toString();
|
|
122
|
+
console.error(chalk.yellow(output.trim()));
|
|
123
|
+
});
|
|
124
|
+
uiProcess.on('error', err => {
|
|
125
|
+
console.error(chalk.red(`Failed to start UI server: ${err.message}`));
|
|
126
|
+
});
|
|
127
|
+
uiProcess.on('close', code => {
|
|
128
|
+
if (code !== 0 && code !== null) {
|
|
129
|
+
console.log(chalk.yellow(`UI server exited with code ${code}`));
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
return uiProcess;
|
|
133
|
+
}
|
|
134
|
+
function startElectronApp(electronAppPath, cleanupCallback) {
|
|
135
|
+
console.log(chalk.blue(`Starting Electron app in ${electronAppPath}...`));
|
|
136
|
+
// Check if package.json exists in the electron app directory
|
|
137
|
+
const packageJsonPath = path.join(electronAppPath, 'package.json');
|
|
138
|
+
if (!fs.existsSync(packageJsonPath)) {
|
|
139
|
+
console.error(chalk.red(`No package.json found in ${electronAppPath}`));
|
|
140
|
+
throw new Error(`No package.json found in ${electronAppPath}`);
|
|
141
|
+
}
|
|
142
|
+
// Use npm run dev instead of npx electron .
|
|
143
|
+
const electronProcess = spawn('pnpm', ['run', 'dev'], {
|
|
144
|
+
cwd: electronAppPath,
|
|
145
|
+
stdio: 'pipe',
|
|
146
|
+
shell: true,
|
|
147
|
+
env: {
|
|
148
|
+
...process.env,
|
|
149
|
+
ELECTRON_START_URL: 'http://localhost:3333',
|
|
150
|
+
// Enable Node.js integration in Electron
|
|
151
|
+
NODE_ENV: 'development',
|
|
152
|
+
},
|
|
153
|
+
});
|
|
154
|
+
electronProcess.stdout.on('data', data => {
|
|
155
|
+
const output = data.toString();
|
|
156
|
+
console.log(chalk.blue(output.trim()));
|
|
157
|
+
});
|
|
158
|
+
electronProcess.stderr.on('data', data => {
|
|
159
|
+
const output = data.toString();
|
|
160
|
+
console.error(chalk.red(output.trim()));
|
|
161
|
+
});
|
|
162
|
+
electronProcess.on('error', err => {
|
|
163
|
+
console.error(chalk.red(`Failed to start Electron app: ${err.message}`));
|
|
164
|
+
});
|
|
165
|
+
electronProcess.on('close', code => {
|
|
166
|
+
if (code !== 0 && code !== null) {
|
|
167
|
+
console.log(chalk.yellow(`Electron app exited with code ${code}`));
|
|
168
|
+
}
|
|
169
|
+
console.log(chalk.yellow('Electron app closed, shutting down UI server...'));
|
|
170
|
+
// Call the cleanup function when Electron exits
|
|
171
|
+
cleanupCallback();
|
|
172
|
+
});
|
|
173
|
+
return electronProcess;
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=launchGUI.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"launchGUI.js","sourceRoot":"","sources":["../../src/lib/launchGUI.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAe,KAAK,EAAC,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAC,aAAa,EAAC,MAAM,KAAK,CAAC;AAElC,MAAM,UAAU,aAAa;IAC3B,6DAA6D;IAC7D,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAE3C,wFAAwF;IACxF,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IACxD,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IACzD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;IAE1D,mCAAmC;IACnC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACpC,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CACP,6BAA6B,eAAe,mCAAmC,CAChF,CACF,CAAC;QACF,MAAM,IAAI,KAAK,CACb,6BAA6B,eAAe,mCAAmC,CAChF,CAAC;IACJ,CAAC;IAED,6BAA6B;IAC7B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CACP,uBAAuB,SAAS,mCAAmC,CACpE,CACF,CAAC;QACF,MAAM,IAAI,KAAK,CACb,uBAAuB,SAAS,mCAAmC,CACpE,CAAC;IACJ,CAAC;IAED,IAAI,SAAS,GAAwB,IAAI,CAAC;IAC1C,IAAI,eAAe,GAAwB,IAAI,CAAC;IAEhD,+CAA+C;IAC/C,MAAM,gBAAgB,GAAG,GAAG,EAAE;QAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,6BAA6B,CAAC,CAAC,CAAC;QAEzD,IAAI,eAAe,EAAE,CAAC;YACpB,IAAI,CAAC;gBACH,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAChC,eAAe,GAAG,IAAI,CAAC;YACzB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CACP,uCAAwC,GAAa,CAAC,OAAO,EAAE,CAChE,CACF,CAAC;YACJ,CAAC;QACH,CAAC;QAED,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,CAAC;gBACH,mCAAmC;gBACnC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAE1B,oDAAoD;gBACpD,UAAU,CAAC,GAAG,EAAE;oBACd,IAAI,SAAS,EAAE,CAAC;wBACd,IAAI,CAAC;4BACH,kDAAkD;4BAClD,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;4BAC1B,SAAS,GAAG,IAAI,CAAC;4BACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,6BAA6B,CAAC,CAAC,CAAC;wBAC3D,CAAC;wBAAC,OAAO,OAAO,EAAE,CAAC;4BACjB,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CACP,oCACG,OAAiB,CAAC,OACrB,EAAE,CACH,CACF,CAAC;wBACJ,CAAC;oBACH,CAAC;gBACH,CAAC,EAAE,IAAI,CAAC,CAAC;YACX,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CAAC,iCAAkC,GAAa,CAAC,OAAO,EAAE,CAAC,CACrE,CAAC;gBAEF,8CAA8C;gBAC9C,IAAI,CAAC;oBACH,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBAC1B,SAAS,GAAG,IAAI,CAAC;gBACnB,CAAC;gBAAC,OAAO,OAAO,EAAE,CAAC;oBACjB,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CACP,oCAAqC,OAAiB,CAAC,OAAO,EAAE,CACjE,CACF,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QAED,6DAA6D;QAC7D,IAAI,CAAC;YACH,kBAAkB;YAClB,MAAM,WAAW,GACf,OAAO,CAAC,QAAQ,KAAK,OAAO;gBAC1B,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE;oBACX,IAAI;oBACJ,yGAAyG;iBAC1G,CAAC;gBACJ,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,+BAA+B,CAAC,CAAC,CAAC;YAE3D,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE;gBAC5B,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CAAC,wCAAwC,GAAG,CAAC,OAAO,EAAE,CAAC,CACjE,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CACP,uCAAwC,GAAa,CAAC,OAAO,EAAE,CAChE,CACF,CAAC;QACJ,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,6BAA6B,CAAC,CAAC,CAAC;IAC3D,CAAC,CAAC;IAEF,IAAI,CAAC;QACH,sDAAsD;QACtD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC,CAAC;QACjE,SAAS,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;QAErC,uCAAuC;QACvC,UAAU,CAAC,GAAG,EAAE;YACd,0BAA0B;YAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;YACpD,eAAe,GAAG,gBAAgB,CAAC,eAAe,EAAE,gBAAgB,CAAC,CAAC;YAEtE,6BAA6B;YAC7B,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;YACvC,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;YACxC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;QACvC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,0CAA0C;IACtD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CAAC,6BAA8B,KAAe,CAAC,OAAO,EAAE,CAAC,CACnE,CAAC;QACF,gBAAgB,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,6BAA8B,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;IAC3E,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,SAAiB;IACtC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kCAAkC,SAAS,KAAK,CAAC,CAAC,CAAC;IAE1E,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE;QAChD,GAAG,EAAE,SAAS;QACd,KAAK,EAAE,MAAM;QACb,KAAK,EAAE,IAAI;QACX,QAAQ,EAAE,KAAK,EAAE,6CAA6C;KAC/D,CAAC,CAAC;IAEH,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE;QAC1B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;QAC3B,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,8BAA8B,IAAI,EAAE,CAAC,CAAC,CAAC;QAClE,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,gBAAgB,CACvB,eAAuB,EACvB,eAA2B;IAE3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,4BAA4B,eAAe,KAAK,CAAC,CAAC,CAAC;IAE1E,6DAA6D;IAC7D,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,cAAc,CAAC,CAAC;IACnE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACpC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,4BAA4B,eAAe,EAAE,CAAC,CAAC,CAAC;QACxE,MAAM,IAAI,KAAK,CAAC,4BAA4B,eAAe,EAAE,CAAC,CAAC;IACjE,CAAC;IAED,4CAA4C;IAC5C,MAAM,eAAe,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;QACpD,GAAG,EAAE,eAAe;QACpB,KAAK,EAAE,MAAM;QACb,KAAK,EAAE,IAAI;QACX,GAAG,EAAE;YACH,GAAG,OAAO,CAAC,GAAG;YACd,kBAAkB,EAAE,uBAAuB;YAC3C,yCAAyC;YACzC,QAAQ,EAAE,aAAa;SACxB;KACF,CAAC,CAAC;IAEH,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE;QACvC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE;QACvC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE;QAChC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,iCAAiC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;QACjC,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,iCAAiC,IAAI,EAAE,CAAC,CAAC,CAAC;QACrE,CAAC;QACD,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CAAC,iDAAiD,CAAC,CAChE,CAAC;QACF,gDAAgD;QAChD,eAAe,EAAE,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,OAAO,eAAe,CAAC;AACzB,CAAC"}
|
package/dist/tonk.js
CHANGED
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
|
+
import { configCommand } from './commands/config.js';
|
|
2
3
|
import { createCommand } from './commands/create.js';
|
|
3
|
-
import { devCommand } from './commands/dev.js';
|
|
4
|
-
import { serveCommand } from './commands/serve.js';
|
|
5
4
|
import { deployCommand } from './commands/deploy.js';
|
|
6
|
-
import {
|
|
5
|
+
import { devCommand } from './commands/dev.js';
|
|
7
6
|
import { helloCommand } from './commands/hello.js';
|
|
7
|
+
import { printMarkdown } from './commands/prettyPrint.js';
|
|
8
|
+
import { serveCommand } from './commands/serve.js';
|
|
8
9
|
const program = new Command();
|
|
9
10
|
// Main program setup
|
|
10
11
|
program
|
|
11
12
|
.name('tonk')
|
|
12
13
|
.description('The tonk cli helps you to manage your tonk stack and apps.')
|
|
13
|
-
.version('0.1.
|
|
14
|
+
.version('0.1.2')
|
|
14
15
|
.on('--help', () => {
|
|
15
16
|
console.log('\nWork in progress!');
|
|
16
17
|
});
|
|
@@ -20,10 +21,6 @@ program.addCommand(serveCommand);
|
|
|
20
21
|
program.addCommand(deployCommand);
|
|
21
22
|
program.addCommand(configCommand);
|
|
22
23
|
program.addCommand(helloCommand);
|
|
23
|
-
|
|
24
|
+
program.addCommand(printMarkdown);
|
|
24
25
|
program.parse();
|
|
25
|
-
// Show help if no arguments provided
|
|
26
|
-
if (!process.argv.slice(2).length) {
|
|
27
|
-
program.outputHelp();
|
|
28
|
-
}
|
|
29
26
|
//# sourceMappingURL=tonk.js.map
|
package/dist/tonk.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tonk.js","sourceRoot":"","sources":["../src/tonk.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAClC,OAAO,EAAC,aAAa,EAAC,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAC,
|
|
1
|
+
{"version":3,"file":"tonk.js","sourceRoot":"","sources":["../src/tonk.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAClC,OAAO,EAAC,aAAa,EAAC,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAC,aAAa,EAAC,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAC,aAAa,EAAC,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAC,UAAU,EAAC,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAC,YAAY,EAAC,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAC,aAAa,EAAC,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAC,YAAY,EAAC,MAAM,qBAAqB,CAAC;AAEjD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,qBAAqB;AACrB,OAAO;KACJ,IAAI,CAAC,MAAM,CAAC;KACZ,WAAW,CAAC,4DAA4D,CAAC;KACzE,OAAO,CAAC,OAAO,CAAC;KAChB,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;IACjB,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;AACrC,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAC/B,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAElC,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tonk/cli",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.14",
|
|
4
4
|
"description": "The Tonk stack command line utility",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"posttest": "npm run lint"
|
|
37
37
|
},
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"@tonk/server": "^0.1.
|
|
39
|
+
"@tonk/server": "^0.1.9",
|
|
40
40
|
"chalk": "^5.3.0",
|
|
41
41
|
"commander": "^11.1.0",
|
|
42
42
|
"dotenv": "^16.4.7",
|
|
@@ -45,7 +45,9 @@
|
|
|
45
45
|
"fs-extra": "^11.2.0",
|
|
46
46
|
"gradient-string": "^2.0.2",
|
|
47
47
|
"inquirer": "^9.2.12",
|
|
48
|
+
"@tonk/keepsync": "^0.3.7",
|
|
48
49
|
"listr2": "^8.2.5",
|
|
50
|
+
"marked": "^15.0.7",
|
|
49
51
|
"open": "^10.1.0",
|
|
50
52
|
"ora": "^7.0.1",
|
|
51
53
|
"zod": "^3.24.2"
|