@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
@@ -0,0 +1,167 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { clickhouseTypeToValidator, paramTypeToValidator } from "./type-mapper.js";
3
+ describe("clickhouseTypeToValidator", () => {
4
+ describe("simple types", () => {
5
+ it("maps String to t.string()", () => {
6
+ expect(clickhouseTypeToValidator("String")).toBe("t.string()");
7
+ });
8
+ it("maps UUID to t.uuid()", () => {
9
+ expect(clickhouseTypeToValidator("UUID")).toBe("t.uuid()");
10
+ });
11
+ it("maps integer types", () => {
12
+ expect(clickhouseTypeToValidator("Int8")).toBe("t.int8()");
13
+ expect(clickhouseTypeToValidator("Int16")).toBe("t.int16()");
14
+ expect(clickhouseTypeToValidator("Int32")).toBe("t.int32()");
15
+ expect(clickhouseTypeToValidator("Int64")).toBe("t.int64()");
16
+ expect(clickhouseTypeToValidator("Int128")).toBe("t.int128()");
17
+ expect(clickhouseTypeToValidator("Int256")).toBe("t.int256()");
18
+ });
19
+ it("maps unsigned integer types", () => {
20
+ expect(clickhouseTypeToValidator("UInt8")).toBe("t.uint8()");
21
+ expect(clickhouseTypeToValidator("UInt16")).toBe("t.uint16()");
22
+ expect(clickhouseTypeToValidator("UInt32")).toBe("t.uint32()");
23
+ expect(clickhouseTypeToValidator("UInt64")).toBe("t.uint64()");
24
+ expect(clickhouseTypeToValidator("UInt128")).toBe("t.uint128()");
25
+ expect(clickhouseTypeToValidator("UInt256")).toBe("t.uint256()");
26
+ });
27
+ it("maps float types", () => {
28
+ expect(clickhouseTypeToValidator("Float32")).toBe("t.float32()");
29
+ expect(clickhouseTypeToValidator("Float64")).toBe("t.float64()");
30
+ });
31
+ it("maps Bool to t.bool()", () => {
32
+ expect(clickhouseTypeToValidator("Bool")).toBe("t.bool()");
33
+ expect(clickhouseTypeToValidator("Boolean")).toBe("t.bool()");
34
+ });
35
+ it("maps date types", () => {
36
+ expect(clickhouseTypeToValidator("Date")).toBe("t.date()");
37
+ expect(clickhouseTypeToValidator("Date32")).toBe("t.date32()");
38
+ expect(clickhouseTypeToValidator("DateTime")).toBe("t.dateTime()");
39
+ });
40
+ it("maps JSON to t.json()", () => {
41
+ expect(clickhouseTypeToValidator("JSON")).toBe("t.json()");
42
+ });
43
+ it("maps IP types", () => {
44
+ expect(clickhouseTypeToValidator("IPv4")).toBe("t.ipv4()");
45
+ expect(clickhouseTypeToValidator("IPv6")).toBe("t.ipv6()");
46
+ });
47
+ });
48
+ describe("Nullable wrapper", () => {
49
+ it("adds .nullable() for Nullable(String)", () => {
50
+ expect(clickhouseTypeToValidator("Nullable(String)")).toBe("t.string().nullable()");
51
+ });
52
+ it("adds .nullable() for Nullable(Int32)", () => {
53
+ expect(clickhouseTypeToValidator("Nullable(Int32)")).toBe("t.int32().nullable()");
54
+ });
55
+ it("adds .nullable() for Nullable(DateTime)", () => {
56
+ expect(clickhouseTypeToValidator("Nullable(DateTime)")).toBe("t.dateTime().nullable()");
57
+ });
58
+ });
59
+ describe("LowCardinality wrapper", () => {
60
+ it("adds .lowCardinality() for LowCardinality(String)", () => {
61
+ expect(clickhouseTypeToValidator("LowCardinality(String)")).toBe("t.string().lowCardinality()");
62
+ });
63
+ it("handles LowCardinality(Nullable(String))", () => {
64
+ expect(clickhouseTypeToValidator("LowCardinality(Nullable(String))")).toBe("t.string().nullable().lowCardinality()");
65
+ });
66
+ });
67
+ describe("parameterized types", () => {
68
+ it("handles DateTime with timezone", () => {
69
+ expect(clickhouseTypeToValidator("DateTime('UTC')")).toBe('t.dateTime("UTC")');
70
+ expect(clickhouseTypeToValidator("DateTime('America/New_York')")).toBe('t.dateTime("America/New_York")');
71
+ });
72
+ it("handles DateTime64 with precision", () => {
73
+ expect(clickhouseTypeToValidator("DateTime64(3)")).toBe("t.dateTime64(3)");
74
+ expect(clickhouseTypeToValidator("DateTime64(6)")).toBe("t.dateTime64(6)");
75
+ });
76
+ it("handles DateTime64 with precision and timezone", () => {
77
+ expect(clickhouseTypeToValidator("DateTime64(3, 'UTC')")).toBe('t.dateTime64(3, "UTC")');
78
+ });
79
+ it("handles FixedString(N)", () => {
80
+ expect(clickhouseTypeToValidator("FixedString(10)")).toBe("t.fixedString(10)");
81
+ expect(clickhouseTypeToValidator("FixedString(255)")).toBe("t.fixedString(255)");
82
+ });
83
+ it("handles Decimal(P, S)", () => {
84
+ expect(clickhouseTypeToValidator("Decimal(10, 2)")).toBe("t.decimal(10, 2)");
85
+ expect(clickhouseTypeToValidator("Decimal(18, 4)")).toBe("t.decimal(18, 4)");
86
+ });
87
+ });
88
+ describe("complex types", () => {
89
+ it("handles Array(T)", () => {
90
+ expect(clickhouseTypeToValidator("Array(String)")).toBe("t.array(t.string())");
91
+ expect(clickhouseTypeToValidator("Array(Int32)")).toBe("t.array(t.int32())");
92
+ });
93
+ it("handles nested Array types", () => {
94
+ expect(clickhouseTypeToValidator("Array(Array(String))")).toBe("t.array(t.array(t.string()))");
95
+ });
96
+ it("handles Array with Nullable elements", () => {
97
+ expect(clickhouseTypeToValidator("Array(Nullable(String))")).toBe("t.array(t.string().nullable())");
98
+ });
99
+ it("handles Map(K, V)", () => {
100
+ expect(clickhouseTypeToValidator("Map(String, Int32)")).toBe("t.map(t.string(), t.int32())");
101
+ });
102
+ });
103
+ describe("enum types", () => {
104
+ it("handles Enum8", () => {
105
+ expect(clickhouseTypeToValidator("Enum8('a' = 1, 'b' = 2)")).toBe('t.enum8("a", "b")');
106
+ });
107
+ it("handles Enum16", () => {
108
+ expect(clickhouseTypeToValidator("Enum16('pending' = 1, 'active' = 2, 'done' = 3)")).toBe('t.enum16("pending", "active", "done")');
109
+ });
110
+ });
111
+ describe("aggregate function types", () => {
112
+ it("handles SimpleAggregateFunction", () => {
113
+ expect(clickhouseTypeToValidator("SimpleAggregateFunction(sum, UInt64)")).toBe('t.simpleAggregateFunction("sum", t.uint64())');
114
+ });
115
+ it("handles AggregateFunction", () => {
116
+ expect(clickhouseTypeToValidator("AggregateFunction(uniq, String)")).toBe('t.aggregateFunction("uniq", t.string())');
117
+ });
118
+ });
119
+ describe("unknown types", () => {
120
+ it("returns string with TODO comment for unknown types", () => {
121
+ expect(clickhouseTypeToValidator("UnknownType")).toBe("t.string() /* TODO: Unknown type: UnknownType */");
122
+ });
123
+ });
124
+ });
125
+ describe("paramTypeToValidator", () => {
126
+ describe("simple types", () => {
127
+ it("maps String to p.string()", () => {
128
+ expect(paramTypeToValidator("String")).toBe("p.string()");
129
+ });
130
+ it("maps Int32 to p.int32()", () => {
131
+ expect(paramTypeToValidator("Int32")).toBe("p.int32()");
132
+ });
133
+ it("maps DateTime to p.dateTime()", () => {
134
+ expect(paramTypeToValidator("DateTime")).toBe("p.dateTime()");
135
+ });
136
+ it("maps Boolean to p.boolean()", () => {
137
+ expect(paramTypeToValidator("Boolean")).toBe("p.boolean()");
138
+ expect(paramTypeToValidator("Bool")).toBe("p.boolean()");
139
+ });
140
+ });
141
+ describe("optional parameters", () => {
142
+ it("adds .optional() for non-required params", () => {
143
+ expect(paramTypeToValidator("String", undefined, false)).toBe("p.string().optional()");
144
+ });
145
+ it("adds .optional(default) for params with defaults", () => {
146
+ expect(paramTypeToValidator("Int32", 10)).toBe("p.int32().optional(10)");
147
+ expect(paramTypeToValidator("String", "test")).toBe('p.string().optional("test")');
148
+ });
149
+ it("adds .optional(default) even for required params with defaults", () => {
150
+ expect(paramTypeToValidator("Int32", 5, true)).toBe("p.int32().optional(5)");
151
+ });
152
+ });
153
+ describe("DateTime variants", () => {
154
+ it("handles DateTime64", () => {
155
+ expect(paramTypeToValidator("DateTime64")).toBe("p.dateTime64()");
156
+ });
157
+ it("handles DateTime with timezone", () => {
158
+ expect(paramTypeToValidator("DateTime('UTC')")).toBe("p.dateTime()");
159
+ });
160
+ });
161
+ describe("unknown types", () => {
162
+ it("defaults to p.string() for unknown types", () => {
163
+ expect(paramTypeToValidator("UnknownType")).toBe("p.string()");
164
+ });
165
+ });
166
+ });
167
+ //# sourceMappingURL=type-mapper.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type-mapper.test.js","sourceRoot":"","sources":["../../src/codegen/type-mapper.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Utility functions for code generation
3
+ */
4
+ /**
5
+ * Convert a string to camelCase
6
+ * Handles snake_case and kebab-case
7
+ */
8
+ export declare function toCamelCase(str: string): string;
9
+ /**
10
+ * Convert a string to PascalCase
11
+ * Handles snake_case and kebab-case
12
+ */
13
+ export declare function toPascalCase(str: string): string;
14
+ /**
15
+ * Escape a string for use in JavaScript/TypeScript code
16
+ */
17
+ export declare function escapeString(str: string): string;
18
+ /**
19
+ * Parse a sorting key string into an array
20
+ * Handles comma-separated values and quoted identifiers
21
+ */
22
+ export declare function parseSortingKey(sortingKey?: string): string[];
23
+ /**
24
+ * Generate engine code from engine info
25
+ */
26
+ export declare function generateEngineCode(engine: {
27
+ type: string;
28
+ sorting_key?: string;
29
+ partition_key?: string;
30
+ primary_key?: string;
31
+ ttl?: string;
32
+ ver?: string;
33
+ sign?: string;
34
+ version?: string;
35
+ summing_columns?: string;
36
+ }): string;
37
+ /**
38
+ * Indent a multi-line string
39
+ */
40
+ export declare function indent(str: string, spaces: number): string;
41
+ /**
42
+ * Format SQL for inclusion in template literal
43
+ * Preserves newlines and indentation but escapes backticks
44
+ */
45
+ export declare function formatSqlForTemplate(sql: string): string;
46
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/codegen/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAsB/C;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAGhD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAOhD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAU7D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,GAAG,MAAM,CAwET;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAM1D;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAExD"}
@@ -0,0 +1,141 @@
1
+ /**
2
+ * Utility functions for code generation
3
+ */
4
+ /**
5
+ * Convert a string to camelCase
6
+ * Handles snake_case and kebab-case
7
+ */
8
+ export function toCamelCase(str) {
9
+ // Handle reserved keywords
10
+ const reserved = new Set([
11
+ "break", "case", "catch", "class", "const", "continue", "debugger",
12
+ "default", "delete", "do", "else", "enum", "export", "extends",
13
+ "false", "finally", "for", "function", "if", "import", "in",
14
+ "instanceof", "new", "null", "return", "super", "switch", "this",
15
+ "throw", "true", "try", "typeof", "undefined", "var", "void",
16
+ "while", "with", "yield", "let", "static", "implements", "interface",
17
+ "package", "private", "protected", "public", "await", "async",
18
+ ]);
19
+ const result = str
20
+ .replace(/[-_](.)/g, (_, char) => char.toUpperCase())
21
+ .replace(/^[A-Z]/, (char) => char.toLowerCase());
22
+ // If the result is a reserved keyword or starts with a number, prefix with underscore
23
+ if (reserved.has(result) || /^\d/.test(result)) {
24
+ return `_${result}`;
25
+ }
26
+ return result;
27
+ }
28
+ /**
29
+ * Convert a string to PascalCase
30
+ * Handles snake_case and kebab-case
31
+ */
32
+ export function toPascalCase(str) {
33
+ const camel = toCamelCase(str);
34
+ return camel.charAt(0).toUpperCase() + camel.slice(1);
35
+ }
36
+ /**
37
+ * Escape a string for use in JavaScript/TypeScript code
38
+ */
39
+ export function escapeString(str) {
40
+ return str
41
+ .replace(/\\/g, "\\\\")
42
+ .replace(/"/g, '\\"')
43
+ .replace(/\n/g, "\\n")
44
+ .replace(/\r/g, "\\r")
45
+ .replace(/\t/g, "\\t");
46
+ }
47
+ /**
48
+ * Parse a sorting key string into an array
49
+ * Handles comma-separated values and quoted identifiers
50
+ */
51
+ export function parseSortingKey(sortingKey) {
52
+ if (!sortingKey) {
53
+ return [];
54
+ }
55
+ // Split by comma, trim whitespace
56
+ return sortingKey
57
+ .split(",")
58
+ .map((s) => s.trim())
59
+ .filter((s) => s.length > 0);
60
+ }
61
+ /**
62
+ * Generate engine code from engine info
63
+ */
64
+ export function generateEngineCode(engine) {
65
+ const sortingKey = parseSortingKey(engine.sorting_key);
66
+ // Build options object
67
+ const options = [];
68
+ // Sorting key is required for all MergeTree engines
69
+ if (sortingKey.length === 1) {
70
+ options.push(`sortingKey: "${sortingKey[0]}"`);
71
+ }
72
+ else if (sortingKey.length > 1) {
73
+ options.push(`sortingKey: [${sortingKey.map((k) => `"${k}"`).join(", ")}]`);
74
+ }
75
+ // Optional fields
76
+ if (engine.partition_key) {
77
+ options.push(`partitionKey: "${escapeString(engine.partition_key)}"`);
78
+ }
79
+ if (engine.primary_key && engine.primary_key !== engine.sorting_key) {
80
+ const primaryKey = parseSortingKey(engine.primary_key);
81
+ if (primaryKey.length === 1) {
82
+ options.push(`primaryKey: "${primaryKey[0]}"`);
83
+ }
84
+ else if (primaryKey.length > 1) {
85
+ options.push(`primaryKey: [${primaryKey.map((k) => `"${k}"`).join(", ")}]`);
86
+ }
87
+ }
88
+ if (engine.ttl) {
89
+ options.push(`ttl: "${escapeString(engine.ttl)}"`);
90
+ }
91
+ // Engine-specific options
92
+ if (engine.type === "ReplacingMergeTree" && engine.ver) {
93
+ options.push(`ver: "${engine.ver}"`);
94
+ }
95
+ if ((engine.type === "CollapsingMergeTree" ||
96
+ engine.type === "VersionedCollapsingMergeTree") &&
97
+ engine.sign) {
98
+ options.push(`sign: "${engine.sign}"`);
99
+ }
100
+ if (engine.type === "VersionedCollapsingMergeTree" && engine.version) {
101
+ options.push(`version: "${engine.version}"`);
102
+ }
103
+ if (engine.type === "SummingMergeTree" && engine.summing_columns) {
104
+ const columns = parseSortingKey(engine.summing_columns);
105
+ if (columns.length > 0) {
106
+ options.push(`columns: [${columns.map((c) => `"${c}"`).join(", ")}]`);
107
+ }
108
+ }
109
+ // Map engine type to function name
110
+ const engineFunctionMap = {
111
+ MergeTree: "engine.mergeTree",
112
+ ReplacingMergeTree: "engine.replacingMergeTree",
113
+ SummingMergeTree: "engine.summingMergeTree",
114
+ AggregatingMergeTree: "engine.aggregatingMergeTree",
115
+ CollapsingMergeTree: "engine.collapsingMergeTree",
116
+ VersionedCollapsingMergeTree: "engine.versionedCollapsingMergeTree",
117
+ };
118
+ const engineFunc = engineFunctionMap[engine.type] ?? "engine.mergeTree";
119
+ if (options.length === 0) {
120
+ return `${engineFunc}({ sortingKey: [] })`;
121
+ }
122
+ return `${engineFunc}({\n ${options.join(",\n ")},\n })`;
123
+ }
124
+ /**
125
+ * Indent a multi-line string
126
+ */
127
+ export function indent(str, spaces) {
128
+ const prefix = " ".repeat(spaces);
129
+ return str
130
+ .split("\n")
131
+ .map((line) => (line.trim() ? prefix + line : line))
132
+ .join("\n");
133
+ }
134
+ /**
135
+ * Format SQL for inclusion in template literal
136
+ * Preserves newlines and indentation but escapes backticks
137
+ */
138
+ export function formatSqlForTemplate(sql) {
139
+ return sql.replace(/`/g, "\\`").replace(/\${/g, "\\${");
140
+ }
141
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/codegen/utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=utils.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.test.d.ts","sourceRoot":"","sources":["../../src/codegen/utils.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,178 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { toCamelCase, toPascalCase, escapeString, parseSortingKey, generateEngineCode, formatSqlForTemplate, } from "./utils.js";
3
+ describe("toCamelCase", () => {
4
+ it("converts snake_case to camelCase", () => {
5
+ expect(toCamelCase("page_views")).toBe("pageViews");
6
+ expect(toCamelCase("user_session_data")).toBe("userSessionData");
7
+ });
8
+ it("converts kebab-case to camelCase", () => {
9
+ expect(toCamelCase("page-views")).toBe("pageViews");
10
+ expect(toCamelCase("user-session-data")).toBe("userSessionData");
11
+ });
12
+ it("lowercases first character of PascalCase", () => {
13
+ expect(toCamelCase("PageViews")).toBe("pageViews");
14
+ });
15
+ it("handles single word", () => {
16
+ expect(toCamelCase("events")).toBe("events");
17
+ });
18
+ it("prefixes reserved keywords with underscore", () => {
19
+ expect(toCamelCase("class")).toBe("_class");
20
+ expect(toCamelCase("function")).toBe("_function");
21
+ expect(toCamelCase("return")).toBe("_return");
22
+ expect(toCamelCase("import")).toBe("_import");
23
+ expect(toCamelCase("export")).toBe("_export");
24
+ });
25
+ it("prefixes names starting with numbers", () => {
26
+ expect(toCamelCase("123_test")).toBe("_123Test");
27
+ expect(toCamelCase("1events")).toBe("_1events");
28
+ });
29
+ });
30
+ describe("toPascalCase", () => {
31
+ it("converts snake_case to PascalCase", () => {
32
+ expect(toPascalCase("page_views")).toBe("PageViews");
33
+ expect(toPascalCase("user_session_data")).toBe("UserSessionData");
34
+ });
35
+ it("converts kebab-case to PascalCase", () => {
36
+ expect(toPascalCase("page-views")).toBe("PageViews");
37
+ });
38
+ it("uppercases first character", () => {
39
+ expect(toPascalCase("events")).toBe("Events");
40
+ });
41
+ });
42
+ describe("escapeString", () => {
43
+ it("escapes double quotes", () => {
44
+ expect(escapeString('hello "world"')).toBe('hello \\"world\\"');
45
+ });
46
+ it("escapes backslashes", () => {
47
+ expect(escapeString("path\\to\\file")).toBe("path\\\\to\\\\file");
48
+ });
49
+ it("escapes newlines", () => {
50
+ expect(escapeString("line1\nline2")).toBe("line1\\nline2");
51
+ });
52
+ it("escapes tabs", () => {
53
+ expect(escapeString("col1\tcol2")).toBe("col1\\tcol2");
54
+ });
55
+ it("handles combined escapes", () => {
56
+ expect(escapeString('say "hello\\world"\n')).toBe('say \\"hello\\\\world\\"\\n');
57
+ });
58
+ });
59
+ describe("parseSortingKey", () => {
60
+ it("parses single column", () => {
61
+ expect(parseSortingKey("timestamp")).toEqual(["timestamp"]);
62
+ });
63
+ it("parses multiple columns", () => {
64
+ expect(parseSortingKey("user_id, timestamp")).toEqual(["user_id", "timestamp"]);
65
+ });
66
+ it("trims whitespace", () => {
67
+ expect(parseSortingKey(" user_id , timestamp ")).toEqual(["user_id", "timestamp"]);
68
+ });
69
+ it("returns empty array for undefined", () => {
70
+ expect(parseSortingKey(undefined)).toEqual([]);
71
+ });
72
+ it("returns empty array for empty string", () => {
73
+ expect(parseSortingKey("")).toEqual([]);
74
+ });
75
+ });
76
+ describe("generateEngineCode", () => {
77
+ it("generates MergeTree engine code", () => {
78
+ const code = generateEngineCode({
79
+ type: "MergeTree",
80
+ sorting_key: "timestamp",
81
+ });
82
+ expect(code).toContain("engine.mergeTree");
83
+ expect(code).toContain('sortingKey: "timestamp"');
84
+ });
85
+ it("generates MergeTree with multiple sorting keys", () => {
86
+ const code = generateEngineCode({
87
+ type: "MergeTree",
88
+ sorting_key: "user_id, timestamp",
89
+ });
90
+ expect(code).toContain("engine.mergeTree");
91
+ expect(code).toContain('sortingKey: ["user_id", "timestamp"]');
92
+ });
93
+ it("includes partition key", () => {
94
+ const code = generateEngineCode({
95
+ type: "MergeTree",
96
+ sorting_key: "timestamp",
97
+ partition_key: "toYYYYMM(timestamp)",
98
+ });
99
+ expect(code).toContain('partitionKey: "toYYYYMM(timestamp)"');
100
+ });
101
+ it("includes TTL", () => {
102
+ const code = generateEngineCode({
103
+ type: "MergeTree",
104
+ sorting_key: "timestamp",
105
+ ttl: "timestamp + INTERVAL 90 DAY",
106
+ });
107
+ expect(code).toContain('ttl: "timestamp + INTERVAL 90 DAY"');
108
+ });
109
+ it("generates ReplacingMergeTree with ver column", () => {
110
+ const code = generateEngineCode({
111
+ type: "ReplacingMergeTree",
112
+ sorting_key: "id",
113
+ ver: "updated_at",
114
+ });
115
+ expect(code).toContain("engine.replacingMergeTree");
116
+ expect(code).toContain('ver: "updated_at"');
117
+ });
118
+ it("generates SummingMergeTree with columns", () => {
119
+ const code = generateEngineCode({
120
+ type: "SummingMergeTree",
121
+ sorting_key: "date, category",
122
+ summing_columns: "count, total",
123
+ });
124
+ expect(code).toContain("engine.summingMergeTree");
125
+ expect(code).toContain('columns: ["count", "total"]');
126
+ });
127
+ it("generates AggregatingMergeTree", () => {
128
+ const code = generateEngineCode({
129
+ type: "AggregatingMergeTree",
130
+ sorting_key: "date",
131
+ });
132
+ expect(code).toContain("engine.aggregatingMergeTree");
133
+ });
134
+ it("generates CollapsingMergeTree with sign column", () => {
135
+ const code = generateEngineCode({
136
+ type: "CollapsingMergeTree",
137
+ sorting_key: "id, timestamp",
138
+ sign: "sign",
139
+ });
140
+ expect(code).toContain("engine.collapsingMergeTree");
141
+ expect(code).toContain('sign: "sign"');
142
+ });
143
+ it("generates VersionedCollapsingMergeTree", () => {
144
+ const code = generateEngineCode({
145
+ type: "VersionedCollapsingMergeTree",
146
+ sorting_key: "id",
147
+ sign: "sign",
148
+ version: "version",
149
+ });
150
+ expect(code).toContain("engine.versionedCollapsingMergeTree");
151
+ expect(code).toContain('sign: "sign"');
152
+ expect(code).toContain('version: "version"');
153
+ });
154
+ it("defaults to mergeTree for unknown engine types", () => {
155
+ const code = generateEngineCode({
156
+ type: "UnknownEngine",
157
+ sorting_key: "id",
158
+ });
159
+ expect(code).toContain("engine.mergeTree");
160
+ });
161
+ });
162
+ describe("formatSqlForTemplate", () => {
163
+ it("escapes backticks", () => {
164
+ expect(formatSqlForTemplate("SELECT `column` FROM table")).toBe("SELECT \\`column\\` FROM table");
165
+ });
166
+ it("escapes template literal interpolations", () => {
167
+ expect(formatSqlForTemplate("SELECT ${column} FROM table")).toBe("SELECT \\${column} FROM table");
168
+ });
169
+ it("preserves newlines", () => {
170
+ const sql = "SELECT *\nFROM table\nWHERE id = 1";
171
+ expect(formatSqlForTemplate(sql)).toBe(sql);
172
+ });
173
+ it("preserves Tinybird template syntax", () => {
174
+ const sql = "SELECT * FROM table WHERE id = {{Int32(id)}}";
175
+ expect(formatSqlForTemplate(sql)).toBe(sql);
176
+ });
177
+ });
178
+ //# sourceMappingURL=utils.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.test.js","sourceRoot":"","sources":["../../src/codegen/utils.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,YAAY,CAAC;AAEpB,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACpD,MAAM,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACpD,MAAM,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qBAAqB,EAAE,GAAG,EAAE;QAC7B,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAClD,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC9C,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC9C,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACjD,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACrD,MAAM,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;QAC/B,MAAM,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qBAAqB,EAAE,GAAG,EAAE;QAC7B,MAAM,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAC1B,MAAM,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,cAAc,EAAE,GAAG,EAAE;QACtB,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,CAAC,YAAY,CAAC,sBAAsB,CAAC,CAAC,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;IACnF,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,sBAAsB,EAAE,GAAG,EAAE;QAC9B,MAAM,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACjC,MAAM,CAAC,eAAe,CAAC,oBAAoB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC;IAClF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAC1B,MAAM,CAAC,eAAe,CAAC,2BAA2B,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC;IACzF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,IAAI,GAAG,kBAAkB,CAAC;YAC9B,IAAI,EAAE,WAAW;YACjB,WAAW,EAAE,WAAW;SACzB,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QAC3C,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,IAAI,GAAG,kBAAkB,CAAC;YAC9B,IAAI,EAAE,WAAW;YACjB,WAAW,EAAE,oBAAoB;SAClC,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QAC3C,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,sCAAsC,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;QAChC,MAAM,IAAI,GAAG,kBAAkB,CAAC;YAC9B,IAAI,EAAE,WAAW;YACjB,WAAW,EAAE,WAAW;YACxB,aAAa,EAAE,qBAAqB;SACrC,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,qCAAqC,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,cAAc,EAAE,GAAG,EAAE;QACtB,MAAM,IAAI,GAAG,kBAAkB,CAAC;YAC9B,IAAI,EAAE,WAAW;YACjB,WAAW,EAAE,WAAW;YACxB,GAAG,EAAE,6BAA6B;SACnC,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,oCAAoC,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,IAAI,GAAG,kBAAkB,CAAC;YAC9B,IAAI,EAAE,oBAAoB;YAC1B,WAAW,EAAE,IAAI;YACjB,GAAG,EAAE,YAAY;SAClB,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC;QACpD,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,IAAI,GAAG,kBAAkB,CAAC;YAC9B,IAAI,EAAE,kBAAkB;YACxB,WAAW,EAAE,gBAAgB;YAC7B,eAAe,EAAE,cAAc;SAChC,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;QAClD,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,6BAA6B,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,IAAI,GAAG,kBAAkB,CAAC;YAC9B,IAAI,EAAE,sBAAsB;YAC5B,WAAW,EAAE,MAAM;SACpB,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,6BAA6B,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,IAAI,GAAG,kBAAkB,CAAC;YAC9B,IAAI,EAAE,qBAAqB;YAC3B,WAAW,EAAE,eAAe;YAC5B,IAAI,EAAE,MAAM;SACb,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;QACrD,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,IAAI,GAAG,kBAAkB,CAAC;YAC9B,IAAI,EAAE,8BAA8B;YACpC,WAAW,EAAE,IAAI;YACjB,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,SAAS;SACnB,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,qCAAqC,CAAC,CAAC;QAC9D,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QACvC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,IAAI,GAAG,kBAAkB,CAAC;YAC9B,IAAI,EAAE,eAAe;YACrB,WAAW,EAAE,IAAI;SAClB,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;QAC3B,MAAM,CAAC,oBAAoB,CAAC,4BAA4B,CAAC,CAAC,CAAC,IAAI,CAC7D,gCAAgC,CACjC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,CAAC,oBAAoB,CAAC,6BAA6B,CAAC,CAAC,CAAC,IAAI,CAC9D,+BAA+B,CAChC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAC5B,MAAM,GAAG,GAAG,oCAAoC,CAAC;QACjD,MAAM,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,GAAG,GAAG,8CAA8C,CAAC;QAC3D,MAAM,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -115,6 +115,9 @@ export declare function generateResourcesFromEntities(datasources: DatasourcesDe
115
115
  * auto-discovered entities. It loads datasources and pipes from the
116
116
  * include paths and generates Tinybird resources ready to deploy.
117
117
  *
118
+ * Supports both TypeScript files (processed through esbuild) and raw
119
+ * .datasource/.pipe files (included directly).
120
+ *
118
121
  * @param options - Build options with include paths
119
122
  * @returns Build result with generated resources
120
123
  *
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/generator/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/generator/index.ts"],"names":[],"mappings":"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"}
@@ -85,6 +85,9 @@ export function generateResourcesFromEntities(datasources, pipes, connections =
85
85
  * auto-discovered entities. It loads datasources and pipes from the
86
86
  * include paths and generates Tinybird resources ready to deploy.
87
87
  *
88
+ * Supports both TypeScript files (processed through esbuild) and raw
89
+ * .datasource/.pipe files (included directly).
90
+ *
88
91
  * @param options - Build options with include paths
89
92
  * @returns Build result with generated resources
90
93
  *
@@ -107,8 +110,21 @@ export async function buildFromInclude(options) {
107
110
  });
108
111
  // Convert to format for generators
109
112
  const { datasources, pipes, connections } = entitiesToProject(entities);
110
- // Generate resources
113
+ // Generate resources from TypeScript definitions
111
114
  const resources = generateResourcesFromEntities(datasources, pipes, connections);
115
+ // Merge in raw datafiles (loaded directly without processing)
116
+ for (const raw of entities.rawDatasources) {
117
+ resources.datasources.push({
118
+ name: raw.name,
119
+ content: raw.content,
120
+ });
121
+ }
122
+ for (const raw of entities.rawPipes) {
123
+ resources.pipes.push({
124
+ name: raw.name,
125
+ content: raw.content,
126
+ });
127
+ }
112
128
  return {
113
129
  resources,
114
130
  entities,