@tinybirdco/sdk 0.0.41 → 0.0.43

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 (95) hide show
  1. package/LICENSE +7 -0
  2. package/README.md +29 -3
  3. package/dist/api/resources.d.ts +72 -1
  4. package/dist/api/resources.d.ts.map +1 -1
  5. package/dist/api/resources.js +197 -1
  6. package/dist/api/resources.js.map +1 -1
  7. package/dist/api/resources.test.js +82 -1
  8. package/dist/api/resources.test.js.map +1 -1
  9. package/dist/cli/commands/migrate.d.ts +11 -0
  10. package/dist/cli/commands/migrate.d.ts.map +1 -0
  11. package/dist/cli/commands/migrate.js +196 -0
  12. package/dist/cli/commands/migrate.js.map +1 -0
  13. package/dist/cli/commands/migrate.test.d.ts +2 -0
  14. package/dist/cli/commands/migrate.test.d.ts.map +1 -0
  15. package/dist/cli/commands/migrate.test.js +473 -0
  16. package/dist/cli/commands/migrate.test.js.map +1 -0
  17. package/dist/cli/commands/pull.d.ts +59 -0
  18. package/dist/cli/commands/pull.d.ts.map +1 -0
  19. package/dist/cli/commands/pull.js +104 -0
  20. package/dist/cli/commands/pull.js.map +1 -0
  21. package/dist/cli/commands/pull.test.d.ts +2 -0
  22. package/dist/cli/commands/pull.test.d.ts.map +1 -0
  23. package/dist/cli/commands/pull.test.js +140 -0
  24. package/dist/cli/commands/pull.test.js.map +1 -0
  25. package/dist/cli/config.d.ts +10 -0
  26. package/dist/cli/config.d.ts.map +1 -1
  27. package/dist/cli/config.js +22 -0
  28. package/dist/cli/config.js.map +1 -1
  29. package/dist/cli/index.js +77 -0
  30. package/dist/cli/index.js.map +1 -1
  31. package/dist/generator/client.js +2 -2
  32. package/dist/generator/client.js.map +1 -1
  33. package/dist/index.d.ts +1 -1
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +1 -1
  36. package/dist/index.js.map +1 -1
  37. package/dist/migrate/discovery.d.ts +7 -0
  38. package/dist/migrate/discovery.d.ts.map +1 -0
  39. package/dist/migrate/discovery.js +125 -0
  40. package/dist/migrate/discovery.js.map +1 -0
  41. package/dist/migrate/emit-ts.d.ts +4 -0
  42. package/dist/migrate/emit-ts.d.ts.map +1 -0
  43. package/dist/migrate/emit-ts.js +387 -0
  44. package/dist/migrate/emit-ts.js.map +1 -0
  45. package/dist/migrate/parse-connection.d.ts +3 -0
  46. package/dist/migrate/parse-connection.d.ts.map +1 -0
  47. package/dist/migrate/parse-connection.js +74 -0
  48. package/dist/migrate/parse-connection.js.map +1 -0
  49. package/dist/migrate/parse-datasource.d.ts +3 -0
  50. package/dist/migrate/parse-datasource.d.ts.map +1 -0
  51. package/dist/migrate/parse-datasource.js +324 -0
  52. package/dist/migrate/parse-datasource.js.map +1 -0
  53. package/dist/migrate/parse-pipe.d.ts +3 -0
  54. package/dist/migrate/parse-pipe.d.ts.map +1 -0
  55. package/dist/migrate/parse-pipe.js +332 -0
  56. package/dist/migrate/parse-pipe.js.map +1 -0
  57. package/dist/migrate/parse.d.ts +3 -0
  58. package/dist/migrate/parse.d.ts.map +1 -0
  59. package/dist/migrate/parse.js +18 -0
  60. package/dist/migrate/parse.js.map +1 -0
  61. package/dist/migrate/parser-utils.d.ts +20 -0
  62. package/dist/migrate/parser-utils.d.ts.map +1 -0
  63. package/dist/migrate/parser-utils.js +130 -0
  64. package/dist/migrate/parser-utils.js.map +1 -0
  65. package/dist/migrate/types.d.ts +110 -0
  66. package/dist/migrate/types.d.ts.map +1 -0
  67. package/dist/migrate/types.js +2 -0
  68. package/dist/migrate/types.js.map +1 -0
  69. package/dist/schema/project.d.ts +20 -9
  70. package/dist/schema/project.d.ts.map +1 -1
  71. package/dist/schema/project.js +127 -136
  72. package/dist/schema/project.js.map +1 -1
  73. package/dist/schema/project.test.js +22 -0
  74. package/dist/schema/project.test.js.map +1 -1
  75. package/package.json +2 -1
  76. package/src/api/resources.test.ts +121 -0
  77. package/src/api/resources.ts +292 -1
  78. package/src/cli/commands/migrate.test.ts +564 -0
  79. package/src/cli/commands/migrate.ts +240 -0
  80. package/src/cli/commands/pull.test.ts +173 -0
  81. package/src/cli/commands/pull.ts +177 -0
  82. package/src/cli/config.ts +26 -0
  83. package/src/cli/index.ts +112 -0
  84. package/src/generator/client.ts +2 -2
  85. package/src/index.ts +1 -1
  86. package/src/migrate/discovery.ts +151 -0
  87. package/src/migrate/emit-ts.ts +469 -0
  88. package/src/migrate/parse-connection.ts +128 -0
  89. package/src/migrate/parse-datasource.ts +453 -0
  90. package/src/migrate/parse-pipe.ts +518 -0
  91. package/src/migrate/parse.ts +20 -0
  92. package/src/migrate/parser-utils.ts +160 -0
  93. package/src/migrate/types.ts +125 -0
  94. package/src/schema/project.test.ts +28 -0
  95. package/src/schema/project.ts +173 -181
