@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,254 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { generateDatasource, generateAllDatasources } from './datasource.js';
3
+ import { defineDatasource } from '../schema/datasource.js';
4
+ import { t } from '../schema/types.js';
5
+ import { engine } from '../schema/engines.js';
6
+ describe('Datasource Generator', () => {
7
+ describe('generateDatasource', () => {
8
+ it('generates basic datasource with schema', () => {
9
+ const ds = defineDatasource('test_ds', {
10
+ schema: {
11
+ id: t.string(),
12
+ count: t.int32(),
13
+ },
14
+ });
15
+ const result = generateDatasource(ds);
16
+ expect(result.name).toBe('test_ds');
17
+ expect(result.content).toContain('SCHEMA >');
18
+ expect(result.content).toContain('id String');
19
+ expect(result.content).toContain('count Int32');
20
+ });
21
+ it('includes description when provided', () => {
22
+ const ds = defineDatasource('test_ds', {
23
+ description: 'Test datasource description',
24
+ schema: {
25
+ id: t.string(),
26
+ },
27
+ });
28
+ const result = generateDatasource(ds);
29
+ expect(result.content).toContain('DESCRIPTION >');
30
+ expect(result.content).toContain('Test datasource description');
31
+ });
32
+ it('includes engine configuration', () => {
33
+ const ds = defineDatasource('test_ds', {
34
+ schema: {
35
+ id: t.string(),
36
+ },
37
+ engine: engine.mergeTree({
38
+ sortingKey: ['id'],
39
+ }),
40
+ });
41
+ const result = generateDatasource(ds);
42
+ expect(result.content).toContain('ENGINE "MergeTree"');
43
+ expect(result.content).toContain('ENGINE_SORTING_KEY "id"');
44
+ });
45
+ it('includes partition key in engine config', () => {
46
+ const ds = defineDatasource('test_ds', {
47
+ schema: {
48
+ id: t.string(),
49
+ timestamp: t.dateTime(),
50
+ },
51
+ engine: engine.mergeTree({
52
+ sortingKey: ['id'],
53
+ partitionKey: 'toYYYYMM(timestamp)',
54
+ }),
55
+ });
56
+ const result = generateDatasource(ds);
57
+ expect(result.content).toContain('ENGINE_PARTITION_KEY "toYYYYMM(timestamp)"');
58
+ });
59
+ it('includes TTL in engine config', () => {
60
+ const ds = defineDatasource('test_ds', {
61
+ schema: {
62
+ id: t.string(),
63
+ timestamp: t.dateTime(),
64
+ },
65
+ engine: engine.mergeTree({
66
+ sortingKey: ['id'],
67
+ ttl: 'timestamp + INTERVAL 90 DAY',
68
+ }),
69
+ });
70
+ const result = generateDatasource(ds);
71
+ expect(result.content).toContain('ENGINE_TTL "timestamp + INTERVAL 90 DAY"');
72
+ });
73
+ });
74
+ describe('Column formatting', () => {
75
+ it('formats Nullable columns correctly', () => {
76
+ const ds = defineDatasource('test_ds', {
77
+ schema: {
78
+ name: t.string().nullable(),
79
+ },
80
+ });
81
+ const result = generateDatasource(ds);
82
+ expect(result.content).toContain('name Nullable(String)');
83
+ });
84
+ it('formats LowCardinality columns correctly', () => {
85
+ const ds = defineDatasource('test_ds', {
86
+ schema: {
87
+ country: t.string().lowCardinality(),
88
+ },
89
+ });
90
+ const result = generateDatasource(ds);
91
+ expect(result.content).toContain('country LowCardinality(String)');
92
+ });
93
+ it('formats LowCardinality(Nullable) correctly', () => {
94
+ const ds = defineDatasource('test_ds', {
95
+ schema: {
96
+ country: t.string().lowCardinality().nullable(),
97
+ },
98
+ });
99
+ const result = generateDatasource(ds);
100
+ expect(result.content).toContain('country LowCardinality(Nullable(String))');
101
+ });
102
+ it('includes default values', () => {
103
+ const ds = defineDatasource('test_ds', {
104
+ schema: {
105
+ status: t.string().default('pending'),
106
+ },
107
+ });
108
+ const result = generateDatasource(ds);
109
+ expect(result.content).toContain("status String `json:$.status` DEFAULT 'pending'");
110
+ });
111
+ it('formats null default values', () => {
112
+ const ds = defineDatasource('test_ds', {
113
+ schema: {
114
+ // Using nullable with explicit null default
115
+ status: t.string().nullable().default(null),
116
+ },
117
+ });
118
+ const result = generateDatasource(ds);
119
+ expect(result.content).toContain('DEFAULT NULL');
120
+ });
121
+ it('formats number default values', () => {
122
+ const ds = defineDatasource('test_ds', {
123
+ schema: {
124
+ count: t.int32().default(42),
125
+ score: t.float64().default(3.14),
126
+ },
127
+ });
128
+ const result = generateDatasource(ds);
129
+ expect(result.content).toContain('count Int32 `json:$.count` DEFAULT 42');
130
+ expect(result.content).toContain('score Float64 `json:$.score` DEFAULT 3.14');
131
+ });
132
+ it('formats boolean default values', () => {
133
+ const ds = defineDatasource('test_ds', {
134
+ schema: {
135
+ is_active: t.bool().default(true),
136
+ is_deleted: t.bool().default(false),
137
+ },
138
+ });
139
+ const result = generateDatasource(ds);
140
+ expect(result.content).toContain('is_active Bool `json:$.is_active` DEFAULT 1');
141
+ expect(result.content).toContain('is_deleted Bool `json:$.is_deleted` DEFAULT 0');
142
+ });
143
+ it('formats Date default values for DateTime type', () => {
144
+ const ds = defineDatasource('test_ds', {
145
+ schema: {
146
+ created_at: t.dateTime().default(new Date('2024-01-15T10:30:00Z')),
147
+ },
148
+ });
149
+ const result = generateDatasource(ds);
150
+ expect(result.content).toContain("created_at DateTime `json:$.created_at` DEFAULT '2024-01-15 10:30:00'");
151
+ });
152
+ it('formats Date default values for Date type', () => {
153
+ const ds = defineDatasource('test_ds', {
154
+ schema: {
155
+ birth_date: t.date().default(new Date('2024-01-15T10:30:00Z')),
156
+ },
157
+ });
158
+ const result = generateDatasource(ds);
159
+ expect(result.content).toContain("birth_date Date `json:$.birth_date` DEFAULT '2024-01-15'");
160
+ });
161
+ it('formats array default values', () => {
162
+ const ds = defineDatasource('test_ds', {
163
+ schema: {
164
+ tags: t.array(t.string()).default(['a', 'b']),
165
+ },
166
+ });
167
+ const result = generateDatasource(ds);
168
+ expect(result.content).toContain('tags Array(String) `json:$.tags` DEFAULT ["a","b"]');
169
+ });
170
+ it('formats object default values for JSON type', () => {
171
+ const ds = defineDatasource('test_ds', {
172
+ schema: {
173
+ metadata: t.json().default({ key: 'value' }),
174
+ },
175
+ });
176
+ const result = generateDatasource(ds);
177
+ expect(result.content).toContain('metadata JSON `json:$.metadata` DEFAULT {"key":"value"}');
178
+ });
179
+ it('escapes single quotes in string default values', () => {
180
+ const ds = defineDatasource('test_ds', {
181
+ schema: {
182
+ message: t.string().default("it's working"),
183
+ },
184
+ });
185
+ const result = generateDatasource(ds);
186
+ expect(result.content).toContain("message String `json:$.message` DEFAULT 'it\\'s working'");
187
+ });
188
+ it('includes codec', () => {
189
+ const ds = defineDatasource('test_ds', {
190
+ schema: {
191
+ data: t.string().codec('LZ4'),
192
+ },
193
+ });
194
+ const result = generateDatasource(ds);
195
+ expect(result.content).toContain('data String `json:$.data` CODEC(LZ4)');
196
+ });
197
+ it('adds commas between columns except last', () => {
198
+ const ds = defineDatasource('test_ds', {
199
+ schema: {
200
+ id: t.string(),
201
+ name: t.string(),
202
+ count: t.int32(),
203
+ },
204
+ });
205
+ const result = generateDatasource(ds);
206
+ const lines = result.content.split('\n');
207
+ const schemaLines = lines.filter(l => l.trim().startsWith('id') || l.trim().startsWith('name') || l.trim().startsWith('count'));
208
+ expect(schemaLines[0]).toContain(',');
209
+ expect(schemaLines[1]).toContain(',');
210
+ expect(schemaLines[2]).not.toContain(',');
211
+ });
212
+ });
213
+ describe('generateAllDatasources', () => {
214
+ it('generates all datasources', () => {
215
+ const ds1 = defineDatasource('ds1', { schema: { id: t.string() } });
216
+ const ds2 = defineDatasource('ds2', { schema: { id: t.int32() } });
217
+ const results = generateAllDatasources({ ds1, ds2 });
218
+ expect(results).toHaveLength(2);
219
+ expect(results.map(r => r.name).sort()).toEqual(['ds1', 'ds2']);
220
+ });
221
+ });
222
+ describe('Full integration', () => {
223
+ it('generates complete datasource file', () => {
224
+ const ds = defineDatasource('page_views', {
225
+ description: 'Page view tracking data',
226
+ schema: {
227
+ timestamp: t.dateTime(),
228
+ pathname: t.string(),
229
+ session_id: t.string(),
230
+ country: t.string().lowCardinality().nullable(),
231
+ },
232
+ engine: engine.mergeTree({
233
+ sortingKey: ['pathname', 'timestamp'],
234
+ partitionKey: 'toYYYYMM(timestamp)',
235
+ ttl: 'timestamp + INTERVAL 90 DAY',
236
+ }),
237
+ });
238
+ const result = generateDatasource(ds);
239
+ expect(result.name).toBe('page_views');
240
+ expect(result.content).toContain('DESCRIPTION >');
241
+ expect(result.content).toContain('Page view tracking data');
242
+ expect(result.content).toContain('SCHEMA >');
243
+ expect(result.content).toContain('timestamp DateTime');
244
+ expect(result.content).toContain('pathname String');
245
+ expect(result.content).toContain('session_id String');
246
+ expect(result.content).toContain('country LowCardinality(Nullable(String))');
247
+ expect(result.content).toContain('ENGINE "MergeTree"');
248
+ expect(result.content).toContain('ENGINE_PARTITION_KEY "toYYYYMM(timestamp)"');
249
+ expect(result.content).toContain('ENGINE_SORTING_KEY "pathname, timestamp"');
250
+ expect(result.content).toContain('ENGINE_TTL "timestamp + INTERVAL 90 DAY"');
251
+ });
252
+ });
253
+ });
254
+ //# sourceMappingURL=datasource.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datasource.test.js","sourceRoot":"","sources":["../../src/generator/datasource.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,131 @@
1
+ /**
2
+ * Main generator module
3
+ * Orchestrates loading schema and generating all resources
4
+ */
5
+ import { type LoadedEntities } from "./loader.js";
6
+ import { type GeneratedDatasource } from "./datasource.js";
7
+ import { type GeneratedPipe } from "./pipe.js";
8
+ import type { ProjectDefinition, DatasourcesDefinition, PipesDefinition } from "../schema/project.js";
9
+ /**
10
+ * Generated resources ready for API push
11
+ */
12
+ export interface GeneratedResources {
13
+ /** Generated datasource files */
14
+ datasources: GeneratedDatasource[];
15
+ /** Generated pipe files */
16
+ pipes: GeneratedPipe[];
17
+ }
18
+ /**
19
+ * Build result with metadata
20
+ */
21
+ export interface BuildResult {
22
+ /** The generated resources */
23
+ resources: GeneratedResources;
24
+ /** The loaded project definition (for validation) */
25
+ project: ProjectDefinition;
26
+ /** Path to the schema file */
27
+ schemaPath: string;
28
+ /** Directory containing the schema */
29
+ schemaDir: string;
30
+ /** Statistics about the build */
31
+ stats: {
32
+ datasourceCount: number;
33
+ pipeCount: number;
34
+ };
35
+ }
36
+ /**
37
+ * Generate resources from a loaded project definition
38
+ *
39
+ * @param project - The project definition
40
+ * @returns Generated resources
41
+ */
42
+ export declare function generateResources(project: ProjectDefinition): GeneratedResources;
43
+ /**
44
+ * Build options
45
+ */
46
+ export interface BuildOptions {
47
+ /** Path to the schema file */
48
+ schemaPath: string;
49
+ /** Working directory (defaults to cwd) */
50
+ cwd?: string;
51
+ }
52
+ /**
53
+ * Build all resources from a TypeScript schema
54
+ *
55
+ * This is the main entry point for the generator.
56
+ * It loads the schema, generates all resources, and returns them
57
+ * ready for API push.
58
+ *
59
+ * @param options - Build options
60
+ * @returns Build result with generated resources
61
+ *
62
+ * @example
63
+ * ```ts
64
+ * const result = await build({
65
+ * schemaPath: 'src/tinybird/schema.ts',
66
+ * });
67
+ *
68
+ * console.log(`Generated ${result.stats.datasourceCount} datasources`);
69
+ * console.log(`Generated ${result.stats.pipeCount} pipes`);
70
+ *
71
+ * // Resources are ready to push to API
72
+ * result.resources.datasources.forEach(ds => {
73
+ * console.log(`${ds.name}.datasource:`);
74
+ * console.log(ds.content);
75
+ * });
76
+ * ```
77
+ */
78
+ export declare function build(options: BuildOptions): Promise<BuildResult>;
79
+ /**
80
+ * Build options using include paths
81
+ */
82
+ export interface BuildFromIncludeOptions {
83
+ /** Array of file paths to scan for datasources and pipes */
84
+ includePaths: string[];
85
+ /** Working directory (defaults to cwd) */
86
+ cwd?: string;
87
+ }
88
+ /**
89
+ * Build result from include paths
90
+ */
91
+ export interface BuildFromIncludeResult {
92
+ /** The generated resources */
93
+ resources: GeneratedResources;
94
+ /** Loaded entities from source files */
95
+ entities: LoadedEntities;
96
+ /** Statistics about the build */
97
+ stats: {
98
+ datasourceCount: number;
99
+ pipeCount: number;
100
+ };
101
+ }
102
+ /**
103
+ * Generate resources from entities
104
+ */
105
+ export declare function generateResourcesFromEntities(datasources: DatasourcesDefinition, pipes: PipesDefinition): GeneratedResources;
106
+ /**
107
+ * Build all resources from include paths
108
+ *
109
+ * This is the main entry point for the generator that works with
110
+ * auto-discovered entities. It loads datasources and pipes from the
111
+ * include paths and generates Tinybird resources ready to deploy.
112
+ *
113
+ * @param options - Build options with include paths
114
+ * @returns Build result with generated resources
115
+ *
116
+ * @example
117
+ * ```ts
118
+ * const result = await buildFromInclude({
119
+ * includePaths: ['src/tinybird/datasources.ts', 'src/tinybird/pipes.ts'],
120
+ * });
121
+ *
122
+ * // Push resources to Tinybird
123
+ * await deploy(result.resources);
124
+ * ```
125
+ */
126
+ export declare function buildFromInclude(options: BuildFromIncludeOptions): Promise<BuildFromIncludeResult>;
127
+ export { loadSchema, loadEntities, entitiesToProject, type LoaderOptions, type LoadedSchema, type LoadedEntities, type LoadEntitiesOptions } from "./loader.js";
128
+ export { generateDatasource, generateAllDatasources, type GeneratedDatasource } from "./datasource.js";
129
+ export { generatePipe, generateAllPipes, type GeneratedPipe } from "./pipe.js";
130
+ export { generateClientFile, type GenerateClientOptions, type GeneratedClient } from "./client.js";
131
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/generator/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAA+C,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAC/F,OAAO,EAA0B,KAAK,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACnF,OAAO,EAAoB,KAAK,aAAa,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,KAAK,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEtG;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,iCAAiC;IACjC,WAAW,EAAE,mBAAmB,EAAE,CAAC;IACnC,2BAA2B;IAC3B,KAAK,EAAE,aAAa,EAAE,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,8BAA8B;IAC9B,SAAS,EAAE,kBAAkB,CAAC;IAC9B,qDAAqD;IACrD,OAAO,EAAE,iBAAiB,CAAC;IAC3B,8BAA8B;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,sCAAsC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,iCAAiC;IACjC,KAAK,EAAE;QACL,eAAe,EAAE,MAAM,CAAC;QACxB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,iBAAiB,GAAG,kBAAkB,CAQhF;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,8BAA8B;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAoBvE;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,4DAA4D;IAC5D,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,0CAA0C;IAC1C,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,8BAA8B;IAC9B,SAAS,EAAE,kBAAkB,CAAC;IAC9B,wCAAwC;IACxC,QAAQ,EAAE,cAAc,CAAC;IACzB,iCAAiC;IACjC,KAAK,EAAE;QACL,eAAe,EAAE,MAAM,CAAC;QACxB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAC3C,WAAW,EAAE,qBAAqB,EAClC,KAAK,EAAE,eAAe,GACrB,kBAAkB,CAKpB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,sBAAsB,CAAC,CAuBjC;AAGD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,iBAAiB,EAAE,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,KAAK,cAAc,EAAE,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAChK,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,KAAK,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACvG,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,KAAK,aAAa,EAAE,MAAM,WAAW,CAAC;AAC/E,OAAO,EAAE,kBAAkB,EAAE,KAAK,qBAAqB,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,121 @@
1
+ /**
2
+ * Main generator module
3
+ * Orchestrates loading schema and generating all resources
4
+ */
5
+ import { loadSchema, loadEntities, entitiesToProject } from "./loader.js";
6
+ import { generateAllDatasources } from "./datasource.js";
7
+ import { generateAllPipes } from "./pipe.js";
8
+ /**
9
+ * Generate resources from a loaded project definition
10
+ *
11
+ * @param project - The project definition
12
+ * @returns Generated resources
13
+ */
14
+ export function generateResources(project) {
15
+ const datasources = generateAllDatasources(project.datasources);
16
+ const pipes = generateAllPipes(project.pipes);
17
+ return {
18
+ datasources,
19
+ pipes,
20
+ };
21
+ }
22
+ /**
23
+ * Build all resources from a TypeScript schema
24
+ *
25
+ * This is the main entry point for the generator.
26
+ * It loads the schema, generates all resources, and returns them
27
+ * ready for API push.
28
+ *
29
+ * @param options - Build options
30
+ * @returns Build result with generated resources
31
+ *
32
+ * @example
33
+ * ```ts
34
+ * const result = await build({
35
+ * schemaPath: 'src/tinybird/schema.ts',
36
+ * });
37
+ *
38
+ * console.log(`Generated ${result.stats.datasourceCount} datasources`);
39
+ * console.log(`Generated ${result.stats.pipeCount} pipes`);
40
+ *
41
+ * // Resources are ready to push to API
42
+ * result.resources.datasources.forEach(ds => {
43
+ * console.log(`${ds.name}.datasource:`);
44
+ * console.log(ds.content);
45
+ * });
46
+ * ```
47
+ */
48
+ export async function build(options) {
49
+ // Load the schema
50
+ const loaded = await loadSchema({
51
+ schemaPath: options.schemaPath,
52
+ cwd: options.cwd,
53
+ });
54
+ // Generate resources
55
+ const resources = generateResources(loaded.project);
56
+ return {
57
+ resources,
58
+ project: loaded.project,
59
+ schemaPath: loaded.schemaPath,
60
+ schemaDir: loaded.schemaDir,
61
+ stats: {
62
+ datasourceCount: resources.datasources.length,
63
+ pipeCount: resources.pipes.length,
64
+ },
65
+ };
66
+ }
67
+ /**
68
+ * Generate resources from entities
69
+ */
70
+ export function generateResourcesFromEntities(datasources, pipes) {
71
+ return {
72
+ datasources: generateAllDatasources(datasources),
73
+ pipes: generateAllPipes(pipes),
74
+ };
75
+ }
76
+ /**
77
+ * Build all resources from include paths
78
+ *
79
+ * This is the main entry point for the generator that works with
80
+ * auto-discovered entities. It loads datasources and pipes from the
81
+ * include paths and generates Tinybird resources ready to deploy.
82
+ *
83
+ * @param options - Build options with include paths
84
+ * @returns Build result with generated resources
85
+ *
86
+ * @example
87
+ * ```ts
88
+ * const result = await buildFromInclude({
89
+ * includePaths: ['src/tinybird/datasources.ts', 'src/tinybird/pipes.ts'],
90
+ * });
91
+ *
92
+ * // Push resources to Tinybird
93
+ * await deploy(result.resources);
94
+ * ```
95
+ */
96
+ export async function buildFromInclude(options) {
97
+ const cwd = options.cwd ?? process.cwd();
98
+ // Load entities from include paths
99
+ const entities = await loadEntities({
100
+ includePaths: options.includePaths,
101
+ cwd,
102
+ });
103
+ // Convert to format for generators
104
+ const { datasources, pipes } = entitiesToProject(entities);
105
+ // Generate resources
106
+ const resources = generateResourcesFromEntities(datasources, pipes);
107
+ return {
108
+ resources,
109
+ entities,
110
+ stats: {
111
+ datasourceCount: resources.datasources.length,
112
+ pipeCount: resources.pipes.length,
113
+ },
114
+ };
115
+ }
116
+ // Re-export types and utilities
117
+ export { loadSchema, loadEntities, entitiesToProject } from "./loader.js";
118
+ export { generateDatasource, generateAllDatasources } from "./datasource.js";
119
+ export { generatePipe, generateAllPipes } from "./pipe.js";
120
+ export { generateClientFile } from "./client.js";
121
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generator/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,iBAAiB,EAAuB,MAAM,aAAa,CAAC;AAC/F,OAAO,EAAE,sBAAsB,EAA4B,MAAM,iBAAiB,CAAC;AACnF,OAAO,EAAE,gBAAgB,EAAsB,MAAM,WAAW,CAAC;AAgCjE;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAA0B;IAC1D,MAAM,WAAW,GAAG,sBAAsB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAChE,MAAM,KAAK,GAAG,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAE9C,OAAO;QACL,WAAW;QACX,KAAK;KACN,CAAC;AACJ,CAAC;AAYD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,OAAqB;IAC/C,kBAAkB;IAClB,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC;QAC9B,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,GAAG,EAAE,OAAO,CAAC,GAAG;KACjB,CAAC,CAAC;IAEH,qBAAqB;IACrB,MAAM,SAAS,GAAG,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAEpD,OAAO;QACL,SAAS;QACT,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,KAAK,EAAE;YACL,eAAe,EAAE,SAAS,CAAC,WAAW,CAAC,MAAM;YAC7C,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC,MAAM;SAClC;KACF,CAAC;AACJ,CAAC;AA2BD;;GAEG;AACH,MAAM,UAAU,6BAA6B,CAC3C,WAAkC,EAClC,KAAsB;IAEtB,OAAO;QACL,WAAW,EAAE,sBAAsB,CAAC,WAAW,CAAC;QAChD,KAAK,EAAE,gBAAgB,CAAC,KAAK,CAAC;KAC/B,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAAgC;IAEhC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAEzC,mCAAmC;IACnC,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC;QAClC,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,GAAG;KACJ,CAAC,CAAC;IAEH,mCAAmC;IACnC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAE3D,qBAAqB;IACrB,MAAM,SAAS,GAAG,6BAA6B,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAEpE,OAAO;QACL,SAAS;QACT,QAAQ;QACR,KAAK,EAAE;YACL,eAAe,EAAE,SAAS,CAAC,WAAW,CAAC,MAAM;YAC7C,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC,MAAM;SAClC;KACF,CAAC;AACJ,CAAC;AAED,gCAAgC;AAChC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,iBAAiB,EAAwF,MAAM,aAAa,CAAC;AAChK,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAA4B,MAAM,iBAAiB,CAAC;AACvG,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAsB,MAAM,WAAW,CAAC;AAC/E,OAAO,EAAE,kBAAkB,EAAoD,MAAM,aAAa,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../../src/generator/index.test.ts"],"names":[],"mappings":""}