@polardbx/pxbaas 0.0.0-stage → 0.1.0-beta.10
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 +223 -2
- package/bin/pxbaas.js +13 -0
- package/dist/app/local-index.d.ts +70 -0
- package/dist/app/local-index.d.ts.map +1 -0
- package/dist/app/local-index.js +140 -0
- package/dist/app/local-index.js.map +1 -0
- package/dist/app/preflight.d.ts +61 -0
- package/dist/app/preflight.d.ts.map +1 -0
- package/dist/app/preflight.js +115 -0
- package/dist/app/preflight.js.map +1 -0
- package/dist/app/spec-lint.d.ts +45 -0
- package/dist/app/spec-lint.d.ts.map +1 -0
- package/dist/app/spec-lint.js +423 -0
- package/dist/app/spec-lint.js.map +1 -0
- package/dist/app/templates.d.ts +167 -0
- package/dist/app/templates.d.ts.map +1 -0
- package/dist/app/templates.js +151 -0
- package/dist/app/templates.js.map +1 -0
- package/dist/cli/help-guides.d.ts +17 -0
- package/dist/cli/help-guides.d.ts.map +1 -0
- package/dist/cli/help-guides.js +132 -0
- package/dist/cli/help-guides.js.map +1 -0
- package/dist/cli/root.d.ts +3 -0
- package/dist/cli/root.d.ts.map +1 -0
- package/dist/cli/root.js +75 -0
- package/dist/cli/root.js.map +1 -0
- package/dist/commands/app/index.d.ts +8 -0
- package/dist/commands/app/index.d.ts.map +1 -0
- package/dist/commands/app/index.js +1907 -0
- package/dist/commands/app/index.js.map +1 -0
- package/dist/commands/auth/index.d.ts +3 -0
- package/dist/commands/auth/index.d.ts.map +1 -0
- package/dist/commands/auth/index.js +198 -0
- package/dist/commands/auth/index.js.map +1 -0
- package/dist/commands/completion/index.d.ts +3 -0
- package/dist/commands/completion/index.d.ts.map +1 -0
- package/dist/commands/completion/index.js +14 -0
- package/dist/commands/completion/index.js.map +1 -0
- package/dist/commands/data/index.d.ts +55 -0
- package/dist/commands/data/index.d.ts.map +1 -0
- package/dist/commands/data/index.js +407 -0
- package/dist/commands/data/index.js.map +1 -0
- package/dist/commands/db/index.d.ts +29 -0
- package/dist/commands/db/index.d.ts.map +1 -0
- package/dist/commands/db/index.js +500 -0
- package/dist/commands/db/index.js.map +1 -0
- package/dist/commands/doctor/index.d.ts +3 -0
- package/dist/commands/doctor/index.d.ts.map +1 -0
- package/dist/commands/doctor/index.js +305 -0
- package/dist/commands/doctor/index.js.map +1 -0
- package/dist/commands/functions/delete.d.ts +3 -0
- package/dist/commands/functions/delete.d.ts.map +1 -0
- package/dist/commands/functions/delete.js +55 -0
- package/dist/commands/functions/delete.js.map +1 -0
- package/dist/commands/functions/deploy.d.ts +3 -0
- package/dist/commands/functions/deploy.d.ts.map +1 -0
- package/dist/commands/functions/deploy.js +118 -0
- package/dist/commands/functions/deploy.js.map +1 -0
- package/dist/commands/functions/index.d.ts +3 -0
- package/dist/commands/functions/index.d.ts.map +1 -0
- package/dist/commands/functions/index.js +15 -0
- package/dist/commands/functions/index.js.map +1 -0
- package/dist/commands/functions/list.d.ts +6 -0
- package/dist/commands/functions/list.d.ts.map +1 -0
- package/dist/commands/functions/list.js +63 -0
- package/dist/commands/functions/list.js.map +1 -0
- package/dist/commands/functions/new.d.ts +7 -0
- package/dist/commands/functions/new.d.ts.map +1 -0
- package/dist/commands/functions/new.js +72 -0
- package/dist/commands/functions/new.js.map +1 -0
- package/dist/commands/gen/index.d.ts +3 -0
- package/dist/commands/gen/index.d.ts.map +1 -0
- package/dist/commands/gen/index.js +323 -0
- package/dist/commands/gen/index.js.map +1 -0
- package/dist/commands/guide/index.d.ts +8 -0
- package/dist/commands/guide/index.d.ts.map +1 -0
- package/dist/commands/guide/index.js +20 -0
- package/dist/commands/guide/index.js.map +1 -0
- package/dist/commands/instance/index.d.ts +8 -0
- package/dist/commands/instance/index.d.ts.map +1 -0
- package/dist/commands/instance/index.js +481 -0
- package/dist/commands/instance/index.js.map +1 -0
- package/dist/commands/login/index.d.ts +3 -0
- package/dist/commands/login/index.d.ts.map +1 -0
- package/dist/commands/login/index.js +145 -0
- package/dist/commands/login/index.js.map +1 -0
- package/dist/commands/logout/index.d.ts +3 -0
- package/dist/commands/logout/index.d.ts.map +1 -0
- package/dist/commands/logout/index.js +41 -0
- package/dist/commands/logout/index.js.map +1 -0
- package/dist/commands/profile/import-env.d.ts +18 -0
- package/dist/commands/profile/import-env.d.ts.map +1 -0
- package/dist/commands/profile/import-env.js +206 -0
- package/dist/commands/profile/import-env.js.map +1 -0
- package/dist/commands/profile/index.d.ts +3 -0
- package/dist/commands/profile/index.d.ts.map +1 -0
- package/dist/commands/profile/index.js +124 -0
- package/dist/commands/profile/index.js.map +1 -0
- package/dist/commands/rest/index.d.ts +3 -0
- package/dist/commands/rest/index.d.ts.map +1 -0
- package/dist/commands/rest/index.js +102 -0
- package/dist/commands/rest/index.js.map +1 -0
- package/dist/commands/skill/index.d.ts +11 -0
- package/dist/commands/skill/index.d.ts.map +1 -0
- package/dist/commands/skill/index.js +228 -0
- package/dist/commands/skill/index.js.map +1 -0
- package/dist/commands/status/index.d.ts +3 -0
- package/dist/commands/status/index.d.ts.map +1 -0
- package/dist/commands/status/index.js +59 -0
- package/dist/commands/status/index.js.map +1 -0
- package/dist/commands/storage/index.d.ts +3 -0
- package/dist/commands/storage/index.d.ts.map +1 -0
- package/dist/commands/storage/index.js +400 -0
- package/dist/commands/storage/index.js.map +1 -0
- package/dist/commands/tenant/index.d.ts +19 -0
- package/dist/commands/tenant/index.d.ts.map +1 -0
- package/dist/commands/tenant/index.js +667 -0
- package/dist/commands/tenant/index.js.map +1 -0
- package/dist/commands/whoami/index.d.ts +3 -0
- package/dist/commands/whoami/index.d.ts.map +1 -0
- package/dist/commands/whoami/index.js +101 -0
- package/dist/commands/whoami/index.js.map +1 -0
- package/dist/credentials/commit.d.ts +38 -0
- package/dist/credentials/commit.d.ts.map +1 -0
- package/dist/credentials/commit.js +57 -0
- package/dist/credentials/commit.js.map +1 -0
- package/dist/credentials/credential-store.d.ts +86 -0
- package/dist/credentials/credential-store.d.ts.map +1 -0
- package/dist/credentials/credential-store.js +282 -0
- package/dist/credentials/credential-store.js.map +1 -0
- package/dist/credentials/env-file.d.ts +85 -0
- package/dist/credentials/env-file.d.ts.map +1 -0
- package/dist/credentials/env-file.js +193 -0
- package/dist/credentials/env-file.js.map +1 -0
- package/dist/credentials/formatter.d.ts +39 -0
- package/dist/credentials/formatter.d.ts.map +1 -0
- package/dist/credentials/formatter.js +79 -0
- package/dist/credentials/formatter.js.map +1 -0
- package/dist/credentials/index.d.ts +13 -0
- package/dist/credentials/index.d.ts.map +1 -0
- package/dist/credentials/index.js +13 -0
- package/dist/credentials/index.js.map +1 -0
- package/dist/credentials/jwt-introspect.d.ts +39 -0
- package/dist/credentials/jwt-introspect.d.ts.map +1 -0
- package/dist/credentials/jwt-introspect.js +64 -0
- package/dist/credentials/jwt-introspect.js.map +1 -0
- package/dist/credentials/masker.d.ts +23 -0
- package/dist/credentials/masker.d.ts.map +1 -0
- package/dist/credentials/masker.js +40 -0
- package/dist/credentials/masker.js.map +1 -0
- package/dist/credentials/profile.d.ts +95 -0
- package/dist/credentials/profile.d.ts.map +1 -0
- package/dist/credentials/profile.js +207 -0
- package/dist/credentials/profile.js.map +1 -0
- package/dist/credentials/tenant-guard.d.ts +16 -0
- package/dist/credentials/tenant-guard.d.ts.map +1 -0
- package/dist/credentials/tenant-guard.js +53 -0
- package/dist/credentials/tenant-guard.js.map +1 -0
- package/dist/credentials/tty-guard.d.ts +29 -0
- package/dist/credentials/tty-guard.d.ts.map +1 -0
- package/dist/credentials/tty-guard.js +79 -0
- package/dist/credentials/tty-guard.js.map +1 -0
- package/dist/db/apply-schema.d.ts +144 -0
- package/dist/db/apply-schema.d.ts.map +1 -0
- package/dist/db/apply-schema.js +359 -0
- package/dist/db/apply-schema.js.map +1 -0
- package/dist/db/introspect.d.ts +54 -0
- package/dist/db/introspect.d.ts.map +1 -0
- package/dist/db/introspect.js +140 -0
- package/dist/db/introspect.js.map +1 -0
- package/dist/db/sql-file.d.ts +104 -0
- package/dist/db/sql-file.d.ts.map +1 -0
- package/dist/db/sql-file.js +584 -0
- package/dist/db/sql-file.js.map +1 -0
- package/dist/instance/provision.d.ts +89 -0
- package/dist/instance/provision.d.ts.map +1 -0
- package/dist/instance/provision.js +139 -0
- package/dist/instance/provision.js.map +1 -0
- package/dist/instance/zero-store.d.ts +47 -0
- package/dist/instance/zero-store.d.ts.map +1 -0
- package/dist/instance/zero-store.js +91 -0
- package/dist/instance/zero-store.js.map +1 -0
- package/dist/instance/zero-whitelist.d.ts +39 -0
- package/dist/instance/zero-whitelist.d.ts.map +1 -0
- package/dist/instance/zero-whitelist.js +67 -0
- package/dist/instance/zero-whitelist.js.map +1 -0
- package/dist/main.d.ts +3 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +69 -0
- package/dist/main.js.map +1 -0
- package/dist/skill/agents-md.d.ts +25 -0
- package/dist/skill/agents-md.d.ts.map +1 -0
- package/dist/skill/agents-md.js +62 -0
- package/dist/skill/agents-md.js.map +1 -0
- package/dist/skill/assets.d.ts +38 -0
- package/dist/skill/assets.d.ts.map +1 -0
- package/dist/skill/assets.js +111 -0
- package/dist/skill/assets.js.map +1 -0
- package/dist/skill/hint.d.ts +39 -0
- package/dist/skill/hint.d.ts.map +1 -0
- package/dist/skill/hint.js +109 -0
- package/dist/skill/hint.js.map +1 -0
- package/dist/skill/hosts.d.ts +45 -0
- package/dist/skill/hosts.d.ts.map +1 -0
- package/dist/skill/hosts.js +96 -0
- package/dist/skill/hosts.js.map +1 -0
- package/dist/skill/installer.d.ts +100 -0
- package/dist/skill/installer.d.ts.map +1 -0
- package/dist/skill/installer.js +241 -0
- package/dist/skill/installer.js.map +1 -0
- package/dist/skill/ownership.d.ts +35 -0
- package/dist/skill/ownership.d.ts.map +1 -0
- package/dist/skill/ownership.js +52 -0
- package/dist/skill/ownership.js.map +1 -0
- package/dist/tenant/bundle.d.ts +66 -0
- package/dist/tenant/bundle.d.ts.map +1 -0
- package/dist/tenant/bundle.js +132 -0
- package/dist/tenant/bundle.js.map +1 -0
- package/dist/tenant/guide.d.ts +50 -0
- package/dist/tenant/guide.d.ts.map +1 -0
- package/dist/tenant/guide.js +152 -0
- package/dist/tenant/guide.js.map +1 -0
- package/dist/tenant/probe.d.ts +65 -0
- package/dist/tenant/probe.d.ts.map +1 -0
- package/dist/tenant/probe.js +159 -0
- package/dist/tenant/probe.js.map +1 -0
- package/dist/tenant/verify.d.ts +37 -0
- package/dist/tenant/verify.d.ts.map +1 -0
- package/dist/tenant/verify.js +132 -0
- package/dist/tenant/verify.js.map +1 -0
- package/dist/version.d.ts +29 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +65 -0
- package/dist/version.js.map +1 -0
- package/package.json +63 -3
- package/skills/pxbaas-app-spec/SKILL.md +165 -0
- package/skills/pxbaas-app-spec/references/deploy-options.md +158 -0
- package/skills/pxbaas-app-spec/references/guardrails-pitfalls.md +89 -0
- package/skills/pxbaas-app-spec/references/runtime-contract.md +151 -0
- package/skills/pxbaas-app-spec/references/ssr-session.md +121 -0
- package/skills/pxbaas-app-spec/references/templates-examples.md +311 -0
- package/skills/pxbaas-cli/SKILL.md +186 -0
- package/skills/pxbaas-cli/references/api-reference.md +68 -0
- package/skills/pxbaas-cli/references/app-deploy.md +186 -0
- package/skills/pxbaas-cli/references/auth-and-credentials.md +116 -0
- package/skills/pxbaas-cli/references/data-postgrest.md +101 -0
- package/skills/pxbaas-cli/references/db-and-meta.md +102 -0
- package/skills/pxbaas-cli/references/edge-functions.md +71 -0
- package/skills/pxbaas-cli/references/multi-tenant-apps.md +138 -0
- package/skills/pxbaas-cli/references/provision.md +101 -0
- package/skills/pxbaas-cli/references/safety-and-two-phase.md +78 -0
- package/skills/pxbaas-cli/references/storage.md +61 -0
- package/skills/pxbaas-cli/references/tenant-admin.md +122 -0
- package/skills/pxbaas-cli/references/troubleshooting.md +76 -0
- package/templates/webapp/api/index.ts +55 -0
- package/templates/webapp/csr-bff/README.md +81 -0
- package/templates/webapp/csr-bff/backend/index.ts +168 -0
- package/templates/webapp/csr-bff/db/rls.json +13 -0
- package/templates/webapp/csr-bff/db/schema.sql +49 -0
- package/templates/webapp/csr-bff/frontend/dist/admin.html +101 -0
- package/templates/webapp/csr-bff/frontend/dist/article.html +44 -0
- package/templates/webapp/csr-bff/frontend/dist/blog.js +206 -0
- package/templates/webapp/csr-bff/frontend/dist/blogger.html +53 -0
- package/templates/webapp/csr-bff/frontend/dist/index.html +70 -0
- package/templates/webapp/csr-bff/frontend/dist/login.html +56 -0
- package/templates/webapp/csr-bff/frontend/dist/profile.html +59 -0
- package/templates/webapp/csr-bff/frontend/dist/signup.html +78 -0
- package/templates/webapp/csr-bff/frontend/dist/style.css +27 -0
- package/templates/webapp/manifest.json +419 -0
- package/templates/webapp/mpa/about.html +29 -0
- package/templates/webapp/mpa/app.js +42 -0
- package/templates/webapp/mpa/index.html +42 -0
- package/templates/webapp/mpa/index.ts +60 -0
- package/templates/webapp/mpa/style.css +42 -0
- package/templates/webapp/react-vite/frontend/index.html +12 -0
- package/templates/webapp/react-vite/frontend/package-lock.json +1826 -0
- package/templates/webapp/react-vite/frontend/package.json +23 -0
- package/templates/webapp/react-vite/frontend/src/App.tsx +34 -0
- package/templates/webapp/react-vite/frontend/src/main.tsx +13 -0
- package/templates/webapp/react-vite/frontend/src/style.css +46 -0
- package/templates/webapp/react-vite/frontend/tsconfig.json +20 -0
- package/templates/webapp/react-vite/frontend/vite.config.ts +10 -0
- package/templates/webapp/react-vite-hono/backend/index.ts +38 -0
- package/templates/webapp/react-vite-hono/frontend/index.html +12 -0
- package/templates/webapp/react-vite-hono/frontend/package-lock.json +1826 -0
- package/templates/webapp/react-vite-hono/frontend/package.json +23 -0
- package/templates/webapp/react-vite-hono/frontend/src/App.tsx +47 -0
- package/templates/webapp/react-vite-hono/frontend/src/main.tsx +13 -0
- package/templates/webapp/react-vite-hono/frontend/src/style.css +66 -0
- package/templates/webapp/react-vite-hono/frontend/tsconfig.json +20 -0
- package/templates/webapp/react-vite-hono/frontend/vite.config.ts +10 -0
- package/templates/webapp/spa/index.ts +119 -0
- package/templates/webapp/ssr-auth/backend/index.ts +133 -0
- package/templates/webapp/ssr-auth/frontend/dist/index.html +15 -0
- package/templates/webapp/ssr-blog/README.md +111 -0
- package/templates/webapp/ssr-blog/backend/index.ts +764 -0
- package/templates/webapp/ssr-blog/db/rls.json +13 -0
- package/templates/webapp/ssr-blog/db/schema.sql +51 -0
- package/templates/webapp/ssr-blog/frontend/dist/index.html +39 -0
- package/templates/webapp/ssr-frameworks/README.md +64 -0
- package/templates/webapp/ssr-frameworks/backend/index.ts +241 -0
- package/templates/webapp/ssr-frameworks/frontend/dist/index.html +31 -0
- package/templates/webapp/ssr-hono/backend/index.ts +111 -0
- package/templates/webapp/ssr-hono/frontend/dist/index.html +12 -0
- package/templates/webapp/ssr-shop/README.md +80 -0
- package/templates/webapp/ssr-shop/backend/index.ts +491 -0
- package/templates/webapp/ssr-shop/db/rls.json +16 -0
- package/templates/webapp/ssr-shop/db/schema.sql +90 -0
- package/templates/webapp/ssr-shop/frontend/dist/index.html +12 -0
- package/templates/webapp/vanilla-static/frontend/dist/app.js +6 -0
- package/templates/webapp/vanilla-static/frontend/dist/index.html +19 -0
- package/templates/webapp/vanilla-static/frontend/dist/style.css +43 -0
|
@@ -0,0 +1,407 @@
|
|
|
1
|
+
import axios from 'axios';
|
|
2
|
+
import inquirer from 'inquirer';
|
|
3
|
+
import { CredentialStore, ProfileManager, formatSuccess, formatError, formatWarning, } from '../../credentials/index.js';
|
|
4
|
+
/** Rows fetched by the read-only preview; the count itself comes from Content-Range. */
|
|
5
|
+
const DELETE_PREVIEW_LIMIT = 1000;
|
|
6
|
+
/**
|
|
7
|
+
* Failure of the delete gate (missing filter, or execution not authorized).
|
|
8
|
+
*
|
|
9
|
+
* Carries the preview so `--json` callers still get the audit trail of what was
|
|
10
|
+
* NOT deleted — the whole point of the two-phase flow.
|
|
11
|
+
*/
|
|
12
|
+
export class DataDeleteError extends Error {
|
|
13
|
+
code;
|
|
14
|
+
preview;
|
|
15
|
+
constructor(code, message, preview) {
|
|
16
|
+
super(message);
|
|
17
|
+
this.code = code;
|
|
18
|
+
this.preview = preview;
|
|
19
|
+
this.name = 'DataDeleteError';
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export function registerDataCommands(program) {
|
|
23
|
+
const dataCmd = program
|
|
24
|
+
.command('data')
|
|
25
|
+
.description('Quick data operations (PostgREST syntax)');
|
|
26
|
+
// data select
|
|
27
|
+
dataCmd
|
|
28
|
+
.command('select <table>')
|
|
29
|
+
.description('Select rows from table')
|
|
30
|
+
.option('--filter <filter>', 'PostgREST filter (e.g., "id=eq.1")')
|
|
31
|
+
.option('--columns <columns>', 'Columns to select (comma-separated)', '*')
|
|
32
|
+
.option('--limit <number>', 'Max rows to return', '100')
|
|
33
|
+
.option('--order <column>', 'Order by column')
|
|
34
|
+
.option('--ascending', 'Sort ascending (default: descending)')
|
|
35
|
+
.option('--json', 'Output in JSON format')
|
|
36
|
+
.action(async (table, options) => {
|
|
37
|
+
try {
|
|
38
|
+
await handleDataSelect(table, { ...options, json: options.json || program.opts().json });
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
42
|
+
console.error(formatError(message));
|
|
43
|
+
process.exit(1);
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
// data insert
|
|
47
|
+
dataCmd
|
|
48
|
+
.command('insert <table>')
|
|
49
|
+
.description('Insert rows into table')
|
|
50
|
+
.requiredOption('--values <json>', 'Values to insert (JSON)')
|
|
51
|
+
.option('--json', 'Output in JSON format')
|
|
52
|
+
.action(async (table, options) => {
|
|
53
|
+
try {
|
|
54
|
+
await handleDataInsert(table, { ...options, json: options.json || program.opts().json });
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
58
|
+
console.error(formatError(message));
|
|
59
|
+
process.exit(1);
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
// data update
|
|
63
|
+
dataCmd
|
|
64
|
+
.command('update <table>')
|
|
65
|
+
.description('Update rows in table')
|
|
66
|
+
.requiredOption('--values <json>', 'Values to update (JSON)')
|
|
67
|
+
.requiredOption('--filter <filter>', 'PostgREST filter (e.g., "id=eq.1")')
|
|
68
|
+
.option('--json', 'Output in JSON format')
|
|
69
|
+
.action(async (table, options) => {
|
|
70
|
+
try {
|
|
71
|
+
await handleDataUpdate(table, { ...options, json: options.json || program.opts().json });
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
75
|
+
console.error(formatError(message));
|
|
76
|
+
process.exit(1);
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
// data delete
|
|
80
|
+
dataCmd
|
|
81
|
+
.command('delete <table>')
|
|
82
|
+
.description('Delete rows from table. Previews the affected row count and the exact request URL, then requires confirmation (--yes to authorize non-interactively)')
|
|
83
|
+
.requiredOption('--filter <filter>', 'PostgREST condition passed through verbatim; repeat to combine (e.g. --filter "id=eq.1" --filter "or=(a.eq.1,b.eq.2)"). Required: without it every row would be deleted', collectFilter)
|
|
84
|
+
.option('--yes', 'Authorize non-interactively (skip the confirm prompt)')
|
|
85
|
+
.option('--json', 'Output in JSON format')
|
|
86
|
+
.action(async (table, options) => {
|
|
87
|
+
const json = Boolean(options.json || program.opts().json);
|
|
88
|
+
try {
|
|
89
|
+
await handleDataDelete(table, { ...options, json });
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
// Keep the preview in the machine-readable payload: an audit consumer must
|
|
93
|
+
// be able to tell what was refused, not just that something was.
|
|
94
|
+
if (json && error instanceof DataDeleteError) {
|
|
95
|
+
console.log(JSON.stringify({
|
|
96
|
+
code: error.code,
|
|
97
|
+
message: error.message,
|
|
98
|
+
...(error.preview ? { preview: error.preview } : {}),
|
|
99
|
+
}, null, 2));
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
103
|
+
console.error(formatError(message));
|
|
104
|
+
}
|
|
105
|
+
process.exit(1);
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
/** Accumulate repeated `--filter` flags instead of letting the last one win. */
|
|
110
|
+
function collectFilter(value, previous) {
|
|
111
|
+
return [...(previous ?? []), value];
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Normalize the `--filter` flags into the PostgREST query string, verbatim.
|
|
115
|
+
*
|
|
116
|
+
* The previous implementation did `filter.split('=')` and rebuilt ONE key/value
|
|
117
|
+
* pair, so a condition containing `&` (e.g. `id=eq.1&name=like.a%`) had
|
|
118
|
+
* everything after the first `&` percent-encoded INTO the value: the extra
|
|
119
|
+
* condition silently disappeared and the DELETE matched strictly more rows than
|
|
120
|
+
* the operator asked for. Filters are therefore split on `&` only, each fragment
|
|
121
|
+
* is validated to be a `column=operator.value` pair, and nothing is re-encoded.
|
|
122
|
+
*
|
|
123
|
+
* An empty/absent filter is a hard error — it would delete the whole table. A
|
|
124
|
+
* blank fragment is an error too rather than something to skip: `--filter "$VAR"`
|
|
125
|
+
* with an unset VAR must fail loudly, not silently narrow to the other flags.
|
|
126
|
+
*/
|
|
127
|
+
export function normalizeDeleteFilters(raw) {
|
|
128
|
+
const given = typeof raw === 'string' ? [raw] : raw ?? [];
|
|
129
|
+
const parts = [];
|
|
130
|
+
for (const item of given) {
|
|
131
|
+
const value = String(item ?? '');
|
|
132
|
+
if (!value.trim()) {
|
|
133
|
+
throw new DataDeleteError('DATA_DELETE_FILTER_INVALID', 'Empty --filter value. Expected a PostgREST condition such as "id=eq.1"; ' +
|
|
134
|
+
'an empty filter would delete the whole table.');
|
|
135
|
+
}
|
|
136
|
+
for (const condition of value.split('&')) {
|
|
137
|
+
const trimmed = condition.trim();
|
|
138
|
+
if (!trimmed || trimmed.indexOf('=') <= 0) {
|
|
139
|
+
throw new DataDeleteError('DATA_DELETE_FILTER_INVALID', `Invalid --filter '${trimmed || value}'. Expected a PostgREST condition such as ` +
|
|
140
|
+
'"id=eq.1", "created_at=lt.2026-01-01" or "or=(a.eq.1,b.eq.2)".');
|
|
141
|
+
}
|
|
142
|
+
parts.push(trimmed);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
if (parts.length === 0) {
|
|
146
|
+
throw new DataDeleteError('DATA_DELETE_FILTER_REQUIRED', 'Refusing to delete without a filter: that would delete EVERY row of the table. ' +
|
|
147
|
+
'Pass at least one --filter "column=operator.value" (repeatable), e.g. --filter "id=eq.1".');
|
|
148
|
+
}
|
|
149
|
+
return parts;
|
|
150
|
+
}
|
|
151
|
+
/** Total row count from a PostgREST `Content-Range: 0-9/42` header; null when unknown. */
|
|
152
|
+
function parseContentRangeTotal(header) {
|
|
153
|
+
if (typeof header !== 'string' || header === '')
|
|
154
|
+
return null;
|
|
155
|
+
const total = header.split('/')[1]?.trim();
|
|
156
|
+
if (!total || total === '*')
|
|
157
|
+
return null;
|
|
158
|
+
const parsed = Number(total);
|
|
159
|
+
return Number.isFinite(parsed) ? parsed : null;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Decide whether the DELETE is authorized. Same contract as `db push --yes`
|
|
163
|
+
* (src/db/apply-schema.ts authorize): `--yes` authorizes outright; `--json` and
|
|
164
|
+
* non-TTY sessions cannot prompt, so they require `--yes` explicitly.
|
|
165
|
+
*/
|
|
166
|
+
async function authorizeDelete(preview, options) {
|
|
167
|
+
if (options.yes)
|
|
168
|
+
return;
|
|
169
|
+
if (options.json) {
|
|
170
|
+
throw new DataDeleteError('DATA_DELETE_NOT_AUTHORIZED', 'Refusing to delete rows in --json mode without explicit authorization. ' +
|
|
171
|
+
'Re-run with --yes to apply. Nothing was deleted.', preview);
|
|
172
|
+
}
|
|
173
|
+
if (!process.stdin.isTTY) {
|
|
174
|
+
throw new DataDeleteError('DATA_DELETE_NOT_AUTHORIZED', 'Refusing to delete rows without explicit authorization: pass --yes for ' +
|
|
175
|
+
'non-interactive use, or run in a TTY to confirm. Nothing was deleted.', preview);
|
|
176
|
+
}
|
|
177
|
+
const described = preview.rowCount === null
|
|
178
|
+
? 'an unknown number of row(s)'
|
|
179
|
+
: preview.countExact
|
|
180
|
+
? `${preview.rowCount} row(s)`
|
|
181
|
+
: `at least ${preview.rowCount} row(s)`;
|
|
182
|
+
const { ok } = await inquirer.prompt([
|
|
183
|
+
{
|
|
184
|
+
type: 'confirm',
|
|
185
|
+
name: 'ok',
|
|
186
|
+
message: `Delete ${described} from '${preview.table}' (filter: ${preview.filters.join(' & ')})? This cannot be undone`,
|
|
187
|
+
default: false,
|
|
188
|
+
},
|
|
189
|
+
]);
|
|
190
|
+
if (!ok) {
|
|
191
|
+
throw new DataDeleteError('DATA_DELETE_CANCELLED', `Cancelled by operator; nothing was deleted from '${preview.table}'.`, preview);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
function printPreview(preview) {
|
|
195
|
+
const described = preview.rowCount === null
|
|
196
|
+
? 'an unknown number of row(s)'
|
|
197
|
+
: preview.countExact
|
|
198
|
+
? `${preview.rowCount} row(s)`
|
|
199
|
+
: `at least ${preview.rowCount} row(s)`;
|
|
200
|
+
console.log(formatWarning(`Preview: will delete ${described} from '${preview.table}'`));
|
|
201
|
+
console.log(` Filter: ${preview.filters.join(' & ')}`);
|
|
202
|
+
console.log(` Request: DELETE ${preview.url}`);
|
|
203
|
+
if (preview.previewError) {
|
|
204
|
+
console.log(` Note: the read-only count failed (${preview.previewError}); the delete is still gated.`);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
export async function handleDataDelete(table, options) {
|
|
208
|
+
// Get current profile
|
|
209
|
+
const profileManager = new ProfileManager();
|
|
210
|
+
const currentProfile = await profileManager.getCurrentProfile();
|
|
211
|
+
if (!currentProfile) {
|
|
212
|
+
throw new Error('No active profile. Use "pxbaas login" to authenticate first.');
|
|
213
|
+
}
|
|
214
|
+
// Get credentials
|
|
215
|
+
const credentialStore = new CredentialStore();
|
|
216
|
+
const credentials = await credentialStore.getCredentials(currentProfile.name);
|
|
217
|
+
if (!credentials) {
|
|
218
|
+
throw new Error(`No credentials found for profile: ${currentProfile.name}. Use "pxbaas login" to authenticate.`);
|
|
219
|
+
}
|
|
220
|
+
const filters = normalizeDeleteFilters(options.filter);
|
|
221
|
+
const query = filters.join('&');
|
|
222
|
+
const url = `${currentProfile.endpoint}/rest/v1/${table}?${query}`;
|
|
223
|
+
const headers = {
|
|
224
|
+
'apikey': credentials.anonKey,
|
|
225
|
+
'Authorization': `Bearer ${credentials.anonKey}`,
|
|
226
|
+
};
|
|
227
|
+
// Phase 1: read-only preview against the SAME filter, so the operator sees the
|
|
228
|
+
// blast radius before anything is destroyed. A failing count (e.g. RLS allows
|
|
229
|
+
// DELETE but not SELECT) degrades to "unknown" instead of skipping the gate.
|
|
230
|
+
const preview = {
|
|
231
|
+
table,
|
|
232
|
+
filters,
|
|
233
|
+
rowCount: null,
|
|
234
|
+
countExact: false,
|
|
235
|
+
url,
|
|
236
|
+
};
|
|
237
|
+
try {
|
|
238
|
+
const probe = await axios.get(`${currentProfile.endpoint}/rest/v1/${table}?select=*&limit=${DELETE_PREVIEW_LIMIT}&${query}`, { headers: { ...headers, 'Prefer': 'count=exact' } });
|
|
239
|
+
const fromRange = parseContentRangeTotal(probe.headers?.['content-range']);
|
|
240
|
+
if (fromRange !== null) {
|
|
241
|
+
preview.rowCount = fromRange;
|
|
242
|
+
preview.countExact = true;
|
|
243
|
+
}
|
|
244
|
+
else if (Array.isArray(probe.data)) {
|
|
245
|
+
preview.rowCount = probe.data.length;
|
|
246
|
+
preview.countExact = probe.data.length < DELETE_PREVIEW_LIMIT;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
catch (error) {
|
|
250
|
+
preview.previewError = error instanceof Error ? error.message : String(error);
|
|
251
|
+
}
|
|
252
|
+
if (!options.json)
|
|
253
|
+
printPreview(preview);
|
|
254
|
+
// Phase 2: explicit authorization (--yes, or an interactive confirm).
|
|
255
|
+
await authorizeDelete(preview, options);
|
|
256
|
+
const response = await axios.delete(url, {
|
|
257
|
+
headers: { ...headers, 'Prefer': 'return=representation' },
|
|
258
|
+
});
|
|
259
|
+
const rows = Array.isArray(response.data) ? response.data : [];
|
|
260
|
+
const result = {
|
|
261
|
+
preview,
|
|
262
|
+
deleted: { table, count: rows.length, url },
|
|
263
|
+
};
|
|
264
|
+
if (options.json) {
|
|
265
|
+
console.log(JSON.stringify(result, null, 2));
|
|
266
|
+
}
|
|
267
|
+
else {
|
|
268
|
+
console.log(formatSuccess(`Deleted ${rows.length} row(s) from '${table}'`));
|
|
269
|
+
}
|
|
270
|
+
return result;
|
|
271
|
+
}
|
|
272
|
+
async function handleDataSelect(table, options) {
|
|
273
|
+
// Get current profile
|
|
274
|
+
const profileManager = new ProfileManager();
|
|
275
|
+
const currentProfile = await profileManager.getCurrentProfile();
|
|
276
|
+
if (!currentProfile) {
|
|
277
|
+
throw new Error('No active profile. Use "pxbaas login" to authenticate first.');
|
|
278
|
+
}
|
|
279
|
+
// Get credentials
|
|
280
|
+
const credentialStore = new CredentialStore();
|
|
281
|
+
const credentials = await credentialStore.getCredentials(currentProfile.name);
|
|
282
|
+
if (!credentials) {
|
|
283
|
+
throw new Error(`No credentials found for profile: ${currentProfile.name}. Use "pxbaas login" to authenticate.`);
|
|
284
|
+
}
|
|
285
|
+
// Build query URL
|
|
286
|
+
const params = new URLSearchParams();
|
|
287
|
+
params.append('select', options.columns);
|
|
288
|
+
params.append('limit', options.limit);
|
|
289
|
+
if (options.filter) {
|
|
290
|
+
// Parse filter (e.g., "id=eq.1" -> add as query param)
|
|
291
|
+
params.append(options.filter.split('=')[0], options.filter.split('=').slice(1).join('='));
|
|
292
|
+
}
|
|
293
|
+
if (options.order) {
|
|
294
|
+
const orderDir = options.ascending ? 'asc' : 'desc';
|
|
295
|
+
params.append('order', `${options.order}.${orderDir}`);
|
|
296
|
+
}
|
|
297
|
+
const url = `${currentProfile.endpoint}/rest/v1/${table}?${params.toString()}`;
|
|
298
|
+
// Make request
|
|
299
|
+
const response = await axios.get(url, {
|
|
300
|
+
headers: {
|
|
301
|
+
'apikey': credentials.anonKey,
|
|
302
|
+
'Authorization': `Bearer ${credentials.anonKey}`,
|
|
303
|
+
},
|
|
304
|
+
});
|
|
305
|
+
if (options.json) {
|
|
306
|
+
console.log(JSON.stringify(response.data, null, 2));
|
|
307
|
+
}
|
|
308
|
+
else {
|
|
309
|
+
const rows = response.data;
|
|
310
|
+
if (rows.length === 0) {
|
|
311
|
+
console.log('No rows found.');
|
|
312
|
+
return;
|
|
313
|
+
}
|
|
314
|
+
console.log(formatSuccess(`Found ${rows.length} row(s) in ${table}:`));
|
|
315
|
+
console.log('');
|
|
316
|
+
// Display as table
|
|
317
|
+
const columns = Object.keys(rows[0]);
|
|
318
|
+
console.log(columns.join('\t'));
|
|
319
|
+
console.log(columns.map(() => '---').join('\t'));
|
|
320
|
+
for (const row of rows) {
|
|
321
|
+
const values = columns.map(col => String(row[col] ?? ''));
|
|
322
|
+
console.log(values.join('\t'));
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
async function handleDataInsert(table, options) {
|
|
327
|
+
// Get current profile
|
|
328
|
+
const profileManager = new ProfileManager();
|
|
329
|
+
const currentProfile = await profileManager.getCurrentProfile();
|
|
330
|
+
if (!currentProfile) {
|
|
331
|
+
throw new Error('No active profile. Use "pxbaas login" to authenticate first.');
|
|
332
|
+
}
|
|
333
|
+
// Get credentials
|
|
334
|
+
const credentialStore = new CredentialStore();
|
|
335
|
+
const credentials = await credentialStore.getCredentials(currentProfile.name);
|
|
336
|
+
if (!credentials) {
|
|
337
|
+
throw new Error(`No credentials found for profile: ${currentProfile.name}. Use "pxbaas login" to authenticate.`);
|
|
338
|
+
}
|
|
339
|
+
// Parse values
|
|
340
|
+
let values;
|
|
341
|
+
try {
|
|
342
|
+
values = JSON.parse(options.values);
|
|
343
|
+
}
|
|
344
|
+
catch {
|
|
345
|
+
throw new Error('Invalid JSON in --values');
|
|
346
|
+
}
|
|
347
|
+
const url = `${currentProfile.endpoint}/rest/v1/${table}`;
|
|
348
|
+
// Make request
|
|
349
|
+
const response = await axios.post(url, values, {
|
|
350
|
+
headers: {
|
|
351
|
+
'apikey': credentials.anonKey,
|
|
352
|
+
'Authorization': `Bearer ${credentials.anonKey}`,
|
|
353
|
+
'Content-Type': 'application/json',
|
|
354
|
+
'Prefer': 'return=representation',
|
|
355
|
+
},
|
|
356
|
+
});
|
|
357
|
+
if (options.json) {
|
|
358
|
+
console.log(JSON.stringify(response.data, null, 2));
|
|
359
|
+
}
|
|
360
|
+
else {
|
|
361
|
+
const rows = response.data;
|
|
362
|
+
console.log(formatSuccess(`Inserted ${rows.length} row(s) into ${table}`));
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
async function handleDataUpdate(table, options) {
|
|
366
|
+
// Get current profile
|
|
367
|
+
const profileManager = new ProfileManager();
|
|
368
|
+
const currentProfile = await profileManager.getCurrentProfile();
|
|
369
|
+
if (!currentProfile) {
|
|
370
|
+
throw new Error('No active profile. Use "pxbaas login" to authenticate first.');
|
|
371
|
+
}
|
|
372
|
+
// Get credentials
|
|
373
|
+
const credentialStore = new CredentialStore();
|
|
374
|
+
const credentials = await credentialStore.getCredentials(currentProfile.name);
|
|
375
|
+
if (!credentials) {
|
|
376
|
+
throw new Error(`No credentials found for profile: ${currentProfile.name}. Use "pxbaas login" to authenticate.`);
|
|
377
|
+
}
|
|
378
|
+
// Parse values
|
|
379
|
+
let values;
|
|
380
|
+
try {
|
|
381
|
+
values = JSON.parse(options.values);
|
|
382
|
+
}
|
|
383
|
+
catch {
|
|
384
|
+
throw new Error('Invalid JSON in --values');
|
|
385
|
+
}
|
|
386
|
+
// Build query URL with filter
|
|
387
|
+
const params = new URLSearchParams();
|
|
388
|
+
params.append(options.filter.split('=')[0], options.filter.split('=').slice(1).join('='));
|
|
389
|
+
const url = `${currentProfile.endpoint}/rest/v1/${table}?${params.toString()}`;
|
|
390
|
+
// Make request
|
|
391
|
+
const response = await axios.patch(url, values, {
|
|
392
|
+
headers: {
|
|
393
|
+
'apikey': credentials.anonKey,
|
|
394
|
+
'Authorization': `Bearer ${credentials.anonKey}`,
|
|
395
|
+
'Content-Type': 'application/json',
|
|
396
|
+
'Prefer': 'return=representation',
|
|
397
|
+
},
|
|
398
|
+
});
|
|
399
|
+
if (options.json) {
|
|
400
|
+
console.log(JSON.stringify(response.data, null, 2));
|
|
401
|
+
}
|
|
402
|
+
else {
|
|
403
|
+
const rows = response.data;
|
|
404
|
+
console.log(formatSuccess(`Updated ${rows.length} row(s) in ${table}`));
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/data/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EACL,eAAe,EACf,cAAc,EACd,aAAa,EACb,WAAW,EACX,aAAa,GACd,MAAM,4BAA4B,CAAC;AAEpC,wFAAwF;AACxF,MAAM,oBAAoB,GAAG,IAAI,CAAC;AAElC;;;;;GAKG;AACH,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAE7B;IAEA;IAHX,YACW,IAAY,EACrB,OAAe,EACN,OAA2B;QAEpC,KAAK,CAAC,OAAO,CAAC,CAAC;QAJN,SAAI,GAAJ,IAAI,CAAQ;QAEZ,YAAO,GAAP,OAAO,CAAoB;QAGpC,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AAqBD,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,MAAM,OAAO,GAAG,OAAO;SACpB,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,0CAA0C,CAAC,CAAC;IAE3D,cAAc;IACd,OAAO;SACJ,OAAO,CAAC,gBAAgB,CAAC;SACzB,WAAW,CAAC,wBAAwB,CAAC;SACrC,MAAM,CAAC,mBAAmB,EAAE,oCAAoC,CAAC;SACjE,MAAM,CAAC,qBAAqB,EAAE,qCAAqC,EAAE,GAAG,CAAC;SACzE,MAAM,CAAC,kBAAkB,EAAE,oBAAoB,EAAE,KAAK,CAAC;SACvD,MAAM,CAAC,kBAAkB,EAAE,iBAAiB,CAAC;SAC7C,MAAM,CAAC,aAAa,EAAE,sCAAsC,CAAC;SAC7D,MAAM,CAAC,QAAQ,EAAE,uBAAuB,CAAC;SACzC,MAAM,CAAC,KAAK,EAAE,KAAa,EAAE,OAO7B,EAAE,EAAE;QACH,IAAI,CAAC;YACH,MAAM,gBAAgB,CAAC,KAAK,EAAE,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;YACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,cAAc;IACd,OAAO;SACJ,OAAO,CAAC,gBAAgB,CAAC;SACzB,WAAW,CAAC,wBAAwB,CAAC;SACrC,cAAc,CAAC,iBAAiB,EAAE,yBAAyB,CAAC;SAC5D,MAAM,CAAC,QAAQ,EAAE,uBAAuB,CAAC;SACzC,MAAM,CAAC,KAAK,EAAE,KAAa,EAAE,OAA2C,EAAE,EAAE;QAC3E,IAAI,CAAC;YACH,MAAM,gBAAgB,CAAC,KAAK,EAAE,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;YACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,cAAc;IACd,OAAO;SACJ,OAAO,CAAC,gBAAgB,CAAC;SACzB,WAAW,CAAC,sBAAsB,CAAC;SACnC,cAAc,CAAC,iBAAiB,EAAE,yBAAyB,CAAC;SAC5D,cAAc,CAAC,mBAAmB,EAAE,oCAAoC,CAAC;SACzE,MAAM,CAAC,QAAQ,EAAE,uBAAuB,CAAC;SACzC,MAAM,CAAC,KAAK,EAAE,KAAa,EAAE,OAA2D,EAAE,EAAE;QAC3F,IAAI,CAAC;YACH,MAAM,gBAAgB,CAAC,KAAK,EAAE,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;YACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,cAAc;IACd,OAAO;SACJ,OAAO,CAAC,gBAAgB,CAAC;SACzB,WAAW,CACV,sJAAsJ,CACvJ;SACA,cAAc,CACb,mBAAmB,EACnB,yKAAyK,EACzK,aAAa,CACd;SACA,MAAM,CAAC,OAAO,EAAE,uDAAuD,CAAC;SACxE,MAAM,CAAC,QAAQ,EAAE,uBAAuB,CAAC;SACzC,MAAM,CAAC,KAAK,EAAE,KAAa,EAAE,OAA6D,EAAE,EAAE;QAC7F,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC;QAC1D,IAAI,CAAC;YACH,MAAM,gBAAgB,CAAC,KAAK,EAAE,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,2EAA2E;YAC3E,iEAAiE;YACjE,IAAI,IAAI,IAAI,KAAK,YAAY,eAAe,EAAE,CAAC;gBAC7C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;oBACzB,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACrD,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACf,CAAC;iBAAM,CAAC;gBACN,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACvE,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;YACtC,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC;AAED,gFAAgF;AAChF,SAAS,aAAa,CAAC,KAAa,EAAE,QAA8B;IAClE,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;AACtC,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,sBAAsB,CAAC,GAAkC;IACvE,MAAM,KAAK,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC;IAC1D,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QACjC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;YAClB,MAAM,IAAI,eAAe,CACvB,4BAA4B,EAC5B,0EAA0E;gBACxE,+CAA+C,CAClD,CAAC;QACJ,CAAC;QACD,KAAK,MAAM,SAAS,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YACzC,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC;YACjC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC1C,MAAM,IAAI,eAAe,CACvB,4BAA4B,EAC5B,qBAAqB,OAAO,IAAI,KAAK,4CAA4C;oBAC/E,gEAAgE,CACnE,CAAC;YACJ,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,eAAe,CACvB,6BAA6B,EAC7B,iFAAiF;YAC/E,2FAA2F,CAC9F,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,0FAA0F;AAC1F,SAAS,sBAAsB,CAAC,MAAe;IAC7C,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC;IAC7D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;IAC3C,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IACzC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7B,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AACjD,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,eAAe,CAAC,OAA0B,EAAE,OAG1D;IACC,IAAI,OAAO,CAAC,GAAG;QAAE,OAAO;IAExB,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,MAAM,IAAI,eAAe,CACvB,4BAA4B,EAC5B,yEAAyE;YACvE,kDAAkD,EACpD,OAAO,CACR,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,eAAe,CACvB,4BAA4B,EAC5B,yEAAyE;YACvE,uEAAuE,EACzE,OAAO,CACR,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,KAAK,IAAI;QACzC,CAAC,CAAC,6BAA6B;QAC/B,CAAC,CAAC,OAAO,CAAC,UAAU;YAClB,CAAC,CAAC,GAAG,OAAO,CAAC,QAAQ,SAAS;YAC9B,CAAC,CAAC,YAAY,OAAO,CAAC,QAAQ,SAAS,CAAC;IAC5C,MAAM,EAAE,EAAE,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAkB;QACpD;YACE,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,IAAI;YACV,OAAO,EAAE,UAAU,SAAS,UAAU,OAAO,CAAC,KAAK,cAAc,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,0BAA0B;YACtH,OAAO,EAAE,KAAK;SACf;KACF,CAAC,CAAC;IAEH,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,MAAM,IAAI,eAAe,CACvB,uBAAuB,EACvB,oDAAoD,OAAO,CAAC,KAAK,IAAI,EACrE,OAAO,CACR,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,OAA0B;IAC9C,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,KAAK,IAAI;QACzC,CAAC,CAAC,6BAA6B;QAC/B,CAAC,CAAC,OAAO,CAAC,UAAU;YAClB,CAAC,CAAC,GAAG,OAAO,CAAC,QAAQ,SAAS;YAC9B,CAAC,CAAC,YAAY,OAAO,CAAC,QAAQ,SAAS,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,wBAAwB,SAAS,UAAU,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IACxF,OAAO,CAAC,GAAG,CAAC,cAAc,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,CAAC,qBAAqB,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAChD,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,0CAA0C,OAAO,CAAC,YAAY,+BAA+B,CAAC,CAAC;IAC7G,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,KAAa,EAAE,OAIrD;IACC,sBAAsB;IACtB,MAAM,cAAc,GAAG,IAAI,cAAc,EAAE,CAAC;IAC5C,MAAM,cAAc,GAAG,MAAM,cAAc,CAAC,iBAAiB,EAAE,CAAC;IAEhE,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;IAClF,CAAC;IAED,kBAAkB;IAClB,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;IAC9C,MAAM,WAAW,GAAG,MAAM,eAAe,CAAC,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAE9E,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,qCAAqC,cAAc,CAAC,IAAI,uCAAuC,CAAC,CAAC;IACnH,CAAC;IAED,MAAM,OAAO,GAAG,sBAAsB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,GAAG,GAAG,GAAG,cAAc,CAAC,QAAQ,YAAY,KAAK,IAAI,KAAK,EAAE,CAAC;IACnE,MAAM,OAAO,GAAG;QACd,QAAQ,EAAE,WAAW,CAAC,OAAO;QAC7B,eAAe,EAAE,UAAU,WAAW,CAAC,OAAO,EAAE;KACjD,CAAC;IAEF,+EAA+E;IAC/E,8EAA8E;IAC9E,6EAA6E;IAC7E,MAAM,OAAO,GAAsB;QACjC,KAAK;QACL,OAAO;QACP,QAAQ,EAAE,IAAI;QACd,UAAU,EAAE,KAAK;QACjB,GAAG;KACJ,CAAC;IACF,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,GAAG,CAC3B,GAAG,cAAc,CAAC,QAAQ,YAAY,KAAK,mBAAmB,oBAAoB,IAAI,KAAK,EAAE,EAC7F,EAAE,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,EAAE,CACrD,CAAC;QACF,MAAM,SAAS,GAAG,sBAAsB,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;QAC3E,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YACvB,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC;YAC7B,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;QAC5B,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACrC,OAAO,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;YACrC,OAAO,CAAC,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,oBAAoB,CAAC;QAChE,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAChF,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,IAAI;QAAE,YAAY,CAAC,OAAO,CAAC,CAAC;IAEzC,sEAAsE;IACtE,MAAM,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAExC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE;QACvC,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,uBAAuB,EAAE;KAC3D,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/D,MAAM,MAAM,GAAqB;QAC/B,OAAO;QACP,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE;KAC5C,CAAC;IAEF,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,WAAW,IAAI,CAAC,MAAM,iBAAiB,KAAK,GAAG,CAAC,CAAC,CAAC;IAC9E,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,KAAa,EAAE,OAO9C;IACC,sBAAsB;IACtB,MAAM,cAAc,GAAG,IAAI,cAAc,EAAE,CAAC;IAC5C,MAAM,cAAc,GAAG,MAAM,cAAc,CAAC,iBAAiB,EAAE,CAAC;IAEhE,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;IAClF,CAAC;IAED,kBAAkB;IAClB,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;IAC9C,MAAM,WAAW,GAAG,MAAM,eAAe,CAAC,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAE9E,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,qCAAqC,cAAc,CAAC,IAAI,uCAAuC,CAAC,CAAC;IACnH,CAAC;IAED,kBAAkB;IAClB,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;IACrC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IACzC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAEtC,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,uDAAuD;QACvD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5F,CAAC;IAED,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;QACpD,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,KAAK,IAAI,QAAQ,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,MAAM,GAAG,GAAG,GAAG,cAAc,CAAC,QAAQ,YAAY,KAAK,IAAI,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;IAE/E,eAAe;IACf,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE;QACpC,OAAO,EAAE;YACP,QAAQ,EAAE,WAAW,CAAC,OAAO;YAC7B,eAAe,EAAE,UAAU,WAAW,CAAC,OAAO,EAAE;SACjD;KACF,CAAC,CAAC;IAEH,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACtD,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAiC,CAAC;QAExD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;YAC9B,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,SAAS,IAAI,CAAC,MAAM,cAAc,KAAK,GAAG,CAAC,CAAC,CAAC;QACvE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,mBAAmB;QACnB,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAEjD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YAC1D,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;AACH,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,KAAa,EAAE,OAA2C;IACxF,sBAAsB;IACtB,MAAM,cAAc,GAAG,IAAI,cAAc,EAAE,CAAC;IAC5C,MAAM,cAAc,GAAG,MAAM,cAAc,CAAC,iBAAiB,EAAE,CAAC;IAEhE,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;IAClF,CAAC;IAED,kBAAkB;IAClB,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;IAC9C,MAAM,WAAW,GAAG,MAAM,eAAe,CAAC,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAE9E,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,qCAAqC,cAAc,CAAC,IAAI,uCAAuC,CAAC,CAAC;IACnH,CAAC;IAED,eAAe;IACf,IAAI,MAA2D,CAAC;IAChE,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,GAAG,GAAG,GAAG,cAAc,CAAC,QAAQ,YAAY,KAAK,EAAE,CAAC;IAE1D,eAAe;IACf,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE;QAC7C,OAAO,EAAE;YACP,QAAQ,EAAE,WAAW,CAAC,OAAO;YAC7B,eAAe,EAAE,UAAU,WAAW,CAAC,OAAO,EAAE;YAChD,cAAc,EAAE,kBAAkB;YAClC,QAAQ,EAAE,uBAAuB;SAClC;KACF,CAAC,CAAC;IAEH,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACtD,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAiC,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,YAAY,IAAI,CAAC,MAAM,gBAAgB,KAAK,EAAE,CAAC,CAAC,CAAC;IAC7E,CAAC;AACH,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,KAAa,EAAE,OAA2D;IACxG,sBAAsB;IACtB,MAAM,cAAc,GAAG,IAAI,cAAc,EAAE,CAAC;IAC5C,MAAM,cAAc,GAAG,MAAM,cAAc,CAAC,iBAAiB,EAAE,CAAC;IAEhE,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;IAClF,CAAC;IAED,kBAAkB;IAClB,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;IAC9C,MAAM,WAAW,GAAG,MAAM,eAAe,CAAC,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAE9E,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,qCAAqC,cAAc,CAAC,IAAI,uCAAuC,CAAC,CAAC;IACnH,CAAC;IAED,eAAe;IACf,IAAI,MAA+B,CAAC;IACpC,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC9C,CAAC;IAED,8BAA8B;IAC9B,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;IACrC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAE1F,MAAM,GAAG,GAAG,GAAG,cAAc,CAAC,QAAQ,YAAY,KAAK,IAAI,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;IAE/E,eAAe;IACf,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE;QAC9C,OAAO,EAAE;YACP,QAAQ,EAAE,WAAW,CAAC,OAAO;YAC7B,eAAe,EAAE,UAAU,WAAW,CAAC,OAAO,EAAE;YAChD,cAAc,EAAE,kBAAkB;YAClC,QAAQ,EAAE,uBAAuB;SAClC;KACF,CAAC,CAAC;IAEH,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACtD,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAiC,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,WAAW,IAAI,CAAC,MAAM,cAAc,KAAK,EAAE,CAAC,CAAC,CAAC;IAC1E,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
export declare function registerDbCommands(program: Command): void;
|
|
3
|
+
export declare function handleDbQuery(sql: string, options: {
|
|
4
|
+
role: string;
|
|
5
|
+
json?: boolean;
|
|
6
|
+
}, program: Command): Promise<void>;
|
|
7
|
+
export declare function handleDbCreateTable(name: string, options: {
|
|
8
|
+
columns?: string;
|
|
9
|
+
schema?: string;
|
|
10
|
+
role: string;
|
|
11
|
+
json?: boolean;
|
|
12
|
+
}, program: Command): Promise<void>;
|
|
13
|
+
export declare function handleDbAddColumn(table: string, column: string, options: {
|
|
14
|
+
type: string;
|
|
15
|
+
nullable: boolean;
|
|
16
|
+
default?: string;
|
|
17
|
+
schema?: string;
|
|
18
|
+
role: string;
|
|
19
|
+
json?: boolean;
|
|
20
|
+
}, program: Command): Promise<void>;
|
|
21
|
+
export declare function handleDbPush(file: string, options: {
|
|
22
|
+
schema: string;
|
|
23
|
+
rls?: string;
|
|
24
|
+
role: string;
|
|
25
|
+
dryRun?: boolean;
|
|
26
|
+
yes?: boolean;
|
|
27
|
+
json?: boolean;
|
|
28
|
+
}, program: Command): Promise<void>;
|
|
29
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/db/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqBpC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8HzD;AAED,wBAAsB,aAAa,CACjC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,EACzC,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,IAAI,CAAC,CAoEf;AAiOD,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,EAC5E,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,IAAI,CAAC,CAmEf;AAED,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,OAAO,EAAE;IACP,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,EACD,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,IAAI,CAAC,CAgDf;AAED,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;IACP,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,EACD,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,IAAI,CAAC,CAsDf"}
|