@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,277 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Init command - scaffolds a new Tinybird TypeScript project
|
|
3
|
+
*/
|
|
4
|
+
import * as fs from "fs";
|
|
5
|
+
import * as path from "path";
|
|
6
|
+
import { hasValidToken, getTinybirdDir, getRelativeTinybirdDir, getConfigPath, updateConfig, } from "../config.js";
|
|
7
|
+
import { browserLogin } from "../auth.js";
|
|
8
|
+
import { saveTinybirdToken } from "../env.js";
|
|
9
|
+
/**
|
|
10
|
+
* Default starter content for datasources.ts
|
|
11
|
+
*/
|
|
12
|
+
const DATASOURCES_CONTENT = `import { defineDatasource, t, engine, type InferRow } from "@tinybirdco/sdk";
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Page views datasource - tracks page view events
|
|
16
|
+
*/
|
|
17
|
+
export const pageViews = defineDatasource("page_views", {
|
|
18
|
+
description: "Page view tracking data",
|
|
19
|
+
schema: {
|
|
20
|
+
timestamp: t.dateTime(),
|
|
21
|
+
session_id: t.string(),
|
|
22
|
+
pathname: t.string(),
|
|
23
|
+
referrer: t.string().nullable(),
|
|
24
|
+
},
|
|
25
|
+
engine: engine.mergeTree({
|
|
26
|
+
sortingKey: ["pathname", "timestamp"],
|
|
27
|
+
}),
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
// Row type - use this for ingesting data
|
|
31
|
+
export type PageViewsRow = InferRow<typeof pageViews>;
|
|
32
|
+
`;
|
|
33
|
+
/**
|
|
34
|
+
* Default starter content for pipes.ts
|
|
35
|
+
*/
|
|
36
|
+
const PIPES_CONTENT = `import { defineEndpoint, node, t, p, type InferParams, type InferOutputRow } from "@tinybirdco/sdk";
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Top pages endpoint - get the most visited pages
|
|
40
|
+
*/
|
|
41
|
+
export const topPages = defineEndpoint("top_pages", {
|
|
42
|
+
description: "Get the most visited pages",
|
|
43
|
+
params: {
|
|
44
|
+
start_date: p.dateTime().describe("Start of date range"),
|
|
45
|
+
end_date: p.dateTime().describe("End of date range"),
|
|
46
|
+
limit: p.int32().optional(10).describe("Number of results"),
|
|
47
|
+
},
|
|
48
|
+
nodes: [
|
|
49
|
+
node({
|
|
50
|
+
name: "aggregated",
|
|
51
|
+
sql: \`
|
|
52
|
+
SELECT
|
|
53
|
+
pathname,
|
|
54
|
+
count() AS views
|
|
55
|
+
FROM page_views
|
|
56
|
+
WHERE timestamp >= {{DateTime(start_date)}}
|
|
57
|
+
AND timestamp <= {{DateTime(end_date)}}
|
|
58
|
+
GROUP BY pathname
|
|
59
|
+
ORDER BY views DESC
|
|
60
|
+
LIMIT {{Int32(limit, 10)}}
|
|
61
|
+
\`,
|
|
62
|
+
}),
|
|
63
|
+
],
|
|
64
|
+
output: {
|
|
65
|
+
pathname: t.string(),
|
|
66
|
+
views: t.uint64(),
|
|
67
|
+
},
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
// Endpoint types - use these for calling the API
|
|
71
|
+
export type TopPagesParams = InferParams<typeof topPages>;
|
|
72
|
+
export type TopPagesOutput = InferOutputRow<typeof topPages>;
|
|
73
|
+
`;
|
|
74
|
+
/**
|
|
75
|
+
* Default starter content for client.ts
|
|
76
|
+
*/
|
|
77
|
+
const CLIENT_CONTENT = `/**
|
|
78
|
+
* Tinybird Client
|
|
79
|
+
*
|
|
80
|
+
* This file defines the typed Tinybird client for your project.
|
|
81
|
+
* Add your datasources and pipes here as you create them.
|
|
82
|
+
*/
|
|
83
|
+
|
|
84
|
+
import { createTinybirdClient } from "@tinybirdco/sdk";
|
|
85
|
+
|
|
86
|
+
// Import datasources and their row types
|
|
87
|
+
import { pageViews, type PageViewsRow } from "./datasources";
|
|
88
|
+
|
|
89
|
+
// Import endpoints and their types
|
|
90
|
+
import { topPages, type TopPagesParams, type TopPagesOutput } from "./pipes";
|
|
91
|
+
|
|
92
|
+
// Create the typed Tinybird client
|
|
93
|
+
export const tinybird = createTinybirdClient({
|
|
94
|
+
datasources: { pageViews },
|
|
95
|
+
pipes: { topPages },
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
// Re-export types for convenience
|
|
99
|
+
export type { PageViewsRow, TopPagesParams, TopPagesOutput };
|
|
100
|
+
|
|
101
|
+
// Re-export entities
|
|
102
|
+
export { pageViews, topPages };
|
|
103
|
+
`;
|
|
104
|
+
/**
|
|
105
|
+
* Default config content generator
|
|
106
|
+
*/
|
|
107
|
+
function createDefaultConfig(tinybirdDir) {
|
|
108
|
+
return {
|
|
109
|
+
include: [
|
|
110
|
+
`${tinybirdDir}/datasources.ts`,
|
|
111
|
+
`${tinybirdDir}/pipes.ts`,
|
|
112
|
+
],
|
|
113
|
+
token: "${TINYBIRD_TOKEN}",
|
|
114
|
+
baseUrl: "https://api.tinybird.co",
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Run the init command
|
|
119
|
+
*
|
|
120
|
+
* Creates:
|
|
121
|
+
* - tinybird.json in the project root
|
|
122
|
+
* - src/tinybird/ folder with datasources.ts, pipes.ts, and client.ts
|
|
123
|
+
*
|
|
124
|
+
* @param options - Init options
|
|
125
|
+
* @returns Init result
|
|
126
|
+
*/
|
|
127
|
+
export async function runInit(options = {}) {
|
|
128
|
+
const cwd = options.cwd ?? process.cwd();
|
|
129
|
+
const force = options.force ?? false;
|
|
130
|
+
const skipLogin = options.skipLogin ?? false;
|
|
131
|
+
const created = [];
|
|
132
|
+
const skipped = [];
|
|
133
|
+
// Determine tinybird folder path based on project structure
|
|
134
|
+
const tinybirdDir = getTinybirdDir(cwd);
|
|
135
|
+
const relativeTinybirdDir = getRelativeTinybirdDir(cwd);
|
|
136
|
+
// File paths
|
|
137
|
+
const datasourcesPath = path.join(tinybirdDir, "datasources.ts");
|
|
138
|
+
const pipesPath = path.join(tinybirdDir, "pipes.ts");
|
|
139
|
+
const clientPath = path.join(tinybirdDir, "client.ts");
|
|
140
|
+
// Create config file (tinybird.json)
|
|
141
|
+
const configPath = getConfigPath(cwd);
|
|
142
|
+
if (fs.existsSync(configPath) && !force) {
|
|
143
|
+
skipped.push("tinybird.json");
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
try {
|
|
147
|
+
const config = createDefaultConfig(relativeTinybirdDir);
|
|
148
|
+
fs.writeFileSync(configPath, JSON.stringify(config, null, 2) + "\n");
|
|
149
|
+
created.push("tinybird.json");
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
return {
|
|
153
|
+
success: false,
|
|
154
|
+
created,
|
|
155
|
+
skipped,
|
|
156
|
+
error: `Failed to create tinybird.json: ${error.message}`,
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
// Create tinybird directory
|
|
161
|
+
try {
|
|
162
|
+
fs.mkdirSync(tinybirdDir, { recursive: true });
|
|
163
|
+
}
|
|
164
|
+
catch (error) {
|
|
165
|
+
return {
|
|
166
|
+
success: false,
|
|
167
|
+
created,
|
|
168
|
+
skipped,
|
|
169
|
+
error: `Failed to create ${relativeTinybirdDir} folder: ${error.message}`,
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
// Create datasources.ts
|
|
173
|
+
if (fs.existsSync(datasourcesPath) && !force) {
|
|
174
|
+
skipped.push(`${relativeTinybirdDir}/datasources.ts`);
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
try {
|
|
178
|
+
fs.writeFileSync(datasourcesPath, DATASOURCES_CONTENT);
|
|
179
|
+
created.push(`${relativeTinybirdDir}/datasources.ts`);
|
|
180
|
+
}
|
|
181
|
+
catch (error) {
|
|
182
|
+
return {
|
|
183
|
+
success: false,
|
|
184
|
+
created,
|
|
185
|
+
skipped,
|
|
186
|
+
error: `Failed to create datasources.ts: ${error.message}`,
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
// Create pipes.ts
|
|
191
|
+
if (fs.existsSync(pipesPath) && !force) {
|
|
192
|
+
skipped.push(`${relativeTinybirdDir}/pipes.ts`);
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
try {
|
|
196
|
+
fs.writeFileSync(pipesPath, PIPES_CONTENT);
|
|
197
|
+
created.push(`${relativeTinybirdDir}/pipes.ts`);
|
|
198
|
+
}
|
|
199
|
+
catch (error) {
|
|
200
|
+
return {
|
|
201
|
+
success: false,
|
|
202
|
+
created,
|
|
203
|
+
skipped,
|
|
204
|
+
error: `Failed to create pipes.ts: ${error.message}`,
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
// Create client.ts
|
|
209
|
+
if (fs.existsSync(clientPath) && !force) {
|
|
210
|
+
skipped.push(`${relativeTinybirdDir}/client.ts`);
|
|
211
|
+
}
|
|
212
|
+
else {
|
|
213
|
+
try {
|
|
214
|
+
fs.writeFileSync(clientPath, CLIENT_CONTENT);
|
|
215
|
+
created.push(`${relativeTinybirdDir}/client.ts`);
|
|
216
|
+
}
|
|
217
|
+
catch (error) {
|
|
218
|
+
return {
|
|
219
|
+
success: false,
|
|
220
|
+
created,
|
|
221
|
+
skipped,
|
|
222
|
+
error: `Failed to create client.ts: ${error.message}`,
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
// Check if login is needed
|
|
227
|
+
if (!skipLogin && !hasValidToken(cwd)) {
|
|
228
|
+
console.log("\nNo authentication found. Starting login flow...\n");
|
|
229
|
+
const authResult = await browserLogin();
|
|
230
|
+
if (authResult.success && authResult.token) {
|
|
231
|
+
// Save token to .env.local
|
|
232
|
+
try {
|
|
233
|
+
const saveResult = saveTinybirdToken(cwd, authResult.token);
|
|
234
|
+
if (saveResult.created) {
|
|
235
|
+
created.push(".env.local");
|
|
236
|
+
}
|
|
237
|
+
// If custom base URL, update tinybird.json
|
|
238
|
+
if (authResult.baseUrl && authResult.baseUrl !== "https://api.tinybird.co") {
|
|
239
|
+
updateConfig(configPath, { baseUrl: authResult.baseUrl });
|
|
240
|
+
}
|
|
241
|
+
return {
|
|
242
|
+
success: true,
|
|
243
|
+
created,
|
|
244
|
+
skipped,
|
|
245
|
+
loggedIn: true,
|
|
246
|
+
workspaceName: authResult.workspaceName,
|
|
247
|
+
userEmail: authResult.userEmail,
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
catch (error) {
|
|
251
|
+
// Login succeeded but saving credentials failed
|
|
252
|
+
console.error(`Warning: Failed to save credentials: ${error.message}`);
|
|
253
|
+
return {
|
|
254
|
+
success: true,
|
|
255
|
+
created,
|
|
256
|
+
skipped,
|
|
257
|
+
loggedIn: false,
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
else {
|
|
262
|
+
// Login failed or was cancelled
|
|
263
|
+
return {
|
|
264
|
+
success: true,
|
|
265
|
+
created,
|
|
266
|
+
skipped,
|
|
267
|
+
loggedIn: false,
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
return {
|
|
272
|
+
success: true,
|
|
273
|
+
created,
|
|
274
|
+
skipped,
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.test.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
|
|
2
|
+
import * as fs from "fs";
|
|
3
|
+
import * as path from "path";
|
|
4
|
+
import * as os from "os";
|
|
5
|
+
import { runInit } from "./init.js";
|
|
6
|
+
// Mock the auth module to avoid browser login
|
|
7
|
+
vi.mock("../auth.js", () => ({
|
|
8
|
+
browserLogin: vi.fn().mockResolvedValue({ success: false }),
|
|
9
|
+
}));
|
|
10
|
+
describe("Init Command", () => {
|
|
11
|
+
let tempDir;
|
|
12
|
+
beforeEach(() => {
|
|
13
|
+
tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "tinybird-init-test-"));
|
|
14
|
+
});
|
|
15
|
+
afterEach(() => {
|
|
16
|
+
try {
|
|
17
|
+
fs.rmSync(tempDir, { recursive: true });
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
// Ignore cleanup errors
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
describe("folder structure creation", () => {
|
|
24
|
+
it("creates tinybird folder with datasources.ts, pipes.ts, client.ts when project has no src folder", async () => {
|
|
25
|
+
const result = await runInit({ cwd: tempDir, skipLogin: true });
|
|
26
|
+
expect(result.success).toBe(true);
|
|
27
|
+
expect(result.created).toContain("tinybird/datasources.ts");
|
|
28
|
+
expect(result.created).toContain("tinybird/pipes.ts");
|
|
29
|
+
expect(result.created).toContain("tinybird/client.ts");
|
|
30
|
+
expect(fs.existsSync(path.join(tempDir, "tinybird", "datasources.ts"))).toBe(true);
|
|
31
|
+
expect(fs.existsSync(path.join(tempDir, "tinybird", "pipes.ts"))).toBe(true);
|
|
32
|
+
expect(fs.existsSync(path.join(tempDir, "tinybird", "client.ts"))).toBe(true);
|
|
33
|
+
});
|
|
34
|
+
it("creates src/tinybird folder with files when project has src folder", async () => {
|
|
35
|
+
// Create src folder to simulate existing project
|
|
36
|
+
fs.mkdirSync(path.join(tempDir, "src"));
|
|
37
|
+
const result = await runInit({ cwd: tempDir, skipLogin: true });
|
|
38
|
+
expect(result.success).toBe(true);
|
|
39
|
+
expect(result.created).toContain("src/tinybird/datasources.ts");
|
|
40
|
+
expect(result.created).toContain("src/tinybird/pipes.ts");
|
|
41
|
+
expect(result.created).toContain("src/tinybird/client.ts");
|
|
42
|
+
expect(fs.existsSync(path.join(tempDir, "src", "tinybird", "datasources.ts"))).toBe(true);
|
|
43
|
+
expect(fs.existsSync(path.join(tempDir, "src", "tinybird", "pipes.ts"))).toBe(true);
|
|
44
|
+
expect(fs.existsSync(path.join(tempDir, "src", "tinybird", "client.ts"))).toBe(true);
|
|
45
|
+
});
|
|
46
|
+
it("creates tinybird.json with correct include paths for tinybird folder", async () => {
|
|
47
|
+
const result = await runInit({ cwd: tempDir, skipLogin: true });
|
|
48
|
+
expect(result.success).toBe(true);
|
|
49
|
+
expect(result.created).toContain("tinybird.json");
|
|
50
|
+
const config = JSON.parse(fs.readFileSync(path.join(tempDir, "tinybird.json"), "utf-8"));
|
|
51
|
+
expect(config.include).toEqual([
|
|
52
|
+
"tinybird/datasources.ts",
|
|
53
|
+
"tinybird/pipes.ts",
|
|
54
|
+
]);
|
|
55
|
+
});
|
|
56
|
+
it("creates tinybird.json with correct include paths for src/tinybird", async () => {
|
|
57
|
+
fs.mkdirSync(path.join(tempDir, "src"));
|
|
58
|
+
const result = await runInit({ cwd: tempDir, skipLogin: true });
|
|
59
|
+
expect(result.success).toBe(true);
|
|
60
|
+
const config = JSON.parse(fs.readFileSync(path.join(tempDir, "tinybird.json"), "utf-8"));
|
|
61
|
+
expect(config.include).toEqual([
|
|
62
|
+
"src/tinybird/datasources.ts",
|
|
63
|
+
"src/tinybird/pipes.ts",
|
|
64
|
+
]);
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
describe("config file creation", () => {
|
|
68
|
+
it("creates tinybird.json with default values", async () => {
|
|
69
|
+
await runInit({ cwd: tempDir, skipLogin: true });
|
|
70
|
+
const config = JSON.parse(fs.readFileSync(path.join(tempDir, "tinybird.json"), "utf-8"));
|
|
71
|
+
expect(config.token).toBe("${TINYBIRD_TOKEN}");
|
|
72
|
+
expect(config.baseUrl).toBe("https://api.tinybird.co");
|
|
73
|
+
});
|
|
74
|
+
it("skips tinybird.json if it already exists", async () => {
|
|
75
|
+
const existingConfig = { schema: "custom.ts", token: "existing" };
|
|
76
|
+
fs.writeFileSync(path.join(tempDir, "tinybird.json"), JSON.stringify(existingConfig));
|
|
77
|
+
const result = await runInit({ cwd: tempDir, skipLogin: true });
|
|
78
|
+
expect(result.success).toBe(true);
|
|
79
|
+
expect(result.skipped).toContain("tinybird.json");
|
|
80
|
+
// Verify it wasn't overwritten
|
|
81
|
+
const config = JSON.parse(fs.readFileSync(path.join(tempDir, "tinybird.json"), "utf-8"));
|
|
82
|
+
expect(config.schema).toBe("custom.ts");
|
|
83
|
+
});
|
|
84
|
+
it("overwrites tinybird.json with force option", async () => {
|
|
85
|
+
const existingConfig = { include: ["custom.ts"], token: "existing" };
|
|
86
|
+
fs.writeFileSync(path.join(tempDir, "tinybird.json"), JSON.stringify(existingConfig));
|
|
87
|
+
const result = await runInit({ cwd: tempDir, skipLogin: true, force: true });
|
|
88
|
+
expect(result.success).toBe(true);
|
|
89
|
+
expect(result.created).toContain("tinybird.json");
|
|
90
|
+
const config = JSON.parse(fs.readFileSync(path.join(tempDir, "tinybird.json"), "utf-8"));
|
|
91
|
+
expect(config.include).toEqual([
|
|
92
|
+
"tinybird/datasources.ts",
|
|
93
|
+
"tinybird/pipes.ts",
|
|
94
|
+
]);
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
describe("file content creation", () => {
|
|
98
|
+
it("creates datasources.ts with example datasource and InferRow type", async () => {
|
|
99
|
+
await runInit({ cwd: tempDir, skipLogin: true });
|
|
100
|
+
const content = fs.readFileSync(path.join(tempDir, "tinybird", "datasources.ts"), "utf-8");
|
|
101
|
+
expect(content).toContain("defineDatasource");
|
|
102
|
+
expect(content).toContain("export const pageViews");
|
|
103
|
+
expect(content).toContain("InferRow");
|
|
104
|
+
expect(content).toContain("PageViewsRow");
|
|
105
|
+
});
|
|
106
|
+
it("creates pipes.ts with example endpoint and types", async () => {
|
|
107
|
+
await runInit({ cwd: tempDir, skipLogin: true });
|
|
108
|
+
const content = fs.readFileSync(path.join(tempDir, "tinybird", "pipes.ts"), "utf-8");
|
|
109
|
+
expect(content).toContain("defineEndpoint");
|
|
110
|
+
expect(content).toContain("export const topPages");
|
|
111
|
+
expect(content).toContain("InferParams");
|
|
112
|
+
expect(content).toContain("InferOutputRow");
|
|
113
|
+
expect(content).toContain("TopPagesParams");
|
|
114
|
+
expect(content).toContain("TopPagesOutput");
|
|
115
|
+
});
|
|
116
|
+
it("creates client.ts with createTinybirdClient", async () => {
|
|
117
|
+
await runInit({ cwd: tempDir, skipLogin: true });
|
|
118
|
+
const content = fs.readFileSync(path.join(tempDir, "tinybird", "client.ts"), "utf-8");
|
|
119
|
+
expect(content).toContain("createTinybirdClient");
|
|
120
|
+
expect(content).toContain("export const tinybird");
|
|
121
|
+
expect(content).toContain("pageViews");
|
|
122
|
+
expect(content).toContain("topPages");
|
|
123
|
+
});
|
|
124
|
+
it("skips files that already exist", async () => {
|
|
125
|
+
fs.mkdirSync(path.join(tempDir, "tinybird"), { recursive: true });
|
|
126
|
+
fs.writeFileSync(path.join(tempDir, "tinybird", "datasources.ts"), "// existing content");
|
|
127
|
+
const result = await runInit({ cwd: tempDir, skipLogin: true });
|
|
128
|
+
expect(result.success).toBe(true);
|
|
129
|
+
expect(result.skipped).toContain("tinybird/datasources.ts");
|
|
130
|
+
// Verify it wasn't overwritten
|
|
131
|
+
const content = fs.readFileSync(path.join(tempDir, "tinybird", "datasources.ts"), "utf-8");
|
|
132
|
+
expect(content).toBe("// existing content");
|
|
133
|
+
});
|
|
134
|
+
it("overwrites files with force option", async () => {
|
|
135
|
+
fs.mkdirSync(path.join(tempDir, "tinybird"), { recursive: true });
|
|
136
|
+
fs.writeFileSync(path.join(tempDir, "tinybird", "datasources.ts"), "// existing content");
|
|
137
|
+
const result = await runInit({ cwd: tempDir, skipLogin: true, force: true });
|
|
138
|
+
expect(result.success).toBe(true);
|
|
139
|
+
expect(result.created).toContain("tinybird/datasources.ts");
|
|
140
|
+
const content = fs.readFileSync(path.join(tempDir, "tinybird", "datasources.ts"), "utf-8");
|
|
141
|
+
expect(content).toContain("defineDatasource");
|
|
142
|
+
});
|
|
143
|
+
});
|
|
144
|
+
describe("directory creation", () => {
|
|
145
|
+
it("creates tinybird directory if it does not exist", async () => {
|
|
146
|
+
expect(fs.existsSync(path.join(tempDir, "tinybird"))).toBe(false);
|
|
147
|
+
await runInit({ cwd: tempDir, skipLogin: true });
|
|
148
|
+
expect(fs.existsSync(path.join(tempDir, "tinybird"))).toBe(true);
|
|
149
|
+
});
|
|
150
|
+
it("creates src/tinybird directory if project has src folder", async () => {
|
|
151
|
+
fs.mkdirSync(path.join(tempDir, "src"));
|
|
152
|
+
expect(fs.existsSync(path.join(tempDir, "src", "tinybird"))).toBe(false);
|
|
153
|
+
await runInit({ cwd: tempDir, skipLogin: true });
|
|
154
|
+
expect(fs.existsSync(path.join(tempDir, "src", "tinybird"))).toBe(true);
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
});
|
|
158
|
+
//# sourceMappingURL=init.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.test.js","sourceRoot":"","sources":["../../../src/cli/commands/init.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Login command - authenticate with Tinybird via browser
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Login command options
|
|
6
|
+
*/
|
|
7
|
+
export interface RunLoginOptions {
|
|
8
|
+
/** Working directory (defaults to cwd) */
|
|
9
|
+
cwd?: string;
|
|
10
|
+
/** Override the API host (region) */
|
|
11
|
+
apiHost?: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Login command result
|
|
15
|
+
*/
|
|
16
|
+
export interface LoginResult {
|
|
17
|
+
/** Whether login was successful */
|
|
18
|
+
success: boolean;
|
|
19
|
+
/** Workspace name after login */
|
|
20
|
+
workspaceName?: string;
|
|
21
|
+
/** User email */
|
|
22
|
+
userEmail?: string;
|
|
23
|
+
/** API base URL */
|
|
24
|
+
baseUrl?: string;
|
|
25
|
+
/** Error message if failed */
|
|
26
|
+
error?: string;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Run the login command
|
|
30
|
+
*
|
|
31
|
+
* Opens browser for authentication and stores credentials in tinybird.json
|
|
32
|
+
*
|
|
33
|
+
* @param options - Login options
|
|
34
|
+
* @returns Login result
|
|
35
|
+
*/
|
|
36
|
+
export declare function runLogin(options?: RunLoginOptions): Promise<LoginResult>;
|
|
37
|
+
//# sourceMappingURL=login.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/login.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,0CAA0C;IAC1C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,mCAAmC;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,iCAAiC;IACjC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mBAAmB;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;GAOG;AACH,wBAAsB,QAAQ,CAAC,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,WAAW,CAAC,CAsDlF"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Login command - authenticate with Tinybird via browser
|
|
3
|
+
*/
|
|
4
|
+
import * as path from "path";
|
|
5
|
+
import { browserLogin } from "../auth.js";
|
|
6
|
+
import { updateConfig, findConfigFile } from "../config.js";
|
|
7
|
+
import { saveTinybirdToken } from "../env.js";
|
|
8
|
+
/**
|
|
9
|
+
* Run the login command
|
|
10
|
+
*
|
|
11
|
+
* Opens browser for authentication and stores credentials in tinybird.json
|
|
12
|
+
*
|
|
13
|
+
* @param options - Login options
|
|
14
|
+
* @returns Login result
|
|
15
|
+
*/
|
|
16
|
+
export async function runLogin(options = {}) {
|
|
17
|
+
const cwd = options.cwd ?? process.cwd();
|
|
18
|
+
// Find the actual config file (may be in parent directory)
|
|
19
|
+
const configPath = findConfigFile(cwd);
|
|
20
|
+
if (!configPath) {
|
|
21
|
+
return {
|
|
22
|
+
success: false,
|
|
23
|
+
error: "No tinybird.json found. Run 'npx tinybird init' first.",
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
// Get the directory containing the config file for .env.local
|
|
27
|
+
const configDir = path.dirname(configPath);
|
|
28
|
+
const loginOptions = {};
|
|
29
|
+
if (options.apiHost) {
|
|
30
|
+
loginOptions.apiHost = options.apiHost;
|
|
31
|
+
}
|
|
32
|
+
// Perform browser login
|
|
33
|
+
const authResult = await browserLogin(loginOptions);
|
|
34
|
+
// Guard against missing token in auth response
|
|
35
|
+
if (!authResult.success || !authResult.token) {
|
|
36
|
+
return {
|
|
37
|
+
success: false,
|
|
38
|
+
error: authResult.error ?? "Login failed",
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
// Save token to .env.local (in same directory as tinybird.json)
|
|
42
|
+
try {
|
|
43
|
+
saveTinybirdToken(configDir, authResult.token);
|
|
44
|
+
// Update baseUrl in tinybird.json if it changed
|
|
45
|
+
if (authResult.baseUrl) {
|
|
46
|
+
updateConfig(configPath, {
|
|
47
|
+
baseUrl: authResult.baseUrl,
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
return {
|
|
53
|
+
success: false,
|
|
54
|
+
error: `Failed to save credentials: ${error.message}`,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
return {
|
|
58
|
+
success: true,
|
|
59
|
+
workspaceName: authResult.workspaceName,
|
|
60
|
+
userEmail: authResult.userEmail,
|
|
61
|
+
baseUrl: authResult.baseUrl,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=login.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/cli/commands/login.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAsC,MAAM,YAAY,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AA4B9C;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,UAA2B,EAAE;IAC1D,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAEzC,2DAA2D;IAC3D,MAAM,UAAU,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IACvC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,wDAAwD;SAChE,CAAC;IACJ,CAAC;IAED,8DAA8D;IAC9D,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAE3C,MAAM,YAAY,GAAiB,EAAE,CAAC;IACtC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,YAAY,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IACzC,CAAC;IAED,wBAAwB;IACxB,MAAM,UAAU,GAAe,MAAM,YAAY,CAAC,YAAY,CAAC,CAAC;IAEhE,+CAA+C;IAC/C,IAAI,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QAC7C,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,UAAU,CAAC,KAAK,IAAI,cAAc;SAC1C,CAAC;IACJ,CAAC;IAED,gEAAgE;IAChE,IAAI,CAAC;QACH,iBAAiB,CAAC,SAAS,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;QAE/C,gDAAgD;QAChD,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;YACvB,YAAY,CAAC,UAAU,EAAE;gBACvB,OAAO,EAAE,UAAU,CAAC,OAAO;aAC5B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,+BAAgC,KAAe,CAAC,OAAO,EAAE;SACjE,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI;QACb,aAAa,EAAE,UAAU,CAAC,aAAa;QACvC,SAAS,EAAE,UAAU,CAAC,SAAS;QAC/B,OAAO,EAAE,UAAU,CAAC,OAAO;KAC5B,CAAC;AACJ,CAAC"}
|