admindb 2.1.0 → 2.1.1

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 (178) hide show
  1. package/README.md +1 -1
  2. package/dist/app.d.ts +1 -69
  3. package/dist/app.js +1 -257
  4. package/dist/auth/config.d.ts +1 -19
  5. package/dist/auth/config.js +1 -147
  6. package/dist/auth/crypto.d.ts +1 -27
  7. package/dist/auth/crypto.js +1 -133
  8. package/dist/auth/index.d.ts +1 -5
  9. package/dist/auth/index.js +1 -22
  10. package/dist/auth/middleware.d.ts +1 -14
  11. package/dist/auth/middleware.js +1 -100
  12. package/dist/auth/routes.d.ts +1 -7
  13. package/dist/auth/routes.js +1 -78
  14. package/dist/auth/types.d.ts +1 -35
  15. package/dist/auth/types.js +1 -11
  16. package/dist/cli/args.d.ts +1 -45
  17. package/dist/cli/args.js +1 -328
  18. package/dist/cli/config.d.ts +1 -56
  19. package/dist/cli/config.js +1 -133
  20. package/dist/cli/index.d.ts +1 -4
  21. package/dist/cli/index.js +1 -21
  22. package/dist/cli/runner.d.ts +1 -1
  23. package/dist/cli/runner.js +1 -222
  24. package/dist/cli.d.ts +1 -2
  25. package/dist/cli.js +1 -5
  26. package/dist/data/datasets.d.ts +1 -17
  27. package/dist/data/datasets.js +1 -133
  28. package/dist/data/detector.d.ts +1 -30
  29. package/dist/data/detector.js +1 -472
  30. package/dist/data/engine.d.ts +1 -10
  31. package/dist/data/engine.js +1 -211
  32. package/dist/data/index.d.ts +1 -5
  33. package/dist/data/index.js +1 -22
  34. package/dist/data/strategies.d.ts +1 -30
  35. package/dist/data/strategies.js +1 -343
  36. package/dist/data/types.d.ts +1 -73
  37. package/dist/data/types.js +1 -8
  38. package/dist/db/database.d.ts +1 -119
  39. package/dist/db/database.js +1 -471
  40. package/dist/db/export.d.ts +1 -12
  41. package/dist/db/export.js +1 -42
  42. package/dist/db/filters.d.ts +1 -22
  43. package/dist/db/filters.js +1 -158
  44. package/dist/db/index.d.ts +1 -8
  45. package/dist/db/index.js +1 -25
  46. package/dist/db/introspection.d.ts +1 -6
  47. package/dist/db/introspection.js +1 -172
  48. package/dist/db/manager.d.ts +1 -81
  49. package/dist/db/manager.js +1 -397
  50. package/dist/db/migrations.d.ts +1 -5
  51. package/dist/db/migrations.js +1 -110
  52. package/dist/db/postgres.d.ts +1 -85
  53. package/dist/db/postgres.js +1 -745
  54. package/dist/db/types.d.ts +1 -206
  55. package/dist/db/types.js +1 -7
  56. package/dist/index.d.ts +1 -23
  57. package/dist/index.js +1 -66
  58. package/dist/public/js/api.js +1 -47
  59. package/dist/public/js/app.js +1 -262
  60. package/dist/public/js/browse.js +1 -1371
  61. package/dist/public/js/databases.js +1 -235
  62. package/dist/public/js/designer.js +1 -258
  63. package/dist/public/js/forms.js +1 -826
  64. package/dist/public/js/icons.js +1 -51
  65. package/dist/public/js/inspector.js +1 -638
  66. package/dist/public/js/query.js +1 -322
  67. package/dist/public/js/schema.js +1 -447
  68. package/dist/public/js/seed.js +1 -1090
  69. package/dist/routes/api/helpers.d.ts +1 -42
  70. package/dist/routes/api/helpers.js +1 -133
  71. package/dist/routes/api/import-export.d.ts +1 -3
  72. package/dist/routes/api/import-export.js +1 -85
  73. package/dist/routes/api/index.d.ts +1 -4
  74. package/dist/routes/api/index.js +1 -37
  75. package/dist/routes/api/query.d.ts +1 -3
  76. package/dist/routes/api/query.js +1 -76
  77. package/dist/routes/api/rows.d.ts +1 -3
  78. package/dist/routes/api/rows.js +1 -373
  79. package/dist/routes/api/seed.d.ts +1 -3
  80. package/dist/routes/api/seed.js +1 -82
  81. package/dist/routes/api/tables.d.ts +1 -3
  82. package/dist/routes/api/tables.js +1 -160
  83. package/dist/routes/databases.d.ts +1 -26
  84. package/dist/routes/databases.js +1 -230
  85. package/dist/routes/index.d.ts +1 -3
  86. package/dist/routes/index.js +1 -20
  87. package/dist/routes/pages.d.ts +1 -9
  88. package/dist/routes/pages.js +1 -390
  89. package/dist/serverless.d.ts +1 -40
  90. package/dist/serverless.js +1 -210
  91. package/dist/sql/classifier.d.ts +1 -19
  92. package/dist/sql/classifier.js +1 -37
  93. package/dist/sql/generator.d.ts +1 -81
  94. package/dist/sql/generator.js +1 -348
  95. package/dist/sql/index.d.ts +1 -2
  96. package/dist/sql/index.js +1 -19
  97. package/dist/types/api.d.ts +1 -412
  98. package/dist/types/api.js +1 -9
  99. package/dist/utils/colors.d.ts +1 -40
  100. package/dist/utils/colors.js +1 -64
  101. package/dist/utils/common.d.ts +1 -50
  102. package/dist/utils/common.js +1 -229
  103. package/dist/utils/csv.d.ts +1 -15
  104. package/dist/utils/csv.js +1 -80
  105. package/dist/utils/datatype.d.ts +1 -49
  106. package/dist/utils/datatype.js +1 -222
  107. package/dist/utils/icons.d.ts +1 -11
  108. package/dist/utils/icons.js +1 -72
  109. package/dist/utils/index.d.ts +1 -4
  110. package/dist/utils/index.js +1 -21
  111. package/dist/utils/logger.d.ts +1 -10
  112. package/dist/utils/logger.js +1 -40
  113. package/dist/views/layouts/main.hbs +0 -4
  114. package/dist/views/pages/databases.hbs +0 -18
  115. package/dist/views/pages/designer.hbs +0 -10
  116. package/dist/views/pages/error.hbs +0 -2
  117. package/dist/views/pages/form.hbs +0 -5
  118. package/dist/views/pages/home.hbs +0 -8
  119. package/dist/views/pages/login.hbs +0 -13
  120. package/dist/views/pages/query.hbs +0 -9
  121. package/dist/views/pages/schema.hbs +0 -20
  122. package/dist/views/pages/seed.hbs +0 -31
  123. package/dist/views/pages/table.hbs +0 -14
  124. package/dist/views/partials/icon.hbs +0 -1
  125. package/dist/views/partials/navbar.hbs +0 -6
  126. package/dist/views/partials/sidebar.hbs +0 -8
  127. package/package.json +3 -2
  128. package/dist/app.js.map +0 -1
  129. package/dist/auth/config.js.map +0 -1
  130. package/dist/auth/crypto.js.map +0 -1
  131. package/dist/auth/index.js.map +0 -1
  132. package/dist/auth/middleware.js.map +0 -1
  133. package/dist/auth/routes.js.map +0 -1
  134. package/dist/auth/types.js.map +0 -1
  135. package/dist/cli/args.js.map +0 -1
  136. package/dist/cli/config.js.map +0 -1
  137. package/dist/cli/index.js.map +0 -1
  138. package/dist/cli/runner.js.map +0 -1
  139. package/dist/cli.js.map +0 -1
  140. package/dist/data/datasets.js.map +0 -1
  141. package/dist/data/detector.js.map +0 -1
  142. package/dist/data/engine.js.map +0 -1
  143. package/dist/data/index.js.map +0 -1
  144. package/dist/data/strategies.js.map +0 -1
  145. package/dist/data/types.js.map +0 -1
  146. package/dist/db/database.js.map +0 -1
  147. package/dist/db/export.js.map +0 -1
  148. package/dist/db/filters.js.map +0 -1
  149. package/dist/db/index.js.map +0 -1
  150. package/dist/db/introspection.js.map +0 -1
  151. package/dist/db/manager.js.map +0 -1
  152. package/dist/db/migrations.js.map +0 -1
  153. package/dist/db/postgres.js.map +0 -1
  154. package/dist/db/types.js.map +0 -1
  155. package/dist/index.js.map +0 -1
  156. package/dist/public/css/input.css +0 -302
  157. package/dist/routes/api/helpers.js.map +0 -1
  158. package/dist/routes/api/import-export.js.map +0 -1
  159. package/dist/routes/api/index.js.map +0 -1
  160. package/dist/routes/api/query.js.map +0 -1
  161. package/dist/routes/api/rows.js.map +0 -1
  162. package/dist/routes/api/seed.js.map +0 -1
  163. package/dist/routes/api/tables.js.map +0 -1
  164. package/dist/routes/databases.js.map +0 -1
  165. package/dist/routes/index.js.map +0 -1
  166. package/dist/routes/pages.js.map +0 -1
  167. package/dist/serverless.js.map +0 -1
  168. package/dist/sql/classifier.js.map +0 -1
  169. package/dist/sql/generator.js.map +0 -1
  170. package/dist/sql/index.js.map +0 -1
  171. package/dist/types/api.js.map +0 -1
  172. package/dist/utils/colors.js.map +0 -1
  173. package/dist/utils/common.js.map +0 -1
  174. package/dist/utils/csv.js.map +0 -1
  175. package/dist/utils/datatype.js.map +0 -1
  176. package/dist/utils/icons.js.map +0 -1
  177. package/dist/utils/index.js.map +0 -1
  178. package/dist/utils/logger.js.map +0 -1
