@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,484 @@
1
+ /**
2
+ * Pipe definition for Tinybird
3
+ * Define SQL transformations and endpoints as TypeScript with full type safety
4
+ */
5
+ import { getColumnType } from "./datasource.js";
6
+ import { getTinybirdType } from "./types.js";
7
+ /** Symbol for brand typing pipes */
8
+ export const PIPE_BRAND = Symbol("tinybird.pipe");
9
+ /** Symbol for brand typing nodes */
10
+ export const NODE_BRAND = Symbol("tinybird.node");
11
+ /**
12
+ * Create a node within a pipe
13
+ *
14
+ * @param options - Node configuration
15
+ * @returns A node definition
16
+ *
17
+ * @example
18
+ * ```ts
19
+ * import { node } from '@tinybirdco/sdk';
20
+ *
21
+ * const filteredNode = node({
22
+ * name: 'filtered',
23
+ * sql: `
24
+ * SELECT *
25
+ * FROM events
26
+ * WHERE timestamp >= {{DateTime(start_date)}}
27
+ * `,
28
+ * });
29
+ * ```
30
+ */
31
+ export function node(options) {
32
+ // Validate name is a valid identifier
33
+ if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(options.name)) {
34
+ throw new Error(`Invalid node name: "${options.name}". Must start with a letter or underscore and contain only alphanumeric characters and underscores.`);
35
+ }
36
+ return {
37
+ [NODE_BRAND]: true,
38
+ _name: options.name,
39
+ _type: "node",
40
+ sql: options.sql,
41
+ description: options.description,
42
+ };
43
+ }
44
+ /**
45
+ * Check if a value is a node definition
46
+ */
47
+ export function isNodeDefinition(value) {
48
+ return (typeof value === "object" &&
49
+ value !== null &&
50
+ NODE_BRAND in value &&
51
+ value[NODE_BRAND] === true);
52
+ }
53
+ /**
54
+ * Define a Tinybird pipe
55
+ *
56
+ * @param name - The pipe name (must be valid identifier)
57
+ * @param options - Pipe configuration including params, nodes, and output schema
58
+ * @returns A pipe definition that can be used in a project
59
+ *
60
+ * @example
61
+ * ```ts
62
+ * import { definePipe, node, p, t } from '@tinybirdco/sdk';
63
+ *
64
+ * export const topEvents = definePipe('top_events', {
65
+ * description: 'Get top events by count',
66
+ * params: {
67
+ * start_date: p.dateTime(),
68
+ * end_date: p.dateTime(),
69
+ * limit: p.int32().optional(10),
70
+ * },
71
+ * nodes: [
72
+ * node({
73
+ * name: 'filtered',
74
+ * sql: `
75
+ * SELECT *
76
+ * FROM events
77
+ * WHERE timestamp BETWEEN {{DateTime(start_date)}} AND {{DateTime(end_date)}}
78
+ * `,
79
+ * }),
80
+ * node({
81
+ * name: 'aggregated',
82
+ * sql: `
83
+ * SELECT
84
+ * event_type,
85
+ * count() as event_count,
86
+ * uniqExact(user_id) as unique_users
87
+ * FROM filtered
88
+ * GROUP BY event_type
89
+ * ORDER BY event_count DESC
90
+ * LIMIT {{Int32(limit, 10)}}
91
+ * `,
92
+ * }),
93
+ * ],
94
+ * output: {
95
+ * event_type: t.string(),
96
+ * event_count: t.uint64(),
97
+ * unique_users: t.uint64(),
98
+ * },
99
+ * endpoint: true,
100
+ * });
101
+ * ```
102
+ */
103
+ /**
104
+ * Normalize a Tinybird type for comparison by removing wrappers that don't affect compatibility
105
+ */
106
+ function normalizeTypeForComparison(type) {
107
+ // Remove Nullable wrapper for comparison
108
+ let normalized = type.replace(/^Nullable\((.+)\)$/, "$1");
109
+ // Remove LowCardinality wrapper
110
+ normalized = normalized.replace(/^LowCardinality\((.+)\)$/, "$1");
111
+ // Handle LowCardinality(Nullable(...))
112
+ normalized = normalized.replace(/^LowCardinality\(Nullable\((.+)\)\)$/, "$1");
113
+ // Remove timezone from DateTime types
114
+ normalized = normalized.replace(/^DateTime\('[^']+'\)$/, "DateTime");
115
+ normalized = normalized.replace(/^DateTime64\((\d+),\s*'[^']+'\)$/, "DateTime64($1)");
116
+ return normalized;
117
+ }
118
+ /**
119
+ * Check if two Tinybird types are compatible
120
+ */
121
+ function typesAreCompatible(outputType, datasourceType) {
122
+ const normalizedOutput = normalizeTypeForComparison(outputType);
123
+ const normalizedDatasource = normalizeTypeForComparison(datasourceType);
124
+ // Direct match
125
+ if (normalizedOutput === normalizedDatasource) {
126
+ return true;
127
+ }
128
+ // SimpleAggregateFunction compatibility: output can be the base type
129
+ // e.g., output UInt64 -> datasource SimpleAggregateFunction(sum, UInt64)
130
+ const simpleAggMatch = normalizedDatasource.match(/^SimpleAggregateFunction\([^,]+,\s*(.+)\)$/);
131
+ if (simpleAggMatch && normalizedOutput === simpleAggMatch[1]) {
132
+ return true;
133
+ }
134
+ // AggregateFunction compatibility
135
+ const aggMatch = normalizedDatasource.match(/^AggregateFunction\([^,]+,\s*(.+)\)$/);
136
+ if (aggMatch && normalizedOutput === aggMatch[1]) {
137
+ return true;
138
+ }
139
+ return false;
140
+ }
141
+ /**
142
+ * Validate that the pipe output schema matches the target datasource schema
143
+ */
144
+ function validateMaterializedSchema(pipeName, output, datasource) {
145
+ const outputColumns = Object.keys(output);
146
+ const datasourceSchema = datasource._schema;
147
+ const datasourceColumns = Object.keys(datasourceSchema);
148
+ // Check for missing columns in output
149
+ const missingInOutput = datasourceColumns.filter((col) => !outputColumns.includes(col));
150
+ if (missingInOutput.length > 0) {
151
+ throw new Error(`Materialized view "${pipeName}" output schema is missing columns from target datasource "${datasource._name}": ${missingInOutput.join(", ")}`);
152
+ }
153
+ // Check for extra columns in output
154
+ const extraInOutput = outputColumns.filter((col) => !datasourceColumns.includes(col));
155
+ if (extraInOutput.length > 0) {
156
+ throw new Error(`Materialized view "${pipeName}" output schema has columns not in target datasource "${datasource._name}": ${extraInOutput.join(", ")}`);
157
+ }
158
+ // Check type compatibility for each column
159
+ for (const columnName of outputColumns) {
160
+ const outputValidator = output[columnName];
161
+ const datasourceColumn = datasourceSchema[columnName];
162
+ const outputType = getTinybirdType(outputValidator);
163
+ const datasourceValidator = getColumnType(datasourceColumn);
164
+ const datasourceType = getTinybirdType(datasourceValidator);
165
+ if (!typesAreCompatible(outputType, datasourceType)) {
166
+ throw new Error(`Materialized view "${pipeName}" column "${columnName}" type mismatch: ` +
167
+ `output has "${outputType}" but target datasource "${datasource._name}" expects "${datasourceType}"`);
168
+ }
169
+ }
170
+ }
171
+ export function definePipe(name, options) {
172
+ // Validate name is a valid identifier
173
+ if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(name)) {
174
+ throw new Error(`Invalid pipe name: "${name}". Must start with a letter or underscore and contain only alphanumeric characters and underscores.`);
175
+ }
176
+ // Validate at least one node
177
+ if (!options.nodes || options.nodes.length === 0) {
178
+ throw new Error(`Pipe "${name}" must have at least one node.`);
179
+ }
180
+ // Validate output is provided for endpoints and materialized views
181
+ if ((options.endpoint || options.materialized) && (!options.output || Object.keys(options.output).length === 0)) {
182
+ throw new Error(`Pipe "${name}" must have an output schema defined when used as an endpoint or materialized view.`);
183
+ }
184
+ // Count how many types are configured
185
+ const typeCount = [options.endpoint, options.materialized, options.copy].filter(Boolean).length;
186
+ if (typeCount > 1) {
187
+ throw new Error(`Pipe "${name}" can only have one of: endpoint, materialized, or copy configuration. ` +
188
+ `A pipe must be at most one type.`);
189
+ }
190
+ // Validate materialized view schema compatibility
191
+ if (options.materialized) {
192
+ // output is guaranteed to be defined here because of the earlier validation
193
+ validateMaterializedSchema(name, options.output, options.materialized.datasource);
194
+ }
195
+ const params = (options.params ?? {});
196
+ return {
197
+ [PIPE_BRAND]: true,
198
+ _name: name,
199
+ _type: "pipe",
200
+ _params: params,
201
+ _output: options.output,
202
+ options: {
203
+ ...options,
204
+ params,
205
+ },
206
+ };
207
+ }
208
+ /**
209
+ * Define a Tinybird materialized view
210
+ *
211
+ * This is a convenience function that simplifies creating materialized views.
212
+ * The output schema is automatically derived from the target datasource, ensuring
213
+ * type safety between the pipe output and the target.
214
+ *
215
+ * @param name - The pipe name (must be valid identifier)
216
+ * @param options - Materialized view configuration
217
+ * @returns A pipe definition configured as a materialized view
218
+ *
219
+ * @example
220
+ * ```ts
221
+ * import { defineDatasource, defineMaterializedView, node, t, engine } from '@tinybirdco/sdk';
222
+ *
223
+ * // Target datasource for aggregated data
224
+ * const salesByHour = defineDatasource('sales_by_hour', {
225
+ * schema: {
226
+ * day: t.date(),
227
+ * country: t.string().lowCardinality(),
228
+ * total_sales: t.simpleAggregateFunction('sum', t.uint64()),
229
+ * },
230
+ * engine: engine.aggregatingMergeTree({
231
+ * sortingKey: ['day', 'country'],
232
+ * }),
233
+ * });
234
+ *
235
+ * // Materialized view - output schema is inferred from datasource
236
+ * export const salesByHourMv = defineMaterializedView('sales_by_hour_mv', {
237
+ * description: 'Aggregate sales per hour',
238
+ * datasource: salesByHour,
239
+ * nodes: [
240
+ * node({
241
+ * name: 'daily_sales',
242
+ * sql: `
243
+ * SELECT
244
+ * toStartOfDay(starting_date) as day,
245
+ * country,
246
+ * sum(sales) as total_sales
247
+ * FROM teams
248
+ * GROUP BY day, country
249
+ * `,
250
+ * }),
251
+ * ],
252
+ * deploymentMethod: 'alter', // optional
253
+ * });
254
+ * ```
255
+ */
256
+ export function defineMaterializedView(name, options) {
257
+ // Extract the schema from the datasource to build the output
258
+ const datasourceSchema = options.datasource._schema;
259
+ const output = {};
260
+ for (const [columnName, column] of Object.entries(datasourceSchema)) {
261
+ output[columnName] = getColumnType(column);
262
+ }
263
+ return definePipe(name, {
264
+ description: options.description,
265
+ nodes: options.nodes,
266
+ output: output,
267
+ materialized: {
268
+ datasource: options.datasource,
269
+ deploymentMethod: options.deploymentMethod,
270
+ },
271
+ tokens: options.tokens,
272
+ });
273
+ }
274
+ /**
275
+ * Define a Tinybird endpoint
276
+ *
277
+ * This is a convenience function for creating API endpoints.
278
+ * Endpoints are pipes that are exposed as HTTP API endpoints.
279
+ *
280
+ * @param name - The endpoint name (must be valid identifier)
281
+ * @param options - Endpoint configuration including params, nodes, and output schema
282
+ * @returns A pipe definition configured as an endpoint
283
+ *
284
+ * @example
285
+ * ```ts
286
+ * import { defineEndpoint, node, p, t } from '@tinybirdco/sdk';
287
+ *
288
+ * export const topEvents = defineEndpoint('top_events', {
289
+ * description: 'Get top events by count',
290
+ * params: {
291
+ * start_date: p.dateTime(),
292
+ * end_date: p.dateTime(),
293
+ * limit: p.int32().optional(10),
294
+ * },
295
+ * nodes: [
296
+ * node({
297
+ * name: 'aggregated',
298
+ * sql: `
299
+ * SELECT
300
+ * event_type,
301
+ * count() as event_count
302
+ * FROM events
303
+ * WHERE timestamp BETWEEN {{DateTime(start_date)}} AND {{DateTime(end_date)}}
304
+ * GROUP BY event_type
305
+ * ORDER BY event_count DESC
306
+ * LIMIT {{Int32(limit, 10)}}
307
+ * `,
308
+ * }),
309
+ * ],
310
+ * output: {
311
+ * event_type: t.string(),
312
+ * event_count: t.uint64(),
313
+ * },
314
+ * });
315
+ * ```
316
+ */
317
+ export function defineEndpoint(name, options) {
318
+ return definePipe(name, {
319
+ description: options.description,
320
+ params: options.params,
321
+ nodes: options.nodes,
322
+ output: options.output,
323
+ endpoint: options.cache ? { enabled: true, cache: options.cache } : true,
324
+ tokens: options.tokens,
325
+ });
326
+ }
327
+ /**
328
+ * Define a Tinybird copy pipe
329
+ *
330
+ * Copy pipes capture the result of a pipe at a moment in time and write
331
+ * the result into a target data source. They can be run on a schedule,
332
+ * or executed on demand.
333
+ *
334
+ * Unlike materialized views which continuously update as new events are inserted,
335
+ * copy pipes generate a single snapshot at a specific point in time.
336
+ *
337
+ * @param name - The copy pipe name (must be valid identifier)
338
+ * @param options - Copy pipe configuration
339
+ * @returns A pipe definition configured as a copy pipe
340
+ *
341
+ * @example
342
+ * ```ts
343
+ * import { defineCopyPipe, defineDatasource, node, t, engine } from '@tinybirdco/sdk';
344
+ *
345
+ * // Target datasource for daily snapshots
346
+ * const dailySalesSnapshot = defineDatasource('daily_sales_snapshot', {
347
+ * schema: {
348
+ * snapshot_date: t.date(),
349
+ * country: t.string(),
350
+ * total_sales: t.uint64(),
351
+ * },
352
+ * engine: engine.mergeTree({
353
+ * sortingKey: ['snapshot_date', 'country'],
354
+ * }),
355
+ * });
356
+ *
357
+ * // Copy pipe that runs daily at midnight
358
+ * export const dailySalesCopy = defineCopyPipe('daily_sales_copy', {
359
+ * description: 'Daily snapshot of sales by country',
360
+ * datasource: dailySalesSnapshot,
361
+ * copy_schedule: '0 0 * * *', // Daily at midnight UTC
362
+ * copy_mode: 'append',
363
+ * nodes: [
364
+ * node({
365
+ * name: 'snapshot',
366
+ * sql: `
367
+ * SELECT
368
+ * today() AS snapshot_date,
369
+ * country,
370
+ * sum(sales) AS total_sales
371
+ * FROM sales
372
+ * WHERE date = today() - 1
373
+ * GROUP BY country
374
+ * `,
375
+ * }),
376
+ * ],
377
+ * });
378
+ * ```
379
+ */
380
+ export function defineCopyPipe(name, options) {
381
+ // Extract the schema from the datasource to build the output
382
+ const datasourceSchema = options.datasource._schema;
383
+ const output = {};
384
+ for (const [columnName, column] of Object.entries(datasourceSchema)) {
385
+ output[columnName] = getColumnType(column);
386
+ }
387
+ return definePipe(name, {
388
+ description: options.description,
389
+ nodes: options.nodes,
390
+ output: output,
391
+ copy: {
392
+ datasource: options.datasource,
393
+ copy_mode: options.copy_mode,
394
+ copy_schedule: options.copy_schedule,
395
+ },
396
+ tokens: options.tokens,
397
+ });
398
+ }
399
+ /**
400
+ * Check if a value is a pipe definition
401
+ */
402
+ export function isPipeDefinition(value) {
403
+ return (typeof value === "object" &&
404
+ value !== null &&
405
+ PIPE_BRAND in value &&
406
+ value[PIPE_BRAND] === true);
407
+ }
408
+ /**
409
+ * Get the endpoint configuration from a pipe
410
+ */
411
+ export function getEndpointConfig(pipe) {
412
+ const { endpoint } = pipe.options;
413
+ if (!endpoint) {
414
+ return null;
415
+ }
416
+ if (typeof endpoint === "boolean") {
417
+ return endpoint ? { enabled: true } : null;
418
+ }
419
+ return endpoint.enabled ? endpoint : null;
420
+ }
421
+ /**
422
+ * Get the materialized view configuration from a pipe
423
+ */
424
+ export function getMaterializedConfig(pipe) {
425
+ return pipe.options.materialized ?? null;
426
+ }
427
+ /**
428
+ * Check if a pipe is a materialized view
429
+ */
430
+ export function isMaterializedView(pipe) {
431
+ return pipe.options.materialized !== undefined;
432
+ }
433
+ /**
434
+ * Get the copy pipe configuration from a pipe
435
+ */
436
+ export function getCopyConfig(pipe) {
437
+ return pipe.options.copy ?? null;
438
+ }
439
+ /**
440
+ * Check if a pipe is a copy pipe
441
+ */
442
+ export function isCopyPipe(pipe) {
443
+ return pipe.options.copy !== undefined;
444
+ }
445
+ /**
446
+ * Get all node names from a pipe
447
+ */
448
+ export function getNodeNames(pipe) {
449
+ return pipe.options.nodes.map((n) => n._name);
450
+ }
451
+ /**
452
+ * Get a specific node by name
453
+ */
454
+ export function getNode(pipe, name) {
455
+ return pipe.options.nodes.find((n) => n._name === name);
456
+ }
457
+ /**
458
+ * SQL template helper for referencing datasources and other nodes
459
+ * This is a simple helper - for complex templating, use raw strings
460
+ *
461
+ * @example
462
+ * ```ts
463
+ * import { sql, events } from './datasources/events';
464
+ *
465
+ * const query = sql`SELECT * FROM ${events} WHERE id = 1`;
466
+ * // Results in: "SELECT * FROM events WHERE id = 1"
467
+ * ```
468
+ */
469
+ export function sql(strings, ...values) {
470
+ return strings.reduce((result, str, i) => {
471
+ const value = values[i];
472
+ if (value === undefined) {
473
+ return result + str;
474
+ }
475
+ if (typeof value === "string" || typeof value === "number") {
476
+ return result + str + String(value);
477
+ }
478
+ if ("_name" in value) {
479
+ return result + str + value._name;
480
+ }
481
+ return result + str;
482
+ }, "");
483
+ }
484
+ //# sourceMappingURL=pipe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipe.js","sourceRoot":"","sources":["../../src/schema/pipe.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=pipe.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipe.test.d.ts","sourceRoot":"","sources":["../../src/schema/pipe.test.ts"],"names":[],"mappings":""}