@takyonic/cli 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/README.md +37 -0
  2. package/dist/commands/generate.d.ts +3 -0
  3. package/dist/commands/generate.d.ts.map +1 -0
  4. package/dist/commands/generate.js +107 -0
  5. package/dist/commands/generate.js.map +1 -0
  6. package/dist/commands/init.d.ts +3 -0
  7. package/dist/commands/init.d.ts.map +1 -0
  8. package/dist/commands/init.js +98 -0
  9. package/dist/commands/init.js.map +1 -0
  10. package/dist/commands/inspect.d.ts +2 -0
  11. package/dist/commands/inspect.d.ts.map +1 -0
  12. package/dist/commands/inspect.js +77 -0
  13. package/dist/commands/inspect.js.map +1 -0
  14. package/dist/commands/pull.d.ts +3 -0
  15. package/dist/commands/pull.d.ts.map +1 -0
  16. package/dist/commands/pull.js +100 -0
  17. package/dist/commands/pull.js.map +1 -0
  18. package/dist/commands/push.d.ts +3 -0
  19. package/dist/commands/push.d.ts.map +1 -0
  20. package/dist/commands/push.js +135 -0
  21. package/dist/commands/push.js.map +1 -0
  22. package/dist/dsl-to-json.d.ts +28 -0
  23. package/dist/dsl-to-json.d.ts.map +1 -0
  24. package/dist/dsl-to-json.js +69 -0
  25. package/dist/dsl-to-json.js.map +1 -0
  26. package/dist/generator.d.ts +19 -0
  27. package/dist/generator.d.ts.map +1 -0
  28. package/dist/generator.js +161 -0
  29. package/dist/generator.js.map +1 -0
  30. package/dist/index.d.ts +3 -0
  31. package/dist/index.d.ts.map +1 -0
  32. package/dist/index.js +30 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/parser.d.ts +36 -0
  35. package/dist/parser.d.ts.map +1 -0
  36. package/dist/parser.js +234 -0
  37. package/dist/parser.js.map +1 -0
  38. package/dist/type-mapper.d.ts +17 -0
  39. package/dist/type-mapper.d.ts.map +1 -0
  40. package/dist/type-mapper.js +90 -0
  41. package/dist/type-mapper.js.map +1 -0
  42. package/generated/index.ts +89 -0
  43. package/package.json +33 -0
  44. package/src/commands/generate.ts +78 -0
  45. package/src/commands/init.ts +63 -0
  46. package/src/commands/inspect.ts +98 -0
  47. package/src/commands/pull.ts +68 -0
  48. package/src/commands/push.ts +106 -0
  49. package/src/dsl-to-json.ts +99 -0
  50. package/src/generator.ts +178 -0
  51. package/src/index.ts +32 -0
  52. package/src/parser.ts +285 -0
  53. package/src/test-bulk.ts +38 -0
  54. package/src/test-load.ts +28 -0
  55. package/src/type-mapper.ts +90 -0
  56. package/tsconfig.json +21 -0
