@kardoe/quickback 0.4.0
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/commands/compile.d.ts +18 -0
- package/dist/commands/compile.d.ts.map +1 -0
- package/dist/commands/compile.js +144 -0
- package/dist/commands/compile.js.map +1 -0
- package/dist/commands/create.d.ts +18 -0
- package/dist/commands/create.d.ts.map +1 -0
- package/dist/commands/create.js +669 -0
- package/dist/commands/create.js.map +1 -0
- package/dist/commands/init.d.ts +6 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +383 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/login.d.ts +8 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +190 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.d.ts +7 -0
- package/dist/commands/logout.d.ts.map +1 -0
- package/dist/commands/logout.js +19 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/whoami.d.ts +7 -0
- package/dist/commands/whoami.d.ts.map +1 -0
- package/dist/commands/whoami.js +37 -0
- package/dist/commands/whoami.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +140 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/api-client.d.ts +82 -0
- package/dist/lib/api-client.d.ts.map +1 -0
- package/dist/lib/api-client.js +59 -0
- package/dist/lib/api-client.js.map +1 -0
- package/dist/lib/auth.d.ts +44 -0
- package/dist/lib/auth.d.ts.map +1 -0
- package/dist/lib/auth.js +85 -0
- package/dist/lib/auth.js.map +1 -0
- package/dist/lib/compiler-stubs.d.ts +66 -0
- package/dist/lib/compiler-stubs.d.ts.map +1 -0
- package/dist/lib/compiler-stubs.js +75 -0
- package/dist/lib/compiler-stubs.js.map +1 -0
- package/dist/lib/file-loader.d.ts +73 -0
- package/dist/lib/file-loader.d.ts.map +1 -0
- package/dist/lib/file-loader.js +291 -0
- package/dist/lib/file-loader.js.map +1 -0
- package/dist/lib/file-writer.d.ts +33 -0
- package/dist/lib/file-writer.d.ts.map +1 -0
- package/dist/lib/file-writer.js +110 -0
- package/dist/lib/file-writer.js.map +1 -0
- package/dist/lib/helpers.d.ts +39 -0
- package/dist/lib/helpers.d.ts.map +1 -0
- package/dist/lib/helpers.js +299 -0
- package/dist/lib/helpers.js.map +1 -0
- package/dist/lib/shell.d.ts +15 -0
- package/dist/lib/shell.d.ts.map +1 -0
- package/dist/lib/shell.js +32 -0
- package/dist/lib/shell.js.map +1 -0
- package/dist/templates/registry.d.ts +36 -0
- package/dist/templates/registry.d.ts.map +1 -0
- package/dist/templates/registry.js +143 -0
- package/dist/templates/registry.js.map +1 -0
- package/package.json +37 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Logout Command
|
|
3
|
+
*
|
|
4
|
+
* Clears stored authentication credentials.
|
|
5
|
+
*/
|
|
6
|
+
import pc from 'picocolors';
|
|
7
|
+
import { clearCredentials, isLoggedIn } from '../lib/auth.js';
|
|
8
|
+
export async function logout() {
|
|
9
|
+
console.log(pc.bold('\nQuickback Logout\n'));
|
|
10
|
+
const loggedIn = await isLoggedIn();
|
|
11
|
+
if (!loggedIn) {
|
|
12
|
+
console.log(pc.gray('You are not logged in.'));
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
await clearCredentials();
|
|
16
|
+
console.log(pc.green('Logged out successfully.'));
|
|
17
|
+
console.log(pc.gray('Your credentials have been removed.'));
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=logout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logout.js","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE9D,MAAM,CAAC,KAAK,UAAU,MAAM;IAC1B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;IAE7C,MAAM,QAAQ,GAAG,MAAM,UAAU,EAAE,CAAC;IAEpC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;QAC/C,OAAO;IACT,CAAC;IAED,MAAM,gBAAgB,EAAE,CAAC;IAEzB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC,CAAC;AAC9D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"whoami.d.ts","sourceRoot":"","sources":["../../src/commands/whoami.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,wBAAsB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CA+B5C"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Whoami Command
|
|
3
|
+
*
|
|
4
|
+
* Shows current authentication status and user info.
|
|
5
|
+
*/
|
|
6
|
+
import pc from 'picocolors';
|
|
7
|
+
import { isLoggedIn, getStoredUser } from '../lib/auth.js';
|
|
8
|
+
import { checkHealth } from '../lib/api-client.js';
|
|
9
|
+
export async function whoami() {
|
|
10
|
+
console.log(pc.bold('\nQuickback Account\n'));
|
|
11
|
+
const loggedIn = await isLoggedIn();
|
|
12
|
+
if (!loggedIn) {
|
|
13
|
+
console.log(pc.yellow('Not logged in'));
|
|
14
|
+
console.log(pc.gray('\nRun `quickback login` to authenticate.'));
|
|
15
|
+
console.log(pc.gray('Free tier: cloudflare, bun templates'));
|
|
16
|
+
console.log(pc.gray('Pro tier: All templates + priority support'));
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
const user = await getStoredUser();
|
|
20
|
+
console.log(pc.green('Logged in'));
|
|
21
|
+
console.log('');
|
|
22
|
+
console.log(` ${pc.gray('Email:')} ${user?.email || 'Unknown'}`);
|
|
23
|
+
if (user?.name) {
|
|
24
|
+
console.log(` ${pc.gray('Name:')} ${user.name}`);
|
|
25
|
+
}
|
|
26
|
+
console.log(` ${pc.gray('Tier:')} ${pc.cyan('Pro')}`);
|
|
27
|
+
console.log('');
|
|
28
|
+
// Check API connectivity
|
|
29
|
+
try {
|
|
30
|
+
const health = await checkHealth();
|
|
31
|
+
console.log(pc.gray(`API: ${pc.green('●')} Connected (v${health.version})`));
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
console.log(pc.gray(`API: ${pc.red('●')} Disconnected`));
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=whoami.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../src/commands/whoami.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,aAAa,EAAkB,MAAM,gBAAgB,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,MAAM,CAAC,KAAK,UAAU,MAAM;IAC1B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC;IAE9C,MAAM,QAAQ,GAAG,MAAM,UAAU,EAAE,CAAC;IAEpC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC,CAAC;QACjE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC,CAAC;QACnE,OAAO;IACT,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,aAAa,EAAE,CAAC;IAEnC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,KAAK,IAAI,SAAS,EAAE,CAAC,CAAC;IAClE,IAAI,IAAI,EAAE,IAAI,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACxD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,yBAAyB;IACzB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,WAAW,EAAE,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;IAC/E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC;IAC3D,CAAC;AACH,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Quickback CLI
|
|
4
|
+
*
|
|
5
|
+
* A thin client that calls the remote compiler API.
|
|
6
|
+
* All compilation logic lives on the server - this CLI just handles:
|
|
7
|
+
* - File I/O (reading config, writing output)
|
|
8
|
+
* - User interaction (prompts, spinners)
|
|
9
|
+
* - Authentication (login, logout)
|
|
10
|
+
*/
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;GAQG"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Quickback CLI
|
|
4
|
+
*
|
|
5
|
+
* A thin client that calls the remote compiler API.
|
|
6
|
+
* All compilation logic lives on the server - this CLI just handles:
|
|
7
|
+
* - File I/O (reading config, writing output)
|
|
8
|
+
* - User interaction (prompts, spinners)
|
|
9
|
+
* - Authentication (login, logout)
|
|
10
|
+
*/
|
|
11
|
+
import { readFileSync } from "fs";
|
|
12
|
+
import { join } from "path";
|
|
13
|
+
import pc from "picocolors";
|
|
14
|
+
import { init } from "./commands/init.js";
|
|
15
|
+
import { compile } from "./commands/compile.js";
|
|
16
|
+
import { create } from "./commands/create.js";
|
|
17
|
+
import { login } from "./commands/login.js";
|
|
18
|
+
import { logout } from "./commands/logout.js";
|
|
19
|
+
import { whoami } from "./commands/whoami.js";
|
|
20
|
+
// Get package version from package.json
|
|
21
|
+
function getPackageVersion() {
|
|
22
|
+
try {
|
|
23
|
+
const packagePath = join(__dirname, "..", "package.json");
|
|
24
|
+
const packageJson = JSON.parse(readFileSync(packagePath, "utf8"));
|
|
25
|
+
return packageJson.version;
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return "0.4.0";
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
// Print version information
|
|
32
|
+
function printVersion() {
|
|
33
|
+
const version = getPackageVersion();
|
|
34
|
+
console.log(`@quickback/cli v${version}`);
|
|
35
|
+
}
|
|
36
|
+
// Print help information
|
|
37
|
+
function printHelp() {
|
|
38
|
+
const version = getPackageVersion();
|
|
39
|
+
const help = `
|
|
40
|
+
${pc.bold("Quickback CLI")} v${version}
|
|
41
|
+
|
|
42
|
+
${pc.bold("USAGE")}
|
|
43
|
+
quickback <command> [options]
|
|
44
|
+
|
|
45
|
+
${pc.bold("COMMANDS")}
|
|
46
|
+
${pc.cyan("create")} <template> <name> Create a new project from template
|
|
47
|
+
${pc.cyan("compile")} Compile definitions via remote API
|
|
48
|
+
${pc.cyan("init")} Initialize quickback folder structure
|
|
49
|
+
${pc.cyan("login")} Authenticate for Pro templates
|
|
50
|
+
${pc.cyan("logout")} Clear stored credentials
|
|
51
|
+
${pc.cyan("whoami")} Show current auth status
|
|
52
|
+
|
|
53
|
+
${pc.bold("OPTIONS")}
|
|
54
|
+
${pc.cyan("-v, --version")} Show version number
|
|
55
|
+
${pc.cyan("-h, --help")} Show this help message
|
|
56
|
+
|
|
57
|
+
${pc.bold("EXAMPLES")}
|
|
58
|
+
${pc.gray("# Create a new Cloudflare project")}
|
|
59
|
+
quickback create cloudflare my-app
|
|
60
|
+
|
|
61
|
+
${pc.gray("# Create a local Bun project")}
|
|
62
|
+
quickback create bun my-api
|
|
63
|
+
|
|
64
|
+
${pc.gray("# Compile existing project")}
|
|
65
|
+
cd my-app && quickback compile
|
|
66
|
+
|
|
67
|
+
${pc.gray("# List available templates")}
|
|
68
|
+
quickback create --list
|
|
69
|
+
|
|
70
|
+
${pc.bold("TEMPLATES")}
|
|
71
|
+
${pc.cyan("cloudflare")} Cloudflare Workers + D1 + Better Auth (free)
|
|
72
|
+
${pc.cyan("bun")} Bun + SQLite + Better Auth (free)
|
|
73
|
+
${pc.cyan("turso")} Turso/LibSQL + Better Auth (pro)
|
|
74
|
+
|
|
75
|
+
${pc.bold("DOCUMENTATION")}
|
|
76
|
+
https://quickback.dev/docs
|
|
77
|
+
`;
|
|
78
|
+
console.log(help);
|
|
79
|
+
}
|
|
80
|
+
// Fatal error handler
|
|
81
|
+
function fatal(message) {
|
|
82
|
+
console.error(pc.red(`\n✖ ${message}`));
|
|
83
|
+
process.exit(1);
|
|
84
|
+
}
|
|
85
|
+
// Main command routing
|
|
86
|
+
const cmd = process.argv[2];
|
|
87
|
+
const args = process.argv.slice(3);
|
|
88
|
+
// Check for version flag
|
|
89
|
+
if (cmd === "version" || cmd === "--version" || cmd === "-v") {
|
|
90
|
+
printVersion();
|
|
91
|
+
}
|
|
92
|
+
else if (cmd === "help" || cmd === "--help" || cmd === "-h" || !cmd) {
|
|
93
|
+
printHelp();
|
|
94
|
+
}
|
|
95
|
+
else if (cmd === "init") {
|
|
96
|
+
init().catch((err) => {
|
|
97
|
+
fatal(String(err?.message ?? err));
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
else if (cmd === "create") {
|
|
101
|
+
create(args).catch((err) => {
|
|
102
|
+
fatal(String(err?.message ?? err));
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
else if (cmd === "compile") {
|
|
106
|
+
compile().catch((err) => {
|
|
107
|
+
fatal(String(err?.message ?? err));
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
else if (cmd === "login") {
|
|
111
|
+
login().catch((err) => {
|
|
112
|
+
fatal(String(err?.message ?? err));
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
else if (cmd === "logout") {
|
|
116
|
+
logout().catch((err) => {
|
|
117
|
+
fatal(String(err?.message ?? err));
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
else if (cmd === "whoami") {
|
|
121
|
+
whoami().catch((err) => {
|
|
122
|
+
fatal(String(err?.message ?? err));
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
else if (cmd === "db:generate" || cmd === "db:migrate" || cmd === "db:studio" || cmd === "migrate") {
|
|
126
|
+
// Legacy database commands - now handled via drizzle-kit directly
|
|
127
|
+
console.log(pc.yellow(`\nThe '${cmd}' command has been deprecated.`));
|
|
128
|
+
console.log(pc.gray("\nUse drizzle-kit directly in your project:\n"));
|
|
129
|
+
console.log(pc.cyan(" npx drizzle-kit generate # Generate migrations"));
|
|
130
|
+
console.log(pc.cyan(" npx drizzle-kit migrate # Apply migrations"));
|
|
131
|
+
console.log(pc.cyan(" npx drizzle-kit studio # Open database studio"));
|
|
132
|
+
console.log("");
|
|
133
|
+
process.exit(0);
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
console.error(pc.red(`Unknown command: ${cmd}`));
|
|
137
|
+
console.log(pc.gray("\nRun 'quickback --help' for available commands."));
|
|
138
|
+
process.exit(1);
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* API Client for Quickback Compiler Service
|
|
3
|
+
*
|
|
4
|
+
* Handles communication with the remote compiler API.
|
|
5
|
+
*/
|
|
6
|
+
export interface CompilerInput {
|
|
7
|
+
config: {
|
|
8
|
+
name: string;
|
|
9
|
+
preset: string;
|
|
10
|
+
template?: string;
|
|
11
|
+
providers?: any;
|
|
12
|
+
build?: {
|
|
13
|
+
outputDir?: string;
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
features: Array<{
|
|
17
|
+
name: string;
|
|
18
|
+
schema: {
|
|
19
|
+
tableName: string;
|
|
20
|
+
columns: any;
|
|
21
|
+
source: string;
|
|
22
|
+
};
|
|
23
|
+
resource?: any;
|
|
24
|
+
actions?: any;
|
|
25
|
+
}>;
|
|
26
|
+
}
|
|
27
|
+
export interface GeneratedFile {
|
|
28
|
+
path: string;
|
|
29
|
+
content: string;
|
|
30
|
+
type: string;
|
|
31
|
+
feature?: string;
|
|
32
|
+
}
|
|
33
|
+
export interface PostCompileCommand {
|
|
34
|
+
description: string;
|
|
35
|
+
command: string;
|
|
36
|
+
optional?: boolean;
|
|
37
|
+
cwd?: 'output' | 'project';
|
|
38
|
+
}
|
|
39
|
+
export interface CompilerOutput {
|
|
40
|
+
files: GeneratedFile[];
|
|
41
|
+
meta: {
|
|
42
|
+
fileCount: number;
|
|
43
|
+
features: string[];
|
|
44
|
+
timestamp: string;
|
|
45
|
+
version: string;
|
|
46
|
+
};
|
|
47
|
+
commands?: PostCompileCommand[];
|
|
48
|
+
warnings?: string[];
|
|
49
|
+
}
|
|
50
|
+
export interface TemplateInfo {
|
|
51
|
+
name: string;
|
|
52
|
+
description: string;
|
|
53
|
+
tier: 'free' | 'pro';
|
|
54
|
+
preset: string;
|
|
55
|
+
tags: string[];
|
|
56
|
+
}
|
|
57
|
+
export interface ApiError {
|
|
58
|
+
error: string;
|
|
59
|
+
hint?: string;
|
|
60
|
+
upgrade?: string;
|
|
61
|
+
message?: string;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Fetch available templates from the server
|
|
65
|
+
*/
|
|
66
|
+
export declare function fetchTemplates(): Promise<Record<string, TemplateInfo>>;
|
|
67
|
+
/**
|
|
68
|
+
* Call the compiler API
|
|
69
|
+
*/
|
|
70
|
+
export declare function callCompiler(input: CompilerInput): Promise<CompilerOutput>;
|
|
71
|
+
/**
|
|
72
|
+
* Check API health
|
|
73
|
+
*/
|
|
74
|
+
export declare function checkHealth(): Promise<{
|
|
75
|
+
status: string;
|
|
76
|
+
version: string;
|
|
77
|
+
}>;
|
|
78
|
+
/**
|
|
79
|
+
* Get the API URL (for debugging)
|
|
80
|
+
*/
|
|
81
|
+
export declare function getApiUrl(): string;
|
|
82
|
+
//# sourceMappingURL=api-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../src/lib/api-client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,GAAG,CAAC;QAChB,KAAK,CAAC,EAAE;YAAE,SAAS,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KAChC,CAAC;IACF,QAAQ,EAAE,KAAK,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE;YAAE,SAAS,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,GAAG,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC;QAC5D,QAAQ,CAAC,EAAE,GAAG,CAAC;QACf,OAAO,CAAC,EAAE,GAAG,CAAC;KACf,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,GAAG,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;CAC5B;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,IAAI,EAAE;QACJ,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,QAAQ,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAQ5E;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC,CA4BhF;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAQhF;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,MAAM,CAElC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* API Client for Quickback Compiler Service
|
|
3
|
+
*
|
|
4
|
+
* Handles communication with the remote compiler API.
|
|
5
|
+
*/
|
|
6
|
+
import { getStoredToken } from './auth.js';
|
|
7
|
+
const API_URL = process.env.QUICKBACK_API_URL || 'https://compiler.quickback.dev';
|
|
8
|
+
/**
|
|
9
|
+
* Fetch available templates from the server
|
|
10
|
+
*/
|
|
11
|
+
export async function fetchTemplates() {
|
|
12
|
+
const response = await fetch(`${API_URL}/templates`);
|
|
13
|
+
if (!response.ok) {
|
|
14
|
+
throw new Error('Failed to fetch templates');
|
|
15
|
+
}
|
|
16
|
+
return response.json();
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Call the compiler API
|
|
20
|
+
*/
|
|
21
|
+
export async function callCompiler(input) {
|
|
22
|
+
const token = await getStoredToken();
|
|
23
|
+
const headers = {
|
|
24
|
+
'Content-Type': 'application/json',
|
|
25
|
+
};
|
|
26
|
+
if (token) {
|
|
27
|
+
headers['Authorization'] = `Bearer ${token}`;
|
|
28
|
+
}
|
|
29
|
+
const response = await fetch(`${API_URL}/compile`, {
|
|
30
|
+
method: 'POST',
|
|
31
|
+
headers,
|
|
32
|
+
body: JSON.stringify(input),
|
|
33
|
+
});
|
|
34
|
+
if (!response.ok) {
|
|
35
|
+
const error = await response.json();
|
|
36
|
+
if (response.status === 403 && error.hint) {
|
|
37
|
+
throw new Error(`${error.error}\n${error.hint}`);
|
|
38
|
+
}
|
|
39
|
+
throw new Error(error.error || error.message || 'Compilation failed');
|
|
40
|
+
}
|
|
41
|
+
return response.json();
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Check API health
|
|
45
|
+
*/
|
|
46
|
+
export async function checkHealth() {
|
|
47
|
+
const response = await fetch(`${API_URL}/health`);
|
|
48
|
+
if (!response.ok) {
|
|
49
|
+
throw new Error('Compiler service unavailable');
|
|
50
|
+
}
|
|
51
|
+
return response.json();
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Get the API URL (for debugging)
|
|
55
|
+
*/
|
|
56
|
+
export function getApiUrl() {
|
|
57
|
+
return API_URL;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=api-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/lib/api-client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,gCAAgC,CAAC;AA4DlF;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,YAAY,CAAC,CAAC;IAErD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,EAA2C,CAAC;AAClE,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,KAAoB;IACrD,MAAM,KAAK,GAAG,MAAM,cAAc,EAAE,CAAC;IAErC,MAAM,OAAO,GAA2B;QACtC,cAAc,EAAE,kBAAkB;KACnC,CAAC;IAEF,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,KAAK,EAAE,CAAC;IAC/C,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,UAAU,EAAE;QACjD,MAAM,EAAE,MAAM;QACd,OAAO;QACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;KAC5B,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAc,CAAC;QAEhD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QACnD,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,IAAI,oBAAoB,CAAC,CAAC;IACxE,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,EAA6B,CAAC;AACpD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,SAAS,CAAC,CAAC;IAElD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,EAAkD,CAAC;AACzE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS;IACvB,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI Authentication
|
|
3
|
+
*
|
|
4
|
+
* Handles storing and retrieving auth tokens for the CLI.
|
|
5
|
+
* Tokens are stored in ~/.quickback/credentials.json
|
|
6
|
+
*
|
|
7
|
+
* NOTE: The CLI uses Device Authorization flow which returns a CLI-specific token
|
|
8
|
+
* via the /cli/exchange endpoint. This is different from Better Auth's session
|
|
9
|
+
* tokens returned in the `set-auth-token` header.
|
|
10
|
+
*
|
|
11
|
+
* If using Better Auth session tokens directly (e.g., from sign-in), they must
|
|
12
|
+
* remain URL-encoded (with %2F, %3D, etc.) when passed in Authorization headers.
|
|
13
|
+
*/
|
|
14
|
+
interface Credentials {
|
|
15
|
+
token: string;
|
|
16
|
+
expiresAt?: string;
|
|
17
|
+
user?: {
|
|
18
|
+
id: string;
|
|
19
|
+
email: string;
|
|
20
|
+
name?: string;
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Get stored auth token
|
|
25
|
+
*/
|
|
26
|
+
export declare function getStoredToken(): Promise<string | null>;
|
|
27
|
+
/**
|
|
28
|
+
* Store auth credentials
|
|
29
|
+
*/
|
|
30
|
+
export declare function storeCredentials(credentials: Credentials): Promise<void>;
|
|
31
|
+
/**
|
|
32
|
+
* Clear stored credentials
|
|
33
|
+
*/
|
|
34
|
+
export declare function clearCredentials(): Promise<void>;
|
|
35
|
+
/**
|
|
36
|
+
* Get stored user info
|
|
37
|
+
*/
|
|
38
|
+
export declare function getStoredUser(): Promise<Credentials['user'] | null>;
|
|
39
|
+
/**
|
|
40
|
+
* Check if user is logged in
|
|
41
|
+
*/
|
|
42
|
+
export declare function isLoggedIn(): Promise<boolean>;
|
|
43
|
+
export {};
|
|
44
|
+
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/lib/auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AASH,UAAU,WAAW;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE;QACL,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAuB7D;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAO9E;AAED;;GAEG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAItD;AAED;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAazE;AAED;;GAEG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,CAGnD"}
|
package/dist/lib/auth.js
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI Authentication
|
|
3
|
+
*
|
|
4
|
+
* Handles storing and retrieving auth tokens for the CLI.
|
|
5
|
+
* Tokens are stored in ~/.quickback/credentials.json
|
|
6
|
+
*
|
|
7
|
+
* NOTE: The CLI uses Device Authorization flow which returns a CLI-specific token
|
|
8
|
+
* via the /cli/exchange endpoint. This is different from Better Auth's session
|
|
9
|
+
* tokens returned in the `set-auth-token` header.
|
|
10
|
+
*
|
|
11
|
+
* If using Better Auth session tokens directly (e.g., from sign-in), they must
|
|
12
|
+
* remain URL-encoded (with %2F, %3D, etc.) when passed in Authorization headers.
|
|
13
|
+
*/
|
|
14
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync, unlinkSync } from 'fs';
|
|
15
|
+
import { homedir } from 'os';
|
|
16
|
+
import { join } from 'path';
|
|
17
|
+
const CONFIG_DIR = join(homedir(), '.quickback');
|
|
18
|
+
const CREDENTIALS_FILE = join(CONFIG_DIR, 'credentials.json');
|
|
19
|
+
/**
|
|
20
|
+
* Get stored auth token
|
|
21
|
+
*/
|
|
22
|
+
export async function getStoredToken() {
|
|
23
|
+
try {
|
|
24
|
+
if (!existsSync(CREDENTIALS_FILE)) {
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
const data = readFileSync(CREDENTIALS_FILE, 'utf-8');
|
|
28
|
+
const credentials = JSON.parse(data);
|
|
29
|
+
// Check if token is expired
|
|
30
|
+
if (credentials.expiresAt) {
|
|
31
|
+
const expiresAt = new Date(credentials.expiresAt);
|
|
32
|
+
if (expiresAt < new Date()) {
|
|
33
|
+
// Token expired, clear it
|
|
34
|
+
await clearCredentials();
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return credentials.token;
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Store auth credentials
|
|
46
|
+
*/
|
|
47
|
+
export async function storeCredentials(credentials) {
|
|
48
|
+
// Ensure config directory exists
|
|
49
|
+
if (!existsSync(CONFIG_DIR)) {
|
|
50
|
+
mkdirSync(CONFIG_DIR, { recursive: true });
|
|
51
|
+
}
|
|
52
|
+
writeFileSync(CREDENTIALS_FILE, JSON.stringify(credentials, null, 2), 'utf-8');
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Clear stored credentials
|
|
56
|
+
*/
|
|
57
|
+
export async function clearCredentials() {
|
|
58
|
+
if (existsSync(CREDENTIALS_FILE)) {
|
|
59
|
+
unlinkSync(CREDENTIALS_FILE);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Get stored user info
|
|
64
|
+
*/
|
|
65
|
+
export async function getStoredUser() {
|
|
66
|
+
try {
|
|
67
|
+
if (!existsSync(CREDENTIALS_FILE)) {
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
const data = readFileSync(CREDENTIALS_FILE, 'utf-8');
|
|
71
|
+
const credentials = JSON.parse(data);
|
|
72
|
+
return credentials.user || null;
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Check if user is logged in
|
|
80
|
+
*/
|
|
81
|
+
export async function isLoggedIn() {
|
|
82
|
+
const token = await getStoredToken();
|
|
83
|
+
return token !== null;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/lib/auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AACpF,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,YAAY,CAAC,CAAC;AACjD,MAAM,gBAAgB,GAAG,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC;AAY9D;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,IAAI,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,IAAI,GAAG,YAAY,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;QACrD,MAAM,WAAW,GAAgB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAElD,4BAA4B;QAC5B,IAAI,WAAW,CAAC,SAAS,EAAE,CAAC;YAC1B,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;YAClD,IAAI,SAAS,GAAG,IAAI,IAAI,EAAE,EAAE,CAAC;gBAC3B,0BAA0B;gBAC1B,MAAM,gBAAgB,EAAE,CAAC;gBACzB,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAED,OAAO,WAAW,CAAC,KAAK,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,WAAwB;IAC7D,iCAAiC;IACjC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,aAAa,CAAC,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AACjF,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,IAAI,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACjC,UAAU,CAAC,gBAAgB,CAAC,CAAC;IAC/B,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,IAAI,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,IAAI,GAAG,YAAY,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;QACrD,MAAM,WAAW,GAAgB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAElD,OAAO,WAAW,CAAC,IAAI,IAAI,IAAI,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,MAAM,KAAK,GAAG,MAAM,cAAc,EAAE,CAAC;IACrC,OAAO,KAAK,KAAK,IAAI,CAAC;AACxB,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compiler Stubs for CLI Runtime
|
|
3
|
+
*
|
|
4
|
+
* These stub functions allow config/resource/action definition files to be loaded
|
|
5
|
+
* by the CLI without needing the full @quickback/compiler package.
|
|
6
|
+
*
|
|
7
|
+
* The actual validation happens server-side in the compiler worker.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Stub for defineConfig - just returns the config as-is
|
|
11
|
+
*/
|
|
12
|
+
export declare function defineConfig(config: Record<string, unknown>): Record<string, unknown>;
|
|
13
|
+
/**
|
|
14
|
+
* Stub for defineRuntime - returns provider config
|
|
15
|
+
*/
|
|
16
|
+
export declare function defineRuntime(name: string, config?: Record<string, unknown>): {
|
|
17
|
+
name: string;
|
|
18
|
+
config: Record<string, unknown>;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Stub for defineDatabase - returns provider config
|
|
22
|
+
*/
|
|
23
|
+
export declare function defineDatabase(name: string, config?: Record<string, unknown>): {
|
|
24
|
+
name: string;
|
|
25
|
+
config: Record<string, unknown>;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Stub for defineAuth - returns provider config
|
|
29
|
+
*/
|
|
30
|
+
export declare function defineAuth(name: string, config?: Record<string, unknown>): {
|
|
31
|
+
name: string;
|
|
32
|
+
config: Record<string, unknown>;
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Stub for defineStorage - returns provider config
|
|
36
|
+
*/
|
|
37
|
+
export declare function defineStorage(name: string, config?: Record<string, unknown>): {
|
|
38
|
+
name: string;
|
|
39
|
+
config: Record<string, unknown>;
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Stub for defineResource - just returns the config with schema reference
|
|
43
|
+
*/
|
|
44
|
+
export declare function defineResource<TSchema>(schema: TSchema, config: Record<string, unknown>): Record<string, unknown> & {
|
|
45
|
+
__schema: TSchema;
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* Stub for defineTable - combines schema with all configuration
|
|
49
|
+
*
|
|
50
|
+
* This is the new unified API that combines schema definition with
|
|
51
|
+
* all configuration (firewall, guards, crud, embeddings, realtime) in one place.
|
|
52
|
+
*/
|
|
53
|
+
export declare function defineTable<TSchema>(schema: TSchema, config: Record<string, unknown>): Record<string, unknown> & {
|
|
54
|
+
__schema: TSchema;
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Stub for defineActions - just returns the actions with schema reference
|
|
58
|
+
*/
|
|
59
|
+
export declare function defineActions<TSchema>(schema: TSchema, actions: Record<string, unknown>): Record<string, unknown> & {
|
|
60
|
+
__schema: TSchema;
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* Stub for defineAction - returns a curried function that returns the config
|
|
64
|
+
*/
|
|
65
|
+
export declare function defineAction<TSchema = unknown>(): (config: Record<string, unknown>) => Record<string, unknown>;
|
|
66
|
+
//# sourceMappingURL=compiler-stubs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compiler-stubs.d.ts","sourceRoot":"","sources":["../../src/lib/compiler-stubs.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAErF;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAE/H;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAEhI;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAE5H;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAE/H;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EACpC,MAAM,EAAE,OAAO,EACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAAE,QAAQ,EAAE,OAAO,CAAA;CAAE,CAKjD;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,OAAO,EACjC,MAAM,EAAE,OAAO,EACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAAE,QAAQ,EAAE,OAAO,CAAA;CAAE,CAKjD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EACnC,MAAM,EAAE,OAAO,EACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAAE,QAAQ,EAAE,OAAO,CAAA;CAAE,CAKjD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,GAAG,OAAO,MACpC,QAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,6BACxC"}
|