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