@tinybirdco/sdk 0.0.4 → 0.0.7

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 (165) hide show
  1. package/README.md +52 -13
  2. package/dist/api/branches.d.ts.map +1 -1
  3. package/dist/api/branches.js +6 -5
  4. package/dist/api/branches.js.map +1 -1
  5. package/dist/api/branches.test.js +32 -6
  6. package/dist/api/branches.test.js.map +1 -1
  7. package/dist/api/build.d.ts.map +1 -1
  8. package/dist/api/build.js +2 -1
  9. package/dist/api/build.js.map +1 -1
  10. package/dist/api/deploy.d.ts +42 -3
  11. package/dist/api/deploy.d.ts.map +1 -1
  12. package/dist/api/deploy.js +162 -19
  13. package/dist/api/deploy.js.map +1 -1
  14. package/dist/api/deploy.test.js +83 -31
  15. package/dist/api/deploy.test.js.map +1 -1
  16. package/dist/api/fetcher.d.ts +6 -0
  17. package/dist/api/fetcher.d.ts.map +1 -0
  18. package/dist/api/fetcher.js +13 -0
  19. package/dist/api/fetcher.js.map +1 -0
  20. package/dist/api/local.d.ts.map +1 -1
  21. package/dist/api/local.js +5 -4
  22. package/dist/api/local.js.map +1 -1
  23. package/dist/api/local.test.js.map +1 -1
  24. package/dist/api/resources.d.ts +178 -0
  25. package/dist/api/resources.d.ts.map +1 -0
  26. package/dist/api/resources.js +245 -0
  27. package/dist/api/resources.js.map +1 -0
  28. package/dist/api/resources.test.d.ts +2 -0
  29. package/dist/api/resources.test.d.ts.map +1 -0
  30. package/dist/api/resources.test.js +255 -0
  31. package/dist/api/resources.test.js.map +1 -0
  32. package/dist/api/workspaces.d.ts.map +1 -1
  33. package/dist/api/workspaces.js +2 -1
  34. package/dist/api/workspaces.js.map +1 -1
  35. package/dist/api/workspaces.test.js +9 -1
  36. package/dist/api/workspaces.test.js.map +1 -1
  37. package/dist/cli/auth.d.ts.map +1 -1
  38. package/dist/cli/auth.js +2 -1
  39. package/dist/cli/auth.js.map +1 -1
  40. package/dist/cli/commands/build.d.ts +3 -4
  41. package/dist/cli/commands/build.d.ts.map +1 -1
  42. package/dist/cli/commands/build.js +23 -25
  43. package/dist/cli/commands/build.js.map +1 -1
  44. package/dist/cli/commands/deploy.d.ts +41 -0
  45. package/dist/cli/commands/deploy.d.ts.map +1 -0
  46. package/dist/cli/commands/deploy.js +92 -0
  47. package/dist/cli/commands/deploy.js.map +1 -0
  48. package/dist/cli/commands/dev.d.ts.map +1 -1
  49. package/dist/cli/commands/dev.js +7 -3
  50. package/dist/cli/commands/dev.js.map +1 -1
  51. package/dist/cli/commands/init.d.ts +38 -1
  52. package/dist/cli/commands/init.d.ts.map +1 -1
  53. package/dist/cli/commands/init.js +434 -23
  54. package/dist/cli/commands/init.js.map +1 -1
  55. package/dist/cli/commands/init.test.js +190 -30
  56. package/dist/cli/commands/init.test.js.map +1 -1
  57. package/dist/cli/index.js +80 -15
  58. package/dist/cli/index.js.map +1 -1
  59. package/dist/cli/utils/package-manager.d.ts +8 -0
  60. package/dist/cli/utils/package-manager.d.ts.map +1 -0
  61. package/dist/cli/utils/package-manager.js +45 -0
  62. package/dist/cli/utils/package-manager.js.map +1 -0
  63. package/dist/cli/utils/package-manager.test.d.ts +2 -0
  64. package/dist/cli/utils/package-manager.test.d.ts.map +1 -0
  65. package/dist/cli/utils/package-manager.test.js +85 -0
  66. package/dist/cli/utils/package-manager.test.js.map +1 -0
  67. package/dist/client/base.d.ts.map +1 -1
  68. package/dist/client/base.js +2 -1
  69. package/dist/client/base.js.map +1 -1
  70. package/dist/codegen/index.d.ts +39 -0
  71. package/dist/codegen/index.d.ts.map +1 -0
  72. package/dist/codegen/index.js +300 -0
  73. package/dist/codegen/index.js.map +1 -0
  74. package/dist/codegen/index.test.d.ts +2 -0
  75. package/dist/codegen/index.test.d.ts.map +1 -0
  76. package/dist/codegen/index.test.js +310 -0
  77. package/dist/codegen/index.test.js.map +1 -0
  78. package/dist/codegen/type-mapper.d.ts +20 -0
  79. package/dist/codegen/type-mapper.d.ts.map +1 -0
  80. package/dist/codegen/type-mapper.js +238 -0
  81. package/dist/codegen/type-mapper.js.map +1 -0
  82. package/dist/codegen/type-mapper.test.d.ts +2 -0
  83. package/dist/codegen/type-mapper.test.d.ts.map +1 -0
  84. package/dist/codegen/type-mapper.test.js +167 -0
  85. package/dist/codegen/type-mapper.test.js.map +1 -0
  86. package/dist/codegen/utils.d.ts +46 -0
  87. package/dist/codegen/utils.d.ts.map +1 -0
  88. package/dist/codegen/utils.js +141 -0
  89. package/dist/codegen/utils.js.map +1 -0
  90. package/dist/codegen/utils.test.d.ts +2 -0
  91. package/dist/codegen/utils.test.d.ts.map +1 -0
  92. package/dist/codegen/utils.test.js +178 -0
  93. package/dist/codegen/utils.test.js.map +1 -0
  94. package/dist/generator/index.d.ts +3 -0
  95. package/dist/generator/index.d.ts.map +1 -1
  96. package/dist/generator/index.js +17 -1
  97. package/dist/generator/index.js.map +1 -1
  98. package/dist/generator/index.test.js +104 -1
  99. package/dist/generator/index.test.js.map +1 -1
  100. package/dist/generator/loader.d.ts +15 -0
  101. package/dist/generator/loader.d.ts.map +1 -1
  102. package/dist/generator/loader.js +24 -0
  103. package/dist/generator/loader.js.map +1 -1
  104. package/dist/schema/connection.d.ts.map +1 -1
  105. package/dist/schema/connection.js +3 -2
  106. package/dist/schema/connection.js.map +1 -1
  107. package/dist/schema/datasource.d.ts.map +1 -1
  108. package/dist/schema/datasource.js +3 -2
  109. package/dist/schema/datasource.js.map +1 -1
  110. package/dist/schema/params.d.ts.map +1 -1
  111. package/dist/schema/params.js +3 -2
  112. package/dist/schema/params.js.map +1 -1
  113. package/dist/schema/pipe.d.ts +2 -2
  114. package/dist/schema/pipe.d.ts.map +1 -1
  115. package/dist/schema/pipe.js +4 -4
  116. package/dist/schema/pipe.js.map +1 -1
  117. package/dist/schema/project.d.ts.map +1 -1
  118. package/dist/schema/project.js +3 -2
  119. package/dist/schema/project.js.map +1 -1
  120. package/dist/schema/types.d.ts.map +1 -1
  121. package/dist/schema/types.js +3 -2
  122. package/dist/schema/types.js.map +1 -1
  123. package/dist/test/handlers.d.ts +49 -0
  124. package/dist/test/handlers.d.ts.map +1 -1
  125. package/dist/test/handlers.js +45 -0
  126. package/dist/test/handlers.js.map +1 -1
  127. package/package.json +4 -2
  128. package/src/api/branches.test.ts +65 -57
  129. package/src/api/branches.ts +7 -5
  130. package/src/api/build.ts +2 -1
  131. package/src/api/deploy.test.ts +141 -36
  132. package/src/api/deploy.ts +231 -23
  133. package/src/api/fetcher.ts +17 -0
  134. package/src/api/local.test.ts +43 -31
  135. package/src/api/local.ts +5 -4
  136. package/src/api/resources.test.ts +332 -0
  137. package/src/api/resources.ts +555 -0
  138. package/src/api/workspaces.test.ts +15 -9
  139. package/src/api/workspaces.ts +3 -1
  140. package/src/cli/auth.ts +2 -1
  141. package/src/cli/commands/build.ts +29 -33
  142. package/src/cli/commands/deploy.ts +131 -0
  143. package/src/cli/commands/dev.ts +10 -3
  144. package/src/cli/commands/init.test.ts +239 -30
  145. package/src/cli/commands/init.ts +548 -26
  146. package/src/cli/index.ts +117 -20
  147. package/src/cli/utils/package-manager.test.ts +118 -0
  148. package/src/cli/utils/package-manager.ts +44 -0
  149. package/src/client/base.ts +3 -2
  150. package/src/codegen/index.test.ts +367 -0
  151. package/src/codegen/index.ts +379 -0
  152. package/src/codegen/type-mapper.test.ts +224 -0
  153. package/src/codegen/type-mapper.ts +265 -0
  154. package/src/codegen/utils.test.ts +221 -0
  155. package/src/codegen/utils.ts +174 -0
  156. package/src/generator/index.test.ts +121 -1
  157. package/src/generator/index.ts +19 -1
  158. package/src/generator/loader.ts +43 -0
  159. package/src/schema/connection.ts +3 -2
  160. package/src/schema/datasource.ts +3 -2
  161. package/src/schema/params.ts +3 -2
  162. package/src/schema/pipe.ts +4 -4
  163. package/src/schema/project.ts +3 -2
  164. package/src/schema/types.ts +3 -2
  165. package/src/test/handlers.ts +58 -0
