@tonk/cli 0.1.14 → 0.2.1
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 +84 -5
- package/dist/commands/hello/index.d.ts +3 -0
- package/dist/commands/hello/index.d.ts.map +1 -0
- package/dist/commands/hello/index.js +291 -0
- package/dist/commands/hello/index.js.map +1 -0
- package/dist/commands/hello.d.ts.map +1 -1
- package/dist/commands/hello.js +69 -6
- package/dist/commands/hello.js.map +1 -1
- package/dist/commands/init.d.ts +3 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +66 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/kill.d.ts +3 -0
- package/dist/commands/kill.d.ts.map +1 -0
- package/dist/commands/kill.js +38 -0
- package/dist/commands/kill.js.map +1 -0
- package/dist/commands/ls.d.ts +3 -0
- package/dist/commands/ls.d.ts.map +1 -0
- package/dist/commands/ls.js +31 -0
- package/dist/commands/ls.js.map +1 -0
- package/dist/commands/ps.d.ts +3 -0
- package/dist/commands/ps.d.ts.map +1 -0
- package/dist/commands/ps.js +34 -0
- package/dist/commands/ps.js.map +1 -0
- package/dist/commands/push.d.ts +3 -0
- package/dist/commands/push.d.ts.map +1 -0
- package/dist/commands/push.js +150 -0
- package/dist/commands/push.js.map +1 -0
- package/dist/commands/start.d.ts +3 -0
- package/dist/commands/start.d.ts.map +1 -0
- package/dist/commands/start.js +43 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/tonk.js +71 -12
- package/dist/tonk.js.map +1 -1
- package/package.json +12 -4
- package/dist/commands/config.d.ts +0 -3
- package/dist/commands/config.d.ts.map +0 -1
- package/dist/commands/config.js +0 -338
- package/dist/commands/config.js.map +0 -1
- package/dist/commands/deploy.d.ts +0 -3
- package/dist/commands/deploy.d.ts.map +0 -1
- package/dist/commands/deploy.js +0 -460
- package/dist/commands/deploy.js.map +0 -1
- package/dist/commands/dev.d.ts +0 -3
- package/dist/commands/dev.d.ts.map +0 -1
- package/dist/commands/dev.js +0 -89
- package/dist/commands/dev.js.map +0 -1
- package/dist/commands/prettyPrint.d.ts +0 -3
- package/dist/commands/prettyPrint.d.ts.map +0 -1
- package/dist/commands/prettyPrint.js +0 -51
- package/dist/commands/prettyPrint.js.map +0 -1
- package/dist/commands/serve.d.ts +0 -3
- package/dist/commands/serve.d.ts.map +0 -1
- package/dist/commands/serve.js +0 -212
- package/dist/commands/serve.js.map +0 -1
- package/dist/lib/launchGUI.d.ts +0 -2
- package/dist/lib/launchGUI.d.ts.map +0 -1
- package/dist/lib/launchGUI.js +0 -175
- package/dist/lib/launchGUI.js.map +0 -1
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import fetch from 'node-fetch';
|
|
4
|
+
export const killCommand = new Command('kill')
|
|
5
|
+
.description('Stop a running bundle server')
|
|
6
|
+
.option('-u, --url <url>', 'URL of the Tonk server', 'http://localhost:7777')
|
|
7
|
+
.argument('<serverId>', 'ID of the server to stop')
|
|
8
|
+
.action(async (serverId, options) => {
|
|
9
|
+
const serverUrl = options.url;
|
|
10
|
+
try {
|
|
11
|
+
console.log(chalk.blue(`Stopping server with ID: ${serverId}...`));
|
|
12
|
+
const response = await fetch(`${serverUrl}/kill`, {
|
|
13
|
+
method: 'POST',
|
|
14
|
+
headers: {
|
|
15
|
+
'Content-Type': 'application/json',
|
|
16
|
+
},
|
|
17
|
+
body: JSON.stringify({ id: serverId }),
|
|
18
|
+
});
|
|
19
|
+
if (!response.ok) {
|
|
20
|
+
const errorText = await response.text();
|
|
21
|
+
throw new Error(`Server error: ${errorText}`);
|
|
22
|
+
}
|
|
23
|
+
const result = (await response.json());
|
|
24
|
+
if (result.success) {
|
|
25
|
+
console.log(chalk.green('Server stopped successfully!'));
|
|
26
|
+
console.log(chalk.green(result.message));
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
console.log(chalk.yellow('Server stop command sent, but with warnings:'));
|
|
30
|
+
console.log(chalk.yellow(result.message));
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
console.error(chalk.red(`Error: ${error instanceof Error ? error.message : String(error)}`));
|
|
35
|
+
process.exit(1);
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
//# sourceMappingURL=kill.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kill.js","sourceRoot":"","sources":["../../src/commands/kill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,MAAM,YAAY,CAAC;AAE/B,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;KAC3C,WAAW,CAAC,8BAA8B,CAAC;KAC3C,MAAM,CAAC,iBAAiB,EAAE,wBAAwB,EAAE,uBAAuB,CAAC;KAC5E,QAAQ,CAAC,YAAY,EAAE,0BAA0B,CAAC;KAClD,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE;IAClC,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC;IAE9B,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,4BAA4B,QAAQ,KAAK,CAAC,CAAC,CAAC;QAEnE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,SAAS,OAAO,EAAE;YAChD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAC,EAAE,EAAE,QAAQ,EAAC,CAAC;SACrC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,iBAAiB,SAAS,EAAE,CAAC,CAAC;QAChD,CAAC;QAED,MAAM,MAAM,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAGpC,CAAC;QAEF,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC,CAAC;YACzD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QAC3C,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CAAC,8CAA8C,CAAC,CAC7D,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CACP,UAAU,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACnE,CACF,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ls.d.ts","sourceRoot":"","sources":["../../src/commands/ls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAIlC,eAAO,MAAM,SAAS,SAmClB,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import fetch from 'node-fetch';
|
|
4
|
+
export const lsCommand = new Command('ls')
|
|
5
|
+
.description('List available bundles on the Tonk server')
|
|
6
|
+
.option('-u, --url <url>', 'URL of the Tonk server', 'http://localhost:7777')
|
|
7
|
+
.action(async (options) => {
|
|
8
|
+
const serverUrl = options.url;
|
|
9
|
+
try {
|
|
10
|
+
console.log(chalk.blue(`Fetching bundle list from ${serverUrl}...`));
|
|
11
|
+
const response = await fetch(`${serverUrl}/ls`);
|
|
12
|
+
if (!response.ok) {
|
|
13
|
+
const error = await response.text();
|
|
14
|
+
throw new Error(`Server error: ${error}`);
|
|
15
|
+
}
|
|
16
|
+
const bundles = (await response.json());
|
|
17
|
+
if (bundles.length === 0) {
|
|
18
|
+
console.log(chalk.yellow('No bundles found on the server.'));
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
console.log(chalk.green(`Available bundles (${bundles.length}):`));
|
|
22
|
+
bundles.forEach((bundle) => {
|
|
23
|
+
console.log(` - ${bundle}`);
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
catch (error) {
|
|
27
|
+
console.error(chalk.red(`Error: ${error instanceof Error ? error.message : String(error)}`));
|
|
28
|
+
process.exit(1);
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
//# sourceMappingURL=ls.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ls.js","sourceRoot":"","sources":["../../src/commands/ls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,MAAM,YAAY,CAAC;AAE/B,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;KACvC,WAAW,CAAC,2CAA2C,CAAC;KACxD,MAAM,CAAC,iBAAiB,EAAE,wBAAwB,EAAE,uBAAuB,CAAC;KAC5E,MAAM,CAAC,KAAK,EAAC,OAAO,EAAC,EAAE;IACtB,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC;IAE9B,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,6BAA6B,SAAS,KAAK,CAAC,CAAC,CAAC;QAErE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,SAAS,KAAK,CAAC,CAAC;QAEhD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,iBAAiB,KAAK,EAAE,CAAC,CAAC;QAC5C,CAAC;QAED,MAAM,OAAO,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAa,CAAC;QAEpD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,iCAAiC,CAAC,CAAC,CAAC;YAC7D,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,sBAAsB,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;QACnE,OAAO,CAAC,OAAO,CAAC,CAAC,MAAc,EAAE,EAAE;YACjC,OAAO,CAAC,GAAG,CAAC,OAAO,MAAM,EAAE,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CACP,UAAU,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACnE,CACF,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ps.d.ts","sourceRoot":"","sources":["../../src/commands/ps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAYlC,eAAO,MAAM,SAAS,SAgDlB,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import fetch from 'node-fetch';
|
|
4
|
+
export const psCommand = new Command('ps')
|
|
5
|
+
.description('List running bundle servers')
|
|
6
|
+
.option('-u, --url <url>', 'URL of the Tonk server', 'http://localhost:7777')
|
|
7
|
+
.action(async (options) => {
|
|
8
|
+
const serverUrl = options.url;
|
|
9
|
+
try {
|
|
10
|
+
console.log(chalk.blue(`Fetching running servers from ${serverUrl}...`));
|
|
11
|
+
const response = await fetch(`${serverUrl}/ps`);
|
|
12
|
+
if (!response.ok) {
|
|
13
|
+
const error = await response.text();
|
|
14
|
+
throw new Error(`Server error: ${error}`);
|
|
15
|
+
}
|
|
16
|
+
const servers = (await response.json());
|
|
17
|
+
if (servers.length === 0) {
|
|
18
|
+
console.log(chalk.yellow('No servers currently running.'));
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
console.log(chalk.green(`Running servers (${servers.length}):`));
|
|
22
|
+
// Format the output as a table
|
|
23
|
+
console.log(`${chalk.bold('ID'.padEnd(36))} | ${chalk.bold('Bundle'.padEnd(20))} | ${chalk.bold('Port'.padEnd(6))} | ${chalk.bold('Status')}`);
|
|
24
|
+
console.log('-'.repeat(80));
|
|
25
|
+
servers.forEach((server) => {
|
|
26
|
+
console.log(`${server.id.padEnd(36)} | ${server.bundleName.padEnd(20)} | ${String(server.port).padEnd(6)} | ${server.status}`);
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
console.error(chalk.red(`Error: ${error instanceof Error ? error.message : String(error)}`));
|
|
31
|
+
process.exit(1);
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
//# sourceMappingURL=ps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ps.js","sourceRoot":"","sources":["../../src/commands/ps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,MAAM,YAAY,CAAC;AAU/B,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;KACvC,WAAW,CAAC,6BAA6B,CAAC;KAC1C,MAAM,CAAC,iBAAiB,EAAE,wBAAwB,EAAE,uBAAuB,CAAC;KAC5E,MAAM,CAAC,KAAK,EAAC,OAAO,EAAC,EAAE;IACtB,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC;IAE9B,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iCAAiC,SAAS,KAAK,CAAC,CAAC,CAAC;QAEzE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,SAAS,KAAK,CAAC,CAAC;QAEhD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,iBAAiB,KAAK,EAAE,CAAC,CAAC;QAC5C,CAAC;QAED,MAAM,OAAO,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAiB,CAAC;QAExD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,+BAA+B,CAAC,CAAC,CAAC;YAC3D,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,oBAAoB,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;QAEjE,+BAA+B;QAC/B,OAAO,CAAC,GAAG,CACT,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAC5C,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CACpB,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAChE,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAE5B,OAAO,CAAC,OAAO,CAAC,CAAC,MAAkB,EAAE,EAAE;YACrC,OAAO,CAAC,GAAG,CACT,GAAG,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,MAAM,CACnE,MAAM,CAAC,IAAI,CACZ,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,MAAM,EAAE,CACjC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CACP,UAAU,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACnE,CACF,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../src/commands/push.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAyOlC,eAAO,MAAM,WAAW,SASI,CAAC"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import fs from 'fs-extra';
|
|
4
|
+
import path from 'path';
|
|
5
|
+
import fetch from 'node-fetch';
|
|
6
|
+
import { FormData } from 'formdata-node';
|
|
7
|
+
import { fileFromPath } from 'formdata-node/file-from-path';
|
|
8
|
+
import { FormDataEncoder } from 'form-data-encoder';
|
|
9
|
+
import { Readable } from 'stream';
|
|
10
|
+
import * as tar from 'tar';
|
|
11
|
+
/**
|
|
12
|
+
* Validates that the source directory exists
|
|
13
|
+
*/
|
|
14
|
+
function validateSourceDirectory(sourcePath) {
|
|
15
|
+
if (!fs.existsSync(sourcePath)) {
|
|
16
|
+
console.error(chalk.red(`Error: Directory ${sourcePath} does not exist.`));
|
|
17
|
+
console.log(chalk.yellow(`Run 'npm run build' or 'yarn build' to create the dist directory.`));
|
|
18
|
+
process.exit(1);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Determines the bundle name based on package.json or directory name
|
|
23
|
+
*/
|
|
24
|
+
function determineBundleName(projectRoot, providedName) {
|
|
25
|
+
let defaultName;
|
|
26
|
+
try {
|
|
27
|
+
const packageJsonPath = path.join(projectRoot, 'package.json');
|
|
28
|
+
if (fs.existsSync(packageJsonPath)) {
|
|
29
|
+
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
|
|
30
|
+
defaultName = packageJson.name
|
|
31
|
+
? packageJson.name.replace(/^@.*\//, '')
|
|
32
|
+
: undefined;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
catch (err) {
|
|
36
|
+
// Ignore error, will fall back to directory name
|
|
37
|
+
}
|
|
38
|
+
if (!defaultName) {
|
|
39
|
+
defaultName = path.basename(projectRoot);
|
|
40
|
+
}
|
|
41
|
+
// Use provided name or default
|
|
42
|
+
return providedName || defaultName;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Creates a tarball of the source directory
|
|
46
|
+
*/
|
|
47
|
+
async function createTarball(sourcePath, projectRoot, bundleName) {
|
|
48
|
+
console.log(chalk.blue(`Packaging contents of directory ${sourcePath} as bundle '${bundleName}'...`));
|
|
49
|
+
const tempTarPath = path.join(projectRoot, `${bundleName}-${Date.now()}.tar.gz`);
|
|
50
|
+
// Get all directories and files in the source directory
|
|
51
|
+
const children = fs.readdirSync(sourcePath);
|
|
52
|
+
if (children.length === 0) {
|
|
53
|
+
throw new Error(`Source directory ${sourcePath} is empty.`);
|
|
54
|
+
}
|
|
55
|
+
// Create tarball with all children of the source directory
|
|
56
|
+
await tar.create({
|
|
57
|
+
gzip: true,
|
|
58
|
+
file: tempTarPath,
|
|
59
|
+
cwd: sourcePath,
|
|
60
|
+
}, children);
|
|
61
|
+
return tempTarPath;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Uploads the tarball to the Tonk server
|
|
65
|
+
*/
|
|
66
|
+
async function uploadBundle(serverUrl, bundleName, tarballPath) {
|
|
67
|
+
console.log(chalk.blue(`Uploading bundle to ${serverUrl}...`));
|
|
68
|
+
const form = new FormData();
|
|
69
|
+
form.set('name', bundleName);
|
|
70
|
+
form.set('bundle', await fileFromPath(tarballPath));
|
|
71
|
+
const encoder = new FormDataEncoder(form);
|
|
72
|
+
const response = await fetch(`${serverUrl}/upload-bundle`, {
|
|
73
|
+
method: 'POST',
|
|
74
|
+
headers: encoder.headers,
|
|
75
|
+
body: Readable.from(encoder),
|
|
76
|
+
});
|
|
77
|
+
// Clean up temp file
|
|
78
|
+
fs.unlinkSync(tarballPath);
|
|
79
|
+
if (!response.ok) {
|
|
80
|
+
const errorText = await response.text();
|
|
81
|
+
throw new Error(`Server error: ${errorText}`);
|
|
82
|
+
}
|
|
83
|
+
const result = (await response.json());
|
|
84
|
+
console.log(chalk.green(`Bundle '${result.bundleName}' uploaded successfully!`));
|
|
85
|
+
return result;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Starts the bundle on the Tonk server
|
|
89
|
+
*/
|
|
90
|
+
async function startBundle(serverUrl, bundleName) {
|
|
91
|
+
console.log(chalk.blue(`Starting bundle '${bundleName}'...`));
|
|
92
|
+
const startResponse = await fetch(`${serverUrl}/start`, {
|
|
93
|
+
method: 'POST',
|
|
94
|
+
headers: {
|
|
95
|
+
'Content-Type': 'application/json',
|
|
96
|
+
},
|
|
97
|
+
body: JSON.stringify({ bundleName }),
|
|
98
|
+
});
|
|
99
|
+
if (!startResponse.ok) {
|
|
100
|
+
const startErrorText = await startResponse.text();
|
|
101
|
+
console.error(chalk.red(`Error starting bundle: ${startErrorText}`));
|
|
102
|
+
throw new Error(`Error starting bundle: ${startErrorText}`);
|
|
103
|
+
}
|
|
104
|
+
const startResult = (await startResponse.json());
|
|
105
|
+
console.log(chalk.green(`Bundle server started successfully!`));
|
|
106
|
+
console.log(chalk.green(`Server ID: ${startResult.id}`));
|
|
107
|
+
console.log(chalk.green(`Running on port: ${startResult.port}`));
|
|
108
|
+
console.log(chalk.green(`Status: ${startResult.status}`));
|
|
109
|
+
return startResult;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Main push command handler
|
|
113
|
+
*/
|
|
114
|
+
async function handlePushCommand(options) {
|
|
115
|
+
const serverUrl = options.url;
|
|
116
|
+
const sourceDir = options.dir || './dist';
|
|
117
|
+
const projectRoot = process.cwd();
|
|
118
|
+
const sourcePath = path.isAbsolute(sourceDir)
|
|
119
|
+
? sourceDir
|
|
120
|
+
: path.join(projectRoot, sourceDir);
|
|
121
|
+
try {
|
|
122
|
+
// Validate source directory
|
|
123
|
+
validateSourceDirectory(sourcePath);
|
|
124
|
+
// Determine bundle name
|
|
125
|
+
const bundleName = determineBundleName(projectRoot, options.name);
|
|
126
|
+
// Create tarball
|
|
127
|
+
const tarballPath = await createTarball(sourcePath, projectRoot, bundleName);
|
|
128
|
+
// Upload bundle
|
|
129
|
+
const uploadResult = await uploadBundle(serverUrl, bundleName, tarballPath);
|
|
130
|
+
// Start bundle if requested
|
|
131
|
+
if (options.start) {
|
|
132
|
+
await startBundle(serverUrl, uploadResult.bundleName);
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
console.log(chalk.blue(`Use 'tonk start ${uploadResult.bundleName}' to start the bundle.`));
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
console.error(chalk.red(`Error: ${error instanceof Error ? error.message : String(error)}`));
|
|
140
|
+
process.exit(1);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
export const pushCommand = new Command('push')
|
|
144
|
+
.description('Package and upload a bundle to the Tonk server')
|
|
145
|
+
.option('-u, --url <url>', 'URL of the Tonk server', 'http://localhost:7777')
|
|
146
|
+
.option('-n, --name <name>', 'Name for the bundle (defaults to directory name)')
|
|
147
|
+
.option('-d, --dir <dir>', 'Directory to bundle (defaults to ./dist)')
|
|
148
|
+
.option('-s, --start', 'Start the bundle after upload')
|
|
149
|
+
.action(handlePushCommand);
|
|
150
|
+
//# sourceMappingURL=push.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"push.js","sourceRoot":"","sources":["../../src/commands/push.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAWlC,eAAO,MAAM,YAAY,SAgDrB,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import fetch from 'node-fetch';
|
|
4
|
+
export const startCommand = new Command('start')
|
|
5
|
+
.description('Start a bundle server')
|
|
6
|
+
.option('-u, --url <url>', 'URL of the Tonk server', 'http://localhost:7777')
|
|
7
|
+
.option('-p, --port <port>', 'Port for the bundle server (optional)')
|
|
8
|
+
.argument('<bundleName>', 'Name of the bundle to start')
|
|
9
|
+
.action(async (bundleName, options) => {
|
|
10
|
+
const serverUrl = options.url;
|
|
11
|
+
try {
|
|
12
|
+
console.log(chalk.blue(`Starting bundle server for ${bundleName}...`));
|
|
13
|
+
const requestBody = {
|
|
14
|
+
bundleName,
|
|
15
|
+
};
|
|
16
|
+
// Add port if specified
|
|
17
|
+
if (options.port) {
|
|
18
|
+
requestBody.port = parseInt(options.port, 10);
|
|
19
|
+
}
|
|
20
|
+
const response = await fetch(`${serverUrl}/start`, {
|
|
21
|
+
method: 'POST',
|
|
22
|
+
headers: {
|
|
23
|
+
'Content-Type': 'application/json',
|
|
24
|
+
},
|
|
25
|
+
body: JSON.stringify(requestBody),
|
|
26
|
+
});
|
|
27
|
+
if (!response.ok) {
|
|
28
|
+
const errorText = await response.text();
|
|
29
|
+
throw new Error(`Server error: ${errorText}`);
|
|
30
|
+
}
|
|
31
|
+
const result = (await response.json());
|
|
32
|
+
console.log(chalk.green('Bundle server started successfully!'));
|
|
33
|
+
console.log(chalk.green(`Server ID: ${result.id}`));
|
|
34
|
+
console.log(chalk.green(`Running on port: ${result.port}`));
|
|
35
|
+
console.log(chalk.green(`Status: ${result.status}`));
|
|
36
|
+
console.log(chalk.blue(`Use 'tonk ps' to see all running servers`));
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
console.error(chalk.red(`Error: ${error instanceof Error ? error.message : String(error)}`));
|
|
40
|
+
process.exit(1);
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
//# sourceMappingURL=start.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,MAAM,YAAY,CAAC;AAS/B,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;KAC7C,WAAW,CAAC,uBAAuB,CAAC;KACpC,MAAM,CAAC,iBAAiB,EAAE,wBAAwB,EAAE,uBAAuB,CAAC;KAC5E,MAAM,CAAC,mBAAmB,EAAE,uCAAuC,CAAC;KACpE,QAAQ,CAAC,cAAc,EAAE,6BAA6B,CAAC;KACvD,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE;IACpC,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC;IAE9B,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,8BAA8B,UAAU,KAAK,CAAC,CAAC,CAAC;QAEvE,MAAM,WAAW,GAAwC;YACvD,UAAU;SACX,CAAC;QAEF,wBAAwB;QACxB,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,WAAW,CAAC,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAChD,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,SAAS,QAAQ,EAAE;YACjD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;SAClC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,iBAAiB,SAAS,EAAE,CAAC,CAAC;QAChD,CAAC;QAED,MAAM,MAAM,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAgB,CAAC;QAEtD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC,CAAC;QAChE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,oBAAoB,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC,CAAC;IACtE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CACP,UAAU,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACnE,CACF,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
|
package/dist/tonk.js
CHANGED
|
@@ -1,26 +1,85 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
|
-
import { configCommand } from './commands/config.js';
|
|
3
2
|
import { createCommand } from './commands/create.js';
|
|
4
|
-
import { deployCommand } from './commands/deploy.js';
|
|
5
|
-
import { devCommand } from './commands/dev.js';
|
|
6
3
|
import { helloCommand } from './commands/hello.js';
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
4
|
+
import { lsCommand } from './commands/ls.js';
|
|
5
|
+
import { psCommand } from './commands/ps.js';
|
|
6
|
+
import { startCommand } from './commands/start.js';
|
|
7
|
+
import { killCommand } from './commands/kill.js';
|
|
8
|
+
import { pushCommand } from './commands/push.js';
|
|
9
|
+
import { createServer } from '@tonk/server';
|
|
10
|
+
import chalk from 'chalk';
|
|
11
|
+
import envPaths from 'env-paths';
|
|
12
|
+
import fs from 'node:fs';
|
|
13
|
+
import path from 'node:path';
|
|
9
14
|
const program = new Command();
|
|
10
15
|
// Main program setup
|
|
11
16
|
program
|
|
12
17
|
.name('tonk')
|
|
13
18
|
.description('The tonk cli helps you to manage your tonk stack and apps.')
|
|
14
19
|
.version('0.1.2')
|
|
20
|
+
.option('-d', 'Run the Tonk daemon')
|
|
15
21
|
.on('--help', () => {
|
|
16
22
|
console.log('\nWork in progress!');
|
|
17
23
|
});
|
|
18
|
-
program.addCommand(createCommand);
|
|
19
|
-
program.addCommand(devCommand);
|
|
20
|
-
program.addCommand(serveCommand);
|
|
21
|
-
program.addCommand(deployCommand);
|
|
22
|
-
program.addCommand(configCommand);
|
|
23
24
|
program.addCommand(helloCommand);
|
|
24
|
-
program.addCommand(
|
|
25
|
-
|
|
25
|
+
program.addCommand(createCommand);
|
|
26
|
+
// Add bundle management commands
|
|
27
|
+
program.addCommand(pushCommand);
|
|
28
|
+
program.addCommand(startCommand);
|
|
29
|
+
program.addCommand(psCommand);
|
|
30
|
+
program.addCommand(lsCommand);
|
|
31
|
+
program.addCommand(killCommand);
|
|
32
|
+
const startServer = async () => {
|
|
33
|
+
try {
|
|
34
|
+
// Create paths for Tonk daemon home
|
|
35
|
+
const paths = envPaths('tonk', { suffix: '' });
|
|
36
|
+
const tonkHome = paths.data;
|
|
37
|
+
const bundlesPath = path.join(tonkHome, 'bundles');
|
|
38
|
+
const storesPath = path.join(tonkHome, 'stores');
|
|
39
|
+
// Pretty print the Tonk home location
|
|
40
|
+
console.log(chalk.cyan('🏠 Tonk Home:'), chalk.bold.green(tonkHome));
|
|
41
|
+
// Ensure directories exist
|
|
42
|
+
for (const dir of [tonkHome, bundlesPath, storesPath]) {
|
|
43
|
+
if (!fs.existsSync(dir)) {
|
|
44
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
console.log(chalk.blue('Starting TonkServer daemon...'));
|
|
48
|
+
console.log(chalk.blue(`Using Tonk home directory: ${tonkHome}`));
|
|
49
|
+
// Create server configuration matching ServerOptions interface
|
|
50
|
+
const serverConfig = {
|
|
51
|
+
bundlesPath,
|
|
52
|
+
dirPath: storesPath,
|
|
53
|
+
};
|
|
54
|
+
// Start the server
|
|
55
|
+
const server = await createServer(serverConfig);
|
|
56
|
+
// Handle process termination
|
|
57
|
+
const cleanup = async () => {
|
|
58
|
+
console.log(chalk.yellow('\nShutting down server...'));
|
|
59
|
+
try {
|
|
60
|
+
await server.stop();
|
|
61
|
+
console.log(chalk.green('Server shutdown complete.'));
|
|
62
|
+
// Force exit after brief delay to ensure any pending operations complete
|
|
63
|
+
setTimeout(() => process.exit(0), 500);
|
|
64
|
+
}
|
|
65
|
+
catch (err) {
|
|
66
|
+
console.error(chalk.red('Error during shutdown:'), err);
|
|
67
|
+
// Force exit even on error
|
|
68
|
+
process.exit(1);
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
process.on('SIGINT', cleanup);
|
|
72
|
+
process.on('SIGTERM', cleanup);
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
console.error(chalk.red('Failed to start TonkServer daemon:'), error);
|
|
76
|
+
process.exit(1);
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
if (process.argv.length <= 3 && process.argv[2] === '-d') {
|
|
80
|
+
startServer();
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
program.parse(process.argv);
|
|
84
|
+
}
|
|
26
85
|
//# 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":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tonk/cli",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "The Tonk stack command line utility",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -36,20 +36,25 @@
|
|
|
36
36
|
"posttest": "npm run lint"
|
|
37
37
|
},
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"@tonk/server": "^0.1
|
|
39
|
+
"@tonk/server": "^0.2.1",
|
|
40
40
|
"chalk": "^5.3.0",
|
|
41
41
|
"commander": "^11.1.0",
|
|
42
42
|
"dotenv": "^16.4.7",
|
|
43
|
-
"
|
|
43
|
+
"env-paths": "^3.0.0",
|
|
44
44
|
"fastmcp": "^1.20.2",
|
|
45
|
+
"form-data-encoder": "^4.0.2",
|
|
46
|
+
"formdata-node": "^6.0.3",
|
|
45
47
|
"fs-extra": "^11.2.0",
|
|
46
48
|
"gradient-string": "^2.0.2",
|
|
49
|
+
"ink": "^5.2.0",
|
|
47
50
|
"inquirer": "^9.2.12",
|
|
48
|
-
"@tonk/keepsync": "^0.3.7",
|
|
49
51
|
"listr2": "^8.2.5",
|
|
50
52
|
"marked": "^15.0.7",
|
|
53
|
+
"node-fetch": "^3.3.2",
|
|
51
54
|
"open": "^10.1.0",
|
|
52
55
|
"ora": "^7.0.1",
|
|
56
|
+
"react": "18",
|
|
57
|
+
"tar": "^6.2.1",
|
|
53
58
|
"zod": "^3.24.2"
|
|
54
59
|
},
|
|
55
60
|
"devDependencies": {
|
|
@@ -57,6 +62,9 @@
|
|
|
57
62
|
"@types/gradient-string": "^1.1.5",
|
|
58
63
|
"@types/inquirer": "^9.0.7",
|
|
59
64
|
"@types/node": "^22.7.5",
|
|
65
|
+
"@types/node-fetch": "^2.6.9",
|
|
66
|
+
"@types/react": "18",
|
|
67
|
+
"@types/tar": "^6.1.11",
|
|
60
68
|
"gts": "^6.0.2",
|
|
61
69
|
"rimraf": "^5.0.5",
|
|
62
70
|
"tsup": "^8.0.1",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAOlC,eAAO,MAAM,aAAa,SA+ZtB,CAAC"}
|