admindb 1.2.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (202) hide show
  1. package/README.md +250 -352
  2. package/dist/app.d.ts +25 -4
  3. package/dist/app.js +79 -15
  4. package/dist/app.js.map +1 -1
  5. package/dist/auth/config.d.ts +19 -0
  6. package/dist/auth/config.js +147 -0
  7. package/dist/auth/config.js.map +1 -0
  8. package/dist/auth/crypto.d.ts +27 -0
  9. package/dist/auth/crypto.js +133 -0
  10. package/dist/auth/crypto.js.map +1 -0
  11. package/dist/auth/index.d.ts +5 -0
  12. package/dist/auth/index.js +22 -0
  13. package/dist/auth/index.js.map +1 -0
  14. package/dist/auth/middleware.d.ts +14 -0
  15. package/dist/auth/middleware.js +100 -0
  16. package/dist/auth/middleware.js.map +1 -0
  17. package/dist/auth/routes.d.ts +7 -0
  18. package/dist/auth/routes.js +78 -0
  19. package/dist/auth/routes.js.map +1 -0
  20. package/dist/auth/types.d.ts +35 -0
  21. package/dist/auth/types.js +11 -0
  22. package/dist/auth/types.js.map +1 -0
  23. package/dist/cli/args.d.ts +45 -0
  24. package/dist/cli/args.js +328 -0
  25. package/dist/cli/args.js.map +1 -0
  26. package/dist/cli/config.d.ts +56 -0
  27. package/dist/cli/config.js +133 -0
  28. package/dist/cli/config.js.map +1 -0
  29. package/dist/cli/index.d.ts +4 -0
  30. package/dist/cli/index.js +21 -0
  31. package/dist/cli/index.js.map +1 -0
  32. package/dist/cli/runner.d.ts +1 -0
  33. package/dist/cli/runner.js +222 -0
  34. package/dist/cli/runner.js.map +1 -0
  35. package/dist/cli.js +2 -127
  36. package/dist/cli.js.map +1 -1
  37. package/dist/data/datasets.d.ts +17 -0
  38. package/dist/data/datasets.js +133 -0
  39. package/dist/data/datasets.js.map +1 -0
  40. package/dist/data/detector.d.ts +30 -0
  41. package/dist/data/detector.js +472 -0
  42. package/dist/data/detector.js.map +1 -0
  43. package/dist/data/engine.d.ts +10 -0
  44. package/dist/data/engine.js +211 -0
  45. package/dist/data/engine.js.map +1 -0
  46. package/dist/data/index.d.ts +5 -0
  47. package/dist/data/index.js +22 -0
  48. package/dist/data/index.js.map +1 -0
  49. package/dist/data/strategies.d.ts +30 -0
  50. package/dist/data/strategies.js +343 -0
  51. package/dist/data/strategies.js.map +1 -0
  52. package/dist/data/types.d.ts +73 -0
  53. package/dist/data/types.js +8 -0
  54. package/dist/data/types.js.map +1 -0
  55. package/dist/db/database.d.ts +14 -142
  56. package/dist/db/database.js +209 -435
  57. package/dist/db/database.js.map +1 -1
  58. package/dist/db/export.d.ts +2 -2
  59. package/dist/db/export.js +7 -2
  60. package/dist/db/export.js.map +1 -1
  61. package/dist/db/filters.d.ts +22 -0
  62. package/dist/db/filters.js +158 -0
  63. package/dist/db/filters.js.map +1 -0
  64. package/dist/db/index.d.ts +8 -0
  65. package/dist/db/index.js +25 -0
  66. package/dist/db/index.js.map +1 -0
  67. package/dist/db/introspection.d.ts +6 -0
  68. package/dist/db/introspection.js +172 -0
  69. package/dist/db/introspection.js.map +1 -0
  70. package/dist/db/manager.d.ts +32 -19
  71. package/dist/db/manager.js +203 -44
  72. package/dist/db/manager.js.map +1 -1
  73. package/dist/db/migrations.d.ts +5 -0
  74. package/dist/db/migrations.js +110 -0
  75. package/dist/db/migrations.js.map +1 -0
  76. package/dist/db/postgres.d.ts +85 -0
  77. package/dist/db/postgres.js +745 -0
  78. package/dist/db/postgres.js.map +1 -0
  79. package/dist/db/types.d.ts +206 -0
  80. package/dist/db/types.js +7 -0
  81. package/dist/db/types.js.map +1 -0
  82. package/dist/index.d.ts +9 -2
  83. package/dist/index.js +46 -4
  84. package/dist/index.js.map +1 -1
  85. package/dist/public/css/app.css +1 -1
  86. package/dist/public/css/input.css +83 -13
  87. package/dist/public/js/app.js +142 -0
  88. package/dist/public/js/browse.js +591 -104
  89. package/dist/public/js/databases.js +105 -13
  90. package/dist/public/js/designer.js +40 -2
  91. package/dist/public/js/forms.js +610 -28
  92. package/dist/public/js/icons.js +51 -0
  93. package/dist/public/js/inspector.js +638 -0
  94. package/dist/public/js/query.js +93 -3
  95. package/dist/public/js/schema.js +170 -52
  96. package/dist/public/js/seed.js +1090 -0
  97. package/dist/routes/api/helpers.d.ts +42 -0
  98. package/dist/routes/api/helpers.js +133 -0
  99. package/dist/routes/api/helpers.js.map +1 -0
  100. package/dist/routes/api/import-export.d.ts +3 -0
  101. package/dist/routes/api/import-export.js +85 -0
  102. package/dist/routes/api/import-export.js.map +1 -0
  103. package/dist/routes/api/index.d.ts +4 -0
  104. package/dist/routes/api/index.js +37 -0
  105. package/dist/routes/api/index.js.map +1 -0
  106. package/dist/routes/api/query.d.ts +3 -0
  107. package/dist/routes/api/query.js +76 -0
  108. package/dist/routes/api/query.js.map +1 -0
  109. package/dist/routes/api/rows.d.ts +3 -0
  110. package/dist/routes/api/rows.js +373 -0
  111. package/dist/routes/api/rows.js.map +1 -0
  112. package/dist/routes/api/seed.d.ts +3 -0
  113. package/dist/routes/api/seed.js +82 -0
  114. package/dist/routes/api/seed.js.map +1 -0
  115. package/dist/routes/api/tables.d.ts +3 -0
  116. package/dist/routes/api/tables.js +160 -0
  117. package/dist/routes/api/tables.js.map +1 -0
  118. package/dist/routes/databases.d.ts +8 -11
  119. package/dist/routes/databases.js +100 -66
  120. package/dist/routes/databases.js.map +1 -1
  121. package/dist/routes/index.d.ts +3 -0
  122. package/dist/routes/index.js +20 -0
  123. package/dist/routes/index.js.map +1 -0
  124. package/dist/routes/pages.d.ts +3 -3
  125. package/dist/routes/pages.js +163 -54
  126. package/dist/routes/pages.js.map +1 -1
  127. package/dist/serverless.d.ts +40 -0
  128. package/dist/serverless.js +210 -0
  129. package/dist/serverless.js.map +1 -0
  130. package/dist/sql/generator.d.ts +4 -3
  131. package/dist/sql/generator.js +103 -6
  132. package/dist/sql/generator.js.map +1 -1
  133. package/dist/sql/index.d.ts +2 -0
  134. package/dist/sql/index.js +19 -0
  135. package/dist/sql/index.js.map +1 -0
  136. package/dist/types/api.d.ts +412 -0
  137. package/dist/types/api.js +9 -0
  138. package/dist/types/api.js.map +1 -0
  139. package/dist/utils/colors.d.ts +40 -0
  140. package/dist/utils/colors.js +64 -0
  141. package/dist/utils/colors.js.map +1 -0
  142. package/dist/{util.d.ts → utils/common.d.ts} +10 -6
  143. package/dist/{util.js → utils/common.js} +80 -13
  144. package/dist/utils/common.js.map +1 -0
  145. package/dist/utils/csv.js.map +1 -0
  146. package/dist/utils/datatype.d.ts +49 -0
  147. package/dist/utils/datatype.js +222 -0
  148. package/dist/utils/datatype.js.map +1 -0
  149. package/dist/utils/icons.d.ts +11 -0
  150. package/dist/utils/icons.js +72 -0
  151. package/dist/utils/icons.js.map +1 -0
  152. package/dist/utils/index.d.ts +4 -0
  153. package/dist/utils/index.js +21 -0
  154. package/dist/utils/index.js.map +1 -0
  155. package/dist/{logger.d.ts → utils/logger.d.ts} +1 -1
  156. package/dist/utils/logger.js +40 -0
  157. package/dist/utils/logger.js.map +1 -0
  158. package/dist/views/layouts/main.hbs +33 -11
  159. package/dist/views/pages/databases.hbs +182 -74
  160. package/dist/views/pages/designer.hbs +9 -6
  161. package/dist/views/pages/error.hbs +3 -3
  162. package/dist/views/pages/form.hbs +5 -3
  163. package/dist/views/pages/home.hbs +22 -13
  164. package/dist/views/pages/login.hbs +111 -0
  165. package/dist/views/pages/query.hbs +10 -8
  166. package/dist/views/pages/schema.hbs +41 -13
  167. package/dist/views/pages/seed.hbs +232 -0
  168. package/dist/views/pages/table.hbs +155 -70
  169. package/dist/views/partials/icon.hbs +2 -0
  170. package/dist/views/partials/navbar.hbs +70 -31
  171. package/dist/views/partials/sidebar.hbs +108 -99
  172. package/package.json +12 -5
  173. package/dist/args.d.ts +0 -28
  174. package/dist/args.js +0 -187
  175. package/dist/args.js.map +0 -1
  176. package/dist/config.d.ts +0 -17
  177. package/dist/config.js +0 -23
  178. package/dist/config.js.map +0 -1
  179. package/dist/csv.js.map +0 -1
  180. package/dist/logger.js +0 -25
  181. package/dist/logger.js.map +0 -1
  182. package/dist/routes/api.d.ts +0 -9
  183. package/dist/routes/api.js +0 -786
  184. package/dist/routes/api.js.map +0 -1
  185. package/dist/test/classifier.test.d.ts +0 -1
  186. package/dist/test/classifier.test.js +0 -44
  187. package/dist/test/classifier.test.js.map +0 -1
  188. package/dist/test/csv.test.d.ts +0 -1
  189. package/dist/test/csv.test.js +0 -64
  190. package/dist/test/csv.test.js.map +0 -1
  191. package/dist/test/database.test.d.ts +0 -1
  192. package/dist/test/database.test.js +0 -402
  193. package/dist/test/database.test.js.map +0 -1
  194. package/dist/test/generator.test.d.ts +0 -1
  195. package/dist/test/generator.test.js +0 -132
  196. package/dist/test/generator.test.js.map +0 -1
  197. package/dist/test/manager.test.d.ts +0 -1
  198. package/dist/test/manager.test.js +0 -146
  199. package/dist/test/manager.test.js.map +0 -1
  200. package/dist/util.js.map +0 -1
  201. /package/dist/{csv.d.ts → utils/csv.d.ts} +0 -0
  202. /package/dist/{csv.js → utils/csv.js} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/routes/api.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,44 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const node_test_1 = require("node:test");