@@ -1,412 +1 @@
1
- /**
2
- * AdminDB — Strongly typed API request and response interfaces.
3
- *
4
- * Every REST API endpoint returns a standardized envelope:
5
- * `{ success: true, data: T }` on success, or `{ success: false, error: string }` on failure.
6
- */
7
- import type { ColumnInfo, ForeignKeyInfo, IndexInfo, SavedQuery, SchemaInfo, TableInfoData, TableListItem, WhereClause, RowFilters } from '../db/database';
8
- import type { DatabaseEntry } from '../db/manager';
9
- import type { ColumnDef, IndexDef } from '../sql/generator';
10
- import type { ColumnGeneratorConfig, ColumnPlan, GeneratorStrategyId, StrategyDescriptor, StrategyCategory } from '../data/index';
11
- export type { ColumnInfo, ForeignKeyInfo, IndexInfo, SavedQuery, SchemaInfo, TableInfoData, TableListItem, WhereClause, RowFilters, ColumnDef, IndexDef, ColumnGeneratorConfig, ColumnPlan, GeneratorStrategyId, StrategyDescriptor, StrategyCategory, };
12
- /** Successful API response container. */
13
- export interface ApiSuccessResponse<T = unknown> {
14
- success: true;
15
- data: T;
16
- }
17
- /** Error API response container. */
18
- export interface ApiErrorResponse<T = unknown> {
19
- success: false;
20
- error: string;
21
- data?: T;
22
- }
23
- /** Discriminated union of all API responses. */
24
- export type ApiResponse<T = unknown> = ApiSuccessResponse<T> | ApiErrorResponse<T>;
25
- /** GET /api/tables */
26
- export type ListTablesResponseData = TableListItem[];
27
- export type ListTablesResponse = ApiResponse<ListTablesResponseData>;
28
- /** GET /api/tables/:table/info */
29
- export type TableInfoResponseData = TableInfoData;
30
- export type TableInfoResponse = ApiResponse<TableInfoResponseData>;
31
- /** GET /api/tables/:table/fk-options */
32
- export type FkOptionsResponseData = Record<string, {
33
- value: unknown;
34
- label: string;
35
- }[]>;
36
- export type FkOptionsResponse = ApiResponse<FkOptionsResponseData>;
37
- /** GET /api/tables/:table/rows */
38
- export interface GetRowsResponseData {
39
- rows: Record<string, unknown>[];
40
- count: number;
41
- page: number;
42
- limit: number;
43
- filters: RowFilters;
44
- }
45
- export type GetRowsResponse = ApiResponse<GetRowsResponseData>;
46
- /** GET /api/tables/:table/row/:id */
47
- export type GetRowResponseData = Record<string, unknown>;
48
- export type GetRowResponse = ApiResponse<GetRowResponseData>;
49
- /** GET /api/tables/:table/rows/:id/references */
50
- export interface RowReferenceGroup {
51
- table: string;
52
- from: string;
53
- to: string;
54
- value: unknown;
55
- count: number;
56
- columns: string[];
57
- rows: Record<string, unknown>[];
58
- }
59
- export interface GetRowReferencesResponseData {
60
- references: RowReferenceGroup[];
61
- }
62
- export type GetRowReferencesResponse = ApiResponse<GetRowReferencesResponseData>;
63
- /** POST /api/tables/:table/rows */
64
- export interface InsertRowRequestBody {
65
- values: Record<string, unknown>;
66
- }
67
- export interface InsertRowResponseData {
68
- message: string;
69
- rowId?: number | bigint;
70
- sql: string;
71
- }
72
- export type InsertRowResponse = ApiResponse<InsertRowResponseData>;
73
- /** POST /api/tables/:table/rows/generate */
74
- export interface GenerateInsertRequestBody {
75
- values: Record<string, unknown>;
76
- }
77
- export interface GenerateInsertResponseData {
78
- sql: string;
79
- }
80
- export type GenerateInsertResponse = ApiResponse<GenerateInsertResponseData>;
81
- /** POST /api/tables/:table/rows/import */
82
- export interface ImportCsvRequestBody {
83
- csv: string;
84
- }
85
- export interface ImportCsvResponseData {
86
- message: string;
87
- inserted?: number;
88
- skipped?: number;
89
- }
90
- export type ImportCsvResponse = ApiResponse<ImportCsvResponseData>;
91
- /** PUT /api/tables/:table/row/:id */
92
- export interface UpdateRowRequestBody {
93
- values: Record<string, unknown>;
94
- nulls?: string[];
95
- }
96
- export interface UpdateRowResponseData {
97
- message: string;
98
- sql: string;
99
- }
100
- export type UpdateRowResponse = ApiResponse<UpdateRowResponseData>;
101
- /** PUT /api/tables/:table/row/:id/generate */
102
- export interface GenerateUpdateRequestBody {
103
- values: Record<string, unknown>;
104
- nulls?: string[];
105
- }
106
- export interface GenerateUpdateResponseData {
107
- sql: string;
108
- }
109
- export type GenerateUpdateResponse = ApiResponse<GenerateUpdateResponseData>;
110
- /** DELETE /api/tables/:table/row/:id */
111
- export interface DeleteRowResponseData {
112
- message: string;
113
- }
114
- export type DeleteRowResponse = ApiResponse<DeleteRowResponseData>;
115
- /** GET /api/tables/:table/row/:id/blob/:column/meta */
116
- export interface BlobMetaResponseData {
117
- isNull: boolean;
118
- mime?: string;
119
- ext?: string;
120
- isImage?: boolean;
121
- isText?: boolean;
122
- isPdf?: boolean;
123
- isAudio?: boolean;
124
- isVideo?: boolean;
125
- size: number;
126
- sizeFormatted: string;
127
- hexDump?: {
128
- lines: {
129
- offset: string;
130
- hex: string;
131
- ascii: string;
132
- }[];
133
- totalBytes: number;
134
- truncated: boolean;
135
- };
136
- textPreview?: string | null;
137
- }
138
- export type BlobMetaResponse = ApiResponse<BlobMetaResponseData>;
139
- /** PUT /api/tables/:table/row/:id/blob/:column */
140
- export interface UpdateBlobRequestBody {
141
- data: string;
142
- format?: 'base64' | 'hex' | 'text';
143
- }
144
- export interface UpdateBlobResponseData {
145
- message: string;
146
- size: number;
147
- }
148
- export type UpdateBlobResponse = ApiResponse<UpdateBlobResponseData>;
149
- /** GET /api/tables/:table/ddl */
150
- export interface TableDdlResponseData {
151
- table: string;
152
- ddl: string;
153
- }
154
- export type TableDdlResponse = ApiResponse<TableDdlResponseData>;
155
- /** POST /api/tables/:table/rows/bulk-impact */
156
- export interface BulkImpactRequestBody {
157
- ids: (string | number)[];
158
- }
159
- export interface BulkImpactReference {
160
- table: string;
161
- from: string;
162
- to: string;
163
- count: number;
164
- }
165
- export interface BulkImpactResponseData {
166
- selected: number;
167
- references: BulkImpactReference[];
168
- total: number;
169
- }
170
- export type BulkImpactResponse = ApiResponse<BulkImpactResponseData>;
171
- /** POST /api/tables/:table/rows/bulk-delete */
172
- export interface BulkDeleteRequestBody {
173
- ids: (string | number)[];
174
- confirmImpact?: boolean;
175
- }
176
- export interface BulkDeleteResponseData {
177
- message: string;
178
- deleted: number;
179
- }
180
- export type BulkDeleteResponse = ApiResponse<BulkDeleteResponseData>;
181
- /** POST /api/tables/:table/rows/bulk-export */
182
- export interface BulkExportRequestBody {
183
- ids: (string | number)[];
184
- format?: 'csv' | 'json';
185
- }
186
- export interface BulkExportResponseData {
187
- format: string;
188
- filename: string;
189
- content: string;
190
- rowCount: number;
191
- }
192
- export type BulkExportResponse = ApiResponse<BulkExportResponseData>;
193
- /** POST /api/tables/:table/rows/bulk-update */
194
- export interface BulkUpdateItem {
195
- id: string | number;
196
- values?: Record<string, unknown>;
197
- nulls?: string[];
198
- }
199
- export interface BulkUpdateRequestBody {
200
- updates: BulkUpdateItem[];
201
- }
202
- export interface BulkUpdateResponseData {
203
- message: string;
204
- updated: number;
205
- }
206
- export type BulkUpdateResponse = ApiResponse<BulkUpdateResponseData>;
207
- /** GET /api/tables/:table/seed/config */
208
- export interface SeedConfigResponseData {
209
- table: string;
210
- columns: ColumnGeneratorConfig[];
211
- maxRows: number;
212
- }
213
- export type SeedConfigResponse = ApiResponse<SeedConfigResponseData>;
214
- /** POST /api/tables/:table/seed/generate */
215
- export interface SeedGenerateRequestBody {
216
- count?: number;
217
- plan?: Record<string, ColumnPlan>;
218
- }
219
- export interface SeedGenerateResponseData {
220
- table: string;
221
- count: number;
222
- sql: string;
223
- previewRows?: Record<string, unknown>[];
224
- warnings: string[];
225
- }
226
- export type SeedGenerateResponse = ApiResponse<SeedGenerateResponseData>;
227
- /** POST /api/tables/:table/seed */
228
- export interface SeedInsertRequestBody {
229
- count?: number;
230
- plan?: Record<string, ColumnPlan>;
231
- truncate?: boolean;
232
- }
233
- export interface SeedInsertResponseData {
234
- message: string;
235
- inserted: number;
236
- skipped: number;
237
- warnings: string[];
238
- elapsedMs?: number;
239
- }
240
- export type SeedInsertResponse = ApiResponse<SeedInsertResponseData>;
241
- /** POST /api/tables */
242
- export interface CreateTableRequestBody {
243
- name: string;
244
- columns: ColumnDef[];
245
- }
246
- export interface CreateTableResponseData {
247
- message: string;
248
- sql: string;
249
- }
250
- export type CreateTableResponse = ApiResponse<CreateTableResponseData>;
251
- /** POST /api/tables/generate */
252
- export interface GenerateCreateTableRequestBody {
253
- name: string;
254
- columns: ColumnDef[];
255
- }
256
- export interface GenerateCreateTableResponseData {
257
- sql: string;
258
- }
259
- export type GenerateCreateTableResponse = ApiResponse<GenerateCreateTableResponseData>;
260
- /** GET /api/tables/:table/schema */
261
- export type GetSchemaResponseData = SchemaInfo;
262
- export type GetSchemaResponse = ApiResponse<GetSchemaResponseData>;
263
- /** POST /api/tables/:table/rename */
264
- export interface RenameTableRequestBody {
265
- name: string;
266
- }
267
- export interface RenameTableResponseData {
268
- message: string;
269
- sql: string;
270
- table: string;
271
- }
272
- export type RenameTableResponse = ApiResponse<RenameTableResponseData>;
273
- /** POST /api/tables/:table/columns */
274
- export interface AddColumnRequestBody {
275
- column: ColumnDef;
276
- }
277
- export interface AddColumnResponseData {
278
- message: string;
279
- sql: string;
280
- }
281
- export type AddColumnResponse = ApiResponse<AddColumnResponseData>;
282
- /** PUT /api/tables/:table/columns/:column */
283
- export interface RenameColumnRequestBody {
284
- name: string;
285
- }
286
- export interface RenameColumnResponseData {
287
- message: string;
288
- sql: string;
289
- }
290
- export type RenameColumnResponse = ApiResponse<RenameColumnResponseData>;
291
- /** DELETE /api/tables/:table/columns/:column */
292
- export interface DropColumnResponseData {
293
- message: string;
294
- sql: string;
295
- }
296
- export type DropColumnResponse = ApiResponse<DropColumnResponseData>;
297
- /** DELETE /api/tables/:table */
298
- export interface DropTableResponseData {
299
- message: string;
300
- sql: string;
301
- }
302
- export type DropTableResponse = ApiResponse<DropTableResponseData>;
303
- /** POST /api/tables/:table/indexes */
304
- export interface CreateIndexRequestBody {
305
- name?: string;
306
- columns: string[];
307
- unique?: boolean;
308
- }
309
- export interface CreateIndexResponseData {
310
- message: string;
311
- sql: string;
312
- }
313
- export type CreateIndexResponse = ApiResponse<CreateIndexResponseData>;
314
- /** DELETE /api/tables/:table/indexes/:index */
315
- export interface DropIndexResponseData {
316
- message: string;
317
- sql: string;
318
- }
319
- export type DropIndexResponse = ApiResponse<DropIndexResponseData>;
320
- /** POST /api/query request */
321
- export interface ExecuteQueryRequestBody {
322
- sql: string;
323
- }
324
- /** Result when SQL is classified as COUNT */
325
- export interface QueryCountResult {
326
- kind: 'count';
327
- count: number;
328
- message: string;
329
- }
330
- /** Result when SQL is classified as SELECT / READ */
331
- export interface QuerySelectResult {
332
- kind: 'select';
333
- columns: string[];
334
- rows: Record<string, unknown>[];
335
- }
336
- /** Result when SQL is a write statement (INSERT, UPDATE, DELETE, DDL, Script) */
337
- export interface QueryWriteResult {
338
- kind: 'write';
339
- changes: number | null;
340
- message: string;
341
- }
342
- /** Discriminated union of all query results */
343
- export type ExecuteQueryResponseData = QueryCountResult | QuerySelectResult | QueryWriteResult;
344
- export type ExecuteQueryResponse = ApiResponse<ExecuteQueryResponseData>;
345
- /** POST /api/query/export */
346
- export interface ExportQueryRequestBody {
347
- sql: string;
348
- format?: 'csv' | 'json';
349
- }
350
- /** GET /api/queries */
351
- export type ListSavedQueriesResponseData = SavedQuery[];
352
- export type ListSavedQueriesResponse = ApiResponse<ListSavedQueriesResponseData>;
353
- /** POST /api/queries */
354
- export interface SaveQueryRequestBody {
355
- name: string;
356
- sql: string;
357
- }
358
- export interface SaveQueryResponseData {
359
- message: string;
360
- }
361
- export type SaveQueryResponse = ApiResponse<SaveQueryResponseData>;
362
- /** DELETE /api/queries/:id */
363
- export interface DeleteSavedQueryResponseData {
364
- message: string;
365
- }
366
- export type DeleteSavedQueryResponse = ApiResponse<DeleteSavedQueryResponseData>;
367
- export interface DatabaseRow extends DatabaseEntry {
368
- sizeLabel: string;
369
- modifiedLabel: string;
370
- tables: number;
371
- }
372
- /** GET /api/databases */
373
- export type ListDatabasesResponseData = DatabaseRow[];
374
- export type ListDatabasesResponse = ApiResponse<ListDatabasesResponseData>;
375
- /** POST /api/databases */
376
- export interface CreateDatabaseRequestBody {
377
- name: string;
378
- }
379
- export interface CreateDatabaseResponseData {
380
- id: string;
381
- message: string;
382
- }
383
- export type CreateDatabaseResponse = ApiResponse<CreateDatabaseResponseData>;
384
- /** POST /api/databases/open */
385
- export interface OpenDatabaseRequestBody {
386
- path: string;
387
- }
388
- export interface OpenDatabaseResponseData {
389
- id: string;
390
- message: string;
391
- }
392
- export type OpenDatabaseResponse = ApiResponse<OpenDatabaseResponseData>;
393
- /** DELETE /api/databases/:id */
394
- export interface DeleteDatabaseResponseData {
395
- message: string;
396
- }
397
- export type DeleteDatabaseResponse = ApiResponse<DeleteDatabaseResponseData>;
398
- export interface FsEntry {
399
- name: string;
400
- path: string;
401
- isDir: boolean;
402
- isDb: boolean;
403
- size: number;
404
- }
405
- /** GET /api/fs/list */
406
- export interface ListFsResponseData {
407
- path: string;
408
- name: string;
409
- parent: string | null;
410
- entries: FsEntry[];
411
- }
412
- export type ListFsResponse = ApiResponse<ListFsResponseData>;
1
+ import type {ColumnInfo,ForeignKeyInfo,IndexInfo,SavedQuery,SchemaInfo,TableInfoData,TableListItem,WhereClause,RowFilters} from '../db/database';import type {DatabaseEntry} from '../db/manager';import type {ColumnDef,IndexDef} from '../sql/generator';import type {ColumnGeneratorConfig,ColumnPlan,GeneratorStrategyId,StrategyDescriptor,StrategyCategory} from '../data/index';export type {ColumnInfo,ForeignKeyInfo,IndexInfo,SavedQuery,SchemaInfo,TableInfoData,TableListItem,WhereClause,RowFilters,ColumnDef,IndexDef,ColumnGeneratorConfig,ColumnPlan,GeneratorStrategyId,StrategyDescriptor,StrategyCategory,};export interface ApiSuccessResponse<T=unknown>{success:true;data:T;}export interface ApiErrorResponse<T=unknown>{success:false;error:string;data?:T;}export type ApiResponse<T=unknown>=ApiSuccessResponse<T>|ApiErrorResponse<T>;export type ListTablesResponseData=TableListItem[];export type ListTablesResponse=ApiResponse<ListTablesResponseData>;export type TableInfoResponseData=TableInfoData;export type TableInfoResponse=ApiResponse<TableInfoResponseData>;export type FkOptionsResponseData=Record<string,{value:unknown;label:string;}[]>;export type FkOptionsResponse=ApiResponse<FkOptionsResponseData>;export interface GetRowsResponseData{rows:Record<string,unknown>[];count:number;page:number;limit:number;filters:RowFilters;}export type GetRowsResponse=ApiResponse<GetRowsResponseData>;export type GetRowResponseData=Record<string,unknown>;export type GetRowResponse=ApiResponse<GetRowResponseData>;export interface RowReferenceGroup{table:string; from :string;to:string;value:unknown;count:number;columns:string[];rows:Record<string,unknown>[];}export interface GetRowReferencesResponseData{references:RowReferenceGroup[];}export type GetRowReferencesResponse=ApiResponse<GetRowReferencesResponseData>;export interface InsertRowRequestBody{values:Record<string,unknown>;}export interface InsertRowResponseData{message:string;rowId?:number|bigint;sql:string;}export type InsertRowResponse=ApiResponse<InsertRowResponseData>;export interface GenerateInsertRequestBody{values:Record<string,unknown>;}export interface GenerateInsertResponseData{sql:string;}export type GenerateInsertResponse=ApiResponse<GenerateInsertResponseData>;export interface ImportCsvRequestBody{csv:string;}export interface ImportCsvResponseData{message:string;inserted?:number;skipped?:number;}export type ImportCsvResponse=ApiResponse<ImportCsvResponseData>;export interface UpdateRowRequestBody{values:Record<string,unknown>;nulls?:string[];}export interface UpdateRowResponseData{message:string;sql:string;}export type UpdateRowResponse=ApiResponse<UpdateRowResponseData>;export interface GenerateUpdateRequestBody{values:Record<string,unknown>;nulls?:string[];}export interface GenerateUpdateResponseData{sql:string;}export type GenerateUpdateResponse=ApiResponse<GenerateUpdateResponseData>;export interface DeleteRowResponseData{message:string;}export type DeleteRowResponse=ApiResponse<DeleteRowResponseData>;export interface BlobMetaResponseData{isNull:boolean;mime?:string;ext?:string;isImage?:boolean;isText?:boolean;isPdf?:boolean;isAudio?:boolean;isVideo?:boolean;size:number;sizeFormatted:string;hexDump?:{lines:{offset:string;hex:string;ascii:string;}[];totalBytes:number;truncated:boolean;};textPreview?:string|null;}export type BlobMetaResponse=ApiResponse<BlobMetaResponseData>;export interface UpdateBlobRequestBody{data:string;format?:'base64'|'hex'|'text';}export interface UpdateBlobResponseData{message:string;size:number;}export type UpdateBlobResponse=ApiResponse<UpdateBlobResponseData>;export interface TableDdlResponseData{table:string;ddl:string;}export type TableDdlResponse=ApiResponse<TableDdlResponseData>;export interface BulkImpactRequestBody{ids:(string|number)[];}export interface BulkImpactReference{table:string; from :string;to:string;count:number;}export interface BulkImpactResponseData{selected:number;references:BulkImpactReference[];total:number;}export type BulkImpactResponse=ApiResponse<BulkImpactResponseData>;export interface BulkDeleteRequestBody{ids:(string|number)[];confirmImpact?:boolean;}export interface BulkDeleteResponseData{message:string;deleted:number;}export type BulkDeleteResponse=ApiResponse<BulkDeleteResponseData>;export interface BulkExportRequestBody{ids:(string|number)[];format?:'csv'|'json';}export interface BulkExportResponseData{format:string;filename:string;content:string;rowCount:number;}export type BulkExportResponse=ApiResponse<BulkExportResponseData>;export interface BulkUpdateItem{id:string|number;values?:Record<string,unknown>;nulls?:string[];}export interface BulkUpdateRequestBody{updates:BulkUpdateItem[];}export interface BulkUpdateResponseData{message:string;updated:number;}export type BulkUpdateResponse=ApiResponse<BulkUpdateResponseData>;export interface SeedConfigResponseData{table:string;columns:ColumnGeneratorConfig[];maxRows:number;}export type SeedConfigResponse=ApiResponse<SeedConfigResponseData>;export interface SeedGenerateRequestBody{count?:number;plan?:Record<string,ColumnPlan>;}export interface SeedGenerateResponseData{table:string;count:number;sql:string;previewRows?:Record<string,unknown>[];warnings:string[];}export type SeedGenerateResponse=ApiResponse<SeedGenerateResponseData>;export interface SeedInsertRequestBody{count?:number;plan?:Record<string,ColumnPlan>;truncate?:boolean;}export interface SeedInsertResponseData{message:string;inserted:number;skipped:number;warnings:string[];elapsedMs?:number;}export type SeedInsertResponse=ApiResponse<SeedInsertResponseData>;export interface CreateTableRequestBody{name:string;columns:ColumnDef[];}export interface CreateTableResponseData{message:string;sql:string;}export type CreateTableResponse=ApiResponse<CreateTableResponseData>;export interface GenerateCreateTableRequestBody{name:string;columns:ColumnDef[];}export interface GenerateCreateTableResponseData{sql:string;}export type GenerateCreateTableResponse=ApiResponse<GenerateCreateTableResponseData>;export type GetSchemaResponseData=SchemaInfo;export type GetSchemaResponse=ApiResponse<GetSchemaResponseData>;export interface RenameTableRequestBody{name:string;}export interface RenameTableResponseData{message:string;sql:string;table:string;}export type RenameTableResponse=ApiResponse<RenameTableResponseData>;export interface AddColumnRequestBody{column:ColumnDef;}export interface AddColumnResponseData{message:string;sql:string;}export type AddColumnResponse=ApiResponse<AddColumnResponseData>;export interface RenameColumnRequestBody{name:string;}export interface RenameColumnResponseData{message:string;sql:string;}export type RenameColumnResponse=ApiResponse<RenameColumnResponseData>;export interface DropColumnResponseData{message:string;sql:string;}export type DropColumnResponse=ApiResponse<DropColumnResponseData>;export interface DropTableResponseData{message:string;sql:string;}export type DropTableResponse=ApiResponse<DropTableResponseData>;export interface CreateIndexRequestBody{name?:string;columns:string[];unique?:boolean;}export interface CreateIndexResponseData{message:string;sql:string;}export type CreateIndexResponse=ApiResponse<CreateIndexResponseData>;export interface DropIndexResponseData{message:string;sql:string;}export type DropIndexResponse=ApiResponse<DropIndexResponseData>;export interface ExecuteQueryRequestBody{sql:string;}export interface QueryCountResult{kind:'count';count:number;message:string;}export interface QuerySelectResult{kind:'select';columns:string[];rows:Record<string,unknown>[];}export interface QueryWriteResult{kind:'write';changes:number|null;message:string;}export type ExecuteQueryResponseData=QueryCountResult|QuerySelectResult|QueryWriteResult;export type ExecuteQueryResponse=ApiResponse<ExecuteQueryResponseData>;export interface ExportQueryRequestBody{sql:string;format?:'csv'|'json';}export type ListSavedQueriesResponseData=SavedQuery[];export type ListSavedQueriesResponse=ApiResponse<ListSavedQueriesResponseData>;export interface SaveQueryRequestBody{name:string;sql:string;}export interface SaveQueryResponseData{message:string;}export type SaveQueryResponse=ApiResponse<SaveQueryResponseData>;export interface DeleteSavedQueryResponseData{message:string;}export type DeleteSavedQueryResponse=ApiResponse<DeleteSavedQueryResponseData>;export interface DatabaseRow extends DatabaseEntry{sizeLabel:string;modifiedLabel:string;tables:number;}export type ListDatabasesResponseData=DatabaseRow[];export type ListDatabasesResponse=ApiResponse<ListDatabasesResponseData>;export interface CreateDatabaseRequestBody{name:string;}export interface CreateDatabaseResponseData{id:string;message:string;}export type CreateDatabaseResponse=ApiResponse<CreateDatabaseResponseData>;export interface OpenDatabaseRequestBody{path:string;}export interface OpenDatabaseResponseData{id:string;message:string;}export type OpenDatabaseResponse=ApiResponse<OpenDatabaseResponseData>;export interface DeleteDatabaseResponseData{message:string;}export type DeleteDatabaseResponse=ApiResponse<DeleteDatabaseResponseData>;export interface FsEntry{name:string;path:string;isDir:boolean;isDb:boolean;size:number;}export interface ListFsResponseData{path:string;name:string;parent:string|null;entries:FsEntry[];}export type ListFsResponse=ApiResponse<ListFsResponseData>;
package/dist/types/api.js CHANGED
@@ -1,9 +1 @@
1
- "use strict";
2
- /**
3
- * AdminDB — Strongly typed API request and response interfaces.
4
- *
5
- * Every REST API endpoint returns a standardized envelope:
6
- * `{ success: true, data: T }` on success, or `{ success: false, error: string }` on failure.
7
- */
8
- Object.defineProperty(exports, "__esModule", { value: true });
9
- //# sourceMappingURL=api.js.map
1
+ Object.defineProperty(exports,"__esModule",{value:!0});
@@ -1,40 +1 @@
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
- };
1
+ export declare function supportsColor():boolean;export declare const c:{reset:(str:unknown)=>string;bold:(str:unknown)=>string;dim:(str:unknown)=>string;italic:(str:unknown)=>string;underline:(str:unknown)=>string;inverse:(str:unknown)=>string;black:(str:unknown)=>string;red:(str:unknown)=>string;green:(str:unknown)=>string;yellow:(str:unknown)=>string;blue:(str:unknown)=>string;magenta:(str:unknown)=>string;cyan:(str:unknown)=>string;white:(str:unknown)=>string;gray:(str:unknown)=>string;brightRed:(str:unknown)=>string;brightGreen:(str:unknown)=>string;brightYellow:(str:unknown)=>string;brightBlue:(str:unknown)=>string;brightMagenta:(str:unknown)=>string;brightCyan:(str:unknown)=>string;brightWhite:(str:unknown)=>string;bgBlack:(str:unknown)=>string;bgRed:(str:unknown)=>string;bgGreen:(str:unknown)=>string;bgYellow:(str:unknown)=>string;bgBlue:(str:unknown)=>string;bgMagenta:(str:unknown)=>string;bgCyan:(str:unknown)=>string;bgWhite:(str:unknown)=>string;bgGray:(str:unknown)=>string;};
@@ -1,64 +1 @@
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
1
+ function supportsColor(){return!process.env.NO_COLOR&&!process.env.NODE_DISABLE_COLORS&&(!(!process.env.FORCE_COLOR||"0"===process.env.FORCE_COLOR)||"dumb"!==process.env.TERM&&(!!process.env.CI||Boolean(process.stdout&&process.stdout.isTTY)))}Object.defineProperty(exports,"__esModule",{value:!0}),exports.c=void 0,exports.supportsColor=supportsColor;const wrap=(open,close)=>str=>{const text=String(str??"");return supportsColor()&&text?`${open}${text}${close}`:text};exports.c={reset:wrap("",""),bold:wrap("",""),dim:wrap("",""),italic:wrap("",""),underline:wrap("",""),inverse:wrap("",""),black:wrap("",""),red:wrap("",""),green:wrap("",""),yellow:wrap("",""),blue:wrap("",""),magenta:wrap("",""),cyan:wrap("",""),white:wrap("",""),gray:wrap("",""),brightRed:wrap("",""),brightGreen:wrap("",""),brightYellow:wrap("",""),brightBlue:wrap("",""),brightMagenta:wrap("",""),brightCyan:wrap("",""),brightWhite:wrap("",""),bgBlack:wrap("",""),bgRed:wrap("",""),bgGreen:wrap("",""),bgYellow:wrap("",""),bgBlue:wrap("",""),bgMagenta:wrap("",""),bgCyan:wrap("",""),bgWhite:wrap("",""),bgGray:wrap("","")};
@@ -1,50 +1 @@
1
- export declare function errorMessage(err: unknown): string;
2
- /**
3
- * True when `p` is equal to `root` or lives inside it (both treated as
4
- * absolute). Used to sandbox the filesystem file-browser to an allowed folder.
5
- * Resolves symlinks and rejects null-byte injections.
6
- */
7
- export declare function isPathWithinRoot(root: string, p: string): boolean;
8
- /** Operators understood by the structured (type-aware) filter conditions. */
9
- export type FilterOp = 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte' | 'like' | 'prefix' | 'between' | 'null' | 'notnull';
10
- /** A single structured filter condition produced by the type-aware filter form. */
11
- export interface FilterCondition {
12
- op: FilterOp;
13
- /** Primary operand for scalar operators; lower bound for `between`. */
14
- value?: string;
15
- /** Upper bound for `between`. */
16
- max?: string;
17
- }
18
- /** A filter value: the legacy string syntax or one/more structured conditions. */
19
- export type FilterValue = string | FilterCondition | FilterCondition[];
20
- /** Row filters keyed by column name. */
21
- export interface RowFilters {
22
- [column: string]: FilterValue;
23
- }
24
- /** Parse the `f` query parameter (URL-encoded JSON object) into row filters. */
25
- export declare function parseFilters(raw: unknown): RowFilters;
26
- /** Encode filters back into a `f=…` query string (empty when no filters). */
27
- export declare function filtersToQS(filters: RowFilters | undefined): string;
28
- /** Internal tables (kept out of user-facing pickers) start with an underscore. */
29
- export declare function isInternalTable(name: string): boolean;
30
- /** Encode primary-key values into a single URL path segment (comma-joined, URL-encoded). */
31
- export declare function encodePk(values: unknown[]): string;
32
- /** Decode a primary-key path segment back into individual values. */
33
- export declare function decodePk(encoded: string): string[];
34
- /** Normalize a single cell for JSON / display (BLOB → 0x-hex string, undefined → null). */
35
- export declare function normalizeCell(value: unknown): unknown;
36
- /** Normalize every cell in a row. */
37
- export declare function normalizeRow(row: Record<string, unknown>): Record<string, unknown>;
38
- /**
39
- * Coerce a raw form value into a value suitable for SQLite or Postgres binding.
40
- * - empty string / null / undefined → null ("not set")
41
- * - `0` stays valid
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
- */
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
+ export declare function errorMessage(err:unknown):string;export declare function isPathWithinRoot(root:string,p:string):boolean;export type FilterOp='eq'|'neq'|'gt'|'gte'|'lt'|'lte'|'like'|'prefix'|'between'|'null'|'notnull';export interface FilterCondition{op:FilterOp;value?:string;max?:string;}export type FilterValue=string|FilterCondition|FilterCondition[];export interface RowFilters{[column:string]:FilterValue;}export declare function parseFilters(raw:unknown):RowFilters;export declare function filtersToQS(filters:RowFilters|undefined):string;export declare function isInternalTable(name:string):boolean;export declare function encodePk(values:unknown[]):string;export declare function decodePk(encoded:string):string[];export declare function normalizeCell(value:unknown):unknown;export declare function normalizeRow(row:Record<string,unknown>):Record<string,unknown>;export declare function coerceFormValue(raw:unknown,columnType:string,dialect?:'sqlite'|'postgres'):unknown;export declare function formatBytes(bytes:number):string;export declare function truncate(str:string,maxLength:number):string;