@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,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Branch token storage in ~/.tinybird/branches.json
|
|
3
|
+
*/
|
|
4
|
+
import * as fs from "fs";
|
|
5
|
+
import * as path from "path";
|
|
6
|
+
import * as os from "os";
|
|
7
|
+
/**
|
|
8
|
+
* Get the path to the branches.json file
|
|
9
|
+
*/
|
|
10
|
+
export function getBranchStorePath() {
|
|
11
|
+
return path.join(os.homedir(), ".tinybird", "branches.json");
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Ensure the ~/.tinybird directory exists
|
|
15
|
+
*/
|
|
16
|
+
function ensureTinybirdDir() {
|
|
17
|
+
const tinybirdDir = path.join(os.homedir(), ".tinybird");
|
|
18
|
+
if (!fs.existsSync(tinybirdDir)) {
|
|
19
|
+
try {
|
|
20
|
+
fs.mkdirSync(tinybirdDir, { recursive: true });
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
24
|
+
throw new Error(`Failed to create Tinybird config directory at ${tinybirdDir}: ${message}. ` +
|
|
25
|
+
`Please ensure you have write permissions to your home directory.`);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Load the branch store from disk
|
|
31
|
+
* Returns an empty store if the file doesn't exist
|
|
32
|
+
*/
|
|
33
|
+
export function loadBranchStore() {
|
|
34
|
+
const storePath = getBranchStorePath();
|
|
35
|
+
if (!fs.existsSync(storePath)) {
|
|
36
|
+
return { workspaces: {} };
|
|
37
|
+
}
|
|
38
|
+
try {
|
|
39
|
+
const content = fs.readFileSync(storePath, "utf-8");
|
|
40
|
+
return JSON.parse(content);
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
// If the file is corrupted, return empty store
|
|
44
|
+
return { workspaces: {} };
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Save the branch store to disk
|
|
49
|
+
*/
|
|
50
|
+
export function saveBranchStore(store) {
|
|
51
|
+
ensureTinybirdDir();
|
|
52
|
+
const storePath = getBranchStorePath();
|
|
53
|
+
fs.writeFileSync(storePath, JSON.stringify(store, null, 2), "utf-8");
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Get a cached branch token
|
|
57
|
+
* Returns null if not cached
|
|
58
|
+
*/
|
|
59
|
+
export function getBranchToken(workspaceId, branchName) {
|
|
60
|
+
const store = loadBranchStore();
|
|
61
|
+
return store.workspaces[workspaceId]?.branches[branchName] ?? null;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Cache a branch token
|
|
65
|
+
*/
|
|
66
|
+
export function setBranchToken(workspaceId, branchName, info) {
|
|
67
|
+
const store = loadBranchStore();
|
|
68
|
+
if (!store.workspaces[workspaceId]) {
|
|
69
|
+
store.workspaces[workspaceId] = { branches: {} };
|
|
70
|
+
}
|
|
71
|
+
store.workspaces[workspaceId].branches[branchName] = info;
|
|
72
|
+
saveBranchStore(store);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Remove a cached branch
|
|
76
|
+
*/
|
|
77
|
+
export function removeBranch(workspaceId, branchName) {
|
|
78
|
+
const store = loadBranchStore();
|
|
79
|
+
if (store.workspaces[workspaceId]?.branches[branchName]) {
|
|
80
|
+
delete store.workspaces[workspaceId].branches[branchName];
|
|
81
|
+
saveBranchStore(store);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* List all cached branches for a workspace
|
|
86
|
+
*/
|
|
87
|
+
export function listCachedBranches(workspaceId) {
|
|
88
|
+
const store = loadBranchStore();
|
|
89
|
+
return store.workspaces[workspaceId]?.branches ?? {};
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=branch-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"branch-store.js","sourceRoot":"","sources":["../../src/cli/branch-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"branch-store.test.d.ts","sourceRoot":"","sources":["../../src/cli/branch-store.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach, afterEach } from "vitest";
|
|
2
|
+
import * as fs from "fs";
|
|
3
|
+
import * as path from "path";
|
|
4
|
+
import * as os from "os";
|
|
5
|
+
import { loadBranchStore, saveBranchStore, getBranchToken, setBranchToken, removeBranch, listCachedBranches, } from "./branch-store.js";
|
|
6
|
+
describe("Branch store", () => {
|
|
7
|
+
let originalHome;
|
|
8
|
+
let testHomeDir;
|
|
9
|
+
beforeEach(() => {
|
|
10
|
+
// Create unique test directory for each test
|
|
11
|
+
testHomeDir = path.join(os.tmpdir(), ".tinybird-test-" + Date.now() + "-" + Math.random().toString(36).slice(2));
|
|
12
|
+
fs.mkdirSync(testHomeDir, { recursive: true });
|
|
13
|
+
// Mock HOME to use test directory
|
|
14
|
+
originalHome = process.env.HOME;
|
|
15
|
+
process.env.HOME = testHomeDir;
|
|
16
|
+
});
|
|
17
|
+
afterEach(() => {
|
|
18
|
+
// Restore original HOME
|
|
19
|
+
if (originalHome !== undefined) {
|
|
20
|
+
process.env.HOME = originalHome;
|
|
21
|
+
}
|
|
22
|
+
// Clean up test directory
|
|
23
|
+
try {
|
|
24
|
+
fs.rmSync(testHomeDir, { recursive: true });
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
// Ignore cleanup errors
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
describe("loadBranchStore", () => {
|
|
31
|
+
it("returns empty store when file does not exist", () => {
|
|
32
|
+
const store = loadBranchStore();
|
|
33
|
+
expect(store).toEqual({ workspaces: {} });
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
describe("saveBranchStore and loadBranchStore", () => {
|
|
37
|
+
it("round-trips store data", () => {
|
|
38
|
+
const store = {
|
|
39
|
+
workspaces: {
|
|
40
|
+
ws_123: {
|
|
41
|
+
branches: {
|
|
42
|
+
"feature-a": {
|
|
43
|
+
id: "branch-id-1",
|
|
44
|
+
token: "p.token1",
|
|
45
|
+
createdAt: "2024-01-01T00:00:00Z",
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
saveBranchStore(store);
|
|
52
|
+
const loaded = loadBranchStore();
|
|
53
|
+
expect(loaded).toEqual(store);
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
describe("getBranchToken and setBranchToken", () => {
|
|
57
|
+
it("returns null for non-existent branch", () => {
|
|
58
|
+
const result = getBranchToken("ws_123", "non-existent");
|
|
59
|
+
expect(result).toBeNull();
|
|
60
|
+
});
|
|
61
|
+
it("sets and gets branch token", () => {
|
|
62
|
+
const info = {
|
|
63
|
+
id: "branch-id-2",
|
|
64
|
+
token: "p.token2",
|
|
65
|
+
createdAt: "2024-01-02T00:00:00Z",
|
|
66
|
+
};
|
|
67
|
+
setBranchToken("ws_456", "feature-b", info);
|
|
68
|
+
const result = getBranchToken("ws_456", "feature-b");
|
|
69
|
+
expect(result).toEqual(info);
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
describe("removeBranch", () => {
|
|
73
|
+
it("removes a cached branch", () => {
|
|
74
|
+
const info = {
|
|
75
|
+
id: "branch-id-3",
|
|
76
|
+
token: "p.token3",
|
|
77
|
+
createdAt: "2024-01-03T00:00:00Z",
|
|
78
|
+
};
|
|
79
|
+
setBranchToken("ws_789", "feature-c", info);
|
|
80
|
+
expect(getBranchToken("ws_789", "feature-c")).toEqual(info);
|
|
81
|
+
removeBranch("ws_789", "feature-c");
|
|
82
|
+
expect(getBranchToken("ws_789", "feature-c")).toBeNull();
|
|
83
|
+
});
|
|
84
|
+
it("does nothing for non-existent branch", () => {
|
|
85
|
+
// Should not throw
|
|
86
|
+
removeBranch("ws_nonexistent", "no-branch");
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
describe("listCachedBranches", () => {
|
|
90
|
+
it("returns empty object for workspace with no branches", () => {
|
|
91
|
+
const result = listCachedBranches("ws_empty");
|
|
92
|
+
expect(result).toEqual({});
|
|
93
|
+
});
|
|
94
|
+
it("returns all branches for a workspace", () => {
|
|
95
|
+
const info1 = {
|
|
96
|
+
id: "branch-id-4",
|
|
97
|
+
token: "p.token4",
|
|
98
|
+
createdAt: "2024-01-04T00:00:00Z",
|
|
99
|
+
};
|
|
100
|
+
const info2 = {
|
|
101
|
+
id: "branch-id-5",
|
|
102
|
+
token: "p.token5",
|
|
103
|
+
createdAt: "2024-01-05T00:00:00Z",
|
|
104
|
+
};
|
|
105
|
+
setBranchToken("ws_list", "feature-d", info1);
|
|
106
|
+
setBranchToken("ws_list", "feature-e", info2);
|
|
107
|
+
const result = listCachedBranches("ws_list");
|
|
108
|
+
expect(result).toEqual({
|
|
109
|
+
"feature-d": info1,
|
|
110
|
+
"feature-e": info2,
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
//# sourceMappingURL=branch-store.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"branch-store.test.js","sourceRoot":"","sources":["../../src/cli/branch-store.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Branch management commands
|
|
3
|
+
*/
|
|
4
|
+
import { type TinybirdBranch } from "../../api/branches.js";
|
|
5
|
+
/**
|
|
6
|
+
* Branch command options
|
|
7
|
+
*/
|
|
8
|
+
export interface BranchCommandOptions {
|
|
9
|
+
/** Working directory (defaults to cwd) */
|
|
10
|
+
cwd?: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Result of listing branches
|
|
14
|
+
*/
|
|
15
|
+
export interface BranchListResult {
|
|
16
|
+
/** Whether the operation was successful */
|
|
17
|
+
success: boolean;
|
|
18
|
+
/** List of branches */
|
|
19
|
+
branches?: TinybirdBranch[];
|
|
20
|
+
/** Error message if failed */
|
|
21
|
+
error?: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Result of getting branch status
|
|
25
|
+
*/
|
|
26
|
+
export interface BranchStatusResult {
|
|
27
|
+
/** Whether the operation was successful */
|
|
28
|
+
success: boolean;
|
|
29
|
+
/** Current git branch */
|
|
30
|
+
gitBranch: string | null;
|
|
31
|
+
/** Sanitized Tinybird branch name */
|
|
32
|
+
tinybirdBranchName: string | null;
|
|
33
|
+
/** Whether we're on the main branch */
|
|
34
|
+
isMainBranch: boolean;
|
|
35
|
+
/** Tinybird branch info (if exists) */
|
|
36
|
+
tinybirdBranch?: TinybirdBranch;
|
|
37
|
+
/** Whether a cached token exists */
|
|
38
|
+
hasCachedToken: boolean;
|
|
39
|
+
/** Error message if failed */
|
|
40
|
+
error?: string;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Result of deleting a branch
|
|
44
|
+
*/
|
|
45
|
+
export interface BranchDeleteResult {
|
|
46
|
+
/** Whether the operation was successful */
|
|
47
|
+
success: boolean;
|
|
48
|
+
/** Error message if failed */
|
|
49
|
+
error?: string;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* List all Tinybird branches
|
|
53
|
+
*
|
|
54
|
+
* @param options - Command options
|
|
55
|
+
* @returns List result
|
|
56
|
+
*/
|
|
57
|
+
export declare function runBranchList(options?: BranchCommandOptions): Promise<BranchListResult>;
|
|
58
|
+
/**
|
|
59
|
+
* Get current branch status
|
|
60
|
+
*
|
|
61
|
+
* @param options - Command options
|
|
62
|
+
* @returns Status result
|
|
63
|
+
*/
|
|
64
|
+
export declare function runBranchStatus(options?: BranchCommandOptions): Promise<BranchStatusResult>;
|
|
65
|
+
/**
|
|
66
|
+
* Delete a Tinybird branch
|
|
67
|
+
*
|
|
68
|
+
* @param name - Branch name to delete
|
|
69
|
+
* @param options - Command options
|
|
70
|
+
* @returns Delete result
|
|
71
|
+
*/
|
|
72
|
+
export declare function runBranchDelete(name: string, options?: BranchCommandOptions): Promise<BranchDeleteResult>;
|
|
73
|
+
/**
|
|
74
|
+
* List cached branches (requires API call to get workspace ID)
|
|
75
|
+
*/
|
|
76
|
+
export declare function runBranchListCached(options?: BranchCommandOptions): Promise<{
|
|
77
|
+
branches: Record<string, {
|
|
78
|
+
id: string;
|
|
79
|
+
createdAt: string;
|
|
80
|
+
}>;
|
|
81
|
+
}>;
|
|
82
|
+
//# sourceMappingURL=branch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"branch.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/branch.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAIL,KAAK,cAAc,EAEpB,MAAM,uBAAuB,CAAC;AAQ/B;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,0CAA0C;IAC1C,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,2CAA2C;IAC3C,OAAO,EAAE,OAAO,CAAC;IACjB,uBAAuB;IACvB,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAC;IAC5B,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,2CAA2C;IAC3C,OAAO,EAAE,OAAO,CAAC;IACjB,yBAAyB;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,qCAAqC;IACrC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,uCAAuC;IACvC,YAAY,EAAE,OAAO,CAAC;IACtB,uCAAuC;IACvC,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,oCAAoC;IACpC,cAAc,EAAE,OAAO,CAAC;IACxB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,2CAA2C;IAC3C,OAAO,EAAE,OAAO,CAAC;IACjB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,gBAAgB,CAAC,CA6B3B;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,kBAAkB,CAAC,CA8F7B;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,kBAAkB,CAAC,CA0C7B;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAkC1E"}
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Branch management commands
|
|
3
|
+
*/
|
|
4
|
+
import { loadConfig } from "../config.js";
|
|
5
|
+
import { listBranches, getBranch, deleteBranch, BranchApiError, } from "../../api/branches.js";
|
|
6
|
+
import { getWorkspace } from "../../api/workspaces.js";
|
|
7
|
+
import { getBranchToken, removeBranch as removeCachedBranch, listCachedBranches, } from "../branch-store.js";
|
|
8
|
+
/**
|
|
9
|
+
* List all Tinybird branches
|
|
10
|
+
*
|
|
11
|
+
* @param options - Command options
|
|
12
|
+
* @returns List result
|
|
13
|
+
*/
|
|
14
|
+
export async function runBranchList(options = {}) {
|
|
15
|
+
const cwd = options.cwd ?? process.cwd();
|
|
16
|
+
let config;
|
|
17
|
+
try {
|
|
18
|
+
config = loadConfig(cwd);
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
return {
|
|
22
|
+
success: false,
|
|
23
|
+
error: error.message,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
try {
|
|
27
|
+
const branches = await listBranches({
|
|
28
|
+
baseUrl: config.baseUrl,
|
|
29
|
+
token: config.token,
|
|
30
|
+
});
|
|
31
|
+
return {
|
|
32
|
+
success: true,
|
|
33
|
+
branches,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
return {
|
|
38
|
+
success: false,
|
|
39
|
+
error: error.message,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Get current branch status
|
|
45
|
+
*
|
|
46
|
+
* @param options - Command options
|
|
47
|
+
* @returns Status result
|
|
48
|
+
*/
|
|
49
|
+
export async function runBranchStatus(options = {}) {
|
|
50
|
+
const cwd = options.cwd ?? process.cwd();
|
|
51
|
+
let config;
|
|
52
|
+
try {
|
|
53
|
+
config = loadConfig(cwd);
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
return {
|
|
57
|
+
success: false,
|
|
58
|
+
gitBranch: null,
|
|
59
|
+
tinybirdBranchName: null,
|
|
60
|
+
isMainBranch: false,
|
|
61
|
+
hasCachedToken: false,
|
|
62
|
+
error: error.message,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
const gitBranch = config.gitBranch;
|
|
66
|
+
const tinybirdBranchName = config.tinybirdBranch; // Sanitized name
|
|
67
|
+
const isMainBranch = config.isMainBranch;
|
|
68
|
+
// Fetch the workspace ID from the API
|
|
69
|
+
let workspaceId;
|
|
70
|
+
try {
|
|
71
|
+
const workspace = await getWorkspace({
|
|
72
|
+
baseUrl: config.baseUrl,
|
|
73
|
+
token: config.token,
|
|
74
|
+
});
|
|
75
|
+
workspaceId = workspace.id;
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
return {
|
|
79
|
+
success: false,
|
|
80
|
+
gitBranch,
|
|
81
|
+
tinybirdBranchName,
|
|
82
|
+
isMainBranch,
|
|
83
|
+
hasCachedToken: false,
|
|
84
|
+
error: error.message,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
// Check for cached token (use sanitized name)
|
|
88
|
+
const cachedBranch = tinybirdBranchName ? getBranchToken(workspaceId, tinybirdBranchName) : null;
|
|
89
|
+
const hasCachedToken = cachedBranch !== null;
|
|
90
|
+
// If on main branch, just return status
|
|
91
|
+
if (isMainBranch || !tinybirdBranchName) {
|
|
92
|
+
return {
|
|
93
|
+
success: true,
|
|
94
|
+
gitBranch,
|
|
95
|
+
tinybirdBranchName,
|
|
96
|
+
isMainBranch,
|
|
97
|
+
hasCachedToken,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
// Try to get the Tinybird branch info (use sanitized name)
|
|
101
|
+
try {
|
|
102
|
+
const tinybirdBranch = await getBranch({
|
|
103
|
+
baseUrl: config.baseUrl,
|
|
104
|
+
token: config.token,
|
|
105
|
+
}, tinybirdBranchName);
|
|
106
|
+
return {
|
|
107
|
+
success: true,
|
|
108
|
+
gitBranch,
|
|
109
|
+
tinybirdBranchName,
|
|
110
|
+
isMainBranch,
|
|
111
|
+
tinybirdBranch,
|
|
112
|
+
hasCachedToken,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
// If 404, branch doesn't exist yet
|
|
117
|
+
if (error instanceof BranchApiError && error.status === 404) {
|
|
118
|
+
return {
|
|
119
|
+
success: true,
|
|
120
|
+
gitBranch,
|
|
121
|
+
tinybirdBranchName,
|
|
122
|
+
isMainBranch,
|
|
123
|
+
hasCachedToken,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
return {
|
|
127
|
+
success: false,
|
|
128
|
+
gitBranch,
|
|
129
|
+
tinybirdBranchName,
|
|
130
|
+
isMainBranch,
|
|
131
|
+
hasCachedToken,
|
|
132
|
+
error: error.message,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Delete a Tinybird branch
|
|
138
|
+
*
|
|
139
|
+
* @param name - Branch name to delete
|
|
140
|
+
* @param options - Command options
|
|
141
|
+
* @returns Delete result
|
|
142
|
+
*/
|
|
143
|
+
export async function runBranchDelete(name, options = {}) {
|
|
144
|
+
const cwd = options.cwd ?? process.cwd();
|
|
145
|
+
let config;
|
|
146
|
+
try {
|
|
147
|
+
config = loadConfig(cwd);
|
|
148
|
+
}
|
|
149
|
+
catch (error) {
|
|
150
|
+
return {
|
|
151
|
+
success: false,
|
|
152
|
+
error: error.message,
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
try {
|
|
156
|
+
// Fetch the workspace ID from the API
|
|
157
|
+
const workspace = await getWorkspace({
|
|
158
|
+
baseUrl: config.baseUrl,
|
|
159
|
+
token: config.token,
|
|
160
|
+
});
|
|
161
|
+
const workspaceId = workspace.id;
|
|
162
|
+
// Delete from Tinybird API
|
|
163
|
+
await deleteBranch({
|
|
164
|
+
baseUrl: config.baseUrl,
|
|
165
|
+
token: config.token,
|
|
166
|
+
}, name);
|
|
167
|
+
// Remove from local cache
|
|
168
|
+
removeCachedBranch(workspaceId, name);
|
|
169
|
+
return {
|
|
170
|
+
success: true,
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
catch (error) {
|
|
174
|
+
return {
|
|
175
|
+
success: false,
|
|
176
|
+
error: error.message,
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* List cached branches (requires API call to get workspace ID)
|
|
182
|
+
*/
|
|
183
|
+
export async function runBranchListCached(options = {}) {
|
|
184
|
+
const cwd = options.cwd ?? process.cwd();
|
|
185
|
+
let config;
|
|
186
|
+
try {
|
|
187
|
+
config = loadConfig(cwd);
|
|
188
|
+
}
|
|
189
|
+
catch {
|
|
190
|
+
return { branches: {} };
|
|
191
|
+
}
|
|
192
|
+
// Fetch the workspace ID from the API
|
|
193
|
+
let workspaceId;
|
|
194
|
+
try {
|
|
195
|
+
const workspace = await getWorkspace({
|
|
196
|
+
baseUrl: config.baseUrl,
|
|
197
|
+
token: config.token,
|
|
198
|
+
});
|
|
199
|
+
workspaceId = workspace.id;
|
|
200
|
+
}
|
|
201
|
+
catch {
|
|
202
|
+
return { branches: {} };
|
|
203
|
+
}
|
|
204
|
+
const cached = listCachedBranches(workspaceId);
|
|
205
|
+
// Return without tokens for security
|
|
206
|
+
const branches = {};
|
|
207
|
+
for (const [name, info] of Object.entries(cached)) {
|
|
208
|
+
branches[name] = {
|
|
209
|
+
id: info.id,
|
|
210
|
+
createdAt: info.createdAt,
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
return { branches };
|
|
214
|
+
}
|
|
215
|
+
//# sourceMappingURL=branch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"branch.js","sourceRoot":"","sources":["../../../src/cli/commands/branch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Build command - generates and pushes resources to Tinybird
|
|
3
|
+
*/
|
|
4
|
+
import { type BuildFromIncludeResult } from "../../generator/index.js";
|
|
5
|
+
import { type BuildApiResult } from "../../api/build.js";
|
|
6
|
+
/**
|
|
7
|
+
* Build command options
|
|
8
|
+
*/
|
|
9
|
+
export interface BuildCommandOptions {
|
|
10
|
+
/** Working directory (defaults to cwd) */
|
|
11
|
+
cwd?: string;
|
|
12
|
+
/** Skip pushing to API (just generate) */
|
|
13
|
+
dryRun?: boolean;
|
|
14
|
+
/** Override the token from config (used for branch tokens) */
|
|
15
|
+
tokenOverride?: string;
|
|
16
|
+
/** Use /v1/deploy instead of /v1/build (for main branch) */
|
|
17
|
+
useDeployEndpoint?: boolean;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Build command result
|
|
21
|
+
*/
|
|
22
|
+
export interface BuildCommandResult {
|
|
23
|
+
/** Whether the build was successful */
|
|
24
|
+
success: boolean;
|
|
25
|
+
/** Build result with generated resources */
|
|
26
|
+
build?: BuildFromIncludeResult;
|
|
27
|
+
/** Build API result (if not dry run) */
|
|
28
|
+
deploy?: BuildApiResult;
|
|
29
|
+
/** Error message if failed */
|
|
30
|
+
error?: string;
|
|
31
|
+
/** Duration in milliseconds */
|
|
32
|
+
durationMs: number;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Run the build command
|
|
36
|
+
*
|
|
37
|
+
* Loads the schema, generates resources, and pushes to Tinybird API.
|
|
38
|
+
*
|
|
39
|
+
* @param options - Build options
|
|
40
|
+
* @returns Build command result
|
|
41
|
+
*/
|
|
42
|
+
export declare function runBuild(options?: BuildCommandOptions): Promise<BuildCommandResult>;
|
|
43
|
+
//# sourceMappingURL=build.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/build.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAoB,KAAK,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AACzF,OAAO,EAAmB,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAI1E;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,0CAA0C;IAC1C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,0CAA0C;IAC1C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,8DAA8D;IAC9D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,4DAA4D;IAC5D,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,uCAAuC;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,4CAA4C;IAC5C,KAAK,CAAC,EAAE,sBAAsB,CAAC;IAC/B,wCAAwC;IACxC,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,wBAAsB,QAAQ,CAAC,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAsI7F"}
|