@tinybirdco/sdk 0.0.12 → 0.0.14
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/dist/api/build.d.ts +3 -1
- package/dist/api/build.d.ts.map +1 -1
- package/dist/api/build.js +2 -0
- package/dist/api/build.js.map +1 -1
- package/dist/api/deploy.d.ts +80 -2
- package/dist/api/deploy.d.ts.map +1 -1
- package/dist/api/deploy.js +82 -38
- package/dist/api/deploy.js.map +1 -1
- package/dist/cli/commands/deploy.d.ts +3 -0
- package/dist/cli/commands/deploy.d.ts.map +1 -1
- package/dist/cli/commands/deploy.js +1 -0
- package/dist/cli/commands/deploy.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +24 -2
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/preview.d.ts +65 -0
- package/dist/cli/commands/preview.d.ts.map +1 -0
- package/dist/cli/commands/preview.js +234 -0
- package/dist/cli/commands/preview.js.map +1 -0
- package/dist/cli/commands/preview.test.d.ts +2 -0
- package/dist/cli/commands/preview.test.d.ts.map +1 -0
- package/dist/cli/commands/preview.test.js +36 -0
- package/dist/cli/commands/preview.test.js.map +1 -0
- package/dist/cli/index.js +198 -41
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/output.d.ts +133 -0
- package/dist/cli/output.d.ts.map +1 -0
- package/dist/cli/output.js +222 -0
- package/dist/cli/output.js.map +1 -0
- package/dist/cli/output.test.d.ts +5 -0
- package/dist/cli/output.test.d.ts.map +1 -0
- package/dist/cli/output.test.js +215 -0
- package/dist/cli/output.test.js.map +1 -0
- package/dist/client/preview.d.ts +36 -0
- package/dist/client/preview.d.ts.map +1 -0
- package/dist/client/preview.js +161 -0
- package/dist/client/preview.js.map +1 -0
- package/dist/client/preview.test.d.ts +2 -0
- package/dist/client/preview.test.d.ts.map +1 -0
- package/dist/client/preview.test.js +137 -0
- package/dist/client/preview.test.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/schema/project.d.ts.map +1 -1
- package/dist/schema/project.js +7 -3
- package/dist/schema/project.js.map +1 -1
- package/package.json +1 -1
- package/src/api/build.ts +5 -1
- package/src/api/deploy.ts +170 -10
- package/src/cli/commands/deploy.ts +4 -1
- package/src/cli/commands/init.ts +24 -2
- package/src/cli/commands/preview.test.ts +42 -0
- package/src/cli/commands/preview.ts +313 -0
- package/src/cli/index.ts +212 -57
- package/src/cli/output.test.ts +259 -0
- package/src/cli/output.ts +268 -0
- package/src/client/preview.test.ts +168 -0
- package/src/client/preview.ts +210 -0
- package/src/index.ts +8 -0
- package/src/schema/project.ts +9 -3
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Preview command - creates ephemeral preview branch and deploys resources
|
|
3
|
+
*/
|
|
4
|
+
import { type DevMode } from "../config.js";
|
|
5
|
+
/**
|
|
6
|
+
* Preview command options
|
|
7
|
+
*/
|
|
8
|
+
export interface PreviewCommandOptions {
|
|
9
|
+
/** Working directory (defaults to cwd) */
|
|
10
|
+
cwd?: string;
|
|
11
|
+
/** Skip pushing to API (just generate) */
|
|
12
|
+
dryRun?: boolean;
|
|
13
|
+
/** Validate deploy with Tinybird API without applying */
|
|
14
|
+
check?: boolean;
|
|
15
|
+
/** Override preview branch name */
|
|
16
|
+
name?: string;
|
|
17
|
+
/** Override the devMode from config */
|
|
18
|
+
devModeOverride?: DevMode;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Preview command result
|
|
22
|
+
*/
|
|
23
|
+
export interface PreviewCommandResult {
|
|
24
|
+
/** Whether the preview was successful */
|
|
25
|
+
success: boolean;
|
|
26
|
+
/** Branch information */
|
|
27
|
+
branch?: {
|
|
28
|
+
name: string;
|
|
29
|
+
id: string;
|
|
30
|
+
token: string;
|
|
31
|
+
url: string;
|
|
32
|
+
created_at: string;
|
|
33
|
+
};
|
|
34
|
+
/** Build statistics */
|
|
35
|
+
build?: {
|
|
36
|
+
datasourceCount: number;
|
|
37
|
+
pipeCount: number;
|
|
38
|
+
};
|
|
39
|
+
/** Deploy result */
|
|
40
|
+
deploy?: {
|
|
41
|
+
result: string;
|
|
42
|
+
};
|
|
43
|
+
/** Error message if failed */
|
|
44
|
+
error?: string;
|
|
45
|
+
/** Duration in milliseconds */
|
|
46
|
+
durationMs: number;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Generate preview branch name with format: tmp_ci_${branch}_${timestamp}
|
|
50
|
+
*
|
|
51
|
+
* @param gitBranch - Current git branch name (or null)
|
|
52
|
+
* @returns Preview branch name
|
|
53
|
+
*/
|
|
54
|
+
export declare function generatePreviewBranchName(gitBranch: string | null): string;
|
|
55
|
+
/**
|
|
56
|
+
* Run the preview command
|
|
57
|
+
*
|
|
58
|
+
* Creates an ephemeral preview branch and deploys resources to it.
|
|
59
|
+
* Preview branches are not cached and are meant for CI/testing.
|
|
60
|
+
*
|
|
61
|
+
* @param options - Preview options
|
|
62
|
+
* @returns Preview command result
|
|
63
|
+
*/
|
|
64
|
+
export declare function runPreview(options?: PreviewCommandOptions): Promise<PreviewCommandResult>;
|
|
65
|
+
//# sourceMappingURL=preview.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preview.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/preview.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAmD,KAAK,OAAO,EAAE,MAAM,cAAc,CAAC;AAa7F;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,0CAA0C;IAC1C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,0CAA0C;IAC1C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,yDAAyD;IACzD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,mCAAmC;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,yCAAyC;IACzC,OAAO,EAAE,OAAO,CAAC;IACjB,yBAAyB;IACzB,MAAM,CAAC,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,CAAC;QACZ,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,uBAAuB;IACvB,KAAK,CAAC,EAAE;QACN,eAAe,EAAE,MAAM,CAAC;QACxB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,oBAAoB;IACpB,MAAM,CAAC,EAAE;QACP,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAI1E;AAED;;;;;;;;GAQG;AACH,wBAAsB,UAAU,CAAC,OAAO,GAAE,qBAA0B,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAqOnG"}
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Preview command - creates ephemeral preview branch and deploys resources
|
|
3
|
+
*/
|
|
4
|
+
import { loadConfig, LOCAL_BASE_URL } from "../config.js";
|
|
5
|
+
import { buildFromInclude } from "../../generator/index.js";
|
|
6
|
+
import { createBranch } from "../../api/branches.js";
|
|
7
|
+
import { deployToMain } from "../../api/deploy.js";
|
|
8
|
+
import { buildToTinybird } from "../../api/build.js";
|
|
9
|
+
import { getLocalTokens, getOrCreateLocalWorkspace, LocalNotRunningError, } from "../../api/local.js";
|
|
10
|
+
import { sanitizeBranchName, getCurrentGitBranch } from "../git.js";
|
|
11
|
+
/**
|
|
12
|
+
* Generate preview branch name with format: tmp_ci_${branch}_${timestamp}
|
|
13
|
+
*
|
|
14
|
+
* @param gitBranch - Current git branch name (or null)
|
|
15
|
+
* @returns Preview branch name
|
|
16
|
+
*/
|
|
17
|
+
export function generatePreviewBranchName(gitBranch) {
|
|
18
|
+
const timestamp = Math.floor(Date.now() / 1000);
|
|
19
|
+
const branchPart = gitBranch ? sanitizeBranchName(gitBranch) : "unknown";
|
|
20
|
+
return `tmp_ci_${branchPart}_${timestamp}`;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Run the preview command
|
|
24
|
+
*
|
|
25
|
+
* Creates an ephemeral preview branch and deploys resources to it.
|
|
26
|
+
* Preview branches are not cached and are meant for CI/testing.
|
|
27
|
+
*
|
|
28
|
+
* @param options - Preview options
|
|
29
|
+
* @returns Preview command result
|
|
30
|
+
*/
|
|
31
|
+
export async function runPreview(options = {}) {
|
|
32
|
+
const startTime = Date.now();
|
|
33
|
+
const cwd = options.cwd ?? process.cwd();
|
|
34
|
+
// Load config
|
|
35
|
+
let config;
|
|
36
|
+
try {
|
|
37
|
+
config = loadConfig(cwd);
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
return {
|
|
41
|
+
success: false,
|
|
42
|
+
error: error.message,
|
|
43
|
+
durationMs: Date.now() - startTime,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
// Get current git branch and generate preview branch name
|
|
47
|
+
const gitBranch = getCurrentGitBranch();
|
|
48
|
+
const previewBranchName = options.name ?? generatePreviewBranchName(gitBranch);
|
|
49
|
+
// Build resources from include paths
|
|
50
|
+
let buildResult;
|
|
51
|
+
try {
|
|
52
|
+
buildResult = await buildFromInclude({
|
|
53
|
+
includePaths: config.include,
|
|
54
|
+
cwd: config.cwd,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
return {
|
|
59
|
+
success: false,
|
|
60
|
+
error: `Build failed: ${error.message}`,
|
|
61
|
+
durationMs: Date.now() - startTime,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
const buildStats = {
|
|
65
|
+
datasourceCount: buildResult.stats.datasourceCount,
|
|
66
|
+
pipeCount: buildResult.stats.pipeCount,
|
|
67
|
+
};
|
|
68
|
+
// If dry run, return without creating branch or deploying
|
|
69
|
+
if (options.dryRun) {
|
|
70
|
+
return {
|
|
71
|
+
success: true,
|
|
72
|
+
branch: {
|
|
73
|
+
name: previewBranchName,
|
|
74
|
+
id: "(dry-run)",
|
|
75
|
+
token: "(dry-run)",
|
|
76
|
+
url: config.baseUrl,
|
|
77
|
+
created_at: new Date().toISOString(),
|
|
78
|
+
},
|
|
79
|
+
build: buildStats,
|
|
80
|
+
durationMs: Date.now() - startTime,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
const debug = !!process.env.TINYBIRD_DEBUG;
|
|
84
|
+
const devMode = options.devModeOverride ?? config.devMode;
|
|
85
|
+
if (debug) {
|
|
86
|
+
console.log(`[debug] devMode: ${devMode}`);
|
|
87
|
+
console.log(`[debug] previewBranchName: ${previewBranchName}`);
|
|
88
|
+
}
|
|
89
|
+
// Handle local mode
|
|
90
|
+
if (devMode === "local") {
|
|
91
|
+
try {
|
|
92
|
+
if (debug) {
|
|
93
|
+
console.log(`[debug] Getting local tokens from ${LOCAL_BASE_URL}/tokens`);
|
|
94
|
+
}
|
|
95
|
+
const localTokens = await getLocalTokens();
|
|
96
|
+
// Create workspace with preview branch name
|
|
97
|
+
if (debug) {
|
|
98
|
+
console.log(`[debug] Creating local workspace: ${previewBranchName}`);
|
|
99
|
+
}
|
|
100
|
+
const { workspace, wasCreated } = await getOrCreateLocalWorkspace(localTokens, previewBranchName);
|
|
101
|
+
if (debug) {
|
|
102
|
+
console.log(`[debug] Workspace ${wasCreated ? "created" : "found"}: ${workspace.name}`);
|
|
103
|
+
}
|
|
104
|
+
// Use /v1/build for local (no deploy endpoint in local)
|
|
105
|
+
const deployResult = await buildToTinybird({
|
|
106
|
+
baseUrl: LOCAL_BASE_URL,
|
|
107
|
+
token: workspace.token,
|
|
108
|
+
}, buildResult.resources);
|
|
109
|
+
if (!deployResult.success) {
|
|
110
|
+
return {
|
|
111
|
+
success: false,
|
|
112
|
+
branch: {
|
|
113
|
+
name: previewBranchName,
|
|
114
|
+
id: workspace.id,
|
|
115
|
+
token: workspace.token,
|
|
116
|
+
url: LOCAL_BASE_URL,
|
|
117
|
+
created_at: new Date().toISOString(),
|
|
118
|
+
},
|
|
119
|
+
build: buildStats,
|
|
120
|
+
error: deployResult.error,
|
|
121
|
+
durationMs: Date.now() - startTime,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
return {
|
|
125
|
+
success: true,
|
|
126
|
+
branch: {
|
|
127
|
+
name: previewBranchName,
|
|
128
|
+
id: workspace.id,
|
|
129
|
+
token: workspace.token,
|
|
130
|
+
url: LOCAL_BASE_URL,
|
|
131
|
+
created_at: new Date().toISOString(),
|
|
132
|
+
},
|
|
133
|
+
build: buildStats,
|
|
134
|
+
deploy: {
|
|
135
|
+
result: deployResult.result,
|
|
136
|
+
},
|
|
137
|
+
durationMs: Date.now() - startTime,
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
catch (error) {
|
|
141
|
+
if (error instanceof LocalNotRunningError) {
|
|
142
|
+
return {
|
|
143
|
+
success: false,
|
|
144
|
+
error: error.message,
|
|
145
|
+
durationMs: Date.now() - startTime,
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
return {
|
|
149
|
+
success: false,
|
|
150
|
+
error: `Local preview failed: ${error.message}`,
|
|
151
|
+
durationMs: Date.now() - startTime,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
// Cloud mode - create branch and deploy using /v1/deploy
|
|
156
|
+
let branch;
|
|
157
|
+
try {
|
|
158
|
+
if (debug) {
|
|
159
|
+
console.log(`[debug] Creating preview branch: ${previewBranchName}`);
|
|
160
|
+
}
|
|
161
|
+
branch = await createBranch({ baseUrl: config.baseUrl, token: config.token }, previewBranchName);
|
|
162
|
+
if (debug) {
|
|
163
|
+
console.log(`[debug] Branch created: ${branch.name} (${branch.id})`);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
catch (error) {
|
|
167
|
+
return {
|
|
168
|
+
success: false,
|
|
169
|
+
error: `Failed to create preview branch: ${error.message}`,
|
|
170
|
+
durationMs: Date.now() - startTime,
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
if (!branch.token) {
|
|
174
|
+
return {
|
|
175
|
+
success: false,
|
|
176
|
+
error: `Preview branch created but no token returned`,
|
|
177
|
+
durationMs: Date.now() - startTime,
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
// Deploy to branch using /v1/deploy (production-like experience)
|
|
181
|
+
let deployResult;
|
|
182
|
+
try {
|
|
183
|
+
if (debug) {
|
|
184
|
+
console.log(`[debug] Deploying to preview branch using branch token`);
|
|
185
|
+
}
|
|
186
|
+
deployResult = await deployToMain({ baseUrl: config.baseUrl, token: branch.token }, buildResult.resources, { check: options.check, allowDestructiveOperations: true });
|
|
187
|
+
}
|
|
188
|
+
catch (error) {
|
|
189
|
+
return {
|
|
190
|
+
success: false,
|
|
191
|
+
branch: {
|
|
192
|
+
name: branch.name,
|
|
193
|
+
id: branch.id,
|
|
194
|
+
token: branch.token,
|
|
195
|
+
url: config.baseUrl,
|
|
196
|
+
created_at: branch.created_at,
|
|
197
|
+
},
|
|
198
|
+
build: buildStats,
|
|
199
|
+
error: `Deploy failed: ${error.message}`,
|
|
200
|
+
durationMs: Date.now() - startTime,
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
if (!deployResult.success) {
|
|
204
|
+
return {
|
|
205
|
+
success: false,
|
|
206
|
+
branch: {
|
|
207
|
+
name: branch.name,
|
|
208
|
+
id: branch.id,
|
|
209
|
+
token: branch.token,
|
|
210
|
+
url: config.baseUrl,
|
|
211
|
+
created_at: branch.created_at,
|
|
212
|
+
},
|
|
213
|
+
build: buildStats,
|
|
214
|
+
error: deployResult.error,
|
|
215
|
+
durationMs: Date.now() - startTime,
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
return {
|
|
219
|
+
success: true,
|
|
220
|
+
branch: {
|
|
221
|
+
name: branch.name,
|
|
222
|
+
id: branch.id,
|
|
223
|
+
token: branch.token,
|
|
224
|
+
url: config.baseUrl,
|
|
225
|
+
created_at: branch.created_at,
|
|
226
|
+
},
|
|
227
|
+
build: buildStats,
|
|
228
|
+
deploy: {
|
|
229
|
+
result: deployResult.result,
|
|
230
|
+
},
|
|
231
|
+
durationMs: Date.now() - startTime,
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
//# sourceMappingURL=preview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preview.js","sourceRoot":"","sources":["../../../src/cli/commands/preview.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preview.test.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/preview.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach, vi } from "vitest";
|
|
2
|
+
import { generatePreviewBranchName } from "./preview.js";
|
|
3
|
+
describe("Preview command", () => {
|
|
4
|
+
describe("generatePreviewBranchName", () => {
|
|
5
|
+
beforeEach(() => {
|
|
6
|
+
vi.useFakeTimers();
|
|
7
|
+
vi.setSystemTime(new Date("2024-02-06T12:00:00Z"));
|
|
8
|
+
});
|
|
9
|
+
it("generates name with branch and timestamp", () => {
|
|
10
|
+
const result = generatePreviewBranchName("feature-branch");
|
|
11
|
+
expect(result).toBe("tmp_ci_feature_branch_1707220800");
|
|
12
|
+
});
|
|
13
|
+
it("sanitizes branch name with slashes", () => {
|
|
14
|
+
const result = generatePreviewBranchName("feature/add-login");
|
|
15
|
+
expect(result).toBe("tmp_ci_feature_add_login_1707220800");
|
|
16
|
+
});
|
|
17
|
+
it("sanitizes branch name with dots", () => {
|
|
18
|
+
const result = generatePreviewBranchName("release.1.0");
|
|
19
|
+
expect(result).toBe("tmp_ci_release_1_0_1707220800");
|
|
20
|
+
});
|
|
21
|
+
it("handles complex branch names", () => {
|
|
22
|
+
const result = generatePreviewBranchName("feature/JIRA-123/add-user-auth");
|
|
23
|
+
expect(result).toBe("tmp_ci_feature_JIRA_123_add_user_auth_1707220800");
|
|
24
|
+
});
|
|
25
|
+
it("uses 'unknown' when branch is null", () => {
|
|
26
|
+
const result = generatePreviewBranchName(null);
|
|
27
|
+
expect(result).toBe("tmp_ci_unknown_1707220800");
|
|
28
|
+
});
|
|
29
|
+
it("uses unix timestamp in seconds", () => {
|
|
30
|
+
// 1707220800 is 2024-02-06T12:00:00Z in seconds
|
|
31
|
+
const result = generatePreviewBranchName("test");
|
|
32
|
+
expect(result).toMatch(/_1707220800$/);
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
//# sourceMappingURL=preview.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preview.test.js","sourceRoot":"","sources":["../../../src/cli/commands/preview.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAEzD,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACzC,UAAU,CAAC,GAAG,EAAE;YACd,EAAE,CAAC,aAAa,EAAE,CAAC;YACnB,EAAE,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,MAAM,GAAG,yBAAyB,CAAC,gBAAgB,CAAC,CAAC;YAC3D,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;YAC5C,MAAM,MAAM,GAAG,yBAAyB,CAAC,mBAAmB,CAAC,CAAC;YAC9D,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;YACzC,MAAM,MAAM,GAAG,yBAAyB,CAAC,aAAa,CAAC,CAAC;YACxD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;YACtC,MAAM,MAAM,GAAG,yBAAyB,CAAC,gCAAgC,CAAC,CAAC;YAC3E,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;QAC1E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;YAC5C,MAAM,MAAM,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC;YAC/C,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;YACxC,gDAAgD;YAChD,MAAM,MAAM,GAAG,yBAAyB,CAAC,MAAM,CAAC,CAAC;YACjD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|