@revealui/mcp 0.1.0 → 0.1.3
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/LICENSE +22 -0
- package/LICENSE.commercial +111 -0
- package/README.md +3 -0
- package/dist/{packages/mcp/src/adapters → adapters}/db.d.ts +1 -1
- package/dist/adapters/db.d.ts.map +1 -0
- package/dist/adapters/db.js.map +1 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js.map +1 -0
- package/dist/contracts.d.ts.map +1 -0
- package/dist/contracts.js.map +1 -0
- package/dist/{packages/mcp/src/hypervisor.d.ts → hypervisor.d.ts} +56 -0
- package/dist/hypervisor.d.ts.map +1 -0
- package/dist/{packages/mcp/src/hypervisor.js → hypervisor.js} +209 -1
- package/dist/hypervisor.js.map +1 -0
- package/dist/{packages/mcp/src/index.d.ts → index.d.ts} +9 -5
- package/dist/index.d.ts.map +1 -0
- package/dist/{packages/mcp/src/index.js → index.js} +8 -4
- package/dist/index.js.map +1 -0
- package/dist/{packages/mcp/src/servers → servers}/adapter.d.ts +11 -1
- package/dist/servers/adapter.d.ts.map +1 -0
- package/dist/{packages/mcp/src/servers → servers}/adapter.js +20 -4
- package/dist/servers/adapter.js.map +1 -0
- package/dist/servers/revealui-content.d.ts +21 -0
- package/dist/servers/revealui-content.d.ts.map +1 -0
- package/dist/servers/revealui-content.js +211 -0
- package/dist/servers/revealui-content.js.map +1 -0
- package/dist/servers/revealui-email.d.ts +18 -0
- package/dist/servers/revealui-email.d.ts.map +1 -0
- package/dist/servers/revealui-email.js +190 -0
- package/dist/servers/revealui-email.js.map +1 -0
- package/dist/servers/revealui-stripe.d.ts +19 -0
- package/dist/servers/revealui-stripe.d.ts.map +1 -0
- package/dist/servers/revealui-stripe.js +228 -0
- package/dist/servers/revealui-stripe.js.map +1 -0
- package/package.json +50 -11
- package/.env.example +0 -9
- package/MCP_MAINTENANCE.md +0 -265
- package/__tests__/crdt.integration.test.ts +0 -156
- package/configs/README.md +0 -77
- package/configs/claude-template.json +0 -54
- package/dist/packages/core/src/database/ssl-config.d.ts +0 -9
- package/dist/packages/core/src/database/ssl-config.d.ts.map +0 -1
- package/dist/packages/core/src/database/ssl-config.js +0 -8
- package/dist/packages/core/src/database/ssl-config.js.map +0 -1
- package/dist/packages/core/src/features.d.ts +0 -86
- package/dist/packages/core/src/features.d.ts.map +0 -1
- package/dist/packages/core/src/features.js +0 -93
- package/dist/packages/core/src/features.js.map +0 -1
- package/dist/packages/core/src/license.d.ts +0 -75
- package/dist/packages/core/src/license.d.ts.map +0 -1
- package/dist/packages/core/src/license.js +0 -174
- package/dist/packages/core/src/license.js.map +0 -1
- package/dist/packages/core/src/monitoring/alerts.d.ts +0 -118
- package/dist/packages/core/src/monitoring/alerts.d.ts.map +0 -1
- package/dist/packages/core/src/monitoring/alerts.js +0 -325
- package/dist/packages/core/src/monitoring/alerts.js.map +0 -1
- package/dist/packages/core/src/monitoring/cleanup-manager.d.ts +0 -71
- package/dist/packages/core/src/monitoring/cleanup-manager.d.ts.map +0 -1
- package/dist/packages/core/src/monitoring/cleanup-manager.js +0 -227
- package/dist/packages/core/src/monitoring/cleanup-manager.js.map +0 -1
- package/dist/packages/core/src/monitoring/health-monitor.d.ts +0 -22
- package/dist/packages/core/src/monitoring/health-monitor.d.ts.map +0 -1
- package/dist/packages/core/src/monitoring/health-monitor.js +0 -143
- package/dist/packages/core/src/monitoring/health-monitor.js.map +0 -1
- package/dist/packages/core/src/monitoring/index.d.ts +0 -14
- package/dist/packages/core/src/monitoring/index.d.ts.map +0 -1
- package/dist/packages/core/src/monitoring/index.js +0 -18
- package/dist/packages/core/src/monitoring/index.js.map +0 -1
- package/dist/packages/core/src/monitoring/process-registry.d.ts +0 -97
- package/dist/packages/core/src/monitoring/process-registry.d.ts.map +0 -1
- package/dist/packages/core/src/monitoring/process-registry.js +0 -223
- package/dist/packages/core/src/monitoring/process-registry.js.map +0 -1
- package/dist/packages/core/src/monitoring/types.d.ts +0 -231
- package/dist/packages/core/src/monitoring/types.d.ts.map +0 -1
- package/dist/packages/core/src/monitoring/types.js +0 -43
- package/dist/packages/core/src/monitoring/types.js.map +0 -1
- package/dist/packages/core/src/monitoring/zombie-detector.d.ts +0 -81
- package/dist/packages/core/src/monitoring/zombie-detector.d.ts.map +0 -1
- package/dist/packages/core/src/monitoring/zombie-detector.js +0 -232
- package/dist/packages/core/src/monitoring/zombie-detector.js.map +0 -1
- package/dist/packages/core/src/observability/logger.d.ts +0 -47
- package/dist/packages/core/src/observability/logger.d.ts.map +0 -1
- package/dist/packages/core/src/observability/logger.js +0 -141
- package/dist/packages/core/src/observability/logger.js.map +0 -1
- package/dist/packages/core/src/utils/logger-server.d.ts +0 -32
- package/dist/packages/core/src/utils/logger-server.d.ts.map +0 -1
- package/dist/packages/core/src/utils/logger-server.js +0 -69
- package/dist/packages/core/src/utils/logger-server.js.map +0 -1
- package/dist/packages/core/src/utils/request-context.d.ts +0 -143
- package/dist/packages/core/src/utils/request-context.d.ts.map +0 -1
- package/dist/packages/core/src/utils/request-context.js +0 -169
- package/dist/packages/core/src/utils/request-context.js.map +0 -1
- package/dist/packages/dev/src/code-validator/index.d.ts +0 -20
- package/dist/packages/dev/src/code-validator/index.d.ts.map +0 -1
- package/dist/packages/dev/src/code-validator/index.js +0 -20
- package/dist/packages/dev/src/code-validator/index.js.map +0 -1
- package/dist/packages/dev/src/code-validator/types.d.ts +0 -67
- package/dist/packages/dev/src/code-validator/types.d.ts.map +0 -1
- package/dist/packages/dev/src/code-validator/types.js +0 -7
- package/dist/packages/dev/src/code-validator/types.js.map +0 -1
- package/dist/packages/dev/src/code-validator/validator.d.ts +0 -48
- package/dist/packages/dev/src/code-validator/validator.d.ts.map +0 -1
- package/dist/packages/dev/src/code-validator/validator.js +0 -176
- package/dist/packages/dev/src/code-validator/validator.js.map +0 -1
- package/dist/packages/mcp/src/adapters/db.d.ts.map +0 -1
- package/dist/packages/mcp/src/adapters/db.js.map +0 -1
- package/dist/packages/mcp/src/config/index.d.ts.map +0 -1
- package/dist/packages/mcp/src/config/index.js.map +0 -1
- package/dist/packages/mcp/src/contracts.d.ts.map +0 -1
- package/dist/packages/mcp/src/contracts.js.map +0 -1
- package/dist/packages/mcp/src/hypervisor.d.ts.map +0 -1
- package/dist/packages/mcp/src/hypervisor.js.map +0 -1
- package/dist/packages/mcp/src/index.d.ts.map +0 -1
- package/dist/packages/mcp/src/index.js.map +0 -1
- package/dist/packages/mcp/src/servers/adapter.d.ts.map +0 -1
- package/dist/packages/mcp/src/servers/adapter.js.map +0 -1
- package/dist/packages/mcp/src/servers/code-validator.d.ts +0 -24
- package/dist/packages/mcp/src/servers/code-validator.d.ts.map +0 -1
- package/dist/packages/mcp/src/servers/code-validator.js +0 -156
- package/dist/packages/mcp/src/servers/code-validator.js.map +0 -1
- package/dist/packages/mcp/src/servers/neon.d.ts +0 -11
- package/dist/packages/mcp/src/servers/neon.d.ts.map +0 -1
- package/dist/packages/mcp/src/servers/neon.js +0 -90
- package/dist/packages/mcp/src/servers/neon.js.map +0 -1
- package/dist/packages/mcp/src/servers/next-devtools.d.ts +0 -11
- package/dist/packages/mcp/src/servers/next-devtools.d.ts.map +0 -1
- package/dist/packages/mcp/src/servers/next-devtools.js +0 -215
- package/dist/packages/mcp/src/servers/next-devtools.js.map +0 -1
- package/dist/packages/mcp/src/servers/playwright.d.ts +0 -11
- package/dist/packages/mcp/src/servers/playwright.d.ts.map +0 -1
- package/dist/packages/mcp/src/servers/playwright.js +0 -68
- package/dist/packages/mcp/src/servers/playwright.js.map +0 -1
- package/dist/packages/mcp/src/servers/stripe.d.ts +0 -11
- package/dist/packages/mcp/src/servers/stripe.d.ts.map +0 -1
- package/dist/packages/mcp/src/servers/stripe.js +0 -86
- package/dist/packages/mcp/src/servers/stripe.js.map +0 -1
- package/dist/packages/mcp/src/servers/supabase.d.ts +0 -11
- package/dist/packages/mcp/src/servers/supabase.d.ts.map +0 -1
- package/dist/packages/mcp/src/servers/supabase.js +0 -144
- package/dist/packages/mcp/src/servers/supabase.js.map +0 -1
- package/dist/packages/mcp/src/servers/vercel.d.ts +0 -11
- package/dist/packages/mcp/src/servers/vercel.d.ts.map +0 -1
- package/dist/packages/mcp/src/servers/vercel.js +0 -87
- package/dist/packages/mcp/src/servers/vercel.js.map +0 -1
- package/dist/packages/mcp/src/servers/vultr-test.d.ts +0 -3
- package/dist/packages/mcp/src/servers/vultr-test.d.ts.map +0 -1
- package/dist/packages/mcp/src/servers/vultr-test.js +0 -82
- package/dist/packages/mcp/src/servers/vultr-test.js.map +0 -1
- package/dist/scripts/lib/analyzers/console-analyzer.d.ts +0 -188
- package/dist/scripts/lib/analyzers/console-analyzer.d.ts.map +0 -1
- package/dist/scripts/lib/analyzers/console-analyzer.js +0 -432
- package/dist/scripts/lib/analyzers/console-analyzer.js.map +0 -1
- package/dist/scripts/lib/analyzers/index.d.ts +0 -11
- package/dist/scripts/lib/analyzers/index.d.ts.map +0 -1
- package/dist/scripts/lib/analyzers/index.js +0 -11
- package/dist/scripts/lib/analyzers/index.js.map +0 -1
- package/dist/scripts/lib/args.d.ts +0 -104
- package/dist/scripts/lib/args.d.ts.map +0 -1
- package/dist/scripts/lib/args.js +0 -304
- package/dist/scripts/lib/args.js.map +0 -1
- package/dist/scripts/lib/cache.d.ts +0 -185
- package/dist/scripts/lib/cache.d.ts.map +0 -1
- package/dist/scripts/lib/cache.js +0 -390
- package/dist/scripts/lib/cache.js.map +0 -1
- package/dist/scripts/lib/cli/dispatch.d.ts +0 -116
- package/dist/scripts/lib/cli/dispatch.d.ts.map +0 -1
- package/dist/scripts/lib/cli/dispatch.js +0 -206
- package/dist/scripts/lib/cli/dispatch.js.map +0 -1
- package/dist/scripts/lib/cli/index.d.ts +0 -10
- package/dist/scripts/lib/cli/index.d.ts.map +0 -1
- package/dist/scripts/lib/cli/index.js +0 -10
- package/dist/scripts/lib/cli/index.js.map +0 -1
- package/dist/scripts/lib/database/ssl-config.d.ts +0 -26
- package/dist/scripts/lib/database/ssl-config.d.ts.map +0 -1
- package/dist/scripts/lib/database/ssl-config.js +0 -47
- package/dist/scripts/lib/database/ssl-config.js.map +0 -1
- package/dist/scripts/lib/errors.d.ts +0 -218
- package/dist/scripts/lib/errors.d.ts.map +0 -1
- package/dist/scripts/lib/errors.js +0 -543
- package/dist/scripts/lib/errors.js.map +0 -1
- package/dist/scripts/lib/exec.d.ts +0 -107
- package/dist/scripts/lib/exec.d.ts.map +0 -1
- package/dist/scripts/lib/exec.js +0 -232
- package/dist/scripts/lib/exec.js.map +0 -1
- package/dist/scripts/lib/index.d.ts +0 -50
- package/dist/scripts/lib/index.d.ts.map +0 -1
- package/dist/scripts/lib/index.js +0 -65
- package/dist/scripts/lib/index.js.map +0 -1
- package/dist/scripts/lib/logger.d.ts +0 -50
- package/dist/scripts/lib/logger.d.ts.map +0 -1
- package/dist/scripts/lib/logger.js +0 -159
- package/dist/scripts/lib/logger.js.map +0 -1
- package/dist/scripts/lib/output.d.ts +0 -149
- package/dist/scripts/lib/output.d.ts.map +0 -1
- package/dist/scripts/lib/output.js +0 -263
- package/dist/scripts/lib/output.js.map +0 -1
- package/dist/scripts/lib/parallel.d.ts +0 -164
- package/dist/scripts/lib/parallel.d.ts.map +0 -1
- package/dist/scripts/lib/parallel.js +0 -355
- package/dist/scripts/lib/parallel.js.map +0 -1
- package/dist/scripts/lib/paths.d.ts +0 -92
- package/dist/scripts/lib/paths.d.ts.map +0 -1
- package/dist/scripts/lib/paths.js +0 -171
- package/dist/scripts/lib/paths.js.map +0 -1
- package/dist/scripts/lib/state/adapters/memory.d.ts +0 -42
- package/dist/scripts/lib/state/adapters/memory.d.ts.map +0 -1
- package/dist/scripts/lib/state/adapters/memory.js +0 -110
- package/dist/scripts/lib/state/adapters/memory.js.map +0 -1
- package/dist/scripts/lib/state/adapters/pglite.d.ts +0 -46
- package/dist/scripts/lib/state/adapters/pglite.d.ts.map +0 -1
- package/dist/scripts/lib/state/adapters/pglite.js +0 -256
- package/dist/scripts/lib/state/adapters/pglite.js.map +0 -1
- package/dist/scripts/lib/state/index.d.ts +0 -16
- package/dist/scripts/lib/state/index.d.ts.map +0 -1
- package/dist/scripts/lib/state/index.js +0 -16
- package/dist/scripts/lib/state/index.js.map +0 -1
- package/dist/scripts/lib/state/types.d.ts +0 -111
- package/dist/scripts/lib/state/types.d.ts.map +0 -1
- package/dist/scripts/lib/state/types.js +0 -8
- package/dist/scripts/lib/state/types.js.map +0 -1
- package/dist/scripts/lib/state/workflow-state.d.ts +0 -110
- package/dist/scripts/lib/state/workflow-state.d.ts.map +0 -1
- package/dist/scripts/lib/state/workflow-state.js +0 -331
- package/dist/scripts/lib/state/workflow-state.js.map +0 -1
- package/dist/scripts/lib/telemetry.d.ts +0 -194
- package/dist/scripts/lib/telemetry.d.ts.map +0 -1
- package/dist/scripts/lib/telemetry.js +0 -394
- package/dist/scripts/lib/telemetry.js.map +0 -1
- package/dist/scripts/lib/utils.d.ts +0 -270
- package/dist/scripts/lib/utils.d.ts.map +0 -1
- package/dist/scripts/lib/utils.js +0 -473
- package/dist/scripts/lib/utils.js.map +0 -1
- package/dist/scripts/lib/validation/database.d.ts +0 -83
- package/dist/scripts/lib/validation/database.d.ts.map +0 -1
- package/dist/scripts/lib/validation/database.js +0 -199
- package/dist/scripts/lib/validation/database.js.map +0 -1
- package/dist/scripts/lib/validation/env.d.ts +0 -80
- package/dist/scripts/lib/validation/env.d.ts.map +0 -1
- package/dist/scripts/lib/validation/env.js +0 -246
- package/dist/scripts/lib/validation/env.js.map +0 -1
- package/dist/scripts/lib/validation/index.d.ts +0 -16
- package/dist/scripts/lib/validation/index.d.ts.map +0 -1
- package/dist/scripts/lib/validation/index.js +0 -16
- package/dist/scripts/lib/validation/index.js.map +0 -1
- package/dist/scripts/lib/validation/post-execution.d.ts +0 -74
- package/dist/scripts/lib/validation/post-execution.d.ts.map +0 -1
- package/dist/scripts/lib/validation/post-execution.js +0 -110
- package/dist/scripts/lib/validation/post-execution.js.map +0 -1
- package/dist/scripts/lib/validation/pre-execution.d.ts +0 -165
- package/dist/scripts/lib/validation/pre-execution.d.ts.map +0 -1
- package/dist/scripts/lib/validation/pre-execution.js +0 -466
- package/dist/scripts/lib/validation/pre-execution.js.map +0 -1
- package/dist/scripts/lib/validators/documentation-validator.d.ts +0 -242
- package/dist/scripts/lib/validators/documentation-validator.d.ts.map +0 -1
- package/dist/scripts/lib/validators/documentation-validator.js +0 -584
- package/dist/scripts/lib/validators/documentation-validator.js.map +0 -1
- package/dist/scripts/lib/validators/index.d.ts +0 -11
- package/dist/scripts/lib/validators/index.d.ts.map +0 -1
- package/dist/scripts/lib/validators/index.js +0 -11
- package/dist/scripts/lib/validators/index.js.map +0 -1
- package/docker-compose.yml +0 -46
- package/docs/INDEX.md +0 -88
- package/docs/README.md +0 -774
- package/docs/SETUP.md +0 -264
- package/docs/servers/code-validator.md +0 -586
- package/eslint.config.js +0 -7
- package/migrations/0001_add_crdt_columns.sql +0 -8
- package/migrations/0001_rollback.sql +0 -6
- package/migrations/005_performance_indexes.sql +0 -190
- package/migrations/backfill_crdt_meta.js +0 -45
- package/src/__tests__/hypervisor.test.ts +0 -212
- package/src/adapters/db.ts +0 -180
- package/src/config/config.json +0 -49
- package/src/config/index.ts +0 -30
- package/src/contracts.ts +0 -221
- package/src/hypervisor.ts +0 -464
- package/src/index.ts +0 -87
- package/src/servers/adapter.ts +0 -643
- package/src/servers/code-validator.ts +0 -188
- package/src/servers/neon.ts +0 -103
- package/src/servers/next-devtools.ts +0 -230
- package/src/servers/playwright.ts +0 -77
- package/src/servers/stripe.ts +0 -99
- package/src/servers/supabase.ts +0 -161
- package/src/servers/vercel.ts +0 -100
- package/src/servers/vultr-test.ts +0 -97
- package/tsconfig.json +0 -12
- package/vitest.config.ts +0 -22
- /package/dist/{packages/mcp/src/adapters → adapters}/db.js +0 -0
- /package/dist/{packages/mcp/src/config → config}/index.d.ts +0 -0
- /package/dist/{packages/mcp/src/config → config}/index.js +0 -0
- /package/dist/{packages/mcp/src/contracts.d.ts → contracts.d.ts} +0 -0
- /package/dist/{packages/mcp/src/contracts.js → contracts.js} +0 -0
|
@@ -1,473 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Miscellaneous Utility Functions
|
|
3
|
-
*
|
|
4
|
-
* These functions are migrated from the legacy utils files
|
|
5
|
-
* to provide backward compatibility.
|
|
6
|
-
*
|
|
7
|
-
* @dependencies
|
|
8
|
-
* - scripts/lib/errors.ts - ErrorCode enum and ScriptError class
|
|
9
|
-
* - node:fs/promises - File system operations
|
|
10
|
-
* - node:readline - Interactive CLI prompts
|
|
11
|
-
*/
|
|
12
|
-
import { access, readFile } from 'node:fs/promises';
|
|
13
|
-
import { createInterface } from 'node:readline';
|
|
14
|
-
import { ErrorCode, ScriptError } from './errors.js';
|
|
15
|
-
/**
|
|
16
|
-
* Reads a file and returns its contents as a string.
|
|
17
|
-
*
|
|
18
|
-
* @example
|
|
19
|
-
* ```typescript
|
|
20
|
-
* const content = await readFileContent('./config.json')
|
|
21
|
-
* ```
|
|
22
|
-
*/
|
|
23
|
-
export async function readFileContent(filePath) {
|
|
24
|
-
return readFile(filePath, 'utf-8');
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Writes content to a file.
|
|
28
|
-
*
|
|
29
|
-
* @example
|
|
30
|
-
* ```typescript
|
|
31
|
-
* await writeFileContent('./output.txt', 'Hello, world!')
|
|
32
|
-
* ```
|
|
33
|
-
*/
|
|
34
|
-
export async function writeFileContent(filePath, content) {
|
|
35
|
-
const { writeFile: fsWriteFile } = await import('node:fs/promises');
|
|
36
|
-
await fsWriteFile(filePath, content, 'utf-8');
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* Checks if a file exists.
|
|
40
|
-
*
|
|
41
|
-
* @example
|
|
42
|
-
* ```typescript
|
|
43
|
-
* if (await fileExists('./config.json')) {
|
|
44
|
-
* // File exists
|
|
45
|
-
* }
|
|
46
|
-
* ```
|
|
47
|
-
*/
|
|
48
|
-
export async function fileExists(filePath) {
|
|
49
|
-
try {
|
|
50
|
-
await access(filePath);
|
|
51
|
-
return true;
|
|
52
|
-
}
|
|
53
|
-
catch {
|
|
54
|
-
return false;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* Reads a file and returns true if it exists and has content.
|
|
59
|
-
* Returns false if the file doesn't exist.
|
|
60
|
-
*/
|
|
61
|
-
export async function readFileIfExists(filePath) {
|
|
62
|
-
try {
|
|
63
|
-
return await readFile(filePath, 'utf-8');
|
|
64
|
-
}
|
|
65
|
-
catch {
|
|
66
|
-
return null;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Prompts the user for input and returns their response.
|
|
71
|
-
*
|
|
72
|
-
* @example
|
|
73
|
-
* ```typescript
|
|
74
|
-
* const name = await prompt('Enter your name: ')
|
|
75
|
-
* ```
|
|
76
|
-
*/
|
|
77
|
-
export async function prompt(question) {
|
|
78
|
-
const rl = createInterface({
|
|
79
|
-
input: process.stdin,
|
|
80
|
-
output: process.stdout,
|
|
81
|
-
});
|
|
82
|
-
return new Promise((resolve) => {
|
|
83
|
-
rl.question(question, (answer) => {
|
|
84
|
-
rl.close();
|
|
85
|
-
resolve(answer);
|
|
86
|
-
});
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
/**
|
|
90
|
-
* Prompts the user for confirmation (yes/no).
|
|
91
|
-
*
|
|
92
|
-
* @example
|
|
93
|
-
* ```typescript
|
|
94
|
-
* if (await confirm('Are you sure?')) {
|
|
95
|
-
* // User confirmed
|
|
96
|
-
* }
|
|
97
|
-
* ```
|
|
98
|
-
*/
|
|
99
|
-
export async function confirm(question, defaultValue = false) {
|
|
100
|
-
const suffix = defaultValue ? '(Y/n)' : '(y/N)';
|
|
101
|
-
const answer = await prompt(`${question} ${suffix}: `);
|
|
102
|
-
const trimmed = answer.trim().toLowerCase();
|
|
103
|
-
if (!trimmed) {
|
|
104
|
-
return defaultValue;
|
|
105
|
-
}
|
|
106
|
-
return trimmed === 'y' || trimmed === 'yes';
|
|
107
|
-
}
|
|
108
|
-
/**
|
|
109
|
-
* Sleeps for the specified number of milliseconds.
|
|
110
|
-
*/
|
|
111
|
-
export function sleep(ms) {
|
|
112
|
-
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
113
|
-
}
|
|
114
|
-
/**
|
|
115
|
-
* Waits for a condition to be true, polling at regular intervals.
|
|
116
|
-
*
|
|
117
|
-
* @param condition - Function that returns true when the condition is met
|
|
118
|
-
* @param timeout - Maximum time to wait in milliseconds (default: 30000)
|
|
119
|
-
* @param interval - Polling interval in milliseconds (default: 1000)
|
|
120
|
-
* @returns True if condition was met, false if timeout
|
|
121
|
-
*
|
|
122
|
-
* @example
|
|
123
|
-
* ```typescript
|
|
124
|
-
* await waitFor(() => serverIsReady(), 10000)
|
|
125
|
-
* ```
|
|
126
|
-
*/
|
|
127
|
-
export async function waitFor(condition, timeout = 30000, interval = 1000) {
|
|
128
|
-
const start = Date.now();
|
|
129
|
-
while (Date.now() - start < timeout) {
|
|
130
|
-
const result = await condition();
|
|
131
|
-
if (result)
|
|
132
|
-
return true;
|
|
133
|
-
await sleep(interval);
|
|
134
|
-
}
|
|
135
|
-
return false;
|
|
136
|
-
}
|
|
137
|
-
/**
|
|
138
|
-
* Generates a random ID string.
|
|
139
|
-
*/
|
|
140
|
-
export function generateId(prefix = '', length = 8) {
|
|
141
|
-
const chars = 'abcdefghijklmnopqrstuvwxyz0123456789';
|
|
142
|
-
let id = prefix ? `${prefix}-` : '';
|
|
143
|
-
for (let i = 0; i < length; i++) {
|
|
144
|
-
id += chars.charAt(Math.floor(Math.random() * chars.length));
|
|
145
|
-
}
|
|
146
|
-
return id;
|
|
147
|
-
}
|
|
148
|
-
/**
|
|
149
|
-
* Formats bytes into a human-readable string.
|
|
150
|
-
*/
|
|
151
|
-
export function formatBytes(bytes) {
|
|
152
|
-
const units = ['B', 'KB', 'MB', 'GB', 'TB'];
|
|
153
|
-
let value = bytes;
|
|
154
|
-
let unitIndex = 0;
|
|
155
|
-
while (value >= 1024 && unitIndex < units.length - 1) {
|
|
156
|
-
value /= 1024;
|
|
157
|
-
unitIndex++;
|
|
158
|
-
}
|
|
159
|
-
return `${value.toFixed(unitIndex > 0 ? 1 : 0)} ${units[unitIndex]}`;
|
|
160
|
-
}
|
|
161
|
-
/**
|
|
162
|
-
* Formats a duration in milliseconds into a human-readable string.
|
|
163
|
-
*/
|
|
164
|
-
export function formatDuration(ms) {
|
|
165
|
-
if (ms < 1000)
|
|
166
|
-
return `${ms}ms`;
|
|
167
|
-
if (ms < 60000)
|
|
168
|
-
return `${(ms / 1000).toFixed(1)}s`;
|
|
169
|
-
if (ms < 3600000)
|
|
170
|
-
return `${Math.floor(ms / 60000)}m ${Math.floor((ms % 60000) / 1000)}s`;
|
|
171
|
-
return `${Math.floor(ms / 3600000)}h ${Math.floor((ms % 3600000) / 60000)}m`;
|
|
172
|
-
}
|
|
173
|
-
/**
|
|
174
|
-
* Truncates a string to a maximum length.
|
|
175
|
-
*/
|
|
176
|
-
export function truncate(str, maxLength, suffix = '...') {
|
|
177
|
-
if (str.length <= maxLength)
|
|
178
|
-
return str;
|
|
179
|
-
return str.substring(0, maxLength - suffix.length) + suffix;
|
|
180
|
-
}
|
|
181
|
-
/**
|
|
182
|
-
* Ensures a value is an array.
|
|
183
|
-
*/
|
|
184
|
-
export function ensureArray(value) {
|
|
185
|
-
return Array.isArray(value) ? value : [value];
|
|
186
|
-
}
|
|
187
|
-
/**
|
|
188
|
-
* Debounces a function call.
|
|
189
|
-
*/
|
|
190
|
-
export function debounce(fn, delay) {
|
|
191
|
-
let timeoutId = null;
|
|
192
|
-
return (...args) => {
|
|
193
|
-
if (timeoutId) {
|
|
194
|
-
clearTimeout(timeoutId);
|
|
195
|
-
}
|
|
196
|
-
timeoutId = setTimeout(() => {
|
|
197
|
-
fn(...args);
|
|
198
|
-
timeoutId = null;
|
|
199
|
-
}, delay);
|
|
200
|
-
};
|
|
201
|
-
}
|
|
202
|
-
/**
|
|
203
|
-
* Requires an environment variable to be set.
|
|
204
|
-
* Throws an error if the variable is not defined.
|
|
205
|
-
*
|
|
206
|
-
* @param key - Primary environment variable name
|
|
207
|
-
* @param fallbackKey - Optional fallback variable name
|
|
208
|
-
* @returns The environment variable value
|
|
209
|
-
* @throws Error if neither variable is set
|
|
210
|
-
*
|
|
211
|
-
* @example
|
|
212
|
-
* ```typescript
|
|
213
|
-
* const dbUrl = requireEnv('POSTGRES_URL', 'DATABASE_URL')
|
|
214
|
-
* ```
|
|
215
|
-
*/
|
|
216
|
-
export function requireEnv(key, fallbackKey) {
|
|
217
|
-
const value = process.env[key];
|
|
218
|
-
if (value)
|
|
219
|
-
return value;
|
|
220
|
-
if (fallbackKey) {
|
|
221
|
-
const fallbackValue = process.env[fallbackKey];
|
|
222
|
-
if (fallbackValue)
|
|
223
|
-
return fallbackValue;
|
|
224
|
-
throw new ScriptError(`Required environment variable ${key} or ${fallbackKey} is not set`, ErrorCode.CONFIG_ERROR);
|
|
225
|
-
}
|
|
226
|
-
throw new ScriptError(`Required environment variable ${key} is not set`, ErrorCode.CONFIG_ERROR);
|
|
227
|
-
}
|
|
228
|
-
/**
|
|
229
|
-
* Validates that required npm packages are installed.
|
|
230
|
-
*
|
|
231
|
-
* @param packages - List of package names to check
|
|
232
|
-
* @param options - Validation options
|
|
233
|
-
* @returns True if all dependencies are available
|
|
234
|
-
*
|
|
235
|
-
* @example
|
|
236
|
-
* ```typescript
|
|
237
|
-
* await validateDependencies(['pg', 'dotenv'], { log: true })
|
|
238
|
-
* ```
|
|
239
|
-
*/
|
|
240
|
-
export async function validateDependencies(packages, options = {}) {
|
|
241
|
-
const missing = [];
|
|
242
|
-
for (const pkg of packages) {
|
|
243
|
-
try {
|
|
244
|
-
await import(pkg);
|
|
245
|
-
}
|
|
246
|
-
catch {
|
|
247
|
-
missing.push(pkg);
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
if (missing.length > 0) {
|
|
251
|
-
if (options.log) {
|
|
252
|
-
console.error(`Missing dependencies: ${missing.join(', ')}`);
|
|
253
|
-
}
|
|
254
|
-
if (options.throwOnMissing) {
|
|
255
|
-
throw new ScriptError(`Missing dependencies: ${missing.join(', ')}`, ErrorCode.DEPENDENCY_ERROR);
|
|
256
|
-
}
|
|
257
|
-
return false;
|
|
258
|
-
}
|
|
259
|
-
return true;
|
|
260
|
-
}
|
|
261
|
-
/**
|
|
262
|
-
* Default directories to exclude from scanning
|
|
263
|
-
*/
|
|
264
|
-
const DEFAULT_EXCLUDE_DIRS = [
|
|
265
|
-
'node_modules',
|
|
266
|
-
'dist',
|
|
267
|
-
'build',
|
|
268
|
-
'.next',
|
|
269
|
-
'.turbo',
|
|
270
|
-
'.cursor',
|
|
271
|
-
'coverage',
|
|
272
|
-
'.git',
|
|
273
|
-
'.nuxt',
|
|
274
|
-
'.output',
|
|
275
|
-
'.vercel',
|
|
276
|
-
'.cache',
|
|
277
|
-
];
|
|
278
|
-
/**
|
|
279
|
-
* Scan a directory recursively for files matching criteria (async generator).
|
|
280
|
-
*
|
|
281
|
-
* This is the most memory-efficient approach for large directories.
|
|
282
|
-
* Use this when processing files one at a time or when dealing with
|
|
283
|
-
* potentially huge file sets. The generator yields files as they're found,
|
|
284
|
-
* allowing immediate processing without loading everything into memory.
|
|
285
|
-
*
|
|
286
|
-
* @param dir - Directory path to scan (absolute or relative)
|
|
287
|
-
* @param options - Scanning options
|
|
288
|
-
* @param options.extensions - File extensions to include (default: ['.ts', '.tsx', '.js', '.jsx'])
|
|
289
|
-
* @param options.excludeDirs - Directory names to exclude (default: node_modules, dist, .next, etc.)
|
|
290
|
-
* @param options.excludePatterns - Regex patterns for paths to exclude
|
|
291
|
-
* @param options.includeHidden - Whether to include hidden files/directories (default: false)
|
|
292
|
-
* @param options.maxDepth - Maximum recursion depth (default: Infinity)
|
|
293
|
-
* @param options.followSymlinks - Whether to follow symbolic links (default: false)
|
|
294
|
-
* @yields Absolute file paths matching the criteria
|
|
295
|
-
*
|
|
296
|
-
* @example
|
|
297
|
-
* ```typescript
|
|
298
|
-
* // Process files one at a time (memory efficient)
|
|
299
|
-
* for await (const file of scanDirectory('./src', { extensions: ['.ts', '.tsx'] })) {
|
|
300
|
-
* const content = await readFile(file, 'utf-8')
|
|
301
|
-
* // Process file...
|
|
302
|
-
* }
|
|
303
|
-
*
|
|
304
|
-
* // With custom exclusions
|
|
305
|
-
* for await (const file of scanDirectory('./packages', {
|
|
306
|
-
* extensions: ['.ts'],
|
|
307
|
-
* excludeDirs: ['node_modules', '__tests__'],
|
|
308
|
-
* excludePatterns: [/\.test\.ts$/],
|
|
309
|
-
* maxDepth: 3
|
|
310
|
-
* })) {
|
|
311
|
-
* console.log(file)
|
|
312
|
-
* }
|
|
313
|
-
* ```
|
|
314
|
-
*
|
|
315
|
-
* @see {@link scanDirectoryAll} to get all files as an array
|
|
316
|
-
* @see {@link scanDirectorySync} for synchronous version
|
|
317
|
-
*/
|
|
318
|
-
export async function* scanDirectory(dir, options = {}) {
|
|
319
|
-
const { extensions = ['.ts', '.tsx', '.js', '.jsx'], excludeDirs = DEFAULT_EXCLUDE_DIRS, excludePatterns = [], includeHidden = false, maxDepth = Infinity, followSymlinks = false, } = options;
|
|
320
|
-
async function* scan(currentDir, depth) {
|
|
321
|
-
if (depth > maxDepth)
|
|
322
|
-
return;
|
|
323
|
-
try {
|
|
324
|
-
const { readdir } = await import('node:fs/promises');
|
|
325
|
-
const entries = await readdir(currentDir, { withFileTypes: true });
|
|
326
|
-
for (const entry of entries) {
|
|
327
|
-
// Skip hidden files/directories unless explicitly included
|
|
328
|
-
if (!includeHidden && entry.name.startsWith('.')) {
|
|
329
|
-
continue;
|
|
330
|
-
}
|
|
331
|
-
const fullPath = `${currentDir}/${entry.name}`;
|
|
332
|
-
// Skip excluded directories
|
|
333
|
-
if (entry.isDirectory() && excludeDirs.includes(entry.name)) {
|
|
334
|
-
continue;
|
|
335
|
-
}
|
|
336
|
-
// Skip files/dirs matching exclude patterns
|
|
337
|
-
if (excludePatterns.some((pattern) => pattern.test(fullPath))) {
|
|
338
|
-
continue;
|
|
339
|
-
}
|
|
340
|
-
if (entry.isDirectory()) {
|
|
341
|
-
yield* scan(fullPath, depth + 1);
|
|
342
|
-
}
|
|
343
|
-
else if (entry.isFile() || (followSymlinks && entry.isSymbolicLink())) {
|
|
344
|
-
// Check file extension
|
|
345
|
-
const ext = entry.name.substring(entry.name.lastIndexOf('.'));
|
|
346
|
-
if (extensions.length === 0 || extensions.includes(ext)) {
|
|
347
|
-
yield fullPath;
|
|
348
|
-
}
|
|
349
|
-
}
|
|
350
|
-
}
|
|
351
|
-
}
|
|
352
|
-
catch (_error) {
|
|
353
|
-
// Skip directories we can't read (permissions, etc.)
|
|
354
|
-
// Silently fail to avoid breaking the scan
|
|
355
|
-
}
|
|
356
|
-
}
|
|
357
|
-
yield* scan(dir, 0);
|
|
358
|
-
}
|
|
359
|
-
/**
|
|
360
|
-
* Scan a directory and return all matching files as an array (async).
|
|
361
|
-
*
|
|
362
|
-
* Use this when you need all files at once for batch processing or analysis.
|
|
363
|
-
* For large directories (>1000 files), prefer scanDirectory() generator to
|
|
364
|
-
* avoid loading everything into memory at once.
|
|
365
|
-
*
|
|
366
|
-
* @param dir - Directory path to scan (absolute or relative)
|
|
367
|
-
* @param options - Scanning options (same as scanDirectory)
|
|
368
|
-
* @returns Promise resolving to array of absolute file paths
|
|
369
|
-
*
|
|
370
|
-
* @example
|
|
371
|
-
* ```typescript
|
|
372
|
-
* // Get all TypeScript files
|
|
373
|
-
* const files = await scanDirectoryAll('./src', { extensions: ['.ts', '.tsx'] })
|
|
374
|
-
* console.log(`Found ${files.length} TypeScript files`)
|
|
375
|
-
*
|
|
376
|
-
* // Analyze all files at once
|
|
377
|
-
* const result = await analyzeFiles(files, process.cwd())
|
|
378
|
-
*
|
|
379
|
-
* // With custom options
|
|
380
|
-
* const sourceFiles = await scanDirectoryAll('./packages', {
|
|
381
|
-
* extensions: ['.ts'],
|
|
382
|
-
* excludeDirs: ['node_modules', 'dist', '__tests__'],
|
|
383
|
-
* includeHidden: false
|
|
384
|
-
* })
|
|
385
|
-
* ```
|
|
386
|
-
*
|
|
387
|
-
* @see {@link scanDirectory} for memory-efficient generator version
|
|
388
|
-
* @see {@link scanDirectorySync} for synchronous version
|
|
389
|
-
*/
|
|
390
|
-
export async function scanDirectoryAll(dir, options = {}) {
|
|
391
|
-
const files = [];
|
|
392
|
-
for await (const file of scanDirectory(dir, options)) {
|
|
393
|
-
files.push(file);
|
|
394
|
-
}
|
|
395
|
-
return files;
|
|
396
|
-
}
|
|
397
|
-
/**
|
|
398
|
-
* Scan a directory synchronously (blocking).
|
|
399
|
-
*
|
|
400
|
-
* Use this only when you absolutely must have synchronous file scanning
|
|
401
|
-
* (e.g., in module initialization, config loading). Prefer scanDirectory()
|
|
402
|
-
* or scanDirectoryAll() for better performance and non-blocking I/O.
|
|
403
|
-
* This is provided for backward compatibility with existing scripts.
|
|
404
|
-
*
|
|
405
|
-
* @param dir - Directory path to scan (absolute or relative)
|
|
406
|
-
* @param options - Scanning options (same as scanDirectory)
|
|
407
|
-
* @param options.extensions - File extensions to include (default: ['.ts', '.tsx', '.js', '.jsx'])
|
|
408
|
-
* @param options.excludeDirs - Directory names to exclude
|
|
409
|
-
* @param options.excludePatterns - Regex patterns for paths to exclude
|
|
410
|
-
* @param options.includeHidden - Whether to include hidden files
|
|
411
|
-
* @param options.maxDepth - Maximum recursion depth
|
|
412
|
-
* @param options.followSymlinks - Whether to follow symbolic links
|
|
413
|
-
* @returns Array of absolute file paths
|
|
414
|
-
*
|
|
415
|
-
* @example
|
|
416
|
-
* ```typescript
|
|
417
|
-
* // Basic synchronous scanning
|
|
418
|
-
* const files = scanDirectorySync('./src', { extensions: ['.ts', '.tsx'] })
|
|
419
|
-
* console.log(`Found ${files.length} files`)
|
|
420
|
-
*
|
|
421
|
-
* // In config file where async not available
|
|
422
|
-
* const configFiles = scanDirectorySync('./config', {
|
|
423
|
-
* extensions: ['.json', '.yaml'],
|
|
424
|
-
* maxDepth: 2
|
|
425
|
-
* })
|
|
426
|
-
* ```
|
|
427
|
-
*
|
|
428
|
-
* @see {@link scanDirectory} for async generator version
|
|
429
|
-
* @see {@link scanDirectoryAll} for async array version
|
|
430
|
-
*/
|
|
431
|
-
export function scanDirectorySync(dir, options = {}) {
|
|
432
|
-
const { extensions = ['.ts', '.tsx', '.js', '.jsx'], excludeDirs = DEFAULT_EXCLUDE_DIRS, excludePatterns = [], includeHidden = false, maxDepth = Infinity, followSymlinks = false, } = options;
|
|
433
|
-
const files = [];
|
|
434
|
-
function scan(currentDir, depth) {
|
|
435
|
-
if (depth > maxDepth)
|
|
436
|
-
return;
|
|
437
|
-
try {
|
|
438
|
-
const { readdirSync } = require('node:fs');
|
|
439
|
-
const entries = readdirSync(currentDir, { withFileTypes: true });
|
|
440
|
-
for (const entry of entries) {
|
|
441
|
-
// Skip hidden files/directories unless explicitly included
|
|
442
|
-
if (!includeHidden && entry.name.startsWith('.')) {
|
|
443
|
-
continue;
|
|
444
|
-
}
|
|
445
|
-
const fullPath = `${currentDir}/${entry.name}`;
|
|
446
|
-
// Skip excluded directories
|
|
447
|
-
if (entry.isDirectory() && excludeDirs.includes(entry.name)) {
|
|
448
|
-
continue;
|
|
449
|
-
}
|
|
450
|
-
// Skip files/dirs matching exclude patterns
|
|
451
|
-
if (excludePatterns.some((pattern) => pattern.test(fullPath))) {
|
|
452
|
-
continue;
|
|
453
|
-
}
|
|
454
|
-
if (entry.isDirectory()) {
|
|
455
|
-
scan(fullPath, depth + 1);
|
|
456
|
-
}
|
|
457
|
-
else if (entry.isFile() || (followSymlinks && entry.isSymbolicLink())) {
|
|
458
|
-
// Check file extension
|
|
459
|
-
const ext = entry.name.substring(entry.name.lastIndexOf('.'));
|
|
460
|
-
if (extensions.length === 0 || extensions.includes(ext)) {
|
|
461
|
-
files.push(fullPath);
|
|
462
|
-
}
|
|
463
|
-
}
|
|
464
|
-
}
|
|
465
|
-
}
|
|
466
|
-
catch {
|
|
467
|
-
// Skip directories we can't read
|
|
468
|
-
}
|
|
469
|
-
}
|
|
470
|
-
scan(dir, 0);
|
|
471
|
-
return files;
|
|
472
|
-
}
|
|
473
|
-
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../scripts/lib/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Database Validation Utilities
|
|
3
|
-
*
|
|
4
|
-
* Validates database connections and schema.
|
|
5
|
-
*
|
|
6
|
-
* @dependencies
|
|
7
|
-
* - scripts/lib/logger.ts - Logger utilities
|
|
8
|
-
* - pg - PostgreSQL client for connection testing
|
|
9
|
-
*/
|
|
10
|
-
import { type Logger } from '../logger.js';
|
|
11
|
-
export interface DatabaseConnectionResult {
|
|
12
|
-
connected: boolean;
|
|
13
|
-
error?: string;
|
|
14
|
-
latencyMs?: number;
|
|
15
|
-
serverVersion?: string;
|
|
16
|
-
database?: string;
|
|
17
|
-
isNeon?: boolean;
|
|
18
|
-
isSupabase?: boolean;
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Parses a PostgreSQL connection string to extract components.
|
|
22
|
-
*/
|
|
23
|
-
export declare function parseConnectionString(connectionString: string): {
|
|
24
|
-
host: string;
|
|
25
|
-
port: number;
|
|
26
|
-
database: string;
|
|
27
|
-
user: string;
|
|
28
|
-
password: string;
|
|
29
|
-
ssl: boolean;
|
|
30
|
-
} | null;
|
|
31
|
-
/**
|
|
32
|
-
* Detects the database provider from a connection string.
|
|
33
|
-
*/
|
|
34
|
-
export declare function detectDatabaseProvider(connectionString: string): 'neon' | 'supabase' | 'postgres' | 'unknown';
|
|
35
|
-
/**
|
|
36
|
-
* Validates a database connection by attempting to connect.
|
|
37
|
-
*
|
|
38
|
-
* @example
|
|
39
|
-
* ```typescript
|
|
40
|
-
* const result = await validateDatabaseConnection(process.env.POSTGRES_URL!)
|
|
41
|
-
* if (!result.connected) {
|
|
42
|
-
* console.error('Connection failed:', result.error)
|
|
43
|
-
* }
|
|
44
|
-
* ```
|
|
45
|
-
*/
|
|
46
|
-
export declare function validateDatabaseConnection(connectionString: string, options?: {
|
|
47
|
-
timeout?: number;
|
|
48
|
-
logger?: Logger;
|
|
49
|
-
}): Promise<DatabaseConnectionResult>;
|
|
50
|
-
/**
|
|
51
|
-
* Validates that required tables exist in the database.
|
|
52
|
-
*
|
|
53
|
-
* @example
|
|
54
|
-
* ```typescript
|
|
55
|
-
* const { valid, missing } = await validateTables(connectionString, ['users', 'sessions', 'sites'])
|
|
56
|
-
* ```
|
|
57
|
-
*/
|
|
58
|
-
export declare function validateTables(connectionString: string, expectedTables: string[]): Promise<{
|
|
59
|
-
valid: boolean;
|
|
60
|
-
existing: string[];
|
|
61
|
-
missing: string[];
|
|
62
|
-
}>;
|
|
63
|
-
/**
|
|
64
|
-
* Gets the list of all tables in the database.
|
|
65
|
-
*/
|
|
66
|
-
export declare function listTables(connectionString: string): Promise<string[]>;
|
|
67
|
-
/**
|
|
68
|
-
* Core tables that should exist in the RevealUI database.
|
|
69
|
-
*/
|
|
70
|
-
export declare const CORE_TABLES: string[];
|
|
71
|
-
/**
|
|
72
|
-
* Agent-related tables.
|
|
73
|
-
*/
|
|
74
|
-
export declare const AGENT_TABLES: string[];
|
|
75
|
-
/**
|
|
76
|
-
* CRDT-related tables.
|
|
77
|
-
*/
|
|
78
|
-
export declare const CRDT_TABLES: string[];
|
|
79
|
-
/**
|
|
80
|
-
* All expected tables in the RevealUI database.
|
|
81
|
-
*/
|
|
82
|
-
export declare const ALL_TABLES: string[];
|
|
83
|
-
//# sourceMappingURL=database.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../../../../../scripts/lib/validation/database.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,cAAc,CAAA;AAExD,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,OAAO,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,gBAAgB,EAAE,MAAM,GAAG;IAC/D,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,GAAG,EAAE,OAAO,CAAA;CACb,GAAG,IAAI,CAcP;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,gBAAgB,EAAE,MAAM,GACvB,MAAM,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,CAgB9C;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,0BAA0B,CAC9C,gBAAgB,EAAE,MAAM,EACxB,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAO,GAClD,OAAO,CAAC,wBAAwB,CAAC,CAiDnC;AAED;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAClC,gBAAgB,EAAE,MAAM,EACxB,cAAc,EAAE,MAAM,EAAE,GACvB,OAAO,CAAC;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAkCpE;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CA2B5E;AAED;;GAEG;AACH,eAAO,MAAM,WAAW,UAYvB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,YAAY,UAAyE,CAAA;AAElG;;GAEG;AACH,eAAO,MAAM,WAAW,UAA0C,CAAA;AAElE;;GAEG;AACH,eAAO,MAAM,UAAU,UAAoD,CAAA"}
|