@tinybirdco/sdk 0.0.45 → 0.0.47
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 +8 -8
- package/dist/api/api.d.ts.map +1 -1
- package/dist/api/api.js +8 -3
- package/dist/api/api.js.map +1 -1
- package/dist/api/api.test.js +24 -6
- package/dist/api/api.test.js.map +1 -1
- package/dist/cli/commands/init.d.ts +1 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +6 -2
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/init.test.js +69 -1
- package/dist/cli/commands/init.test.js.map +1 -1
- package/dist/cli/commands/login.d.ts.map +1 -1
- package/dist/cli/commands/login.js +3 -1
- package/dist/cli/commands/login.js.map +1 -1
- package/dist/cli/commands/login.test.js +9 -3
- package/dist/cli/commands/login.test.js.map +1 -1
- package/dist/client/base.d.ts +1 -1
- package/dist/client/base.js +1 -1
- package/dist/generator/datasource.test.js +4 -4
- package/dist/generator/datasource.test.js.map +1 -1
- package/dist/infer/index.d.ts +3 -3
- package/dist/schema/params.d.ts +3 -3
- package/dist/schema/params.d.ts.map +1 -1
- package/dist/schema/params.js +3 -3
- package/dist/schema/params.js.map +1 -1
- package/dist/schema/project.d.ts +3 -3
- package/dist/schema/project.js +3 -3
- package/dist/schema/types.d.ts +8 -8
- package/dist/schema/types.d.ts.map +1 -1
- package/dist/schema/types.js +4 -4
- package/dist/schema/types.js.map +1 -1
- package/extension/tinybird-ts-sdk-extension-0.1.0.vsix +0 -0
- package/package.json +3 -2
- package/src/api/api.test.ts +32 -6
- package/src/api/api.ts +14 -3
- package/src/cli/commands/init.test.ts +89 -1
- package/src/cli/commands/init.ts +10 -2
- package/src/cli/commands/login.test.ts +13 -3
- package/src/cli/commands/login.ts +3 -1
- package/src/client/base.ts +1 -1
- package/src/generator/datasource.test.ts +4 -4
- package/src/infer/index.ts +3 -3
- package/src/schema/params.ts +3 -3
- package/src/schema/project.ts +3 -3
- package/src/schema/types.ts +10 -10
package/dist/schema/types.d.ts
CHANGED
|
@@ -95,14 +95,14 @@ export declare const t: {
|
|
|
95
95
|
readonly decimal: (precision: number, scale: number) => TypeValidator<number, `Decimal(${number}, ${number})`, TypeModifiers>;
|
|
96
96
|
/** Bool - boolean value (true/false) */
|
|
97
97
|
readonly bool: () => TypeValidator<boolean, "Bool", TypeModifiers>;
|
|
98
|
-
/** Date -
|
|
99
|
-
readonly date: () => TypeValidator<
|
|
100
|
-
/** Date32 - extended date range */
|
|
101
|
-
readonly date32: () => TypeValidator<
|
|
102
|
-
/** DateTime -
|
|
103
|
-
readonly dateTime: (timezone?: string) => TypeValidator<
|
|
104
|
-
/** DateTime64 -
|
|
105
|
-
readonly dateTime64: (precision?: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9, timezone?: string) => TypeValidator<
|
|
98
|
+
/** Date - string in YYYY-MM-DD format (e.g. 2024-01-15) */
|
|
99
|
+
readonly date: () => TypeValidator<string, "Date", TypeModifiers>;
|
|
100
|
+
/** Date32 - string in YYYY-MM-DD format (e.g. 2024-01-15, extended date range) */
|
|
101
|
+
readonly date32: () => TypeValidator<string, "Date32", TypeModifiers>;
|
|
102
|
+
/** DateTime - string in YYYY-MM-DD HH:MM:SS format (e.g. 2024-01-15 10:30:00) */
|
|
103
|
+
readonly dateTime: (timezone?: string) => TypeValidator<string, `DateTime('${string}')`, TypeModifiers> | TypeValidator<string, "DateTime", TypeModifiers>;
|
|
104
|
+
/** DateTime64 - string in YYYY-MM-DD HH:MM:SS[.fraction] format (e.g. 2024-01-15 10:30:00.123) */
|
|
105
|
+
readonly dateTime64: (precision?: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9, timezone?: string) => TypeValidator<string, `DateTime64(${number}, '${string}')`, TypeModifiers> | TypeValidator<string, `DateTime64(${number})`, TypeModifiers>;
|
|
106
106
|
/** Array(T) - array of elements of type T */
|
|
107
107
|
readonly array: <TElement extends TypeValidator<unknown, string, TypeModifiers>>(element: TElement) => TypeValidator<TElement["_type"][], `Array(${TElement["_tinybirdType"]})`, TypeModifiers>;
|
|
108
108
|
/** Tuple(T1, T2, ...) - tuple of heterogeneous types */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/schema/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,QAAA,MAAM,eAAe,eAAmC,CAAC;AAEzD;;;GAGG;AACH,MAAM,WAAW,aAAa,CAC5B,KAAK,EACL,aAAa,SAAS,MAAM,GAAG,MAAM,EACrC,UAAU,SAAS,aAAa,GAAG,aAAa;IAEhD,QAAQ,CAAC,CAAC,eAAe,CAAC,EAAE,IAAI,CAAC;IACjC,mCAAmC;IACnC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,0CAA0C;IAC1C,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IACtC,uCAAuC;IACvC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAEhC,gCAAgC;IAChC,QAAQ,IAAI,aAAa,CAAC,KAAK,GAAG,IAAI,EAAE,YAAY,aAAa,GAAG,EAAE,UAAU,GAAG;QAAE,QAAQ,EAAE,IAAI,CAAA;KAAE,CAAC,CAAC;IACvG,6EAA6E;IAC7E,cAAc,IAAI,aAAa,CAAC,KAAK,EAAE,kBAAkB,aAAa,GAAG,EAAE,UAAU,GAAG;QAAE,cAAc,EAAE,IAAI,CAAA;KAAE,CAAC,CAAC;IAClH,yCAAyC;IACzC,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,aAAa,EAAE,UAAU,GAAG;QAAE,UAAU,EAAE,IAAI,CAAC;QAAC,YAAY,EAAE,KAAK,CAAA;KAAE,CAAC,CAAC;IACnH,kCAAkC;IAClC,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CAAC,KAAK,EAAE,aAAa,EAAE,UAAU,GAAG;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC3F;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AA2ED;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,CAAC;IAGZ,iDAAiD;;IAGjD,mEAAmE;mCAC7C,MAAM;IAG5B,mDAAmD;;IAKnD,gDAAgD;;IAGhD,oCAAoC;;IAGpC,oCAAoC;;IAGpC,gFAAgF;;IAGhF,8DAA8D;;IAG9D,8DAA8D;;IAG9D,gDAAgD;;IAGhD,uCAAuC;;IAGvC,uCAAuC;;IAGvC,mFAAmF;;IAGnF,iEAAiE;;IAGjE,iEAAiE;;IAKjE,sCAAsC;;IAGtC,yDAAyD;;IAGzD,6DAA6D;kCACxC,MAAM,SAAS,MAAM;IAO1C,wCAAwC;;IAKxC,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/schema/types.ts"],"names":[],"mappings":"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"}
|
package/dist/schema/types.js
CHANGED
|
@@ -110,15 +110,15 @@ export const t = {
|
|
|
110
110
|
/** Bool - boolean value (true/false) */
|
|
111
111
|
bool: () => createValidator("Bool"),
|
|
112
112
|
// ============ Date/Time Types ============
|
|
113
|
-
/** Date -
|
|
113
|
+
/** Date - string in YYYY-MM-DD format (e.g. 2024-01-15) */
|
|
114
114
|
date: () => createValidator("Date"),
|
|
115
|
-
/** Date32 - extended date range */
|
|
115
|
+
/** Date32 - string in YYYY-MM-DD format (e.g. 2024-01-15, extended date range) */
|
|
116
116
|
date32: () => createValidator("Date32"),
|
|
117
|
-
/** DateTime -
|
|
117
|
+
/** DateTime - string in YYYY-MM-DD HH:MM:SS format (e.g. 2024-01-15 10:30:00) */
|
|
118
118
|
dateTime: (timezone) => timezone
|
|
119
119
|
? createValidator(`DateTime('${timezone}')`)
|
|
120
120
|
: createValidator("DateTime"),
|
|
121
|
-
/** DateTime64 -
|
|
121
|
+
/** DateTime64 - string in YYYY-MM-DD HH:MM:SS[.fraction] format (e.g. 2024-01-15 10:30:00.123) */
|
|
122
122
|
dateTime64: (precision = 3, timezone) => timezone
|
|
123
123
|
? createValidator(`DateTime64(${precision}, '${timezone}')`)
|
|
124
124
|
: createValidator(`DateTime64(${precision})`),
|
package/dist/schema/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/schema/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/schema/types.ts"],"names":[],"mappings":"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"}
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tinybirdco/sdk",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.47",
|
|
4
4
|
"description": "TypeScript SDK for Tinybird Forward - define datasources and pipes as TypeScript",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -42,7 +42,8 @@
|
|
|
42
42
|
"files": [
|
|
43
43
|
"dist",
|
|
44
44
|
"bin",
|
|
45
|
-
"src"
|
|
45
|
+
"src",
|
|
46
|
+
"extension/*.vsix"
|
|
46
47
|
],
|
|
47
48
|
"keywords": [
|
|
48
49
|
"tinybird",
|
package/src/api/api.test.ts
CHANGED
|
@@ -116,7 +116,7 @@ describe("TinybirdApi", () => {
|
|
|
116
116
|
});
|
|
117
117
|
|
|
118
118
|
const result = await api.query<{ pathname: string; views: number }>("top_pages", {
|
|
119
|
-
start_date:
|
|
119
|
+
start_date: "2024-01-01 00:00:00",
|
|
120
120
|
limit: 5,
|
|
121
121
|
tags: ["a", "b"],
|
|
122
122
|
});
|
|
@@ -124,11 +124,24 @@ describe("TinybirdApi", () => {
|
|
|
124
124
|
expect(result.rows).toBe(1);
|
|
125
125
|
expect(result.data[0]).toEqual({ pathname: "/", views: 1 });
|
|
126
126
|
expect(fromParam).toBe(TINYBIRD_FROM_PARAM);
|
|
127
|
-
expect(startDateParam).toBe("2024-01-
|
|
127
|
+
expect(startDateParam).toBe("2024-01-01 00:00:00");
|
|
128
128
|
expect(limitParam).toBe("5");
|
|
129
129
|
expect(tagsParams).toEqual(["a", "b"]);
|
|
130
130
|
});
|
|
131
131
|
|
|
132
|
+
it("throws when query params include Date values", async () => {
|
|
133
|
+
const api = createTinybirdApi({
|
|
134
|
+
baseUrl: BASE_URL,
|
|
135
|
+
token: "p.default-token",
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
await expect(
|
|
139
|
+
api.query("top_pages", {
|
|
140
|
+
start_date: new Date("2024-01-01T00:00:00.000Z"),
|
|
141
|
+
})
|
|
142
|
+
).rejects.toThrow("Date values are not supported for query parameter");
|
|
143
|
+
});
|
|
144
|
+
|
|
132
145
|
it("ingests rows via tinybirdApi.ingest", async () => {
|
|
133
146
|
let datasourceName: string | null = null;
|
|
134
147
|
let waitParam: string | null = null;
|
|
@@ -160,11 +173,11 @@ describe("TinybirdApi", () => {
|
|
|
160
173
|
});
|
|
161
174
|
|
|
162
175
|
const result = await api.ingest("events", {
|
|
163
|
-
timestamp:
|
|
176
|
+
timestamp: "2024-01-01 00:00:00",
|
|
164
177
|
count: 10n,
|
|
165
178
|
payload: new Map([["k", "v"]]),
|
|
166
179
|
nested: {
|
|
167
|
-
when:
|
|
180
|
+
when: "2024-01-02 00:00:00",
|
|
168
181
|
},
|
|
169
182
|
});
|
|
170
183
|
|
|
@@ -174,13 +187,26 @@ describe("TinybirdApi", () => {
|
|
|
174
187
|
expect(fromParam).toBe(TINYBIRD_FROM_PARAM);
|
|
175
188
|
expect(contentType).toBe("application/x-ndjson");
|
|
176
189
|
expect(parsedBody).toEqual({
|
|
177
|
-
timestamp: "2024-01-
|
|
190
|
+
timestamp: "2024-01-01 00:00:00",
|
|
178
191
|
count: "10",
|
|
179
192
|
payload: { k: "v" },
|
|
180
|
-
nested: { when: "2024-01-
|
|
193
|
+
nested: { when: "2024-01-02 00:00:00" },
|
|
181
194
|
});
|
|
182
195
|
});
|
|
183
196
|
|
|
197
|
+
it("throws when ingest payload includes Date values", async () => {
|
|
198
|
+
const api = createTinybirdApi({
|
|
199
|
+
baseUrl: BASE_URL,
|
|
200
|
+
token: "p.default-token",
|
|
201
|
+
});
|
|
202
|
+
|
|
203
|
+
await expect(
|
|
204
|
+
api.ingest("events", {
|
|
205
|
+
timestamp: new Date("2024-01-01T00:00:00.000Z"),
|
|
206
|
+
})
|
|
207
|
+
).rejects.toThrow("Date values are not supported in ingest payloads");
|
|
208
|
+
});
|
|
209
|
+
|
|
184
210
|
it("executes raw SQL via tinybirdApi.sql", async () => {
|
|
185
211
|
let rawSql: string | null = null;
|
|
186
212
|
let contentType: string | null = null;
|
package/src/api/api.ts
CHANGED
|
@@ -212,14 +212,22 @@ export class TinybirdApi {
|
|
|
212
212
|
|
|
213
213
|
if (Array.isArray(value)) {
|
|
214
214
|
for (const item of value) {
|
|
215
|
+
if (item instanceof Date) {
|
|
216
|
+
throw new Error(
|
|
217
|
+
`Date values are not supported for query parameter "${key}". ` +
|
|
218
|
+
"Pass a string in YYYY-MM-DD HH:MM:SS format (or YYYY-MM-DD HH:MM:SS.sss for DateTime64)."
|
|
219
|
+
);
|
|
220
|
+
}
|
|
215
221
|
url.searchParams.append(key, String(item));
|
|
216
222
|
}
|
|
217
223
|
continue;
|
|
218
224
|
}
|
|
219
225
|
|
|
220
226
|
if (value instanceof Date) {
|
|
221
|
-
|
|
222
|
-
|
|
227
|
+
throw new Error(
|
|
228
|
+
`Date values are not supported for query parameter "${key}". ` +
|
|
229
|
+
"Pass a string in YYYY-MM-DD HH:MM:SS format (or YYYY-MM-DD HH:MM:SS.sss for DateTime64)."
|
|
230
|
+
);
|
|
223
231
|
}
|
|
224
232
|
|
|
225
233
|
url.searchParams.set(key, String(value));
|
|
@@ -581,7 +589,10 @@ export class TinybirdApi {
|
|
|
581
589
|
|
|
582
590
|
private serializeValue(value: unknown): unknown {
|
|
583
591
|
if (value instanceof Date) {
|
|
584
|
-
|
|
592
|
+
throw new Error(
|
|
593
|
+
"Date values are not supported in ingest payloads. " +
|
|
594
|
+
"Pass strings in YYYY-MM-DD, YYYY-MM-DD HH:MM:SS, or YYYY-MM-DD HH:MM:SS.sss format."
|
|
595
|
+
);
|
|
585
596
|
}
|
|
586
597
|
|
|
587
598
|
if (value instanceof Map) {
|
|
@@ -2,7 +2,7 @@ import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
|
|
|
2
2
|
import * as fs from "fs";
|
|
3
3
|
import * as path from "path";
|
|
4
4
|
import * as os from "os";
|
|
5
|
-
import { runInit, findExistingDatafiles } from "./init.js";
|
|
5
|
+
import { runInit, findExistingDatafiles, findSyntaxHighlightingVsix } from "./init.js";
|
|
6
6
|
|
|
7
7
|
// Mock the auth module to avoid browser login
|
|
8
8
|
vi.mock("../auth.js", () => ({
|
|
@@ -17,11 +17,23 @@ vi.mock("../region-selector.js", () => ({
|
|
|
17
17
|
}),
|
|
18
18
|
}));
|
|
19
19
|
|
|
20
|
+
import { browserLogin } from "../auth.js";
|
|
21
|
+
import { selectRegion } from "../region-selector.js";
|
|
22
|
+
|
|
23
|
+
const mockedBrowserLogin = vi.mocked(browserLogin);
|
|
24
|
+
const mockedSelectRegion = vi.mocked(selectRegion);
|
|
25
|
+
|
|
20
26
|
describe("Init Command", () => {
|
|
21
27
|
let tempDir: string;
|
|
22
28
|
|
|
23
29
|
beforeEach(() => {
|
|
24
30
|
tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "tinybird-init-test-"));
|
|
31
|
+
vi.clearAllMocks();
|
|
32
|
+
mockedSelectRegion.mockResolvedValue({
|
|
33
|
+
success: true,
|
|
34
|
+
apiHost: "https://api.tinybird.co",
|
|
35
|
+
});
|
|
36
|
+
mockedBrowserLogin.mockResolvedValue({ success: false });
|
|
25
37
|
});
|
|
26
38
|
|
|
27
39
|
afterEach(() => {
|
|
@@ -532,4 +544,80 @@ describe("Init Command", () => {
|
|
|
532
544
|
expect(result.installedTools).toBeUndefined();
|
|
533
545
|
});
|
|
534
546
|
});
|
|
547
|
+
|
|
548
|
+
describe("syntax highlighting VSIX lookup", () => {
|
|
549
|
+
it("finds the packaged VSIX when cwd is outside a git repo", () => {
|
|
550
|
+
const originalCwd = process.cwd();
|
|
551
|
+
const externalCwd = fs.mkdtempSync(path.join(os.tmpdir(), "tinybird-init-cwd-"));
|
|
552
|
+
|
|
553
|
+
try {
|
|
554
|
+
process.chdir(externalCwd);
|
|
555
|
+
const vsixPath = findSyntaxHighlightingVsix(externalCwd);
|
|
556
|
+
|
|
557
|
+
expect(vsixPath).toBeDefined();
|
|
558
|
+
expect(path.basename(vsixPath ?? "")).toMatch(
|
|
559
|
+
/^tinybird-ts-sdk-extension.*\.vsix$/
|
|
560
|
+
);
|
|
561
|
+
} finally {
|
|
562
|
+
process.chdir(originalCwd);
|
|
563
|
+
fs.rmSync(externalCwd, { recursive: true, force: true });
|
|
564
|
+
}
|
|
565
|
+
});
|
|
566
|
+
});
|
|
567
|
+
|
|
568
|
+
describe("login flow", () => {
|
|
569
|
+
it("saves TINYBIRD_URL during init login", async () => {
|
|
570
|
+
mockedBrowserLogin.mockResolvedValue({
|
|
571
|
+
success: true,
|
|
572
|
+
token: "new-token-123",
|
|
573
|
+
baseUrl: "https://api.us-east.tinybird.co",
|
|
574
|
+
workspaceName: "test-workspace",
|
|
575
|
+
});
|
|
576
|
+
|
|
577
|
+
const result = await runInit({
|
|
578
|
+
cwd: tempDir,
|
|
579
|
+
skipLogin: false,
|
|
580
|
+
devMode: "branch",
|
|
581
|
+
clientPath: "lib/tinybird.ts",
|
|
582
|
+
});
|
|
583
|
+
|
|
584
|
+
expect(result.success).toBe(true);
|
|
585
|
+
expect(result.loggedIn).toBe(true);
|
|
586
|
+
|
|
587
|
+
const envContent = fs.readFileSync(
|
|
588
|
+
path.join(tempDir, ".env.local"),
|
|
589
|
+
"utf-8"
|
|
590
|
+
);
|
|
591
|
+
expect(envContent).toContain("TINYBIRD_TOKEN=new-token-123");
|
|
592
|
+
expect(envContent).toContain("TINYBIRD_URL=https://api.us-east.tinybird.co");
|
|
593
|
+
});
|
|
594
|
+
|
|
595
|
+
it("uses selected region as TINYBIRD_URL when auth response has no baseUrl", async () => {
|
|
596
|
+
mockedSelectRegion.mockResolvedValue({
|
|
597
|
+
success: true,
|
|
598
|
+
apiHost: "https://api.eu-west.tinybird.co",
|
|
599
|
+
});
|
|
600
|
+
mockedBrowserLogin.mockResolvedValue({
|
|
601
|
+
success: true,
|
|
602
|
+
token: "new-token-456",
|
|
603
|
+
workspaceName: "test-workspace",
|
|
604
|
+
});
|
|
605
|
+
|
|
606
|
+
const result = await runInit({
|
|
607
|
+
cwd: tempDir,
|
|
608
|
+
skipLogin: false,
|
|
609
|
+
devMode: "branch",
|
|
610
|
+
clientPath: "lib/tinybird.ts",
|
|
611
|
+
});
|
|
612
|
+
|
|
613
|
+
expect(result.success).toBe(true);
|
|
614
|
+
expect(result.loggedIn).toBe(true);
|
|
615
|
+
|
|
616
|
+
const envContent = fs.readFileSync(
|
|
617
|
+
path.join(tempDir, ".env.local"),
|
|
618
|
+
"utf-8"
|
|
619
|
+
);
|
|
620
|
+
expect(envContent).toContain("TINYBIRD_URL=https://api.eu-west.tinybird.co");
|
|
621
|
+
});
|
|
622
|
+
});
|
|
535
623
|
});
|
package/src/cli/commands/init.ts
CHANGED
|
@@ -6,6 +6,7 @@ import * as fs from "fs";
|
|
|
6
6
|
import * as path from "path";
|
|
7
7
|
import * as p from "@clack/prompts";
|
|
8
8
|
import pc from "picocolors";
|
|
9
|
+
import { fileURLToPath } from "url";
|
|
9
10
|
import {
|
|
10
11
|
hasValidToken,
|
|
11
12
|
getRelativeTinybirdDir,
|
|
@@ -16,7 +17,7 @@ import {
|
|
|
16
17
|
type DevMode,
|
|
17
18
|
} from "../config.js";
|
|
18
19
|
import { browserLogin } from "../auth.js";
|
|
19
|
-
import { saveTinybirdToken } from "../env.js";
|
|
20
|
+
import { saveTinybirdBaseUrl, saveTinybirdToken } from "../env.js";
|
|
20
21
|
import { selectRegion } from "../region-selector.js";
|
|
21
22
|
import { getGitRoot } from "../git.js";
|
|
22
23
|
import { fetchAllResources } from "../../api/resources.js";
|
|
@@ -999,6 +1000,7 @@ export async function runInit(options: InitOptions = {}): Promise<InitResult> {
|
|
|
999
1000
|
|
|
1000
1001
|
// Update config with selected region's baseUrl
|
|
1001
1002
|
const baseUrl = authResult.baseUrl ?? regionResult.apiHost;
|
|
1003
|
+
saveTinybirdBaseUrl(cwd, baseUrl);
|
|
1002
1004
|
const currentConfigPath = findExistingConfigPath(cwd);
|
|
1003
1005
|
if (currentConfigPath && currentConfigPath.endsWith(".json")) {
|
|
1004
1006
|
updateConfig(currentConfigPath, { baseUrl });
|
|
@@ -1133,6 +1135,10 @@ const SKILLS_INSTALL_ARGS = [
|
|
|
1133
1135
|
];
|
|
1134
1136
|
const SYNTAX_EXTENSION_DIR = path.join("extension");
|
|
1135
1137
|
const SYNTAX_EXTENSION_PREFIX = "tinybird-ts-sdk-extension";
|
|
1138
|
+
const SDK_MODULE_ROOT = path.resolve(
|
|
1139
|
+
path.dirname(fileURLToPath(import.meta.url)),
|
|
1140
|
+
"../../.."
|
|
1141
|
+
);
|
|
1136
1142
|
|
|
1137
1143
|
async function installSelectedTools(
|
|
1138
1144
|
cwd: string,
|
|
@@ -1294,8 +1300,10 @@ function isCommandAvailable(command: string): boolean {
|
|
|
1294
1300
|
}
|
|
1295
1301
|
}
|
|
1296
1302
|
|
|
1297
|
-
function findSyntaxHighlightingVsix(cwd: string): string | undefined {
|
|
1303
|
+
export function findSyntaxHighlightingVsix(cwd: string): string | undefined {
|
|
1298
1304
|
const searchRoots = new Set<string>();
|
|
1305
|
+
searchRoots.add(SDK_MODULE_ROOT);
|
|
1306
|
+
|
|
1299
1307
|
const gitRoot = getGitRoot();
|
|
1300
1308
|
if (gitRoot) {
|
|
1301
1309
|
searchRoots.add(gitRoot);
|
|
@@ -161,7 +161,7 @@ describe("Login Command", () => {
|
|
|
161
161
|
);
|
|
162
162
|
});
|
|
163
163
|
|
|
164
|
-
it("creates .env.local with token", async () => {
|
|
164
|
+
it("creates .env.local with token and base URL", async () => {
|
|
165
165
|
mockedBrowserLogin.mockResolvedValue({
|
|
166
166
|
success: true,
|
|
167
167
|
token: "new-token-123",
|
|
@@ -178,19 +178,20 @@ describe("Login Command", () => {
|
|
|
178
178
|
"utf-8"
|
|
179
179
|
);
|
|
180
180
|
expect(envContent).toContain("TINYBIRD_TOKEN=new-token-123");
|
|
181
|
+
expect(envContent).toContain("TINYBIRD_URL=https://api.tinybird.co");
|
|
181
182
|
});
|
|
182
183
|
|
|
183
184
|
it("updates existing token in .env.local", async () => {
|
|
184
185
|
// Create existing .env.local with old token
|
|
185
186
|
fs.writeFileSync(
|
|
186
187
|
path.join(tempDir, ".env.local"),
|
|
187
|
-
"TINYBIRD_TOKEN=old-token\nOTHER_VAR=value\n"
|
|
188
|
+
"TINYBIRD_TOKEN=old-token\nTINYBIRD_URL=https://old.tinybird.co\nOTHER_VAR=value\n"
|
|
188
189
|
);
|
|
189
190
|
|
|
190
191
|
mockedBrowserLogin.mockResolvedValue({
|
|
191
192
|
success: true,
|
|
192
193
|
token: "new-token-456",
|
|
193
|
-
baseUrl: "https://api.tinybird.co",
|
|
194
|
+
baseUrl: "https://api.us-east.tinybird.co",
|
|
194
195
|
workspaceName: "test-workspace",
|
|
195
196
|
});
|
|
196
197
|
|
|
@@ -203,8 +204,10 @@ describe("Login Command", () => {
|
|
|
203
204
|
"utf-8"
|
|
204
205
|
);
|
|
205
206
|
expect(envContent).toContain("TINYBIRD_TOKEN=new-token-456");
|
|
207
|
+
expect(envContent).toContain("TINYBIRD_URL=https://api.us-east.tinybird.co");
|
|
206
208
|
expect(envContent).toContain("OTHER_VAR=value");
|
|
207
209
|
expect(envContent).not.toContain("old-token");
|
|
210
|
+
expect(envContent).not.toContain("https://old.tinybird.co");
|
|
208
211
|
});
|
|
209
212
|
|
|
210
213
|
it("appends token to existing .env.local without TINYBIRD_TOKEN", async () => {
|
|
@@ -231,6 +234,7 @@ describe("Login Command", () => {
|
|
|
231
234
|
);
|
|
232
235
|
expect(envContent).toContain("OTHER_VAR=value");
|
|
233
236
|
expect(envContent).toContain("TINYBIRD_TOKEN=new-token-789");
|
|
237
|
+
expect(envContent).toContain("TINYBIRD_URL=https://api.tinybird.co");
|
|
234
238
|
});
|
|
235
239
|
|
|
236
240
|
it("saves .env.local in same directory as tinybird.json (monorepo)", async () => {
|
|
@@ -312,6 +316,12 @@ describe("Login Command", () => {
|
|
|
312
316
|
);
|
|
313
317
|
// Original baseUrl preserved
|
|
314
318
|
expect(config.baseUrl).toBe("https://api.tinybird.co");
|
|
319
|
+
|
|
320
|
+
const envContent = fs.readFileSync(
|
|
321
|
+
path.join(tempDir, ".env.local"),
|
|
322
|
+
"utf-8"
|
|
323
|
+
);
|
|
324
|
+
expect(envContent).toContain("TINYBIRD_URL=https://api.tinybird.co");
|
|
315
325
|
});
|
|
316
326
|
});
|
|
317
327
|
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import * as path from "path";
|
|
6
6
|
import { browserLogin, type LoginOptions, type AuthResult } from "../auth.js";
|
|
7
7
|
import { updateConfig, findConfigFile } from "../config.js";
|
|
8
|
-
import { saveTinybirdToken } from "../env.js";
|
|
8
|
+
import { saveTinybirdBaseUrl, saveTinybirdToken } from "../env.js";
|
|
9
9
|
import { getApiHostWithRegionSelection } from "../region-selector.js";
|
|
10
10
|
|
|
11
11
|
/**
|
|
@@ -87,6 +87,8 @@ export async function runLogin(options: RunLoginOptions = {}): Promise<LoginResu
|
|
|
87
87
|
// Save token to .env.local (in same directory as config file)
|
|
88
88
|
try {
|
|
89
89
|
saveTinybirdToken(configDir, authResult.token);
|
|
90
|
+
const baseUrl = authResult.baseUrl ?? apiHost;
|
|
91
|
+
saveTinybirdBaseUrl(configDir, baseUrl);
|
|
90
92
|
|
|
91
93
|
// Update baseUrl in config file if it changed (only for JSON configs)
|
|
92
94
|
if (authResult.baseUrl && configPath.endsWith(".json")) {
|
package/src/client/base.ts
CHANGED
|
@@ -180,10 +180,10 @@ describe('Datasource Generator', () => {
|
|
|
180
180
|
expect(result.content).toContain('is_deleted Bool `json:$.is_deleted` DEFAULT 0');
|
|
181
181
|
});
|
|
182
182
|
|
|
183
|
-
it('formats
|
|
183
|
+
it('formats string default values for DateTime type', () => {
|
|
184
184
|
const ds = defineDatasource('test_ds', {
|
|
185
185
|
schema: {
|
|
186
|
-
created_at: t.dateTime().default(
|
|
186
|
+
created_at: t.dateTime().default('2024-01-15 10:30:00'),
|
|
187
187
|
},
|
|
188
188
|
});
|
|
189
189
|
|
|
@@ -191,10 +191,10 @@ describe('Datasource Generator', () => {
|
|
|
191
191
|
expect(result.content).toContain("created_at DateTime `json:$.created_at` DEFAULT '2024-01-15 10:30:00'");
|
|
192
192
|
});
|
|
193
193
|
|
|
194
|
-
it('formats
|
|
194
|
+
it('formats string default values for Date type', () => {
|
|
195
195
|
const ds = defineDatasource('test_ds', {
|
|
196
196
|
schema: {
|
|
197
|
-
birth_date: t.date().default(
|
|
197
|
+
birth_date: t.date().default('2024-01-15'),
|
|
198
198
|
},
|
|
199
199
|
});
|
|
200
200
|
|
package/src/infer/index.ts
CHANGED
|
@@ -52,7 +52,7 @@ type InferColumn<T> = T extends TypeValidator<infer U, string, TypeModifiers>
|
|
|
52
52
|
* });
|
|
53
53
|
*
|
|
54
54
|
* type EventRow = InferRow<typeof events>;
|
|
55
|
-
* // { id: string; count: number; timestamp:
|
|
55
|
+
* // { id: string; count: number; timestamp: string }
|
|
56
56
|
* ```
|
|
57
57
|
*/
|
|
58
58
|
export type InferRow<T> = T extends DatasourceDefinition<infer S>
|
|
@@ -156,10 +156,10 @@ export type InferOutputRow<T> = T extends PipeDefinition<ParamsDefinition, infer
|
|
|
156
156
|
* });
|
|
157
157
|
*
|
|
158
158
|
* type Event = InferEvent<typeof events>;
|
|
159
|
-
* // { id: string; timestamp:
|
|
159
|
+
* // { id: string; timestamp: string }
|
|
160
160
|
*
|
|
161
161
|
* // Use for type-safe event ingestion
|
|
162
|
-
* const event: Event = { id: '123', timestamp:
|
|
162
|
+
* const event: Event = { id: '123', timestamp: '2024-01-01 00:00:00' };
|
|
163
163
|
* ```
|
|
164
164
|
*/
|
|
165
165
|
export type InferEvent<T> = InferRow<T>;
|
package/src/schema/params.ts
CHANGED
|
@@ -173,13 +173,13 @@ export const p = {
|
|
|
173
173
|
|
|
174
174
|
// ============ Date/Time Types ============
|
|
175
175
|
|
|
176
|
-
/** Date parameter (YYYY-MM-DD format) */
|
|
176
|
+
/** Date parameter (YYYY-MM-DD format, e.g. 2024-01-15) */
|
|
177
177
|
date: () => createParamValidator<string, "Date">("Date"),
|
|
178
178
|
|
|
179
|
-
/** DateTime parameter (YYYY-MM-DD HH:MM:SS format) */
|
|
179
|
+
/** DateTime parameter (YYYY-MM-DD HH:MM:SS format, e.g. 2024-01-15 10:30:00) */
|
|
180
180
|
dateTime: () => createParamValidator<string, "DateTime">("DateTime"),
|
|
181
181
|
|
|
182
|
-
/** DateTime64 parameter
|
|
182
|
+
/** DateTime64 parameter (YYYY-MM-DD HH:MM:SS[.fraction] format, e.g. 2024-01-15 10:30:00.123) */
|
|
183
183
|
dateTime64: () => createParamValidator<string, "DateTime64">("DateTime64"),
|
|
184
184
|
|
|
185
185
|
// ============ Array Types ============
|
package/src/schema/project.ts
CHANGED
|
@@ -272,13 +272,13 @@ interface TinybirdConstructor {
|
|
|
272
272
|
*
|
|
273
273
|
* // Query a pipe (fully typed)
|
|
274
274
|
* const result = await tinybird.topPages.query({
|
|
275
|
-
* start_date:
|
|
276
|
-
* end_date:
|
|
275
|
+
* start_date: '2024-01-01 00:00:00',
|
|
276
|
+
* end_date: '2024-01-31 23:59:59',
|
|
277
277
|
* });
|
|
278
278
|
*
|
|
279
279
|
* // Ingest an event (fully typed)
|
|
280
280
|
* await tinybird.pageViews.ingest({
|
|
281
|
-
* timestamp:
|
|
281
|
+
* timestamp: '2024-01-15 10:30:00',
|
|
282
282
|
* pathname: '/home',
|
|
283
283
|
* session_id: 'abc123',
|
|
284
284
|
* });
|
package/src/schema/types.ts
CHANGED
|
@@ -203,25 +203,25 @@ export const t = {
|
|
|
203
203
|
|
|
204
204
|
// ============ Date/Time Types ============
|
|
205
205
|
|
|
206
|
-
/** Date -
|
|
207
|
-
date: () => createValidator<
|
|
206
|
+
/** Date - string in YYYY-MM-DD format (e.g. 2024-01-15) */
|
|
207
|
+
date: () => createValidator<string, "Date">("Date"),
|
|
208
208
|
|
|
209
|
-
/** Date32 - extended date range */
|
|
210
|
-
date32: () => createValidator<
|
|
209
|
+
/** Date32 - string in YYYY-MM-DD format (e.g. 2024-01-15, extended date range) */
|
|
210
|
+
date32: () => createValidator<string, "Date32">("Date32"),
|
|
211
211
|
|
|
212
|
-
/** DateTime -
|
|
212
|
+
/** DateTime - string in YYYY-MM-DD HH:MM:SS format (e.g. 2024-01-15 10:30:00) */
|
|
213
213
|
dateTime: (timezone?: string) =>
|
|
214
214
|
timezone
|
|
215
|
-
? createValidator<
|
|
216
|
-
: createValidator<
|
|
215
|
+
? createValidator<string, `DateTime('${string}')`>(`DateTime('${timezone}')`)
|
|
216
|
+
: createValidator<string, "DateTime">("DateTime"),
|
|
217
217
|
|
|
218
|
-
/** DateTime64 -
|
|
218
|
+
/** DateTime64 - string in YYYY-MM-DD HH:MM:SS[.fraction] format (e.g. 2024-01-15 10:30:00.123) */
|
|
219
219
|
dateTime64: (precision: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 = 3, timezone?: string) =>
|
|
220
220
|
timezone
|
|
221
|
-
? createValidator<
|
|
221
|
+
? createValidator<string, `DateTime64(${number}, '${string}')`>(
|
|
222
222
|
`DateTime64(${precision}, '${timezone}')`
|
|
223
223
|
)
|
|
224
|
-
: createValidator<
|
|
224
|
+
: createValidator<string, `DateTime64(${number})`>(`DateTime64(${precision})`),
|
|
225
225
|
|
|
226
226
|
// ============ Complex Types ============
|
|
227
227
|
|