@tinybirdco/sdk 0.0.30 → 0.0.31

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 (76) hide show
  1. package/README.md +29 -4
  2. package/dist/cli/commands/branch.js +5 -5
  3. package/dist/cli/commands/branch.js.map +1 -1
  4. package/dist/cli/commands/build.d.ts.map +1 -1
  5. package/dist/cli/commands/build.js +2 -2
  6. package/dist/cli/commands/build.js.map +1 -1
  7. package/dist/cli/commands/build.test.d.ts +2 -0
  8. package/dist/cli/commands/build.test.d.ts.map +1 -0
  9. package/dist/cli/commands/build.test.js +266 -0
  10. package/dist/cli/commands/build.test.js.map +1 -0
  11. package/dist/cli/commands/clear.d.ts.map +1 -1
  12. package/dist/cli/commands/clear.js +2 -2
  13. package/dist/cli/commands/clear.js.map +1 -1
  14. package/dist/cli/commands/deploy.js +2 -2
  15. package/dist/cli/commands/deploy.js.map +1 -1
  16. package/dist/cli/commands/dev.js +12 -12
  17. package/dist/cli/commands/dev.js.map +1 -1
  18. package/dist/cli/commands/info.js +2 -2
  19. package/dist/cli/commands/info.js.map +1 -1
  20. package/dist/cli/commands/info.test.js +11 -13
  21. package/dist/cli/commands/info.test.js.map +1 -1
  22. package/dist/cli/commands/init.d.ts.map +1 -1
  23. package/dist/cli/commands/init.js +44 -26
  24. package/dist/cli/commands/init.js.map +1 -1
  25. package/dist/cli/commands/init.test.js +44 -25
  26. package/dist/cli/commands/init.test.js.map +1 -1
  27. package/dist/cli/commands/login.d.ts.map +1 -1
  28. package/dist/cli/commands/login.js +7 -6
  29. package/dist/cli/commands/login.js.map +1 -1
  30. package/dist/cli/commands/login.test.js +1 -1
  31. package/dist/cli/commands/login.test.js.map +1 -1
  32. package/dist/cli/commands/preview.d.ts.map +1 -1
  33. package/dist/cli/commands/preview.js +2 -2
  34. package/dist/cli/commands/preview.js.map +1 -1
  35. package/dist/cli/config-loader.d.ts +18 -0
  36. package/dist/cli/config-loader.d.ts.map +1 -0
  37. package/dist/cli/config-loader.js +57 -0
  38. package/dist/cli/config-loader.js.map +1 -0
  39. package/dist/cli/config-types.d.ts +28 -0
  40. package/dist/cli/config-types.d.ts.map +1 -0
  41. package/dist/cli/config-types.js +8 -0
  42. package/dist/cli/config-types.js.map +1 -0
  43. package/dist/cli/config.d.ts +63 -29
  44. package/dist/cli/config.d.ts.map +1 -1
  45. package/dist/cli/config.js +139 -43
  46. package/dist/cli/config.js.map +1 -1
  47. package/dist/cli/config.test.js +73 -9
  48. package/dist/cli/config.test.js.map +1 -1
  49. package/dist/cli/index.js +4 -0
  50. package/dist/cli/index.js.map +1 -1
  51. package/dist/client/base.d.ts.map +1 -1
  52. package/dist/client/base.js +21 -9
  53. package/dist/client/base.js.map +1 -1
  54. package/dist/index.d.ts +1 -0
  55. package/dist/index.d.ts.map +1 -1
  56. package/package.json +1 -1
  57. package/src/cli/commands/branch.ts +5 -5
  58. package/src/cli/commands/build.test.ts +310 -0
  59. package/src/cli/commands/build.ts +2 -2
  60. package/src/cli/commands/clear.ts +2 -2
  61. package/src/cli/commands/deploy.ts +2 -2
  62. package/src/cli/commands/dev.ts +12 -12
  63. package/src/cli/commands/info.test.ts +11 -13
  64. package/src/cli/commands/info.ts +2 -2
  65. package/src/cli/commands/init.test.ts +53 -37
  66. package/src/cli/commands/init.ts +49 -30
  67. package/src/cli/commands/login.test.ts +1 -1
  68. package/src/cli/commands/login.ts +7 -6
  69. package/src/cli/commands/preview.ts +2 -2
  70. package/src/cli/config-loader.ts +87 -0
  71. package/src/cli/config-types.ts +29 -0
  72. package/src/cli/config.test.ts +95 -8
  73. package/src/cli/config.ts +179 -70
  74. package/src/cli/index.ts +3 -0
  75. package/src/client/base.ts +33 -16
  76. package/src/index.ts +4 -0
