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.
Files changed (202) hide show
  1. package/README.md +250 -352
  2. package/dist/app.d.ts +25 -4
  3. package/dist/app.js +79 -15
  4. package/dist/app.js.map +1 -1
  5. package/dist/auth/config.d.ts +19 -0
  6. package/dist/auth/config.js +147 -0
  7. package/dist/auth/config.js.map +1 -0
  8. package/dist/auth/crypto.d.ts +27 -0
  9. package/dist/auth/crypto.js +133 -0
  10. package/dist/auth/crypto.js.map +1 -0
  11. package/dist/auth/index.d.ts +5 -0
  12. package/dist/auth/index.js +22 -0
  13. package/dist/auth/index.js.map +1 -0
  14. package/dist/auth/middleware.d.ts +14 -0
  15. package/dist/auth/middleware.js +100 -0
  16. package/dist/auth/middleware.js.map +1 -0
  17. package/dist/auth/routes.d.ts +7 -0
  18. package/dist/auth/routes.js +78 -0
  19. package/dist/auth/routes.js.map +1 -0
  20. package/dist/auth/types.d.ts +35 -0
  21. package/dist/auth/types.js +11 -0
  22. package/dist/auth/types.js.map +1 -0
  23. package/dist/cli/args.d.ts +45 -0
  24. package/dist/cli/args.js +328 -0
  25. package/dist/cli/args.js.map +1 -0
  26. package/dist/cli/config.d.ts +56 -0
  27. package/dist/cli/config.js +133 -0
  28. package/dist/cli/config.js.map +1 -0
  29. package/dist/cli/index.d.ts +4 -0
  30. package/dist/cli/index.js +21 -0
  31. package/dist/cli/index.js.map +1 -0
  32. package/dist/cli/runner.d.ts +1 -0
  33. package/dist/cli/runner.js +222 -0
  34. package/dist/cli/runner.js.map +1 -0
  35. package/dist/cli.js +2 -127
  36. package/dist/cli.js.map +1 -1
  37. package/dist/data/datasets.d.ts +17 -0
  38. package/dist/data/datasets.js +133 -0
  39. package/dist/data/datasets.js.map +1 -0
  40. package/dist/data/detector.d.ts +30 -0
  41. package/dist/data/detector.js +472 -0
  42. package/dist/data/detector.js.map +1 -0
  43. package/dist/data/engine.d.ts +10 -0
  44. package/dist/data/engine.js +211 -0
  45. package/dist/data/engine.js.map +1 -0
  46. package/dist/data/index.d.ts +5 -0
  47. package/dist/data/index.js +22 -0
  48. package/dist/data/index.js.map +1 -0
  49. package/dist/data/strategies.d.ts +30 -0
  50. package/dist/data/strategies.js +343 -0
  51. package/dist/data/strategies.js.map +1 -0
  52. package/dist/data/types.d.ts +73 -0
  53. package/dist/data/types.js +8 -0
  54. package/dist/data/types.js.map +1 -0
  55. package/dist/db/database.d.ts +14 -142
  56. package/dist/db/database.js +209 -435
  57. package/dist/db/database.js.map +1 -1
  58. package/dist/db/export.d.ts +2 -2
  59. package/dist/db/export.js +7 -2
  60. package/dist/db/export.js.map +1 -1
  61. package/dist/db/filters.d.ts +22 -0
  62. package/dist/db/filters.js +158 -0
  63. package/dist/db/filters.js.map +1 -0
  64. package/dist/db/index.d.ts +8 -0
  65. package/dist/db/index.js +25 -0
  66. package/dist/db/index.js.map +1 -0
  67. package/dist/db/introspection.d.ts +6 -0
  68. package/dist/db/introspection.js +172 -0
  69. package/dist/db/introspection.js.map +1 -0
  70. package/dist/db/manager.d.ts +32 -19
  71. package/dist/db/manager.js +203 -44
  72. package/dist/db/manager.js.map +1 -1
  73. package/dist/db/migrations.d.ts +5 -0
  74. package/dist/db/migrations.js +110 -0
  75. package/dist/db/migrations.js.map +1 -0
  76. package/dist/db/postgres.d.ts +85 -0
  77. package/dist/db/postgres.js +745 -0
  78. package/dist/db/postgres.js.map +1 -0
  79. package/dist/db/types.d.ts +206 -0
  80. package/dist/db/types.js +7 -0
  81. package/dist/db/types.js.map +1 -0
  82. package/dist/index.d.ts +9 -2
  83. package/dist/index.js +46 -4
  84. package/dist/index.js.map +1 -1
  85. package/dist/public/css/app.css +1 -1
  86. package/dist/public/css/input.css +83 -13
  87. package/dist/public/js/app.js +142 -0
  88. package/dist/public/js/browse.js +591 -104
  89. package/dist/public/js/databases.js +105 -13
  90. package/dist/public/js/designer.js +40 -2
  91. package/dist/public/js/forms.js +610 -28
  92. package/dist/public/js/icons.js +51 -0
  93. package/dist/public/js/inspector.js +638 -0
  94. package/dist/public/js/query.js +93 -3
  95. package/dist/public/js/schema.js +170 -52
  96. package/dist/public/js/seed.js +1090 -0
  97. package/dist/routes/api/helpers.d.ts +42 -0
  98. package/dist/routes/api/helpers.js +133 -0
  99. package/dist/routes/api/helpers.js.map +1 -0
  100. package/dist/routes/api/import-export.d.ts +3 -0
  101. package/dist/routes/api/import-export.js +85 -0
  102. package/dist/routes/api/import-export.js.map +1 -0
  103. package/dist/routes/api/index.d.ts +4 -0
  104. package/dist/routes/api/index.js +37 -0
  105. package/dist/routes/api/index.js.map +1 -0
  106. package/dist/routes/api/query.d.ts +3 -0
  107. package/dist/routes/api/query.js +76 -0
  108. package/dist/routes/api/query.js.map +1 -0
  109. package/dist/routes/api/rows.d.ts +3 -0
  110. package/dist/routes/api/rows.js +373 -0
  111. package/dist/routes/api/rows.js.map +1 -0
  112. package/dist/routes/api/seed.d.ts +3 -0
  113. package/dist/routes/api/seed.js +82 -0
  114. package/dist/routes/api/seed.js.map +1 -0
  115. package/dist/routes/api/tables.d.ts +3 -0
  116. package/dist/routes/api/tables.js +160 -0
  117. package/dist/routes/api/tables.js.map +1 -0
  118. package/dist/routes/databases.d.ts +8 -11
  119. package/dist/routes/databases.js +100 -66
  120. package/dist/routes/databases.js.map +1 -1
  121. package/dist/routes/index.d.ts +3 -0
  122. package/dist/routes/index.js +20 -0
  123. package/dist/routes/index.js.map +1 -0
  124. package/dist/routes/pages.d.ts +3 -3
  125. package/dist/routes/pages.js +163 -54
  126. package/dist/routes/pages.js.map +1 -1
  127. package/dist/serverless.d.ts +40 -0
  128. package/dist/serverless.js +210 -0
  129. package/dist/serverless.js.map +1 -0
  130. package/dist/sql/generator.d.ts +4 -3
  131. package/dist/sql/generator.js +103 -6
  132. package/dist/sql/generator.js.map +1 -1
  133. package/dist/sql/index.d.ts +2 -0
  134. package/dist/sql/index.js +19 -0
  135. package/dist/sql/index.js.map +1 -0
  136. package/dist/types/api.d.ts +412 -0
  137. package/dist/types/api.js +9 -0
  138. package/dist/types/api.js.map +1 -0
  139. package/dist/utils/colors.d.ts +40 -0
  140. package/dist/utils/colors.js +64 -0
  141. package/dist/utils/colors.js.map +1 -0
  142. package/dist/{util.d.ts → utils/common.d.ts} +10 -6
  143. package/dist/{util.js → utils/common.js} +80 -13
  144. package/dist/utils/common.js.map +1 -0
  145. package/dist/utils/csv.js.map +1 -0
  146. package/dist/utils/datatype.d.ts +49 -0
  147. package/dist/utils/datatype.js +222 -0
  148. package/dist/utils/datatype.js.map +1 -0
  149. package/dist/utils/icons.d.ts +11 -0
  150. package/dist/utils/icons.js +72 -0
  151. package/dist/utils/icons.js.map +1 -0
  152. package/dist/utils/index.d.ts +4 -0
  153. package/dist/utils/index.js +21 -0
  154. package/dist/utils/index.js.map +1 -0
  155. package/dist/{logger.d.ts → utils/logger.d.ts} +1 -1
  156. package/dist/utils/logger.js +40 -0
  157. package/dist/utils/logger.js.map +1 -0
  158. package/dist/views/layouts/main.hbs +33 -11
  159. package/dist/views/pages/databases.hbs +182 -74
  160. package/dist/views/pages/designer.hbs +9 -6
  161. package/dist/views/pages/error.hbs +3 -3
  162. package/dist/views/pages/form.hbs +5 -3
  163. package/dist/views/pages/home.hbs +22 -13
  164. package/dist/views/pages/login.hbs +111 -0
  165. package/dist/views/pages/query.hbs +10 -8
  166. package/dist/views/pages/schema.hbs +41 -13
  167. package/dist/views/pages/seed.hbs +232 -0
  168. package/dist/views/pages/table.hbs +155 -70
  169. package/dist/views/partials/icon.hbs +2 -0
  170. package/dist/views/partials/navbar.hbs +70 -31
  171. package/dist/views/partials/sidebar.hbs +108 -99
  172. package/package.json +12 -5
  173. package/dist/args.d.ts +0 -28
  174. package/dist/args.js +0 -187
  175. package/dist/args.js.map +0 -1
  176. package/dist/config.d.ts +0 -17
  177. package/dist/config.js +0 -23
  178. package/dist/config.js.map +0 -1
  179. package/dist/csv.js.map +0 -1
  180. package/dist/logger.js +0 -25
  181. package/dist/logger.js.map +0 -1
  182. package/dist/routes/api.d.ts +0 -9
  183. package/dist/routes/api.js +0 -786
  184. package/dist/routes/api.js.map +0 -1
  185. package/dist/test/classifier.test.d.ts +0 -1
  186. package/dist/test/classifier.test.js +0 -44
  187. package/dist/test/classifier.test.js.map +0 -1
  188. package/dist/test/csv.test.d.ts +0 -1
  189. package/dist/test/csv.test.js +0 -64
  190. package/dist/test/csv.test.js.map +0 -1
  191. package/dist/test/database.test.d.ts +0 -1
  192. package/dist/test/database.test.js +0 -402
  193. package/dist/test/database.test.js.map +0 -1
  194. package/dist/test/generator.test.d.ts +0 -1
  195. package/dist/test/generator.test.js +0 -132
  196. package/dist/test/generator.test.js.map +0 -1
  197. package/dist/test/manager.test.d.ts +0 -1
  198. package/dist/test/manager.test.js +0 -146
  199. package/dist/test/manager.test.js.map +0 -1
  200. package/dist/util.js.map +0 -1
  201. /package/dist/{csv.d.ts → utils/csv.d.ts} +0 -0
  202. /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
- const rel = node_path_1.default.relative(node_path_1.default.resolve(root), node_path_1.default.resolve(p));
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
- return s === 'true' || s === '1' || s === 'on' || s === 'yes' || s === 'checked' ? 1 : 0;
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('INTEGER') || type === 'REAL') {
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
- //# sourceMappingURL=util.js.map
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":"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"}
@@ -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;