@tinybirdco/sdk 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +518 -0
- package/bin/tinybird.js +7 -0
- package/dist/api/branches.d.ts +98 -0
- package/dist/api/branches.d.ts.map +1 -0
- package/dist/api/branches.js +203 -0
- package/dist/api/branches.js.map +1 -0
- package/dist/api/branches.test.d.ts +2 -0
- package/dist/api/branches.test.d.ts.map +1 -0
- package/dist/api/branches.test.js +286 -0
- package/dist/api/branches.test.js.map +1 -0
- package/dist/api/build.d.ts +130 -0
- package/dist/api/build.d.ts.map +1 -0
- package/dist/api/build.js +143 -0
- package/dist/api/build.js.map +1 -0
- package/dist/api/build.test.d.ts +2 -0
- package/dist/api/build.test.d.ts.map +1 -0
- package/dist/api/build.test.js +138 -0
- package/dist/api/build.test.js.map +1 -0
- package/dist/api/deploy.d.ts +39 -0
- package/dist/api/deploy.d.ts.map +1 -0
- package/dist/api/deploy.js +135 -0
- package/dist/api/deploy.js.map +1 -0
- package/dist/api/deploy.test.d.ts +2 -0
- package/dist/api/deploy.test.d.ts.map +1 -0
- package/dist/api/deploy.test.js +118 -0
- package/dist/api/deploy.test.js.map +1 -0
- package/dist/api/workspaces.d.ts +46 -0
- package/dist/api/workspaces.d.ts.map +1 -0
- package/dist/api/workspaces.js +39 -0
- package/dist/api/workspaces.js.map +1 -0
- package/dist/api/workspaces.test.d.ts +2 -0
- package/dist/api/workspaces.test.d.ts.map +1 -0
- package/dist/api/workspaces.test.js +65 -0
- package/dist/api/workspaces.test.js.map +1 -0
- package/dist/cli/auth.d.ts +86 -0
- package/dist/cli/auth.d.ts.map +1 -0
- package/dist/cli/auth.js +284 -0
- package/dist/cli/auth.js.map +1 -0
- package/dist/cli/branch-store.d.ts +53 -0
- package/dist/cli/branch-store.d.ts.map +1 -0
- package/dist/cli/branch-store.js +91 -0
- package/dist/cli/branch-store.js.map +1 -0
- package/dist/cli/branch-store.test.d.ts +2 -0
- package/dist/cli/branch-store.test.d.ts.map +1 -0
- package/dist/cli/branch-store.test.js +115 -0
- package/dist/cli/branch-store.test.js.map +1 -0
- package/dist/cli/commands/branch.d.ts +82 -0
- package/dist/cli/commands/branch.d.ts.map +1 -0
- package/dist/cli/commands/branch.js +215 -0
- package/dist/cli/commands/branch.js.map +1 -0
- package/dist/cli/commands/build.d.ts +43 -0
- package/dist/cli/commands/build.d.ts.map +1 -0
- package/dist/cli/commands/build.js +138 -0
- package/dist/cli/commands/build.js.map +1 -0
- package/dist/cli/commands/dev.d.ts +78 -0
- package/dist/cli/commands/dev.d.ts.map +1 -0
- package/dist/cli/commands/dev.js +226 -0
- package/dist/cli/commands/dev.js.map +1 -0
- package/dist/cli/commands/init.d.ts +45 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +277 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/init.test.d.ts +2 -0
- package/dist/cli/commands/init.test.d.ts.map +1 -0
- package/dist/cli/commands/init.test.js +158 -0
- package/dist/cli/commands/init.test.js.map +1 -0
- package/dist/cli/commands/login.d.ts +37 -0
- package/dist/cli/commands/login.d.ts.map +1 -0
- package/dist/cli/commands/login.js +64 -0
- package/dist/cli/commands/login.js.map +1 -0
- package/dist/cli/config.d.ts +114 -0
- package/dist/cli/config.d.ts.map +1 -0
- package/dist/cli/config.js +258 -0
- package/dist/cli/config.js.map +1 -0
- package/dist/cli/config.test.d.ts +2 -0
- package/dist/cli/config.test.d.ts.map +1 -0
- package/dist/cli/config.test.js +243 -0
- package/dist/cli/config.test.js.map +1 -0
- package/dist/cli/env.d.ts +29 -0
- package/dist/cli/env.d.ts.map +1 -0
- package/dist/cli/env.js +66 -0
- package/dist/cli/env.js.map +1 -0
- package/dist/cli/git.d.ts +29 -0
- package/dist/cli/git.d.ts.map +1 -0
- package/dist/cli/git.js +114 -0
- package/dist/cli/git.js.map +1 -0
- package/dist/cli/git.test.d.ts +2 -0
- package/dist/cli/git.test.d.ts.map +1 -0
- package/dist/cli/git.test.js +125 -0
- package/dist/cli/git.test.js.map +1 -0
- package/dist/cli/index.d.ts +7 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +337 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/utils/schema-validation.d.ts +95 -0
- package/dist/cli/utils/schema-validation.d.ts.map +1 -0
- package/dist/cli/utils/schema-validation.js +175 -0
- package/dist/cli/utils/schema-validation.js.map +1 -0
- package/dist/cli/utils/schema-validation.test.d.ts +5 -0
- package/dist/cli/utils/schema-validation.test.d.ts.map +1 -0
- package/dist/cli/utils/schema-validation.test.js +173 -0
- package/dist/cli/utils/schema-validation.test.js.map +1 -0
- package/dist/client/base.d.ts +116 -0
- package/dist/client/base.d.ts.map +1 -0
- package/dist/client/base.js +328 -0
- package/dist/client/base.js.map +1 -0
- package/dist/client/types.d.ts +137 -0
- package/dist/client/types.d.ts.map +1 -0
- package/dist/client/types.js +43 -0
- package/dist/client/types.js.map +1 -0
- package/dist/generator/client.d.ts +44 -0
- package/dist/generator/client.d.ts.map +1 -0
- package/dist/generator/client.js +144 -0
- package/dist/generator/client.js.map +1 -0
- package/dist/generator/datasource.d.ts +57 -0
- package/dist/generator/datasource.d.ts.map +1 -0
- package/dist/generator/datasource.js +169 -0
- package/dist/generator/datasource.js.map +1 -0
- package/dist/generator/datasource.test.d.ts +2 -0
- package/dist/generator/datasource.test.d.ts.map +1 -0
- package/dist/generator/datasource.test.js +254 -0
- package/dist/generator/datasource.test.js.map +1 -0
- package/dist/generator/index.d.ts +131 -0
- package/dist/generator/index.d.ts.map +1 -0
- package/dist/generator/index.js +121 -0
- package/dist/generator/index.js.map +1 -0
- package/dist/generator/index.test.d.ts +2 -0
- package/dist/generator/index.test.d.ts.map +1 -0
- package/dist/generator/index.test.js +175 -0
- package/dist/generator/index.test.js.map +1 -0
- package/dist/generator/loader.d.ts +156 -0
- package/dist/generator/loader.d.ts.map +1 -0
- package/dist/generator/loader.js +295 -0
- package/dist/generator/loader.js.map +1 -0
- package/dist/generator/pipe.d.ts +72 -0
- package/dist/generator/pipe.d.ts.map +1 -0
- package/dist/generator/pipe.js +174 -0
- package/dist/generator/pipe.js.map +1 -0
- package/dist/generator/pipe.test.d.ts +2 -0
- package/dist/generator/pipe.test.d.ts.map +1 -0
- package/dist/generator/pipe.test.js +393 -0
- package/dist/generator/pipe.test.js.map +1 -0
- package/dist/index.d.ts +74 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +73 -0
- package/dist/index.js.map +1 -0
- package/dist/infer/index.d.ts +202 -0
- package/dist/infer/index.d.ts.map +1 -0
- package/dist/infer/index.js +5 -0
- package/dist/infer/index.js.map +1 -0
- package/dist/schema/datasource.d.ts +135 -0
- package/dist/schema/datasource.d.ts.map +1 -0
- package/dist/schema/datasource.js +105 -0
- package/dist/schema/datasource.js.map +1 -0
- package/dist/schema/datasource.test.d.ts +2 -0
- package/dist/schema/datasource.test.d.ts.map +1 -0
- package/dist/schema/datasource.test.js +142 -0
- package/dist/schema/datasource.test.js.map +1 -0
- package/dist/schema/engines.d.ts +157 -0
- package/dist/schema/engines.d.ts.map +1 -0
- package/dist/schema/engines.js +155 -0
- package/dist/schema/engines.js.map +1 -0
- package/dist/schema/engines.test.d.ts +2 -0
- package/dist/schema/engines.test.d.ts.map +1 -0
- package/dist/schema/engines.test.js +221 -0
- package/dist/schema/engines.test.js.map +1 -0
- package/dist/schema/params.d.ts +106 -0
- package/dist/schema/params.d.ts.map +1 -0
- package/dist/schema/params.js +138 -0
- package/dist/schema/params.js.map +1 -0
- package/dist/schema/params.test.d.ts +2 -0
- package/dist/schema/params.test.d.ts.map +1 -0
- package/dist/schema/params.test.js +175 -0
- package/dist/schema/params.test.js.map +1 -0
- package/dist/schema/pipe.d.ts +436 -0
- package/dist/schema/pipe.d.ts.map +1 -0
- package/dist/schema/pipe.js +484 -0
- package/dist/schema/pipe.js.map +1 -0
- package/dist/schema/pipe.test.d.ts +2 -0
- package/dist/schema/pipe.test.d.ts.map +1 -0
- package/dist/schema/pipe.test.js +488 -0
- package/dist/schema/pipe.test.js.map +1 -0
- package/dist/schema/project.d.ts +202 -0
- package/dist/schema/project.d.ts.map +1 -0
- package/dist/schema/project.js +188 -0
- package/dist/schema/project.js.map +1 -0
- package/dist/schema/project.test.d.ts +2 -0
- package/dist/schema/project.test.d.ts.map +1 -0
- package/dist/schema/project.test.js +180 -0
- package/dist/schema/project.test.js.map +1 -0
- package/dist/schema/types.d.ts +140 -0
- package/dist/schema/types.d.ts.map +1 -0
- package/dist/schema/types.js +174 -0
- package/dist/schema/types.js.map +1 -0
- package/dist/schema/types.test.d.ts +2 -0
- package/dist/schema/types.test.d.ts.map +1 -0
- package/dist/schema/types.test.js +176 -0
- package/dist/schema/types.test.js.map +1 -0
- package/dist/test/handlers.d.ts +58 -0
- package/dist/test/handlers.d.ts.map +1 -0
- package/dist/test/handlers.js +62 -0
- package/dist/test/handlers.js.map +1 -0
- package/dist/test/setup.d.ts +5 -0
- package/dist/test/setup.d.ts.map +1 -0
- package/dist/test/setup.js +11 -0
- package/dist/test/setup.js.map +1 -0
- package/package.json +57 -0
- package/src/api/branches.test.ts +377 -0
- package/src/api/branches.ts +334 -0
- package/src/api/build.test.ts +216 -0
- package/src/api/build.ts +266 -0
- package/src/api/deploy.test.ts +193 -0
- package/src/api/deploy.ts +163 -0
- package/src/api/workspaces.test.ts +81 -0
- package/src/api/workspaces.ts +77 -0
- package/src/cli/auth.ts +358 -0
- package/src/cli/branch-store.test.ts +139 -0
- package/src/cli/branch-store.ts +137 -0
- package/src/cli/commands/branch.ts +306 -0
- package/src/cli/commands/build.ts +183 -0
- package/src/cli/commands/dev.ts +334 -0
- package/src/cli/commands/init.test.ts +249 -0
- package/src/cli/commands/init.ts +323 -0
- package/src/cli/commands/login.ts +98 -0
- package/src/cli/config.test.ts +359 -0
- package/src/cli/config.ts +335 -0
- package/src/cli/env.ts +86 -0
- package/src/cli/git.test.ts +147 -0
- package/src/cli/git.ts +125 -0
- package/src/cli/index.ts +382 -0
- package/src/cli/utils/schema-validation.test.ts +222 -0
- package/src/cli/utils/schema-validation.ts +272 -0
- package/src/client/base.ts +414 -0
- package/src/client/types.ts +165 -0
- package/src/generator/client.ts +194 -0
- package/src/generator/datasource.test.ts +297 -0
- package/src/generator/datasource.ts +217 -0
- package/src/generator/index.test.ts +209 -0
- package/src/generator/index.ts +203 -0
- package/src/generator/loader.ts +406 -0
- package/src/generator/pipe.test.ts +441 -0
- package/src/generator/pipe.ts +220 -0
- package/src/index.ts +191 -0
- package/src/infer/index.ts +247 -0
- package/src/schema/datasource.test.ts +187 -0
- package/src/schema/datasource.ts +195 -0
- package/src/schema/engines.test.ts +247 -0
- package/src/schema/engines.ts +271 -0
- package/src/schema/params.test.ts +208 -0
- package/src/schema/params.ts +249 -0
- package/src/schema/pipe.test.ts +588 -0
- package/src/schema/pipe.ts +832 -0
- package/src/schema/project.test.ts +236 -0
- package/src/schema/project.ts +394 -0
- package/src/schema/types.test.ts +212 -0
- package/src/schema/types.ts +366 -0
- package/src/test/handlers.ts +79 -0
- package/src/test/setup.ts +13 -0
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { engine, getEngineClause, getSortingKey, getPrimaryKey } from './engines.js';
|
|
3
|
+
describe('Engine Configurations', () => {
|
|
4
|
+
describe('MergeTree', () => {
|
|
5
|
+
it('creates MergeTree config', () => {
|
|
6
|
+
const config = engine.mergeTree({ sortingKey: ['id'] });
|
|
7
|
+
expect(config.type).toBe('MergeTree');
|
|
8
|
+
expect(config.sortingKey).toEqual(['id']);
|
|
9
|
+
});
|
|
10
|
+
it('supports string sortingKey', () => {
|
|
11
|
+
const config = engine.mergeTree({ sortingKey: 'id' });
|
|
12
|
+
expect(config.sortingKey).toBe('id');
|
|
13
|
+
});
|
|
14
|
+
it('supports partitionKey', () => {
|
|
15
|
+
const config = engine.mergeTree({
|
|
16
|
+
sortingKey: ['id'],
|
|
17
|
+
partitionKey: 'toYYYYMM(timestamp)',
|
|
18
|
+
});
|
|
19
|
+
expect(config.partitionKey).toBe('toYYYYMM(timestamp)');
|
|
20
|
+
});
|
|
21
|
+
it('supports TTL', () => {
|
|
22
|
+
const config = engine.mergeTree({
|
|
23
|
+
sortingKey: ['id'],
|
|
24
|
+
ttl: 'timestamp + INTERVAL 90 DAY',
|
|
25
|
+
});
|
|
26
|
+
expect(config.ttl).toBe('timestamp + INTERVAL 90 DAY');
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
describe('ReplacingMergeTree', () => {
|
|
30
|
+
it('creates ReplacingMergeTree config', () => {
|
|
31
|
+
const config = engine.replacingMergeTree({ sortingKey: ['id'] });
|
|
32
|
+
expect(config.type).toBe('ReplacingMergeTree');
|
|
33
|
+
});
|
|
34
|
+
it('supports version column', () => {
|
|
35
|
+
const config = engine.replacingMergeTree({
|
|
36
|
+
sortingKey: ['id'],
|
|
37
|
+
ver: 'updated_at',
|
|
38
|
+
});
|
|
39
|
+
expect(config.ver).toBe('updated_at');
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
describe('SummingMergeTree', () => {
|
|
43
|
+
it('creates SummingMergeTree config', () => {
|
|
44
|
+
const config = engine.summingMergeTree({ sortingKey: ['id'] });
|
|
45
|
+
expect(config.type).toBe('SummingMergeTree');
|
|
46
|
+
});
|
|
47
|
+
it('supports columns to sum', () => {
|
|
48
|
+
const config = engine.summingMergeTree({
|
|
49
|
+
sortingKey: ['date'],
|
|
50
|
+
columns: ['count', 'total'],
|
|
51
|
+
});
|
|
52
|
+
expect(config.columns).toEqual(['count', 'total']);
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
describe('AggregatingMergeTree', () => {
|
|
56
|
+
it('creates AggregatingMergeTree config', () => {
|
|
57
|
+
const config = engine.aggregatingMergeTree({ sortingKey: ['id'] });
|
|
58
|
+
expect(config.type).toBe('AggregatingMergeTree');
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
describe('CollapsingMergeTree', () => {
|
|
62
|
+
it('creates CollapsingMergeTree config', () => {
|
|
63
|
+
const config = engine.collapsingMergeTree({
|
|
64
|
+
sortingKey: ['id'],
|
|
65
|
+
sign: 'sign_col',
|
|
66
|
+
});
|
|
67
|
+
expect(config.type).toBe('CollapsingMergeTree');
|
|
68
|
+
expect(config.sign).toBe('sign_col');
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
describe('VersionedCollapsingMergeTree', () => {
|
|
72
|
+
it('creates VersionedCollapsingMergeTree config', () => {
|
|
73
|
+
const config = engine.versionedCollapsingMergeTree({
|
|
74
|
+
sortingKey: ['id'],
|
|
75
|
+
sign: 'sign_col',
|
|
76
|
+
version: 'version_col',
|
|
77
|
+
});
|
|
78
|
+
expect(config.type).toBe('VersionedCollapsingMergeTree');
|
|
79
|
+
expect(config.sign).toBe('sign_col');
|
|
80
|
+
expect(config.version).toBe('version_col');
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
describe('getEngineClause', () => {
|
|
84
|
+
it('generates basic MergeTree clause', () => {
|
|
85
|
+
const config = engine.mergeTree({ sortingKey: ['id'] });
|
|
86
|
+
const clause = getEngineClause(config);
|
|
87
|
+
expect(clause).toContain('ENGINE "MergeTree"');
|
|
88
|
+
expect(clause).toContain('ENGINE_SORTING_KEY "id"');
|
|
89
|
+
});
|
|
90
|
+
it('includes partition key', () => {
|
|
91
|
+
const config = engine.mergeTree({
|
|
92
|
+
sortingKey: ['id'],
|
|
93
|
+
partitionKey: 'toYYYYMM(timestamp)',
|
|
94
|
+
});
|
|
95
|
+
const clause = getEngineClause(config);
|
|
96
|
+
expect(clause).toContain('ENGINE_PARTITION_KEY "toYYYYMM(timestamp)"');
|
|
97
|
+
});
|
|
98
|
+
it('includes TTL', () => {
|
|
99
|
+
const config = engine.mergeTree({
|
|
100
|
+
sortingKey: ['id'],
|
|
101
|
+
ttl: 'timestamp + INTERVAL 90 DAY',
|
|
102
|
+
});
|
|
103
|
+
const clause = getEngineClause(config);
|
|
104
|
+
expect(clause).toContain('ENGINE_TTL "timestamp + INTERVAL 90 DAY"');
|
|
105
|
+
});
|
|
106
|
+
it('includes primary key when different from sorting key', () => {
|
|
107
|
+
const config = engine.mergeTree({
|
|
108
|
+
sortingKey: ['id', 'timestamp'],
|
|
109
|
+
primaryKey: ['id'],
|
|
110
|
+
});
|
|
111
|
+
const clause = getEngineClause(config);
|
|
112
|
+
expect(clause).toContain('ENGINE_SORTING_KEY "id, timestamp"');
|
|
113
|
+
expect(clause).toContain('ENGINE_PRIMARY_KEY "id"');
|
|
114
|
+
});
|
|
115
|
+
it('includes ReplacingMergeTree version column', () => {
|
|
116
|
+
const config = engine.replacingMergeTree({
|
|
117
|
+
sortingKey: ['id'],
|
|
118
|
+
ver: 'updated_at',
|
|
119
|
+
});
|
|
120
|
+
const clause = getEngineClause(config);
|
|
121
|
+
expect(clause).toContain('ENGINE "ReplacingMergeTree"');
|
|
122
|
+
expect(clause).toContain('ENGINE_VER "updated_at"');
|
|
123
|
+
});
|
|
124
|
+
it('includes SummingMergeTree columns', () => {
|
|
125
|
+
const config = engine.summingMergeTree({
|
|
126
|
+
sortingKey: ['date'],
|
|
127
|
+
columns: ['count', 'total'],
|
|
128
|
+
});
|
|
129
|
+
const clause = getEngineClause(config);
|
|
130
|
+
expect(clause).toContain('ENGINE "SummingMergeTree"');
|
|
131
|
+
expect(clause).toContain('ENGINE_SUMMING_COLUMNS "count, total"');
|
|
132
|
+
});
|
|
133
|
+
it('includes CollapsingMergeTree sign column', () => {
|
|
134
|
+
const config = engine.collapsingMergeTree({
|
|
135
|
+
sortingKey: ['id'],
|
|
136
|
+
sign: 'sign_col',
|
|
137
|
+
});
|
|
138
|
+
const clause = getEngineClause(config);
|
|
139
|
+
expect(clause).toContain('ENGINE "CollapsingMergeTree"');
|
|
140
|
+
expect(clause).toContain('ENGINE_SIGN "sign_col"');
|
|
141
|
+
});
|
|
142
|
+
it('includes VersionedCollapsingMergeTree sign and version', () => {
|
|
143
|
+
const config = engine.versionedCollapsingMergeTree({
|
|
144
|
+
sortingKey: ['id'],
|
|
145
|
+
sign: 'sign_col',
|
|
146
|
+
version: 'version_col',
|
|
147
|
+
});
|
|
148
|
+
const clause = getEngineClause(config);
|
|
149
|
+
expect(clause).toContain('ENGINE "VersionedCollapsingMergeTree"');
|
|
150
|
+
expect(clause).toContain('ENGINE_SIGN "sign_col"');
|
|
151
|
+
expect(clause).toContain('ENGINE_VERSION "version_col"');
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
describe('Helper functions', () => {
|
|
155
|
+
it('getSortingKey returns array from string', () => {
|
|
156
|
+
const config = engine.mergeTree({ sortingKey: 'id' });
|
|
157
|
+
expect(getSortingKey(config)).toEqual(['id']);
|
|
158
|
+
});
|
|
159
|
+
it('getSortingKey returns array from array', () => {
|
|
160
|
+
const config = engine.mergeTree({ sortingKey: ['id', 'timestamp'] });
|
|
161
|
+
expect(getSortingKey(config)).toEqual(['id', 'timestamp']);
|
|
162
|
+
});
|
|
163
|
+
it('getPrimaryKey defaults to sorting key', () => {
|
|
164
|
+
const config = engine.mergeTree({ sortingKey: ['id'] });
|
|
165
|
+
expect(getPrimaryKey(config)).toEqual(['id']);
|
|
166
|
+
});
|
|
167
|
+
it('getPrimaryKey returns explicit primary key', () => {
|
|
168
|
+
const config = engine.mergeTree({
|
|
169
|
+
sortingKey: ['id', 'timestamp'],
|
|
170
|
+
primaryKey: ['id'],
|
|
171
|
+
});
|
|
172
|
+
expect(getPrimaryKey(config)).toEqual(['id']);
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
describe('ENGINE_SETTINGS string escaping', () => {
|
|
176
|
+
it('quotes string values in settings', () => {
|
|
177
|
+
const config = engine.mergeTree({
|
|
178
|
+
sortingKey: ['id'],
|
|
179
|
+
settings: {
|
|
180
|
+
storage_policy: 'tiered',
|
|
181
|
+
},
|
|
182
|
+
});
|
|
183
|
+
const clause = getEngineClause(config);
|
|
184
|
+
expect(clause).toContain("storage_policy='tiered'");
|
|
185
|
+
});
|
|
186
|
+
it('does not quote numeric values in settings', () => {
|
|
187
|
+
const config = engine.mergeTree({
|
|
188
|
+
sortingKey: ['id'],
|
|
189
|
+
settings: {
|
|
190
|
+
index_granularity: 8192,
|
|
191
|
+
},
|
|
192
|
+
});
|
|
193
|
+
const clause = getEngineClause(config);
|
|
194
|
+
expect(clause).toContain('index_granularity=8192');
|
|
195
|
+
expect(clause).not.toContain("index_granularity='8192'");
|
|
196
|
+
});
|
|
197
|
+
it('escapes single quotes in string values', () => {
|
|
198
|
+
const config = engine.mergeTree({
|
|
199
|
+
sortingKey: ['id'],
|
|
200
|
+
settings: {
|
|
201
|
+
comment: "it's a test",
|
|
202
|
+
},
|
|
203
|
+
});
|
|
204
|
+
const clause = getEngineClause(config);
|
|
205
|
+
expect(clause).toContain("comment='it\\'s a test'");
|
|
206
|
+
});
|
|
207
|
+
it('handles mixed string and numeric settings', () => {
|
|
208
|
+
const config = engine.mergeTree({
|
|
209
|
+
sortingKey: ['id'],
|
|
210
|
+
settings: {
|
|
211
|
+
storage_policy: 'default',
|
|
212
|
+
index_granularity: 8192,
|
|
213
|
+
},
|
|
214
|
+
});
|
|
215
|
+
const clause = getEngineClause(config);
|
|
216
|
+
expect(clause).toContain("storage_policy='default'");
|
|
217
|
+
expect(clause).toContain('index_granularity=8192');
|
|
218
|
+
});
|
|
219
|
+
});
|
|
220
|
+
});
|
|
221
|
+
//# sourceMappingURL=engines.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engines.test.js","sourceRoot":"","sources":["../../src/schema/engines.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parameter validators for Tinybird pipe queries
|
|
3
|
+
* Similar to the column type validators but for query parameters
|
|
4
|
+
*/
|
|
5
|
+
declare const PARAM_BRAND: unique symbol;
|
|
6
|
+
/**
|
|
7
|
+
* Base interface for parameter validators
|
|
8
|
+
*/
|
|
9
|
+
export interface ParamValidator<TType, TTinybirdType extends string = string, TRequired extends boolean = true> {
|
|
10
|
+
readonly [PARAM_BRAND]: true;
|
|
11
|
+
/** The inferred TypeScript type */
|
|
12
|
+
readonly _type: TType;
|
|
13
|
+
/** The Tinybird type string for the parameter */
|
|
14
|
+
readonly _tinybirdType: TTinybirdType;
|
|
15
|
+
/** Whether this parameter is required */
|
|
16
|
+
readonly _required: TRequired;
|
|
17
|
+
/** Default value if optional */
|
|
18
|
+
readonly _default?: TType;
|
|
19
|
+
/** Description for documentation */
|
|
20
|
+
readonly _description?: string;
|
|
21
|
+
/** Make this parameter optional with an optional default value */
|
|
22
|
+
optional<TDefault extends TType | undefined = undefined>(defaultValue?: TDefault): ParamValidator<TDefault extends undefined ? TType | undefined : TType, TTinybirdType, false>;
|
|
23
|
+
/** Make this parameter required (default) */
|
|
24
|
+
required(): ParamValidator<TType, TTinybirdType, true>;
|
|
25
|
+
/** Add a description for this parameter */
|
|
26
|
+
describe(description: string): ParamValidator<TType, TTinybirdType, TRequired>;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Parameter validators for Tinybird pipe queries
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```ts
|
|
33
|
+
* import { p } from '@tinybirdco/sdk';
|
|
34
|
+
*
|
|
35
|
+
* const params = {
|
|
36
|
+
* user_id: p.string(),
|
|
37
|
+
* limit: p.int32().optional(10),
|
|
38
|
+
* start_date: p.dateTime().describe('Start of date range'),
|
|
39
|
+
* };
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
export declare const p: {
|
|
43
|
+
/** String parameter */
|
|
44
|
+
readonly string: () => ParamValidator<string, "String", true>;
|
|
45
|
+
/** UUID parameter */
|
|
46
|
+
readonly uuid: () => ParamValidator<string, "UUID", true>;
|
|
47
|
+
/** Int8 parameter */
|
|
48
|
+
readonly int8: () => ParamValidator<number, "Int8", true>;
|
|
49
|
+
/** Int16 parameter */
|
|
50
|
+
readonly int16: () => ParamValidator<number, "Int16", true>;
|
|
51
|
+
/** Int32 parameter */
|
|
52
|
+
readonly int32: () => ParamValidator<number, "Int32", true>;
|
|
53
|
+
/** Int64 parameter */
|
|
54
|
+
readonly int64: () => ParamValidator<number, "Int64", true>;
|
|
55
|
+
/** UInt8 parameter */
|
|
56
|
+
readonly uint8: () => ParamValidator<number, "UInt8", true>;
|
|
57
|
+
/** UInt16 parameter */
|
|
58
|
+
readonly uint16: () => ParamValidator<number, "UInt16", true>;
|
|
59
|
+
/** UInt32 parameter */
|
|
60
|
+
readonly uint32: () => ParamValidator<number, "UInt32", true>;
|
|
61
|
+
/** UInt64 parameter */
|
|
62
|
+
readonly uint64: () => ParamValidator<number, "UInt64", true>;
|
|
63
|
+
/** Float32 parameter */
|
|
64
|
+
readonly float32: () => ParamValidator<number, "Float32", true>;
|
|
65
|
+
/** Float64 parameter */
|
|
66
|
+
readonly float64: () => ParamValidator<number, "Float64", true>;
|
|
67
|
+
/** Boolean parameter */
|
|
68
|
+
readonly boolean: () => ParamValidator<boolean, "Boolean", true>;
|
|
69
|
+
/** Date parameter (YYYY-MM-DD format) */
|
|
70
|
+
readonly date: () => ParamValidator<string, "Date", true>;
|
|
71
|
+
/** DateTime parameter (YYYY-MM-DD HH:MM:SS format) */
|
|
72
|
+
readonly dateTime: () => ParamValidator<string, "DateTime", true>;
|
|
73
|
+
/** DateTime64 parameter with sub-second precision */
|
|
74
|
+
readonly dateTime64: () => ParamValidator<string, "DateTime64", true>;
|
|
75
|
+
/**
|
|
76
|
+
* Array parameter - values can be passed as comma-separated or repeated params
|
|
77
|
+
* @param _element - The type of array elements (used for type inference)
|
|
78
|
+
* @param _separator - Optional custom separator (default: comma)
|
|
79
|
+
*/
|
|
80
|
+
readonly array: <TElement extends ParamValidator<unknown, string, boolean>>(_element: TElement, _separator?: string) => ParamValidator<TElement["_type"][], "Array", true>;
|
|
81
|
+
/**
|
|
82
|
+
* Column reference parameter - allows dynamic column selection
|
|
83
|
+
* Use with caution as it can affect query safety
|
|
84
|
+
*/
|
|
85
|
+
readonly column: () => ParamValidator<string, "column", true>;
|
|
86
|
+
/**
|
|
87
|
+
* JSON parameter - for passing complex structured data
|
|
88
|
+
*/
|
|
89
|
+
readonly json: <TShape = unknown>() => ParamValidator<TShape, "JSON", true>;
|
|
90
|
+
};
|
|
91
|
+
/** Type alias for any parameter validator */
|
|
92
|
+
export type AnyParamValidator = ParamValidator<unknown, string, boolean>;
|
|
93
|
+
/** Extract the TypeScript type from a parameter validator */
|
|
94
|
+
export type InferParamType<T extends AnyParamValidator> = T["_required"] extends true ? T["_type"] : T["_type"] | undefined;
|
|
95
|
+
/** Check if a value is a parameter validator */
|
|
96
|
+
export declare function isParamValidator(value: unknown): value is AnyParamValidator;
|
|
97
|
+
/** Get the Tinybird type string from a parameter validator */
|
|
98
|
+
export declare function getParamTinybirdType(validator: AnyParamValidator): string;
|
|
99
|
+
/** Check if a parameter is required */
|
|
100
|
+
export declare function isParamRequired(validator: AnyParamValidator): boolean;
|
|
101
|
+
/** Get the default value of a parameter */
|
|
102
|
+
export declare function getParamDefault<T>(validator: ParamValidator<T, string, boolean>): T | undefined;
|
|
103
|
+
/** Get the description of a parameter */
|
|
104
|
+
export declare function getParamDescription(validator: AnyParamValidator): string | undefined;
|
|
105
|
+
export {};
|
|
106
|
+
//# sourceMappingURL=params.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"params.d.ts","sourceRoot":"","sources":["../../src/schema/params.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,QAAA,MAAM,WAAW,eAA2B,CAAC;AAE7C;;GAEG;AACH,MAAM,WAAW,cAAc,CAC7B,KAAK,EACL,aAAa,SAAS,MAAM,GAAG,MAAM,EACrC,SAAS,SAAS,OAAO,GAAG,IAAI;IAEhC,QAAQ,CAAC,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC;IAC7B,mCAAmC;IACnC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,iDAAiD;IACjD,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IACtC,yCAAyC;IACzC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,gCAAgC;IAChC,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC;IAC1B,oCAAoC;IACpC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAE/B,kEAAkE;IAClE,QAAQ,CAAC,QAAQ,SAAS,KAAK,GAAG,SAAS,GAAG,SAAS,EACrD,YAAY,CAAC,EAAE,QAAQ,GACtB,cAAc,CACf,QAAQ,SAAS,SAAS,GAAG,KAAK,GAAG,SAAS,GAAG,KAAK,EACtD,aAAa,EACb,KAAK,CACN,CAAC;IAEF,6CAA6C;IAC7C,QAAQ,IAAI,cAAc,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;IAEvD,2CAA2C;IAC3C,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,cAAc,CAAC,KAAK,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;CAChF;AAoED;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,CAAC;IAGZ,uBAAuB;;IAGvB,qBAAqB;;IAKrB,qBAAqB;;IAGrB,sBAAsB;;IAGtB,sBAAsB;;IAGtB,sBAAsB;;IAGtB,sBAAsB;;IAGtB,uBAAuB;;IAGvB,uBAAuB;;IAGvB,uBAAuB;;IAKvB,wBAAwB;;IAGxB,wBAAwB;;IAKxB,wBAAwB;;IAKxB,yCAAyC;;IAGzC,sDAAsD;;IAGtD,qDAAqD;;IAKrD;;;;OAIG;qBACK,QAAQ,SAAS,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,YACrD,QAAQ,eACL,MAAM,KAClB,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC;IAOrD;;;OAGG;;IAGH;;OAEG;oBACI,MAAM;CACL,CAAC;AAEX,6CAA6C;AAC7C,MAAM,MAAM,iBAAiB,GAAG,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AAEzE,6DAA6D;AAC7D,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,iBAAiB,IAAI,CAAC,CAAC,WAAW,CAAC,SAAS,IAAI,GACjF,CAAC,CAAC,OAAO,CAAC,GACV,CAAC,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC;AAE3B,gDAAgD;AAChD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,iBAAiB,CAO3E;AAED,8DAA8D;AAC9D,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,iBAAiB,GAAG,MAAM,CAEzE;AAED,uCAAuC;AACvC,wBAAgB,eAAe,CAAC,SAAS,EAAE,iBAAiB,GAAG,OAAO,CAErE;AAED,2CAA2C;AAC3C,wBAAgB,eAAe,CAAC,CAAC,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,SAAS,CAE/F;AAED,yCAAyC;AACzC,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,iBAAiB,GAAG,MAAM,GAAG,SAAS,CAEpF"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parameter validators for Tinybird pipe queries
|
|
3
|
+
* Similar to the column type validators but for query parameters
|
|
4
|
+
*/
|
|
5
|
+
// Symbol for brand typing
|
|
6
|
+
const PARAM_BRAND = Symbol("tinybird.param");
|
|
7
|
+
function createParamValidator(tinybirdType, options = {}) {
|
|
8
|
+
const isRequired = (options.required ?? true);
|
|
9
|
+
const validator = {
|
|
10
|
+
[PARAM_BRAND]: true,
|
|
11
|
+
_type: undefined,
|
|
12
|
+
_tinybirdType: tinybirdType,
|
|
13
|
+
_required: isRequired,
|
|
14
|
+
_default: options.defaultValue,
|
|
15
|
+
_description: options.description,
|
|
16
|
+
tinybirdType,
|
|
17
|
+
isRequired,
|
|
18
|
+
defaultValue: options.defaultValue,
|
|
19
|
+
description: options.description,
|
|
20
|
+
optional(defaultValue) {
|
|
21
|
+
return createParamValidator(tinybirdType, {
|
|
22
|
+
required: false,
|
|
23
|
+
defaultValue: defaultValue,
|
|
24
|
+
description: options.description,
|
|
25
|
+
});
|
|
26
|
+
},
|
|
27
|
+
required() {
|
|
28
|
+
return createParamValidator(tinybirdType, {
|
|
29
|
+
required: true,
|
|
30
|
+
description: options.description,
|
|
31
|
+
});
|
|
32
|
+
},
|
|
33
|
+
describe(description) {
|
|
34
|
+
return createParamValidator(tinybirdType, {
|
|
35
|
+
required: isRequired,
|
|
36
|
+
defaultValue: options.defaultValue,
|
|
37
|
+
description,
|
|
38
|
+
});
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
return validator;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Parameter validators for Tinybird pipe queries
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* ```ts
|
|
48
|
+
* import { p } from '@tinybirdco/sdk';
|
|
49
|
+
*
|
|
50
|
+
* const params = {
|
|
51
|
+
* user_id: p.string(),
|
|
52
|
+
* limit: p.int32().optional(10),
|
|
53
|
+
* start_date: p.dateTime().describe('Start of date range'),
|
|
54
|
+
* };
|
|
55
|
+
* ```
|
|
56
|
+
*/
|
|
57
|
+
export const p = {
|
|
58
|
+
// ============ String Types ============
|
|
59
|
+
/** String parameter */
|
|
60
|
+
string: () => createParamValidator("String"),
|
|
61
|
+
/** UUID parameter */
|
|
62
|
+
uuid: () => createParamValidator("UUID"),
|
|
63
|
+
// ============ Integer Types ============
|
|
64
|
+
/** Int8 parameter */
|
|
65
|
+
int8: () => createParamValidator("Int8"),
|
|
66
|
+
/** Int16 parameter */
|
|
67
|
+
int16: () => createParamValidator("Int16"),
|
|
68
|
+
/** Int32 parameter */
|
|
69
|
+
int32: () => createParamValidator("Int32"),
|
|
70
|
+
/** Int64 parameter */
|
|
71
|
+
int64: () => createParamValidator("Int64"),
|
|
72
|
+
/** UInt8 parameter */
|
|
73
|
+
uint8: () => createParamValidator("UInt8"),
|
|
74
|
+
/** UInt16 parameter */
|
|
75
|
+
uint16: () => createParamValidator("UInt16"),
|
|
76
|
+
/** UInt32 parameter */
|
|
77
|
+
uint32: () => createParamValidator("UInt32"),
|
|
78
|
+
/** UInt64 parameter */
|
|
79
|
+
uint64: () => createParamValidator("UInt64"),
|
|
80
|
+
// ============ Float Types ============
|
|
81
|
+
/** Float32 parameter */
|
|
82
|
+
float32: () => createParamValidator("Float32"),
|
|
83
|
+
/** Float64 parameter */
|
|
84
|
+
float64: () => createParamValidator("Float64"),
|
|
85
|
+
// ============ Boolean ============
|
|
86
|
+
/** Boolean parameter */
|
|
87
|
+
boolean: () => createParamValidator("Boolean"),
|
|
88
|
+
// ============ Date/Time Types ============
|
|
89
|
+
/** Date parameter (YYYY-MM-DD format) */
|
|
90
|
+
date: () => createParamValidator("Date"),
|
|
91
|
+
/** DateTime parameter (YYYY-MM-DD HH:MM:SS format) */
|
|
92
|
+
dateTime: () => createParamValidator("DateTime"),
|
|
93
|
+
/** DateTime64 parameter with sub-second precision */
|
|
94
|
+
dateTime64: () => createParamValidator("DateTime64"),
|
|
95
|
+
// ============ Array Types ============
|
|
96
|
+
/**
|
|
97
|
+
* Array parameter - values can be passed as comma-separated or repeated params
|
|
98
|
+
* @param _element - The type of array elements (used for type inference)
|
|
99
|
+
* @param _separator - Optional custom separator (default: comma)
|
|
100
|
+
*/
|
|
101
|
+
array: (_element, _separator) => createParamValidator("Array", {
|
|
102
|
+
required: true,
|
|
103
|
+
}),
|
|
104
|
+
// ============ Special Types ============
|
|
105
|
+
/**
|
|
106
|
+
* Column reference parameter - allows dynamic column selection
|
|
107
|
+
* Use with caution as it can affect query safety
|
|
108
|
+
*/
|
|
109
|
+
column: () => createParamValidator("column"),
|
|
110
|
+
/**
|
|
111
|
+
* JSON parameter - for passing complex structured data
|
|
112
|
+
*/
|
|
113
|
+
json: () => createParamValidator("JSON"),
|
|
114
|
+
};
|
|
115
|
+
/** Check if a value is a parameter validator */
|
|
116
|
+
export function isParamValidator(value) {
|
|
117
|
+
return (typeof value === "object" &&
|
|
118
|
+
value !== null &&
|
|
119
|
+
PARAM_BRAND in value &&
|
|
120
|
+
value[PARAM_BRAND] === true);
|
|
121
|
+
}
|
|
122
|
+
/** Get the Tinybird type string from a parameter validator */
|
|
123
|
+
export function getParamTinybirdType(validator) {
|
|
124
|
+
return validator._tinybirdType;
|
|
125
|
+
}
|
|
126
|
+
/** Check if a parameter is required */
|
|
127
|
+
export function isParamRequired(validator) {
|
|
128
|
+
return validator._required;
|
|
129
|
+
}
|
|
130
|
+
/** Get the default value of a parameter */
|
|
131
|
+
export function getParamDefault(validator) {
|
|
132
|
+
return validator._default;
|
|
133
|
+
}
|
|
134
|
+
/** Get the description of a parameter */
|
|
135
|
+
export function getParamDescription(validator) {
|
|
136
|
+
return validator._description;
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=params.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"params.js","sourceRoot":"","sources":["../../src/schema/params.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"params.test.d.ts","sourceRoot":"","sources":["../../src/schema/params.test.ts"],"names":[],"mappings":""}
|