7
- const strict_1 = __importDefault(require("node:assert/strict"));
8
- const classifier_1 = require("../sql/classifier");
9
- (0, node_test_1.test)('classifies SELECT statements as select', () => {
10
- strict_1.default.equal((0, classifier_1.classifySql)('SELECT * FROM users').kind, 'select');
11
- strict_1.default.equal((0, classifier_1.classifySql)(' select id, name from users;').kind, 'select');
12
- strict_1.default.equal((0, classifier_1.classifySql)('WITH c AS (SELECT 1) SELECT * FROM c').kind, 'select');
13
- });
14
- (0, node_test_1.test)('classifies pure count queries as count', () => {
15
- strict_1.default.equal((0, classifier_1.classifySql)('SELECT count(*) FROM users').kind, 'count');
16
- strict_1.default.equal((0, classifier_1.classifySql)('select COUNT(id) from orders').kind, 'count');
17
- });
18
- (0, node_test_1.test)('does not classify grouped or unioned selects as count', () => {
19
- strict_1.default.equal((0, classifier_1.classifySql)('SELECT type, count(*) FROM items GROUP BY type').kind, 'select');
20
- strict_1.default.equal((0, classifier_1.classifySql)('SELECT count(*) FROM a UNION SELECT count(*) FROM b').kind, 'select');
21
- });
22
- (0, node_test_1.test)('classifies write statements as write', () => {
23
- const writes = [
24
- 'INSERT INTO t (a) VALUES (1)',
25
- 'UPDATE t SET a = 1',
26
- 'DELETE FROM t',
27
- 'CREATE TABLE t (a TEXT)',
28
- 'ALTER TABLE t ADD COLUMN b TEXT',
29
- 'DROP TABLE t',
30
- 'REPLACE INTO t (a) VALUES (1)',
31
- ];
32
- for (const sql of writes) {
33
- strict_1.default.equal((0, classifier_1.classifySql)(sql).kind, 'write', sql);
34
- }
35
- });
36
- (0, node_test_1.test)('classifies PRAGMA and EXPLAIN as read', () => {
37
- strict_1.default.equal((0, classifier_1.classifySql)('PRAGMA table_info(users)').kind, 'read');
38
- strict_1.default.equal((0, classifier_1.classifySql)('EXPLAIN QUERY PLAN SELECT * FROM t').kind, 'read');
39
- });
40
- (0, node_test_1.test)('ignores leading comments and whitespace', () => {
41
- strict_1.default.equal((0, classifier_1.classifySql)('-- hello\nSELECT * FROM t').kind, 'select');
42
- strict_1.default.equal((0, classifier_1.classifySql)('/* block */\n INSERT INTO t (a) VALUES (1)').kind, 'write');
43
- });
44
- //# sourceMappingURL=classifier.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"classifier.test.js","sourceRoot":"","sources":["../../src/test/classifier.test.ts"],"names":[],"mappings":";;;;;AAAA,yCAAiC;AACjC,gEAAwC;AACxC,kDAAgD;AAEhD,IAAA,gBAAI,EAAC,wCAAwC,EAAE,GAAG,EAAE;IAClD,gBAAM,CAAC,KAAK,CAAC,IAAA,wBAAW,EAAC,qBAAqB,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAChE,gBAAM,CAAC,KAAK,CAAC,IAAA,wBAAW,EAAC,+BAA+B,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC1E,gBAAM,CAAC,KAAK,CAAC,IAAA,wBAAW,EAAC,sCAAsC,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AACnF,CAAC,CAAC,CAAC;AAEH,IAAA,gBAAI,EAAC,wCAAwC,EAAE,GAAG,EAAE;IAClD,gBAAM,CAAC,KAAK,CAAC,IAAA,wBAAW,EAAC,4BAA4B,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACtE,gBAAM,CAAC,KAAK,CAAC,IAAA,wBAAW,EAAC,8BAA8B,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC1E,CAAC,CAAC,CAAC;AAEH,IAAA,gBAAI,EAAC,uDAAuD,EAAE,GAAG,EAAE;IACjE,gBAAM,CAAC,KAAK,CAAC,IAAA,wBAAW,EAAC,gDAAgD,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC3F,gBAAM,CAAC,KAAK,CAAC,IAAA,wBAAW,EAAC,qDAAqD,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAClG,CAAC,CAAC,CAAC;AAEH,IAAA,gBAAI,EAAC,sCAAsC,EAAE,GAAG,EAAE;IAChD,MAAM,MAAM,GAAG;QACb,8BAA8B;QAC9B,oBAAoB;QACpB,eAAe;QACf,yBAAyB;QACzB,iCAAiC;QACjC,cAAc;QACd,+BAA+B;KAChC,CAAC;IACF,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,gBAAM,CAAC,KAAK,CAAC,IAAA,wBAAW,EAAC,GAAG,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IACpD,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,IAAA,gBAAI,EAAC,uCAAuC,EAAE,GAAG,EAAE;IACjD,gBAAM,CAAC,KAAK,CAAC,IAAA,wBAAW,EAAC,0BAA0B,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACnE,gBAAM,CAAC,KAAK,CAAC,IAAA,wBAAW,EAAC,oCAAoC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC/E,CAAC,CAAC,CAAC;AAEH,IAAA,gBAAI,EAAC,yCAAyC,EAAE,GAAG,EAAE;IACnD,gBAAM,CAAC,KAAK,CAAC,IAAA,wBAAW,EAAC,2BAA2B,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACtE,gBAAM,CAAC,KAAK,CAAC,IAAA,wBAAW,EAAC,4CAA4C,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACxF,CAAC,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,64 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const node_test_1 = require("node:test");
7
- const strict_1 = __importDefault(require("node:assert/strict"));
8
- const csv_1 = require("../csv");
9
- (0, node_test_1.test)('csvEscape quotes fields with commas, quotes or newlines', () => {
10
- strict_1.default.equal((0, csv_1.csvEscape)('plain'), 'plain');
11
- strict_1.default.equal((0, csv_1.csvEscape)('a,b'), '"a,b"');
12
- strict_1.default.equal((0, csv_1.csvEscape)('say "hi"'), '"say ""hi"""');
13
- strict_1.default.equal((0, csv_1.csvEscape)('line1\nline2'), '"line1\nline2"');
14
- strict_1.default.equal((0, csv_1.csvEscape)(null), '');
15
- strict_1.default.equal((0, csv_1.csvEscape)(0), '0');
16
- strict_1.default.equal((0, csv_1.csvEscape)(false), 'false');
17
- });
18
- (0, node_test_1.test)('toCsv writes a header and quotes tricky cells', () => {
19
- const csv = (0, csv_1.toCsv)([
20
- { id: 1, name: 'Ada', note: 'a, b "c"' },
21
- { id: 2, name: null, note: 'x' },
22
- ], ['id', 'name', 'note']);
23
- strict_1.default.equal(csv, 'id,name,note\r\n1,Ada,"a, b ""c"""\r\n2,,x');
24
- });
25
- (0, node_test_1.test)('toJson pretty-prints an array of objects', () => {
26
- const json = (0, csv_1.toJson)([{ a: 1, b: null }]);
27
- strict_1.default.equal(json, '[\n {\n "a": 1,\n "b": null\n }\n]');
28
- });
29
- (0, node_test_1.test)('parseCsv handles quoted fields, embedded commas and newlines', () => {
30
- const rows = (0, csv_1.parseCsv)('a,b,c\r\n1,"two, words","line1\nline2"\r\n');
31
- strict_1.default.deepEqual(rows, [
32
- ['a', 'b', 'c'],
33
- ['1', 'two, words', 'line1\nline2'],
34
- ]);
35
- });
36
- (0, node_test_1.test)('parseCsv handles escaped quotes and skips blank lines', () => {
37
- const rows = (0, csv_1.parseCsv)('x,y\n"say ""hi""",2\n\n3,4\n');
38
- strict_1.default.deepEqual(rows, [
39
- ['x', 'y'],
40
- ['say "hi"', '2'],
41
- ['3', '4'],
42
- ]);
43
- });
44
- (0, node_test_1.test)('parseCsv handles a file without a trailing newline', () => {
45
- const rows = (0, csv_1.parseCsv)('a,b\n1,2');
46
- strict_1.default.deepEqual(rows, [
47
- ['a', 'b'],
48
- ['1', '2'],
49
- ]);
50
- });
51
- (0, node_test_1.test)('toCsv → parseCsv round-trips typical data', () => {
52
- const rows = [
53
- { name: 'O\'Reilly, John', age: 42, note: 'line1\nline2' },
54
- { name: 'x', age: null, note: 'plain' },
55
- ];
56
- const columns = ['name', 'age', 'note'];
57
- const parsed = (0, csv_1.parseCsv)((0, csv_1.toCsv)(rows, columns));
58
- strict_1.default.deepEqual(parsed, [
59
- ['name', 'age', 'note'],
60
- ["O'Reilly, John", '42', 'line1\nline2'],
61
- ['x', '', 'plain'],
62
- ]);
63
- });
64
- //# sourceMappingURL=csv.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"csv.test.js","sourceRoot":"","sources":["../../src/test/csv.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,402 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const node_test_1 = require("node:test");
7
- const strict_1 = __importDefault(require("node:assert/strict"));
8
- const node_fs_1 = require("node:fs");
9
- const node_os_1 = require("node:os");
10
- const node_path_1 = __importDefault(require("node:path"));
11
- const database_1 = require("../db/database");
12
- const logger_1 = require("../logger");
13
- const util_1 = require("../util");
14
- function openDb() {
15
- const root = (0, node_fs_1.mkdtempSync)(node_path_1.default.join((0, node_os_1.tmpdir)(), 'admindb-db-test-'));
16
- const db = new database_1.SqliteDatabase(node_path_1.default.join(root, 'test.db'), (0, logger_1.createLogger)('error'));
17
- return { db, cleanup: () => { db.close(); (0, node_fs_1.rmSync)(root, { recursive: true, force: true }); } };
18
- }
19
- (0, node_test_1.test)('getRows filters rows with exact, comparison and substring operators', async () => {
20
- const { db, cleanup } = openDb();
21
- try {
22
- await db.execResult('CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)');
23
- await db.insertRows('users', [
24
- [{ column: 'name', value: 'alice' }, { column: 'age', value: 30 }],
25
- [{ column: 'name', value: 'bob' }, { column: 'age', value: 40 }],
26
- [{ column: 'name', value: 'carl' }, { column: 'age', value: 50 }],
27
- ]);
28
- const exact = await db.getRows('users', { filters: { name: '=bob' } });
29
- strict_1.default.equal((exact.data ?? []).length, 1);
30
- strict_1.default.equal(exact.data[0].name, 'bob');
31
- const gt = await db.getRows('users', { filters: { age: '>35' } });
32
- strict_1.default.equal((gt.data ?? []).length, 2);
33
- const contains = await db.getRows('users', { filters: { name: 'a' } });
34
- strict_1.default.equal((contains.data ?? []).length, 2); // alice + carl
35
- const prefix = await db.getRows('users', { filters: { name: 'bo*' } });
36
- strict_1.default.equal((prefix.data ?? []).length, 1);
37
- strict_1.default.equal(prefix.data[0].name, 'bob');
38
- const count = await db.getRowCount('users', { age: '>=40' });
39
- strict_1.default.equal(count.data, 2);
40
- }
41
- finally {
42
- cleanup();
43
- }
44
- });
45
- (0, node_test_1.test)('insertRows inserts many rows atomically and reports counts', async () => {
46
- const { db, cleanup } = openDb();
47
- try {
48
- await db.execResult('CREATE TABLE t (a TEXT, b INTEGER)');
49
- const r = await db.insertRows('t', [
50
- [{ column: 'a', value: 'x' }, { column: 'b', value: 1 }],
51
- [{ column: 'a', value: 'y' }, { column: 'b', value: 2 }],
52
- ]);
53
- strict_1.default.equal(r.success, true);
54
- strict_1.default.equal(r.data?.inserted, 2);
55
- const all = await db.getAllRows('t');
56
- strict_1.default.equal((all.data ?? []).length, 2);
57
- }
58
- finally {
59
- cleanup();
60
- }
61
- });
62
- (0, node_test_1.test)('insertRows rolls back when a row fails', async () => {
63
- const { db, cleanup } = openDb();
64
- try {
65
- await db.execResult('CREATE TABLE t (a TEXT NOT NULL)');
66
- const r = await db.insertRows('t', [
67
- [{ column: 'a', value: 'ok' }],
68
- [{ column: 'a', value: null }], // violates NOT NULL
69
- ]);
70
- strict_1.default.equal(r.success, false);
71
- const all = await db.getAllRows('t');
72
- strict_1.default.equal((all.data ?? []).length, 0); // rolled back
73
- }
74
- finally {
75
- cleanup();
76
- }
77
- });
78
- (0, node_test_1.test)('createIndex / dropIndex work and getSchema reports origin', async () => {
79
- const { db, cleanup } = openDb();
80
- try {
81
- await db.execResult('CREATE TABLE users (id INTEGER PRIMARY KEY, email TEXT UNIQUE, city TEXT)');
82
- const created = await db.createIndex('users', { columns: ['city'] });
83
- strict_1.default.equal(created.success, true);
84
- const schema = await db.getSchema('users');
85
- const cities = schema.data?.indexes.find((ix) => ix.name === 'idx_users_city');
86
- strict_1.default.ok(cities, 'expected idx_users_city to exist');
87
- strict_1.default.equal(cities.origin, 'c');
88
- strict_1.default.deepEqual(cities.columns, ['city']);
89
- const dropped = await db.dropIndex('idx_users_city');
90
- strict_1.default.equal(dropped.success, true);
91
- const after = await db.getSchema('users');
92
- strict_1.default.equal(after.data?.indexes.find((ix) => ix.name === 'idx_users_city'), undefined);
93
- // The automatic UNIQUE index (origin 'u') is kept and is not origin 'c'.
94
- const auto = after.data?.indexes.find((ix) => ix.origin !== 'c');
95
- strict_1.default.ok(auto, 'expected an automatic index for the UNIQUE column');
96
- strict_1.default.equal(auto.origin, 'u');
97
- strict_1.default.deepEqual(auto.columns, ['email']);
98
- }
99
- finally {
100
- cleanup();
101
- }
102
- });
103
- (0, node_test_1.test)('read-only databases reject all writes and still allow reads', async () => {
104
- const root = (0, node_fs_1.mkdtempSync)(node_path_1.default.join((0, node_os_1.tmpdir)(), 'admindb-ro-test-'));
105
- const writable = new database_1.SqliteDatabase(node_path_1.default.join(root, 'test.db'), (0, logger_1.createLogger)('error'));
106
- try {
107
- await writable.execResult('CREATE TABLE t (id INTEGER PRIMARY KEY, a TEXT)');
108
- await writable.insertRows('t', [[{ column: 'a', value: 'x' }]]);
109
- writable.close();
110
- const ro = new database_1.SqliteDatabase(node_path_1.default.join(root, 'test.db'), (0, logger_1.createLogger)('error'), { readonly: true });
111
- try {
112
- strict_1.default.equal(ro.isReadOnly, true);
113
- // Reads keep working.
114
- const all = await ro.getAllRows('t');
115
- strict_1.default.equal(all.success, true);
116
- strict_1.default.equal((all.data ?? []).length, 1);
117
- // Every write path is blocked with a clear error.
118
- const r1 = await ro.run('INSERT INTO t (a) VALUES (?)', ['y']);
119
- strict_1.default.equal(r1.success, false);
120
- strict_1.default.match(r1.error ?? '', /read-only/i);
121
- const r2 = await ro.execResult('CREATE TABLE other (x TEXT)');
122
- strict_1.default.equal(r2.success, false);
123
- const r3 = await ro.runWrite('DELETE FROM t');
124
- strict_1.default.equal(r3.success, false);
125
- const r4 = await ro.insertRows('t', [[{ column: 'a', value: 'z' }]]);
126
- strict_1.default.equal(r4.success, false);
127
- const r5 = await ro.createIndex('t', { columns: ['a'] });
128
- strict_1.default.equal(r5.success, false);
129
- const r6 = await ro.dropTable('t');
130
- strict_1.default.equal(r6.success, false);
131
- }
132
- finally {
133
- ro.close();
134
- }
135
- }
136
- finally {
137
- (0, node_fs_1.rmSync)(root, { recursive: true, force: true });
138
- }
139
- });
140
- (0, node_test_1.test)('hasMultipleStatements detects scripts vs single statements', () => {
141
- const { db, cleanup } = openDb();
142
- try {
143
- // Single statements, including ones with semicolons inside literals/identifiers.
144
- strict_1.default.equal(db.hasMultipleStatements('SELECT 1'), false);
145
- strict_1.default.equal(db.hasMultipleStatements("INSERT INTO t VALUES ('a;b')"), false);
146
- strict_1.default.equal(db.hasMultipleStatements('SELECT "x;y" FROM t'), false);
147
- strict_1.default.equal(db.hasMultipleStatements('PRAGMA foreign_keys = ON;'), false);
148
- strict_1.default.equal(db.hasMultipleStatements(' -- comment\nSELECT 1'), false);
149
- strict_1.default.equal(db.hasMultipleStatements(''), false);
150
- // Scripts of several statements.
151
- strict_1.default.equal(db.hasMultipleStatements('PRAGMA foreign_keys = ON;\nCREATE TABLE t (a TEXT);'), true);
152
- strict_1.default.equal(db.hasMultipleStatements('CREATE TABLE a (x TEXT); CREATE TABLE b (y TEXT);'), true);
153
- strict_1.default.equal(db.hasMultipleStatements('SELECT 1; SELECT 2;'), true);
154
- }
155
- finally {
156
- cleanup();
157
- }
158
- });
159
- (0, node_test_1.test)('multi-statement schema scripts run via exec (PRAGMA + CREATE TABLE + indexes)', async () => {
160
- const { db, cleanup } = openDb();
161
- try {
162
- const script = [
163
- 'PRAGMA foreign_keys = ON;',
164
- '',
165
- 'CREATE TABLE IF NOT EXISTS "Users" (',
166
- ' id INTEGER PRIMARY KEY AUTOINCREMENT,',
167
- ' "UserName" TEXT UNIQUE,',
168
- ' "Active" INTEGER DEFAULT 0',
169
- ');',
170
- 'CREATE INDEX IF NOT EXISTS idx_users_active ON "Users" ("Active");',
171
- 'CREATE INDEX IF NOT EXISTS idx_users_username ON "Users" ("UserName");',
172
- ].join('\n');
173
- strict_1.default.equal(db.hasMultipleStatements(script), true);
174
- const r = await db.execResult(script);
175
- strict_1.default.equal(r.success, true, r.error ?? '');
176
- const tables = await db.listTables();
177
- strict_1.default.equal((tables.data ?? []).some((t) => t.name === 'Users'), true);
178
- const schema = await db.getSchema('Users');
179
- const names = (schema.data?.indexes ?? []).map((ix) => ix.name);
180
- strict_1.default.ok(names.includes('idx_users_active'));
181
- strict_1.default.ok(names.includes('idx_users_username'));
182
- }
183
- finally {
184
- cleanup();
185
- }
186
- });
187
- (0, node_test_1.test)('getReferencingTables lists tables whose FKs point at this table', async () => {
188
- const { db, cleanup } = openDb();
189
- try {
190
- await db.execResult('CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT)');
191
- await db.execResult('CREATE TABLE orders (id INTEGER PRIMARY KEY, user_id INTEGER REFERENCES users(id))');
192
- await db.execResult('CREATE TABLE payments (id INTEGER PRIMARY KEY, user_id INTEGER REFERENCES users(id), amount REAL)');
193
- await db.insertRows('users', [
194
- [{ column: 'name', value: 'alice' }],
195
- [{ column: 'name', value: 'bob' }],
196
- ]);
197
- // One order references user 1; another has no FK value.
198
- await db.insertRows('orders', [
199
- [{ column: 'user_id', value: 1 }],
200
- [{ column: 'user_id', value: null }],
201
- ]);
202
- await db.insertRows('payments', [[{ column: 'user_id', value: 2 }, { column: 'amount', value: 9.99 }]]);
203
- const refs = await db.getReferencingTables('users');
204
- strict_1.default.equal(refs.success, true);
205
- const data = refs.data ?? [];
206
- strict_1.default.deepEqual(data.map((r) => r.table), ['orders', 'payments']);
207
- const orders = data.find((r) => r.table === 'orders');
208
- strict_1.default.deepEqual(orders?.refs, [{ from: 'user_id', to: 'id' }]);
209
- strict_1.default.equal(orders?.refCount, 1); // only the row with a non-null FK
210
- const payments = data.find((r) => r.table === 'payments');
211
- strict_1.default.equal(payments?.refCount, 1);
212
- // Rows by FK: orders has exactly one row referencing user id 1.
213
- const byFk = await db.getRowsByFk('orders', 'user_id', 1, 10);
214
- strict_1.default.equal(byFk.success, true);
215
- strict_1.default.equal(byFk.data?.total, 1);
216
- strict_1.default.equal((byFk.data?.rows ?? []).length, 1);
217
- strict_1.default.equal(byFk.data?.rows[0].user_id, 1);
218
- const noneFk = await db.getRowsByFk('orders', 'user_id', 999, 10);
219
- strict_1.default.equal(noneFk.data?.total, 0);
220
- strict_1.default.equal((noneFk.data?.rows ?? []).length, 0);
221
- // Nothing references orders.
222
- const none = await db.getReferencingTables('orders');
223
- strict_1.default.deepEqual(none.data ?? [], []);
224
- }
225
- finally {
226
- cleanup();
227
- }
228
- });
229
- (0, node_test_1.test)('structured (type-aware) filter conditions build correct WHERE clauses', async () => {
230
- const { db, cleanup } = openDb();
231
- try {
232
- await db.execResult('CREATE TABLE t (id INTEGER PRIMARY KEY, name TEXT, age INTEGER, joined DATE, active BOOLEAN)');
233
- await db.insertRows('t', [
234
- [{ column: 'name', value: 'alice' }, { column: 'age', value: 30 }, { column: 'joined', value: '2020-01-01' }, { column: 'active', value: 1 }],
235
- [{ column: 'name', value: 'bob' }, { column: 'age', value: 40 }, { column: 'joined', value: '2021-06-15' }, { column: 'active', value: 0 }],
236
- [{ column: 'name', value: 'carl' }, { column: 'age', value: 50 }, { column: 'joined', value: '2022-03-30' }, { column: 'active', value: 1 }],
237
- [{ column: 'name', value: null }, { column: 'age', value: 25 }, { column: 'joined', value: null }, { column: 'active', value: null }],
238
- ]);
239
- // eq / neq
240
- const eq = await db.getRows('t', { filters: { name: { op: 'eq', value: 'bob' } } });
241
- strict_1.default.equal((eq.data ?? []).length, 1);
242
- const neq = await db.getRows('t', { filters: { age: { op: 'neq', value: '30' } } });
243
- strict_1.default.equal((neq.data ?? []).length, 3);
244
- // range: between → >= AND <=
245
- const between = await db.getRows('t', { filters: { age: { op: 'between', value: '30', max: '50' } } });
246
- strict_1.default.equal((between.data ?? []).length, 3);
247
- // single-sided range
248
- const gte = await db.getRows('t', { filters: { age: { op: 'gte', value: '40' } } });
249
- strict_1.default.equal((gte.data ?? []).length, 2);
250
- const lt = await db.getRows('t', { filters: { age: { op: 'lt', value: '40' } } });
251
- strict_1.default.equal((lt.data ?? []).length, 2); // 25 (null name) + 30
252
- // null / notnull
253
- const isNull = await db.getRows('t', { filters: { name: { op: 'null' } } });
254
- strict_1.default.equal((isNull.data ?? []).length, 1);
255
- const notNull = await db.getRows('t', { filters: { name: { op: 'notnull' } } });
256
- strict_1.default.equal((notNull.data ?? []).length, 3);
257
- // prefix / like (escaped)
258
- const prefix = await db.getRows('t', { filters: { name: { op: 'prefix', value: 'al' } } });
259
- strict_1.default.equal((prefix.data ?? []).length, 1);
260
- const like = await db.getRows('t', { filters: { name: { op: 'like', value: 'ar' } } });
261
- strict_1.default.equal((like.data ?? []).length, 1);
262
- // multiple conditions on the same column combine with AND
263
- const multi = await db.getRows('t', {
264
- filters: { age: [{ op: 'gte', value: '30' }, { op: 'lte', value: '40' }] },
265
- });
266
- strict_1.default.equal((multi.data ?? []).length, 2);
267
- // count path uses the same clause builder
268
- const count = await db.getRowCount('t', { age: { op: 'between', value: '30', max: '50' } });
269
- strict_1.default.equal(count.data, 3);
270
- }
271
- finally {
272
- cleanup();
273
- }
274
- });
275
- (0, node_test_1.test)('parseFilters / filtersToQS round-trip structured and legacy filters', async () => {
276
- // Legacy string syntax is preserved unchanged.
277
- const legacy = (0, util_1.parseFilters)(JSON.stringify({ name: 'bob', age: '>30' }));
278
- strict_1.default.deepEqual(legacy, { name: 'bob', age: '>30' });
279
- strict_1.default.ok((0, util_1.filtersToQS)(legacy).includes('%22name%22%3A%22bob%22'));
280
- // Structured conditions survive the query-string round trip. filtersToQS
281
- // returns the full `f=…` query segment; parseFilters receives the decoded
282
- // JSON payload (as Express exposes req.query.f).
283
- const structured = (0, util_1.parseFilters)(JSON.stringify({ age: { op: 'between', value: '30', max: '50' }, name: [{ op: 'eq', value: 'a' }], city: { op: 'null' } }));
284
- strict_1.default.deepEqual(structured.age, { op: 'between', value: '30', max: '50' });
285
- strict_1.default.deepEqual(structured.name, [{ op: 'eq', value: 'a' }]);
286
- strict_1.default.deepEqual(structured.city, { op: 'null' });
287
- const qs = (0, util_1.filtersToQS)(structured);
288
- const json = decodeURIComponent(qs.startsWith('f=') ? qs.slice(2) : qs);
289
- strict_1.default.deepEqual((0, util_1.parseFilters)(json), structured);
290
- });
291
- (0, node_test_1.test)('deleteRows deletes many rows atomically and reports the count', async () => {
292
- const { db, cleanup } = openDb();
293
- try {
294
- await db.execResult('CREATE TABLE t (id INTEGER PRIMARY KEY, a TEXT)');
295
- await db.insertRows('t', [
296
- [{ column: 'a', value: 'x' }],
297
- [{ column: 'a', value: 'y' }],
298
- [{ column: 'a', value: 'z' }],
299
- ]);
300
- const all = await db.getAllRows('t');
301
- const ids = (all.data ?? []).map((r) => [{ column: 'id', value: r.id }]);
302
- // Delete the first two rows.
303
- const r = await db.deleteRows('t', ids.slice(0, 2));
304
- strict_1.default.equal(r.success, true);
305
- strict_1.default.equal(r.data?.deleted, 2);
306
- const remaining = await db.getAllRows('t');
307
- strict_1.default.equal((remaining.data ?? []).length, 1);
308
- strict_1.default.equal(remaining.data[0].a, 'z');
309
- // Deleting a row that no longer exists reports 0 changes for it.
310
- const again = await db.deleteRows('t', ids.slice(0, 2));
311
- strict_1.default.equal(again.success, true);
312
- strict_1.default.equal(again.data?.deleted, 0);
313
- }
314
- finally {
315
- cleanup();
316
- }
317
- });
318
- (0, node_test_1.test)('deleteRows rolls back the whole batch when one row fails', async () => {
319
- const { db, cleanup } = openDb();
320
- try {
321
- await db.execResult('CREATE TABLE a (id INTEGER PRIMARY KEY, v TEXT)');
322
- await db.execResult('CREATE TABLE b (id INTEGER PRIMARY KEY, a_id INTEGER REFERENCES a(id) ON DELETE RESTRICT)');
323
- await db.insertRows('a', [
324
- [{ column: 'v', value: 'keep' }],
325
- [{ column: 'v', value: 'blocked' }],
326
- ]);
327
- await db.insertRows('b', [[{ column: 'a_id', value: 2 }]]);
328
- // Deleting a row referenced with ON DELETE RESTRICT fails — the whole batch
329
- // (including the deletable first row) must roll back.
330
- const r = await db.deleteRows('a', [
331
- [{ column: 'id', value: 1 }],
332
- [{ column: 'id', value: 2 }],
333
- ]);
334
- strict_1.default.equal(r.success, false);
335
- const all = await db.getAllRows('a');
336
- strict_1.default.equal((all.data ?? []).length, 2); // nothing was deleted
337
- }
338
- finally {
339
- cleanup();
340
- }
341
- });
342
- (0, node_test_1.test)('getRowsByPks fetches exactly the requested rows in one query', async () => {
343
- const { db, cleanup } = openDb();
344
- try {
345
- await db.execResult('CREATE TABLE t (id INTEGER PRIMARY KEY, a TEXT)');
346
- await db.insertRows('t', [
347
- [{ column: 'a', value: 'x' }],
348
- [{ column: 'a', value: 'y' }],
349
- [{ column: 'a', value: 'z' }],
350
- ]);
351
- const r = await db.getRowsByPks('t', [
352
- [{ column: 'id', value: 1 }],
353
- [{ column: 'id', value: 3 }],
354
- [{ column: 'id', value: 999 }],
355
- ]);
356
- strict_1.default.equal(r.success, true);
357
- const rows = (r.data ?? []);
358
- strict_1.default.equal(rows.length, 2);
359
- strict_1.default.deepEqual(rows.map((row) => row.a).sort(), ['x', 'z']);
360
- }
361
- finally {
362
- cleanup();
363
- }
364
- });
365
- (0, node_test_1.test)('updateRows applies many row updates atomically and rolls back on failure', async () => {
366
- const { db, cleanup } = openDb();
367
- try {
368
- await db.execResult('CREATE TABLE t (id INTEGER PRIMARY KEY, a TEXT, b INTEGER, u TEXT UNIQUE)');
369
- await db.insertRows('t', [
370
- [{ column: 'a', value: 'x' }, { column: 'b', value: 1 }, { column: 'u', value: 'u1' }],
371
- [{ column: 'a', value: 'y' }, { column: 'b', value: 2 }, { column: 'u', value: 'u2' }],
372
- [{ column: 'a', value: 'z' }, { column: 'b', value: 3 }, { column: 'u', value: 'u3' }],
373
- ]);
374
- // Update two rows across multiple columns (including an explicit NULL).
375
- const r = await db.updateRows('t', [
376
- { fields: [{ column: 'a', value: 'xx' }, { column: 'b', value: 10 }], where: [{ column: 'id', value: 1 }] },
377
- { fields: [{ column: 'a', value: null }], where: [{ column: 'id', value: 2 }] },
378
- ]);
379
- strict_1.default.equal(r.success, true);
380
- strict_1.default.equal(r.data?.updated, 2);
381
- const all = await db.getAllRows('t');
382
- const rows = (all.data ?? []);
383
- strict_1.default.equal(rows.find((row) => row.id === 1)?.a, 'xx');
384
- strict_1.default.equal(rows.find((row) => row.id === 1)?.b, 10);
385
- strict_1.default.equal(rows.find((row) => row.id === 2)?.a, null);
386
- // A failing update (UNIQUE violation) rolls back the entire batch.
387
- const failR = await db.updateRows('t', [
388
- { fields: [{ column: 'a', value: 'b1' }], where: [{ column: 'id', value: 3 }] },
389
- { fields: [{ column: 'u', value: 'dup' }], where: [{ column: 'id', value: 1 }] },
390
- { fields: [{ column: 'u', value: 'dup' }], where: [{ column: 'id', value: 3 }] }, // violates UNIQUE
391
- ]);
392
- strict_1.default.equal(failR.success, false);
393
- const after = await db.getAllRows('t');
394
- const afterRows = (after.data ?? []);
395
- // Row 3's `a` must NOT have changed — the whole batch rolled back.
396
- strict_1.default.equal(afterRows.find((row) => row.id === 3)?.a, 'z');
397
- }
398
- finally {
399
- cleanup();
400
- }
401
- });
402
- //# sourceMappingURL=database.test.js.map