@@ -101,7 +101,7 @@ export class TinybirdClient {
101
101
  try {
102
102
  // Dynamic import to avoid circular dependencies and to keep CLI code
103
103
  // out of the client bundle when not using dev mode
104
- const { loadConfig } = await import("../cli/config.js");
104
+ const { loadConfigAsync } = await import("../cli/config.js");
105
105
  const { getOrCreateBranch } = await import("../api/branches.js");
106
106
  const { isPreviewEnvironment, getPreviewBranchName } = await import("./preview.js");
107
107
  // In preview environments (Vercel preview, CI), the token was already resolved
@@ -110,9 +110,14 @@ export class TinybirdClient {
110
110
  const gitBranchName = getPreviewBranchName();
111
111
  // Preview branches use the tmp_ci_ prefix (matches what tinybird preview creates)
112
112
  const sanitized = gitBranchName
113
- ? gitBranchName.replace(/[^a-zA-Z0-9_]/g, "_").replace(/_+/g, "_").replace(/^_|_$/g, "")
113
+ ? gitBranchName
114
+ .replace(/[^a-zA-Z0-9_]/g, "_")
115
+ .replace(/_+/g, "_")
116
+ .replace(/^_|_$/g, "")
117
+ : undefined;
118
+ const tinybirdBranchName = sanitized
119
+ ? `tmp_ci_${sanitized}`
114
120
  : undefined;
115
- const tinybirdBranchName = sanitized ? `tmp_ci_${sanitized}` : undefined;
116
121
  return this.buildContext({
117
122
  token: this.config.token,
118
123
  isBranchToken: !!tinybirdBranchName,
@@ -122,18 +127,26 @@ export class TinybirdClient {
122
127
  }
123
128
  // Use configDir if provided (important for monorepo setups where process.cwd()
124
129
  // may not be in the same directory tree as tinybird.json)
125
- const config = loadConfig(this.config.configDir);
130
+ const config = await loadConfigAsync(this.config.configDir);
126
131
  const gitBranch = config.gitBranch ?? undefined;
127
132
  // If on main branch, use the workspace token
128
133
  if (config.isMainBranch || !config.tinybirdBranch) {
129
- return this.buildContext({ token: this.config.token, isBranchToken: false, gitBranch });
134
+ return this.buildContext({
135
+ token: this.config.token,
136
+ isBranchToken: false,
137
+ gitBranch,
138
+ });
130
139
  }
131
140
  const branchName = config.tinybirdBranch;
132
141
  // Get or create branch (always fetch fresh to avoid stale cache issues)
133
142
  const branch = await getOrCreateBranch({ baseUrl: this.config.baseUrl, token: this.config.token }, branchName);
134
143
  if (!branch.token) {
135
144
  // Fall back to workspace token if no branch token
136
- return this.buildContext({ token: this.config.token, isBranchToken: false, gitBranch });
145
+ return this.buildContext({
146
+ token: this.config.token,
147
+ isBranchToken: false,
148
+ gitBranch,
149
+ });
137
150
  }
138
151
  return this.buildContext({
139
152
  token: branch.token,
@@ -142,9 +155,8 @@ export class TinybirdClient {
142
155
  gitBranch,
143
156
  });
144
157
  }
145
- catch {
146
- // If anything fails, fall back to the workspace token
147
- return this.buildContext({ token: this.config.token, isBranchToken: false });
158
+ catch (error) {
159
+ throw new TinybirdError(`Failed to resolve branch context: ${error.message}`, 500);
148
160
  }
149
161
  }
150
162
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/client/base.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/client/base.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -80,4 +80,5 @@ export type { TinybirdApiConfig, TinybirdApiQueryOptions, TinybirdApiIngestOptio
80
80
  export { isPreviewEnvironment, getPreviewBranchName, resolveToken, clearTokenCache, } from "./client/preview.js";
81
81
  export { parseApiUrl, getDashboardUrl, getBranchDashboardUrl, getLocalDashboardUrl, } from "./api/dashboard.js";
82
82
  export type { RegionInfo } from "./api/dashboard.js";
83
+ export type { TinybirdConfig, DevMode } from "./cli/config-types.js";
83
84
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tinybirdco/sdk",
3
- "version": "0.0.30",
3
+ "version": "0.0.31",
4
4
  "description": "TypeScript SDK for Tinybird Forward - define datasources and pipes as TypeScript",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -2,7 +2,7 @@
2
2
  * Branch management commands
3
3
  */
4
4
 
5
- import { loadConfig, type ResolvedConfig } from "../config.js";
5
+ import { loadConfigAsync, type ResolvedConfig } from "../config.js";
6
6
  import {
7
7
  listBranches,
8
8
  getBranch,
@@ -83,7 +83,7 @@ export async function runBranchList(
83
83
 
84
84
  let config: ResolvedConfig;
85
85
  try {
86
- config = loadConfig(cwd);
86
+ config = await loadConfigAsync(cwd);
87
87
  } catch (error) {
88
88
  return {
89
89
  success: false,
@@ -122,7 +122,7 @@ export async function runBranchStatus(
122
122
 
123
123
  let config: ResolvedConfig;
124
124
  try {
125
- config = loadConfig(cwd);
125
+ config = await loadConfigAsync(cwd);
126
126
  } catch (error) {
127
127
  return {
128
128
  success: false,
@@ -239,7 +239,7 @@ export async function runBranchDelete(
239
239
 
240
240
  let config: ResolvedConfig;
241
241
  try {
242
- config = loadConfig(cwd);
242
+ config = await loadConfigAsync(cwd);
243
243
  } catch (error) {
244
244
  return {
245
245
  success: false,
@@ -288,7 +288,7 @@ export async function runBranchListCached(
288
288
 
289
289
  let config: ResolvedConfig;
290
290
  try {
291
- config = loadConfig(cwd);
291
+ config = await loadConfigAsync(cwd);
292
292
  } catch {
293
293
  return { branches: {} };
294
294
  }
@@ -0,0 +1,310 @@
1
+ import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
2
+ import { runBuild } from "./build.js";
3
+
4
+ // Mock all dependencies
5
+ vi.mock("../config.js", () => ({
6
+ loadConfigAsync: vi.fn(),
7
+ LOCAL_BASE_URL: "http://localhost:7181",
8
+ }));
9
+
10
+ vi.mock("../../generator/index.js", () => ({
11
+ buildFromInclude: vi.fn(),
12
+ }));
13
+
14
+ vi.mock("../../api/build.js", () => ({
15
+ buildToTinybird: vi.fn(),
16
+ }));
17
+
18
+ vi.mock("../../api/branches.js", () => ({
19
+ getOrCreateBranch: vi.fn(),
20
+ }));
21
+
22
+ vi.mock("../../api/local.js", () => ({
23
+ getLocalTokens: vi.fn(),
24
+ getOrCreateLocalWorkspace: vi.fn(),
25
+ getLocalWorkspaceName: vi.fn(),
26
+ LocalNotRunningError: class LocalNotRunningError extends Error {},
27
+ }));
28
+
29
+ vi.mock("../../api/workspaces.js", () => ({
30
+ getWorkspace: vi.fn(),
31
+ }));
32
+
33
+ vi.mock("../../api/dashboard.js", () => ({
34
+ getBranchDashboardUrl: vi.fn(),
35
+ getLocalDashboardUrl: vi.fn(),
36
+ }));
37
+
38
+ describe("Build Command", () => {
39
+ beforeEach(() => {
40
+ vi.clearAllMocks();
41
+ });
42
+
43
+ afterEach(() => {
44
+ vi.resetAllMocks();
45
+ });
46
+
47
+ describe("devModeOverride", () => {
48
+ it("uses local mode when devModeOverride is 'local'", async () => {
49
+ const { loadConfigAsync } = await import("../config.js");
50
+ const { buildFromInclude } = await import("../../generator/index.js");
51
+ const { getLocalTokens, getOrCreateLocalWorkspace, getLocalWorkspaceName } = await import("../../api/local.js");
52
+ const { buildToTinybird } = await import("../../api/build.js");
53
+ const { getWorkspace } = await import("../../api/workspaces.js");
54
+ const { getLocalDashboardUrl } = await import("../../api/dashboard.js");
55
+
56
+ // Config has devMode: "branch" but we override with "local"
57
+ vi.mocked(loadConfigAsync).mockResolvedValue({
58
+ include: ["test.ts"],
59
+ token: "p.test-token",
60
+ baseUrl: "https://api.tinybird.co",
61
+ configPath: "/test/tinybird.config.json",
62
+ devMode: "branch", // Config says branch
63
+ cwd: "/test",
64
+ gitBranch: "feature-test",
65
+ tinybirdBranch: "feature_test",
66
+ isMainBranch: false,
67
+ });
68
+
69
+ vi.mocked(buildFromInclude).mockResolvedValue({
70
+ resources: {
71
+ datasources: [],
72
+ pipes: [],
73
+ connections: [],
74
+ },
75
+ entities: {
76
+ datasources: {},
77
+ pipes: {},
78
+ connections: {},
79
+ rawDatasources: [],
80
+ rawPipes: [],
81
+ sourceFiles: [],
82
+ },
83
+ stats: {
84
+ datasourceCount: 0,
85
+ pipeCount: 0,
86
+ connectionCount: 0,
87
+ },
88
+ });
89
+
90
+ vi.mocked(getLocalTokens).mockResolvedValue({
91
+ admin_token: "admin-token",
92
+ user_token: "user-token",
93
+ workspace_admin_token: "workspace-admin-token",
94
+ });
95
+
96
+ vi.mocked(getWorkspace).mockResolvedValue({
97
+ id: "ws-id",
98
+ name: "test-workspace",
99
+ user_id: "user-id",
100
+ user_email: "user@test.com",
101
+ scope: "USER",
102
+ main: null,
103
+ });
104
+
105
+ vi.mocked(getLocalWorkspaceName).mockReturnValue("feature_test_workspace");
106
+
107
+ vi.mocked(getOrCreateLocalWorkspace).mockResolvedValue({
108
+ workspace: { id: "local-ws-id", name: "feature_test_workspace", token: "local-token" },
109
+ wasCreated: false,
110
+ });
111
+
112
+ vi.mocked(getLocalDashboardUrl).mockReturnValue("http://localhost:7181/dashboard");
113
+
114
+ vi.mocked(buildToTinybird).mockResolvedValue({
115
+ success: true,
116
+ result: "success",
117
+ datasourceCount: 0,
118
+ pipeCount: 0,
119
+ connectionCount: 0,
120
+ });
121
+
122
+ const result = await runBuild({
123
+ devModeOverride: "local", // Override to local
124
+ });
125
+
126
+ expect(result.success).toBe(true);
127
+ expect(result.branchInfo?.isLocal).toBe(true);
128
+ // Verify local APIs were called
129
+ expect(getLocalTokens).toHaveBeenCalled();
130
+ expect(getOrCreateLocalWorkspace).toHaveBeenCalled();
131
+ // Verify buildToTinybird was called with local URL
132
+ expect(buildToTinybird).toHaveBeenCalledWith(
133
+ expect.objectContaining({
134
+ baseUrl: "http://localhost:7181",
135
+ }),
136
+ expect.anything()
137
+ );
138
+ });
139
+
140
+ it("uses branch mode when devModeOverride is 'branch'", async () => {
141
+ const { loadConfigAsync } = await import("../config.js");
142
+ const { buildFromInclude } = await import("../../generator/index.js");
143
+ const { getOrCreateBranch } = await import("../../api/branches.js");
144
+ const { buildToTinybird } = await import("../../api/build.js");
145
+ const { getWorkspace } = await import("../../api/workspaces.js");
146
+ const { getBranchDashboardUrl } = await import("../../api/dashboard.js");
147
+
148
+ // Config has devMode: "local" but we override with "branch"
149
+ vi.mocked(loadConfigAsync).mockResolvedValue({
150
+ include: ["test.ts"],
151
+ token: "p.test-token",
152
+ baseUrl: "https://api.tinybird.co",
153
+ configPath: "/test/tinybird.config.json",
154
+ devMode: "local", // Config says local
155
+ cwd: "/test",
156
+ gitBranch: "feature-test",
157
+ tinybirdBranch: "feature_test",
158
+ isMainBranch: false,
159
+ });
160
+
161
+ vi.mocked(buildFromInclude).mockResolvedValue({
162
+ resources: {
163
+ datasources: [],
164
+ pipes: [],
165
+ connections: [],
166
+ },
167
+ entities: {
168
+ datasources: {},
169
+ pipes: {},
170
+ connections: {},
171
+ rawDatasources: [],
172
+ rawPipes: [],
173
+ sourceFiles: [],
174
+ },
175
+ stats: {
176
+ datasourceCount: 0,
177
+ pipeCount: 0,
178
+ connectionCount: 0,
179
+ },
180
+ });
181
+
182
+ vi.mocked(getOrCreateBranch).mockResolvedValue({
183
+ id: "branch-id",
184
+ name: "feature_test",
185
+ token: "branch-token",
186
+ wasCreated: false,
187
+ created_at: "2024-01-01",
188
+ });
189
+
190
+ vi.mocked(getWorkspace).mockResolvedValue({
191
+ id: "ws-id",
192
+ name: "test-workspace",
193
+ user_id: "user-id",
194
+ user_email: "user@test.com",
195
+ scope: "USER",
196
+ main: null,
197
+ });
198
+
199
+ vi.mocked(getBranchDashboardUrl).mockReturnValue("https://app.tinybird.co/dashboard");
200
+
201
+ vi.mocked(buildToTinybird).mockResolvedValue({
202
+ success: true,
203
+ result: "success",
204
+ datasourceCount: 0,
205
+ pipeCount: 0,
206
+ connectionCount: 0,
207
+ });
208
+
209
+ const result = await runBuild({
210
+ devModeOverride: "branch", // Override to branch
211
+ });
212
+
213
+ expect(result.success).toBe(true);
214
+ expect(result.branchInfo?.isLocal).toBe(false);
215
+ // Verify branch APIs were called
216
+ expect(getOrCreateBranch).toHaveBeenCalled();
217
+ // Verify buildToTinybird was called with cloud URL
218
+ expect(buildToTinybird).toHaveBeenCalledWith(
219
+ expect.objectContaining({
220
+ baseUrl: "https://api.tinybird.co",
221
+ }),
222
+ expect.anything()
223
+ );
224
+ });
225
+
226
+ it("uses config devMode when no override is provided", async () => {
227
+ const { loadConfigAsync } = await import("../config.js");
228
+ const { buildFromInclude } = await import("../../generator/index.js");
229
+ const { getLocalTokens, getOrCreateLocalWorkspace, getLocalWorkspaceName } = await import("../../api/local.js");
230
+ const { buildToTinybird } = await import("../../api/build.js");
231
+ const { getWorkspace } = await import("../../api/workspaces.js");
232
+ const { getLocalDashboardUrl } = await import("../../api/dashboard.js");
233
+
234
+ // Config has devMode: "local" and no override
235
+ vi.mocked(loadConfigAsync).mockResolvedValue({
236
+ include: ["test.ts"],
237
+ token: "p.test-token",
238
+ baseUrl: "https://api.tinybird.co",
239
+ configPath: "/test/tinybird.config.json",
240
+ devMode: "local", // Config says local
241
+ cwd: "/test",
242
+ gitBranch: "feature-test",
243
+ tinybirdBranch: "feature_test",
244
+ isMainBranch: false,
245
+ });
246
+
247
+ vi.mocked(buildFromInclude).mockResolvedValue({
248
+ resources: {
249
+ datasources: [],
250
+ pipes: [],
251
+ connections: [],
252
+ },
253
+ entities: {
254
+ datasources: {},
255
+ pipes: {},
256
+ connections: {},
257
+ rawDatasources: [],
258
+ rawPipes: [],
259
+ sourceFiles: [],
260
+ },
261
+ stats: {
262
+ datasourceCount: 0,
263
+ pipeCount: 0,
264
+ connectionCount: 0,
265
+ },
266
+ });
267
+
268
+ vi.mocked(getLocalTokens).mockResolvedValue({
269
+ admin_token: "admin-token",
270
+ user_token: "user-token",
271
+ workspace_admin_token: "workspace-admin-token",
272
+ });
273
+
274
+ vi.mocked(getWorkspace).mockResolvedValue({
275
+ id: "ws-id",
276
+ name: "test-workspace",
277
+ user_id: "user-id",
278
+ user_email: "user@test.com",
279
+ scope: "USER",
280
+ main: null,
281
+ });
282
+
283
+ vi.mocked(getLocalWorkspaceName).mockReturnValue("feature_test_workspace");
284
+
285
+ vi.mocked(getOrCreateLocalWorkspace).mockResolvedValue({
286
+ workspace: { id: "local-ws-id", name: "feature_test_workspace", token: "local-token" },
287
+ wasCreated: false,
288
+ });
289
+
290
+ vi.mocked(getLocalDashboardUrl).mockReturnValue("http://localhost:7181/dashboard");
291
+
292
+ vi.mocked(buildToTinybird).mockResolvedValue({
293
+ success: true,
294
+ result: "success",
295
+ datasourceCount: 0,
296
+ pipeCount: 0,
297
+ connectionCount: 0,
298
+ });
299
+
300
+ const result = await runBuild({
301
+ // No devModeOverride - should use config's devMode: "local"
302
+ });
303
+
304
+ expect(result.success).toBe(true);
305
+ expect(result.branchInfo?.isLocal).toBe(true);
306
+ // Verify local APIs were called (because config says local)
307
+ expect(getLocalTokens).toHaveBeenCalled();
308
+ });
309
+ });
310
+ });
@@ -2,7 +2,7 @@
2
2
  * Build command - generates and pushes resources to Tinybird branches
3
3
  */
4
4
 
5
- import { loadConfig, LOCAL_BASE_URL, type ResolvedConfig, type DevMode } from "../config.js";
5
+ import { loadConfigAsync, LOCAL_BASE_URL, type ResolvedConfig, type DevMode } from "../config.js";
6
6
  import { buildFromInclude, type BuildFromIncludeResult } from "../../generator/index.js";
7
7
  import { buildToTinybird, type BuildApiResult } from "../../api/build.js";
8
8
  import { getOrCreateBranch } from "../../api/branches.js";
@@ -79,7 +79,7 @@ export async function runBuild(options: BuildCommandOptions = {}): Promise<Build
79
79
  // Load config
80
80
  let config: ResolvedConfig;
81
81
  try {
82
- config = loadConfig(cwd);
82
+ config = await loadConfigAsync(cwd);
83
83
  } catch (error) {
84
84
  return {
85
85
  success: false,
@@ -2,7 +2,7 @@
2
2
  * Clear command - clears a local workspace or branch by deleting and recreating it
3
3
  */
4
4
 
5
- import { loadConfig, type ResolvedConfig, type DevMode } from "../config.js";
5
+ import { loadConfigAsync, type ResolvedConfig, type DevMode } from "../config.js";
6
6
  import {
7
7
  getLocalTokens,
8
8
  clearLocalWorkspace,
@@ -60,7 +60,7 @@ export async function runClear(
60
60
 
61
61
  let config: ResolvedConfig;
62
62
  try {
63
- config = loadConfig(cwd);
63
+ config = await loadConfigAsync(cwd);
64
64
  } catch (error) {
65
65
  return {
66
66
  success: false,
@@ -2,7 +2,7 @@
2
2
  * Deploy command - deploys resources to main Tinybird workspace
3
3
  */
4
4
 
5
- import { loadConfig, type ResolvedConfig } from "../config.js";
5
+ import { loadConfigAsync, type ResolvedConfig } from "../config.js";
6
6
  import { buildFromInclude, type BuildFromIncludeResult } from "../../generator/index.js";
7
7
  import { deployToMain, type DeployCallbacks } from "../../api/deploy.js";
8
8
  import type { BuildApiResult } from "../../api/build.js";
@@ -52,7 +52,7 @@ export async function runDeploy(options: DeployCommandOptions = {}): Promise<Dep
52
52
  // Load config
53
53
  let config: ResolvedConfig;
54
54
  try {
55
- config = loadConfig(cwd);
55
+ config = await loadConfigAsync(cwd);
56
56
  } catch (error) {
57
57
  return {
58
58
  success: false,
@@ -5,7 +5,7 @@
5
5
  import * as path from "path";
6
6
  import { watch } from "chokidar";
7
7
  import {
8
- loadConfig,
8
+ loadConfigAsync,
9
9
  configExists,
10
10
  findConfigFile,
11
11
  hasValidToken,
@@ -121,14 +121,14 @@ export async function runDev(
121
121
  // Check if project is initialized
122
122
  if (!configExists(cwd)) {
123
123
  throw new Error(
124
- "No tinybird.json found. Run 'npx tinybird init' to initialize a project."
124
+ "No tinybird config found. Run 'npx tinybird init' to initialize a project."
125
125
  );
126
126
  }
127
127
 
128
128
  // Load config first to determine devMode
129
129
  let config: ResolvedConfig;
130
130
  try {
131
- config = loadConfig(cwd);
131
+ config = await loadConfigAsync(cwd);
132
132
  } catch (error) {
133
133
  throw error;
134
134
  }
@@ -150,18 +150,18 @@ export async function runDev(
150
150
  }
151
151
 
152
152
  // Find the config file (may be in parent directory)
153
- const configPath = findConfigFile(cwd);
154
- if (!configPath) {
155
- throw new Error("No tinybird.json found. Run 'npx tinybird init' first.");
153
+ const configResult = findConfigFile(cwd);
154
+ if (!configResult) {
155
+ throw new Error("No tinybird config found. Run 'npx tinybird init' first.");
156
156
  }
157
157
 
158
- // Save token to .env.local (in same directory as tinybird.json)
159
- const configDir = path.dirname(configPath);
158
+ // Save token to .env.local (in same directory as config file)
159
+ const configDir = path.dirname(configResult.path);
160
160
  saveTinybirdToken(configDir, authResult.token);
161
161
 
162
- // Update baseUrl in tinybird.json if it changed
163
- if (authResult.baseUrl) {
164
- updateConfig(configPath, {
162
+ // Update baseUrl in config file if it changed (only for JSON configs)
163
+ if (authResult.baseUrl && configResult.path.endsWith(".json")) {
164
+ updateConfig(configResult.path, {
165
165
  baseUrl: authResult.baseUrl,
166
166
  });
167
167
  }
@@ -175,7 +175,7 @@ export async function runDev(
175
175
  });
176
176
 
177
177
  // Reload config after login
178
- config = loadConfig(cwd);
178
+ config = await loadConfigAsync(cwd);
179
179
  }
180
180
 
181
181
  // Determine effective token and branch info based on devMode