@@ -3,7 +3,9 @@
3
3
  */
4
4
  import * as fs from "fs";
5
5
  import * as path from "path";
6
- import { hasValidToken, getTinybirdDir, getRelativeTinybirdDir, getConfigPath, updateConfig, } from "../config.js";
6
+ import * as p from "@clack/prompts";
7
+ import pc from "picocolors";
8
+ import { hasValidToken, getRelativeTinybirdDir, getConfigPath, updateConfig, } from "../config.js";
7
9
  import { browserLogin } from "../auth.js";
8
10
  import { saveTinybirdToken } from "../env.js";
9
11
  /**
@@ -31,9 +33,9 @@ export const pageViews = defineDatasource("page_views", {
31
33
  export type PageViewsRow = InferRow<typeof pageViews>;
32
34
  `;
33
35
  /**
34
- * Default starter content for pipes.ts
36
+ * Default starter content for endpoints.ts
35
37
  */
36
- const PIPES_CONTENT = `import { defineEndpoint, node, t, p, type InferParams, type InferOutputRow } from "@tinybirdco/sdk";
38
+ const ENDPOINTS_CONTENT = `import { defineEndpoint, node, t, p, type InferParams, type InferOutputRow } from "@tinybirdco/sdk";
37
39
 
38
40
  /**
39
41
  * Top pages endpoint - get the most visited pages
@@ -78,7 +80,7 @@ const CLIENT_CONTENT = `/**
78
80
  * Tinybird Client
79
81
  *
80
82
  * This file defines the typed Tinybird client for your project.
81
- * Add your datasources and pipes here as you create them.
83
+ * Add your datasources and endpoints here as you create them.
82
84
  */