package/README.md ADDED
@@ -0,0 +1,37 @@
1
+ # Takyonic CLI
2
+
3
+ Developer tools for Takyonic Smart Cache Proxy.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install
9
+ ```
10
+
11
+ ## Usage
12
+
13
+ Set the `DATABASE_URL` environment variable:
14
+
15
+ ```bash
16
+ export DATABASE_URL=postgres://takyonic:secret@localhost:5432/takyonic_db
17
+ ```
18
+
19
+ Or create a `.env` file:
20
+
21
+ ```bash
22
+ cp .env.example .env
23
+ # Edit .env with your database URL
24
+ ```
25
+
26
+ ## Commands
27
+
28
+ ### Inspect Database Schema
29
+
30
+ ```bash
31
+ npm run start inspect
32
+ # or
33
+ ts-node src/index.ts inspect
34
+ ```
35
+
36
+ This command connects to PostgreSQL and displays the database schema, including all tables, columns, and data types.
37
+
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const generateCommand: Command;
3
+ //# sourceMappingURL=generate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,eAAO,MAAM,eAAe,SAoExB,CAAC"}
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.generateCommand = void 0;
40
+ const commander_1 = require("commander");
41
+ const chalk_1 = __importDefault(require("chalk"));
42
+ const fs = __importStar(require("fs"));
43
+ const path = __importStar(require("path"));
44
+ const generator_1 = require("../generator");
45
+ const parser_1 = require("../parser");
46
+ const dsl_to_json_1 = require("../dsl-to-json");
47
+ exports.generateCommand = new commander_1.Command('generate')
48
+ .description('Generate TypeScript client code from .takyonic schema file')
49
+ .action(async () => {
50
+ // Determine input file (.takyonic in project root)
51
+ const inputFile = path.join(process.cwd(), '.takyonic');
52
+ if (!fs.existsSync(inputFile)) {
53
+ console.error(chalk_1.default.red(`Error: ${inputFile} not found`));
54
+ console.error(chalk_1.default.yellow('Please run "takyonic init" to create a .takyonic file'));
55
+ console.error(chalk_1.default.yellow('Or run "takyonic pull" to fetch schema from server'));
56
+ process.exit(1);
57
+ }
58
+ try {
59
+ console.log(chalk_1.default.blue('⚡ Takyonic: Reading schema from .takyonic file...\n'));
60
+ // Read and parse DSL file
61
+ const fileContent = fs.readFileSync(inputFile, 'utf-8');
62
+ const dslSchema = (0, parser_1.parseTakyonicSchema)(fileContent);
63
+ if (!dslSchema.tables || dslSchema.tables.length === 0) {
64
+ console.log(chalk_1.default.yellow('No tables found in schema'));
65
+ console.log(chalk_1.default.yellow('Cannot generate code without tables.'));
66
+ process.exit(1);
67
+ }
68
+ // Convert DSL to JSON format for generator
69
+ const schema = (0, dsl_to_json_1.dslToJson)(dslSchema);
70
+ console.log(chalk_1.default.blue('⚡ Takyonic: Generating TypeScript code...\n'));
71
+ // Generate TypeScript code
72
+ const generatedCode = (0, generator_1.generateTypeScript)(schema);
73
+ // Determine output directory (cli/generated)
74
+ const outputDir = path.join(process.cwd(), 'generated');
75
+ const outputFile = path.join(outputDir, 'index.ts');
76
+ // Create directory if it doesn't exist
77
+ if (!fs.existsSync(outputDir)) {
78
+ fs.mkdirSync(outputDir, { recursive: true });
79
+ console.log(chalk_1.default.green(`Created directory: ${outputDir}`));
80
+ }
81
+ // Write file
82
+ fs.writeFileSync(outputFile, generatedCode, 'utf-8');
83
+ console.log(chalk_1.default.green(`✓ Generated TypeScript client code`));
84
+ console.log(chalk_1.default.gray(` Output: ${outputFile}`));
85
+ console.log(chalk_1.default.gray(` Tables: ${schema.length}`));
86
+ const totalColumns = schema.reduce((sum, table) => sum + table.columns.length, 0);
87
+ console.log(chalk_1.default.gray(` Columns: ${totalColumns}\n`));
88
+ }
89
+ catch (error) {
90
+ console.error(chalk_1.default.red('⚡ Takyonic: Error generating code:'));
91
+ if (error instanceof parser_1.ParseError) {
92
+ console.error(chalk_1.default.red(`Parse error: ${error.message}`));
93
+ if (error.line) {
94
+ console.error(chalk_1.default.yellow(` Line: ${error.line}`));
95
+ }
96
+ console.error(chalk_1.default.yellow('Please check your .takyonic file syntax'));
97
+ }
98
+ else if (error instanceof Error) {
99
+ console.error(chalk_1.default.red(error.message));
100
+ }
101
+ else {
102
+ console.error(chalk_1.default.red(String(error)));
103
+ }
104
+ process.exit(1);
105
+ }
106
+ });
107
+ //# sourceMappingURL=generate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const initCommand: Command;
3
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4BpC,eAAO,MAAM,WAAW,SAiCpB,CAAC"}
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.initCommand = void 0;
40
+ const commander_1 = require("commander");
41
+ const chalk_1 = __importDefault(require("chalk"));
42
+ const fs = __importStar(require("fs"));
43
+ const path = __importStar(require("path"));
44
+ const DEFAULT_TAKYONIC_FILE = `// Takyonic Core Configuration
45
+ engine {
46
+ provider = "takyonic"
47
+ db = env("DATABASE_URL")
48
+ cache = "in-memory"
49
+ port = 8080
50
+ }
51
+
52
+ // Takyonic Data Definitions
53
+ table products {
54
+ id string @primary
55
+ name string
56
+ price int @default(0)
57
+ data json
58
+ }
59
+
60
+ table orders {
61
+ id string @primary
62
+ amount float
63
+ status string @default("pending")
64
+ }
65
+ `;
66
+ exports.initCommand = new commander_1.Command('init')
67
+ .description('Initialize a new Takyonic project with a .takyonic schema file')
68
+ .action(async () => {
69
+ const takyonicFile = path.join(process.cwd(), '.takyonic');
70
+ // Check if .takyonic file already exists
71
+ if (fs.existsSync(takyonicFile)) {
72
+ console.error(chalk_1.default.red('Error: .takyonic file already exists'));
73
+ console.error(chalk_1.default.yellow(` File: ${takyonicFile}`));
74
+ console.error(chalk_1.default.yellow(' Remove it first or use a different directory\n'));
75
+ process.exit(1);
76
+ }
77
+ try {
78
+ // Write default .takyonic file
79
+ fs.writeFileSync(takyonicFile, DEFAULT_TAKYONIC_FILE, 'utf-8');
80
+ console.log(chalk_1.default.green('✓ Takyonic project initialized'));
81
+ console.log(chalk_1.default.gray(` Created: ${takyonicFile}\n`));
82
+ console.log(chalk_1.default.blue('⚡ Next steps:'));
83
+ console.log(chalk_1.default.gray(' 1. Edit .takyonic to define your tables'));
84
+ console.log(chalk_1.default.gray(' 2. Run "takyonic push" to sync schema to server'));
85
+ console.log(chalk_1.default.gray(' 3. Run "takyonic generate" to create TypeScript client\n'));
86
+ }
87
+ catch (error) {
88
+ console.error(chalk_1.default.red('⚡ Takyonic: Error initializing project:'));
89
+ if (error instanceof Error) {
90
+ console.error(chalk_1.default.red(error.message));
91
+ }
92
+ else {
93
+ console.error(chalk_1.default.red(String(error)));
94
+ }
95
+ process.exit(1);
96
+ }
97
+ });
98
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAAoC;AACpC,kDAA0B;AAC1B,uCAAyB;AACzB,2CAA6B;AAE7B,MAAM,qBAAqB,GAAG;;;;;;;;;;;;;;;;;;;;;CAqB7B,CAAC;AAEW,QAAA,WAAW,GAAG,IAAI,mBAAO,CAAC,MAAM,CAAC;KAC3C,WAAW,CAAC,gEAAgE,CAAC;KAC7E,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,CAAC,CAAC;IAE3D,yCAAyC;IACzC,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC,CAAC;QACjE,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,MAAM,CAAC,WAAW,YAAY,EAAE,CAAC,CAAC,CAAC;QACvD,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,MAAM,CAAC,kDAAkD,CAAC,CAAC,CAAC;QAChF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;QACH,+BAA+B;QAC/B,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,qBAAqB,EAAE,OAAO,CAAC,CAAC;QAE/D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,cAAc,YAAY,IAAI,CAAC,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC,CAAC;QACrE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC,CAAC;QAC7E,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC,CAAC;IAExF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC,CAAC;QACpE,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAC1C,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function inspectCommand(): Promise<void>;
2
+ //# sourceMappingURL=inspect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspect.d.ts","sourceRoot":"","sources":["../../src/commands/inspect.ts"],"names":[],"mappings":"AAaA,wBAAsB,cAAc,kBAoFnC"}
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.inspectCommand = inspectCommand;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ async function inspectCommand() {
9
+ const takyonicUrl = process.env.TAKYONIC_URL || 'http://localhost:8080';
10
+ const apiKey = process.env.TAKYONIC_API_KEY;
11
+ if (!apiKey) {
12
+ console.error(chalk_1.default.red('Error: TAKYONIC_API_KEY environment variable is not set'));
13
+ console.error(chalk_1.default.yellow('Please set TAKYONIC_API_KEY to your API key'));
14
+ process.exit(1);
15
+ }
16
+ try {
17
+ console.log(chalk_1.default.blue('⚡ Takyonic: Fetching schema from server...\n'));
18
+ const response = await fetch(`${takyonicUrl}/v1/schema`, {
19
+ headers: {
20
+ 'Authorization': `Bearer ${apiKey}`,
21
+ },
22
+ });
23
+ if (!response.ok) {
24
+ if (response.status === 404) {
25
+ console.error(chalk_1.default.red('Error: Server endpoint not found'));
26
+ console.error(chalk_1.default.yellow('Please ensure Takyonic server is running and accessible'));
27
+ process.exit(1);
28
+ }
29
+ const errorText = await response.text();
30
+ console.error(chalk_1.default.red(`Error: Server returned status ${response.status}`));
31
+ console.error(chalk_1.default.red(errorText));
32
+ process.exit(1);
33
+ }
34
+ const schema = (await response.json());
35
+ if (schema.length === 0) {
36
+ console.log(chalk_1.default.yellow('No tables found in the database'));
37
+ return;
38
+ }
39
+ // Display schema
40
+ console.log(chalk_1.default.bold.cyan('Database Schema:\n'));
41
+ for (const table of schema) {
42
+ console.log(chalk_1.default.bold.magenta(`Table: ${table.name}`));
43
+ console.log(chalk_1.default.gray('─'.repeat(80)));
44
+ // Table header
45
+ console.log(chalk_1.default.bold(`${'Column Name'.padEnd(30)} ${'Data Type'.padEnd(20)} ${'Nullable'.padEnd(10)}`));
46
+ console.log(chalk_1.default.gray('─'.repeat(80)));
47
+ // Columns
48
+ for (const col of table.columns) {
49
+ const nullable = col.nullable
50
+ ? chalk_1.default.yellow('YES')
51
+ : chalk_1.default.green('NO');
52
+ console.log(`${col.name.padEnd(30)} ${col.data_type.padEnd(20)} ${nullable}`);
53
+ }
54
+ console.log('');
55
+ }
56
+ const totalColumns = schema.reduce((sum, table) => sum + table.columns.length, 0);
57
+ console.log(chalk_1.default.gray(`Total: ${schema.length} table(s), ${totalColumns} column(s)\n`));
58
+ }
59
+ catch (error) {
60
+ console.error(chalk_1.default.red('⚡ Takyonic: Error fetching schema:'));
61
+ if (error instanceof Error) {
62
+ if (error.message.includes('fetch')) {
63
+ console.error(chalk_1.default.red('Failed to connect to Takyonic server'));
64
+ console.error(chalk_1.default.yellow(`Please ensure the server is running at ${takyonicUrl}`));
65
+ console.error(chalk_1.default.yellow('You can set TAKYONIC_URL environment variable to specify a different URL'));
66
+ }
67
+ else {
68
+ console.error(chalk_1.default.red(error.message));
69
+ }
70
+ }
71
+ else {
72
+ console.error(chalk_1.default.red(String(error)));
73
+ }
74
+ process.exit(1);
75
+ }
76
+ }
77
+ //# sourceMappingURL=inspect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspect.js","sourceRoot":"","sources":["../../src/commands/inspect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const pullCommand: Command;
3
+ //# sourceMappingURL=pull.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../src/commands/pull.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,eAAO,MAAM,WAAW,SA6DpB,CAAC"}
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.pullCommand = void 0;
40
+ const commander_1 = require("commander");
41
+ const chalk_1 = __importDefault(require("chalk"));
42
+ const fs = __importStar(require("fs"));
43
+ const path = __importStar(require("path"));
44
+ const sdk_1 = require("@takyonic/sdk");
45
+ exports.pullCommand = new commander_1.Command('pull')
46
+ .description('Pull schema from Takyonic server and save to .takyonic file')
47
+ .action(async () => {
48
+ const takyonicUrl = process.env.TAKYONIC_URL || 'http://localhost:8080';
49
+ const apiKey = process.env.TAKYONIC_API_KEY;
50
+ if (!apiKey) {
51
+ console.error(chalk_1.default.red('Error: TAKYONIC_API_KEY environment variable is not set'));
52
+ console.error(chalk_1.default.yellow('Please set TAKYONIC_API_KEY to your API key'));
53
+ process.exit(1);
54
+ }
55
+ try {
56
+ console.log(chalk_1.default.blue('⚡ Takyonic: Pulling schema from server...\n'));
57
+ // Use SDK to fetch pre-formatted DSL from server
58
+ const client = new sdk_1.TakyonicClient({
59
+ endpoint: takyonicUrl,
60
+ token: apiKey,
61
+ });
62
+ // Fetch the DSL string directly from the Rust backend
63
+ // This is the authoritative, pre-formatted schema
64
+ const dslContent = await client.schemaDsl();
65
+ if (!dslContent || dslContent.trim().length === 0) {
66
+ console.log(chalk_1.default.yellow('No schema found on the server'));
67
+ console.log(chalk_1.default.yellow('Cannot save empty schema.'));
68
+ process.exit(1);
69
+ }
70
+ // Determine output file (.takyonic in project root)
71
+ const outputFile = path.join(process.cwd(), '.takyonic');
72
+ // Write the pre-formatted DSL directly to file
73
+ fs.writeFileSync(outputFile, dslContent, 'utf-8');
74
+ // Count tables for display
75
+ const tableCount = (dslContent.match(/^table\s+\w+\s*\{/gm) || []).length;
76
+ console.log(chalk_1.default.green(`✓ Schema pulled successfully`));
77
+ console.log(chalk_1.default.gray(` Output: ${outputFile}`));
78
+ console.log(chalk_1.default.gray(` Tables: ${tableCount}\n`));
79
+ }
80
+ catch (error) {
81
+ console.error(chalk_1.default.red('⚡ Takyonic: Error pulling schema:'));
82
+ if (error instanceof sdk_1.AuthenticationError) {
83
+ console.error(chalk_1.default.red('Error: Unauthorized'));
84
+ console.error(chalk_1.default.yellow('Please check your TAKYONIC_API_KEY'));
85
+ }
86
+ else if (error instanceof sdk_1.NetworkError) {
87
+ console.error(chalk_1.default.red('Failed to connect to Takyonic server'));
88
+ console.error(chalk_1.default.yellow(`Please ensure the server is running at ${takyonicUrl}`));
89
+ console.error(chalk_1.default.yellow('You can set TAKYONIC_URL environment variable to specify a different URL'));
90
+ }
91
+ else if (error instanceof Error) {
92
+ console.error(chalk_1.default.red(error.message));
93
+ }
94
+ else {
95
+ console.error(chalk_1.default.red(String(error)));
96
+ }
97
+ process.exit(1);
98
+ }
99
+ });
100
+ //# sourceMappingURL=pull.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pull.js","sourceRoot":"","sources":["../../src/commands/pull.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const pushCommand: Command;
3
+ //# sourceMappingURL=push.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../src/commands/push.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,eAAO,MAAM,WAAW,SAiGpB,CAAC"}
@@ -0,0 +1,135 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.pushCommand = void 0;
40
+ const commander_1 = require("commander");
41
+ const chalk_1 = __importDefault(require("chalk"));
42
+ const fs = __importStar(require("fs"));
43
+ const path = __importStar(require("path"));
44
+ const sdk_1 = require("@takyonic/sdk");
45
+ const parser_1 = require("../parser");
46
+ const dsl_to_json_1 = require("../dsl-to-json");
47
+ exports.pushCommand = new commander_1.Command('push')
48
+ .description('Push schema from .takyonic file to Takyonic server')
49
+ .action(async () => {
50
+ const takyonicUrl = process.env.TAKYONIC_URL || 'http://localhost:8080';
51
+ const adminSecret = process.env.TAKYONIC_ADMIN_SECRET;
52
+ if (!adminSecret) {
53
+ console.error(chalk_1.default.red('Error: TAKYONIC_ADMIN_SECRET environment variable is not set'));
54
+ console.error(chalk_1.default.yellow('Please set TAKYONIC_ADMIN_SECRET to your admin secret'));
55
+ process.exit(1);
56
+ }
57
+ // Determine input file (.takyonic in project root)
58
+ const inputFile = path.join(process.cwd(), '.takyonic');
59
+ if (!fs.existsSync(inputFile)) {
60
+ console.error(chalk_1.default.red(`Error: ${inputFile} not found`));
61
+ console.error(chalk_1.default.yellow('Please run "takyonic init" to create a .takyonic file'));
62
+ console.error(chalk_1.default.yellow('Or run "takyonic pull" to fetch schema from server'));
63
+ process.exit(1);
64
+ }
65
+ try {
66
+ console.log(chalk_1.default.blue('⚡ Takyonic: Reading schema from .takyonic file...\n'));
67
+ // Read and parse DSL file
68
+ const fileContent = fs.readFileSync(inputFile, 'utf-8');
69
+ const dslSchema = (0, parser_1.parseTakyonicSchema)(fileContent);
70
+ if (!dslSchema.tables || dslSchema.tables.length === 0) {
71
+ console.error(chalk_1.default.red('Error: No tables found in schema'));
72
+ console.error(chalk_1.default.yellow('Please define at least one table in your .takyonic file'));
73
+ process.exit(1);
74
+ }
75
+ // Convert DSL to JSON format for server
76
+ const schema = (0, dsl_to_json_1.dslToJson)(dslSchema);
77
+ console.log(chalk_1.default.blue('⚡ Takyonic Engine: Synchronizing schema...\n'));
78
+ console.log(chalk_1.default.gray(` Tables: ${schema.length}\n`));
79
+ // Use AdminClient from SDK to push schema
80
+ const admin = new sdk_1.AdminClient({
81
+ endpoint: takyonicUrl,
82
+ adminSecret: adminSecret,
83
+ });
84
+ const result = await admin.migrate(schema);
85
+ console.log(chalk_1.default.green(`✓ Migration completed successfully`));
86
+ console.log(chalk_1.default.gray(` Server: ${takyonicUrl}`));
87
+ if (result.tables_created && result.tables_created.length > 0) {
88
+ console.log(chalk_1.default.green(` Tables created: ${result.tables_created.join(', ')}`));
89
+ }
90
+ if (result.columns_added && Object.keys(result.columns_added).length > 0) {
91
+ for (const [table, columns] of Object.entries(result.columns_added)) {
92
+ console.log(chalk_1.default.yellow(` Columns added to ${table}: ${columns.join(', ')}`));
93
+ }
94
+ }
95
+ if (result.tables_updated && result.tables_updated.length > 0) {
96
+ console.log(chalk_1.default.gray(` Tables updated: ${result.tables_updated.join(', ')}`));
97
+ }
98
+ if (result.message) {
99
+ console.log(chalk_1.default.gray(` ${result.message}\n`));
100
+ }
101
+ else {
102
+ console.log(); // New line
103
+ }
104
+ }
105
+ catch (error) {
106
+ console.error(chalk_1.default.red('⚡ Takyonic: Error pushing schema:'));
107
+ if (error instanceof parser_1.ParseError) {
108
+ console.error(chalk_1.default.red(`Parse error: ${error.message}`));
109
+ if (error.line) {
110
+ console.error(chalk_1.default.yellow(` Line: ${error.line}`));
111
+ }
112
+ console.error(chalk_1.default.yellow('Please check your .takyonic file syntax'));
113
+ }
114
+ else if (error instanceof sdk_1.AuthenticationError) {
115
+ console.error(chalk_1.default.red('Error: Unauthorized'));
116
+ console.error(chalk_1.default.yellow('Please check your TAKYONIC_ADMIN_SECRET'));
117
+ }
118
+ else if (error instanceof sdk_1.ValidationError) {
119
+ console.error(chalk_1.default.red(`Validation error: ${error.message}`));
120
+ }
121
+ else if (error instanceof sdk_1.NetworkError) {
122
+ console.error(chalk_1.default.red('Failed to connect to Takyonic server'));
123
+ console.error(chalk_1.default.yellow(`Please ensure the server is running at ${takyonicUrl}`));
124
+ console.error(chalk_1.default.yellow('You can set TAKYONIC_URL environment variable to specify a different URL'));
125
+ }
126
+ else if (error instanceof Error) {
127
+ console.error(chalk_1.default.red(error.message));
128
+ }
129
+ else {
130
+ console.error(chalk_1.default.red(String(error)));
131
+ }
132
+ process.exit(1);
133
+ }
134
+ });
135
+ //# 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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"}