@tinybirdco/sdk 0.0.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.
Files changed (258) hide show
  1. package/README.md +518 -0
  2. package/bin/tinybird.js +7 -0
  3. package/dist/api/branches.d.ts +98 -0
  4. package/dist/api/branches.d.ts.map +1 -0
  5. package/dist/api/branches.js +203 -0
  6. package/dist/api/branches.js.map +1 -0
  7. package/dist/api/branches.test.d.ts +2 -0
  8. package/dist/api/branches.test.d.ts.map +1 -0
  9. package/dist/api/branches.test.js +286 -0
  10. package/dist/api/branches.test.js.map +1 -0
  11. package/dist/api/build.d.ts +130 -0
  12. package/dist/api/build.d.ts.map +1 -0
  13. package/dist/api/build.js +143 -0
  14. package/dist/api/build.js.map +1 -0
  15. package/dist/api/build.test.d.ts +2 -0
  16. package/dist/api/build.test.d.ts.map +1 -0
  17. package/dist/api/build.test.js +138 -0
  18. package/dist/api/build.test.js.map +1 -0
  19. package/dist/api/deploy.d.ts +39 -0
  20. package/dist/api/deploy.d.ts.map +1 -0
  21. package/dist/api/deploy.js +135 -0
  22. package/dist/api/deploy.js.map +1 -0
  23. package/dist/api/deploy.test.d.ts +2 -0
  24. package/dist/api/deploy.test.d.ts.map +1 -0
  25. package/dist/api/deploy.test.js +118 -0
  26. package/dist/api/deploy.test.js.map +1 -0
  27. package/dist/api/workspaces.d.ts +46 -0
  28. package/dist/api/workspaces.d.ts.map +1 -0
  29. package/dist/api/workspaces.js +39 -0
  30. package/dist/api/workspaces.js.map +1 -0
  31. package/dist/api/workspaces.test.d.ts +2 -0
  32. package/dist/api/workspaces.test.d.ts.map +1 -0
  33. package/dist/api/workspaces.test.js +65 -0
  34. package/dist/api/workspaces.test.js.map +1 -0
  35. package/dist/cli/auth.d.ts +86 -0
  36. package/dist/cli/auth.d.ts.map +1 -0
  37. package/dist/cli/auth.js +284 -0
  38. package/dist/cli/auth.js.map +1 -0
  39. package/dist/cli/branch-store.d.ts +53 -0
  40. package/dist/cli/branch-store.d.ts.map +1 -0
  41. package/dist/cli/branch-store.js +91 -0
  42. package/dist/cli/branch-store.js.map +1 -0
  43. package/dist/cli/branch-store.test.d.ts +2 -0
  44. package/dist/cli/branch-store.test.d.ts.map +1 -0
  45. package/dist/cli/branch-store.test.js +115 -0
  46. package/dist/cli/branch-store.test.js.map +1 -0
  47. package/dist/cli/commands/branch.d.ts +82 -0
  48. package/dist/cli/commands/branch.d.ts.map +1 -0
  49. package/dist/cli/commands/branch.js +215 -0
  50. package/dist/cli/commands/branch.js.map +1 -0
  51. package/dist/cli/commands/build.d.ts +43 -0
  52. package/dist/cli/commands/build.d.ts.map +1 -0
  53. package/dist/cli/commands/build.js +138 -0
  54. package/dist/cli/commands/build.js.map +1 -0
  55. package/dist/cli/commands/dev.d.ts +78 -0
  56. package/dist/cli/commands/dev.d.ts.map +1 -0
  57. package/dist/cli/commands/dev.js +226 -0
  58. package/dist/cli/commands/dev.js.map +1 -0
  59. package/dist/cli/commands/init.d.ts +45 -0
  60. package/dist/cli/commands/init.d.ts.map +1 -0
  61. package/dist/cli/commands/init.js +277 -0
  62. package/dist/cli/commands/init.js.map +1 -0
  63. package/dist/cli/commands/init.test.d.ts +2 -0
  64. package/dist/cli/commands/init.test.d.ts.map +1 -0
  65. package/dist/cli/commands/init.test.js +158 -0
  66. package/dist/cli/commands/init.test.js.map +1 -0
  67. package/dist/cli/commands/login.d.ts +37 -0
  68. package/dist/cli/commands/login.d.ts.map +1 -0
  69. package/dist/cli/commands/login.js +64 -0
  70. package/dist/cli/commands/login.js.map +1 -0
  71. package/dist/cli/config.d.ts +114 -0
  72. package/dist/cli/config.d.ts.map +1 -0
  73. package/dist/cli/config.js +258 -0
  74. package/dist/cli/config.js.map +1 -0
  75. package/dist/cli/config.test.d.ts +2 -0
  76. package/dist/cli/config.test.d.ts.map +1 -0
  77. package/dist/cli/config.test.js +243 -0
  78. package/dist/cli/config.test.js.map +1 -0
  79. package/dist/cli/env.d.ts +29 -0
  80. package/dist/cli/env.d.ts.map +1 -0
  81. package/dist/cli/env.js +66 -0
  82. package/dist/cli/env.js.map +1 -0
  83. package/dist/cli/git.d.ts +29 -0
  84. package/dist/cli/git.d.ts.map +1 -0
  85. package/dist/cli/git.js +114 -0
  86. package/dist/cli/git.js.map +1 -0
  87. package/dist/cli/git.test.d.ts +2 -0
  88. package/dist/cli/git.test.d.ts.map +1 -0
  89. package/dist/cli/git.test.js +125 -0
  90. package/dist/cli/git.test.js.map +1 -0
  91. package/dist/cli/index.d.ts +7 -0
  92. package/dist/cli/index.d.ts.map +1 -0
  93. package/dist/cli/index.js +337 -0
  94. package/dist/cli/index.js.map +1 -0
  95. package/dist/cli/utils/schema-validation.d.ts +95 -0
  96. package/dist/cli/utils/schema-validation.d.ts.map +1 -0
  97. package/dist/cli/utils/schema-validation.js +175 -0
  98. package/dist/cli/utils/schema-validation.js.map +1 -0
  99. package/dist/cli/utils/schema-validation.test.d.ts +5 -0
  100. package/dist/cli/utils/schema-validation.test.d.ts.map +1 -0
  101. package/dist/cli/utils/schema-validation.test.js +173 -0
  102. package/dist/cli/utils/schema-validation.test.js.map +1 -0
  103. package/dist/client/base.d.ts +116 -0
  104. package/dist/client/base.d.ts.map +1 -0
  105. package/dist/client/base.js +328 -0
  106. package/dist/client/base.js.map +1 -0
  107. package/dist/client/types.d.ts +137 -0
  108. package/dist/client/types.d.ts.map +1 -0
  109. package/dist/client/types.js +43 -0
  110. package/dist/client/types.js.map +1 -0
  111. package/dist/generator/client.d.ts +44 -0
  112. package/dist/generator/client.d.ts.map +1 -0
  113. package/dist/generator/client.js +144 -0
  114. package/dist/generator/client.js.map +1 -0
  115. package/dist/generator/datasource.d.ts +57 -0
  116. package/dist/generator/datasource.d.ts.map +1 -0
  117. package/dist/generator/datasource.js +169 -0
  118. package/dist/generator/datasource.js.map +1 -0
  119. package/dist/generator/datasource.test.d.ts +2 -0
  120. package/dist/generator/datasource.test.d.ts.map +1 -0
  121. package/dist/generator/datasource.test.js +254 -0
  122. package/dist/generator/datasource.test.js.map +1 -0
  123. package/dist/generator/index.d.ts +131 -0
  124. package/dist/generator/index.d.ts.map +1 -0
  125. package/dist/generator/index.js +121 -0
  126. package/dist/generator/index.js.map +1 -0
  127. package/dist/generator/index.test.d.ts +2 -0
  128. package/dist/generator/index.test.d.ts.map +1 -0
  129. package/dist/generator/index.test.js +175 -0
  130. package/dist/generator/index.test.js.map +1 -0
  131. package/dist/generator/loader.d.ts +156 -0
  132. package/dist/generator/loader.d.ts.map +1 -0
  133. package/dist/generator/loader.js +295 -0
  134. package/dist/generator/loader.js.map +1 -0
  135. package/dist/generator/pipe.d.ts +72 -0
  136. package/dist/generator/pipe.d.ts.map +1 -0
  137. package/dist/generator/pipe.js +174 -0
  138. package/dist/generator/pipe.js.map +1 -0
  139. package/dist/generator/pipe.test.d.ts +2 -0
  140. package/dist/generator/pipe.test.d.ts.map +1 -0
  141. package/dist/generator/pipe.test.js +393 -0
  142. package/dist/generator/pipe.test.js.map +1 -0
  143. package/dist/index.d.ts +74 -0
  144. package/dist/index.d.ts.map +1 -0
  145. package/dist/index.js +73 -0
  146. package/dist/index.js.map +1 -0
  147. package/dist/infer/index.d.ts +202 -0
  148. package/dist/infer/index.d.ts.map +1 -0
  149. package/dist/infer/index.js +5 -0
  150. package/dist/infer/index.js.map +1 -0
  151. package/dist/schema/datasource.d.ts +135 -0
  152. package/dist/schema/datasource.d.ts.map +1 -0
  153. package/dist/schema/datasource.js +105 -0
  154. package/dist/schema/datasource.js.map +1 -0
  155. package/dist/schema/datasource.test.d.ts +2 -0
  156. package/dist/schema/datasource.test.d.ts.map +1 -0
  157. package/dist/schema/datasource.test.js +142 -0
  158. package/dist/schema/datasource.test.js.map +1 -0
  159. package/dist/schema/engines.d.ts +157 -0
  160. package/dist/schema/engines.d.ts.map +1 -0
  161. package/dist/schema/engines.js +155 -0
  162. package/dist/schema/engines.js.map +1 -0
  163. package/dist/schema/engines.test.d.ts +2 -0
  164. package/dist/schema/engines.test.d.ts.map +1 -0
  165. package/dist/schema/engines.test.js +221 -0
  166. package/dist/schema/engines.test.js.map +1 -0
  167. package/dist/schema/params.d.ts +106 -0
  168. package/dist/schema/params.d.ts.map +1 -0
  169. package/dist/schema/params.js +138 -0
  170. package/dist/schema/params.js.map +1 -0
  171. package/dist/schema/params.test.d.ts +2 -0
  172. package/dist/schema/params.test.d.ts.map +1 -0
  173. package/dist/schema/params.test.js +175 -0
  174. package/dist/schema/params.test.js.map +1 -0
  175. package/dist/schema/pipe.d.ts +436 -0
  176. package/dist/schema/pipe.d.ts.map +1 -0
  177. package/dist/schema/pipe.js +484 -0
  178. package/dist/schema/pipe.js.map +1 -0
  179. package/dist/schema/pipe.test.d.ts +2 -0
  180. package/dist/schema/pipe.test.d.ts.map +1 -0
  181. package/dist/schema/pipe.test.js +488 -0
  182. package/dist/schema/pipe.test.js.map +1 -0
  183. package/dist/schema/project.d.ts +202 -0
  184. package/dist/schema/project.d.ts.map +1 -0
  185. package/dist/schema/project.js +188 -0
  186. package/dist/schema/project.js.map +1 -0
  187. package/dist/schema/project.test.d.ts +2 -0
  188. package/dist/schema/project.test.d.ts.map +1 -0
  189. package/dist/schema/project.test.js +180 -0
  190. package/dist/schema/project.test.js.map +1 -0
  191. package/dist/schema/types.d.ts +140 -0
  192. package/dist/schema/types.d.ts.map +1 -0
  193. package/dist/schema/types.js +174 -0
  194. package/dist/schema/types.js.map +1 -0
  195. package/dist/schema/types.test.d.ts +2 -0
  196. package/dist/schema/types.test.d.ts.map +1 -0
  197. package/dist/schema/types.test.js +176 -0
  198. package/dist/schema/types.test.js.map +1 -0
  199. package/dist/test/handlers.d.ts +58 -0
  200. package/dist/test/handlers.d.ts.map +1 -0
  201. package/dist/test/handlers.js +62 -0
  202. package/dist/test/handlers.js.map +1 -0
  203. package/dist/test/setup.d.ts +5 -0
  204. package/dist/test/setup.d.ts.map +1 -0
  205. package/dist/test/setup.js +11 -0
  206. package/dist/test/setup.js.map +1 -0
  207. package/package.json +57 -0
  208. package/src/api/branches.test.ts +377 -0
  209. package/src/api/branches.ts +334 -0
  210. package/src/api/build.test.ts +216 -0
  211. package/src/api/build.ts +266 -0
  212. package/src/api/deploy.test.ts +193 -0
  213. package/src/api/deploy.ts +163 -0
  214. package/src/api/workspaces.test.ts +81 -0
  215. package/src/api/workspaces.ts +77 -0
  216. package/src/cli/auth.ts +358 -0
  217. package/src/cli/branch-store.test.ts +139 -0
  218. package/src/cli/branch-store.ts +137 -0
  219. package/src/cli/commands/branch.ts +306 -0
  220. package/src/cli/commands/build.ts +183 -0
  221. package/src/cli/commands/dev.ts +334 -0
  222. package/src/cli/commands/init.test.ts +249 -0
  223. package/src/cli/commands/init.ts +323 -0
  224. package/src/cli/commands/login.ts +98 -0
  225. package/src/cli/config.test.ts +359 -0
  226. package/src/cli/config.ts +335 -0
  227. package/src/cli/env.ts +86 -0
  228. package/src/cli/git.test.ts +147 -0
  229. package/src/cli/git.ts +125 -0
  230. package/src/cli/index.ts +382 -0
  231. package/src/cli/utils/schema-validation.test.ts +222 -0
  232. package/src/cli/utils/schema-validation.ts +272 -0
  233. package/src/client/base.ts +414 -0
  234. package/src/client/types.ts +165 -0
  235. package/src/generator/client.ts +194 -0
  236. package/src/generator/datasource.test.ts +297 -0
  237. package/src/generator/datasource.ts +217 -0
  238. package/src/generator/index.test.ts +209 -0
  239. package/src/generator/index.ts +203 -0
  240. package/src/generator/loader.ts +406 -0
  241. package/src/generator/pipe.test.ts +441 -0
  242. package/src/generator/pipe.ts +220 -0
  243. package/src/index.ts +191 -0
  244. package/src/infer/index.ts +247 -0
  245. package/src/schema/datasource.test.ts +187 -0
  246. package/src/schema/datasource.ts +195 -0
  247. package/src/schema/engines.test.ts +247 -0
  248. package/src/schema/engines.ts +271 -0
  249. package/src/schema/params.test.ts +208 -0
  250. package/src/schema/params.ts +249 -0
  251. package/src/schema/pipe.test.ts +588 -0
  252. package/src/schema/pipe.ts +832 -0
  253. package/src/schema/project.test.ts +236 -0
  254. package/src/schema/project.ts +394 -0
  255. package/src/schema/types.test.ts +212 -0
  256. package/src/schema/types.ts +366 -0
  257. package/src/test/handlers.ts +79 -0
  258. package/src/test/setup.ts +13 -0
