@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,91 @@
1
+ /**
2
+ * Branch token storage in ~/.tinybird/branches.json
3
+ */
4
+ import * as fs from "fs";
5
+ import * as path from "path";
6
+ import * as os from "os";
7
+ /**
8
+ * Get the path to the branches.json file
9
+ */
10
+ export function getBranchStorePath() {
11
+ return path.join(os.homedir(), ".tinybird", "branches.json");
12
+ }
13
+ /**
14
+ * Ensure the ~/.tinybird directory exists
15
+ */
16
+ function ensureTinybirdDir() {
17
+ const tinybirdDir = path.join(os.homedir(), ".tinybird");
18
+ if (!fs.existsSync(tinybirdDir)) {
19
+ try {
20
+ fs.mkdirSync(tinybirdDir, { recursive: true });
21
+ }
22
+ catch (error) {
23
+ const message = error instanceof Error ? error.message : String(error);
24
+ throw new Error(`Failed to create Tinybird config directory at ${tinybirdDir}: ${message}. ` +
25
+ `Please ensure you have write permissions to your home directory.`);
26
+ }
27
+ }
28
+ }
29
+ /**
30
+ * Load the branch store from disk
31
+ * Returns an empty store if the file doesn't exist
32
+ */
33
+ export function loadBranchStore() {
34
+ const storePath = getBranchStorePath();
35
+ if (!fs.existsSync(storePath)) {
36
+ return { workspaces: {} };
37
+ }
38
+ try {
39
+ const content = fs.readFileSync(storePath, "utf-8");
40
+ return JSON.parse(content);
41
+ }
42
+ catch {
43
+ // If the file is corrupted, return empty store
44
+ return { workspaces: {} };
45
+ }
46
+ }
47
+ /**
48
+ * Save the branch store to disk
49
+ */
50
+ export function saveBranchStore(store) {
51
+ ensureTinybirdDir();
52
+ const storePath = getBranchStorePath();
53
+ fs.writeFileSync(storePath, JSON.stringify(store, null, 2), "utf-8");
54
+ }
55
+ /**
56
+ * Get a cached branch token
57
+ * Returns null if not cached
58
+ */
59
+ export function getBranchToken(workspaceId, branchName) {
60
+ const store = loadBranchStore();
61
+ return store.workspaces[workspaceId]?.branches[branchName] ?? null;
62
+ }
63
+ /**
64
+ * Cache a branch token
65
+ */
66
+ export function setBranchToken(workspaceId, branchName, info) {
67
+ const store = loadBranchStore();
68
+ if (!store.workspaces[workspaceId]) {
69
+ store.workspaces[workspaceId] = { branches: {} };
70
+ }
71
+ store.workspaces[workspaceId].branches[branchName] = info;
72
+ saveBranchStore(store);
73
+ }
74
+ /**
75
+ * Remove a cached branch
76
+ */
77
+ export function removeBranch(workspaceId, branchName) {
78
+ const store = loadBranchStore();
79
+ if (store.workspaces[workspaceId]?.branches[branchName]) {
80
+ delete store.workspaces[workspaceId].branches[branchName];
81
+ saveBranchStore(store);
82
+ }
83
+ }
84
+ /**
85
+ * List all cached branches for a workspace
86
+ */
87
+ export function listCachedBranches(workspaceId) {
88
+ const store = loadBranchStore();
89
+ return store.workspaces[workspaceId]?.branches ?? {};
90
+ }
91
+ //# sourceMappingURL=branch-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"branch-store.js","sourceRoot":"","sources":["../../src/cli/branch-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=branch-store.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"branch-store.test.d.ts","sourceRoot":"","sources":["../../src/cli/branch-store.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,115 @@
1
+ import { describe, it, expect, beforeEach, afterEach } from "vitest";
2
+ import * as fs from "fs";
3
+ import * as path from "path";
4
+ import * as os from "os";
5
+ import { loadBranchStore, saveBranchStore, getBranchToken, setBranchToken, removeBranch, listCachedBranches, } from "./branch-store.js";
6
+ describe("Branch store", () => {
7
+ let originalHome;
8
+ let testHomeDir;
9
+ beforeEach(() => {
10
+ // Create unique test directory for each test
11
+ testHomeDir = path.join(os.tmpdir(), ".tinybird-test-" + Date.now() + "-" + Math.random().toString(36).slice(2));
12
+ fs.mkdirSync(testHomeDir, { recursive: true });
13
+ // Mock HOME to use test directory
14
+ originalHome = process.env.HOME;
15
+ process.env.HOME = testHomeDir;
16
+ });
17
+ afterEach(() => {
18
+ // Restore original HOME
19
+ if (originalHome !== undefined) {
20
+ process.env.HOME = originalHome;
21
+ }
22
+ // Clean up test directory
23
+ try {
24
+ fs.rmSync(testHomeDir, { recursive: true });
25
+ }
26
+ catch {
27
+ // Ignore cleanup errors
28
+ }
29
+ });
30
+ describe("loadBranchStore", () => {
31
+ it("returns empty store when file does not exist", () => {
32
+ const store = loadBranchStore();
33
+ expect(store).toEqual({ workspaces: {} });
34
+ });
35
+ });
36
+ describe("saveBranchStore and loadBranchStore", () => {
37
+ it("round-trips store data", () => {
38
+ const store = {
39
+ workspaces: {
40
+ ws_123: {
41
+ branches: {
42
+ "feature-a": {
43
+ id: "branch-id-1",
44
+ token: "p.token1",
45
+ createdAt: "2024-01-01T00:00:00Z",
46
+ },
47
+ },
48
+ },
49
+ },
50
+ };
51
+ saveBranchStore(store);
52
+ const loaded = loadBranchStore();
53
+ expect(loaded).toEqual(store);
54
+ });
55
+ });
56
+ describe("getBranchToken and setBranchToken", () => {
57
+ it("returns null for non-existent branch", () => {
58
+ const result = getBranchToken("ws_123", "non-existent");
59
+ expect(result).toBeNull();
60
+ });
61
+ it("sets and gets branch token", () => {
62
+ const info = {
63
+ id: "branch-id-2",
64
+ token: "p.token2",
65
+ createdAt: "2024-01-02T00:00:00Z",
66
+ };
67
+ setBranchToken("ws_456", "feature-b", info);
68
+ const result = getBranchToken("ws_456", "feature-b");
69
+ expect(result).toEqual(info);
70
+ });
71
+ });
72
+ describe("removeBranch", () => {
73
+ it("removes a cached branch", () => {
74
+ const info = {
75
+ id: "branch-id-3",
76
+ token: "p.token3",
77
+ createdAt: "2024-01-03T00:00:00Z",
78
+ };
79
+ setBranchToken("ws_789", "feature-c", info);
80
+ expect(getBranchToken("ws_789", "feature-c")).toEqual(info);
81
+ removeBranch("ws_789", "feature-c");
82
+ expect(getBranchToken("ws_789", "feature-c")).toBeNull();
83
+ });
84
+ it("does nothing for non-existent branch", () => {
85
+ // Should not throw
86
+ removeBranch("ws_nonexistent", "no-branch");
87
+ });
88
+ });
89
+ describe("listCachedBranches", () => {
90
+ it("returns empty object for workspace with no branches", () => {
91
+ const result = listCachedBranches("ws_empty");
92
+ expect(result).toEqual({});
93
+ });
94
+ it("returns all branches for a workspace", () => {
95
+ const info1 = {
96
+ id: "branch-id-4",
97
+ token: "p.token4",
98
+ createdAt: "2024-01-04T00:00:00Z",
99
+ };
100
+ const info2 = {
101
+ id: "branch-id-5",
102
+ token: "p.token5",
103
+ createdAt: "2024-01-05T00:00:00Z",
104
+ };
105
+ setBranchToken("ws_list", "feature-d", info1);
106
+ setBranchToken("ws_list", "feature-e", info2);
107
+ const result = listCachedBranches("ws_list");
108
+ expect(result).toEqual({
109
+ "feature-d": info1,
110
+ "feature-e": info2,
111
+ });
112
+ });
113
+ });
114
+ });
115
+ //# sourceMappingURL=branch-store.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"branch-store.test.js","sourceRoot":"","sources":["../../src/cli/branch-store.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Branch management commands
3
+ */
4
+ import { type TinybirdBranch } from "../../api/branches.js";
5
+ /**
6
+ * Branch command options
7
+ */
8
+ export interface BranchCommandOptions {
9
+ /** Working directory (defaults to cwd) */
10
+ cwd?: string;
11
+ }
12
+ /**
13
+ * Result of listing branches
14
+ */
15
+ export interface BranchListResult {
16
+ /** Whether the operation was successful */
17
+ success: boolean;
18
+ /** List of branches */
19
+ branches?: TinybirdBranch[];
20
+ /** Error message if failed */
21
+ error?: string;
22
+ }
23
+ /**
24
+ * Result of getting branch status
25
+ */
26
+ export interface BranchStatusResult {
27
+ /** Whether the operation was successful */
28
+ success: boolean;
29
+ /** Current git branch */
30
+ gitBranch: string | null;
31
+ /** Sanitized Tinybird branch name */
32
+ tinybirdBranchName: string | null;
33
+ /** Whether we're on the main branch */
34
+ isMainBranch: boolean;
35
+ /** Tinybird branch info (if exists) */
36
+ tinybirdBranch?: TinybirdBranch;
37
+ /** Whether a cached token exists */
38
+ hasCachedToken: boolean;
39
+ /** Error message if failed */
40
+ error?: string;
41
+ }
42
+ /**
43
+ * Result of deleting a branch
44
+ */
45
+ export interface BranchDeleteResult {
46
+ /** Whether the operation was successful */
47
+ success: boolean;
48
+ /** Error message if failed */
49
+ error?: string;
50
+ }
51
+ /**
52
+ * List all Tinybird branches
53
+ *
54
+ * @param options - Command options
55
+ * @returns List result
56
+ */
57
+ export declare function runBranchList(options?: BranchCommandOptions): Promise<BranchListResult>;
58
+ /**
59
+ * Get current branch status
60
+ *
61
+ * @param options - Command options
62
+ * @returns Status result
63
+ */
64
+ export declare function runBranchStatus(options?: BranchCommandOptions): Promise<BranchStatusResult>;
65
+ /**
66
+ * Delete a Tinybird branch
67
+ *
68
+ * @param name - Branch name to delete
69
+ * @param options - Command options
70
+ * @returns Delete result
71
+ */
72
+ export declare function runBranchDelete(name: string, options?: BranchCommandOptions): Promise<BranchDeleteResult>;
73
+ /**
74
+ * List cached branches (requires API call to get workspace ID)
75
+ */
76
+ export declare function runBranchListCached(options?: BranchCommandOptions): Promise<{
77
+ branches: Record<string, {
78
+ id: string;
79
+ createdAt: string;
80
+ }>;
81
+ }>;
82
+ //# sourceMappingURL=branch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"branch.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/branch.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAIL,KAAK,cAAc,EAEpB,MAAM,uBAAuB,CAAC;AAQ/B;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,0CAA0C;IAC1C,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,2CAA2C;IAC3C,OAAO,EAAE,OAAO,CAAC;IACjB,uBAAuB;IACvB,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAC;IAC5B,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,2CAA2C;IAC3C,OAAO,EAAE,OAAO,CAAC;IACjB,yBAAyB;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,qCAAqC;IACrC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,uCAAuC;IACvC,YAAY,EAAE,OAAO,CAAC;IACtB,uCAAuC;IACvC,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,oCAAoC;IACpC,cAAc,EAAE,OAAO,CAAC;IACxB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,2CAA2C;IAC3C,OAAO,EAAE,OAAO,CAAC;IACjB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,gBAAgB,CAAC,CA6B3B;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,kBAAkB,CAAC,CA8F7B;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,kBAAkB,CAAC,CA0C7B;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAkC1E"}
@@ -0,0 +1,215 @@
1
+ /**
2
+ * Branch management commands
3
+ */
4
+ import { loadConfig } from "../config.js";
5
+ import { listBranches, getBranch, deleteBranch, BranchApiError, } from "../../api/branches.js";
6
+ import { getWorkspace } from "../../api/workspaces.js";
7
+ import { getBranchToken, removeBranch as removeCachedBranch, listCachedBranches, } from "../branch-store.js";
8
+ /**
9
+ * List all Tinybird branches
10
+ *
11
+ * @param options - Command options
12
+ * @returns List result
13
+ */
14
+ export async function runBranchList(options = {}) {
15
+ const cwd = options.cwd ?? process.cwd();
16
+ let config;
17
+ try {
18
+ config = loadConfig(cwd);
19
+ }
20
+ catch (error) {
21
+ return {
22
+ success: false,
23
+ error: error.message,
24
+ };
25
+ }
26
+ try {
27
+ const branches = await listBranches({
28
+ baseUrl: config.baseUrl,
29
+ token: config.token,
30
+ });
31
+ return {
32
+ success: true,
33
+ branches,
34
+ };
35
+ }
36
+ catch (error) {
37
+ return {
38
+ success: false,
39
+ error: error.message,
40
+ };
41
+ }
42
+ }
43
+ /**
44
+ * Get current branch status
45
+ *
46
+ * @param options - Command options
47
+ * @returns Status result
48
+ */
49
+ export async function runBranchStatus(options = {}) {
50
+ const cwd = options.cwd ?? process.cwd();
51
+ let config;
52
+ try {
53
+ config = loadConfig(cwd);
54
+ }
55
+ catch (error) {
56
+ return {
57
+ success: false,
58
+ gitBranch: null,
59
+ tinybirdBranchName: null,
60
+ isMainBranch: false,
61
+ hasCachedToken: false,
62
+ error: error.message,
63
+ };
64
+ }
65
+ const gitBranch = config.gitBranch;
66
+ const tinybirdBranchName = config.tinybirdBranch; // Sanitized name
67
+ const isMainBranch = config.isMainBranch;
68
+ // Fetch the workspace ID from the API
69
+ let workspaceId;
70
+ try {
71
+ const workspace = await getWorkspace({
72
+ baseUrl: config.baseUrl,
73
+ token: config.token,
74
+ });
75
+ workspaceId = workspace.id;
76
+ }
77
+ catch (error) {
78
+ return {
79
+ success: false,
80
+ gitBranch,
81
+ tinybirdBranchName,
82
+ isMainBranch,
83
+ hasCachedToken: false,
84
+ error: error.message,
85
+ };
86
+ }
87
+ // Check for cached token (use sanitized name)
88
+ const cachedBranch = tinybirdBranchName ? getBranchToken(workspaceId, tinybirdBranchName) : null;
89
+ const hasCachedToken = cachedBranch !== null;
90
+ // If on main branch, just return status
91
+ if (isMainBranch || !tinybirdBranchName) {
92
+ return {
93
+ success: true,
94
+ gitBranch,
95
+ tinybirdBranchName,
96
+ isMainBranch,
97
+ hasCachedToken,
98
+ };
99
+ }
100
+ // Try to get the Tinybird branch info (use sanitized name)
101
+ try {
102
+ const tinybirdBranch = await getBranch({
103
+ baseUrl: config.baseUrl,
104
+ token: config.token,
105
+ }, tinybirdBranchName);
106
+ return {
107
+ success: true,
108
+ gitBranch,
109
+ tinybirdBranchName,
110
+ isMainBranch,
111
+ tinybirdBranch,
112
+ hasCachedToken,
113
+ };
114
+ }
115
+ catch (error) {
116
+ // If 404, branch doesn't exist yet
117
+ if (error instanceof BranchApiError && error.status === 404) {
118
+ return {
119
+ success: true,
120
+ gitBranch,
121
+ tinybirdBranchName,
122
+ isMainBranch,
123
+ hasCachedToken,
124
+ };
125
+ }
126
+ return {
127
+ success: false,
128
+ gitBranch,
129
+ tinybirdBranchName,
130
+ isMainBranch,
131
+ hasCachedToken,
132
+ error: error.message,
133
+ };
134
+ }
135
+ }
136
+ /**
137
+ * Delete a Tinybird branch
138
+ *
139
+ * @param name - Branch name to delete
140
+ * @param options - Command options
141
+ * @returns Delete result
142
+ */
143
+ export async function runBranchDelete(name, options = {}) {
144
+ const cwd = options.cwd ?? process.cwd();
145
+ let config;
146
+ try {
147
+ config = loadConfig(cwd);
148
+ }
149
+ catch (error) {
150
+ return {
151
+ success: false,
152
+ error: error.message,
153
+ };
154
+ }
155
+ try {
156
+ // Fetch the workspace ID from the API
157
+ const workspace = await getWorkspace({
158
+ baseUrl: config.baseUrl,
159
+ token: config.token,
160
+ });
161
+ const workspaceId = workspace.id;
162
+ // Delete from Tinybird API
163
+ await deleteBranch({
164
+ baseUrl: config.baseUrl,
165
+ token: config.token,
166
+ }, name);
167
+ // Remove from local cache
168
+ removeCachedBranch(workspaceId, name);
169
+ return {
170
+ success: true,
171
+ };
172
+ }
173
+ catch (error) {
174
+ return {
175
+ success: false,
176
+ error: error.message,
177
+ };
178
+ }
179
+ }
180
+ /**
181
+ * List cached branches (requires API call to get workspace ID)
182
+ */
183
+ export async function runBranchListCached(options = {}) {
184
+ const cwd = options.cwd ?? process.cwd();
185
+ let config;
186
+ try {
187
+ config = loadConfig(cwd);
188
+ }
189
+ catch {
190
+ return { branches: {} };
191
+ }
192
+ // Fetch the workspace ID from the API
193
+ let workspaceId;
194
+ try {
195
+ const workspace = await getWorkspace({
196
+ baseUrl: config.baseUrl,
197
+ token: config.token,
198
+ });
199
+ workspaceId = workspace.id;
200
+ }
201
+ catch {
202
+ return { branches: {} };
203
+ }
204
+ const cached = listCachedBranches(workspaceId);
205
+ // Return without tokens for security
206
+ const branches = {};
207
+ for (const [name, info] of Object.entries(cached)) {
208
+ branches[name] = {
209
+ id: info.id,
210
+ createdAt: info.createdAt,
211
+ };
212
+ }
213
+ return { branches };
214
+ }
215
+ //# sourceMappingURL=branch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"branch.js","sourceRoot":"","sources":["../../../src/cli/commands/branch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Build command - generates and pushes resources to Tinybird
3
+ */
4
+ import { type BuildFromIncludeResult } from "../../generator/index.js";
5
+ import { type BuildApiResult } from "../../api/build.js";
6
+ /**
7
+ * Build command options
8
+ */
9
+ export interface BuildCommandOptions {
10
+ /** Working directory (defaults to cwd) */
11
+ cwd?: string;
12
+ /** Skip pushing to API (just generate) */
13
+ dryRun?: boolean;
14
+ /** Override the token from config (used for branch tokens) */
15
+ tokenOverride?: string;
16
+ /** Use /v1/deploy instead of /v1/build (for main branch) */
17
+ useDeployEndpoint?: boolean;
18
+ }
19
+ /**
20
+ * Build command result
21
+ */
22
+ export interface BuildCommandResult {
23
+ /** Whether the build was successful */
24
+ success: boolean;
25
+ /** Build result with generated resources */
26
+ build?: BuildFromIncludeResult;
27
+ /** Build API result (if not dry run) */
28
+ deploy?: BuildApiResult;
29
+ /** Error message if failed */
30
+ error?: string;
31
+ /** Duration in milliseconds */
32
+ durationMs: number;
33
+ }
34
+ /**
35
+ * Run the build command
36
+ *
37
+ * Loads the schema, generates resources, and pushes to Tinybird API.
38
+ *
39
+ * @param options - Build options
40
+ * @returns Build command result
41
+ */
42
+ export declare function runBuild(options?: BuildCommandOptions): Promise<BuildCommandResult>;
43
+ //# sourceMappingURL=build.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/build.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAoB,KAAK,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AACzF,OAAO,EAAmB,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAI1E;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,0CAA0C;IAC1C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,0CAA0C;IAC1C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,8DAA8D;IAC9D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,4DAA4D;IAC5D,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,uCAAuC;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,4CAA4C;IAC5C,KAAK,CAAC,EAAE,sBAAsB,CAAC;IAC/B,wCAAwC;IACxC,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,wBAAsB,QAAQ,CAAC,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAsI7F"}