@tinybirdco/sdk 0.0.43 → 0.0.45
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.
- package/README.md +53 -0
- package/dist/cli/commands/init.js +2 -2
- package/dist/cli/commands/init.test.js +1 -1
- package/dist/cli/commands/init.test.js.map +1 -1
- package/dist/cli/commands/migrate.d.ts.map +1 -1
- package/dist/cli/commands/migrate.js +4 -3
- package/dist/cli/commands/migrate.js.map +1 -1
- package/dist/cli/commands/migrate.test.js +42 -4
- package/dist/cli/commands/migrate.test.js.map +1 -1
- package/dist/client/preview.js +1 -1
- package/dist/client/preview.js.map +1 -1
- package/dist/codegen/index.js +4 -4
- package/dist/codegen/index.js.map +1 -1
- package/dist/codegen/index.test.js +3 -3
- package/dist/codegen/index.test.js.map +1 -1
- package/dist/generator/client.js +1 -1
- package/dist/generator/connection.d.ts +1 -1
- package/dist/generator/connection.d.ts.map +1 -1
- package/dist/generator/connection.js +25 -2
- package/dist/generator/connection.js.map +1 -1
- package/dist/generator/connection.test.js +37 -14
- package/dist/generator/connection.test.js.map +1 -1
- package/dist/generator/datasource.d.ts.map +1 -1
- package/dist/generator/datasource.js +23 -0
- package/dist/generator/datasource.js.map +1 -1
- package/dist/generator/datasource.test.js +49 -5
- package/dist/generator/datasource.test.js.map +1 -1
- package/dist/index.d.ts +5 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/index.test.d.ts +2 -0
- package/dist/index.test.d.ts.map +1 -0
- package/dist/index.test.js +12 -0
- package/dist/index.test.js.map +1 -0
- package/dist/migrate/emit-ts.d.ts.map +1 -1
- package/dist/migrate/emit-ts.js +69 -13
- package/dist/migrate/emit-ts.js.map +1 -1
- package/dist/migrate/parse-connection.d.ts +2 -2
- package/dist/migrate/parse-connection.d.ts.map +1 -1
- package/dist/migrate/parse-connection.js +61 -18
- package/dist/migrate/parse-connection.js.map +1 -1
- package/dist/migrate/parse-datasource.d.ts.map +1 -1
- package/dist/migrate/parse-datasource.js +31 -0
- package/dist/migrate/parse-datasource.js.map +1 -1
- package/dist/migrate/types.d.ts +18 -1
- package/dist/migrate/types.d.ts.map +1 -1
- package/dist/schema/connection.d.ts +49 -6
- package/dist/schema/connection.d.ts.map +1 -1
- package/dist/schema/connection.js +44 -9
- package/dist/schema/connection.js.map +1 -1
- package/dist/schema/connection.test.js +72 -17
- package/dist/schema/connection.test.js.map +1 -1
- package/dist/schema/datasource.d.ts +16 -1
- package/dist/schema/datasource.d.ts.map +1 -1
- package/dist/schema/datasource.js +3 -0
- package/dist/schema/datasource.js.map +1 -1
- package/dist/schema/datasource.test.js +21 -0
- package/dist/schema/datasource.test.js.map +1 -1
- package/package.json +1 -1
- package/src/cli/commands/init.test.ts +1 -1
- package/src/cli/commands/init.ts +2 -2
- package/src/cli/commands/migrate.test.ts +58 -4
- package/src/cli/commands/migrate.ts +6 -4
- package/src/client/preview.ts +1 -1
- package/src/codegen/index.test.ts +3 -3
- package/src/codegen/index.ts +4 -4
- package/src/generator/client.ts +1 -1
- package/src/generator/connection.test.ts +45 -14
- package/src/generator/connection.ts +30 -2
- package/src/generator/datasource.test.ts +57 -5
- package/src/generator/datasource.ts +38 -1
- package/src/index.test.ts +13 -0
- package/src/index.ts +21 -4
- package/src/migrate/emit-ts.ts +80 -16
- package/src/migrate/parse-connection.ts +108 -30
- package/src/migrate/parse-datasource.ts +46 -1
- package/src/migrate/types.ts +24 -2
- package/src/schema/connection.test.ts +92 -17
- package/src/schema/connection.ts +86 -10
- package/src/schema/datasource.test.ts +25 -0
- package/src/schema/datasource.ts +21 -1
|
@@ -1,12 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Connection definition for Tinybird
|
|
3
|
-
* Define external connections (Kafka, etc.) as TypeScript with full type safety
|
|
3
|
+
* Define external connections (Kafka, S3, etc.) as TypeScript with full type safety
|
|
4
4
|
*/
|
|
5
5
|
// Symbol for brand typing - use Symbol.for() for global registry
|
|
6
6
|
// This ensures the same symbol is used across module instances
|
|
7
7
|
const CONNECTION_BRAND = Symbol.for("tinybird.connection");
|
|
8
|
+
function validateConnectionName(name) {
|
|
9
|
+
if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(name)) {
|
|
10
|
+
throw new Error(`Invalid connection name: "${name}". Must start with a letter or underscore and contain only alphanumeric characters and underscores.`);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
8
13
|
/**
|
|
9
|
-
*
|
|
14
|
+
* Define a Kafka connection
|
|
10
15
|
*
|
|
11
16
|
* @param name - The connection name (must be valid identifier)
|
|
12
17
|
* @param options - Kafka connection configuration
|
|
@@ -14,9 +19,9 @@ const CONNECTION_BRAND = Symbol.for("tinybird.connection");
|
|
|
14
19
|
*
|
|
15
20
|
* @example
|
|
16
21
|
* ```ts
|
|
17
|
-
* import {
|
|
22
|
+
* import { defineKafkaConnection } from '@tinybirdco/sdk';
|
|
18
23
|
*
|
|
19
|
-
* export const myKafka =
|
|
24
|
+
* export const myKafka = defineKafkaConnection('my_kafka', {
|
|
20
25
|
* bootstrapServers: 'kafka.example.com:9092',
|
|
21
26
|
* securityProtocol: 'SASL_SSL',
|
|
22
27
|
* saslMechanism: 'PLAIN',
|
|
@@ -25,11 +30,8 @@ const CONNECTION_BRAND = Symbol.for("tinybird.connection");
|
|
|
25
30
|
* });
|
|
26
31
|
* ```
|
|
27
32
|
*/
|
|
28
|
-
export function
|
|
29
|
-
|
|
30
|
-
if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(name)) {
|
|
31
|
-
throw new Error(`Invalid connection name: "${name}". Must start with a letter or underscore and contain only alphanumeric characters and underscores.`);
|
|
32
|
-
}
|
|
33
|
+
export function defineKafkaConnection(name, options) {
|
|
34
|
+
validateConnectionName(name);
|
|
33
35
|
return {
|
|
34
36
|
[CONNECTION_BRAND]: true,
|
|
35
37
|
_name: name,
|
|
@@ -38,6 +40,33 @@ export function createKafkaConnection(name, options) {
|
|
|
38
40
|
options,
|
|
39
41
|
};
|
|
40
42
|
}
|
|
43
|
+
/**
|
|
44
|
+
* @deprecated Use defineKafkaConnection instead.
|
|
45
|
+
*/
|
|
46
|
+
export const createKafkaConnection = defineKafkaConnection;
|
|
47
|
+
/**
|
|
48
|
+
* Define an S3 connection
|
|
49
|
+
*
|
|
50
|
+
* @param name - The connection name (must be valid identifier)
|
|
51
|
+
* @param options - S3 connection configuration
|
|
52
|
+
* @returns A connection definition that can be used in a project
|
|
53
|
+
*/
|
|
54
|
+
export function defineS3Connection(name, options) {
|
|
55
|
+
validateConnectionName(name);
|
|
56
|
+
if (!options.arn && !(options.accessKey && options.secret)) {
|
|
57
|
+
throw new Error("S3 connection requires either `arn` or both `accessKey` and `secret`.");
|
|
58
|
+
}
|
|
59
|
+
if ((options.accessKey && !options.secret) || (!options.accessKey && options.secret)) {
|
|
60
|
+
throw new Error("S3 connection `accessKey` and `secret` must be provided together.");
|
|
61
|
+
}
|
|
62
|
+
return {
|
|
63
|
+
[CONNECTION_BRAND]: true,
|
|
64
|
+
_name: name,
|
|
65
|
+
_type: "connection",
|
|
66
|
+
_connectionType: "s3",
|
|
67
|
+
options,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
41
70
|
/**
|
|
42
71
|
* Check if a value is a connection definition
|
|
43
72
|
*/
|
|
@@ -53,6 +82,12 @@ export function isConnectionDefinition(value) {
|
|
|
53
82
|
export function isKafkaConnectionDefinition(value) {
|
|
54
83
|
return isConnectionDefinition(value) && value._connectionType === "kafka";
|
|
55
84
|
}
|
|
85
|
+
/**
|
|
86
|
+
* Check if a value is an S3 connection definition
|
|
87
|
+
*/
|
|
88
|
+
export function isS3ConnectionDefinition(value) {
|
|
89
|
+
return isConnectionDefinition(value) && value._connectionType === "s3";
|
|
90
|
+
}
|
|
56
91
|
/**
|
|
57
92
|
* Get the connection type from a connection definition
|
|
58
93
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/schema/connection.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,iEAAiE;AACjE,+DAA+D;AAC/D,MAAM,gBAAgB,GAAG,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/schema/connection.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,iEAAiE;AACjE,+DAA+D;AAC/D,MAAM,gBAAgB,GAAG,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;AA+E3D,SAAS,sBAAsB,CAAC,IAAY;IAC1C,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CACb,6BAA6B,IAAI,qGAAqG,CACvI,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,qBAAqB,CACnC,IAAY,EACZ,OAA+B;IAE/B,sBAAsB,CAAC,IAAI,CAAC,CAAC;IAE7B,OAAO;QACL,CAAC,gBAAgB,CAAC,EAAE,IAAI;QACxB,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,YAAY;QACnB,eAAe,EAAE,OAAO;QACxB,OAAO;KACR,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,qBAAqB,CAAC;AAE3D;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAChC,IAAY,EACZ,OAA4B;IAE5B,sBAAsB,CAAC,IAAI,CAAC,CAAC;IAE7B,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3D,MAAM,IAAI,KAAK,CACb,uEAAuE,CACxE,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACrF,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;IACvF,CAAC;IAED,OAAO;QACL,CAAC,gBAAgB,CAAC,EAAE,IAAI;QACxB,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,YAAY;QACnB,eAAe,EAAE,IAAI;QACrB,OAAO;KACR,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACnD,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,gBAAgB,IAAI,KAAK;QACxB,KAAiC,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAC9D,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,2BAA2B,CAAC,KAAc;IACxD,OAAO,sBAAsB,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,eAAe,KAAK,OAAO,CAAC;AAC5E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,KAAc;IACrD,OAAO,sBAAsB,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,eAAe,KAAK,IAAI,CAAC;AACzE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAC/B,UAAa;IAEb,OAAO,UAAU,CAAC,eAAe,CAAC;AACpC,CAAC"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { describe, it, expect } from "vitest";
|
|
2
|
-
import {
|
|
2
|
+
import { defineKafkaConnection, defineS3Connection, isConnectionDefinition, isKafkaConnectionDefinition, isS3ConnectionDefinition, getConnectionType, } from "./connection.js";
|
|
3
3
|
describe("Connection Schema", () => {
|
|
4
|
-
describe("
|
|
4
|
+
describe("defineKafkaConnection", () => {
|
|
5
5
|
it("creates a Kafka connection with required fields", () => {
|
|
6
|
-
const conn =
|
|
6
|
+
const conn = defineKafkaConnection("my_kafka", {
|
|
7
7
|
bootstrapServers: "kafka.example.com:9092",
|
|
8
8
|
});
|
|
9
9
|
expect(conn._name).toBe("my_kafka");
|
|
@@ -12,7 +12,7 @@ describe("Connection Schema", () => {
|
|
|
12
12
|
expect(conn.options.bootstrapServers).toBe("kafka.example.com:9092");
|
|
13
13
|
});
|
|
14
14
|
it("creates a Kafka connection with all options", () => {
|
|
15
|
-
const conn =
|
|
15
|
+
const conn = defineKafkaConnection("my_kafka", {
|
|
16
16
|
bootstrapServers: "kafka.example.com:9092",
|
|
17
17
|
securityProtocol: "SASL_SSL",
|
|
18
18
|
saslMechanism: "PLAIN",
|
|
@@ -27,59 +27,94 @@ describe("Connection Schema", () => {
|
|
|
27
27
|
expect(conn.options.sslCaPem).toBe('{{ tb_secret("KAFKA_CA_CERT") }}');
|
|
28
28
|
});
|
|
29
29
|
it("supports different SASL mechanisms", () => {
|
|
30
|
-
const scramConn =
|
|
30
|
+
const scramConn = defineKafkaConnection("scram_kafka", {
|
|
31
31
|
bootstrapServers: "kafka.example.com:9092",
|
|
32
32
|
saslMechanism: "SCRAM-SHA-256",
|
|
33
33
|
});
|
|
34
34
|
expect(scramConn.options.saslMechanism).toBe("SCRAM-SHA-256");
|
|
35
|
-
const scram512Conn =
|
|
35
|
+
const scram512Conn = defineKafkaConnection("scram512_kafka", {
|
|
36
36
|
bootstrapServers: "kafka.example.com:9092",
|
|
37
37
|
saslMechanism: "SCRAM-SHA-512",
|
|
38
38
|
});
|
|
39
39
|
expect(scram512Conn.options.saslMechanism).toBe("SCRAM-SHA-512");
|
|
40
|
-
const oauthConn =
|
|
40
|
+
const oauthConn = defineKafkaConnection("oauth_kafka", {
|
|
41
41
|
bootstrapServers: "kafka.example.com:9092",
|
|
42
42
|
saslMechanism: "OAUTHBEARER",
|
|
43
43
|
});
|
|
44
44
|
expect(oauthConn.options.saslMechanism).toBe("OAUTHBEARER");
|
|
45
45
|
});
|
|
46
46
|
it("supports different security protocols", () => {
|
|
47
|
-
const plaintext =
|
|
47
|
+
const plaintext = defineKafkaConnection("plaintext_kafka", {
|
|
48
48
|
bootstrapServers: "localhost:9092",
|
|
49
49
|
securityProtocol: "PLAINTEXT",
|
|
50
50
|
});
|
|
51
51
|
expect(plaintext.options.securityProtocol).toBe("PLAINTEXT");
|
|
52
|
-
const saslPlaintext =
|
|
52
|
+
const saslPlaintext = defineKafkaConnection("sasl_plaintext_kafka", {
|
|
53
53
|
bootstrapServers: "localhost:9092",
|
|
54
54
|
securityProtocol: "SASL_PLAINTEXT",
|
|
55
55
|
});
|
|
56
56
|
expect(saslPlaintext.options.securityProtocol).toBe("SASL_PLAINTEXT");
|
|
57
57
|
});
|
|
58
58
|
it("throws error for invalid connection name", () => {
|
|
59
|
-
expect(() =>
|
|
59
|
+
expect(() => defineKafkaConnection("123invalid", {
|
|
60
60
|
bootstrapServers: "kafka.example.com:9092",
|
|
61
61
|
})).toThrow("Invalid connection name");
|
|
62
|
-
expect(() =>
|
|
62
|
+
expect(() => defineKafkaConnection("my-connection", {
|
|
63
63
|
bootstrapServers: "kafka.example.com:9092",
|
|
64
64
|
})).toThrow("Invalid connection name");
|
|
65
|
-
expect(() =>
|
|
65
|
+
expect(() => defineKafkaConnection("", {
|
|
66
66
|
bootstrapServers: "kafka.example.com:9092",
|
|
67
67
|
})).toThrow("Invalid connection name");
|
|
68
68
|
});
|
|
69
69
|
it("allows valid naming patterns", () => {
|
|
70
|
-
const conn1 =
|
|
70
|
+
const conn1 = defineKafkaConnection("_private_kafka", {
|
|
71
71
|
bootstrapServers: "kafka.example.com:9092",
|
|
72
72
|
});
|
|
73
73
|
expect(conn1._name).toBe("_private_kafka");
|
|
74
|
-
const conn2 =
|
|
74
|
+
const conn2 = defineKafkaConnection("kafka_v2", {
|
|
75
75
|
bootstrapServers: "kafka.example.com:9092",
|
|
76
76
|
});
|
|
77
77
|
expect(conn2._name).toBe("kafka_v2");
|
|
78
78
|
});
|
|
79
79
|
});
|
|
80
|
+
describe("defineS3Connection", () => {
|
|
81
|
+
it("creates an S3 connection with IAM role auth", () => {
|
|
82
|
+
const conn = defineS3Connection("my_s3", {
|
|
83
|
+
region: "us-east-1",
|
|
84
|
+
arn: "arn:aws:iam::123456789012:role/tinybird-s3-access",
|
|
85
|
+
});
|
|
86
|
+
expect(conn._name).toBe("my_s3");
|
|
87
|
+
expect(conn._type).toBe("connection");
|
|
88
|
+
expect(conn._connectionType).toBe("s3");
|
|
89
|
+
expect(conn.options.region).toBe("us-east-1");
|
|
90
|
+
expect(conn.options.arn).toBe("arn:aws:iam::123456789012:role/tinybird-s3-access");
|
|
91
|
+
});
|
|
92
|
+
it("creates an S3 connection with access key auth", () => {
|
|
93
|
+
const conn = defineS3Connection("my_s3", {
|
|
94
|
+
region: "us-east-1",
|
|
95
|
+
accessKey: '{{ tb_secret("S3_ACCESS_KEY") }}',
|
|
96
|
+
secret: '{{ tb_secret("S3_SECRET") }}',
|
|
97
|
+
});
|
|
98
|
+
expect(conn.options.accessKey).toBe('{{ tb_secret("S3_ACCESS_KEY") }}');
|
|
99
|
+
expect(conn.options.secret).toBe('{{ tb_secret("S3_SECRET") }}');
|
|
100
|
+
});
|
|
101
|
+
it("throws when auth config is incomplete", () => {
|
|
102
|
+
expect(() => defineS3Connection("my_s3", {
|
|
103
|
+
region: "us-east-1",
|
|
104
|
+
})).toThrow("S3 connection requires either `arn` or both `accessKey` and `secret`.");
|
|
105
|
+
expect(() => defineS3Connection("my_s3", {
|
|
106
|
+
region: "us-east-1",
|
|
107
|
+
accessKey: "key-only",
|
|
108
|
+
})).toThrow("S3 connection requires either `arn` or both `accessKey` and `secret`.");
|
|
109
|
+
expect(() => defineS3Connection("my_s3", {
|
|
110
|
+
region: "us-east-1",
|
|
111
|
+
secret: "secret-only",
|
|
112
|
+
})).toThrow("S3 connection requires either `arn` or both `accessKey` and `secret`.");
|
|
113
|
+
});
|
|
114
|
+
});
|
|
80
115
|
describe("isConnectionDefinition", () => {
|
|
81
116
|
it("returns true for valid connection", () => {
|
|
82
|
-
const conn =
|
|
117
|
+
const conn = defineKafkaConnection("my_kafka", {
|
|
83
118
|
bootstrapServers: "kafka.example.com:9092",
|
|
84
119
|
});
|
|
85
120
|
expect(isConnectionDefinition(conn)).toBe(true);
|
|
@@ -95,7 +130,7 @@ describe("Connection Schema", () => {
|
|
|
95
130
|
});
|
|
96
131
|
describe("isKafkaConnectionDefinition", () => {
|
|
97
132
|
it("returns true for Kafka connection", () => {
|
|
98
|
-
const conn =
|
|
133
|
+
const conn = defineKafkaConnection("my_kafka", {
|
|
99
134
|
bootstrapServers: "kafka.example.com:9092",
|
|
100
135
|
});
|
|
101
136
|
expect(isKafkaConnectionDefinition(conn)).toBe(true);
|
|
@@ -105,13 +140,33 @@ describe("Connection Schema", () => {
|
|
|
105
140
|
expect(isKafkaConnectionDefinition(null)).toBe(false);
|
|
106
141
|
});
|
|
107
142
|
});
|
|
143
|
+
describe("isS3ConnectionDefinition", () => {
|
|
144
|
+
it("returns true for S3 connection", () => {
|
|
145
|
+
const conn = defineS3Connection("my_s3", {
|
|
146
|
+
region: "us-east-1",
|
|
147
|
+
arn: "arn:aws:iam::123456789012:role/tinybird-s3-access",
|
|
148
|
+
});
|
|
149
|
+
expect(isS3ConnectionDefinition(conn)).toBe(true);
|
|
150
|
+
});
|
|
151
|
+
it("returns false for non-S3 objects", () => {
|
|
152
|
+
expect(isS3ConnectionDefinition({})).toBe(false);
|
|
153
|
+
expect(isS3ConnectionDefinition(null)).toBe(false);
|
|
154
|
+
});
|
|
155
|
+
});
|
|
108
156
|
describe("getConnectionType", () => {
|
|
109
157
|
it("returns the connection type", () => {
|
|
110
|
-
const conn =
|
|
158
|
+
const conn = defineKafkaConnection("my_kafka", {
|
|
111
159
|
bootstrapServers: "kafka.example.com:9092",
|
|
112
160
|
});
|
|
113
161
|
expect(getConnectionType(conn)).toBe("kafka");
|
|
114
162
|
});
|
|
163
|
+
it("returns the s3 connection type", () => {
|
|
164
|
+
const conn = defineS3Connection("my_s3", {
|
|
165
|
+
region: "us-east-1",
|
|
166
|
+
arn: "arn:aws:iam::123456789012:role/tinybird-s3-access",
|
|
167
|
+
});
|
|
168
|
+
expect(getConnectionType(conn)).toBe("s3");
|
|
169
|
+
});
|
|
115
170
|
});
|
|
116
171
|
});
|
|
117
172
|
//# sourceMappingURL=connection.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection.test.js","sourceRoot":"","sources":["../../src/schema/connection.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"connection.test.js","sourceRoot":"","sources":["../../src/schema/connection.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,sBAAsB,EACtB,2BAA2B,EAC3B,wBAAwB,EACxB,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AAEzB,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;QACrC,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;YACzD,MAAM,IAAI,GAAG,qBAAqB,CAAC,UAAU,EAAE;gBAC7C,gBAAgB,EAAE,wBAAwB;aAC3C,CAAC,CAAC;YAEH,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACpC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACtC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC3C,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACvE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;YACrD,MAAM,IAAI,GAAG,qBAAqB,CAAC,UAAU,EAAE;gBAC7C,gBAAgB,EAAE,wBAAwB;gBAC1C,gBAAgB,EAAE,UAAU;gBAC5B,aAAa,EAAE,OAAO;gBACtB,GAAG,EAAE,8BAA8B;gBACnC,MAAM,EAAE,iCAAiC;gBACzC,QAAQ,EAAE,kCAAkC;aAC7C,CAAC,CAAC;YAEH,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACvD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACjD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;YAC9D,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;YACpE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;QACzE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;YAC5C,MAAM,SAAS,GAAG,qBAAqB,CAAC,aAAa,EAAE;gBACrD,gBAAgB,EAAE,wBAAwB;gBAC1C,aAAa,EAAE,eAAe;aAC/B,CAAC,CAAC;YACH,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAE9D,MAAM,YAAY,GAAG,qBAAqB,CAAC,gBAAgB,EAAE;gBAC3D,gBAAgB,EAAE,wBAAwB;gBAC1C,aAAa,EAAE,eAAe;aAC/B,CAAC,CAAC;YACH,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAEjE,MAAM,SAAS,GAAG,qBAAqB,CAAC,aAAa,EAAE;gBACrD,gBAAgB,EAAE,wBAAwB;gBAC1C,aAAa,EAAE,aAAa;aAC7B,CAAC,CAAC;YACH,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;YAC/C,MAAM,SAAS,GAAG,qBAAqB,CAAC,iBAAiB,EAAE;gBACzD,gBAAgB,EAAE,gBAAgB;gBAClC,gBAAgB,EAAE,WAAW;aAC9B,CAAC,CAAC;YACH,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAE7D,MAAM,aAAa,GAAG,qBAAqB,CAAC,sBAAsB,EAAE;gBAClE,gBAAgB,EAAE,gBAAgB;gBAClC,gBAAgB,EAAE,gBAAgB;aACnC,CAAC,CAAC;YACH,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACxE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,CAAC,GAAG,EAAE,CACV,qBAAqB,CAAC,YAAY,EAAE;gBAClC,gBAAgB,EAAE,wBAAwB;aAC3C,CAAC,CACH,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;YAErC,MAAM,CAAC,GAAG,EAAE,CACV,qBAAqB,CAAC,eAAe,EAAE;gBACrC,gBAAgB,EAAE,wBAAwB;aAC3C,CAAC,CACH,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;YAErC,MAAM,CAAC,GAAG,EAAE,CACV,qBAAqB,CAAC,EAAE,EAAE;gBACxB,gBAAgB,EAAE,wBAAwB;aAC3C,CAAC,CACH,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;YACtC,MAAM,KAAK,GAAG,qBAAqB,CAAC,gBAAgB,EAAE;gBACpD,gBAAgB,EAAE,wBAAwB;aAC3C,CAAC,CAAC;YACH,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAE3C,MAAM,KAAK,GAAG,qBAAqB,CAAC,UAAU,EAAE;gBAC9C,gBAAgB,EAAE,wBAAwB;aAC3C,CAAC,CAAC;YACH,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAClC,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;YACrD,MAAM,IAAI,GAAG,kBAAkB,CAAC,OAAO,EAAE;gBACvC,MAAM,EAAE,WAAW;gBACnB,GAAG,EAAE,mDAAmD;aACzD,CAAC,CAAC;YAEH,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACjC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACtC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC9C,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;QACrF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;YACvD,MAAM,IAAI,GAAG,kBAAkB,CAAC,OAAO,EAAE;gBACvC,MAAM,EAAE,WAAW;gBACnB,SAAS,EAAE,kCAAkC;gBAC7C,MAAM,EAAE,8BAA8B;aACvC,CAAC,CAAC;YAEH,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;YACxE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;YAC/C,MAAM,CAAC,GAAG,EAAE,CACV,kBAAkB,CAAC,OAAO,EAAE;gBAC1B,MAAM,EAAE,WAAW;aACpB,CAAC,CACH,CAAC,OAAO,CAAC,uEAAuE,CAAC,CAAC;YAEnF,MAAM,CAAC,GAAG,EAAE,CACV,kBAAkB,CAAC,OAAO,EAAE;gBAC1B,MAAM,EAAE,WAAW;gBACnB,SAAS,EAAE,UAAU;aACtB,CAAC,CACH,CAAC,OAAO,CAAC,uEAAuE,CAAC,CAAC;YAEnF,MAAM,CAAC,GAAG,EAAE,CACV,kBAAkB,CAAC,OAAO,EAAE;gBAC1B,MAAM,EAAE,WAAW;gBACnB,MAAM,EAAE,aAAa;aACtB,CAAC,CACH,CAAC,OAAO,CAAC,uEAAuE,CAAC,CAAC;QACrF,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;QACtC,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;YAC3C,MAAM,IAAI,GAAG,qBAAqB,CAAC,UAAU,EAAE;gBAC7C,gBAAgB,EAAE,wBAAwB;aAC3C,CAAC,CAAC;YAEH,MAAM,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC/C,MAAM,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACjD,MAAM,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACtD,MAAM,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrD,MAAM,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAChD,MAAM,CAAC,sBAAsB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;QAC3C,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;YAC3C,MAAM,IAAI,GAAG,qBAAqB,CAAC,UAAU,EAAE;gBAC7C,gBAAgB,EAAE,wBAAwB;aAC3C,CAAC,CAAC;YAEH,MAAM,CAAC,2BAA2B,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC7C,MAAM,CAAC,2BAA2B,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACpD,MAAM,CAAC,2BAA2B,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;QACxC,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;YACxC,MAAM,IAAI,GAAG,kBAAkB,CAAC,OAAO,EAAE;gBACvC,MAAM,EAAE,WAAW;gBACnB,GAAG,EAAE,mDAAmD;aACzD,CAAC,CAAC;YAEH,MAAM,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;YAC1C,MAAM,CAAC,wBAAwB,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACjD,MAAM,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;QACjC,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;YACrC,MAAM,IAAI,GAAG,qBAAqB,CAAC,UAAU,EAAE;gBAC7C,gBAAgB,EAAE,wBAAwB;aAC3C,CAAC,CAAC;YAEH,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;YACxC,MAAM,IAAI,GAAG,kBAAkB,CAAC,OAAO,EAAE;gBACvC,MAAM,EAAE,WAAW;gBACnB,GAAG,EAAE,mDAAmD;aACzD,CAAC,CAAC;YAEH,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import type { AnyTypeValidator } from "./types.js";
|
|
6
6
|
import type { EngineConfig } from "./engines.js";
|
|
7
|
-
import type { KafkaConnectionDefinition } from "./connection.js";
|
|
7
|
+
import type { KafkaConnectionDefinition, S3ConnectionDefinition } from "./connection.js";
|
|
8
8
|
import type { TokenDefinition, DatasourceTokenScope } from "./token.js";
|
|
9
9
|
declare const DATASOURCE_BRAND: unique symbol;
|
|
10
10
|
/**
|
|
@@ -57,6 +57,19 @@ export interface KafkaConfig {
|
|
|
57
57
|
/** Where to start reading: 'earliest' or 'latest' (default: 'latest') */
|
|
58
58
|
autoOffsetReset?: "earliest" | "latest";
|
|
59
59
|
}
|
|
60
|
+
/**
|
|
61
|
+
* S3 import configuration for a datasource
|
|
62
|
+
*/
|
|
63
|
+
export interface S3Config {
|
|
64
|
+
/** S3 connection to use */
|
|
65
|
+
connection: S3ConnectionDefinition;
|
|
66
|
+
/** S3 bucket URI, for example: s3://my-bucket/path/*.csv */
|
|
67
|
+
bucketUri: string;
|
|
68
|
+
/** Import schedule, for example: @auto or @once */
|
|
69
|
+
schedule?: string;
|
|
70
|
+
/** Incremental import lower bound timestamp expression */
|
|
71
|
+
fromTimestamp?: string;
|
|
72
|
+
}
|
|
60
73
|
/**
|
|
61
74
|
* Options for defining a datasource
|
|
62
75
|
*/
|
|
@@ -84,6 +97,8 @@ export interface DatasourceOptions<TSchema extends SchemaDefinition> {
|
|
|
84
97
|
forwardQuery?: string;
|
|
85
98
|
/** Kafka ingestion configuration */
|
|
86
99
|
kafka?: KafkaConfig;
|
|
100
|
+
/** S3 ingestion configuration */
|
|
101
|
+
s3?: S3Config;
|
|
87
102
|
}
|
|
88
103
|
/**
|
|
89
104
|
* A datasource definition with full type information
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"datasource.d.ts","sourceRoot":"","sources":["../../src/schema/datasource.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"datasource.d.ts","sourceRoot":"","sources":["../../src/schema/datasource.ts"],"names":[],"mappings":"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"}
|
|
@@ -39,6 +39,9 @@ export function defineDatasource(name, options) {
|
|
|
39
39
|
if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(name)) {
|
|
40
40
|
throw new Error(`Invalid datasource name: "${name}". Must start with a letter or underscore and contain only alphanumeric characters and underscores.`);
|
|
41
41
|
}
|
|
42
|
+
if (options.kafka && options.s3) {
|
|
43
|
+
throw new Error("Datasource cannot define both `kafka` and `s3` ingestion options.");
|
|
44
|
+
}
|
|
42
45
|
return {
|
|
43
46
|
[DATASOURCE_BRAND]: true,
|
|
44
47
|
_name: name,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"datasource.js","sourceRoot":"","sources":["../../src/schema/datasource.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,iEAAiE;AACjE,+DAA+D;AAC/D,MAAM,gBAAgB,GAAG,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"datasource.js","sourceRoot":"","sources":["../../src/schema/datasource.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,iEAAiE;AACjE,+DAA+D;AAC/D,MAAM,gBAAgB,GAAG,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;AAsH3D;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,UAAU,gBAAgB,CAC9B,IAAY,EACZ,OAAmC;IAEnC,sCAAsC;IACtC,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CACb,6BAA6B,IAAI,qGAAqG,CACvI,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;IACvF,CAAC;IAED,OAAO;QACL,CAAC,gBAAgB,CAAC,EAAE,IAAI;QACxB,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,YAAY;QACnB,OAAO,EAAE,OAAO,CAAC,MAAM;QACvB,OAAO;KACR,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACnD,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,gBAAgB,IAAI,KAAK;QACxB,KAAiC,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAC9D,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,MAA2C;IACvE,IAAI,MAAM,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACxD,OAAO,MAAM,CAAC,IAAI,CAAC;IACrB,CAAC;IACD,OAAO,MAA0B,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAA2C;IAC3E,IAAI,UAAU,IAAI,MAAM,EAAE,CAAC;QACzB,OAAO,MAAM,CAAC,QAAQ,CAAC;IACzB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAC5B,MAAe;IAEf,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAsB,CAAC;AAClD,CAAC;AAOD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,MAAM,CACpB,IAAO,EACP,OAA2C;IAE3C,OAAO;QACL,IAAI;QACJ,GAAG,OAAO;KACX,CAAC;AACJ,CAAC"}
|
|
@@ -2,6 +2,7 @@ import { describe, it, expect } from "vitest";
|
|
|
2
2
|
import { defineDatasource, isDatasourceDefinition, getColumnType, getColumnJsonPath, getColumnNames, column, } from "./datasource.js";
|
|
3
3
|
import { t } from "./types.js";
|
|
4
4
|
import { engine } from "./engines.js";
|
|
5
|
+
import { defineKafkaConnection, defineS3Connection } from "./connection.js";
|
|
5
6
|
describe("Datasource Schema", () => {
|
|
6
7
|
describe("defineDatasource", () => {
|
|
7
8
|
it("creates a datasource with required fields", () => {
|
|
@@ -61,6 +62,26 @@ describe("Datasource Schema", () => {
|
|
|
61
62
|
});
|
|
62
63
|
expect(ds2._name).toBe("events_v2");
|
|
63
64
|
});
|
|
65
|
+
it("throws when both kafka and s3 ingestion are configured", () => {
|
|
66
|
+
const kafkaConn = defineKafkaConnection("my_kafka", {
|
|
67
|
+
bootstrapServers: "kafka.example.com:9092",
|
|
68
|
+
});
|
|
69
|
+
const s3Conn = defineS3Connection("my_s3", {
|
|
70
|
+
region: "us-east-1",
|
|
71
|
+
arn: "arn:aws:iam::123456789012:role/tinybird-s3-access",
|
|
72
|
+
});
|
|
73
|
+
expect(() => defineDatasource("events", {
|
|
74
|
+
schema: { id: t.string() },
|
|
75
|
+
kafka: {
|
|
76
|
+
connection: kafkaConn,
|
|
77
|
+
topic: "events",
|
|
78
|
+
},
|
|
79
|
+
s3: {
|
|
80
|
+
connection: s3Conn,
|
|
81
|
+
bucketUri: "s3://my-bucket/events/*.csv",
|
|
82
|
+
},
|
|
83
|
+
})).toThrow("Datasource cannot define both `kafka` and `s3` ingestion options.");
|
|
84
|
+
});
|
|
64
85
|
});
|
|
65
86
|
describe("isDatasourceDefinition", () => {
|
|
66
87
|
it("returns true for valid datasource", () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"datasource.test.js","sourceRoot":"","sources":["../../src/schema/datasource.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,MAAM,GACP,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,CAAC,EAAE,MAAM,YAAY,CAAC;AAC/B,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"datasource.test.js","sourceRoot":"","sources":["../../src/schema/datasource.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -184,7 +184,7 @@ describe("Init Command", () => {
|
|
|
184
184
|
expect(content).toContain("TopPagesOutput");
|
|
185
185
|
|
|
186
186
|
// Check client content
|
|
187
|
-
expect(content).toContain("
|
|
187
|
+
expect(content).toContain("new Tinybird");
|
|
188
188
|
});
|
|
189
189
|
|
|
190
190
|
it("skips tinybird.ts if it already exists", async () => {
|
package/src/cli/commands/init.ts
CHANGED
|
@@ -40,7 +40,7 @@ const TINYBIRD_CONTENT = `/**
|
|
|
40
40
|
import {
|
|
41
41
|
defineDatasource,
|
|
42
42
|
defineEndpoint,
|
|
43
|
-
|
|
43
|
+
Tinybird,
|
|
44
44
|
node,
|
|
45
45
|
t,
|
|
46
46
|
p,
|
|
@@ -115,7 +115,7 @@ export type TopPagesOutput = InferOutputRow<typeof topPages>;
|
|
|
115
115
|
// Client
|
|
116
116
|
// ============================================================================
|
|
117
117
|
|
|
118
|
-
export const tinybird =
|
|
118
|
+
export const tinybird = new Tinybird({
|
|
119
119
|
datasources: { pageViews },
|
|
120
120
|
pipes: { topPages },
|
|
121
121
|
});
|
|
@@ -15,11 +15,11 @@ const EXPECTED_COMPLEX_OUTPUT = `/**
|
|
|
15
15
|
* Review endpoint output schemas and any defaults before production use.
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
|
-
import {
|
|
18
|
+
import { defineKafkaConnection, defineDatasource, definePipe, defineMaterializedView, defineCopyPipe, node, t, engine, column, p } from "@tinybirdco/sdk";
|
|
19
19
|
|
|
20
20
|
// Connections
|
|
21
21
|
|
|
22
|
-
export const stream =
|
|
22
|
+
export const stream = defineKafkaConnection("stream", {
|
|
23
23
|
bootstrapServers: "localhost:9092",
|
|
24
24
|
securityProtocol: "SASL_SSL",
|
|
25
25
|
saslMechanism: "PLAIN",
|
|
@@ -183,11 +183,11 @@ const EXPECTED_PARTIAL_OUTPUT = `/**
|
|
|
183
183
|
* Review endpoint output schemas and any defaults before production use.
|
|
184
184
|
*/
|
|
185
185
|
|
|
186
|
-
import {
|
|
186
|
+
import { defineKafkaConnection, defineDatasource, definePipe, defineMaterializedView, defineCopyPipe, node, t, engine, p } from "@tinybirdco/sdk";
|
|
187
187
|
|
|
188
188
|
// Connections
|
|
189
189
|
|
|
190
|
-
export const stream =
|
|
190
|
+
export const stream = defineKafkaConnection("stream", {
|
|
191
191
|
bootstrapServers: "localhost:9092",
|
|
192
192
|
});
|
|
193
193
|
|
|
@@ -561,4 +561,58 @@ TOKEN endpoint_token READ
|
|
|
561
561
|
expect(result.outputContent).toBe(EXPECTED_PARTIAL_OUTPUT);
|
|
562
562
|
expect(fs.existsSync(result.outputPath)).toBe(false);
|
|
563
563
|
});
|
|
564
|
+
|
|
565
|
+
it("migrates s3 connection and import datasource directives", async () => {
|
|
566
|
+
const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "tinybird-migrate-"));
|
|
567
|
+
tempDirs.push(tempDir);
|
|
568
|
+
|
|
569
|
+
writeFile(
|
|
570
|
+
tempDir,
|
|
571
|
+
"s3sample.connection",
|
|
572
|
+
`TYPE s3
|
|
573
|
+
S3_REGION "us-east-1"
|
|
574
|
+
S3_ARN "arn:aws:iam::123456789012:role/tinybird-s3-access"
|
|
575
|
+
`
|
|
576
|
+
);
|
|
577
|
+
|
|
578
|
+
writeFile(
|
|
579
|
+
tempDir,
|
|
580
|
+
"events_landing.datasource",
|
|
581
|
+
`SCHEMA >
|
|
582
|
+
timestamp DateTime,
|
|
583
|
+
session_id String
|
|
584
|
+
|
|
585
|
+
ENGINE "MergeTree"
|
|
586
|
+
ENGINE_SORTING_KEY "timestamp"
|
|
587
|
+
IMPORT_CONNECTION_NAME s3sample
|
|
588
|
+
IMPORT_BUCKET_URI s3://my-bucket/events/*.csv
|
|
589
|
+
IMPORT_SCHEDULE @auto
|
|
590
|
+
IMPORT_FROM_TIMESTAMP 2024-01-01T00:00:00Z
|
|
591
|
+
`
|
|
592
|
+
);
|
|
593
|
+
|
|
594
|
+
const result = await runMigrate({
|
|
595
|
+
cwd: tempDir,
|
|
596
|
+
patterns: ["."],
|
|
597
|
+
strict: true,
|
|
598
|
+
});
|
|
599
|
+
|
|
600
|
+
expect(result.success).toBe(true);
|
|
601
|
+
expect(result.errors).toHaveLength(0);
|
|
602
|
+
expect(result.migrated.filter((resource) => resource.kind === "connection")).toHaveLength(1);
|
|
603
|
+
expect(result.migrated.filter((resource) => resource.kind === "datasource")).toHaveLength(1);
|
|
604
|
+
|
|
605
|
+
const output = fs.readFileSync(result.outputPath, "utf-8");
|
|
606
|
+
expect(output).toContain("defineS3Connection");
|
|
607
|
+
expect(output).toContain('export const s3sample = defineS3Connection("s3sample", {');
|
|
608
|
+
expect(output).toContain('region: "us-east-1"');
|
|
609
|
+
expect(output).toContain(
|
|
610
|
+
'arn: "arn:aws:iam::123456789012:role/tinybird-s3-access"'
|
|
611
|
+
);
|
|
612
|
+
expect(output).toContain("s3: {");
|
|
613
|
+
expect(output).toContain("connection: s3sample");
|
|
614
|
+
expect(output).toContain('bucketUri: "s3://my-bucket/events/*.csv"');
|
|
615
|
+
expect(output).toContain('schedule: "@auto"');
|
|
616
|
+
expect(output).toContain('fromTimestamp: "2024-01-01T00:00:00Z"');
|
|
617
|
+
});
|
|
564
618
|
});
|
|
@@ -129,15 +129,18 @@ export async function runMigrate(
|
|
|
129
129
|
}
|
|
130
130
|
|
|
131
131
|
for (const datasource of parsedDatasources) {
|
|
132
|
+
const referencedConnectionName =
|
|
133
|
+
datasource.kafka?.connectionName ?? datasource.s3?.connectionName;
|
|
134
|
+
|
|
132
135
|
if (
|
|
133
|
-
|
|
134
|
-
!migratedConnectionNames.has(
|
|
136
|
+
referencedConnectionName &&
|
|
137
|
+
!migratedConnectionNames.has(referencedConnectionName)
|
|
135
138
|
) {
|
|
136
139
|
errors.push({
|
|
137
140
|
filePath: datasource.filePath,
|
|
138
141
|
resourceName: datasource.name,
|
|
139
142
|
resourceKind: datasource.kind,
|
|
140
|
-
message: `Datasource references missing/unmigrated connection "${
|
|
143
|
+
message: `Datasource references missing/unmigrated connection "${referencedConnectionName}".`,
|
|
141
144
|
});
|
|
142
145
|
continue;
|
|
143
146
|
}
|
|
@@ -237,4 +240,3 @@ export async function runMigrate(
|
|
|
237
240
|
outputContent,
|
|
238
241
|
};
|
|
239
242
|
}
|
|
240
|
-
|
package/src/client/preview.ts
CHANGED
|
@@ -164,7 +164,7 @@ export async function resolveToken(options?: {
|
|
|
164
164
|
|
|
165
165
|
if (!configuredToken) {
|
|
166
166
|
throw new Error(
|
|
167
|
-
"TINYBIRD_TOKEN is not configured. Set it in your environment or pass it to
|
|
167
|
+
"TINYBIRD_TOKEN is not configured. Set it in your environment or pass it to new Tinybird({...})."
|
|
168
168
|
);
|
|
169
169
|
}
|
|
170
170
|
|
|
@@ -304,7 +304,7 @@ describe("generateClientFile", () => {
|
|
|
304
304
|
|
|
305
305
|
const file = generateClientFile(datasources, pipes);
|
|
306
306
|
|
|
307
|
-
expect(file).toContain('import {
|
|
307
|
+
expect(file).toContain('import { Tinybird } from "@tinybirdco/sdk"');
|
|
308
308
|
expect(file).toContain('import { events, type EventsRow } from "./datasources.js"');
|
|
309
309
|
expect(file).toContain('import { topEvents, type TopEventsParams, type TopEventsOutput } from "./pipes.js"');
|
|
310
310
|
expect(file).toContain("datasources: { events }");
|
|
@@ -321,7 +321,7 @@ describe("generateClientFile", () => {
|
|
|
321
321
|
expect(file).toContain('import { dirname } from "path"');
|
|
322
322
|
// Should derive __configDir from import.meta.url
|
|
323
323
|
expect(file).toContain("const __configDir = dirname(fileURLToPath(import.meta.url))");
|
|
324
|
-
// Should pass configDir to
|
|
324
|
+
// Should pass configDir to Tinybird constructor
|
|
325
325
|
expect(file).toContain("configDir: __configDir");
|
|
326
326
|
});
|
|
327
327
|
|
|
@@ -386,6 +386,6 @@ describe("generateAllFiles", () => {
|
|
|
386
386
|
expect(result.pipeCount).toBe(1);
|
|
387
387
|
expect(result.datasourcesContent).toContain("defineDatasource");
|
|
388
388
|
expect(result.pipesContent).toContain("defineEndpoint");
|
|
389
|
-
expect(result.clientContent).toContain("
|
|
389
|
+
expect(result.clientContent).toContain("new Tinybird");
|
|
390
390
|
});
|
|
391
391
|
});
|