@@ -0,0 +1,337 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Tinybird CLI
4
+ * Commands for building and deploying Tinybird projects
5
+ */
6
+ import { readFileSync } from "node:fs";
7
+ import { fileURLToPath } from "node:url";
8
+ import { dirname, resolve } from "node:path";
9
+ import { Command } from "commander";
10
+ import { runInit } from "./commands/init.js";
11
+ import { runBuild } from "./commands/build.js";
12
+ import { runDev } from "./commands/dev.js";
13
+ import { runLogin } from "./commands/login.js";
14
+ import { runBranchList, runBranchStatus, runBranchDelete, } from "./commands/branch.js";
15
+ const __dirname = dirname(fileURLToPath(import.meta.url));
16
+ const packageJson = JSON.parse(readFileSync(resolve(__dirname, "../../package.json"), "utf-8"));
17
+ const VERSION = packageJson.version;
18
+ /**
19
+ * Format timestamp for console output
20
+ */
21
+ function formatTime() {
22
+ return new Date().toLocaleTimeString("en-US", { hour12: false });
23
+ }
24
+ /**
25
+ * Create and configure the CLI
26
+ */
27
+ function createCli() {
28
+ const program = new Command();
29
+ program
30
+ .name("tinybird")
31
+ .description("Tinybird TypeScript SDK CLI")
32
+ .version(VERSION);
33
+ // Init command
34
+ program
35
+ .command("init")
36
+ .description("Initialize a new Tinybird TypeScript project")
37
+ .option("-f, --force", "Overwrite existing files")
38
+ .option("--skip-login", "Skip browser login flow")
39
+ .action(async (options) => {
40
+ console.log("Initializing Tinybird project...\n");
41
+ const result = await runInit({
42
+ force: options.force,
43
+ skipLogin: options.skipLogin,
44
+ });
45
+ if (!result.success) {
46
+ console.error(`Error: ${result.error}`);
47
+ process.exit(1);
48
+ }
49
+ if (result.created.length > 0) {
50
+ console.log("Created:");
51
+ result.created.forEach((file) => {
52
+ console.log(` - ${file}`);
53
+ });
54
+ }
55
+ if (result.skipped.length > 0) {
56
+ console.log("\nSkipped (already exists):");
57
+ result.skipped.forEach((file) => {
58
+ console.log(` - ${file}`);
59
+ });
60
+ }
61
+ if (result.loggedIn) {
62
+ console.log(`\nLogged in successfully!`);
63
+ if (result.workspaceName) {
64
+ console.log(` Workspace: ${result.workspaceName}`);
65
+ }
66
+ if (result.userEmail) {
67
+ console.log(` User: ${result.userEmail}`);
68
+ }
69
+ console.log("\nDone! Next steps:");
70
+ console.log(" 1. Edit src/tinybird/schema.ts with your schema");
71
+ console.log(" 2. Run 'npx tinybird dev' to start development");
72
+ }
73
+ else if (result.loggedIn === false) {
74
+ console.log("\nLogin was skipped or failed.");
75
+ console.log("\nDone! Next steps:");
76
+ console.log(" 1. Run 'npx tinybird login' to authenticate");
77
+ console.log(" 2. Edit src/tinybird/schema.ts with your schema");
78
+ console.log(" 3. Run 'npx tinybird dev' to start development");
79
+ }
80
+ else {
81
+ console.log("\nDone! Next steps:");
82
+ console.log(" 1. Edit src/tinybird/schema.ts with your schema");
83
+ console.log(" 2. Run 'npx tinybird dev' to start development");
84
+ }
85
+ });
86
+ // Login command
87
+ program
88
+ .command("login")
89
+ .description("Authenticate with Tinybird via browser")
90
+ .action(async () => {
91
+ console.log("Starting authentication...\n");
92
+ const result = await runLogin();
93
+ if (!result.success) {
94
+ console.error(`Error: ${result.error}`);
95
+ process.exit(1);
96
+ }
97
+ console.log("\nAuthentication successful!");
98
+ if (result.workspaceName) {
99
+ console.log(` Workspace: ${result.workspaceName}`);
100
+ }
101
+ if (result.userEmail) {
102
+ console.log(` User: ${result.userEmail}`);
103
+ }
104
+ if (result.baseUrl) {
105
+ console.log(` API Host: ${result.baseUrl}`);
106
+ }
107
+ });
108
+ // Build command
109
+ program
110
+ .command("build")
111
+ .description("Build and push resources to Tinybird")
112
+ .option("--dry-run", "Generate without pushing to API")
113
+ .option("--debug", "Show debug output including API requests/responses")
114
+ .action(async (options) => {
115
+ if (options.debug) {
116
+ process.env.TINYBIRD_DEBUG = "1";
117
+ }
118
+ console.log(`[${formatTime()}] Building...\n`);
119
+ const result = await runBuild({
120
+ dryRun: options.dryRun,
121
+ });
122
+ if (!result.success) {
123
+ console.error(`Error: ${result.error}`);
124
+ process.exit(1);
125
+ }
126
+ const { build, deploy } = result;
127
+ if (build) {
128
+ console.log(`Generated ${build.stats.datasourceCount} datasource(s), ${build.stats.pipeCount} pipe(s)`);
129
+ }
130
+ if (options.dryRun) {
131
+ console.log("\n[Dry run] Resources not deployed to API");
132
+ // Show generated content
133
+ if (build) {
134
+ console.log("\n--- Generated Datasources ---");
135
+ build.resources.datasources.forEach((ds) => {
136
+ console.log(`\n${ds.name}.datasource:`);
137
+ console.log(ds.content);
138
+ });
139
+ console.log("\n--- Generated Pipes ---");
140
+ build.resources.pipes.forEach((pipe) => {
141
+ console.log(`\n${pipe.name}.pipe:`);
142
+ console.log(pipe.content);
143
+ });
144
+ }
145
+ }
146
+ else if (deploy) {
147
+ if (deploy.result === "no_changes") {
148
+ console.log("No changes detected - already up to date");
149
+ }
150
+ else {
151
+ console.log(`Deployed to Tinybird successfully`);
152
+ }
153
+ }
154
+ console.log(`\n[${formatTime()}] Done in ${result.durationMs}ms`);
155
+ });
156
+ // Dev command
157
+ program
158
+ .command("dev")
159
+ .description("Watch for changes and sync with Tinybird")
160
+ .action(async () => {
161
+ console.log(`tinybird dev v${VERSION}`);
162
+ console.log("Loading config from tinybird.json...\n");
163
+ try {
164
+ const controller = await runDev({
165
+ onLoginComplete: (info) => {
166
+ console.log("\nAuthentication successful!");
167
+ if (info.workspaceName) {
168
+ console.log(` Workspace: ${info.workspaceName}`);
169
+ }
170
+ if (info.userEmail) {
171
+ console.log(` User: ${info.userEmail}`);
172
+ }
173
+ console.log("");
174
+ },
175
+ onBranchReady: (info) => {
176
+ if (info.isMainBranch) {
177
+ console.log("On main branch - deploying to workspace\n");
178
+ }
179
+ else if (info.gitBranch) {
180
+ const tinybirdName = info.tinybirdBranch?.name ?? info.gitBranch;
181
+ if (info.wasCreated) {
182
+ console.log(`Detected git branch: ${info.gitBranch}`);
183
+ console.log(`Creating Tinybird branch '${tinybirdName}'...`);
184
+ console.log("Branch created and token cached.\n");
185
+ }
186
+ else {
187
+ console.log(`Detected git branch: ${info.gitBranch}`);
188
+ console.log(`Using existing Tinybird branch '${tinybirdName}'\n`);
189
+ }
190
+ }
191
+ else {
192
+ console.log("Not in a git repository - deploying to workspace\n");
193
+ }
194
+ },
195
+ onBuildStart: () => {
196
+ console.log(`[${formatTime()}] Building...`);
197
+ },
198
+ onBuildComplete: (result) => {
199
+ if (!result.success) {
200
+ console.error(`[${formatTime()}] Build failed: ${result.error}`);
201
+ return;
202
+ }
203
+ const { deploy } = result;
204
+ if (deploy) {
205
+ if (deploy.result === "no_changes") {
206
+ console.log(`[${formatTime()}] No changes detected`);
207
+ }
208
+ else {
209
+ console.log(`[${formatTime()}] Built in ${result.durationMs}ms`);
210
+ // Show datasource changes
211
+ if (deploy.datasources) {
212
+ for (const name of deploy.datasources.created) {
213
+ console.log(` + datasource ${name} (created)`);
214
+ }
215
+ for (const name of deploy.datasources.changed) {
216
+ console.log(` ~ datasource ${name} (changed)`);
217
+ }
218
+ for (const name of deploy.datasources.deleted) {
219
+ console.log(` - datasource ${name} (deleted)`);
220
+ }
221
+ }
222
+ // Show pipe changes
223
+ if (deploy.pipes) {
224
+ for (const name of deploy.pipes.created) {
225
+ console.log(` + pipe ${name} (created)`);
226
+ }
227
+ for (const name of deploy.pipes.changed) {
228
+ console.log(` ~ pipe ${name} (changed)`);
229
+ }
230
+ for (const name of deploy.pipes.deleted) {
231
+ console.log(` - pipe ${name} (deleted)`);
232
+ }
233
+ }
234
+ }
235
+ }
236
+ },
237
+ onSchemaValidation: (validation) => {
238
+ if (validation.issues.length > 0) {
239
+ console.log(`[${formatTime()}] Schema validation:`);
240
+ for (const issue of validation.issues) {
241
+ if (issue.type === "error") {
242
+ console.error(` ERROR [${issue.pipeName}]: ${issue.message}`);
243
+ }
244
+ else {
245
+ console.warn(` WARN [${issue.pipeName}]: ${issue.message}`);
246
+ }
247
+ }
248
+ }
249
+ },
250
+ onError: (error) => {
251
+ console.error(`[${formatTime()}] Error: ${error.message}`);
252
+ },
253
+ });
254
+ console.log("Watching for changes... (Ctrl+C to stop)\n");
255
+ // Handle shutdown
256
+ const shutdown = async () => {
257
+ console.log("\nShutting down...");
258
+ await controller.stop();
259
+ process.exit(0);
260
+ };
261
+ process.on("SIGINT", shutdown);
262
+ process.on("SIGTERM", shutdown);
263
+ // Keep process alive
264
+ await new Promise(() => { });
265
+ }
266
+ catch (error) {
267
+ console.error(`Error: ${error.message}`);
268
+ process.exit(1);
269
+ }
270
+ });
271
+ // Branch command
272
+ const branchCommand = new Command("branch")
273
+ .description("Manage Tinybird branches");
274
+ branchCommand
275
+ .command("list")
276
+ .description("List all Tinybird branches")
277
+ .action(async () => {
278
+ const result = await runBranchList();
279
+ if (!result.success) {
280
+ console.error(`Error: ${result.error}`);
281
+ process.exit(1);
282
+ }
283
+ if (!result.branches || result.branches.length === 0) {
284
+ console.log("No branches found.");
285
+ return;
286
+ }
287
+ console.log("Branches:");
288
+ result.branches.forEach((branch) => {
289
+ console.log(` - ${branch.name} (created: ${branch.created_at})`);
290
+ });
291
+ });
292
+ branchCommand
293
+ .command("status")
294
+ .description("Show current branch status")
295
+ .action(async () => {
296
+ const result = await runBranchStatus();
297
+ if (!result.success) {
298
+ console.error(`Error: ${result.error}`);
299
+ process.exit(1);
300
+ }
301
+ console.log("Branch Status:");
302
+ console.log(` Git branch: ${result.gitBranch ?? "(not in git repo)"}`);
303
+ if (result.tinybirdBranchName && result.tinybirdBranchName !== result.gitBranch) {
304
+ console.log(` Tinybird branch name: ${result.tinybirdBranchName} (sanitized)`);
305
+ }
306
+ console.log(` Main branch: ${result.isMainBranch ? "yes" : "no"}`);
307
+ if (result.tinybirdBranch) {
308
+ console.log(` Tinybird branch: ${result.tinybirdBranch.name}`);
309
+ console.log(` Branch ID: ${result.tinybirdBranch.id}`);
310
+ console.log(` Created: ${result.tinybirdBranch.created_at}`);
311
+ }
312
+ else if (!result.isMainBranch && result.tinybirdBranchName) {
313
+ console.log(" Tinybird branch: not created yet");
314
+ console.log(" (Run 'npx tinybird dev' to create it)");
315
+ }
316
+ console.log(` Cached token: ${result.hasCachedToken ? "yes" : "no"}`);
317
+ });
318
+ branchCommand
319
+ .command("delete")
320
+ .description("Delete a Tinybird branch")
321
+ .argument("<name>", "Branch name to delete")
322
+ .action(async (name) => {
323
+ console.log(`Deleting branch '${name}'...`);
324
+ const result = await runBranchDelete(name);
325
+ if (!result.success) {
326
+ console.error(`Error: ${result.error}`);
327
+ process.exit(1);
328
+ }
329
+ console.log(`Branch '${name}' deleted successfully.`);
330
+ });
331
+ program.addCommand(branchCommand);
332
+ return program;
333
+ }
334
+ // Run CLI
335
+ const program = createCli();
336
+ program.parse();
337
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EACL,aAAa,EACb,eAAe,EACf,eAAe,GAChB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAC5B,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,oBAAoB,CAAC,EAAE,OAAO,CAAC,CACzC,CAAC;AACzB,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;AAEpC;;GAEG;AACH,SAAS,UAAU;IACjB,OAAO,IAAI,IAAI,EAAE,CAAC,kBAAkB,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;AACnE,CAAC;AAED;;GAEG;AACH,SAAS,SAAS;IAChB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,UAAU,CAAC;SAChB,WAAW,CAAC,6BAA6B,CAAC;SAC1C,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpB,eAAe;IACf,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,8CAA8C,CAAC;SAC3D,MAAM,CAAC,aAAa,EAAE,0BAA0B,CAAC;SACjD,MAAM,CAAC,cAAc,EAAE,yBAAyB,CAAC;SACjD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;QAElD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC;YAC3B,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,SAAS,EAAE,OAAO,CAAC,SAAS;SAC7B,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,UAAU,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACxB,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;gBAC9B,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;YAC7B,CAAC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;YAC3C,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;gBAC9B,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;YAC7B,CAAC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;YACzC,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;gBACzB,OAAO,CAAC,GAAG,CAAC,gBAAgB,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;YACtD,CAAC;YACD,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;gBACrB,OAAO,CAAC,GAAG,CAAC,WAAW,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;YAC7C,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;YACjE,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;QAClE,CAAC;aAAM,IAAI,MAAM,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;YAC9C,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;YAC7D,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;YACjE,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;QAClE,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;YACjE,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;QAClE,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,gBAAgB;IAChB,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,wCAAwC,CAAC;SACrD,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;QAE5C,MAAM,MAAM,GAAG,MAAM,QAAQ,EAAE,CAAC;QAEhC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,UAAU,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;QAC5C,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,gBAAgB,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;QACtD,CAAC;QACD,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,WAAW,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;QAC7C,CAAC;QACD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,gBAAgB;IAChB,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,sCAAsC,CAAC;SACnD,MAAM,CAAC,WAAW,EAAE,iCAAiC,CAAC;SACtD,MAAM,CAAC,SAAS,EAAE,oDAAoD,CAAC;SACvE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,GAAG,CAAC;QACnC,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,IAAI,UAAU,EAAE,iBAAiB,CAAC,CAAC;QAE/C,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC;YAC5B,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,UAAU,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;QAEjC,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,CAAC,KAAK,CAAC,eAAe,mBAAmB,KAAK,CAAC,KAAK,CAAC,SAAS,UAAU,CAAC,CAAC;QAC1G,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;YAEzD,yBAAyB;YACzB,IAAI,KAAK,EAAE,CAAC;gBACV,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;gBAC/C,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;oBACzC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,cAAc,CAAC,CAAC;oBACxC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;gBAC1B,CAAC,CAAC,CAAC;gBAEH,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;gBACzC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;oBACrC,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,QAAQ,CAAC,CAAC;oBACpC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC5B,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;aAAM,IAAI,MAAM,EAAE,CAAC;YAClB,IAAI,MAAM,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;gBACnC,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;YAC1D,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;YACnD,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,MAAM,UAAU,EAAE,aAAa,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEL,cAAc;IACd,OAAO;SACJ,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,0CAA0C,CAAC;SACvD,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,OAAO,CAAC,GAAG,CAAC,iBAAiB,OAAO,EAAE,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;QAEtD,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC;gBAC9B,eAAe,EAAE,CAAC,IAAI,EAAE,EAAE;oBACxB,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;oBAC5C,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;wBACvB,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;oBACpD,CAAC;oBACD,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;wBACnB,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;oBAC3C,CAAC;oBACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAClB,CAAC;gBACD,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE;oBACtB,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;wBACtB,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;oBAC3D,CAAC;yBAAM,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;wBAC1B,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC;wBACjE,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;4BACpB,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;4BACtD,OAAO,CAAC,GAAG,CAAC,6BAA6B,YAAY,MAAM,CAAC,CAAC;4BAC7D,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;wBACpD,CAAC;6BAAM,CAAC;4BACN,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;4BACtD,OAAO,CAAC,GAAG,CAAC,mCAAmC,YAAY,KAAK,CAAC,CAAC;wBACpE,CAAC;oBACH,CAAC;yBAAM,CAAC;wBACN,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;oBACpE,CAAC;gBACH,CAAC;gBACD,YAAY,EAAE,GAAG,EAAE;oBACjB,OAAO,CAAC,GAAG,CAAC,IAAI,UAAU,EAAE,eAAe,CAAC,CAAC;gBAC/C,CAAC;gBACD,eAAe,EAAE,CAAC,MAAM,EAAE,EAAE;oBAC1B,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;wBACpB,OAAO,CAAC,KAAK,CAAC,IAAI,UAAU,EAAE,mBAAmB,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;wBACjE,OAAO;oBACT,CAAC;oBAED,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;oBAE1B,IAAI,MAAM,EAAE,CAAC;wBACX,IAAI,MAAM,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;4BACnC,OAAO,CAAC,GAAG,CAAC,IAAI,UAAU,EAAE,uBAAuB,CAAC,CAAC;wBACvD,CAAC;6BAAM,CAAC;4BACN,OAAO,CAAC,GAAG,CAAC,IAAI,UAAU,EAAE,cAAc,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;4BAEjE,0BAA0B;4BAC1B,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;gCACvB,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;oCAC9C,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,YAAY,CAAC,CAAC;gCAClD,CAAC;gCACD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;oCAC9C,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,YAAY,CAAC,CAAC;gCAClD,CAAC;gCACD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;oCAC9C,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,YAAY,CAAC,CAAC;gCAClD,CAAC;4BACH,CAAC;4BAED,oBAAoB;4BACpB,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gCACjB,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;oCACxC,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,YAAY,CAAC,CAAC;gCAC5C,CAAC;gCACD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;oCACxC,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,YAAY,CAAC,CAAC;gCAC5C,CAAC;gCACD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;oCACxC,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,YAAY,CAAC,CAAC;gCAC5C,CAAC;4BACH,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;gBACD,kBAAkB,EAAE,CAAC,UAAU,EAAE,EAAE;oBACjC,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACjC,OAAO,CAAC,GAAG,CAAC,IAAI,UAAU,EAAE,sBAAsB,CAAC,CAAC;wBACpD,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;4BACtC,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gCAC3B,OAAO,CAAC,KAAK,CAAC,YAAY,KAAK,CAAC,QAAQ,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;4BACjE,CAAC;iCAAM,CAAC;gCACN,OAAO,CAAC,IAAI,CAAC,WAAW,KAAK,CAAC,QAAQ,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;4BAC/D,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;gBACD,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;oBACjB,OAAO,CAAC,KAAK,CAAC,IAAI,UAAU,EAAE,YAAY,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC7D,CAAC;aACF,CAAC,CAAC;YAEH,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;YAE1D,kBAAkB;YAClB,MAAM,QAAQ,GAAG,KAAK,IAAI,EAAE;gBAC1B,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;gBAClC,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC;gBACxB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC,CAAC;YAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YAEhC,qBAAqB;YACrB,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,UAAW,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;YACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,iBAAiB;IACjB,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;SACxC,WAAW,CAAC,0BAA0B,CAAC,CAAC;IAE3C,aAAa;SACV,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,4BAA4B,CAAC;SACzC,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,MAAM,GAAG,MAAM,aAAa,EAAE,CAAC;QAErC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,UAAU,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrD,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;YAClC,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACzB,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YACjC,OAAO,CAAC,GAAG,CAAC,OAAO,MAAM,CAAC,IAAI,cAAc,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC;QACpE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEL,aAAa;SACV,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,4BAA4B,CAAC;SACzC,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,MAAM,GAAG,MAAM,eAAe,EAAE,CAAC;QAEvC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,UAAU,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,SAAS,IAAI,mBAAmB,EAAE,CAAC,CAAC;QACxE,IAAI,MAAM,CAAC,kBAAkB,IAAI,MAAM,CAAC,kBAAkB,KAAK,MAAM,CAAC,SAAS,EAAE,CAAC;YAChF,OAAO,CAAC,GAAG,CAAC,2BAA2B,MAAM,CAAC,kBAAkB,cAAc,CAAC,CAAC;QAClF,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,kBAAkB,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAEpE,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,sBAAsB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC;YAChE,OAAO,CAAC,GAAG,CAAC,gBAAgB,MAAM,CAAC,cAAc,CAAC,EAAE,EAAE,CAAC,CAAC;YACxD,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC,CAAC;QAChE,CAAC;aAAM,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,kBAAkB,EAAE,CAAC;YAC7D,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;YAClD,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;QACzD,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,mBAAmB,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IAEL,aAAa;SACV,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,0BAA0B,CAAC;SACvC,QAAQ,CAAC,QAAQ,EAAE,uBAAuB,CAAC;SAC3C,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,MAAM,CAAC,CAAC;QAE5C,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC;QAE3C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,UAAU,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,yBAAyB,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEL,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;IAElC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,UAAU;AACV,MAAM,OAAO,GAAG,SAAS,EAAE,CAAC;AAC5B,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Schema validation for pipe output
3
+ * Validates that query responses match the declared output schema
4
+ */
5
+ import type { ProjectDefinition } from "../../schema/project.js";
6
+ import type { PipeDefinition, OutputDefinition } from "../../schema/pipe.js";
7
+ import type { ColumnMeta } from "../../client/types.js";
8
+ import type { LoadedEntities } from "../../generator/loader.js";
9
+ /**
10
+ * Options for schema validation
11
+ */
12
+ export interface SchemaValidationOptions {
13
+ /** The project definition containing pipe schemas (legacy) */
14
+ project?: ProjectDefinition;
15
+ /** The loaded entities containing pipe schemas (new) */
16
+ entities?: LoadedEntities;
17
+ /** Names of pipes to validate */
18
+ pipeNames: string[];
19
+ /** Tinybird API base URL */
20
+ baseUrl: string;
21
+ /** API token for authentication */
22
+ token: string;
23
+ }
24
+ /**
25
+ * A single validation issue
26
+ */
27
+ export interface ValidationIssue {
28
+ /** Name of the pipe with the issue */
29
+ pipeName: string;
30
+ /** Issue severity */
31
+ type: "error" | "warning";
32
+ /** Human-readable description of the issue */
33
+ message: string;
34
+ }
35
+ /**
36
+ * Result of schema validation
37
+ */
38
+ export interface SchemaValidationResult {
39
+ /** Whether all validations passed (no errors) */
40
+ valid: boolean;
41
+ /** List of validation issues found */
42
+ issues: ValidationIssue[];
43
+ /** Names of pipes that were successfully validated */
44
+ pipesValidated: string[];
45
+ /** Names of pipes that were skipped (e.g., require params) */
46
+ pipesSkipped: string[];
47
+ }
48
+ /**
49
+ * Internal result of validating a single pipe's output schema
50
+ */
51
+ interface ColumnValidation {
52
+ valid: boolean;
53
+ missingColumns: {
54
+ name: string;
55
+ expectedType: string;
56
+ }[];
57
+ extraColumns: {
58
+ name: string;
59
+ actualType: string;
60
+ }[];
61
+ typeMismatches: {
62
+ name: string;
63
+ expectedType: string;
64
+ actualType: string;
65
+ }[];
66
+ }
67
+ /**
68
+ * Validate pipe schemas by querying them and comparing response to output definition
69
+ *
70
+ * @param options - Validation options
71
+ * @returns Validation result with issues found
72
+ */
73
+ export declare function validatePipeSchemas(options: SchemaValidationOptions): Promise<SchemaValidationResult>;
74
+ /**
75
+ * Check if a pipe has any required parameters without defaults
76
+ */
77
+ declare function hasRequiredParams(pipe: PipeDefinition): boolean;
78
+ /**
79
+ * Build a params object using default values from the pipe definition
80
+ */
81
+ declare function buildDefaultParams(pipe: PipeDefinition): Record<string, unknown>;
82
+ /**
83
+ * Validate response metadata against the expected output schema
84
+ */
85
+ declare function validateOutputSchema(responseMeta: ColumnMeta[], outputSchema: OutputDefinition): ColumnValidation;
86
+ /**
87
+ * Check if two ClickHouse types are compatible
88
+ * Handles Nullable, LowCardinality, and timezone variations
89
+ */
90
+ declare function typesAreCompatible(actual: string, expected: string): boolean;
91
+ export { typesAreCompatible as _typesAreCompatible };
92
+ export { validateOutputSchema as _validateOutputSchema };
93
+ export { hasRequiredParams as _hasRequiredParams };
94
+ export { buildDefaultParams as _buildDefaultParams };
95
+ //# sourceMappingURL=schema-validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-validation.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/schema-validation.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAmB,MAAM,yBAAyB,CAAC;AAClF,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAEhE;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,8DAA8D;IAC9D,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,wDAAwD;IACxD,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,iCAAiC;IACjC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,4BAA4B;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,sCAAsC;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,qBAAqB;IACrB,IAAI,EAAE,OAAO,GAAG,SAAS,CAAC;IAC1B,8CAA8C;IAC9C,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,iDAAiD;IACjD,KAAK,EAAE,OAAO,CAAC;IACf,sCAAsC;IACtC,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,sDAAsD;IACtD,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,8DAA8D;IAC9D,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;GAEG;AACH,UAAU,gBAAgB;IACxB,KAAK,EAAE,OAAO,CAAC;IACf,cAAc,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACzD,YAAY,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACrD,cAAc,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC9E;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,sBAAsB,CAAC,CA2FjC;AAED;;GAEG;AACH,iBAAS,iBAAiB,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CASxD;AAED;;GAEG;AACH,iBAAS,kBAAkB,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAYzE;AAED;;GAEG;AACH,iBAAS,oBAAoB,CAC3B,YAAY,EAAE,UAAU,EAAE,EAC1B,YAAY,EAAE,gBAAgB,GAC7B,gBAAgB,CAsClB;AAED;;;GAGG;AACH,iBAAS,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAoBrE;AAGD,OAAO,EAAE,kBAAkB,IAAI,mBAAmB,EAAE,CAAC;AACrD,OAAO,EAAE,oBAAoB,IAAI,qBAAqB,EAAE,CAAC;AACzD,OAAO,EAAE,iBAAiB,IAAI,kBAAkB,EAAE,CAAC;AACnD,OAAO,EAAE,kBAAkB,IAAI,mBAAmB,EAAE,CAAC"}
@@ -0,0 +1,175 @@
1
+ /**
2
+ * Schema validation for pipe output
3
+ * Validates that query responses match the declared output schema
4
+ */
5
+ import { TinybirdClient } from "../../client/base.js";
6
+ /**
7
+ * Validate pipe schemas by querying them and comparing response to output definition
8
+ *
9
+ * @param options - Validation options
10
+ * @returns Validation result with issues found
11
+ */
12
+ export async function validatePipeSchemas(options) {
13
+ const client = new TinybirdClient({
14
+ baseUrl: options.baseUrl,
15
+ token: options.token,
16
+ });
17
+ const result = {
18
+ valid: true,
19
+ issues: [],
20
+ pipesValidated: [],
21
+ pipesSkipped: [],
22
+ };
23
+ // Get pipes from either project or entities
24
+ const pipes = options.entities
25
+ ? Object.fromEntries(Object.entries(options.entities.pipes).map(([name, { definition }]) => [name, definition]))
26
+ : options.project?.pipes ?? {};
27
+ // Only validate the specified pipes
28
+ for (const pipeName of options.pipeNames) {
29
+ // Find pipe by name
30
+ const pipe = Object.values(pipes).find((p) => p._name === pipeName);
31
+ if (!pipe) {
32
+ // Pipe exists in Tinybird but not in local schema (could be deleted or renamed)
33
+ continue;
34
+ }
35
+ // Skip if pipe has required params without defaults
36
+ if (hasRequiredParams(pipe)) {
37
+ result.pipesSkipped.push(pipeName);
38
+ continue;
39
+ }
40
+ // Skip if pipe has no output schema (reusable pipes)
41
+ if (!pipe._output) {
42
+ result.pipesSkipped.push(pipeName);
43
+ continue;
44
+ }
45
+ // Build params using defaults
46
+ const params = buildDefaultParams(pipe);
47
+ try {
48
+ const response = await client.query(pipeName, params);
49
+ const validation = validateOutputSchema(response.meta, pipe._output);
50
+ if (!validation.valid) {
51
+ result.valid = false;
52
+ }
53
+ // Add missing column errors
54
+ for (const missing of validation.missingColumns) {
55
+ result.issues.push({
56
+ pipeName,
57
+ type: "error",
58
+ message: `Missing column '${missing.name}' (expected: ${missing.expectedType})`,
59
+ });
60
+ }
61
+ // Add type mismatch errors
62
+ for (const mismatch of validation.typeMismatches) {
63
+ result.issues.push({
64
+ pipeName,
65
+ type: "error",
66
+ message: `Type mismatch '${mismatch.name}': expected ${mismatch.expectedType}, got ${mismatch.actualType}`,
67
+ });
68
+ }
69
+ // Add extra column warnings
70
+ for (const extra of validation.extraColumns) {
71
+ result.issues.push({
72
+ pipeName,
73
+ type: "warning",
74
+ message: `Extra column '${extra.name}' (${extra.actualType}) not in output schema`,
75
+ });
76
+ }
77
+ result.pipesValidated.push(pipeName);
78
+ }
79
+ catch {
80
+ // Query failed - skip validation for this pipe
81
+ // This could happen if the pipe doesn't exist yet, network issues, etc.
82
+ result.pipesSkipped.push(pipeName);
83
+ }
84
+ }
85
+ return result;
86
+ }
87
+ /**
88
+ * Check if a pipe has any required parameters without defaults
89
+ */
90
+ function hasRequiredParams(pipe) {
91
+ if (!pipe._params)
92
+ return false;
93
+ for (const param of Object.values(pipe._params)) {
94
+ if (param._required && param._default === undefined) {
95
+ return true;
96
+ }
97
+ }
98
+ return false;
99
+ }
100
+ /**
101
+ * Build a params object using default values from the pipe definition
102
+ */
103
+ function buildDefaultParams(pipe) {
104
+ const params = {};
105
+ if (!pipe._params)
106
+ return params;
107
+ for (const [name, param] of Object.entries(pipe._params)) {
108
+ if (param._default !== undefined) {
109
+ params[name] = param._default;
110
+ }
111
+ }
112
+ return params;
113
+ }
114
+ /**
115
+ * Validate response metadata against the expected output schema
116
+ */
117
+ function validateOutputSchema(responseMeta, outputSchema) {
118
+ const result = {
119
+ valid: true,
120
+ missingColumns: [],
121
+ extraColumns: [],
122
+ typeMismatches: [],
123
+ };
124
+ // Build a map of response columns for lookup
125
+ const responseColumns = new Map(responseMeta.map((col) => [col.name, col.type]));
126
+ // Check each expected column from the schema
127
+ for (const [name, validator] of Object.entries(outputSchema)) {
128
+ const expectedType = validator._tinybirdType;
129
+ const actualType = responseColumns.get(name);
130
+ if (!actualType) {
131
+ // Column missing from response
132
+ result.missingColumns.push({ name, expectedType });
133
+ result.valid = false;
134
+ }
135
+ else if (!typesAreCompatible(actualType, expectedType)) {
136
+ // Column exists but type doesn't match
137
+ result.typeMismatches.push({ name, expectedType, actualType });
138
+ result.valid = false;
139
+ }
140
+ // Remove from map so we can find extra columns
141
+ responseColumns.delete(name);
142
+ }
143
+ // Remaining columns are extras (warnings, not errors)
144
+ for (const [name, actualType] of responseColumns) {
145
+ result.extraColumns.push({ name, actualType });
146
+ }
147
+ return result;
148
+ }
149
+ /**
150
+ * Check if two ClickHouse types are compatible
151
+ * Handles Nullable, LowCardinality, and timezone variations
152
+ */
153
+ function typesAreCompatible(actual, expected) {
154
+ const normalize = (t) => {
155
+ let normalized = t;
156
+ // Remove LowCardinality(Nullable(...)) to just the inner type (must be before individual removals)
157
+ normalized = normalized.replace(/^LowCardinality\(Nullable\((.+)\)\)$/, "$1");
158
+ // Remove Nullable wrapper
159
+ normalized = normalized.replace(/^Nullable\((.+)\)$/, "$1");
160
+ // Remove LowCardinality wrapper
161
+ normalized = normalized.replace(/^LowCardinality\((.+)\)$/, "$1");
162
+ // Remove timezone from DateTime
163
+ normalized = normalized.replace(/^DateTime\('.+'\)$/, "DateTime");
164
+ // Remove precision and timezone from DateTime64
165
+ normalized = normalized.replace(/^DateTime64\(\d+(, '.+')?\)$/, "DateTime64");
166
+ return normalized;
167
+ };
168
+ return normalize(actual) === normalize(expected);
169
+ }
170
+ // Export internal functions for testing
171
+ export { typesAreCompatible as _typesAreCompatible };
172
+ export { validateOutputSchema as _validateOutputSchema };
173
+ export { hasRequiredParams as _hasRequiredParams };
174
+ export { buildDefaultParams as _buildDefaultParams };
175
+ //# sourceMappingURL=schema-validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-validation.js","sourceRoot":"","sources":["../../../src/cli/utils/schema-validation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Tests for schema validation utility
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=schema-validation.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-validation.test.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/schema-validation.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}