admindb 1.2.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +250 -352
- package/dist/app.d.ts +25 -4
- package/dist/app.js +79 -15
- package/dist/app.js.map +1 -1
- package/dist/auth/config.d.ts +19 -0
- package/dist/auth/config.js +147 -0
- package/dist/auth/config.js.map +1 -0
- package/dist/auth/crypto.d.ts +27 -0
- package/dist/auth/crypto.js +133 -0
- package/dist/auth/crypto.js.map +1 -0
- package/dist/auth/index.d.ts +5 -0
- package/dist/auth/index.js +22 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/middleware.d.ts +14 -0
- package/dist/auth/middleware.js +100 -0
- package/dist/auth/middleware.js.map +1 -0
- package/dist/auth/routes.d.ts +7 -0
- package/dist/auth/routes.js +78 -0
- package/dist/auth/routes.js.map +1 -0
- package/dist/auth/types.d.ts +35 -0
- package/dist/auth/types.js +11 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/cli/args.d.ts +45 -0
- package/dist/cli/args.js +328 -0
- package/dist/cli/args.js.map +1 -0
- package/dist/cli/config.d.ts +56 -0
- package/dist/cli/config.js +133 -0
- package/dist/cli/config.js.map +1 -0
- package/dist/cli/index.d.ts +4 -0
- package/dist/cli/index.js +21 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/runner.d.ts +1 -0
- package/dist/cli/runner.js +222 -0
- package/dist/cli/runner.js.map +1 -0
- package/dist/cli.js +2 -127
- package/dist/cli.js.map +1 -1
- package/dist/data/datasets.d.ts +17 -0
- package/dist/data/datasets.js +133 -0
- package/dist/data/datasets.js.map +1 -0
- package/dist/data/detector.d.ts +30 -0
- package/dist/data/detector.js +472 -0
- package/dist/data/detector.js.map +1 -0
- package/dist/data/engine.d.ts +10 -0
- package/dist/data/engine.js +211 -0
- package/dist/data/engine.js.map +1 -0
- package/dist/data/index.d.ts +5 -0
- package/dist/data/index.js +22 -0
- package/dist/data/index.js.map +1 -0
- package/dist/data/strategies.d.ts +30 -0
- package/dist/data/strategies.js +343 -0
- package/dist/data/strategies.js.map +1 -0
- package/dist/data/types.d.ts +73 -0
- package/dist/data/types.js +8 -0
- package/dist/data/types.js.map +1 -0
- package/dist/db/database.d.ts +14 -142
- package/dist/db/database.js +209 -435
- package/dist/db/database.js.map +1 -1
- package/dist/db/export.d.ts +2 -2
- package/dist/db/export.js +7 -2
- package/dist/db/export.js.map +1 -1
- package/dist/db/filters.d.ts +22 -0
- package/dist/db/filters.js +158 -0
- package/dist/db/filters.js.map +1 -0
- package/dist/db/index.d.ts +8 -0
- package/dist/db/index.js +25 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/introspection.d.ts +6 -0
- package/dist/db/introspection.js +172 -0
- package/dist/db/introspection.js.map +1 -0
- package/dist/db/manager.d.ts +32 -19
- package/dist/db/manager.js +203 -44
- package/dist/db/manager.js.map +1 -1
- package/dist/db/migrations.d.ts +5 -0
- package/dist/db/migrations.js +110 -0
- package/dist/db/migrations.js.map +1 -0
- package/dist/db/postgres.d.ts +85 -0
- package/dist/db/postgres.js +745 -0
- package/dist/db/postgres.js.map +1 -0
- package/dist/db/types.d.ts +206 -0
- package/dist/db/types.js +7 -0
- package/dist/db/types.js.map +1 -0
- package/dist/index.d.ts +9 -2
- package/dist/index.js +46 -4
- package/dist/index.js.map +1 -1
- package/dist/public/css/app.css +1 -1
- package/dist/public/css/input.css +83 -13
- package/dist/public/js/app.js +142 -0
- package/dist/public/js/browse.js +591 -104
- package/dist/public/js/databases.js +105 -13
- package/dist/public/js/designer.js +40 -2
- package/dist/public/js/forms.js +610 -28
- package/dist/public/js/icons.js +51 -0
- package/dist/public/js/inspector.js +638 -0
- package/dist/public/js/query.js +93 -3
- package/dist/public/js/schema.js +170 -52
- package/dist/public/js/seed.js +1090 -0
- package/dist/routes/api/helpers.d.ts +42 -0
- package/dist/routes/api/helpers.js +133 -0
- package/dist/routes/api/helpers.js.map +1 -0
- package/dist/routes/api/import-export.d.ts +3 -0
- package/dist/routes/api/import-export.js +85 -0
- package/dist/routes/api/import-export.js.map +1 -0
- package/dist/routes/api/index.d.ts +4 -0
- package/dist/routes/api/index.js +37 -0
- package/dist/routes/api/index.js.map +1 -0
- package/dist/routes/api/query.d.ts +3 -0
- package/dist/routes/api/query.js +76 -0
- package/dist/routes/api/query.js.map +1 -0
- package/dist/routes/api/rows.d.ts +3 -0
- package/dist/routes/api/rows.js +373 -0
- package/dist/routes/api/rows.js.map +1 -0
- package/dist/routes/api/seed.d.ts +3 -0
- package/dist/routes/api/seed.js +82 -0
- package/dist/routes/api/seed.js.map +1 -0
- package/dist/routes/api/tables.d.ts +3 -0
- package/dist/routes/api/tables.js +160 -0
- package/dist/routes/api/tables.js.map +1 -0
- package/dist/routes/databases.d.ts +8 -11
- package/dist/routes/databases.js +100 -66
- package/dist/routes/databases.js.map +1 -1
- package/dist/routes/index.d.ts +3 -0
- package/dist/routes/index.js +20 -0
- package/dist/routes/index.js.map +1 -0
- package/dist/routes/pages.d.ts +3 -3
- package/dist/routes/pages.js +163 -54
- package/dist/routes/pages.js.map +1 -1
- package/dist/serverless.d.ts +40 -0
- package/dist/serverless.js +210 -0
- package/dist/serverless.js.map +1 -0
- package/dist/sql/generator.d.ts +4 -3
- package/dist/sql/generator.js +103 -6
- package/dist/sql/generator.js.map +1 -1
- package/dist/sql/index.d.ts +2 -0
- package/dist/sql/index.js +19 -0
- package/dist/sql/index.js.map +1 -0
- package/dist/types/api.d.ts +412 -0
- package/dist/types/api.js +9 -0
- package/dist/types/api.js.map +1 -0
- package/dist/utils/colors.d.ts +40 -0
- package/dist/utils/colors.js +64 -0
- package/dist/utils/colors.js.map +1 -0
- package/dist/{util.d.ts → utils/common.d.ts} +10 -6
- package/dist/{util.js → utils/common.js} +80 -13
- package/dist/utils/common.js.map +1 -0
- package/dist/utils/csv.js.map +1 -0
- package/dist/utils/datatype.d.ts +49 -0
- package/dist/utils/datatype.js +222 -0
- package/dist/utils/datatype.js.map +1 -0
- package/dist/utils/icons.d.ts +11 -0
- package/dist/utils/icons.js +72 -0
- package/dist/utils/icons.js.map +1 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.js +21 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/{logger.d.ts → utils/logger.d.ts} +1 -1
- package/dist/utils/logger.js +40 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/views/layouts/main.hbs +33 -11
- package/dist/views/pages/databases.hbs +182 -74
- package/dist/views/pages/designer.hbs +9 -6
- package/dist/views/pages/error.hbs +3 -3
- package/dist/views/pages/form.hbs +5 -3
- package/dist/views/pages/home.hbs +22 -13
- package/dist/views/pages/login.hbs +111 -0
- package/dist/views/pages/query.hbs +10 -8
- package/dist/views/pages/schema.hbs +41 -13
- package/dist/views/pages/seed.hbs +232 -0
- package/dist/views/pages/table.hbs +155 -70
- package/dist/views/partials/icon.hbs +2 -0
- package/dist/views/partials/navbar.hbs +70 -31
- package/dist/views/partials/sidebar.hbs +108 -99
- package/package.json +12 -5
- package/dist/args.d.ts +0 -28
- package/dist/args.js +0 -187
- package/dist/args.js.map +0 -1
- package/dist/config.d.ts +0 -17
- package/dist/config.js +0 -23
- package/dist/config.js.map +0 -1
- package/dist/csv.js.map +0 -1
- package/dist/logger.js +0 -25
- package/dist/logger.js.map +0 -1
- package/dist/routes/api.d.ts +0 -9
- package/dist/routes/api.js +0 -786
- package/dist/routes/api.js.map +0 -1
- package/dist/test/classifier.test.d.ts +0 -1
- package/dist/test/classifier.test.js +0 -44
- package/dist/test/classifier.test.js.map +0 -1
- package/dist/test/csv.test.d.ts +0 -1
- package/dist/test/csv.test.js +0 -64
- package/dist/test/csv.test.js.map +0 -1
- package/dist/test/database.test.d.ts +0 -1
- package/dist/test/database.test.js +0 -402
- package/dist/test/database.test.js.map +0 -1
- package/dist/test/generator.test.d.ts +0 -1
- package/dist/test/generator.test.js +0 -132
- package/dist/test/generator.test.js.map +0 -1
- package/dist/test/manager.test.d.ts +0 -1
- package/dist/test/manager.test.js +0 -146
- package/dist/test/manager.test.js.map +0 -1
- package/dist/util.js.map +0 -1
- /package/dist/{csv.d.ts → utils/csv.d.ts} +0 -0
- /package/dist/{csv.js → utils/csv.js} +0 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lightweight ANSI color utility with zero runtime dependencies.
|
|
3
|
+
*
|
|
4
|
+
* Supports detection of terminal color capabilities via `process.stdout.isTTY`,
|
|
5
|
+
* `FORCE_COLOR`, `NO_COLOR`, and CI environments.
|
|
6
|
+
*/
|
|
7
|
+
export declare function supportsColor(): boolean;
|
|
8
|
+
export declare const c: {
|
|
9
|
+
reset: (str: unknown) => string;
|
|
10
|
+
bold: (str: unknown) => string;
|
|
11
|
+
dim: (str: unknown) => string;
|
|
12
|
+
italic: (str: unknown) => string;
|
|
13
|
+
underline: (str: unknown) => string;
|
|
14
|
+
inverse: (str: unknown) => string;
|
|
15
|
+
black: (str: unknown) => string;
|
|
16
|
+
red: (str: unknown) => string;
|
|
17
|
+
green: (str: unknown) => string;
|
|
18
|
+
yellow: (str: unknown) => string;
|
|
19
|
+
blue: (str: unknown) => string;
|
|
20
|
+
magenta: (str: unknown) => string;
|
|
21
|
+
cyan: (str: unknown) => string;
|
|
22
|
+
white: (str: unknown) => string;
|
|
23
|
+
gray: (str: unknown) => string;
|
|
24
|
+
brightRed: (str: unknown) => string;
|
|
25
|
+
brightGreen: (str: unknown) => string;
|
|
26
|
+
brightYellow: (str: unknown) => string;
|
|
27
|
+
brightBlue: (str: unknown) => string;
|
|
28
|
+
brightMagenta: (str: unknown) => string;
|
|
29
|
+
brightCyan: (str: unknown) => string;
|
|
30
|
+
brightWhite: (str: unknown) => string;
|
|
31
|
+
bgBlack: (str: unknown) => string;
|
|
32
|
+
bgRed: (str: unknown) => string;
|
|
33
|
+
bgGreen: (str: unknown) => string;
|
|
34
|
+
bgYellow: (str: unknown) => string;
|
|
35
|
+
bgBlue: (str: unknown) => string;
|
|
36
|
+
bgMagenta: (str: unknown) => string;
|
|
37
|
+
bgCyan: (str: unknown) => string;
|
|
38
|
+
bgWhite: (str: unknown) => string;
|
|
39
|
+
bgGray: (str: unknown) => string;
|
|
40
|
+
};
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Lightweight ANSI color utility with zero runtime dependencies.
|
|
4
|
+
*
|
|
5
|
+
* Supports detection of terminal color capabilities via `process.stdout.isTTY`,
|
|
6
|
+
* `FORCE_COLOR`, `NO_COLOR`, and CI environments.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.c = void 0;
|
|
10
|
+
exports.supportsColor = supportsColor;
|
|
11
|
+
function supportsColor() {
|
|
12
|
+
if (process.env.NO_COLOR || process.env.NODE_DISABLE_COLORS)
|
|
13
|
+
return false;
|
|
14
|
+
if (process.env.FORCE_COLOR && process.env.FORCE_COLOR !== '0')
|
|
15
|
+
return true;
|
|
16
|
+
if (process.env.TERM === 'dumb')
|
|
17
|
+
return false;
|
|
18
|
+
if (process.env.CI)
|
|
19
|
+
return true;
|
|
20
|
+
return Boolean(process.stdout && process.stdout.isTTY);
|
|
21
|
+
}
|
|
22
|
+
const wrap = (open, close) => (str) => {
|
|
23
|
+
const text = String(str ?? '');
|
|
24
|
+
if (!supportsColor() || !text)
|
|
25
|
+
return text;
|
|
26
|
+
return `${open}${text}${close}`;
|
|
27
|
+
};
|
|
28
|
+
exports.c = {
|
|
29
|
+
reset: wrap('\x1b[0m', '\x1b[0m'),
|
|
30
|
+
bold: wrap('\x1b[1m', '\x1b[22m'),
|
|
31
|
+
dim: wrap('\x1b[2m', '\x1b[22m'),
|
|
32
|
+
italic: wrap('\x1b[3m', '\x1b[23m'),
|
|
33
|
+
underline: wrap('\x1b[4m', '\x1b[24m'),
|
|
34
|
+
inverse: wrap('\x1b[7m', '\x1b[27m'),
|
|
35
|
+
// Foreground colors
|
|
36
|
+
black: wrap('\x1b[30m', '\x1b[39m'),
|
|
37
|
+
red: wrap('\x1b[31m', '\x1b[39m'),
|
|
38
|
+
green: wrap('\x1b[32m', '\x1b[39m'),
|
|
39
|
+
yellow: wrap('\x1b[33m', '\x1b[39m'),
|
|
40
|
+
blue: wrap('\x1b[34m', '\x1b[39m'),
|
|
41
|
+
magenta: wrap('\x1b[35m', '\x1b[39m'),
|
|
42
|
+
cyan: wrap('\x1b[36m', '\x1b[39m'),
|
|
43
|
+
white: wrap('\x1b[37m', '\x1b[39m'),
|
|
44
|
+
gray: wrap('\x1b[90m', '\x1b[39m'),
|
|
45
|
+
// Bright foregrounds
|
|
46
|
+
brightRed: wrap('\x1b[91m', '\x1b[39m'),
|
|
47
|
+
brightGreen: wrap('\x1b[92m', '\x1b[39m'),
|
|
48
|
+
brightYellow: wrap('\x1b[93m', '\x1b[39m'),
|
|
49
|
+
brightBlue: wrap('\x1b[94m', '\x1b[39m'),
|
|
50
|
+
brightMagenta: wrap('\x1b[95m', '\x1b[39m'),
|
|
51
|
+
brightCyan: wrap('\x1b[96m', '\x1b[39m'),
|
|
52
|
+
brightWhite: wrap('\x1b[97m', '\x1b[39m'),
|
|
53
|
+
// Background colors
|
|
54
|
+
bgBlack: wrap('\x1b[40m', '\x1b[49m'),
|
|
55
|
+
bgRed: wrap('\x1b[41m', '\x1b[49m'),
|
|
56
|
+
bgGreen: wrap('\x1b[42m', '\x1b[49m'),
|
|
57
|
+
bgYellow: wrap('\x1b[43m', '\x1b[49m'),
|
|
58
|
+
bgBlue: wrap('\x1b[44m', '\x1b[49m'),
|
|
59
|
+
bgMagenta: wrap('\x1b[45m', '\x1b[49m'),
|
|
60
|
+
bgCyan: wrap('\x1b[46m', '\x1b[49m'),
|
|
61
|
+
bgWhite: wrap('\x1b[47m', '\x1b[49m'),
|
|
62
|
+
bgGray: wrap('\x1b[100m', '\x1b[49m'),
|
|
63
|
+
};
|
|
64
|
+
//# sourceMappingURL=colors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"colors.js","sourceRoot":"","sources":["../../src/utils/colors.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
/** Small shared helpers used across the server. */
|
|
2
1
|
export declare function errorMessage(err: unknown): string;
|
|
3
2
|
/**
|
|
4
3
|
* True when `p` is equal to `root` or lives inside it (both treated as
|
|
5
4
|
* absolute). Used to sandbox the filesystem file-browser to an allowed folder.
|
|
5
|
+
* Resolves symlinks and rejects null-byte injections.
|
|
6
6
|
*/
|
|
7
7
|
export declare function isPathWithinRoot(root: string, p: string): boolean;
|
|
8
8
|
/** Operators understood by the structured (type-aware) filter conditions. */
|
|
@@ -36,11 +36,15 @@ export declare function normalizeCell(value: unknown): unknown;
|
|
|
36
36
|
/** Normalize every cell in a row. */
|
|
37
37
|
export declare function normalizeRow(row: Record<string, unknown>): Record<string, unknown>;
|
|
38
38
|
/**
|
|
39
|
-
* Coerce a raw form value into a value suitable for SQLite binding.
|
|
39
|
+
* Coerce a raw form value into a value suitable for SQLite or Postgres binding.
|
|
40
40
|
* - empty string / null / undefined → null ("not set")
|
|
41
41
|
* - `0` stays valid
|
|
42
|
-
* - BOOLEAN → 1/0
|
|
43
|
-
* - INTEGER/REAL → number when numeric
|
|
44
|
-
* - BLOB → Buffer (0x-hex or raw text)
|
|
42
|
+
* - BOOLEAN → 1/0 (SQLite) or boolean (PostgreSQL)
|
|
43
|
+
* - INTEGER/REAL/BIGINT/NUMERIC → number when numeric
|
|
44
|
+
* - BLOB / BYTEA → Buffer (0x-hex, \x-hex, or raw text)
|
|
45
45
|
*/
|
|
46
|
-
export declare function coerceFormValue(raw: unknown, columnType: string): unknown;
|
|
46
|
+
export declare function coerceFormValue(raw: unknown, columnType: string, dialect?: 'sqlite' | 'postgres'): unknown;
|
|
47
|
+
/** Format byte size to human readable string (e.g. 1.2 MB). */
|
|
48
|
+
export declare function formatBytes(bytes: number): string;
|
|
49
|
+
/** Truncate a string with an ellipsis if it exceeds maxLength. */
|
|
50
|
+
export declare function truncate(str: string, maxLength: number): string;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
/** Small shared helpers used across the server. */
|
|
3
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
4
|
};
|
|
@@ -14,6 +13,9 @@ exports.decodePk = decodePk;
|
|
|
14
13
|
exports.normalizeCell = normalizeCell;
|
|
15
14
|
exports.normalizeRow = normalizeRow;
|
|
16
15
|
exports.coerceFormValue = coerceFormValue;
|
|
16
|
+
exports.formatBytes = formatBytes;
|
|
17
|
+
exports.truncate = truncate;
|
|
18
|
+
const node_fs_1 = require("node:fs");
|
|
17
19
|
const node_path_1 = __importDefault(require("node:path"));
|
|
18
20
|
function errorMessage(err) {
|
|
19
21
|
if (err instanceof Error)
|
|
@@ -23,9 +25,28 @@ function errorMessage(err) {
|
|
|
23
25
|
/**
|
|
24
26
|
* True when `p` is equal to `root` or lives inside it (both treated as
|
|
25
27
|
* absolute). Used to sandbox the filesystem file-browser to an allowed folder.
|
|
28
|
+
* Resolves symlinks and rejects null-byte injections.
|
|
26
29
|
*/
|
|
27
30
|
function isPathWithinRoot(root, p) {
|
|
28
|
-
|
|
31
|
+
if (!root || !p || typeof root !== 'string' || typeof p !== 'string')
|
|
32
|
+
return false;
|
|
33
|
+
if (p.includes('\0') || root.includes('\0'))
|
|
34
|
+
return false;
|
|
35
|
+
const absRoot = node_path_1.default.resolve(root);
|
|
36
|
+
const absPath = node_path_1.default.resolve(p);
|
|
37
|
+
let realRoot = absRoot;
|
|
38
|
+
let realPath = absPath;
|
|
39
|
+
try {
|
|
40
|
+
if ((0, node_fs_1.existsSync)(absRoot))
|
|
41
|
+
realRoot = (0, node_fs_1.realpathSync)(absRoot);
|
|
42
|
+
}
|
|
43
|
+
catch { }
|
|
44
|
+
try {
|
|
45
|
+
if ((0, node_fs_1.existsSync)(absPath))
|
|
46
|
+
realPath = (0, node_fs_1.realpathSync)(absPath);
|
|
47
|
+
}
|
|
48
|
+
catch { }
|
|
49
|
+
const rel = node_path_1.default.relative(realRoot, realPath);
|
|
29
50
|
return rel === '' || (!rel.startsWith('..') && !node_path_1.default.isAbsolute(rel));
|
|
30
51
|
}
|
|
31
52
|
/** Parse the `f` query parameter (URL-encoded JSON object) into row filters. */
|
|
@@ -109,9 +130,15 @@ function decodePk(encoded) {
|
|
|
109
130
|
}
|
|
110
131
|
/** Normalize a single cell for JSON / display (BLOB → 0x-hex string, undefined → null). */
|
|
111
132
|
function normalizeCell(value) {
|
|
112
|
-
if (value instanceof Uint8Array) {
|
|
133
|
+
if (value instanceof Uint8Array || Buffer.isBuffer(value)) {
|
|
113
134
|
return `0x${Buffer.from(value).toString('hex')}`;
|
|
114
135
|
}
|
|
136
|
+
if (value instanceof Date) {
|
|
137
|
+
return value.toISOString();
|
|
138
|
+
}
|
|
139
|
+
if (typeof value === 'object' && value !== null) {
|
|
140
|
+
return JSON.stringify(value);
|
|
141
|
+
}
|
|
115
142
|
if (value === undefined)
|
|
116
143
|
return null;
|
|
117
144
|
return value;
|
|
@@ -124,39 +151,79 @@ function normalizeRow(row) {
|
|
|
124
151
|
return out;
|
|
125
152
|
}
|
|
126
153
|
/**
|
|
127
|
-
* Coerce a raw form value into a value suitable for SQLite binding.
|
|
154
|
+
* Coerce a raw form value into a value suitable for SQLite or Postgres binding.
|
|
128
155
|
* - empty string / null / undefined → null ("not set")
|
|
129
156
|
* - `0` stays valid
|
|
130
|
-
* - BOOLEAN → 1/0
|
|
131
|
-
* - INTEGER/REAL → number when numeric
|
|
132
|
-
* - BLOB → Buffer (0x-hex or raw text)
|
|
157
|
+
* - BOOLEAN → 1/0 (SQLite) or boolean (PostgreSQL)
|
|
158
|
+
* - INTEGER/REAL/BIGINT/NUMERIC → number when numeric
|
|
159
|
+
* - BLOB / BYTEA → Buffer (0x-hex, \x-hex, or raw text)
|
|
133
160
|
*/
|
|
134
|
-
function coerceFormValue(raw, columnType) {
|
|
161
|
+
function coerceFormValue(raw, columnType, dialect = 'sqlite') {
|
|
135
162
|
const type = (columnType || '').toUpperCase();
|
|
136
163
|
if (raw === undefined || raw === null)
|
|
137
164
|
return null;
|
|
138
|
-
if (type === 'BOOLEAN') {
|
|
165
|
+
if (type === 'BOOLEAN' || type === 'BOOL') {
|
|
139
166
|
const s = String(raw).trim().toLowerCase();
|
|
140
167
|
if (s === '')
|
|
141
168
|
return null;
|
|
142
|
-
|
|
169
|
+
const boolVal = s === 'true' || s === '1' || s === 'on' || s === 'yes' || s === 'checked';
|
|
170
|
+
return dialect === 'postgres' ? boolVal : (boolVal ? 1 : 0);
|
|
143
171
|
}
|
|
144
|
-
if (type.startsWith('
|
|
172
|
+
if (type.startsWith('INT') ||
|
|
173
|
+
type === 'REAL' ||
|
|
174
|
+
type === 'NUMERIC' ||
|
|
175
|
+
type.startsWith('DECIMAL') ||
|
|
176
|
+
type === 'FLOAT' ||
|
|
177
|
+
type === 'DOUBLE' ||
|
|
178
|
+
type.startsWith('BIGINT') ||
|
|
179
|
+
type.startsWith('SMALLINT') ||
|
|
180
|
+
type.startsWith('SERIAL')) {
|
|
145
181
|
const s = String(raw).trim();
|
|
146
182
|
if (s === '')
|
|
147
183
|
return null;
|
|
148
184
|
const n = Number(s);
|
|
149
185
|
return Number.isFinite(n) ? n : s;
|
|
150
186
|
}
|
|
151
|
-
if (type === 'BLOB') {
|
|
187
|
+
if (type === 'BLOB' || type === 'BYTEA') {
|
|
152
188
|
const s = String(raw);
|
|
153
189
|
if (/^0x[0-9a-f]*$/i.test(s))
|
|
154
190
|
return Buffer.from(s.slice(2), 'hex');
|
|
191
|
+
if (/^\\x[0-9a-f]*$/i.test(s))
|
|
192
|
+
return Buffer.from(s.slice(2), 'hex');
|
|
155
193
|
return Buffer.from(s, 'utf8');
|
|
156
194
|
}
|
|
195
|
+
if (type === 'JSON' || type === 'JSONB') {
|
|
196
|
+
const s = String(raw).trim();
|
|
197
|
+
if (s === '')
|
|
198
|
+
return null;
|
|
199
|
+
return s;
|
|
200
|
+
}
|
|
201
|
+
if (type.endsWith('[]') || type.startsWith('_') || type.includes('ARRAY')) {
|
|
202
|
+
if (Array.isArray(raw))
|
|
203
|
+
return raw;
|
|
204
|
+
const s = String(raw).trim();
|
|
205
|
+
if (s === '')
|
|
206
|
+
return null;
|
|
207
|
+
return s;
|
|
208
|
+
}
|
|
157
209
|
const s = String(raw);
|
|
158
210
|
if (s === '')
|
|
159
211
|
return null;
|
|
160
212
|
return s;
|
|
161
213
|
}
|
|
162
|
-
|
|
214
|
+
/** Format byte size to human readable string (e.g. 1.2 MB). */
|
|
215
|
+
function formatBytes(bytes) {
|
|
216
|
+
if (bytes === 0)
|
|
217
|
+
return '0 B';
|
|
218
|
+
const k = 1024;
|
|
219
|
+
const sizes = ['B', 'KB', 'MB', 'GB', 'TB'];
|
|
220
|
+
const i = Math.floor(Math.log(bytes) / Math.log(k));
|
|
221
|
+
return `${parseFloat((bytes / Math.pow(k, i)).toFixed(1))} ${sizes[i]}`;
|
|
222
|
+
}
|
|
223
|
+
/** Truncate a string with an ellipsis if it exceeds maxLength. */
|
|
224
|
+
function truncate(str, maxLength) {
|
|
225
|
+
if (!str || str.length <= maxLength)
|
|
226
|
+
return str;
|
|
227
|
+
return `${str.slice(0, maxLength)}…`;
|
|
228
|
+
}
|
|
229
|
+
//# sourceMappingURL=common.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/utils/common.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"csv.js","sourceRoot":"","sources":["../../src/utils/csv.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utilities for rich data type detection, MIME sniffing, hex dump generation,
|
|
3
|
+
* and JSON inspection in AdminDB.
|
|
4
|
+
*/
|
|
5
|
+
export interface MimeAnalysis {
|
|
6
|
+
mime: string;
|
|
7
|
+
ext: string;
|
|
8
|
+
isImage: boolean;
|
|
9
|
+
isText: boolean;
|
|
10
|
+
isPdf: boolean;
|
|
11
|
+
isAudio: boolean;
|
|
12
|
+
isVideo: boolean;
|
|
13
|
+
}
|
|
14
|
+
export interface HexDumpLine {
|
|
15
|
+
offset: string;
|
|
16
|
+
hex: string;
|
|
17
|
+
ascii: string;
|
|
18
|
+
}
|
|
19
|
+
export interface HexDumpResult {
|
|
20
|
+
lines: HexDumpLine[];
|
|
21
|
+
totalBytes: number;
|
|
22
|
+
truncated: boolean;
|
|
23
|
+
}
|
|
24
|
+
export interface BlobMetadata extends MimeAnalysis {
|
|
25
|
+
size: number;
|
|
26
|
+
sizeFormatted: string;
|
|
27
|
+
hexDump?: HexDumpResult;
|
|
28
|
+
textPreview?: string | null;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Sniff MIME type and file extension from magic bytes of a buffer.
|
|
32
|
+
*/
|
|
33
|
+
export declare function sniffMimeType(buf: Uint8Array | Buffer): MimeAnalysis;
|
|
34
|
+
/**
|
|
35
|
+
* Generate formatted 3-column Hex Dump (Offset | Hex Bytes | ASCII).
|
|
36
|
+
*/
|
|
37
|
+
export declare function generateHexDump(buf: Uint8Array | Buffer, maxBytes?: number, bytesPerLine?: number): HexDumpResult;
|
|
38
|
+
/**
|
|
39
|
+
* Get comprehensive metadata for a binary buffer or hex string.
|
|
40
|
+
*/
|
|
41
|
+
export declare function analyzeBlob(data: Uint8Array | Buffer | string): BlobMetadata;
|
|
42
|
+
/**
|
|
43
|
+
* Detect whether a value is a valid JSON string (Object or Array).
|
|
44
|
+
*/
|
|
45
|
+
export declare function isJsonString(value: unknown): boolean;
|
|
46
|
+
/**
|
|
47
|
+
* Parse and pretty format JSON string. Returns null if invalid.
|
|
48
|
+
*/
|
|
49
|
+
export declare function formatJsonSafely(value: unknown, indent?: number): string | null;
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Utilities for rich data type detection, MIME sniffing, hex dump generation,
|
|
4
|
+
* and JSON inspection in AdminDB.
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.sniffMimeType = sniffMimeType;
|
|
8
|
+
exports.generateHexDump = generateHexDump;
|
|
9
|
+
exports.analyzeBlob = analyzeBlob;
|
|
10
|
+
exports.isJsonString = isJsonString;
|
|
11
|
+
exports.formatJsonSafely = formatJsonSafely;
|
|
12
|
+
const common_js_1 = require("./common.js");
|
|
13
|
+
/**
|
|
14
|
+
* Sniff MIME type and file extension from magic bytes of a buffer.
|
|
15
|
+
*/
|
|
16
|
+
function sniffMimeType(buf) {
|
|
17
|
+
const len = buf.length;
|
|
18
|
+
if (len === 0) {
|
|
19
|
+
return { mime: 'application/octet-stream', ext: 'bin', isImage: false, isText: false, isPdf: false, isAudio: false, isVideo: false };
|
|
20
|
+
}
|
|
21
|
+
// PNG: 89 50 4E 47 0D 0A 1A 0A
|
|
22
|
+
if (len >= 8 && buf[0] === 0x89 && buf[1] === 0x50 && buf[2] === 0x4e && buf[3] === 0x47 && buf[4] === 0x0d && buf[5] === 0x0a && buf[6] === 0x1a && buf[7] === 0x0a) {
|
|
23
|
+
return { mime: 'image/png', ext: 'png', isImage: true, isText: false, isPdf: false, isAudio: false, isVideo: false };
|
|
24
|
+
}
|
|
25
|
+
// JPEG: FF D8 FF
|
|
26
|
+
if (len >= 3 && buf[0] === 0xff && buf[1] === 0xd8 && buf[2] === 0xff) {
|
|
27
|
+
return { mime: 'image/jpeg', ext: 'jpg', isImage: true, isText: false, isPdf: false, isAudio: false, isVideo: false };
|
|
28
|
+
}
|
|
29
|
+
// GIF: GIF87a or GIF89a (47 49 46 38 37/39 61)
|
|
30
|
+
if (len >= 6 && buf[0] === 0x47 && buf[1] === 0x49 && buf[2] === 0x46 && buf[3] === 0x38 && (buf[4] === 0x37 || buf[4] === 0x39) && buf[5] === 0x61) {
|
|
31
|
+
return { mime: 'image/gif', ext: 'gif', isImage: true, isText: false, isPdf: false, isAudio: false, isVideo: false };
|
|
32
|
+
}
|
|
33
|
+
// WebP: RIFF....WEBP (52 49 46 46 ... 57 45 42 50)
|
|
34
|
+
if (len >= 12 && buf[0] === 0x52 && buf[1] === 0x49 && buf[2] === 0x46 && buf[3] === 0x46 && buf[8] === 0x57 && buf[9] === 0x45 && buf[10] === 0x42 && buf[11] === 0x50) {
|
|
35
|
+
return { mime: 'image/webp', ext: 'webp', isImage: true, isText: false, isPdf: false, isAudio: false, isVideo: false };
|
|
36
|
+
}
|
|
37
|
+
// BMP: 42 4D
|
|
38
|
+
if (len >= 2 && buf[0] === 0x42 && buf[1] === 0x4d) {
|
|
39
|
+
return { mime: 'image/bmp', ext: 'bmp', isImage: true, isText: false, isPdf: false, isAudio: false, isVideo: false };
|
|
40
|
+
}
|
|
41
|
+
// ICO: 00 00 01 00
|
|
42
|
+
if (len >= 4 && buf[0] === 0x00 && buf[1] === 0x00 && buf[2] === 0x01 && buf[3] === 0x00) {
|
|
43
|
+
return { mime: 'image/x-icon', ext: 'ico', isImage: true, isText: false, isPdf: false, isAudio: false, isVideo: false };
|
|
44
|
+
}
|
|
45
|
+
// PDF: %PDF (25 50 44 46)
|
|
46
|
+
if (len >= 4 && buf[0] === 0x25 && buf[1] === 0x50 && buf[2] === 0x44 && buf[3] === 0x46) {
|
|
47
|
+
return { mime: 'application/pdf', ext: 'pdf', isImage: false, isText: false, isPdf: true, isAudio: false, isVideo: false };
|
|
48
|
+
}
|
|
49
|
+
// MP3: ID3 (49 44 33) or Sync 0xFF 0xFB/0xF3/0xF2
|
|
50
|
+
if (len >= 3 && buf[0] === 0x49 && buf[1] === 0x44 && buf[2] === 0x33) {
|
|
51
|
+
return { mime: 'audio/mpeg', ext: 'mp3', isImage: false, isText: false, isPdf: false, isAudio: true, isVideo: false };
|
|
52
|
+
}
|
|
53
|
+
if (len >= 2 && buf[0] === 0xff && (buf[1] & 0xe0) === 0xe0) {
|
|
54
|
+
return { mime: 'audio/mpeg', ext: 'mp3', isImage: false, isText: false, isPdf: false, isAudio: true, isVideo: false };
|
|
55
|
+
}
|
|
56
|
+
// WAV: RIFF....WAVE
|
|
57
|
+
if (len >= 12 && buf[0] === 0x52 && buf[1] === 0x49 && buf[2] === 0x46 && buf[3] === 0x46 && buf[8] === 0x57 && buf[9] === 0x41 && buf[10] === 0x56 && buf[11] === 0x45) {
|
|
58
|
+
return { mime: 'audio/wav', ext: 'wav', isImage: false, isText: false, isPdf: false, isAudio: true, isVideo: false };
|
|
59
|
+
}
|
|
60
|
+
// OGG: OggS (4F 67 67 53)
|
|
61
|
+
if (len >= 4 && buf[0] === 0x4f && buf[1] === 0x67 && buf[2] === 0x67 && buf[3] === 0x53) {
|
|
62
|
+
return { mime: 'audio/ogg', ext: 'ogg', isImage: false, isText: false, isPdf: false, isAudio: true, isVideo: false };
|
|
63
|
+
}
|
|
64
|
+
// MP4 video: ....ftyp (66 74 79 70)
|
|
65
|
+
if (len >= 8 && buf[4] === 0x66 && buf[5] === 0x74 && buf[6] === 0x79 && buf[7] === 0x70) {
|
|
66
|
+
return { mime: 'video/mp4', ext: 'mp4', isImage: false, isText: false, isPdf: false, isAudio: false, isVideo: true };
|
|
67
|
+
}
|
|
68
|
+
// WebM: 1A 45 DF A3
|
|
69
|
+
if (len >= 4 && buf[0] === 0x1a && buf[1] === 0x45 && buf[2] === 0xdf && buf[3] === 0xa3) {
|
|
70
|
+
return { mime: 'video/webm', ext: 'webm', isImage: false, isText: false, isPdf: false, isAudio: false, isVideo: true };
|
|
71
|
+
}
|
|
72
|
+
// Check for UTF-8 Text / SVG / JSON
|
|
73
|
+
const sampleLen = Math.min(len, 1024);
|
|
74
|
+
const sample = Buffer.from(buf.subarray(0, sampleLen)).toString('utf8');
|
|
75
|
+
const trimmed = sample.trim();
|
|
76
|
+
// SVG: starts with <?xml or <svg
|
|
77
|
+
if (trimmed.startsWith('<svg') || (trimmed.startsWith('<?xml') && trimmed.includes('<svg'))) {
|
|
78
|
+
return { mime: 'image/svg+xml', ext: 'svg', isImage: true, isText: true, isPdf: false, isAudio: false, isVideo: false };
|
|
79
|
+
}
|
|
80
|
+
// JSON
|
|
81
|
+
if ((trimmed.startsWith('{') && trimmed.endsWith('}')) || (trimmed.startsWith('[') && trimmed.endsWith(']'))) {
|
|
82
|
+
try {
|
|
83
|
+
JSON.parse(sample);
|
|
84
|
+
return { mime: 'application/json', ext: 'json', isImage: false, isText: true, isPdf: false, isAudio: false, isVideo: false };
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
/* not valid json in sample */
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
// Check if buffer contains mostly printable ASCII / UTF-8
|
|
91
|
+
let nonPrintable = 0;
|
|
92
|
+
for (let i = 0; i < sampleLen; i++) {
|
|
93
|
+
const byte = buf[i];
|
|
94
|
+
if (byte === 0 || (byte < 7 && byte !== 9 && byte !== 10 && byte !== 13)) {
|
|
95
|
+
nonPrintable++;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
if (nonPrintable === 0) {
|
|
99
|
+
return { mime: 'text/plain; charset=utf-8', ext: 'txt', isImage: false, isText: true, isPdf: false, isAudio: false, isVideo: false };
|
|
100
|
+
}
|
|
101
|
+
return { mime: 'application/octet-stream', ext: 'bin', isImage: false, isText: false, isPdf: false, isAudio: false, isVideo: false };
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Generate formatted 3-column Hex Dump (Offset | Hex Bytes | ASCII).
|
|
105
|
+
*/
|
|
106
|
+
function generateHexDump(buf, maxBytes = 4096, bytesPerLine = 16) {
|
|
107
|
+
const totalBytes = buf.length;
|
|
108
|
+
const limit = Math.min(totalBytes, maxBytes);
|
|
109
|
+
const truncated = totalBytes > maxBytes;
|
|
110
|
+
const lines = [];
|
|
111
|
+
for (let i = 0; i < limit; i += bytesPerLine) {
|
|
112
|
+
const offset = i.toString(16).padStart(8, '0');
|
|
113
|
+
const chunk = buf.subarray(i, Math.min(i + bytesPerLine, limit));
|
|
114
|
+
const hexParts = [];
|
|
115
|
+
let asciiPart = '';
|
|
116
|
+
for (let j = 0; j < bytesPerLine; j++) {
|
|
117
|
+
if (j < chunk.length) {
|
|
118
|
+
const byte = chunk[j];
|
|
119
|
+
hexParts.push(byte.toString(16).padStart(2, '0'));
|
|
120
|
+
// Printable ASCII between 32 (space) and 126 (~)
|
|
121
|
+
asciiPart += (byte >= 32 && byte <= 126) ? String.fromCharCode(byte) : '.';
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
hexParts.push(' ');
|
|
125
|
+
asciiPart += ' ';
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
// Insert extra space in the middle for readability (e.g. after 8 bytes)
|
|
129
|
+
const mid = Math.floor(bytesPerLine / 2);
|
|
130
|
+
const hexFormatted = hexParts.slice(0, mid).join(' ') + ' ' + hexParts.slice(mid).join(' ');
|
|
131
|
+
lines.push({
|
|
132
|
+
offset,
|
|
133
|
+
hex: hexFormatted,
|
|
134
|
+
ascii: asciiPart,
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
return { lines, totalBytes, truncated };
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Get comprehensive metadata for a binary buffer or hex string.
|
|
141
|
+
*/
|
|
142
|
+
function analyzeBlob(data) {
|
|
143
|
+
let buf;
|
|
144
|
+
if (typeof data === 'string') {
|
|
145
|
+
if (data.startsWith('0x') || data.startsWith('0X')) {
|
|
146
|
+
buf = Buffer.from(data.slice(2), 'hex');
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
buf = Buffer.from(data, 'utf8');
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
buf = Buffer.isBuffer(data) ? data : Buffer.from(data);
|
|
154
|
+
}
|
|
155
|
+
const analysis = sniffMimeType(buf);
|
|
156
|
+
let textPreview = null;
|
|
157
|
+
if (analysis.isText || buf.length < 2048) {
|
|
158
|
+
try {
|
|
159
|
+
const txt = buf.toString('utf8');
|
|
160
|
+
// If it looks like valid text
|
|
161
|
+
if (!/[\x00-\x08\x0E-\x1F]/.test(txt.slice(0, 512))) {
|
|
162
|
+
textPreview = txt.slice(0, 4000);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
catch {
|
|
166
|
+
/* ignore */
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
return {
|
|
170
|
+
...analysis,
|
|
171
|
+
size: buf.length,
|
|
172
|
+
sizeFormatted: (0, common_js_1.formatBytes)(buf.length),
|
|
173
|
+
hexDump: generateHexDump(buf),
|
|
174
|
+
textPreview,
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Detect whether a value is a valid JSON string (Object or Array).
|
|
179
|
+
*/
|
|
180
|
+
function isJsonString(value) {
|
|
181
|
+
if (typeof value !== 'string')
|
|
182
|
+
return false;
|
|
183
|
+
const trimmed = value.trim();
|
|
184
|
+
if (!trimmed)
|
|
185
|
+
return false;
|
|
186
|
+
if ((trimmed.startsWith('{') && trimmed.endsWith('}')) || (trimmed.startsWith('[') && trimmed.endsWith(']'))) {
|
|
187
|
+
try {
|
|
188
|
+
JSON.parse(trimmed);
|
|
189
|
+
return true;
|
|
190
|
+
}
|
|
191
|
+
catch {
|
|
192
|
+
return false;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
return false;
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Parse and pretty format JSON string. Returns null if invalid.
|
|
199
|
+
*/
|
|
200
|
+
function formatJsonSafely(value, indent = 2) {
|
|
201
|
+
if (value === null || value === undefined)
|
|
202
|
+
return null;
|
|
203
|
+
if (typeof value === 'object') {
|
|
204
|
+
try {
|
|
205
|
+
return JSON.stringify(value, null, indent);
|
|
206
|
+
}
|
|
207
|
+
catch {
|
|
208
|
+
return null;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
if (typeof value === 'string') {
|
|
212
|
+
try {
|
|
213
|
+
const parsed = JSON.parse(value);
|
|
214
|
+
return JSON.stringify(parsed, null, indent);
|
|
215
|
+
}
|
|
216
|
+
catch {
|
|
217
|
+
return null;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
return null;
|
|
221
|
+
}
|
|
222
|
+
//# sourceMappingURL=datatype.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"datatype.js","sourceRoot":"","sources":["../../src/utils/datatype.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAoCH,sCAuGC;AAKD,0CAqCC;AAKD,kCAiCC;AAKD,oCAaC;AAKD,4CAkBC;AAlQD,2CAA0C;AA+B1C;;GAEG;AACH,SAAgB,aAAa,CAAC,GAAwB;IACpD,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC;IACvB,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;QACd,OAAO,EAAE,IAAI,EAAE,0BAA0B,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACvI,CAAC;IAED,+BAA+B;IAC/B,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACrK,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACvH,CAAC;IAED,iBAAiB;IACjB,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACtE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACxH,CAAC;IAED,+CAA+C;IAC/C,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACpJ,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACvH,CAAC;IAED,mDAAmD;IACnD,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC;QACxK,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACzH,CAAC;IAED,aAAa;IACb,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACnD,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACvH,CAAC;IAED,mBAAmB;IACnB,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACzF,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC1H,CAAC;IAED,0BAA0B;IAC1B,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACzF,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC7H,CAAC;IAED,kDAAkD;IAClD,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACtE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACxH,CAAC;IACD,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QAC5D,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACxH,CAAC;IAED,oBAAoB;IACpB,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC;QACxK,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACvH,CAAC;IAED,0BAA0B;IAC1B,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACzF,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACvH,CAAC;IAED,oCAAoC;IACpC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACzF,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACvH,CAAC;IAED,oBAAoB;IACpB,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACzF,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACzH,CAAC;IAED,oCAAoC;IACpC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACxE,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAE9B,iCAAiC;IACjC,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;QAC5F,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC1H,CAAC;IAED,OAAO;IACP,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QAC7G,IAAI,CAAC;YACH,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACnB,OAAO,EAAE,IAAI,EAAE,kBAAkB,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QAC/H,CAAC;QAAC,MAAM,CAAC;YACP,8BAA8B;QAChC,CAAC;IACH,CAAC;IAED,0DAA0D;IAC1D,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,EAAE,CAAC,EAAE,CAAC;YACzE,YAAY,EAAE,CAAC;QACjB,CAAC;IACH,CAAC;IAED,IAAI,YAAY,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,IAAI,EAAE,2BAA2B,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACvI,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,0BAA0B,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AACvI,CAAC;AAED;;GAEG;AACH,SAAgB,eAAe,CAAC,GAAwB,EAAE,QAAQ,GAAG,IAAI,EAAE,YAAY,GAAG,EAAE;IAC1F,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC;IAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAC7C,MAAM,SAAS,GAAG,UAAU,GAAG,QAAQ,CAAC;IACxC,MAAM,KAAK,GAAkB,EAAE,CAAC;IAEhC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,YAAY,EAAE,CAAC;QAC7C,MAAM,MAAM,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC;QAEjE,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,IAAI,SAAS,GAAG,EAAE,CAAC;QAEnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;gBACrB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACtB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;gBAClD,iDAAiD;gBACjD,SAAS,IAAI,CAAC,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YAC7E,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACpB,SAAS,IAAI,GAAG,CAAC;YACnB,CAAC;QACH,CAAC;QAED,wEAAwE;QACxE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;QACzC,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAE7F,KAAK,CAAC,IAAI,CAAC;YACT,MAAM;YACN,GAAG,EAAE,YAAY;YACjB,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;AAC1C,CAAC;AAED;;GAEG;AACH,SAAgB,WAAW,CAAC,IAAkC;IAC5D,IAAI,GAAW,CAAC;IAChB,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACnD,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC1C,CAAC;aAAM,CAAC;YACN,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;SAAM,CAAC;QACN,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzD,CAAC;IAED,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,WAAW,GAAkB,IAAI,CAAC;IACtC,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC;QACzC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACjC,8BAA8B;YAC9B,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;gBACpD,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,YAAY;QACd,CAAC;IACH,CAAC;IAED,OAAO;QACL,GAAG,QAAQ;QACX,IAAI,EAAE,GAAG,CAAC,MAAM;QAChB,aAAa,EAAE,IAAA,uBAAW,EAAC,GAAG,CAAC,MAAM,CAAC;QACtC,OAAO,EAAE,eAAe,CAAC,GAAG,CAAC;QAC7B,WAAW;KACZ,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,YAAY,CAAC,KAAc;IACzC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAC3B,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QAC7G,IAAI,CAAC;YACH,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACpB,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,SAAgB,gBAAgB,CAAC,KAAc,EAAE,MAAM,GAAG,CAAC;IACzD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACvD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAC7C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACjC,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAC9C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SVG Icons registry for AdminDB.
|
|
3
|
+
*
|
|
4
|
+
* Centralizes all SVG icons in a single module, providing consistent
|
|
5
|
+
* styling, clean templates, and zero inline SVG duplication.
|
|
6
|
+
*/
|
|
7
|
+
export declare const ICONS: Record<string, string>;
|
|
8
|
+
/**
|
|
9
|
+
* Renders an SVG icon by name with optional custom CSS classes.
|
|
10
|
+
*/
|
|
11
|
+
export declare function renderIcon(name: string, customClass?: string): string;
|