admindb 2.1.1 → 2.2.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 (91) hide show
  1. package/README.md +41 -12
  2. package/dist/app.js +230 -1
  3. package/dist/auth/config.js +121 -1
  4. package/dist/auth/crypto.js +108 -1
  5. package/dist/auth/index.js +21 -1
  6. package/dist/auth/middleware.js +85 -1
  7. package/dist/auth/routes.js +70 -1
  8. package/dist/auth/types.js +7 -1
  9. package/dist/cli/args.js +320 -1
  10. package/dist/cli/config.js +128 -1
  11. package/dist/cli/index.js +20 -1
  12. package/dist/cli/runner.js +211 -1
  13. package/dist/cli.js +4 -1
  14. package/dist/data/chain.d.ts +1 -0
  15. package/dist/data/chain.js +707 -0
  16. package/dist/data/datasets.js +129 -1
  17. package/dist/data/detector.d.ts +1 -1
  18. package/dist/data/detector.js +511 -1
  19. package/dist/data/engine.d.ts +1 -1
  20. package/dist/data/engine.js +245 -1
  21. package/dist/data/index.d.ts +1 -1
  22. package/dist/data/index.js +22 -1
  23. package/dist/data/strategies.d.ts +1 -1
  24. package/dist/data/strategies.js +339 -1
  25. package/dist/data/types.d.ts +1 -1
  26. package/dist/data/types.js +5 -1
  27. package/dist/db/database.d.ts +1 -1
  28. package/dist/db/database.js +477 -1
  29. package/dist/db/export.d.ts +1 -1
  30. package/dist/db/export.js +90 -1
  31. package/dist/db/filters.js +142 -1
  32. package/dist/db/index.js +24 -1
  33. package/dist/db/introspection.js +167 -1
  34. package/dist/db/manager.js +351 -1
  35. package/dist/db/migrations.js +107 -1
  36. package/dist/db/postgres.d.ts +1 -1
  37. package/dist/db/postgres.js +735 -1
  38. package/dist/db/types.d.ts +1 -1
  39. package/dist/db/types.js +6 -1
  40. package/dist/index.js +52 -1
  41. package/dist/public/css/app.css +1 -1
  42. package/dist/public/js/api.js +1 -1
  43. package/dist/public/js/browse.js +1 -1
  44. package/dist/public/js/common.js +1 -0
  45. package/dist/public/js/databases.js +1 -1
  46. package/dist/public/js/designer.js +1 -1
  47. package/dist/public/js/forms.js +1 -1
  48. package/dist/public/js/home.js +1 -0
  49. package/dist/public/js/inspector.js +1 -1
  50. package/dist/public/js/query.js +1 -1
  51. package/dist/public/js/schema.js +1 -1
  52. package/dist/public/js/seed.js +1 -1
  53. package/dist/routes/api/erd.d.ts +1 -0
  54. package/dist/routes/api/erd.js +50 -0
  55. package/dist/routes/api/helpers.d.ts +1 -1
  56. package/dist/routes/api/helpers.js +163 -1
  57. package/dist/routes/api/import-export.js +83 -1
  58. package/dist/routes/api/index.js +48 -1
  59. package/dist/routes/api/query.js +78 -1
  60. package/dist/routes/api/rows.js +362 -1
  61. package/dist/routes/api/seed.js +153 -1
  62. package/dist/routes/api/tables.js +231 -1
  63. package/dist/routes/databases.js +228 -1
  64. package/dist/routes/index.js +19 -1
  65. package/dist/routes/pages.js +397 -1
  66. package/dist/serverless.js +174 -1
  67. package/dist/sql/classifier.js +24 -1
  68. package/dist/sql/error-analyzer.d.ts +1 -0
  69. package/dist/sql/error-analyzer.js +550 -0
  70. package/dist/sql/generator.js +319 -1
  71. package/dist/sql/index.js +18 -1
  72. package/dist/types/api.js +2 -1
  73. package/dist/utils/colors.js +54 -1
  74. package/dist/utils/common.d.ts +1 -1
  75. package/dist/utils/common.js +225 -1
  76. package/dist/utils/csv.js +67 -1
  77. package/dist/utils/datatype.js +181 -1
  78. package/dist/utils/icons.js +81 -1
  79. package/dist/utils/index.js +20 -1
  80. package/dist/utils/logger.js +36 -1
  81. package/dist/views/layouts/main.hbs +14 -1
  82. package/dist/views/pages/erd.hbs +1241 -0
  83. package/dist/views/pages/home.hbs +98 -2
  84. package/dist/views/pages/info.hbs +107 -0
  85. package/dist/views/pages/query.hbs +54 -12
  86. package/dist/views/pages/seed.hbs +435 -171
  87. package/dist/views/partials/sidebar.hbs +12 -0
  88. package/docs/API.md +6 -1
  89. package/docs/EXAMPLES.md +3 -0
  90. package/package.json +5 -4
  91. package/dist/public/js/icons.js +0 -1