83
85
 
84
86
  import { createTinybirdClient } from "@tinybirdco/sdk";
@@ -87,7 +89,7 @@ import { createTinybirdClient } from "@tinybirdco/sdk";
87
89
  import { pageViews, type PageViewsRow } from "./datasources";
88
90
 
89
91
  // Import endpoints and their types
90
- import { topPages, type TopPagesParams, type TopPagesOutput } from "./pipes";
92
+ import { topPages, type TopPagesParams, type TopPagesOutput } from "./endpoints";
91
93
 
92
94
  // Create the typed Tinybird client
93
95
  export const tinybird = createTinybirdClient({
@@ -101,25 +103,126 @@ export type { PageViewsRow, TopPagesParams, TopPagesOutput };
101
103
  // Re-export entities
102
104
  export { pageViews, topPages };
103
105
  `;
106
+ const TINYBIRD_CI_WORKFLOW = `name: Tinybird CI
107
+
108
+ on:
109
+ pull_request:
110
+ paths:
111
+ - "tinybird.json"
112
+ - "src/tinybird/**"
113
+ - "tinybird/**"
114
+ - "**/*.datasource"
115
+ - "**/*.pipe"
116
+
117
+ jobs:
118
+ tinybird:
119
+ runs-on: ubuntu-latest
120
+ steps:
121
+ - uses: actions/checkout@v4
122
+ - uses: pnpm/action-setup@v4
123
+ - uses: actions/setup-node@v4
124
+ with:
125
+ node-version: "20"
126
+ cache: "pnpm"
127
+ - run: pnpm install --frozen-lockfile
128
+ - run: pnpm run tinybird:deploy -- --check
129
+ env:
130
+ TINYBIRD_TOKEN: \${{ secrets.TINYBIRD_TOKEN }}
131
+ `;
132
+ const TINYBIRD_CD_WORKFLOW = `name: Tinybird CD
133
+
134
+ on:
135
+ push:
136
+ branches:
137
+ - main
138
+ paths:
139
+ - "tinybird.json"
140
+ - "src/tinybird/**"
141
+ - "tinybird/**"
142
+ - "**/*.datasource"
143
+ - "**/*.pipe"
144
+
145
+ jobs:
146
+ tinybird:
147
+ runs-on: ubuntu-latest
148
+ steps:
149
+ - uses: actions/checkout@v4
150
+ - uses: pnpm/action-setup@v4
151
+ - uses: actions/setup-node@v4
152
+ with:
153
+ node-version: "20"
154
+ cache: "pnpm"
155
+ - run: pnpm install --frozen-lockfile
156
+ - run: pnpm run tinybird:deploy
157
+ env:
158
+ TINYBIRD_TOKEN: \${{ secrets.TINYBIRD_TOKEN }}
159
+ `;
160
+ const TINYBIRD_GITLAB_CI = `stages:\n - tinybird\n\ntinybird_ci:\n stage: tinybird\n image: node:20\n rules:\n - changes:\n - tinybird.json\n - src/tinybird/**\n - tinybird/**\n - **/*.datasource\n - **/*.pipe\n script:\n - corepack enable\n - pnpm install --frozen-lockfile\n - pnpm run tinybird:deploy -- --check\n variables:\n TINYBIRD_TOKEN: \${TINYBIRD_TOKEN}\n\ntinybird_cd:\n stage: tinybird\n image: node:20\n rules:\n - if: '$CI_COMMIT_BRANCH == \"main\"'\n changes:\n - tinybird.json\n - src/tinybird/**\n - tinybird/**\n - **/*.datasource\n - **/*.pipe\n script:\n - corepack enable\n - pnpm install --frozen-lockfile\n - pnpm run tinybird:deploy\n variables:\n TINYBIRD_TOKEN: \${TINYBIRD_TOKEN}\n`;
104
161
  /**
105
162
  * Default config content generator
106
163
  */
107
- function createDefaultConfig(tinybirdDir) {
164
+ function createDefaultConfig(tinybirdDir, devMode, additionalIncludes = []) {
165
+ const include = [
166
+ `${tinybirdDir}/datasources.ts`,
167
+ `${tinybirdDir}/endpoints.ts`,
168
+ ...additionalIncludes,
169
+ ];
108
170
  return {
109
- include: [
110
- `${tinybirdDir}/datasources.ts`,
111
- `${tinybirdDir}/pipes.ts`,
112
- ],
171
+ include,
113
172
  token: "${TINYBIRD_TOKEN}",
114
173
  baseUrl: "https://api.tinybird.co",
174
+ devMode,
115
175
  };
116
176
  }
177
+ /**
178
+ * Find existing .datasource and .pipe files in the repository
179
+ *
180
+ * @param cwd - Working directory to search from
181
+ * @param maxDepth - Maximum directory depth to search (default: 5)
182
+ * @returns Array of relative file paths
183
+ */
184
+ export function findExistingDatafiles(cwd, maxDepth = 5) {
185
+ const files = [];
186
+ function searchDir(dir, depth) {
187
+ if (depth > maxDepth)
188
+ return;
189
+ let entries;
190
+ try {
191
+ entries = fs.readdirSync(dir, { withFileTypes: true });
192
+ }
193
+ catch {
194
+ return; // Skip directories we can't read
195
+ }
196
+ for (const entry of entries) {
197
+ const fullPath = path.join(dir, entry.name);
198
+ // Skip node_modules and hidden directories
199
+ if (entry.isDirectory() &&
200
+ (entry.name === "node_modules" ||
201
+ entry.name.startsWith(".") ||
202
+ entry.name === "dist" ||
203
+ entry.name === "build")) {
204
+ continue;
205
+ }
206
+ if (entry.isDirectory()) {
207
+ searchDir(fullPath, depth + 1);
208
+ }
209
+ else if (entry.isFile() &&
210
+ (entry.name.endsWith(".datasource") || entry.name.endsWith(".pipe"))) {
211
+ // Convert to relative path
212
+ const relativePath = path.relative(cwd, fullPath);
213
+ files.push(relativePath);
214
+ }
215
+ }
216
+ }
217
+ searchDir(cwd, 0);
218
+ return files.sort();
219
+ }
117
220
  /**
118
221
  * Run the init command
119
222
  *
120
223
  * Creates:
121
224
  * - tinybird.json in the project root
122
- * - src/tinybird/ folder with datasources.ts, pipes.ts, and client.ts
225
+ * - src/tinybird/ folder with datasources.ts, endpoints.ts, and client.ts
123
226
  *
124
227
  * @param options - Init options
125
228
  * @returns Init result
@@ -130,12 +233,187 @@ export async function runInit(options = {}) {
130
233
  const skipLogin = options.skipLogin ?? false;
131
234
  const created = [];
132
235
  const skipped = [];
236
+ let didPrompt = false;
237
+ let existingDatafiles = [];
238
+ let ciWorkflowCreated = false;
239
+ let cdWorkflowCreated = false;
240
+ let workflowProvider = options.workflowProvider;
241
+ // Check for existing .datasource and .pipe files
242
+ const foundDatafiles = findExistingDatafiles(cwd);
243
+ // Determine devMode - prompt if not provided
244
+ let devMode = options.devMode ?? "branch";
245
+ if (!options.devMode) {
246
+ // Show interactive prompt for workflow selection
247
+ p.intro(pc.cyan("tinybird init"));
248
+ const workflowChoice = await p.select({
249
+ message: "How do you want to develop with Tinybird?",
250
+ options: [
251
+ {
252
+ value: "branch",
253
+ label: "Branches",
254
+ hint: "Use Tinybird Cloud with git-based branching",
255
+ },
256
+ {
257
+ value: "local",
258
+ label: "Tinybird Local",
259
+ hint: "Run your own Tinybird instance locally",
260
+ },
261
+ ],
262
+ });
263
+ if (p.isCancel(workflowChoice)) {
264
+ p.cancel("Operation cancelled");
265
+ return {
266
+ success: false,
267
+ created: [],
268
+ skipped: [],
269
+ error: "Cancelled by user",
270
+ };
271
+ }
272
+ didPrompt = true;
273
+ devMode = workflowChoice;
274
+ }
133
275
  // Determine tinybird folder path based on project structure
134
- const tinybirdDir = getTinybirdDir(cwd);
135
- const relativeTinybirdDir = getRelativeTinybirdDir(cwd);
276
+ const defaultRelativePath = getRelativeTinybirdDir(cwd);
277
+ let relativeTinybirdDir = options.clientPath ?? defaultRelativePath;
278
+ if (!options.clientPath && !options.devMode) {
279
+ // Ask user to confirm or change the client path
280
+ const clientPathChoice = await p.text({
281
+ message: "Where should we create Tinybird definitions?",
282
+ placeholder: defaultRelativePath,
283
+ defaultValue: defaultRelativePath,
284
+ });
285
+ if (p.isCancel(clientPathChoice)) {
286
+ p.cancel("Operation cancelled");
287
+ return {
288
+ success: false,
289
+ created: [],
290
+ skipped: [],
291
+ error: "Cancelled by user",
292
+ };
293
+ }
294
+ didPrompt = true;
295
+ relativeTinybirdDir = clientPathChoice || defaultRelativePath;
296
+ }
297
+ const skipWorkflowPrompt = options.skipWorkflowPrompt ??
298
+ (options.devMode !== undefined || options.clientPath !== undefined);
299
+ let includeCiWorkflow = options.includeCiWorkflow ?? false;
300
+ let includeCdWorkflow = options.includeCdWorkflow ?? false;
301
+ const shouldPromptWorkflows = !skipWorkflowPrompt && options.includeCiWorkflow === undefined;
302
+ const shouldPromptProvider = !skipWorkflowPrompt && !workflowProvider;
303
+ if (shouldPromptProvider && shouldPromptWorkflows) {
304
+ const providerChoice = await p.select({
305
+ message: "Which git provider are you using?",
306
+ options: [
307
+ { value: "github", label: "GitHub" },
308
+ { value: "gitlab", label: "GitLab" },
309
+ ],
310
+ });
311
+ if (p.isCancel(providerChoice)) {
312
+ p.cancel("Operation cancelled");
313
+ return {
314
+ success: false,
315
+ created: [],
316
+ skipped: [],
317
+ error: "Cancelled by user",
318
+ };
319
+ }
320
+ didPrompt = true;
321
+ workflowProvider = providerChoice;
322
+ }
323
+ if (shouldPromptWorkflows) {
324
+ const confirmWorkflows = await p.confirm({
325
+ message: "Create CI/CD workflows for Tinybird?",
326
+ initialValue: true,
327
+ });
328
+ if (p.isCancel(confirmWorkflows)) {
329
+ p.cancel("Operation cancelled");
330
+ return {
331
+ success: false,
332
+ created: [],
333
+ skipped: [],
334
+ error: "Cancelled by user",
335
+ };
336
+ }
337
+ didPrompt = true;
338
+ includeCiWorkflow = confirmWorkflows;
339
+ includeCdWorkflow = confirmWorkflows;
340
+ }
341
+ if (shouldPromptProvider && !shouldPromptWorkflows && !workflowProvider) {
342
+ const providerChoice = await p.select({
343
+ message: "Which git provider are you using?",
344
+ options: [
345
+ { value: "github", label: "GitHub" },
346
+ { value: "gitlab", label: "GitLab" },
347
+ ],
348
+ });
349
+ if (p.isCancel(providerChoice)) {
350
+ p.cancel("Operation cancelled");
351
+ return {
352
+ success: false,
353
+ created: [],
354
+ skipped: [],
355
+ error: "Cancelled by user",
356
+ };
357
+ }
358
+ didPrompt = true;
359
+ workflowProvider = providerChoice;
360
+ }
361
+ if ((includeCiWorkflow || includeCdWorkflow) && !workflowProvider) {
362
+ workflowProvider = "github";
363
+ }
364
+ // Ask about existing datafiles if found
365
+ if (foundDatafiles.length > 0 && !options.skipDatafilePrompt) {
366
+ const includeDatafiles = options.includeExistingDatafiles ??
367
+ (await (async () => {
368
+ didPrompt = true;
369
+ return promptForExistingDatafiles(foundDatafiles);
370
+ })());
371
+ if (includeDatafiles) {
372
+ existingDatafiles = foundDatafiles;
373
+ }
374
+ }
375
+ else if (options.includeExistingDatafiles && foundDatafiles.length > 0) {
376
+ existingDatafiles = foundDatafiles;
377
+ }
378
+ if (didPrompt) {
379
+ const devModeLabel = devMode === "local" ? "Tinybird Local" : "Branches";
380
+ const datafileSummary = foundDatafiles.length > 0
381
+ ? existingDatafiles.length > 0
382
+ ? `${existingDatafiles.length} included`
383
+ : "none included"
384
+ : "none found";
385
+ let workflowSummary = "none";
386
+ if (includeCiWorkflow || includeCdWorkflow) {
387
+ workflowSummary =
388
+ workflowProvider === "gitlab"
389
+ ? "GitLab (.gitlab-ci.yml)"
390
+ : "GitHub Actions (tinybird-ci.yaml, tinybird-cd.yaml)";
391
+ }
392
+ const summaryLines = [
393
+ `Mode: ${devModeLabel}`,
394
+ `Definitions: ${relativeTinybirdDir}/`,
395
+ `Existing datafiles: ${datafileSummary}`,
396
+ `Workflows: ${workflowSummary}`,
397
+ ];
398
+ p.note(summaryLines.join("\n"), "Installation Summary");
399
+ const confirmInit = await p.confirm({
400
+ message: "Proceed with initialization?",
401
+ initialValue: true,
402
+ });
403
+ if (p.isCancel(confirmInit) || !confirmInit) {
404
+ p.cancel("Init cancelled.");
405
+ return {
406
+ success: false,
407
+ created: [],
408
+ skipped: [],
409
+ error: "Cancelled by user",
410
+ };
411
+ }
412
+ }
413
+ const tinybirdDir = path.join(cwd, relativeTinybirdDir);
136
414
  // File paths
137
415
  const datasourcesPath = path.join(tinybirdDir, "datasources.ts");
138
- const pipesPath = path.join(tinybirdDir, "pipes.ts");
416
+ const endpointsPath = path.join(tinybirdDir, "endpoints.ts");
139
417
  const clientPath = path.join(tinybirdDir, "client.ts");
140
418
  // Create config file (tinybird.json)
141
419
  const configPath = getConfigPath(cwd);
@@ -144,7 +422,7 @@ export async function runInit(options = {}) {
144
422
  }
145
423
  else {
146
424
  try {
147
- const config = createDefaultConfig(relativeTinybirdDir);
425
+ const config = createDefaultConfig(relativeTinybirdDir, devMode, existingDatafiles);
148
426
  fs.writeFileSync(configPath, JSON.stringify(config, null, 2) + "\n");
149
427
  created.push("tinybird.json");
150
428
  }
@@ -187,21 +465,21 @@ export async function runInit(options = {}) {
187
465
  };
188
466
  }
189
467
  }
190
- // Create pipes.ts
191
- if (fs.existsSync(pipesPath) && !force) {
192
- skipped.push(`${relativeTinybirdDir}/pipes.ts`);
468
+ // Create endpoints.ts
469
+ if (fs.existsSync(endpointsPath) && !force) {
470
+ skipped.push(`${relativeTinybirdDir}/endpoints.ts`);
193
471
  }
194
472
  else {
195
473
  try {
196
- fs.writeFileSync(pipesPath, PIPES_CONTENT);
197
- created.push(`${relativeTinybirdDir}/pipes.ts`);
474
+ fs.writeFileSync(endpointsPath, ENDPOINTS_CONTENT);
475
+ created.push(`${relativeTinybirdDir}/endpoints.ts`);
198
476
  }
199
477
  catch (error) {
200
478
  return {
201
479
  success: false,
202
480
  created,
203
481
  skipped,
204
- error: `Failed to create pipes.ts: ${error.message}`,
482
+ error: `Failed to create endpoints.ts: ${error.message}`,
205
483
  };
206
484
  }
207
485
  }
@@ -240,6 +518,10 @@ export async function runInit(options = {}) {
240
518
  packageJson.scripts["tinybird:build"] = "tinybird build";
241
519
  modified = true;
242
520
  }
521
+ if (!packageJson.scripts["tinybird:deploy"]) {
522
+ packageJson.scripts["tinybird:deploy"] = "tinybird deploy";
523
+ modified = true;
524
+ }
243
525
  if (modified) {
244
526
  fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2) + "\n");
245
527
  created.push("package.json (added tinybird scripts)");
@@ -249,6 +531,88 @@ export async function runInit(options = {}) {
249
531
  // Silently ignore package.json errors - not critical
250
532
  }
251
533
  }
534
+ const workflowsDir = path.join(cwd, ".github", "workflows");
535
+ const ciWorkflowPath = path.join(workflowsDir, "tinybird-ci.yaml");
536
+ const cdWorkflowPath = path.join(workflowsDir, "tinybird-cd.yaml");
537
+ const gitlabWorkflowPath = path.join(cwd, ".gitlab-ci.yml");
538
+ if (includeCiWorkflow || includeCdWorkflow) {
539
+ if (workflowProvider === "github") {
540
+ try {
541
+ fs.mkdirSync(workflowsDir, { recursive: true });
542
+ }
543
+ catch (error) {
544
+ return {
545
+ success: false,
546
+ created,
547
+ skipped,
548
+ error: `Failed to create .github/workflows folder: ${error.message}`,
549
+ };
550
+ }
551
+ }
552
+ if (workflowProvider === "gitlab") {
553
+ if (fs.existsSync(gitlabWorkflowPath) && !force) {
554
+ skipped.push(".gitlab-ci.yml");
555
+ }
556
+ else {
557
+ try {
558
+ fs.writeFileSync(gitlabWorkflowPath, TINYBIRD_GITLAB_CI);
559
+ created.push(".gitlab-ci.yml");
560
+ ciWorkflowCreated = includeCiWorkflow;
561
+ cdWorkflowCreated = includeCdWorkflow;
562
+ }
563
+ catch (error) {
564
+ return {
565
+ success: false,
566
+ created,
567
+ skipped,
568
+ error: `Failed to create .gitlab-ci.yml: ${error.message}`,
569
+ };
570
+ }
571
+ }
572
+ }
573
+ }
574
+ if (workflowProvider === "github") {
575
+ if (includeCiWorkflow) {
576
+ if (fs.existsSync(ciWorkflowPath) && !force) {
577
+ skipped.push(".github/workflows/tinybird-ci.yaml");
578
+ }
579
+ else {
580
+ try {
581
+ fs.writeFileSync(ciWorkflowPath, TINYBIRD_CI_WORKFLOW);
582
+ created.push(".github/workflows/tinybird-ci.yaml");
583
+ ciWorkflowCreated = true;
584
+ }
585
+ catch (error) {
586
+ return {
587
+ success: false,
588
+ created,
589
+ skipped,
590
+ error: `Failed to create tinybird-ci.yaml: ${error.message}`,
591
+ };
592
+ }
593
+ }
594
+ }
595
+ if (includeCdWorkflow) {
596
+ if (fs.existsSync(cdWorkflowPath) && !force) {
597
+ skipped.push(".github/workflows/tinybird-cd.yaml");
598
+ }
599
+ else {
600
+ try {
601
+ fs.writeFileSync(cdWorkflowPath, TINYBIRD_CD_WORKFLOW);
602
+ created.push(".github/workflows/tinybird-cd.yaml");
603
+ cdWorkflowCreated = true;
604
+ }
605
+ catch (error) {
606
+ return {
607
+ success: false,
608
+ created,
609
+ skipped,
610
+ error: `Failed to create tinybird-cd.yaml: ${error.message}`,
611
+ };
612
+ }
613
+ }
614
+ }
615
+ }
252
616
  // Check if login is needed
253
617
  if (!skipLogin && !hasValidToken(cwd)) {
254
618
  console.log("\nNo authentication found. Starting login flow...\n");
@@ -261,8 +625,9 @@ export async function runInit(options = {}) {
261
625
  created.push(".env.local");
262
626
  }
263
627
  // If custom base URL, update tinybird.json
264
- if (authResult.baseUrl && authResult.baseUrl !== "https://api.tinybird.co") {
265
- updateConfig(configPath, { baseUrl: authResult.baseUrl });
628
+ const baseUrl = authResult.baseUrl ?? "https://api.tinybird.co";
629
+ if (baseUrl !== "https://api.tinybird.co") {
630
+ updateConfig(configPath, { baseUrl });
266
631
  }
267
632
  return {
268
633
  success: true,
@@ -271,6 +636,12 @@ export async function runInit(options = {}) {
271
636
  loggedIn: true,
272
637
  workspaceName: authResult.workspaceName,
273
638
  userEmail: authResult.userEmail,
639
+ devMode,
640
+ clientPath: relativeTinybirdDir,
641
+ existingDatafiles: existingDatafiles.length > 0 ? existingDatafiles : undefined,
642
+ ciWorkflowCreated,
643
+ cdWorkflowCreated,
644
+ workflowProvider,
274
645
  };
275
646
  }
276
647
  catch (error) {
@@ -281,6 +652,12 @@ export async function runInit(options = {}) {
281
652
  created,
282
653
  skipped,
283
654
  loggedIn: false,
655
+ devMode,
656
+ clientPath: relativeTinybirdDir,
657
+ existingDatafiles: existingDatafiles.length > 0 ? existingDatafiles : undefined,
658
+ ciWorkflowCreated,
659
+ cdWorkflowCreated,
660
+ workflowProvider,
284
661
  };
285
662
  }
286
663
  }
@@ -291,6 +668,12 @@ export async function runInit(options = {}) {
291
668
  created,
292
669
  skipped,
293
670
  loggedIn: false,
671
+ devMode,
672
+ clientPath: relativeTinybirdDir,
673
+ existingDatafiles: existingDatafiles.length > 0 ? existingDatafiles : undefined,
674
+ ciWorkflowCreated,
675
+ cdWorkflowCreated,
676
+ workflowProvider,
294
677
  };
295
678
  }
296
679
  }
@@ -298,6 +681,34 @@ export async function runInit(options = {}) {
298
681
  success: true,
299
682
  created,
300
683
  skipped,
684
+ devMode,
685
+ clientPath: relativeTinybirdDir,
686
+ existingDatafiles: existingDatafiles.length > 0 ? existingDatafiles : undefined,
687
+ ciWorkflowCreated,
688
+ cdWorkflowCreated,
689
+ workflowProvider,
301
690
  };
302
691
  }
692
+ /**
693
+ * Prompt user about including existing datafiles
694
+ */
695
+ async function promptForExistingDatafiles(datafiles) {
696
+ const datasourceCount = datafiles.filter((f) => f.endsWith(".datasource")).length;
697
+ const pipeCount = datafiles.filter((f) => f.endsWith(".pipe")).length;
698
+ const parts = [];
699
+ if (datasourceCount > 0) {
700
+ parts.push(`${datasourceCount} .datasource file${datasourceCount > 1 ? "s" : ""}`);
701
+ }
702
+ if (pipeCount > 0) {
703
+ parts.push(`${pipeCount} .pipe file${pipeCount > 1 ? "s" : ""}`);
704
+ }
705
+ const confirmInclude = await p.confirm({
706
+ message: `Found ${parts.join(" and ")} in your project. Include them in tinybird.json?`,
707
+ initialValue: true,
708
+ });
709
+ if (p.isCancel(confirmInclude)) {
710
+ return false;
711
+ }
712
+ return confirmInclude;
713
+ }
303
714
  //# sourceMappingURL=init.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"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"}