admindb 1.2.1 → 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 (205) hide show
  1. package/README.md +262 -329
  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 -146
  56. package/dist/db/database.js +208 -461
  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 +74 -11
  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 +865 -152
  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 +147 -62
  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 +8 -6
  166. package/dist/views/pages/schema.hbs +41 -13
  167. package/dist/views/pages/seed.hbs +200 -54
  168. package/dist/views/pages/table.hbs +152 -72
  169. package/dist/views/partials/icon.hbs +2 -0
  170. package/dist/views/partials/navbar.hbs +69 -25
  171. package/dist/views/partials/sidebar.hbs +108 -94
  172. package/package.json +11 -4
  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/data/generator.d.ts +0 -86
  181. package/dist/data/generator.js +0 -1031
  182. package/dist/data/generator.js.map +0 -1
  183. package/dist/logger.js +0 -25
  184. package/dist/logger.js.map +0 -1
  185. package/dist/routes/api.d.ts +0 -9
  186. package/dist/routes/api.js +0 -848
  187. package/dist/routes/api.js.map +0 -1
  188. package/dist/test/classifier.test.d.ts +0 -1
  189. package/dist/test/classifier.test.js +0 -44
  190. package/dist/test/classifier.test.js.map +0 -1
  191. package/dist/test/csv.test.d.ts +0 -1
  192. package/dist/test/csv.test.js +0 -64
  193. package/dist/test/csv.test.js.map +0 -1
  194. package/dist/test/database.test.d.ts +0 -1
  195. package/dist/test/database.test.js +0 -402
  196. package/dist/test/database.test.js.map +0 -1
  197. package/dist/test/generator.test.d.ts +0 -1
  198. package/dist/test/generator.test.js +0 -132
  199. package/dist/test/generator.test.js.map +0 -1
  200. package/dist/test/manager.test.d.ts +0 -1
  201. package/dist/test/manager.test.js +0 -146
  202. package/dist/test/manager.test.js.map +0 -1
  203. package/dist/util.js.map +0 -1
  204. /package/dist/{csv.d.ts → utils/csv.d.ts} +0 -0
  205. /package/dist/{csv.js → utils/csv.js} +0 -0
@@ -3,17 +3,85 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.registerPages = registerPages;
4
4
  const export_1 = require("../db/export");
5
5
  const generator_1 = require("../sql/generator");