@@ -0,0 +1,387 @@
1
+ import { clickhouseTypeToValidator } from "../codegen/type-mapper.js";
2
+ import { toCamelCase } from "../codegen/utils.js";
3
+ import { parseLiteralFromDatafile, toTsLiteral } from "./parser-utils.js";
4
+ function escapeString(value) {
5
+ return JSON.stringify(value);
6
+ }
7
+ function normalizedBaseType(type) {
8
+ let current = type.trim();
9
+ let updated = true;
10
+ while (updated) {
11
+ updated = false;
12
+ const nullable = current.match(/^Nullable\((.+)\)$/);
13
+ if (nullable?.[1]) {
14
+ current = nullable[1];
15
+ updated = true;
16
+ continue;
17
+ }
18
+ const lowCard = current.match(/^LowCardinality\((.+)\)$/);
19
+ if (lowCard?.[1]) {
20
+ current = lowCard[1];
21
+ updated = true;
22
+ continue;
23
+ }
24
+ }
25
+ return current;
26
+ }
27
+ function isBooleanType(type) {
28
+ const base = normalizedBaseType(type);
29
+ return base === "Bool" || base === "Boolean";
30
+ }
31
+ function strictColumnTypeToValidator(type) {
32
+ const validator = clickhouseTypeToValidator(type);
33
+ if (validator.includes("TODO: Unknown type") || validator.includes("/*")) {
34
+ throw new Error(`Unsupported column type in strict mode: "${type}"`);
35
+ }
36
+ return validator;
37
+ }
38
+ function strictParamBaseValidator(type) {
39
+ const map = {
40
+ String: "p.string()",
41
+ UUID: "p.uuid()",
42
+ Int8: "p.int8()",
43
+ Int16: "p.int16()",
44
+ Int32: "p.int32()",
45
+ Int64: "p.int64()",
46
+ UInt8: "p.uint8()",
47
+ UInt16: "p.uint16()",
48
+ UInt32: "p.uint32()",
49
+ UInt64: "p.uint64()",
50
+ Float32: "p.float32()",
51
+ Float64: "p.float64()",
52
+ Boolean: "p.boolean()",
53
+ Bool: "p.boolean()",
54
+ Date: "p.date()",
55
+ DateTime: "p.dateTime()",
56
+ DateTime64: "p.dateTime64()",
57
+ Array: "p.array(p.string())",
58
+ };
59
+ const validator = map[type];
60
+ if (!validator) {
61
+ throw new Error(`Unsupported parameter type in strict mode: "${type}"`);
62
+ }
63
+ return validator;
64
+ }
65
+ function applyParamOptional(baseValidator, required, defaultValue) {
66
+ const withDefault = defaultValue !== undefined;
67
+ if (!withDefault && required) {
68
+ return baseValidator;
69
+ }
70
+ const optionalSuffix = withDefault
71
+ ? `.optional(${typeof defaultValue === "string" ? JSON.stringify(defaultValue) : defaultValue})`
72
+ : ".optional()";
73
+ if (baseValidator.endsWith(")")) {
74
+ return `${baseValidator}${optionalSuffix}`;
75
+ }
76
+ return `${baseValidator}${optionalSuffix}`;
77
+ }
78
+ function engineFunctionName(type) {
79
+ const map = {
80
+ MergeTree: "mergeTree",
81
+ ReplacingMergeTree: "replacingMergeTree",
82
+ SummingMergeTree: "summingMergeTree",
83
+ AggregatingMergeTree: "aggregatingMergeTree",
84
+ CollapsingMergeTree: "collapsingMergeTree",
85
+ VersionedCollapsingMergeTree: "versionedCollapsingMergeTree",
86
+ };
87
+ const functionName = map[type];
88
+ if (!functionName) {
89
+ throw new Error(`Unsupported engine type in strict mode: "${type}"`);
90
+ }
91
+ return functionName;
92
+ }
93
+ function emitEngineOptions(ds) {
94
+ const options = [];
95
+ const { engine } = ds;
96
+ if (engine.sortingKey.length === 1) {
97
+ options.push(`sortingKey: ${escapeString(engine.sortingKey[0])}`);
98
+ }
99
+ else {
100
+ options.push(`sortingKey: [${engine.sortingKey.map((k) => escapeString(k)).join(", ")}]`);
101
+ }
102
+ if (engine.partitionKey) {
103
+ options.push(`partitionKey: ${escapeString(engine.partitionKey)}`);
104
+ }
105
+ if (engine.primaryKey && engine.primaryKey.length > 0) {
106
+ if (engine.primaryKey.length === 1) {
107
+ options.push(`primaryKey: ${escapeString(engine.primaryKey[0])}`);
108
+ }
109
+ else {
110
+ options.push(`primaryKey: [${engine.primaryKey.map((k) => escapeString(k)).join(", ")}]`);
111
+ }
112
+ }
113
+ if (engine.ttl) {
114
+ options.push(`ttl: ${escapeString(engine.ttl)}`);
115
+ }
116
+ if (engine.ver) {
117
+ options.push(`ver: ${escapeString(engine.ver)}`);
118
+ }
119
+ if (engine.sign) {
120
+ options.push(`sign: ${escapeString(engine.sign)}`);
121
+ }
122
+ if (engine.version) {
123
+ options.push(`version: ${escapeString(engine.version)}`);
124
+ }
125
+ if (engine.summingColumns && engine.summingColumns.length > 0) {
126
+ options.push(`columns: [${engine.summingColumns.map((k) => escapeString(k)).join(", ")}]`);
127
+ }
128
+ if (engine.settings && Object.keys(engine.settings).length > 0) {
129
+ const settingsEntries = Object.entries(engine.settings).map(([k, v]) => {
130
+ if (typeof v === "string") {
131
+ return `${escapeString(k)}: ${escapeString(v)}`;
132
+ }
133
+ return `${escapeString(k)}: ${v}`;
134
+ });
135
+ options.push(`settings: { ${settingsEntries.join(", ")} }`);
136
+ }
137
+ const engineFn = engineFunctionName(engine.type);
138
+ return `engine.${engineFn}({ ${options.join(", ")} })`;
139
+ }
140
+ function emitDatasource(ds) {
141
+ const variableName = toCamelCase(ds.name);
142
+ const lines = [];
143
+ const hasJsonPath = ds.columns.some((column) => column.jsonPath !== undefined);
144
+ const hasMissingJsonPath = ds.columns.some((column) => column.jsonPath === undefined);
145
+ if (hasJsonPath && hasMissingJsonPath) {
146
+ throw new Error(`Datasource "${ds.name}" has mixed json path usage. This is not representable in strict mode.`);
147
+ }
148
+ if (ds.description) {
149
+ lines.push("/**");
150
+ for (const row of ds.description.split("\n")) {
151
+ lines.push(` * ${row}`);
152
+ }
153
+ lines.push(" */");
154
+ }
155
+ lines.push(`export const ${variableName} = defineDatasource(${escapeString(ds.name)}, {`);
156
+ if (ds.description) {
157
+ lines.push(` description: ${escapeString(ds.description)},`);
158
+ }
159
+ if (!hasJsonPath) {
160
+ lines.push(" jsonPaths: false,");
161
+ }
162
+ lines.push(" schema: {");
163
+ for (const column of ds.columns) {
164
+ let validator = strictColumnTypeToValidator(column.type);
165
+ if (column.defaultExpression !== undefined) {
166
+ const parsedDefault = parseLiteralFromDatafile(column.defaultExpression);
167
+ let literalValue = parsedDefault;
168
+ if (typeof parsedDefault === "number" && isBooleanType(column.type)) {
169
+ if (parsedDefault === 0 || parsedDefault === 1) {
170
+ literalValue = parsedDefault === 1;
171
+ }
172
+ else {
173
+ throw new Error(`Boolean default value must be 0 or 1 for column "${column.name}" in datasource "${ds.name}".`);
174
+ }
175
+ }
176
+ validator += `.default(${toTsLiteral(literalValue)})`;
177
+ }
178
+ if (column.codec) {
179
+ validator += `.codec(${escapeString(column.codec)})`;
180
+ }
181
+ if (column.jsonPath) {
182
+ lines.push(` ${column.name}: column(${validator}, { jsonPath: ${escapeString(column.jsonPath)} }),`);
183
+ }
184
+ else {
185
+ lines.push(` ${column.name}: ${validator},`);
186
+ }
187
+ }
188
+ lines.push(" },");
189
+ lines.push(` engine: ${emitEngineOptions(ds)},`);
190
+ if (ds.kafka) {
191
+ const connectionVar = toCamelCase(ds.kafka.connectionName);
192
+ lines.push(" kafka: {");
193
+ lines.push(` connection: ${connectionVar},`);
194
+ lines.push(` topic: ${escapeString(ds.kafka.topic)},`);
195
+ if (ds.kafka.groupId) {
196
+ lines.push(` groupId: ${escapeString(ds.kafka.groupId)},`);
197
+ }
198
+ if (ds.kafka.autoOffsetReset) {
199
+ lines.push(` autoOffsetReset: ${escapeString(ds.kafka.autoOffsetReset)},`);
200
+ }
201
+ lines.push(" },");
202
+ }
203
+ if (ds.forwardQuery) {
204
+ lines.push(" forwardQuery: `");
205
+ lines.push(ds.forwardQuery.replace(/`/g, "\\`").replace(/\${/g, "\\${"));
206
+ lines.push(" `,");
207
+ }
208
+ if (ds.tokens.length > 0) {
209
+ lines.push(" tokens: [");
210
+ for (const token of ds.tokens) {
211
+ lines.push(` { name: ${escapeString(token.name)}, permissions: [${escapeString(token.scope)}] },`);
212
+ }
213
+ lines.push(" ],");
214
+ }
215
+ if (ds.sharedWith.length > 0) {
216
+ lines.push(` sharedWith: [${ds.sharedWith.map((workspace) => escapeString(workspace)).join(", ")}],`);
217
+ }
218
+ lines.push("});");
219
+ lines.push("");
220
+ return lines.join("\n");
221
+ }
222
+ function emitConnection(connection) {
223
+ const variableName = toCamelCase(connection.name);
224
+ const lines = [];
225
+ lines.push(`export const ${variableName} = createKafkaConnection(${escapeString(connection.name)}, {`);
226
+ lines.push(` bootstrapServers: ${escapeString(connection.bootstrapServers)},`);
227
+ if (connection.securityProtocol) {
228
+ lines.push(` securityProtocol: ${escapeString(connection.securityProtocol)},`);
229
+ }
230
+ if (connection.saslMechanism) {
231
+ lines.push(` saslMechanism: ${escapeString(connection.saslMechanism)},`);
232
+ }
233
+ if (connection.key) {
234
+ lines.push(` key: ${escapeString(connection.key)},`);
235
+ }
236
+ if (connection.secret) {
237
+ lines.push(` secret: ${escapeString(connection.secret)},`);
238
+ }
239
+ if (connection.sslCaPem) {
240
+ lines.push(` sslCaPem: ${escapeString(connection.sslCaPem)},`);
241
+ }
242
+ lines.push("});");
243
+ lines.push("");
244
+ return lines.join("\n");
245
+ }
246
+ function emitPipe(pipe) {
247
+ const variableName = toCamelCase(pipe.name);
248
+ const lines = [];
249
+ const endpointOutputColumns = pipe.inferredOutputColumns.length > 0 ? pipe.inferredOutputColumns : ["result"];
250
+ if (pipe.description) {
251
+ lines.push("/**");
252
+ for (const row of pipe.description.split("\n")) {
253
+ lines.push(` * ${row}`);
254
+ }
255
+ lines.push(" */");
256
+ }
257
+ if (pipe.type === "materialized") {
258
+ lines.push(`export const ${variableName} = defineMaterializedView(${escapeString(pipe.name)}, {`);
259
+ }
260
+ else if (pipe.type === "copy") {
261
+ lines.push(`export const ${variableName} = defineCopyPipe(${escapeString(pipe.name)}, {`);
262
+ }
263
+ else {
264
+ lines.push(`export const ${variableName} = definePipe(${escapeString(pipe.name)}, {`);
265
+ }
266
+ if (pipe.description) {
267
+ lines.push(` description: ${escapeString(pipe.description)},`);
268
+ }
269
+ if (pipe.type === "pipe" || pipe.type === "endpoint") {
270
+ if (pipe.params.length > 0) {
271
+ lines.push(" params: {");
272
+ for (const param of pipe.params) {
273
+ const baseValidator = strictParamBaseValidator(param.type);
274
+ const validator = applyParamOptional(baseValidator, param.required, param.defaultValue);
275
+ lines.push(` ${param.name}: ${validator},`);
276
+ }
277
+ lines.push(" },");
278
+ }
279
+ }
280
+ if (pipe.type === "materialized") {
281
+ lines.push(` datasource: ${toCamelCase(pipe.materializedDatasource ?? "")},`);
282
+ if (pipe.deploymentMethod) {
283
+ lines.push(` deploymentMethod: ${escapeString(pipe.deploymentMethod)},`);
284
+ }
285
+ }
286
+ if (pipe.type === "copy") {
287
+ lines.push(` datasource: ${toCamelCase(pipe.copyTargetDatasource ?? "")},`);
288
+ if (pipe.copyMode) {
289
+ lines.push(` copy_mode: ${escapeString(pipe.copyMode)},`);
290
+ }
291
+ if (pipe.copySchedule) {
292
+ lines.push(` copy_schedule: ${escapeString(pipe.copySchedule)},`);
293
+ }
294
+ }
295
+ lines.push(" nodes: [");
296
+ for (const node of pipe.nodes) {
297
+ lines.push(" node({");
298
+ lines.push(` name: ${escapeString(node.name)},`);
299
+ if (node.description) {
300
+ lines.push(` description: ${escapeString(node.description)},`);
301
+ }
302
+ lines.push(" sql: `");
303
+ lines.push(node.sql.replace(/`/g, "\\`").replace(/\${/g, "\\${"));
304
+ lines.push(" `,");
305
+ lines.push(" }),");
306
+ }
307
+ lines.push(" ],");
308
+ if (pipe.type === "endpoint") {
309
+ if (pipe.cacheTtl !== undefined) {
310
+ lines.push(` endpoint: { enabled: true, cache: { enabled: true, ttl: ${pipe.cacheTtl} } },`);
311
+ }
312
+ else {
313
+ lines.push(" endpoint: true,");
314
+ }
315
+ lines.push(" output: {");
316
+ for (const columnName of endpointOutputColumns) {
317
+ lines.push(` ${columnName}: t.string(),`);
318
+ }
319
+ lines.push(" },");
320
+ }
321
+ if (pipe.tokens.length > 0) {
322
+ lines.push(" tokens: [");
323
+ for (const token of pipe.tokens) {
324
+ lines.push(` { name: ${escapeString(token.name)} },`);
325
+ }
326
+ lines.push(" ],");
327
+ }
328
+ lines.push("});");
329
+ lines.push("");
330
+ return lines.join("\n");
331
+ }
332
+ export function emitMigrationFileContent(resources) {
333
+ const connections = resources.filter((resource) => resource.kind === "connection");
334
+ const datasources = resources.filter((resource) => resource.kind === "datasource");
335
+ const pipes = resources.filter((resource) => resource.kind === "pipe");
336
+ const needsColumn = datasources.some((ds) => ds.columns.some((column) => column.jsonPath !== undefined));
337
+ const needsParams = pipes.some((pipe) => pipe.params.length > 0);
338
+ const imports = new Set(["createKafkaConnection", "defineDatasource", "definePipe", "defineMaterializedView", "defineCopyPipe", "node", "t", "engine"]);
339
+ if (needsColumn) {
340
+ imports.add("column");
341
+ }
342
+ if (needsParams) {
343
+ imports.add("p");
344
+ }
345
+ const lines = [];
346
+ lines.push("/**");
347
+ lines.push(" * Generated by tinybird migrate.");
348
+ lines.push(" * Review endpoint output schemas and any defaults before production use.");
349
+ lines.push(" */");
350
+ lines.push("");
351
+ lines.push(`import { ${Array.from(imports).join(", ")} } from "@tinybirdco/sdk";`);
352
+ lines.push("");
353
+ if (connections.length > 0) {
354
+ lines.push("// Connections");
355
+ lines.push("");
356
+ for (const connection of connections) {
357
+ lines.push(emitConnection(connection));
358
+ }
359
+ }
360
+ if (datasources.length > 0) {
361
+ lines.push("// Datasources");
362
+ lines.push("");
363
+ for (const datasource of datasources) {
364
+ lines.push(emitDatasource(datasource));
365
+ }
366
+ }
367
+ if (pipes.length > 0) {
368
+ lines.push("// Pipes");
369
+ lines.push("");
370
+ for (const pipe of pipes) {
371
+ lines.push(emitPipe(pipe));
372
+ }
373
+ }
374
+ return lines.join("\n").trimEnd() + "\n";
375
+ }
376
+ export function validateResourceForEmission(resource) {
377
+ if (resource.kind === "connection") {
378
+ emitConnection(resource);
379
+ return;
380
+ }
381
+ if (resource.kind === "datasource") {
382
+ emitDatasource(resource);
383
+ return;
384
+ }
385
+ emitPipe(resource);
386
+ }
387
+ //# sourceMappingURL=emit-ts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emit-ts.js","sourceRoot":"","sources":["../../src/migrate/emit-ts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { KafkaConnectionModel, ResourceFile } from "./types.js";
2
+ export declare function parseConnectionFile(resource: ResourceFile): KafkaConnectionModel;
3
+ //# sourceMappingURL=parse-connection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-connection.d.ts","sourceRoot":"","sources":["../../src/migrate/parse-connection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAQrE,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,YAAY,GAAG,oBAAoB,CAsHhF"}
@@ -0,0 +1,74 @@
1
+ import { MigrationParseError, isBlank, parseDirectiveLine, splitLines, } from "./parser-utils.js";
2
+ export function parseConnectionFile(resource) {
3
+ const lines = splitLines(resource.content);
4
+ let connectionType;
5
+ let bootstrapServers;
6
+ let securityProtocol;
7
+ let saslMechanism;
8
+ let key;
9
+ let secret;
10
+ let sslCaPem;
11
+ for (const rawLine of lines) {
12
+ const line = rawLine.trim();
13
+ if (isBlank(line)) {
14
+ continue;
15
+ }
16
+ const { key: directive, value } = parseDirectiveLine(line);
17
+ switch (directive) {
18
+ case "TYPE":
19
+ connectionType = value;
20
+ break;
21
+ case "KAFKA_BOOTSTRAP_SERVERS":
22
+ bootstrapServers = value;
23
+ break;
24
+ case "KAFKA_SECURITY_PROTOCOL":
25
+ if (value !== "SASL_SSL" && value !== "PLAINTEXT" && value !== "SASL_PLAINTEXT") {
26
+ throw new MigrationParseError(resource.filePath, "connection", resource.name, `Unsupported KAFKA_SECURITY_PROTOCOL: "${value}"`);
27
+ }
28
+ securityProtocol = value;
29
+ break;
30
+ case "KAFKA_SASL_MECHANISM":
31
+ if (value !== "PLAIN" &&
32
+ value !== "SCRAM-SHA-256" &&
33
+ value !== "SCRAM-SHA-512" &&
34
+ value !== "OAUTHBEARER") {
35
+ throw new MigrationParseError(resource.filePath, "connection", resource.name, `Unsupported KAFKA_SASL_MECHANISM: "${value}"`);
36
+ }
37
+ saslMechanism = value;
38
+ break;
39
+ case "KAFKA_KEY":
40
+ key = value;
41
+ break;
42
+ case "KAFKA_SECRET":
43
+ secret = value;
44
+ break;
45
+ case "KAFKA_SSL_CA_PEM":
46
+ sslCaPem = value;
47
+ break;
48
+ default:
49
+ throw new MigrationParseError(resource.filePath, "connection", resource.name, `Unsupported connection directive in strict mode: "${line}"`);
50
+ }
51
+ }
52
+ if (!connectionType) {
53
+ throw new MigrationParseError(resource.filePath, "connection", resource.name, "TYPE directive is required.");
54
+ }
55
+ if (connectionType !== "kafka") {
56
+ throw new MigrationParseError(resource.filePath, "connection", resource.name, `Unsupported connection type in strict mode: "${connectionType}"`);
57
+ }
58
+ if (!bootstrapServers) {
59
+ throw new MigrationParseError(resource.filePath, "connection", resource.name, "KAFKA_BOOTSTRAP_SERVERS is required for kafka connections.");
60
+ }
61
+ return {
62
+ kind: "connection",
63
+ name: resource.name,
64
+ filePath: resource.filePath,
65
+ connectionType: "kafka",
66
+ bootstrapServers,
67
+ securityProtocol,
68
+ saslMechanism,
69
+ key,
70
+ secret,
71
+ sslCaPem,
72
+ };
73
+ }
74
+ //# sourceMappingURL=parse-connection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-connection.js","sourceRoot":"","sources":["../../src/migrate/parse-connection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { DatasourceModel, ResourceFile } from "./types.js";
2
+ export declare function parseDatasourceFile(resource: ResourceFile): DatasourceModel;
3
+ //# sourceMappingURL=parse-datasource.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-datasource.d.ts","sourceRoot":"","sources":["../../src/migrate/parse-datasource.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAwB,YAAY,EAAE,MAAM,YAAY,CAAC;AAmNtF,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,YAAY,GAAG,eAAe,CAgP3E"}