@@ -1 +1,245 @@
1
- Object.defineProperty(exports,"__esModule",{value:!0}),exports.generateRows=async function(db,info,configs,count,plan={}){const fkByColumn=new Map;for(const fk of info.foreignKeys)fkByColumn.set(fk.from,fk);const uniqueCols=new Set;for(const cfg of configs)cfg.unique&&uniqueCols.add(cfg.name);const checkInfo=(0,detector_1.parseChecks)(info.sql??null),warnings=[],prepared=[],fkPools=new Map,fkOmit=new Set;for(const col of info.columns){const cfg=configs.find(c=>c.name===col.name),raw=plan[col.name],p=raw&&raw.strategy?raw:cfg?.defaultPlan??{strategy:"skip"};if(!("list"!==p.strategy||p.values&&p.values.length)){const allowed=(0,detector_1.findInMap)(checkInfo.columnAllowed,col.name);allowed&&allowed.length&&(p.values=[...allowed])}if(!cfg||!cfg.strategies.some(s=>s.id===p.strategy))throw new Error(`Unsupported generator strategy "${p.strategy}" for column "${col.name}".`);if("list"!==p.strategy||(p.values??[]).some(v=>""!==String(v).trim())||warnings.push(`Column "${col.name}": the list is empty, so it will be skipped (DB default applies).`),"skip"!==p.strategy&&"null"!==p.strategy||col.pk||!col.notnull||null!=col.dflt_value||warnings.push(`Column "${col.name}" is NOT NULL without a default — "${p.strategy}" rows may fail to insert.`),"fk"===p.strategy){const pool=await sampleFkValues(db,fkByColumn.get(col.name)??null);fkPools.set(col.name,pool);const refTable=fkByColumn.get(col.name)?.table??"?";pool.length||(col.notnull&&!col.pk?(fkOmit.add(col.name),warnings.push(`Column "${col.name}" is a NOT NULL foreign key to "${refTable}", which has no rows. It is omitted from generated rows — seed "${refTable}" first so the insert can reference real values.`)):warnings.push(`Column "${col.name}": "${refTable}" is empty, so NULL will be inserted.`))}prepared.push({col:col,plan:p})}const rows=[],previewRows=[],uniqueSeen=new Map;for(let i=0;i<count;i++){const fields=[],previewRow={};for(const{col:col,plan:p}of prepared){if("fk"===p.strategy&&fkOmit.has(col.name)){previewRow[col.name]=null;continue}let v=(0,strategies_1.generateOne)(col,p,fkPools.get(col.name),i);if(v!==types_1.SKIP){if(uniqueCols.has(col.name)){const seen=uniqueSeen.get(col.name)??new Set;let attempts=0;for(;seen.has(stringifyKey(v))&&attempts<20;)v=(0,strategies_1.generateOne)(col,p,fkPools.get(col.name),i),attempts+=1;seen.has(stringifyKey(v))&&(warnings.push(`Column "${col.name}" is UNIQUE but the generator kept colliding — appended a suffix to keep rows insertable.`),v=uniqueSuffix(v,seen)),seen.add(stringifyKey(v)),uniqueSeen.set(col.name,seen)}fields.push({column:col.name,value:v}),previewRow[col.name]=v}else previewRow[col.name]="(default)"}applyOrdering(fields,checkInfo.ordering);for(const f of fields)previewRow[f.column]=f.value;rows.push(fields),previewRows.length<50&&previewRows.push(previewRow)}return{rows:rows,previewRows:previewRows,warnings:warnings}},exports.buildSeedInsertSql=function(table,rows){return rows.map(fields=>{const cols=fields.map(f=>(0,generator_1.quoteIdentifier)(f.column)),vals=fields.map(f=>(0,generator_1.sqlValue)(f.value));return`INSERT INTO ${(0,generator_1.quoteIdentifier)(table)} (${cols.join(", ")}) VALUES (${vals.join(", ")});`}).join("\n")};const generator_1=require("../sql/generator"),types_1=require("./types"),detector_1=require("./detector"),strategies_1=require("./strategies");async function sampleFkValues(db,fk){if(!fk)return[];try{const ref=await db.getTableInfo(fk.table);if(!ref.success||!ref.data||!ref.data.columns.length)return[];const refCol=fk.to||ref.data.primaryKey[0]||ref.data.columns[0].name;if(!refCol)return[];return((await db.all(`SELECT DISTINCT ${(0,generator_1.quoteIdentifier)(refCol)} AS v FROM ${(0,generator_1.quoteIdentifier)(fk.table)} WHERE ${(0,generator_1.quoteIdentifier)(refCol)} IS NOT NULL LIMIT 1000`)).data??[]).map(row=>row.v).filter(v=>null!=v)}catch{return[]}}function stringifyKey(v){return v instanceof Uint8Array||Buffer.isBuffer(v)?`buf:${Buffer.from(v).toString("hex")}`:`${typeof v}:${String(v)}`}function uniqueSuffix(base,seen){if("number"==typeof base&&Number.isFinite(base)){let n=Number(base);for(;seen.has(stringifyKey(n));)n+=1;return n}let i=1,cand=`${String(base)}-${i}`;for(;seen.has(stringifyKey(cand));)i+=1,cand=`${String(base)}-${i}`;return cand}function orderedValue(value,base,dir,orEqual){const v=value,b=base;if("string"==typeof v&&"string"==typeof b){const tv=Date.parse(v),tb=Date.parse(b);if(Number.isFinite(tv)&&Number.isFinite(tb)){if("after"===dir){if(orEqual?tv<tb:tv<=tb)return new Date(tb+1e3).toISOString()}else if(orEqual?tv>tb:tv>=tb)return new Date(tb-1e3).toISOString();return v}if(/^\d{4}-\d{2}-\d{2}$/.test(v)&&/^\d{4}-\d{2}-\d{2}$/.test(b)){const dv=Date.parse(`${v}T00:00:00Z`),db=Date.parse(`${b}T00:00:00Z`);if("after"===dir){if(orEqual?dv<db:dv<=db)return new Date(db+864e5).toISOString().slice(0,10)}else if(orEqual?dv>db:dv>=db)return new Date(db-864e5).toISOString().slice(0,10);return v}}return"number"==typeof v&&"number"==typeof b?"after"===dir?orEqual?Math.max(v,b):Math.max(v,b+1):orEqual?Math.min(v,b):Math.min(v,b-1):v}function applyOrdering(fields,ordering){if(!ordering.size)return;const byCol=new Map(fields.map(f=>[f.column,f]));for(const f of fields){const rel=ordering.get(f.column);if(rel){if(rel.after&&null!=f.value){const other=byCol.get(rel.after.column);other&&null!=other.value&&(f.value=orderedValue(f.value,other.value,"after",rel.after.orEqual))}if(rel.before&&null!=f.value){const other=byCol.get(rel.before.column);other&&null!=other.value&&(f.value=orderedValue(f.value,other.value,"before",rel.before.orEqual))}}}}
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateRows = generateRows;
4
+ exports.buildSeedInsertSql = buildSeedInsertSql;
5
+ const generator_1 = require("../sql/generator");
6
+ const types_1 = require("./types");
7
+ const detector_1 = require("./detector");
8
+ const strategies_1 = require("./strategies");
9
+ async function sampleFkValues(db, fk) {
10
+ if (!fk)
11
+ return [];
12
+ try {
13
+ const ref = await db.getTableInfo(fk.table);
14
+ if (!ref.success || !ref.data || !ref.data.columns.length)
15
+ return [];
16
+ const refCol = fk.to || ref.data.primaryKey[0] || ref.data.columns[0].name;
17
+ if (!refCol)
18
+ return [];
19
+ const r = await db.all(`SELECT DISTINCT ${(0, generator_1.quoteIdentifier)(refCol)} AS v FROM ${(0, generator_1.quoteIdentifier)(fk.table)} WHERE ${(0, generator_1.quoteIdentifier)(refCol)} IS NOT NULL LIMIT 1000`);
20
+ return (r.data ?? []).map((row) => row.v).filter((v) => v != null);
21
+ }
22
+ catch {
23
+ return [];
24
+ }
25
+ }
26
+ function stringifyKey(v) {
27
+ if (v instanceof Uint8Array || Buffer.isBuffer(v))
28
+ return `buf:${Buffer.from(v).toString('hex')}`;
29
+ return `${typeof v}:${String(v)}`;
30
+ }
31
+ function orderedValue(value, base, dir, orEqual) {
32
+ const v = value;
33
+ const b = base;
34
+ if (typeof v === 'string' && typeof b === 'string') {
35
+ const tv = Date.parse(v);
36
+ const tb = Date.parse(b);
37
+ if (Number.isFinite(tv) && Number.isFinite(tb)) {
38
+ if (dir === 'after') {
39
+ if (orEqual ? tv < tb : tv <= tb)
40
+ return new Date(tb + 1000).toISOString();
41
+ }
42
+ else if (orEqual ? tv > tb : tv >= tb) {
43
+ return new Date(tb - 1000).toISOString();
44
+ }
45
+ return v;
46
+ }
47
+ if (/^\d{4}-\d{2}-\d{2}$/.test(v) && /^\d{4}-\d{2}-\d{2}$/.test(b)) {
48
+ const dv = Date.parse(`${v}T00:00:00Z`);
49
+ const db = Date.parse(`${b}T00:00:00Z`);
50
+ if (dir === 'after') {
51
+ if (orEqual ? dv < db : dv <= db)
52
+ return new Date(db + 86400_000).toISOString().slice(0, 10);
53
+ }
54
+ else if (orEqual ? dv > db : dv >= db) {
55
+ return new Date(db - 86400_000).toISOString().slice(0, 10);
56
+ }
57
+ return v;
58
+ }
59
+ }
60
+ if (typeof v === 'number' && typeof b === 'number') {
61
+ if (dir === 'after')
62
+ return orEqual ? Math.max(v, b) : Math.max(v, b + 1);
63
+ return orEqual ? Math.min(v, b) : Math.min(v, b - 1);
64
+ }
65
+ return v;
66
+ }
67
+ function fitStringLength(val, len) {
68
+ if (!len || typeof val !== 'string')
69
+ return val;
70
+ let v = val;
71
+ if (len.exact != null) {
72
+ if (v.length > len.exact)
73
+ v = v.slice(0, len.exact);
74
+ const chars = 'abcdefghijklmnopqrstuvwxyz0123456789';
75
+ while (v.length < len.exact) {
76
+ v += chars[Math.floor(Math.random() * chars.length)];
77
+ }
78
+ return v;
79
+ }
80
+ if (len.max != null && v.length > len.max) {
81
+ v = v.slice(0, len.max);
82
+ }
83
+ if (len.min != null && v.length < len.min) {
84
+ const chars = 'abcdefghijklmnopqrstuvwxyz0123456789';
85
+ while (v.length < len.min) {
86
+ v += chars[Math.floor(Math.random() * chars.length)];
87
+ }
88
+ }
89
+ return v;
90
+ }
91
+ function applyOrdering(fields, ordering) {
92
+ if (!ordering.size)
93
+ return;
94
+ const byCol = new Map(fields.map((f) => [f.column, f]));
95
+ for (const f of fields) {
96
+ const rel = ordering.get(f.column);
97
+ if (!rel)
98
+ continue;
99
+ if (rel.after && f.value != null) {
100
+ const other = byCol.get(rel.after.column);
101
+ if (other && other.value != null)
102
+ f.value = orderedValue(f.value, other.value, 'after', rel.after.orEqual);
103
+ }
104
+ if (rel.before && f.value != null) {
105
+ const other = byCol.get(rel.before.column);
106
+ if (other && other.value != null)
107
+ f.value = orderedValue(f.value, other.value, 'before', rel.before.orEqual);
108
+ }
109
+ }
110
+ }
111
+ async function generateRows(db, info, configs, count, plan = {}, truncate = false) {
112
+ const fkByColumn = new Map();
113
+ for (const fk of info.foreignKeys)
114
+ fkByColumn.set(fk.from, fk);
115
+ const uniqueCols = new Set();
116
+ for (const cfg of configs)
117
+ if (cfg.unique)
118
+ uniqueCols.add(cfg.name);
119
+ const checkInfo = (0, detector_1.parseChecks)(info.sql ?? null);
120
+ const warnings = [];
121
+ const prepared = [];
122
+ const fkPools = new Map();
123
+ const fkOmit = new Set();
124
+ for (const col of info.columns) {
125
+ const cfg = configs.find((c) => c.name === col.name);
126
+ const raw = plan[col.name];
127
+ const p = raw && raw.strategy ? raw : (cfg?.defaultPlan ?? { strategy: 'skip' });
128
+ if (p.strategy === 'list' && (!p.values || !p.values.length)) {
129
+ const allowed = (0, detector_1.findInMap)(checkInfo.columnAllowed, col.name);
130
+ if (allowed && allowed.length) {
131
+ p.values = [...allowed];
132
+ }
133
+ }
134
+ if (!cfg || !cfg.strategies.some((s) => s.id === p.strategy)) {
135
+ throw new Error(`Unsupported generator strategy "${p.strategy}" for column "${col.name}".`);
136
+ }
137
+ if (p.strategy === 'list' && !(p.values ?? []).some((v) => String(v).trim() !== '')) {
138
+ warnings.push(`Column "${col.name}": the list is empty, so it will be skipped (DB default applies).`);
139
+ }
140
+ if ((p.strategy === 'skip' || p.strategy === 'null') && !col.pk && col.notnull && col.dflt_value == null) {
141
+ warnings.push(`Column "${col.name}" is NOT NULL without a default — "${p.strategy}" rows may fail to insert.`);
142
+ }
143
+ if (p.strategy === 'fk') {
144
+ const pool = await sampleFkValues(db, fkByColumn.get(col.name) ?? null);
145
+ fkPools.set(col.name, pool);
146
+ const refTable = fkByColumn.get(col.name)?.table ?? '?';
147
+ if (!pool.length) {
148
+ if (col.notnull && !col.pk) {
149
+ fkOmit.add(col.name);
150
+ warnings.push(`Column "${col.name}" is a NOT NULL foreign key to "${refTable}", which has no rows. It is omitted from generated rows — seed "${refTable}" first so the insert can reference real values.`);
151
+ }
152
+ else {
153
+ warnings.push(`Column "${col.name}": "${refTable}" is empty, so NULL will be inserted.`);
154
+ }
155
+ }
156
+ }
157
+ prepared.push({ col, plan: p });
158
+ }
159
+ const rows = [];
160
+ const previewRows = [];
161
+ const uniqueSeen = new Map();
162
+ if (!truncate) {
163
+ for (const col of uniqueCols) {
164
+ try {
165
+ const existing = await db.all(`SELECT ${(0, generator_1.quoteIdentifier)(col)} AS v FROM ${(0, generator_1.quoteIdentifier)(info.table)} WHERE ${(0, generator_1.quoteIdentifier)(col)} IS NOT NULL LIMIT 10000`);
166
+ const seen = new Set();
167
+ for (const r of (existing.data ?? [])) {
168
+ if (r.v != null)
169
+ seen.add(stringifyKey(r.v));
170
+ }
171
+ uniqueSeen.set(col, seen);
172
+ }
173
+ catch { }
174
+ }
175
+ }
176
+ for (let i = 0; i < count; i++) {
177
+ const fields = [];
178
+ const previewRow = {};
179
+ let rowValid = true;
180
+ let attempt = 0;
181
+ while (attempt < 100 && rowValid) {
182
+ fields.length = 0;
183
+ let allColsValid = true;
184
+ for (const { col, plan: p } of prepared) {
185
+ if (p.strategy === 'fk' && fkOmit.has(col.name)) {
186
+ previewRow[col.name] = null;
187
+ continue;
188
+ }
189
+ let v = (0, strategies_1.generateOne)(col, p, fkPools.get(col.name), i + attempt * count);
190
+ if (v === types_1.SKIP) {
191
+ previewRow[col.name] = '(default)';
192
+ continue;
193
+ }
194
+ if (uniqueCols.has(col.name)) {
195
+ const seen = uniqueSeen.get(col.name) ?? new Set();
196
+ let singleAtt = 0;
197
+ while (seen.has(stringifyKey(v)) && singleAtt < 100) {
198
+ v = (0, strategies_1.generateOne)(col, p, fkPools.get(col.name), i + attempt * count + singleAtt * 100);
199
+ singleAtt += 1;
200
+ }
201
+ if (seen.has(stringifyKey(v))) {
202
+ allColsValid = false;
203
+ break;
204
+ }
205
+ }
206
+ v = fitStringLength(v, (0, detector_1.findInMap)(checkInfo.columnLength, col.name));
207
+ fields.push({ column: col.name, value: v });
208
+ previewRow[col.name] = v;
209
+ }
210
+ if (allColsValid) {
211
+ break;
212
+ }
213
+ attempt += 1;
214
+ }
215
+ if (attempt >= 100) {
216
+ warnings.push(`Stopped generating rows early at row ${i} because unique generator exhausted possible values without collision.`);
217
+ break;
218
+ }
219
+ for (const f of fields) {
220
+ if (uniqueCols.has(f.column)) {
221
+ const seen = uniqueSeen.get(f.column) ?? new Set();
222
+ seen.add(stringifyKey(f.value));
223
+ uniqueSeen.set(f.column, seen);
224
+ }
225
+ }
226
+ applyOrdering(fields, checkInfo.ordering);
227
+ for (const f of fields) {
228
+ previewRow[f.column] = f.value;
229
+ }
230
+ rows.push(fields);
231
+ if (previewRows.length < 50) {
232
+ previewRows.push(previewRow);
233
+ }
234
+ }
235
+ return { rows, previewRows, warnings };
236
+ }
237
+ function buildSeedInsertSql(table, rows) {
238
+ return rows
239
+ .map((fields) => {
240
+ const cols = fields.map((f) => (0, generator_1.quoteIdentifier)(f.column));
241
+ const vals = fields.map((f) => (0, generator_1.sqlValue)(f.value));
242
+ return `INSERT INTO ${(0, generator_1.quoteIdentifier)(table)} (${cols.join(', ')}) VALUES (${vals.join(', ')});`;
243
+ })
244
+ .join('\n');
245
+ }
@@ -1 +1 @@
1
- export * from './types';export * from './datasets';export * from './strategies';export * from './detector';export * from './engine';
1
+ export * from './types';export * from './datasets';export * from './strategies';export * from './detector';export * from './engine';export * from './chain';
@@ -1 +1,22 @@
1
- var __createBinding=this&&this.__createBinding||(Object.create?function(o,m,k,k2){void 0===k2&&(k2=k);var desc=Object.getOwnPropertyDescriptor(m,k);desc&&!("get"in desc?!m.__esModule:desc.writable||desc.configurable)||(desc={enumerable:!0,get:function(){return m[k]}}),Object.defineProperty(o,k2,desc)}:function(o,m,k,k2){void 0===k2&&(k2=k),o[k2]=m[k]}),__exportStar=this&&this.__exportStar||function(m,exports){for(var p in m)"default"===p||Object.prototype.hasOwnProperty.call(exports,p)||__createBinding(exports,m,p)};Object.defineProperty(exports,"__esModule",{value:!0}),__exportStar(require("./types"),exports),__exportStar(require("./datasets"),exports),__exportStar(require("./strategies"),exports),__exportStar(require("./detector"),exports),__exportStar(require("./engine"),exports);
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./types"), exports);
18
+ __exportStar(require("./datasets"), exports);
19
+ __exportStar(require("./strategies"), exports);
20
+ __exportStar(require("./detector"), exports);
21
+ __exportStar(require("./engine"), exports);
22
+ __exportStar(require("./chain"), exports);
@@ -1 +1 @@
1
- import type {ColumnInfo,ForeignKeyInfo} from '../db/index';import{type ColumnPlan,type StrategyDescriptor} from './types';export declare const randInt:(min:number,max:number)=>number;export declare const randFloat:(min:number,max:number)=>number;export declare const pick:<T>(arr:T[])=>T;export declare const makeSlug:()=>string;export declare const makeEmail:()=>string;export declare const makeUsername:()=>string;export declare const makePhone:()=>string;export declare const makeAddress:()=>string;export declare const makeIp:()=>string;export declare function makeMacAddress():string;export declare const makeCreditCard:()=>string;export declare const makeAvatar:(seedVal?:string)=>string;export declare const makeColor:(format?:string)=>string;export declare function makeUuid():string;export declare function makeWords(minLen:number,maxLen:number):string;export declare function makeSentences(minLen:number,maxLen:number):string;export declare const makeParagraph:()=>string;export declare function formatPattern(pattern:string):string;export declare function randomDate( from ?:string,to?:string,kind?:'date'|'datetime'):string;export declare const randomTime:()=>string;export declare function randomUnixTimestamp(format?:string, from ?:string,to?:string):number;export declare function randomAlnum(minLen:number,maxLen:number):string;export declare function makeJsonObject(keys?:string[],jsonValues?:Record<string,string[]>):string;export declare function isTextishType(type:string):boolean;export declare function strategiesFor(col:ColumnInfo,fk:ForeignKeyInfo|null):StrategyDescriptor[];export declare function fallbackPlanFor(col:ColumnInfo):ColumnPlan;export declare function generateOne(col:ColumnInfo,p:ColumnPlan,fkPool?:unknown[],rowIndex?:number):unknown;export declare function generateSampleValue(col:ColumnInfo,plan:ColumnPlan,fkPool?:unknown[]):unknown;
1
+ import type {ColumnInfo,ForeignKeyInfo} from '../db/index';import{type ColumnPlan,type StrategyDescriptor} from './types';export declare const randInt:(min:number,max:number)=>number;export declare const randFloat:(min:number,max:number)=>number;export declare const pick:<T>(arr:T[])=>T;export declare const makeSlug:()=>string;export declare const makeEmail:(idx?:number)=>string;export declare const makeUsername:(idx?:number)=>string;export declare const makePhone:()=>string;export declare const makeAddress:()=>string;export declare const makeIp:()=>string;export declare function makeMacAddress():string;export declare const makeCreditCard:()=>string;export declare const makeAvatar:(seedVal?:string)=>string;export declare const makeColor:(format?:string)=>string;export declare function makeUuid():string;export declare function makeWords(minLen:number,maxLen:number):string;export declare function makeSentences(minLen:number,maxLen:number):string;export declare const makeParagraph:()=>string;export declare function formatPattern(pattern:string):string;export declare function randomDate( from ?:string,to?:string,kind?:'date'|'datetime'):string;export declare const randomTime:()=>string;export declare function randomUnixTimestamp(format?:string, from ?:string,to?:string):number;export declare function randomAlnum(minLen:number,maxLen:number):string;export declare function makeJsonObject(keys?:string[],jsonValues?:Record<string,string[]>):string;export declare function isTextishType(type:string):boolean;export declare function strategiesFor(col:ColumnInfo,fk:ForeignKeyInfo|null):StrategyDescriptor[];export declare function fallbackPlanFor(col:ColumnInfo):ColumnPlan;export declare function generateOne(col:ColumnInfo,p:ColumnPlan,fkPool?:unknown[],rowIndex?:number):unknown;export declare function generateSampleValue(col:ColumnInfo,plan:ColumnPlan,fkPool?:unknown[]):unknown;