6
- const util_1 = require("../util");
7
- const generator_2 = require("../data/generator");
8
- function buildDisplayRows(rawRows, info) {
9
- const pkCols = info.primaryKey;
10
- return rawRows.map((row) => ({
11
- cells: info.columns.map((c) => {
12
- const v = (0, util_1.normalizeCell)(row[c.name]);
13
- return { name: c.name, value: v, isNull: v === null || v === undefined, display: v == null ? '' : String(v) };
14
- }),
15
- pkEncoded: pkCols.length ? (0, util_1.encodePk)(pkCols.map((c) => row[c])) : null,
16
- }));
6
+ const common_1 = require("../utils/common");
7
+ const datatype_1 = require("../utils/datatype");
8
+ const index_1 = require("../data/index");
9
+ function buildDisplayRows(rawRows, info, table, basePath = '') {
10
+ const pkCols = info.primaryKey.length ? info.primaryKey : ['_rowid_'];
11
+ return rawRows.map((row) => {
12
+ const pkEncoded = (0, common_1.encodePk)(pkCols.map((c) => row[c]));
13
+ return {
14
+ cells: info.columns.map((c) => {
15
+ const raw = row[c.name];
16
+ const v = (0, common_1.normalizeCell)(raw);
17
+ const isNull = v == null;
18
+ const typeUpper = (c.type || '').toUpperCase();
19
+ const isBlob = typeUpper.includes('BLOB') || typeUpper.includes('BYTEA') || Buffer.isBuffer(raw) || raw instanceof Uint8Array || (typeof v === 'string' && (/^0x[0-9a-f]{8,}$/i.test(v) || /^\\x[0-9a-f]{8,}$/i.test(v)));
20
+ let isJson = false;
21
+ let isImage = false;
22
+ let isUrl = false;
23
+ let isColor = false;
24
+ let blobSize = '';
25
+ let blobMime = '';
26
+ let blobExt = '';
27
+ let blobUrl = '';
28
+ if (!isNull) {
29
+ const str = String(v);
30
+ if (isBlob) {
31
+ let buf;
32
+ if (Buffer.isBuffer(raw) || raw instanceof Uint8Array) {
33
+ buf = Buffer.isBuffer(raw) ? raw : Buffer.from(raw);
34
+ }
35
+ else if (typeof v === 'string' && /^0x[0-9a-f]*$/i.test(v)) {
36
+ buf = Buffer.from(v.slice(2), 'hex');
37
+ }
38
+ else if (typeof v === 'string' && /^\\x[0-9a-f]*$/i.test(v)) {
39
+ buf = Buffer.from(v.slice(2), 'hex');
40
+ }
41
+ else {
42
+ buf = Buffer.from(str, 'utf8');
43
+ }
44
+ const mimeInfo = (0, datatype_1.sniffMimeType)(buf);
45
+ blobSize = (0, common_1.formatBytes)(buf.length);
46
+ blobMime = mimeInfo.mime;
47
+ blobExt = mimeInfo.ext;
48
+ isImage = mimeInfo.isImage;
49
+ if (table && pkEncoded) {
50
+ blobUrl = `${basePath}/api/tables/${encodeURIComponent(table)}/row/${encodeURIComponent(pkEncoded)}/blob/${encodeURIComponent(c.name)}`;
51
+ }
52
+ }
53
+ else if ((0, datatype_1.isJsonString)(v) || typeUpper.includes('JSON')) {
54
+ isJson = (0, datatype_1.isJsonString)(v);
55
+ }
56
+ else {
57
+ if (/^https?:\/\/[^\s$.?#].[^\s]*$/i.test(str)) {
58
+ isUrl = true;
59
+ }
60
+ else if (/^#(?:[0-9a-fA-F]{3}){1,2}$|^rgba?\(\s*\d+\s*,\s*\d+\s*,\s*\d+/i.test(str)) {
61
+ isColor = true;
62
+ }
63
+ }
64
+ }
65
+ return {
66
+ name: c.name,
67
+ value: v,
68
+ isNull,
69
+ display: isNull ? '' : String(v),
70
+ type: c.type,
71
+ isBlob,
72
+ isJson,
73
+ isImage,
74
+ isUrl,
75
+ isColor,
76
+ blobSize,
77
+ blobMime,
78
+ blobExt,
79
+ blobUrl,
80
+ };
81
+ }),
82
+ pkEncoded,
83
+ };
84
+ });
17
85
  }
18
86
  function registerPages(router, ctx) {
19
87
  const { db } = ctx;
@@ -21,23 +89,43 @@ function registerPages(router, ctx) {
21
89
  res.status(404).render('pages/error', { title: 'Not found', status: 404, error: message });
22
90
  };
23
91
  // Home / browse overview.
24
- router.get('/', async (req, res, next) => {
92
+ router.get('/', async (_req, res, next) => {
25
93
  try {
26
- const tables = await db.listTables();
27
- const allNames = (tables.data ?? []).map((t) => t.name);
28
- const names = allNames.filter((n) => !n.startsWith('_'));
29
- const internalNames = allNames.filter((n) => n.startsWith('_'));
94
+ const names = res.locals.tables ?? [];
95
+ const internalNames = res.locals.internalTables ?? [];
96
+ let colCountsMap = {};
97
+ if (db.dialect === 'postgres') {
98
+ const colRes = await db.all(`SELECT table_name, count(*)::int AS cols FROM information_schema.columns WHERE table_schema = 'public' GROUP BY table_name;`);
99
+ if (colRes.success && colRes.data) {
100
+ for (const row of colRes.data) {
101
+ if (row && typeof row.table_name === 'string') {
102
+ colCountsMap[row.table_name] = Number(row.cols ?? 0);
103
+ }
104
+ }
105
+ }
106
+ }
107
+ const [stats, saved] = await Promise.all([
108
+ Promise.all(names.map(async (name) => {
109
+ const countR = await db.getRowCount(name);
110
+ const cols = colCountsMap[name] !== undefined
111
+ ? colCountsMap[name]
112
+ : (await db.getTableInfo(name)).data?.columns.length ?? 0;
113
+ return {
114
+ name,
115
+ count: countR.success ? countR.data : 0,
116
+ cols,
117
+ };
118
+ })),
119
+ db.listSavedQueries(),
120
+ ]);
30
121
  const counts = {};
31
122
  const cols = {};
32
123
  let totalRows = 0;
33
- for (const name of names) {
34
- const c = await db.getRowCount(name);
35
- counts[name] = c.success ? c.data : 0;
36
- totalRows += counts[name];
37
- const info = await db.getTableInfo(name);
38
- cols[name] = info.success ? (info.data?.columns.length ?? 0) : 0;
124
+ for (const s of stats) {
125
+ counts[s.name] = s.count;
126
+ cols[s.name] = s.cols;
127
+ totalRows += s.count;
39
128
  }
40
- const saved = await db.listSavedQueries();
41
129
  res.render('pages/home', {
42
130
  title: 'Home',
43
131
  tables: names,
@@ -65,10 +153,13 @@ function registerPages(router, ctx) {
65
153
  const pageSize = Math.max(1, Number.parseInt(String(req.query.size ?? '50'), 10) || 50);
66
154
  const orderBy = req.query.orderBy ? String(req.query.orderBy) : undefined;
67
155
  const orderDir = String(req.query.orderDir ?? 'asc').toLowerCase() === 'desc' ? 'desc' : 'asc';
68
- const filters = (0, util_1.parseFilters)(req.query.f);
69
- const filterQS = (0, util_1.filtersToQS)(filters);
70
- const countR = await db.getRowCount(table, filters);
71
- const rowsR = await db.getRows(table, { page, limit: pageSize, orderBy, orderDir, filters });
156
+ const filters = (0, common_1.parseFilters)(req.query.f);
157
+ const filterQS = (0, common_1.filtersToQS)(filters);
158
+ const [countR, rowsR, refsR] = await Promise.all([
159
+ db.getRowCount(table, filters),
160
+ db.getRows(table, { page, limit: pageSize, orderBy, orderDir, filters }),
161
+ db.getReferencingTables(table),
162
+ ]);
72
163
  const count = countR.success ? countR.data : 0;
73
164
  const rawRows = (rowsR.data ?? []);
74
165
  const pages = Math.max(1, Math.ceil(count / pageSize));
@@ -87,32 +178,28 @@ function registerPages(router, ctx) {
87
178
  href: `${basePath}/tables/${encodeURIComponent(table)}?${qs}${filterQS ? '&' + filterQS : ''}`,
88
179
  };
89
180
  });
90
- // Every table with a foreign key pointing at this one gets its own column
91
- // at the end of the grid; each cell shows how many of its rows reference
92
- // that particular row (click to expand the referencing rows inline).
93
- const refsR = await db.getReferencingTables(table);
94
181
  const refColumns = (refsR.data ?? [])
95
182
  .filter((r) => !r.table.startsWith('_'))
96
183
  .map((rt) => {
97
184
  const ref = rt.refs[0];
98
185
  return { table: rt.table, from: ref?.from ?? '', to: ref?.to ?? '' };
99
186
  });
100
- // Per-row reference counts: one grouped query per referencing table.
101
- const countMap = new Map();
102
- for (const col of refColumns) {
187
+ // Per-row reference counts: parallel query per referencing table.
188
+ const countEntries = await Promise.all(refColumns.map(async (col) => {
103
189
  const values = rawRows
104
190
  .map((r) => r[col.to])
105
191
  .filter((v) => v !== null && v !== undefined);
106
192
  if (!values.length)
107
- continue;
193
+ return [col.table, new Map()];
108
194
  const placeholders = values.map(() => '?').join(', ');
109
195
  const cR = await db.all(`SELECT ${(0, generator_1.quoteIdentifier)(col.from)} AS fk, COUNT(*) AS c FROM ${(0, generator_1.quoteIdentifier)(col.table)} WHERE ${(0, generator_1.quoteIdentifier)(col.from)} IN (${placeholders}) GROUP BY ${(0, generator_1.quoteIdentifier)(col.from)}`, values);
110
196
  const map = new Map();
111
197
  for (const row of (cR.data ?? []))
112
198
  map.set(String(row.fk), Number(row.c));
113
- countMap.set(col.table, map);
114
- }
115
- const rows = buildDisplayRows(rawRows, info.data).map((dr, i) => {
199
+ return [col.table, map];
200
+ }));
201
+ const countMap = new Map(countEntries);
202
+ const rows = buildDisplayRows(rawRows, info.data, table, basePath).map((dr, i) => {
116
203
  const raw = rawRows[i];
117
204
  const refs = refColumns.map((col) => {
118
205
  const v = raw[col.to];
@@ -120,8 +207,8 @@ function registerPages(router, ctx) {
120
207
  table: col.table,
121
208
  from: col.from,
122
209
  to: col.to,
123
- value: v === null || v === undefined ? '' : String(v),
124
- count: v === null || v === undefined ? 0 : (countMap.get(col.table)?.get(String(v)) ?? 0),
210
+ value: v == null ? '' : String(v),
211
+ count: v == null ? 0 : (countMap.get(col.table)?.get(String(v)) ?? 0),
125
212
  };
126
213
  });
127
214
  return { ...dr, refs };
@@ -140,7 +227,7 @@ function registerPages(router, ctx) {
140
227
  colNames: info.data.columns.map((c) => c.name),
141
228
  colHeaders,
142
229
  refColumns,
143
- hasPk: info.data.primaryKey.length > 0,
230
+ hasPk: true,
144
231
  orderBy: orderBy ?? '',
145
232
  orderDir,
146
233
  sizes,
@@ -151,8 +238,8 @@ function registerPages(router, ctx) {
151
238
  browseConfig: {
152
239
  table,
153
240
  filters,
154
- pkCols: info.data.primaryKey,
155
- hasPk: info.data.primaryKey.length > 0,
241
+ pkCols: info.data.primaryKey.length ? info.data.primaryKey : ['_rowid_'],
242
+ hasPk: true,
156
243
  readonly: db.isReadOnly,
157
244
  },
158
245
  });
@@ -165,11 +252,10 @@ function registerPages(router, ctx) {
165
252
  router.get('/tables/:table/schema', async (req, res, next) => {
166
253
  try {
167
254
  const table = req.params.table;
168
- const info = await db.getTableInfo(table);
255
+ const [info, schema] = await Promise.all([db.getTableInfo(table), db.getSchema(table)]);
169
256
  if (!info.success || !info.data || info.data.columns.length === 0) {
170
257
  return notFound(res, `Table "${table}" does not exist.`);
171
258
  }
172
- const schema = await db.getSchema(table);
173
259
  if (!schema.success || !schema.data) {
174
260
  return notFound(res, schema.error ?? 'Failed to load schema.');
175
261
  }
@@ -186,30 +272,32 @@ function registerPages(router, ctx) {
186
272
  next(err);
187
273
  }
188
274
  });
189
- // Data generator / seeder: pick per-column strategies and row count, then
190
- // insert generated rows (or preview the SQL).
275
+ // Data generator / seeder.
191
276
  router.get('/tables/:table/seed', async (req, res, next) => {
192
277
  try {
193
278
  const table = req.params.table;
194
- const info = await db.getTableInfo(table);
279
+ const [info, countRes] = await Promise.all([db.getTableInfo(table), db.getRowCount(table)]);
195
280
  if (!info.success || !info.data || info.data.columns.length === 0) {
196
281
  return notFound(res, `Table "${table}" does not exist.`);
197
282
  }
198
- const columns = (0, generator_2.buildColumnConfigs)(info.data);
283
+ const rowCount = countRes.success ? countRes.data : 0;
284
+ const columns = (0, index_1.buildColumnConfigs)(info.data);
199
285
  res.locals.currentTable = table;
200
286
  res.render('pages/seed', {
201
287
  title: `Seed data · ${table}`,
202
288
  table,
203
- maxRows: generator_2.MAX_SEED_ROWS,
204
- quickCounts: [10, 100, 1000, generator_2.MAX_SEED_ROWS],
205
- seedConfig: { table, columns, maxRows: generator_2.MAX_SEED_ROWS },
289
+ rowCount,
290
+ colCount: info.data.columns.length,
291
+ maxRows: index_1.MAX_SEED_ROWS,
292
+ quickCounts: [10, 50, 100, 500, 1000, index_1.MAX_SEED_ROWS],
293
+ seedConfig: { table, columns, rowCount, maxRows: index_1.MAX_SEED_ROWS },
206
294
  });
207
295
  }
208
296
  catch (err) {
209
297
  next(err);
210
298
  }
211
299
  });
212
- // Insert form (dynamic form is built client-side from API metadata).
300
+ // Insert form.
213
301
  router.get('/tables/:table/rows/new', async (req, res, next) => {
214
302
  try {
215
303
  const table = req.params.table;
@@ -241,23 +329,20 @@ function registerPages(router, ctx) {
241
329
  if (!info.success || !info.data || info.data.columns.length === 0) {
242
330
  return notFound(res, `Table "${table}" does not exist.`);
243
331
  }
244
- const pkColumns = info.data.primaryKey;
245
- if (!pkColumns.length) {
246
- return notFound(res, `Table "${table}" has no primary key, so rows cannot be edited from the UI.`);
247
- }
248
- const pk = (0, util_1.decodePk)(req.params.id);
332
+ const pkColumns = info.data.primaryKey.length ? info.data.primaryKey : ['_rowid_'];
333
+ const pk = (0, common_1.decodePk)(req.params.id);
249
334
  if (pk.length !== pkColumns.length) {
250
- return notFound(res, 'Invalid primary key.');
335
+ return notFound(res, 'Invalid row identifier.');
251
336
  }
252
337
  res.locals.currentTable = table;
253
338
  res.render('pages/form', {
254
339
  title: `Edit row · ${table}`,
255
340
  table,
256
341
  mode: 'edit',
257
- pk,
342
+ pk: req.params.id,
258
343
  pkColumns,
259
- infoSummary: `${info.data.columns.length} column(s) · PK: ${pkColumns.join(', ')}`,
260
- config: { table, mode: 'edit', pk, pkColumns },
344
+ infoSummary: `${info.data.columns.length} column(s)` + (info.data.primaryKey.length ? ` · PK: ${info.data.primaryKey.join(', ')}` : ''),
345
+ config: { table, mode: 'edit', pk: req.params.id, pkColumns },
261
346
  });
262
347
  }
263
348
  catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"pages.js","sourceRoot":"","sources":["../../src/routes/pages.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pages.js","sourceRoot":"","sources":["../../src/routes/pages.ts"],"names":[],"mappings":";;AAgHA,sCA2TC;AAxaD,yCAA+C;AAC/C,gDAAmD;AACnD,4CAA4G;AAC5G,gDAAgE;AAChE,yCAAkE;AA8BlE,SAAS,gBAAgB,CAAC,OAAkC,EAAE,IAAmB,EAAE,KAAc,EAAE,QAAQ,GAAG,EAAE;IAC9G,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACtE,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QACzB,MAAM,SAAS,GAAG,IAAA,iBAAQ,EAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtD,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBAC5B,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBACxB,MAAM,CAAC,GAAG,IAAA,sBAAa,EAAC,GAAG,CAAC,CAAC;gBAC7B,MAAM,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC;gBACzB,MAAM,SAAS,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;gBAC/C,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,YAAY,UAAU,IAAI,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1N,IAAI,MAAM,GAAG,KAAK,CAAC;gBACnB,IAAI,OAAO,GAAG,KAAK,CAAC;gBACpB,IAAI,KAAK,GAAG,KAAK,CAAC;gBAClB,IAAI,OAAO,GAAG,KAAK,CAAC;gBACpB,IAAI,QAAQ,GAAG,EAAE,CAAC;gBAClB,IAAI,QAAQ,GAAG,EAAE,CAAC;gBAClB,IAAI,OAAO,GAAG,EAAE,CAAC;gBACjB,IAAI,OAAO,GAAG,EAAE,CAAC;gBAEjB,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;oBACtB,IAAI,MAAM,EAAE,CAAC;wBACX,IAAI,GAAW,CAAC;wBAChB,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,YAAY,UAAU,EAAE,CAAC;4BACtD,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;wBACtD,CAAC;6BAAM,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;4BAC7D,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;wBACvC,CAAC;6BAAM,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;4BAC9D,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;wBACvC,CAAC;6BAAM,CAAC;4BACN,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;wBACjC,CAAC;wBACD,MAAM,QAAQ,GAAG,IAAA,wBAAa,EAAC,GAAG,CAAC,CAAC;wBACpC,QAAQ,GAAG,IAAA,oBAAW,EAAC,GAAG,CAAC,MAAM,CAAC,CAAC;wBACnC,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC;wBACzB,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC;wBACvB,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;wBAC3B,IAAI,KAAK,IAAI,SAAS,EAAE,CAAC;4BACvB,OAAO,GAAG,GAAG,QAAQ,eAAe,kBAAkB,CAAC,KAAK,CAAC,QAAQ,kBAAkB,CAAC,SAAS,CAAC,SAAS,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;wBAC1I,CAAC;oBACH,CAAC;yBAAM,IAAI,IAAA,uBAAY,EAAC,CAAC,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;wBACzD,MAAM,GAAG,IAAA,uBAAY,EAAC,CAAC,CAAC,CAAC;oBAC3B,CAAC;yBAAM,CAAC;wBACN,IAAI,gCAAgC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;4BAC/C,KAAK,GAAG,IAAI,CAAC;wBACf,CAAC;6BAAM,IAAI,gEAAgE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;4BACtF,OAAO,GAAG,IAAI,CAAC;wBACjB,CAAC;oBACH,CAAC;gBACH,CAAC;gBAGD,OAAO;oBACL,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,KAAK,EAAE,CAAC;oBACR,MAAM;oBACN,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;oBAChC,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,MAAM;oBACN,MAAM;oBACN,OAAO;oBACP,KAAK;oBACL,OAAO;oBACP,QAAQ;oBACR,QAAQ;oBACR,OAAO;oBACP,OAAO;iBACR,CAAC;YACJ,CAAC,CAAC;YACF,SAAS;SACV,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,aAAa,CAAC,MAAc,EAAE,GAAgB;IAC5D,MAAM,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC;IAEnB,MAAM,QAAQ,GAAG,CAAC,GAAa,EAAE,OAAe,EAAQ,EAAE;QACxD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IAC7F,CAAC,CAAC;IAEF,0BAA0B;IAC1B,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,IAAa,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;QACzE,IAAI,CAAC;YACH,MAAM,KAAK,GAAc,GAAG,CAAC,MAAM,CAAC,MAAmB,IAAI,EAAE,CAAC;YAC9D,MAAM,aAAa,GAAc,GAAG,CAAC,MAAM,CAAC,cAA2B,IAAI,EAAE,CAAC;YAE9E,IAAI,YAAY,GAA2B,EAAE,CAAC;YAC9C,IAAI,EAAE,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;gBAC9B,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG,CACzB,6HAA6H,CAC9H,CAAC;gBACF,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;oBAClC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAiC,EAAE,CAAC;wBAC3D,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;4BAC9C,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;wBACvD,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YAGD,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBACvC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;oBACnC,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;oBAC1C,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,SAAS;wBAC3C,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC;wBACpB,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC;oBAC5D,OAAO;wBACL,IAAI;wBACJ,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAE,MAAM,CAAC,IAAe,CAAC,CAAC,CAAC,CAAC;wBACnD,IAAI;qBACL,CAAC;gBACJ,CAAC,CAAC,CAAC;gBACH,EAAE,CAAC,gBAAgB,EAAE;aACtB,CAAC,CAAC;YAEH,MAAM,MAAM,GAA2B,EAAE,CAAC;YAC1C,MAAM,IAAI,GAA2B,EAAE,CAAC;YACxC,IAAI,SAAS,GAAG,CAAC,CAAC;YAClB,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;gBACtB,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;gBACzB,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBACtB,SAAS,IAAI,CAAC,CAAC,KAAK,CAAC;YACvB,CAAC;YAED,GAAG,CAAC,MAAM,CAAC,YAAY,EAAE;gBACvB,KAAK,EAAE,MAAM;gBACb,MAAM,EAAE,KAAK;gBACb,MAAM;gBACN,IAAI;gBACJ,SAAS;gBACT,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC3D,aAAa,EAAE,aAAa,CAAC,MAAM;gBACnC,MAAM,EAAE,EAAE,CAAC,IAAI;aAChB,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,CAAC;QACZ,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,yBAAyB;IAEzB,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;QACrF,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;YAC/B,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YAC1C,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAClE,OAAO,QAAQ,CAAC,GAAG,EAAE,UAAU,KAAK,mBAAmB,CAAC,CAAC;YAC3D,CAAC;YAED,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;YAClF,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;YACxF,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC1E,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;YAC/F,MAAM,OAAO,GAAG,IAAA,qBAAY,EAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC1C,MAAM,QAAQ,GAAG,IAAA,oBAAW,EAAC,OAAO,CAAC,CAAC;YAEtC,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBAC/C,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC;gBAC9B,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;gBACxE,EAAE,CAAC,oBAAoB,CAAC,KAAK,CAAC;aAC/B,CAAC,CAAC;YAEH,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAE,MAAM,CAAC,IAAe,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3D,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAA8B,CAAC;YAChE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC;YACvD,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;YACnD,MAAM,KAAK,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YAEjC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBAC7C,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC;gBAClC,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;gBACvE,MAAM,EAAE,GAAG,eAAe,QAAQ,YAAY,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,OAAO,EAAE,CAAC;gBAC/F,OAAO;oBACL,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,EAAE,EAAE,CAAC,CAAC,EAAE;oBACR,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,MAAM;oBACN,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI;oBAC7B,IAAI,EAAE,GAAG,QAAQ,WAAW,kBAAkB,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE;iBAC/F,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,MAAM,UAAU,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;iBAClC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;iBACvC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;gBACV,MAAM,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACvB,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC;YACvE,CAAC,CAAC,CAAC;YAEL,kEAAkE;YAClE,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,GAAG,CACpC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;gBAC3B,MAAM,MAAM,GAAG,OAAO;qBACnB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;qBACrB,MAAM,CAAC,CAAC,CAAC,EAAwB,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,CAAC,CAAC;gBACtE,IAAI,CAAC,MAAM,CAAC,MAAM;oBAAE,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,EAAkB,CAAU,CAAC;gBAC3E,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACtD,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,GAAG,CACrB,UAAU,IAAA,2BAAe,EAAC,GAAG,CAAC,IAAI,CAAC,8BAA8B,IAAA,2BAAe,EAAC,GAAG,CAAC,KAAK,CAAC,UAAU,IAAA,2BAAe,EAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,YAAY,cAAc,IAAA,2BAAe,EAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAC3L,MAAM,CACP,CAAC;gBACF,MAAM,GAAG,GAAG,IAAI,GAAG,EAAkB,CAAC;gBACtC,KAAK,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,CAA8B;oBAAE,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACvG,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAU,CAAC;YACnC,CAAC,CAAC,CACH,CAAC;YACF,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC;YAEvC,MAAM,IAAI,GAAG,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;gBAC/E,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBACvB,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;oBAClC,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBACtB,OAAO;wBACL,KAAK,EAAE,GAAG,CAAC,KAAK;wBAChB,IAAI,EAAE,GAAG,CAAC,IAAI;wBACd,EAAE,EAAE,GAAG,CAAC,EAAE;wBACV,KAAK,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;wBACjC,KAAK,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;qBACtE,CAAC;gBACJ,CAAC,CAAC,CAAC;gBACH,OAAO,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC;YACzB,CAAC,CAAC,CAAC;YAEH,GAAG,CAAC,MAAM,CAAC,YAAY,GAAG,KAAK,CAAC;YAChC,GAAG,CAAC,MAAM,CAAC,aAAa,EAAE;gBACxB,KAAK,EAAE,KAAK;gBACZ,KAAK;gBACL,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,IAAI;gBACJ,KAAK;gBACL,IAAI;gBACJ,QAAQ;gBACR,KAAK;gBACL,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU;gBAC5B,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;gBAC9C,UAAU;gBACV,UAAU;gBACV,KAAK,EAAE,IAAI;gBACX,OAAO,EAAE,OAAO,IAAI,EAAE;gBACtB,QAAQ;gBACR,KAAK;gBACL,OAAO;gBACP,QAAQ;gBACR,QAAQ,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,QAAQ,GAAG,CAAC;gBACrD,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,QAAQ,EAAE,KAAK,CAAC;gBACzC,YAAY,EAAE;oBACZ,KAAK;oBACL,OAAO;oBACP,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;oBACxE,KAAK,EAAE,IAAI;oBACX,QAAQ,EAAE,EAAE,CAAC,UAAU;iBACxB;aACF,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,CAAC;QACZ,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,uBAAuB;IACvB,MAAM,CAAC,GAAG,CAAC,uBAAuB,EAAE,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;QAC5F,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;YAC/B,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACxF,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAClE,OAAO,QAAQ,CAAC,GAAG,EAAE,UAAU,KAAK,mBAAmB,CAAC,CAAC;YAC3D,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;gBACpC,OAAO,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,IAAI,wBAAwB,CAAC,CAAC;YACjE,CAAC;YACD,GAAG,CAAC,MAAM,CAAC,YAAY,GAAG,KAAK,CAAC;YAChC,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE;gBACzB,KAAK,EAAE,YAAY,KAAK,EAAE;gBAC1B,KAAK;gBACL,MAAM,EAAE,MAAM,CAAC,IAAI;gBACnB,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;gBACjC,MAAM,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;aACrD,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,CAAC;QACZ,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,2BAA2B;IAC3B,MAAM,CAAC,GAAG,CAAC,qBAAqB,EAAE,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;QAC1F,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;YAC/B,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC5F,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAClE,OAAO,QAAQ,CAAC,GAAG,EAAE,UAAU,KAAK,mBAAmB,CAAC,CAAC;YAC3D,CAAC;YACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACtD,MAAM,OAAO,GAAG,IAAA,0BAAkB,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9C,GAAG,CAAC,MAAM,CAAC,YAAY,GAAG,KAAK,CAAC;YAChC,GAAG,CAAC,MAAM,CAAC,YAAY,EAAE;gBACvB,KAAK,EAAE,eAAe,KAAK,EAAE;gBAC7B,KAAK;gBACL,QAAQ;gBACR,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM;gBAClC,OAAO,EAAE,qBAAa;gBACtB,WAAW,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,qBAAa,CAAC;gBACpD,UAAU,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,qBAAa,EAAE;aACjE,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,CAAC;QACZ,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,eAAe;IACf,MAAM,CAAC,GAAG,CAAC,yBAAyB,EAAE,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;QAC9F,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;YAC/B,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YAC1C,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAClE,OAAO,QAAQ,CAAC,GAAG,EAAE,UAAU,KAAK,mBAAmB,CAAC,CAAC;YAC3D,CAAC;YACD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;YACvC,GAAG,CAAC,MAAM,CAAC,YAAY,GAAG,KAAK,CAAC;YAChC,GAAG,CAAC,MAAM,CAAC,YAAY,EAAE;gBACvB,KAAK,EAAE,aAAa,KAAK,EAAE;gBAC3B,KAAK;gBACL,IAAI,EAAE,QAAQ;gBACd,EAAE,EAAE,IAAI;gBACR,SAAS;gBACT,WAAW,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,YAAY,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjH,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;aACvD,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,CAAC;QACZ,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,aAAa;IACb,MAAM,CAAC,GAAG,CAAC,8BAA8B,EAAE,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;QACnG,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;YAC/B,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YAC1C,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAClE,OAAO,QAAQ,CAAC,GAAG,EAAE,UAAU,KAAK,mBAAmB,CAAC,CAAC;YAC3D,CAAC;YACD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YACnF,MAAM,EAAE,GAAG,IAAA,iBAAQ,EAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACnC,IAAI,EAAE,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM,EAAE,CAAC;gBACnC,OAAO,QAAQ,CAAC,GAAG,EAAE,yBAAyB,CAAC,CAAC;YAClD,CAAC;YACD,GAAG,CAAC,MAAM,CAAC,YAAY,GAAG,KAAK,CAAC;YAChC,GAAG,CAAC,MAAM,CAAC,YAAY,EAAE;gBACvB,KAAK,EAAE,cAAc,KAAK,EAAE;gBAC5B,KAAK;gBACL,IAAI,EAAE,MAAM;gBACZ,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE;gBACjB,SAAS;gBACT,WAAW,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACvI,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE;aAC9D,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,CAAC;QACZ,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,kBAAkB;IAClB,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,IAAa,EAAE,GAAa,EAAE,EAAE;QACvD,GAAG,CAAC,MAAM,CAAC,gBAAgB,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,gBAAgB;IAChB,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAa,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;QAC9E,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,gBAAgB,EAAE,CAAC;YAC5C,GAAG,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC1G,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,CAAC;QACZ,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,iCAAiC;IACjC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,EAAE,IAAa,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;QAC/E,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,IAAA,wBAAe,EAAC,EAAE,CAAC,CAAC;YACvC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,0BAA0B,CAAC,CAAC;YAC3F,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAC7D,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,gCAAgC,CAAC,CAAC;YAChE,GAAG,CAAC,SAAS,CAAC,qBAAqB,EAAE,iCAAiC,KAAK,OAAO,CAAC,CAAC;YACpF,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,CAAC;QACZ,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,40 @@
1
+ import { IncomingMessage, ServerResponse } from 'node:http';
2
+ import { type AppOptions } from './app';
3
+ /**
4
+ * Detects if the current process is running in a serverless environment
5
+ * (e.g. Vercel, AWS Lambda, Netlify Functions, Google Cloud Functions/Run, Azure Functions, Cloudflare Pages).
6
+ */
7
+ export declare function isServerlessEnvironment(env?: NodeJS.ProcessEnv): boolean;
8
+ /**
9
+ * Creates an HTTP request listener for standard Node.js serverless runtimes
10
+ * (Vercel API routes, Next.js custom route handlers, Google Cloud Functions, Azure Functions, Micro).
11
+ *
12
+ * In serverless mode, all write operations and database mutations are strictly disabled.
13
+ *
14
+ * Example (Vercel `api/index.ts`):
15
+ * ```ts
16
+ * import { createServerlessHandler } from 'admindb';
17
+ * export default createServerlessHandler({ dbPath: './data.db' });
18
+ * ```
19
+ */
20
+ export declare function createServerlessHandler(options?: AppOptions): (req: IncomingMessage, res: ServerResponse) => void;
21
+ export interface LambdaProxyResult {
22
+ statusCode: number;
23
+ headers: Record<string, string>;
24
+ multiValueHeaders?: Record<string, string[]>;
25
+ body: string;
26
+ isBase64Encoded: boolean;
27
+ }
28
+ /**
29
+ * Creates an AWS Lambda handler for API Gateway (REST v1 and HTTP v2 payloads).
30
+ *
31
+ * In serverless mode, SQLite databases are read-only, while remote PostgreSQL
32
+ * connections are editable unless configured otherwise.
33
+ *
34
+ * Example (AWS Lambda `index.ts`):
35
+ * ```ts
36
+ * import { createLambdaHandler } from 'admindb';
37
+ * export const handler = createLambdaHandler({ dbPath: './data.db' });
38
+ * ```
39
+ */
40
+ export declare function createLambdaHandler(options?: AppOptions): (event: any, _context?: any) => Promise<LambdaProxyResult>;
@@ -0,0 +1,210 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isServerlessEnvironment = isServerlessEnvironment;
4
+ exports.createServerlessHandler = createServerlessHandler;
5
+ exports.createLambdaHandler = createLambdaHandler;
6
+ const node_http_1 = require("node:http");
7
+ const node_net_1 = require("node:net");
8
+ const app_1 = require("./app");
9
+ /**
10
+ * Detects if the current process is running in a serverless environment
11
+ * (e.g. Vercel, AWS Lambda, Netlify Functions, Google Cloud Functions/Run, Azure Functions, Cloudflare Pages).
12
+ */
13
+ function isServerlessEnvironment(env = process.env) {
14
+ // Explicit serverless flags
15
+ if (['1', 'true', 'yes', 'on'].includes(String(env.ADMINDB_SERVERLESS ?? env.SERVERLESS ?? env.IS_SERVERLESS ?? '').trim().toLowerCase())) {
16
+ return true;
17
+ }
18
+ // Vercel Serverless Functions
19
+ if (Boolean(env.VERCEL || env.VERCEL_ENV || env.NOW_REGION)) {
20
+ return true;
21
+ }
22
+ // AWS Lambda
23
+ if (Boolean(env.AWS_LAMBDA_FUNCTION_NAME || env.LAMBDA_TASK_ROOT || env.AWS_EXECUTION_ENV)) {
24
+ return true;
25
+ }
26
+ // Netlify Functions
27
+ if (Boolean(env.NETLIFY || env.NETLIFY_LOCAL)) {
28
+ return true;
29
+ }
30
+ // Google Cloud Functions / Cloud Run
31
+ if (Boolean(env.FUNCTION_TARGET || env.FUNCTION_NAME || env.K_SERVICE)) {
32
+ return true;
33
+ }
34
+ // Azure Functions
35
+ if (Boolean(env.FUNCTIONS_WORKER_RUNTIME || env.WEBSITE_INSTANCE_ID)) {
36
+ return true;
37
+ }
38
+ // Cloudflare Pages
39
+ if (Boolean(env.CF_PAGES)) {
40
+ return true;
41
+ }
42
+ return false;
43
+ }
44
+ /**
45
+ * Creates an HTTP request listener for standard Node.js serverless runtimes
46
+ * (Vercel API routes, Next.js custom route handlers, Google Cloud Functions, Azure Functions, Micro).
47
+ *
48
+ * In serverless mode, all write operations and database mutations are strictly disabled.
49
+ *
50
+ * Example (Vercel `api/index.ts`):
51
+ * ```ts
52
+ * import { createServerlessHandler } from 'admindb';
53
+ * export default createServerlessHandler({ dbPath: './data.db' });
54
+ * ```
55
+ */
56
+ function createServerlessHandler(options = {}) {
57
+ const rawTarget = options.connection || options.dbPath || '';
58
+ const isPg = Boolean(options.pgOptions) ||
59
+ (typeof rawTarget === 'string' && (rawTarget.startsWith('postgres://') || rawTarget.startsWith('postgresql://'))) ||
60
+ options.db?.dialect === 'postgres';
61
+ const defaultReadonly = isPg ? false : true;
62
+ const app = (0, app_1.createRouter)({
63
+ ...options,
64
+ serverless: options.serverless ?? true,
65
+ readonly: options.readonly ?? defaultReadonly,
66
+ });
67
+ return (req, res) => {
68
+ app(req, res);
69
+ };
70
+ }
71
+ /**
72
+ * Creates an AWS Lambda handler for API Gateway (REST v1 and HTTP v2 payloads).
73
+ *
74
+ * In serverless mode, SQLite databases are read-only, while remote PostgreSQL
75
+ * connections are editable unless configured otherwise.
76
+ *
77
+ * Example (AWS Lambda `index.ts`):
78
+ * ```ts
79
+ * import { createLambdaHandler } from 'admindb';
80
+ * export const handler = createLambdaHandler({ dbPath: './data.db' });
81
+ * ```
82
+ */
83
+ function createLambdaHandler(options = {}) {
84
+ const rawTarget = options.connection || options.dbPath || '';
85
+ const isPg = Boolean(options.pgOptions) ||
86
+ (typeof rawTarget === 'string' && (rawTarget.startsWith('postgres://') || rawTarget.startsWith('postgresql://'))) ||
87
+ options.db?.dialect === 'postgres';
88
+ const defaultReadonly = isPg ? false : true;
89
+ const app = (0, app_1.createRouter)({
90
+ ...options,
91
+ serverless: options.serverless ?? true,
92
+ readonly: options.readonly ?? defaultReadonly,
93
+ });
94
+ return async (event, _context) => {
95
+ return new Promise((resolve) => {
96
+ try {
97
+ const isV2 = Boolean(event.version === '2.0' || event.rawPath);
98
+ const method = (isV2
99
+ ? event.requestContext?.http?.method
100
+ : event.httpMethod) || 'GET';
101
+ const rawPath = isV2 ? (event.rawPath || '/') : (event.path || '/');
102
+ const qs = isV2
103
+ ? (event.rawQueryString || '')
104
+ : (event.queryStringParameters
105
+ ? Object.entries(event.queryStringParameters)
106
+ .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(String(v))}`)
107
+ .join('&')
108
+ : '');
109
+ const url = qs ? `${rawPath}?${qs}` : rawPath;
110
+ const rawHeaders = event.headers || {};
111
+ const headers = {};
112
+ for (const [k, v] of Object.entries(rawHeaders)) {
113
+ if (v !== undefined && v !== null) {
114
+ headers[k.toLowerCase()] = String(v);
115
+ }
116
+ }
117
+ if (event.cookies && Array.isArray(event.cookies) && !headers['cookie']) {
118
+ headers['cookie'] = event.cookies.join('; ');
119
+ }
120
+ // Prepare request body
121
+ let bodyBuffer = null;
122
+ if (event.body) {
123
+ if (event.isBase64Encoded) {
124
+ bodyBuffer = Buffer.from(event.body, 'base64');
125
+ }
126
+ else {
127
+ bodyBuffer = Buffer.from(event.body, 'utf8');
128
+ }
129
+ if (!headers['content-length']) {
130
+ headers['content-length'] = String(bodyBuffer.length);
131
+ }
132
+ }
133
+ const socket = new node_net_1.Socket();
134
+ const req = new node_http_1.IncomingMessage(socket);
135
+ req.url = url;
136
+ req.method = method;
137
+ req.headers = headers;
138
+ req.httpVersion = '1.1';
139
+ req.httpVersionMajor = 1;
140
+ req.httpVersionMinor = 1;
141
+ if (bodyBuffer) {
142
+ req.push(bodyBuffer);
143
+ }
144
+ req.push(null);
145
+ const res = new node_http_1.ServerResponse(req);
146
+ const chunks = [];
147
+ res.write = function (chunk, ...args) {
148
+ if (chunk) {
149
+ chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
150
+ }
151
+ const cb = typeof args[0] === 'function' ? args[0] : typeof args[1] === 'function' ? args[1] : undefined;
152
+ if (cb)
153
+ cb();
154
+ return true;
155
+ };
156
+ res.end = function (chunk, ...args) {
157
+ if (chunk && typeof chunk !== 'function') {
158
+ chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
159
+ }
160
+ const cb = typeof chunk === 'function'
161
+ ? chunk
162
+ : typeof args[0] === 'function'
163
+ ? args[0]
164
+ : typeof args[1] === 'function'
165
+ ? args[1]
166
+ : undefined;
167
+ if (cb)
168
+ cb();
169
+ const responseHeaders = {};
170
+ const multiValueHeaders = {};
171
+ const resHeaders = res.getHeaders();
172
+ for (const [k, v] of Object.entries(resHeaders)) {
173
+ if (Array.isArray(v)) {
174
+ multiValueHeaders[k] = v.map(String);
175
+ responseHeaders[k] = v.map(String).join(', ');
176
+ }
177
+ else if (v !== undefined) {
178
+ responseHeaders[k] = String(v);
179
+ }
180
+ }
181
+ const fullBody = Buffer.concat(chunks);
182
+ const contentType = String(responseHeaders['content-type'] || '');
183
+ const isBinary = !contentType.startsWith('text/') &&
184
+ !contentType.includes('application/json') &&
185
+ !contentType.includes('application/javascript') &&
186
+ !contentType.includes('application/xml') &&
187
+ !contentType.includes('image/svg+xml');
188
+ resolve({
189
+ statusCode: res.statusCode || 200,
190
+ headers: responseHeaders,
191
+ multiValueHeaders: Object.keys(multiValueHeaders).length > 0 ? multiValueHeaders : undefined,
192
+ body: isBinary ? fullBody.toString('base64') : fullBody.toString('utf8'),
193
+ isBase64Encoded: isBinary,
194
+ });
195
+ return res;
196
+ };
197
+ app(req, res);
198
+ }
199
+ catch (err) {
200
+ resolve({
201
+ statusCode: 500,
202
+ headers: { 'content-type': 'application/json' },
203
+ body: JSON.stringify({ success: false, error: err?.message || 'Server error' }),
204
+ isBase64Encoded: false,
205
+ });
206
+ }
207
+ });
208
+ };
209
+ }
210
+ //# sourceMappingURL=serverless.js.map