admindb 1.2.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (202) hide show
  1. package/README.md +250 -352
  2. package/dist/app.d.ts +25 -4
  3. package/dist/app.js +79 -15
  4. package/dist/app.js.map +1 -1
  5. package/dist/auth/config.d.ts +19 -0
  6. package/dist/auth/config.js +147 -0
  7. package/dist/auth/config.js.map +1 -0
  8. package/dist/auth/crypto.d.ts +27 -0
  9. package/dist/auth/crypto.js +133 -0
  10. package/dist/auth/crypto.js.map +1 -0
  11. package/dist/auth/index.d.ts +5 -0
  12. package/dist/auth/index.js +22 -0
  13. package/dist/auth/index.js.map +1 -0
  14. package/dist/auth/middleware.d.ts +14 -0
  15. package/dist/auth/middleware.js +100 -0
  16. package/dist/auth/middleware.js.map +1 -0
  17. package/dist/auth/routes.d.ts +7 -0
  18. package/dist/auth/routes.js +78 -0
  19. package/dist/auth/routes.js.map +1 -0
  20. package/dist/auth/types.d.ts +35 -0
  21. package/dist/auth/types.js +11 -0
  22. package/dist/auth/types.js.map +1 -0
  23. package/dist/cli/args.d.ts +45 -0
  24. package/dist/cli/args.js +328 -0
  25. package/dist/cli/args.js.map +1 -0
  26. package/dist/cli/config.d.ts +56 -0
  27. package/dist/cli/config.js +133 -0
  28. package/dist/cli/config.js.map +1 -0
  29. package/dist/cli/index.d.ts +4 -0
  30. package/dist/cli/index.js +21 -0
  31. package/dist/cli/index.js.map +1 -0
  32. package/dist/cli/runner.d.ts +1 -0
  33. package/dist/cli/runner.js +222 -0
  34. package/dist/cli/runner.js.map +1 -0
  35. package/dist/cli.js +2 -127
  36. package/dist/cli.js.map +1 -1
  37. package/dist/data/datasets.d.ts +17 -0
  38. package/dist/data/datasets.js +133 -0
  39. package/dist/data/datasets.js.map +1 -0
  40. package/dist/data/detector.d.ts +30 -0
  41. package/dist/data/detector.js +472 -0
  42. package/dist/data/detector.js.map +1 -0
  43. package/dist/data/engine.d.ts +10 -0
  44. package/dist/data/engine.js +211 -0
  45. package/dist/data/engine.js.map +1 -0
  46. package/dist/data/index.d.ts +5 -0
  47. package/dist/data/index.js +22 -0
  48. package/dist/data/index.js.map +1 -0
  49. package/dist/data/strategies.d.ts +30 -0
  50. package/dist/data/strategies.js +343 -0
  51. package/dist/data/strategies.js.map +1 -0
  52. package/dist/data/types.d.ts +73 -0
  53. package/dist/data/types.js +8 -0
  54. package/dist/data/types.js.map +1 -0
  55. package/dist/db/database.d.ts +14 -142
  56. package/dist/db/database.js +209 -435
  57. package/dist/db/database.js.map +1 -1
  58. package/dist/db/export.d.ts +2 -2
  59. package/dist/db/export.js +7 -2
  60. package/dist/db/export.js.map +1 -1
  61. package/dist/db/filters.d.ts +22 -0
  62. package/dist/db/filters.js +158 -0
  63. package/dist/db/filters.js.map +1 -0
  64. package/dist/db/index.d.ts +8 -0
  65. package/dist/db/index.js +25 -0
  66. package/dist/db/index.js.map +1 -0
  67. package/dist/db/introspection.d.ts +6 -0
  68. package/dist/db/introspection.js +172 -0
  69. package/dist/db/introspection.js.map +1 -0
  70. package/dist/db/manager.d.ts +32 -19
  71. package/dist/db/manager.js +203 -44
  72. package/dist/db/manager.js.map +1 -1
  73. package/dist/db/migrations.d.ts +5 -0
  74. package/dist/db/migrations.js +110 -0
  75. package/dist/db/migrations.js.map +1 -0
  76. package/dist/db/postgres.d.ts +85 -0
  77. package/dist/db/postgres.js +745 -0
  78. package/dist/db/postgres.js.map +1 -0
  79. package/dist/db/types.d.ts +206 -0
  80. package/dist/db/types.js +7 -0
  81. package/dist/db/types.js.map +1 -0
  82. package/dist/index.d.ts +9 -2
  83. package/dist/index.js +46 -4
  84. package/dist/index.js.map +1 -1
  85. package/dist/public/css/app.css +1 -1
  86. package/dist/public/css/input.css +83 -13
  87. package/dist/public/js/app.js +142 -0
  88. package/dist/public/js/browse.js +591 -104
  89. package/dist/public/js/databases.js +105 -13
  90. package/dist/public/js/designer.js +40 -2
  91. package/dist/public/js/forms.js +610 -28
  92. package/dist/public/js/icons.js +51 -0
  93. package/dist/public/js/inspector.js +638 -0
  94. package/dist/public/js/query.js +93 -3
  95. package/dist/public/js/schema.js +170 -52
  96. package/dist/public/js/seed.js +1090 -0
  97. package/dist/routes/api/helpers.d.ts +42 -0
  98. package/dist/routes/api/helpers.js +133 -0
  99. package/dist/routes/api/helpers.js.map +1 -0
  100. package/dist/routes/api/import-export.d.ts +3 -0
  101. package/dist/routes/api/import-export.js +85 -0
  102. package/dist/routes/api/import-export.js.map +1 -0
  103. package/dist/routes/api/index.d.ts +4 -0
  104. package/dist/routes/api/index.js +37 -0
  105. package/dist/routes/api/index.js.map +1 -0
  106. package/dist/routes/api/query.d.ts +3 -0
  107. package/dist/routes/api/query.js +76 -0
  108. package/dist/routes/api/query.js.map +1 -0
  109. package/dist/routes/api/rows.d.ts +3 -0
  110. package/dist/routes/api/rows.js +373 -0
  111. package/dist/routes/api/rows.js.map +1 -0
  112. package/dist/routes/api/seed.d.ts +3 -0
  113. package/dist/routes/api/seed.js +82 -0
  114. package/dist/routes/api/seed.js.map +1 -0
  115. package/dist/routes/api/tables.d.ts +3 -0
  116. package/dist/routes/api/tables.js +160 -0
  117. package/dist/routes/api/tables.js.map +1 -0
  118. package/dist/routes/databases.d.ts +8 -11
  119. package/dist/routes/databases.js +100 -66
  120. package/dist/routes/databases.js.map +1 -1
  121. package/dist/routes/index.d.ts +3 -0
  122. package/dist/routes/index.js +20 -0
  123. package/dist/routes/index.js.map +1 -0
  124. package/dist/routes/pages.d.ts +3 -3
  125. package/dist/routes/pages.js +163 -54
  126. package/dist/routes/pages.js.map +1 -1
  127. package/dist/serverless.d.ts +40 -0
  128. package/dist/serverless.js +210 -0
  129. package/dist/serverless.js.map +1 -0
  130. package/dist/sql/generator.d.ts +4 -3
  131. package/dist/sql/generator.js +103 -6
  132. package/dist/sql/generator.js.map +1 -1
  133. package/dist/sql/index.d.ts +2 -0
  134. package/dist/sql/index.js +19 -0
  135. package/dist/sql/index.js.map +1 -0
  136. package/dist/types/api.d.ts +412 -0
  137. package/dist/types/api.js +9 -0
  138. package/dist/types/api.js.map +1 -0
  139. package/dist/utils/colors.d.ts +40 -0
  140. package/dist/utils/colors.js +64 -0
  141. package/dist/utils/colors.js.map +1 -0
  142. package/dist/{util.d.ts → utils/common.d.ts} +10 -6
  143. package/dist/{util.js → utils/common.js} +80 -13
  144. package/dist/utils/common.js.map +1 -0
  145. package/dist/utils/csv.js.map +1 -0
  146. package/dist/utils/datatype.d.ts +49 -0
  147. package/dist/utils/datatype.js +222 -0
  148. package/dist/utils/datatype.js.map +1 -0
  149. package/dist/utils/icons.d.ts +11 -0
  150. package/dist/utils/icons.js +72 -0
  151. package/dist/utils/icons.js.map +1 -0
  152. package/dist/utils/index.d.ts +4 -0
  153. package/dist/utils/index.js +21 -0
  154. package/dist/utils/index.js.map +1 -0
  155. package/dist/{logger.d.ts → utils/logger.d.ts} +1 -1
  156. package/dist/utils/logger.js +40 -0
  157. package/dist/utils/logger.js.map +1 -0
  158. package/dist/views/layouts/main.hbs +33 -11
  159. package/dist/views/pages/databases.hbs +182 -74
  160. package/dist/views/pages/designer.hbs +9 -6
  161. package/dist/views/pages/error.hbs +3 -3
  162. package/dist/views/pages/form.hbs +5 -3
  163. package/dist/views/pages/home.hbs +22 -13
  164. package/dist/views/pages/login.hbs +111 -0
  165. package/dist/views/pages/query.hbs +10 -8
  166. package/dist/views/pages/schema.hbs +41 -13
  167. package/dist/views/pages/seed.hbs +232 -0
  168. package/dist/views/pages/table.hbs +155 -70
  169. package/dist/views/partials/icon.hbs +2 -0
  170. package/dist/views/partials/navbar.hbs +70 -31
  171. package/dist/views/partials/sidebar.hbs +108 -99
  172. package/package.json +12 -5
  173. package/dist/args.d.ts +0 -28
  174. package/dist/args.js +0 -187
  175. package/dist/args.js.map +0 -1
  176. package/dist/config.d.ts +0 -17
  177. package/dist/config.js +0 -23
  178. package/dist/config.js.map +0 -1
  179. package/dist/csv.js.map +0 -1
  180. package/dist/logger.js +0 -25
  181. package/dist/logger.js.map +0 -1
  182. package/dist/routes/api.d.ts +0 -9
  183. package/dist/routes/api.js +0 -786
  184. package/dist/routes/api.js.map +0 -1
  185. package/dist/test/classifier.test.d.ts +0 -1
  186. package/dist/test/classifier.test.js +0 -44
  187. package/dist/test/classifier.test.js.map +0 -1
  188. package/dist/test/csv.test.d.ts +0 -1
  189. package/dist/test/csv.test.js +0 -64
  190. package/dist/test/csv.test.js.map +0 -1
  191. package/dist/test/database.test.d.ts +0 -1
  192. package/dist/test/database.test.js +0 -402
  193. package/dist/test/database.test.js.map +0 -1
  194. package/dist/test/generator.test.d.ts +0 -1
  195. package/dist/test/generator.test.js +0 -132
  196. package/dist/test/generator.test.js.map +0 -1
  197. package/dist/test/manager.test.d.ts +0 -1
  198. package/dist/test/manager.test.js +0 -146
  199. package/dist/test/manager.test.js.map +0 -1
  200. package/dist/util.js.map +0 -1
  201. /package/dist/{csv.d.ts → utils/csv.d.ts} +0 -0
  202. /package/dist/{csv.js → utils/csv.js} +0 -0
@@ -0,0 +1,472 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.normName = void 0;
4
+ exports.isTimestampName = isTimestampName;
5
+ exports.findInMap = findInMap;
6
+ exports.extractCheckExprs = extractCheckExprs;
7
+ exports.parseChecks = parseChecks;
8
+ exports.detectPlan = detectPlan;
9
+ exports.buildColumnConfigs = buildColumnConfigs;
10
+ exports.sanitizeColumnPlan = sanitizeColumnPlan;
11
+ const strategies_1 = require("./strategies");
12
+ const normName = (s) => String(s).toLowerCase().replace(/[^a-z0-9]/g, '');
13
+ exports.normName = normName;
14
+ function isTimestampName(name) {
15
+ return (/created|updated|modified|registered|joined|timestamp|lastused|lastseen|lastlogin|lastactivity|accessed|viewed|visited|^ts$/.test(name) ||
16
+ /^(created|updated|deleted|archived|occurred|started|ended|expires|published|processed|completed|inserted|requested|resolved|used|seen|accessed|viewed|visited|logged|active)at$/.test(name));
17
+ }
18
+ function findInMap(map, colName) {
19
+ if (map.has(colName))
20
+ return map.get(colName);
21
+ const lower = colName.toLowerCase();
22
+ for (const [k, v] of map.entries()) {
23
+ if (k.toLowerCase() === lower)
24
+ return v;
25
+ }
26
+ return undefined;
27
+ }
28
+ function extractCheckExprs(sql) {
29
+ const out = [];
30
+ const re = /CHECK\s*\(/gi;
31
+ let m;
32
+ while ((m = re.exec(sql))) {
33
+ let depth = 1;
34
+ let i = m.index + m[0].length;
35
+ const start = i;
36
+ while (i < sql.length && depth > 0) {
37
+ const ch = sql[i];
38
+ if (ch === "'") {
39
+ i += 1;
40
+ while (i < sql.length) {
41
+ if (sql[i] === "'") {
42
+ if (sql[i + 1] === "'")
43
+ i += 2;
44
+ else {
45
+ i += 1;
46
+ break;
47
+ }
48
+ }
49
+ else
50
+ i += 1;
51
+ }
52
+ continue;
53
+ }
54
+ if (ch === '"' || ch === '`' || ch === '[') {
55
+ const close = ch === '[' ? ']' : ch;
56
+ i += 1;
57
+ while (i < sql.length && sql[i] !== close) {
58
+ if (sql[i] === close && sql[i + 1] === close)
59
+ i += 2;
60
+ else
61
+ i += 1;
62
+ }
63
+ i += 1;
64
+ continue;
65
+ }
66
+ if (ch === '(')
67
+ depth += 1;
68
+ else if (ch === ')') {
69
+ depth -= 1;
70
+ if (depth === 0)
71
+ break;
72
+ }
73
+ i += 1;
74
+ }
75
+ out.push(sql.slice(start, i));
76
+ }
77
+ return out;
78
+ }
79
+ function parseChecks(sql) {
80
+ const info = {
81
+ columnAllowed: new Map(),
82
+ columnRange: new Map(),
83
+ jsonAllowed: new Map(),
84
+ ordering: new Map(),
85
+ };
86
+ if (!sql)
87
+ return info;
88
+ const setOrdering = (col, other, key, orEqual) => {
89
+ const c = info.ordering.get(col) ?? {};
90
+ c[key] = { column: other, orEqual };
91
+ info.ordering.set(col, c);
92
+ };
93
+ const setColumnAllowed = (col, vals) => {
94
+ if (!col || !vals.length)
95
+ return;
96
+ const existing = findInMap(info.columnAllowed, col);
97
+ if (existing) {
98
+ for (const v of vals)
99
+ if (!existing.includes(v))
100
+ existing.push(v);
101
+ }
102
+ else {
103
+ info.columnAllowed.set(col, [...vals]);
104
+ }
105
+ };
106
+ for (const expr of extractCheckExprs(sql)) {
107
+ // 1. JSON whitelists
108
+ const jw1 = /(?:"([^"]+)"|`([^`]+)`|\[([^\]]+)\]|([A-Za-z_][A-Za-z0-9_]*))\s*(?:->>|->)\s*'([^']+)'\s*\)*\s*IN\s*\(([^)]*)\)/gi;
109
+ const jw2 = /json_extract\s*\(\s*(?:"([^"]+)"|`([^`]+)`|\[([^\]]+)\]|([A-Za-z_][A-Za-z0-9_]*))\s*,\s*'(?:\$\??|\.)?\.?([^']+)'\s*\)\s*\)*\s*IN\s*\(([^)]*)\)/gi;
110
+ for (const re of [jw1, jw2]) {
111
+ let m;
112
+ while ((m = re.exec(expr))) {
113
+ const col = m[1] || m[2] || m[3] || m[4];
114
+ const key = m[5];
115
+ const inContent = m[6];
116
+ const strValues = (inContent.match(/'(?:[^']|'')*'/g) ?? []).map((s) => s.slice(1, -1).replace(/''/g, "'"));
117
+ const values = strValues.length ? strValues : (inContent.match(/-?\b\d+(?:\.\d+)?\b/g) ?? []);
118
+ if (values.length && col && key) {
119
+ const byCol = findInMap(info.jsonAllowed, col) ?? new Map();
120
+ byCol.set(key, values);
121
+ info.jsonAllowed.set(col, byCol);
122
+ }
123
+ }
124
+ }
125
+ // 2. Direct column IN lists
126
+ const colIn = /(?:^|[^(->>\w])(?:\(\s*)?(?:(?:lower|upper|trim|coalesce)\s*\(\s*)?(?:"([^"]+)"|`([^`]+)`|\[([^\]]+)\]|([A-Za-z_][A-Za-z0-9_]*))(?:\s*,\s*[^)]+)?\s*\)?\s*\)?\s*IN\s*\(([^)]*)\)/gi;
127
+ let mColIn;
128
+ while ((mColIn = colIn.exec(expr))) {
129
+ const col = mColIn[1] || mColIn[2] || mColIn[3] || mColIn[4];
130
+ if (!col || ['json_extract', 'strftime', 'datetime', 'date', 'length', 'typeof'].includes(col.toLowerCase()))
131
+ continue;
132
+ const matchPos = mColIn.index;
133
+ if (expr.slice(Math.max(0, matchPos - 5), matchPos).includes('->'))
134
+ continue;
135
+ const inContent = mColIn[5];
136
+ const strValues = (inContent.match(/'(?:[^']|'')*'/g) ?? []).map((s) => s.slice(1, -1).replace(/''/g, "'"));
137
+ const values = strValues.length ? strValues : (inContent.match(/-?\b\d+(?:\.\d+)?\b/g) ?? []);
138
+ if (values.length)
139
+ setColumnAllowed(col, values);
140
+ }
141
+ // 3. Direct column equality
142
+ const eqOr = /(?:"([^"]+)"|`([^`]+)`|\[([^\]]+)\]|([A-Za-z_][A-Za-z0-9_]*))\s*=\s*'((?:[^']|'')*)'/gi;
143
+ let mEq;
144
+ const eqByCol = new Map();
145
+ while ((mEq = eqOr.exec(expr))) {
146
+ const col = mEq[1] || mEq[2] || mEq[3] || mEq[4];
147
+ const val = mEq[5].replace(/''/g, "'");
148
+ if (col && !['json_extract', 'lower', 'upper', 'trim', 'strftime', 'datetime'].includes(col.toLowerCase())) {
149
+ const cur = eqByCol.get(col) ?? [];
150
+ if (!cur.includes(val))
151
+ cur.push(val);
152
+ eqByCol.set(col, cur);
153
+ }
154
+ }
155
+ for (const [col, vals] of eqByCol.entries())
156
+ setColumnAllowed(col, vals);
157
+ // 4. Numeric range constraints
158
+ const numCmp1 = /(?:"([^"]+)"|`([^`]+)`|\[([^\]]+)\]|([A-Za-z_][A-Za-z0-9_]*))\s*(>=|>|<=|<)\s*(-?\d+(?:\.\d+)?)/g;
159
+ let mNum1;
160
+ while ((mNum1 = numCmp1.exec(expr))) {
161
+ const col = mNum1[1] || mNum1[2] || mNum1[3] || mNum1[4];
162
+ const op = mNum1[5];
163
+ const val = Number(mNum1[6]);
164
+ if (col && Number.isFinite(val) && !['json_extract', 'length', 'strftime', 'datetime'].includes(col.toLowerCase())) {
165
+ const cur = findInMap(info.columnRange, col) ?? {};
166
+ if (op === '>=' || op === '>')
167
+ cur.min = cur.min != null ? Math.max(cur.min, op === '>' ? val + 1 : val) : (op === '>' ? val + 1 : val);
168
+ else
169
+ cur.max = cur.max != null ? Math.min(cur.max, op === '<' ? val - 1 : val) : (op === '<' ? val - 1 : val);
170
+ info.columnRange.set(col, cur);
171
+ }
172
+ }
173
+ // 5. Column ordering
174
+ const ord = /(?:"([^"]+)"|`([^`]+)`|\[([^\]]+)\]|([A-Za-z_][A-Za-z0-9_]*))\s*(>=|<=|>|<)\s*(?:"([^"]+)"|`([^`]+)`|\[([^\]]+)\]|([A-Za-z_][A-Za-z0-9_]*))/g;
175
+ let m2;
176
+ while ((m2 = ord.exec(expr))) {
177
+ const a = m2[1] || m2[2] || m2[3] || m2[4];
178
+ const op = m2[5];
179
+ const b = m2[6] || m2[7] || m2[8] || m2[9];
180
+ if (!a || !b || /^\d+$/.test(a) || /^\d+$/.test(b))
181
+ continue;
182
+ if (['json_extract', 'strftime', 'datetime', 'date', 'length'].includes(a.toLowerCase()))
183
+ continue;
184
+ if (['json_extract', 'strftime', 'datetime', 'date', 'length'].includes(b.toLowerCase()))
185
+ continue;
186
+ if (op === '>' || op === '>=') {
187
+ setOrdering(a, b, 'after', op === '>=');
188
+ setOrdering(b, a, 'before', op === '>=');
189
+ }
190
+ else {
191
+ setOrdering(a, b, 'before', op === '<=');
192
+ setOrdering(b, a, 'after', op === '<=');
193
+ }
194
+ }
195
+ }
196
+ return info;
197
+ }
198
+ const isHashName = (name) => /^(hash|digest|secret|passphrase)$|tokenhash|passwordhash|passhash|accesskey|apikey|api_key|secretkey|clientsecret|appsecret|appid|privatekey|publickey/.test(name);
199
+ const isTokenName = (name) => /^prefix$|tokenprefix|(code|ref|reference|sku|ticketno|ticketnum|orderno|order_no|trackingno|trackingnum|invno|invoiceno|serialno)$/.test(name);
200
+ function isJsonColumn(col, hasJsonIndex) {
201
+ if (!(0, strategies_1.isTextishType)(col.type))
202
+ return false;
203
+ if (hasJsonIndex)
204
+ return true;
205
+ const dflt = String(col.dflt_value ?? '').trim();
206
+ if (dflt.startsWith('{') || dflt.startsWith("'{\""))
207
+ return true;
208
+ const name = (0, exports.normName)(col.name);
209
+ return /^(permissions|settings|config|configuration|preferences|prefs|metadata|meta|attributes|payload|options|allowedapps|socialaccounts|positions|fcmtokens|fcm_tokens|scopes|profile|json|jsonb)$/.test(name) ||
210
+ /(^|_)(settings|config|configuration|permissions|prefs|metadata|attributes|payload|options|allowedapps|scopes|profile)$/.test(name);
211
+ }
212
+ function extractJsonColumns(sql) {
213
+ const out = [];
214
+ const push = (col, key) => {
215
+ let entry = out.find((e) => e.col === col);
216
+ if (!entry) {
217
+ entry = { col, keys: [] };
218
+ out.push(entry);
219
+ }
220
+ if (key) {
221
+ const last = key.split('.').pop().replace(/[\[\]"]/g, '');
222
+ if (last && !entry.keys.includes(last))
223
+ entry.keys.push(last);
224
+ }
225
+ };
226
+ const arrow = /"([^"]+)"\s*(?:->>|->)\s*'([^']+)'|([A-Za-z_][A-Za-z0-9_]*)\s*(?:->>|->)\s*'([^']+)'/g;
227
+ let m;
228
+ while ((m = arrow.exec(sql)))
229
+ push(m[1] || m[3], m[2] || m[4]);
230
+ const jx = /json_extract\s*\(\s*(?:"([^"]+)"|([A-Za-z_][A-Za-z0-9_]*))\s*,\s*'(?:\$\??|\.)?\.?([^']+)'/g;
231
+ while ((m = jx.exec(sql)))
232
+ push(m[1] || m[2], m[3]);
233
+ return out;
234
+ }
235
+ /** Name heuristics pattern table for text-ish columns. */
236
+ const TEXT_PATTERNS = [
237
+ [/avatar|picture|photo|image|img|thumbnail|icon|logo/, () => ({ strategy: 'avatar' })],
238
+ [/company|organization|org|firm|corp|employer|agency/, () => ({ strategy: 'company' })],
239
+ [/job|title|role|position|occupation|profession/, () => ({ strategy: 'job' })],
240
+ [/currency|curr|currencycode/, () => ({ strategy: 'currency' })],
241
+ [/countrycode|countryiso|isocountry|cca2/, () => ({ strategy: 'countryCode' })],
242
+ [/state|province|region/, (n) => (/status|statement/.test(n) ? { strategy: 'status' } : { strategy: 'state' })],
243
+ [/status|stage|phase|state/, () => ({ strategy: 'status' })],
244
+ [/color|colour|theme|hexcolor/, () => ({ strategy: 'color', format: 'hex' })],
245
+ [/mac|macaddress|hwaddr/, () => ({ strategy: 'mac' })],
246
+ [/creditcard|cardnumber|cardno|ccnumber|ccno/, () => ({ strategy: 'creditCard' })],
247
+ [/slug|permalink|handle|alias/, () => ({ strategy: 'slug' })],
248
+ [/(lastname|surname|familyname)/, () => ({ strategy: 'last' })],
249
+ [/email|mail/, () => ({ strategy: 'email' })],
250
+ [/(username|login|handle|nick|nickname|account|user)/, () => ({ strategy: 'username' })],
251
+ [/(phone|mobile|telephone|cell|fax)/, () => ({ strategy: 'phone' })],
252
+ [/city|town/, () => ({ strategy: 'city' })],
253
+ [/country|nation/, () => ({ strategy: 'country' })],
254
+ [/postal|zip/, () => ({ strategy: 'postal' })],
255
+ [/address|street|addr/, () => ({ strategy: 'address' })],
256
+ [/url|website|site|link|homepage|href/, () => ({ strategy: 'url' })],
257
+ [/domain|host/, () => ({ strategy: 'domain' })],
258
+ [/^ip$|ipaddr|ipv4|ip_address/, () => ({ strategy: 'ip' })],
259
+ [/bio|about|overview|article|body|post|story/, () => ({ strategy: 'paragraph' })],
260
+ [/description|content|comment|message|note|summary|details|remarks/, () => ({ strategy: 'sentence', minLen: 1, maxLen: 2 })],
261
+ [/title|subject|category|type|tag|label/, () => ({ strategy: 'words', minLen: 1, maxLen: 3 })],
262
+ ];
263
+ function detectPlan(col, fk) {
264
+ const type = (col.type || '').toUpperCase();
265
+ const rawName = col.name.toLowerCase();
266
+ const name = (0, exports.normName)(col.name);
267
+ if (fk)
268
+ return { strategy: 'fk' };
269
+ if (col.pk) {
270
+ if (type.startsWith('INT') || type === 'SERIAL' || type === 'BIGSERIAL')
271
+ return { strategy: 'skip' };
272
+ if (type === 'TEXT' || type === 'BLOB' || type === 'UUID')
273
+ return { strategy: 'uuid' };
274
+ return { strategy: 'skip' };
275
+ }
276
+ if (type === 'UUID')
277
+ return { strategy: 'uuid' };
278
+ if (type === 'JSON' || type === 'JSONB')
279
+ return { strategy: 'json' };
280
+ if (type === 'INET')
281
+ return { strategy: 'ip' };
282
+ if (type === 'BOOLEAN' || type === 'BOOL')
283
+ return { strategy: 'bool' };
284
+ if (type === 'BYTEA' || type === 'BLOB')
285
+ return { strategy: 'bytes', minLen: 8, maxLen: 32 };
286
+ if ((type.startsWith('INT') || type.startsWith('INTEGER')) && /(^|_)(is|has|can|should|did)_|_flag$|active|enabled|verified|published|deleted|archived|paid|completed|approved/.test(rawName)) {
287
+ return { strategy: 'bool' };
288
+ }
289
+ if (type === 'DATE' || /^date|birthdate|dob|birthday/.test(rawName)) {
290
+ return name.includes('birth') ? { strategy: 'date', from: '1950-01-01', to: '2000-12-31' } : { strategy: 'date', from: '2020-01-01', to: '2026-12-31' };
291
+ }
292
+ if (type === 'DATETIME' || type === 'TIMESTAMP' || isTimestampName(name)) {
293
+ return { strategy: 'datetime', from: '2024-01-01T00:00:00', to: '2026-12-31T23:59:59' };
294
+ }
295
+ if (type === 'TIME' || name === 'time')
296
+ return { strategy: 'time' };
297
+ if (type.startsWith('INTEGER') && /(timestamp|epoch|unix|createdtime|updatedtime)/.test(name)) {
298
+ return { strategy: 'timestampUnix', format: 'sec' };
299
+ }
300
+ if (/^(lat|latitude)$/.test(name))
301
+ return { strategy: 'latitude' };
302
+ if (/^(lng|lon|longitude)$/.test(name))
303
+ return { strategy: 'longitude' };
304
+ if (type.startsWith('INTEGER')) {
305
+ if (name.includes('year'))
306
+ return { strategy: 'int', min: 1990, max: 2026 };
307
+ if (name.includes('age'))
308
+ return { strategy: 'int', min: 18, max: 90 };
309
+ if (/(count|quantity|qty|stock|views|likes|total|num|number)$/.test(name))
310
+ return { strategy: 'int', min: 0, max: 100000 };
311
+ if (name.includes('rating') || name.includes('score'))
312
+ return { strategy: 'int', min: 1, max: 5 };
313
+ if (/(order|rank|position|seq|sequence|priority|sort|step)$/.test(name))
314
+ return { strategy: 'sequence', start: 1, step: 1 };
315
+ return { strategy: 'int', min: 1, max: 1000 };
316
+ }
317
+ if (type === 'REAL' || type.includes('DECIMAL') || type.includes('NUMERIC') || type.includes('FLOAT') || type.includes('DOUBLE')) {
318
+ if (/(price|cost|amount|total|salary|balance|fee|charge|budget)/.test(name))
319
+ return { strategy: 'decimal', min: 1, max: 5000, precision: 2 };
320
+ if (name.includes('rating'))
321
+ return { strategy: 'decimal', min: 1, max: 5, precision: 1 };
322
+ return { strategy: 'decimal', min: 1, max: 1000, precision: 2 };
323
+ }
324
+ if (type === 'BLOB')
325
+ return { strategy: 'bytes', minLen: 8, maxLen: 32 };
326
+ // Explicit text heuristics checked in exact order
327
+ if (/currency|curr|currencycode/.test(name))
328
+ return { strategy: 'currency' };
329
+ if (/countrycode|countryiso|isocountry|cca2/.test(name))
330
+ return { strategy: 'countryCode' };
331
+ if (/state|province|region/.test(name) && !/status|statement/.test(name))
332
+ return { strategy: 'state' };
333
+ if (/status|stage|phase|state/.test(name))
334
+ return { strategy: 'status' };
335
+ if (/color|colour|theme|hexcolor/.test(name))
336
+ return { strategy: 'color', format: 'hex' };
337
+ if (/mac|macaddress|hwaddr/.test(name))
338
+ return { strategy: 'mac' };
339
+ if (/creditcard|cardnumber|cardno|ccnumber|ccno/.test(name))
340
+ return { strategy: 'creditCard' };
341
+ if (/slug|permalink|handle|alias/.test(name))
342
+ return { strategy: 'slug' };
343
+ if (isHashName(name))
344
+ return { strategy: 'hash', minLen: 32, maxLen: 64 };
345
+ if (isTokenName(name))
346
+ return { strategy: 'token', minLen: 6, maxLen: 12 };
347
+ if (/uuid|guid/.test(name) || name === 'id' || name === 'uid' || name === 'key')
348
+ return { strategy: 'uuid' };
349
+ if (name.includes('first') && name.includes('name'))
350
+ return { strategy: 'first' };
351
+ if (/(lastname|surname|familyname)/.test(name) || (name.includes('last') && name.includes('name')))
352
+ return { strategy: 'last' };
353
+ if (name === 'name' || name === 'fullname' || (name.includes('full') && name.includes('name')))
354
+ return { strategy: 'fullname' };
355
+ for (const [pattern, createPlan] of TEXT_PATTERNS) {
356
+ if (pattern.test(name))
357
+ return createPlan(name);
358
+ }
359
+ return { strategy: 'words', minLen: 1, maxLen: 4 };
360
+ }
361
+ function buildColumnConfigs(info) {
362
+ const fkByColumn = new Map(info.foreignKeys.map((fk) => [fk.from, fk]));
363
+ const uniqueCols = new Set();
364
+ const jsonIndexKeys = new Map();
365
+ for (const ix of info.indexes ?? []) {
366
+ if (ix.unique && ix.columns.length === 1 && ix.columns[0])
367
+ uniqueCols.add(ix.columns[0]);
368
+ if (ix.sql && /json_extract|->>|->\s*'|json_/i.test(ix.sql)) {
369
+ for (const { col, keys } of extractJsonColumns(ix.sql)) {
370
+ if (!col)
371
+ continue;
372
+ const merged = new Set([...(jsonIndexKeys.get(col) ?? []), ...keys]);
373
+ if (merged.size)
374
+ jsonIndexKeys.set(col, [...merged]);
375
+ }
376
+ }
377
+ }
378
+ const checkInfo = parseChecks(info.sql ?? null);
379
+ return info.columns.map((col) => {
380
+ const fk = fkByColumn.get(col.name) ?? null;
381
+ const strategies = (0, strategies_1.strategiesFor)(col, fk);
382
+ const unique = uniqueCols.has(col.name);
383
+ let defaultPlan = detectPlan(col, fk);
384
+ if (defaultPlan.strategy !== 'fk' && !col.pk && isJsonColumn(col, jsonIndexKeys.has(col.name))) {
385
+ const keys = jsonIndexKeys.get(col.name);
386
+ const useKeys = keys && keys.length ? keys : ['scope', 'enabled', 'allowedApps'];
387
+ const allowed = findInMap(checkInfo.jsonAllowed, col.name);
388
+ const jsonValues = {};
389
+ if (allowed) {
390
+ for (const k of useKeys) {
391
+ const vals = allowed.get(k);
392
+ if (vals && vals.length)
393
+ jsonValues[k] = vals;
394
+ }
395
+ }
396
+ defaultPlan = {
397
+ strategy: 'json',
398
+ jsonKeys: useKeys,
399
+ ...(Object.keys(jsonValues).length ? { jsonValues } : {}),
400
+ };
401
+ }
402
+ const colAllowed = findInMap(checkInfo.columnAllowed, col.name);
403
+ if (colAllowed && colAllowed.length > 0 && defaultPlan.strategy !== 'fk' && !col.pk) {
404
+ defaultPlan = colAllowed.length === 1 ? { strategy: 'fixed', value: colAllowed[0] } : { strategy: 'list', values: [...colAllowed] };
405
+ }
406
+ const colRange = findInMap(checkInfo.columnRange, col.name);
407
+ if (colRange && (defaultPlan.strategy === 'int' || defaultPlan.strategy === 'decimal')) {
408
+ if (colRange.min != null)
409
+ defaultPlan.min = colRange.min;
410
+ if (colRange.max != null)
411
+ defaultPlan.max = colRange.max;
412
+ }
413
+ if (!strategies.some((s) => s.id === defaultPlan.strategy) || (!col.pk && col.notnull && col.dflt_value == null && (defaultPlan.strategy === 'skip' || defaultPlan.strategy === 'null'))) {
414
+ defaultPlan = (0, strategies_1.fallbackPlanFor)(col);
415
+ }
416
+ return {
417
+ name: col.name,
418
+ type: col.type,
419
+ pk: col.pk > 0,
420
+ notnull: !!col.notnull,
421
+ hasDefault: col.dflt_value != null,
422
+ unique,
423
+ fk,
424
+ strategies,
425
+ defaultPlan,
426
+ };
427
+ });
428
+ }
429
+ const STR_PLAN_KEYS = ['value', 'from', 'to', 'prefix', 'suffix', 'pattern', 'format'];
430
+ const NUM_PLAN_KEYS = ['min', 'max', 'precision', 'minLen', 'maxLen', 'nullPct', 'start', 'step'];
431
+ function sanitizeColumnPlan(raw) {
432
+ if (!raw || typeof raw !== 'object')
433
+ return null;
434
+ const r = raw;
435
+ if (typeof r.strategy !== 'string' || !r.strategy)
436
+ return null;
437
+ const out = { strategy: r.strategy };
438
+ if (r.values !== undefined && r.values !== null && Array.isArray(r.values)) {
439
+ out.values = r.values.map((x) => String(x));
440
+ }
441
+ if (r.jsonKeys !== undefined && r.jsonKeys !== null) {
442
+ const rawKeys = Array.isArray(r.jsonKeys) ? r.jsonKeys.map(String) : String(r.jsonKeys).split(/[,;]/);
443
+ out.jsonKeys = rawKeys.map((s) => s.trim()).filter(Boolean);
444
+ }
445
+ for (const key of STR_PLAN_KEYS) {
446
+ if (r[key] !== undefined && r[key] !== null) {
447
+ out[key] = String(r[key]);
448
+ }
449
+ }
450
+ for (const key of NUM_PLAN_KEYS) {
451
+ if (r[key] !== undefined && r[key] !== null) {
452
+ const n = Number(r[key]);
453
+ if (Number.isFinite(n)) {
454
+ out[key] = n;
455
+ }
456
+ }
457
+ }
458
+ if (r.jsonValues && typeof r.jsonValues === 'object' && !Array.isArray(r.jsonValues)) {
459
+ const jv = {};
460
+ for (const [k, vals] of Object.entries(r.jsonValues)) {
461
+ if (Array.isArray(vals)) {
462
+ const cleaned = vals.map((x) => String(x).trim()).filter(Boolean);
463
+ if (cleaned.length)
464
+ jv[k] = cleaned;
465
+ }
466
+ }
467
+ if (Object.keys(jv).length)
468
+ out.jsonValues = jv;
469
+ }
470
+ return out;
471
+ }
472
+ //# sourceMappingURL=detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detector.js","sourceRoot":"","sources":["../../src/data/detector.ts"],"names":[],"mappings":";;;AA2BA,0CAKC;AAED,8BAOC;AAED,8CAwCC;AAED,kCA8GC;AA8DD,gCAwEC;AAED,gDAqEC;AAKD,gDAsCC;AArbD,6CAA6E;AAmBtE,MAAM,QAAQ,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;AAApF,QAAA,QAAQ,YAA4E;AAEjG,SAAgB,eAAe,CAAC,IAAY;IAC1C,OAAO,CACL,4HAA4H,CAAC,IAAI,CAAC,IAAI,CAAC;QACvI,iLAAiL,CAAC,IAAI,CAAC,IAAI,CAAC,CAC7L,CAAC;AACJ,CAAC;AAED,SAAgB,SAAS,CAAI,GAAmB,EAAE,OAAe;IAC/D,IAAI,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC;QAAE,OAAO,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IACpC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;QACnC,IAAI,CAAC,CAAC,WAAW,EAAE,KAAK,KAAK;YAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAgB,iBAAiB,CAAC,GAAW;IAC3C,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,EAAE,GAAG,cAAc,CAAC;IAC1B,IAAI,CAAyB,CAAC;IAC9B,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QAC1B,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAC9B,MAAM,KAAK,GAAG,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACnC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YAClB,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;gBACf,CAAC,IAAI,CAAC,CAAC;gBACP,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;oBACtB,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;wBACnB,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG;4BAAE,CAAC,IAAI,CAAC,CAAC;6BAC1B,CAAC;4BAAC,CAAC,IAAI,CAAC,CAAC;4BAAC,MAAM;wBAAC,CAAC;oBACzB,CAAC;;wBAAM,CAAC,IAAI,CAAC,CAAC;gBAChB,CAAC;gBACD,SAAS;YACX,CAAC;YACD,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;gBAC3C,MAAM,KAAK,GAAG,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpC,CAAC,IAAI,CAAC,CAAC;gBACP,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC;oBAC1C,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK;wBAAE,CAAC,IAAI,CAAC,CAAC;;wBAChD,CAAC,IAAI,CAAC,CAAC;gBACd,CAAC;gBACD,CAAC,IAAI,CAAC,CAAC;gBACP,SAAS;YACX,CAAC;YACD,IAAI,EAAE,KAAK,GAAG;gBAAE,KAAK,IAAI,CAAC,CAAC;iBACtB,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;gBACpB,KAAK,IAAI,CAAC,CAAC;gBACX,IAAI,KAAK,KAAK,CAAC;oBAAE,MAAM;YACzB,CAAC;YACD,CAAC,IAAI,CAAC,CAAC;QACT,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAgB,WAAW,CAAC,GAAkB;IAC5C,MAAM,IAAI,GAAc;QACtB,aAAa,EAAE,IAAI,GAAG,EAAE;QACxB,WAAW,EAAE,IAAI,GAAG,EAAE;QACtB,WAAW,EAAE,IAAI,GAAG,EAAE;QACtB,QAAQ,EAAE,IAAI,GAAG,EAAE;KACpB,CAAC;IACF,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IAEtB,MAAM,WAAW,GAAG,CAAC,GAAW,EAAE,KAAa,EAAE,GAAuB,EAAE,OAAgB,EAAE,EAAE;QAC5F,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QACvC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;QACpC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC5B,CAAC,CAAC;IAEF,MAAM,gBAAgB,GAAG,CAAC,GAAW,EAAE,IAAc,EAAE,EAAE;QACvD,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;QACjC,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;QACpD,IAAI,QAAQ,EAAE,CAAC;YACb,KAAK,MAAM,CAAC,IAAI,IAAI;gBAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;oBAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpE,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QACzC,CAAC;IACH,CAAC,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1C,qBAAqB;QACrB,MAAM,GAAG,GAAG,mHAAmH,CAAC;QAChI,MAAM,GAAG,GAAG,mJAAmJ,CAAC;QAChK,KAAK,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAyB,CAAC;YAC9B,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;gBAC3B,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACjB,MAAM,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACvB,MAAM,SAAS,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;gBAC5G,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,sBAAsB,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC9F,IAAI,MAAM,CAAC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC;oBAChC,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI,IAAI,GAAG,EAAoB,CAAC;oBAC9E,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;oBACvB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBACnC,CAAC;YACH,CAAC;QACH,CAAC;QAED,4BAA4B;QAC5B,MAAM,KAAK,GAAG,oLAAoL,CAAC;QACnM,IAAI,MAA8B,CAAC;QACnC,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YACnC,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;YAC7D,IAAI,CAAC,GAAG,IAAI,CAAC,cAAc,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;gBAAE,SAAS;YACvH,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC;YAC9B,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAAE,SAAS;YAE7E,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YAC5B,MAAM,SAAS,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;YAC5G,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,sBAAsB,CAAC,IAAI,EAAE,CAAC,CAAC;YAC9F,IAAI,MAAM,CAAC,MAAM;gBAAE,gBAAgB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACnD,CAAC;QAED,4BAA4B;QAC5B,MAAM,IAAI,GAAG,wFAAwF,CAAC;QACtG,IAAI,GAA2B,CAAC;QAChC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAoB,CAAC;QAC5C,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YAC/B,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;YACjD,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YACvC,IAAI,GAAG,IAAI,CAAC,CAAC,cAAc,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;gBAC3G,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;gBACnC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;oBAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACtC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;QACD,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE;YAAE,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAEzE,+BAA+B;QAC/B,MAAM,OAAO,GAAG,kGAAkG,CAAC;QACnH,IAAI,KAA6B,CAAC;QAClC,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YACpC,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;YACzD,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACpB,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7B,IAAI,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;gBACnH,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;gBACnD,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,GAAG;oBAAE,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;;oBACnI,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC9G,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;QAED,qBAAqB;QACrB,MAAM,GAAG,GAAG,8IAA8I,CAAC;QAC3J,IAAI,EAA0B,CAAC;QAC/B,OAAO,CAAC,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YAC7B,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC3C,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YACjB,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC3C,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;gBAAE,SAAS;YAC7D,IAAI,CAAC,cAAc,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;gBAAE,SAAS;YACnG,IAAI,CAAC,cAAc,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;gBAAE,SAAS;YACnG,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;gBAC9B,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,KAAK,IAAI,CAAC,CAAC;gBACxC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,KAAK,IAAI,CAAC,CAAC;YAC3C,CAAC;iBAAM,CAAC;gBACN,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,KAAK,IAAI,CAAC,CAAC;gBACzC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,KAAK,IAAI,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,wJAAwJ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzM,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,oIAAoI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEtL,SAAS,YAAY,CAAC,GAAe,EAAE,YAAqB;IAC1D,IAAI,CAAC,IAAA,0BAAa,EAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3C,IAAI,YAAY;QAAE,OAAO,IAAI,CAAC;IAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACjD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IACjE,MAAM,IAAI,GAAG,IAAA,gBAAQ,EAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,OAAO,8LAA8L,CAAC,IAAI,CAAC,IAAI,CAAC;QAC9M,wHAAwH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxI,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAW;IACrC,MAAM,GAAG,GAAsC,EAAE,CAAC;IAClD,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,GAAY,EAAE,EAAE;QACzC,IAAI,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK,EAAE,CAAC;YAAC,KAAK,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;YAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAAC,CAAC;QAC3D,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAG,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;YAC3D,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChE,CAAC;IACH,CAAC,CAAC;IACF,MAAM,KAAK,GAAG,uFAAuF,CAAC;IACtG,IAAI,CAAyB,CAAC;IAC9B,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/D,MAAM,EAAE,GAAG,6FAA6F,CAAC;IACzG,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,0DAA0D;AAC1D,MAAM,aAAa,GAA6C;IAC9D,CAAC,oDAAoD,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;IACtF,CAAC,oDAAoD,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;IACvF,CAAC,+CAA+C,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9E,CAAC,4BAA4B,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC;IAChE,CAAC,wCAAwC,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC,CAAC;IAC/E,CAAC,uBAAuB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;IAC/G,CAAC,0BAA0B,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC5D,CAAC,6BAA6B,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7E,CAAC,uBAAuB,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IACtD,CAAC,4CAA4C,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC;IAClF,CAAC,6BAA6B,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IAC7D,CAAC,+BAA+B,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IAC/D,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;IAC7C,CAAC,oDAAoD,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC;IACxF,CAAC,mCAAmC,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;IACpE,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IAC3C,CAAC,gBAAgB,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;IACnD,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC9C,CAAC,qBAAqB,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;IACxD,CAAC,qCAAqC,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IACpE,CAAC,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC/C,CAAC,6BAA6B,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3D,CAAC,4CAA4C,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC;IACjF,CAAC,kEAAkE,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;IAC5H,CAAC,uCAAuC,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;CAC/F,CAAC;AAEF,SAAgB,UAAU,CAAC,GAAe,EAAE,EAAyB;IACnE,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAC5C,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;IACvC,MAAM,IAAI,GAAG,IAAA,gBAAQ,EAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAEhC,IAAI,EAAE;QAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAClC,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;QACX,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,WAAW;YAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;QACrG,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,MAAM;YAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;QACvF,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IAC9B,CAAC;IACD,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IACjD,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,OAAO;QAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IACrE,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC/C,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IACvE,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IAC7F,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,IAAI,iHAAiH,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9L,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IAC9B,CAAC;IACD,IAAI,IAAI,KAAK,MAAM,IAAI,8BAA8B,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAEpE,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC;IAC1J,CAAC;IACD,IAAI,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,WAAW,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;QACzE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,qBAAqB,EAAE,EAAE,EAAE,qBAAqB,EAAE,CAAC;IAC1F,CAAC;IACD,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IACpE,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,gDAAgD,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9F,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IACtD,CAAC;IACD,IAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;IACnE,IAAI,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;IAEzE,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC/B,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;QAC5E,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;QACvE,IAAI,0DAA0D,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;QAC3H,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;QAClG,IAAI,wDAAwD,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAC5H,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;IAChD,CAAC;IAED,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACjI,IAAI,4DAA4D,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;QAC7I,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;QAC1F,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;IAClE,CAAC;IAED,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IAEzE,kDAAkD;IAClD,IAAI,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;IAC7E,IAAI,wCAAwC,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC5F,IAAI,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;IACvG,IAAI,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;IACzE,IAAI,6BAA6B,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAC1F,IAAI,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IACnE,IAAI,4CAA4C,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;IAC/F,IAAI,6BAA6B,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IAE1E,IAAI,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IAC1E,IAAI,WAAW,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IAC3E,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK;QAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IAC7G,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;IAClF,IAAI,+BAA+B,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IAChI,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,UAAU,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;IAEhI,KAAK,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,IAAI,aAAa,EAAE,CAAC;QAClD,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;AACrD,CAAC;AAED,SAAgB,kBAAkB,CAAC,IAAmB;IACpD,MAAM,UAAU,GAAG,IAAI,GAAG,CAAyB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAChG,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IACrC,MAAM,aAAa,GAAG,IAAI,GAAG,EAAoB,CAAC;IAElD,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,OAAO,IAAK,EAAkB,EAAE,CAAC;QACrD,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;YAAE,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACzF,IAAI,EAAE,CAAC,GAAG,IAAI,gCAAgC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5D,KAAK,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,kBAAkB,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;gBACvD,IAAI,CAAC,GAAG;oBAAE,SAAS;gBACnB,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;gBACrE,IAAI,MAAM,CAAC,IAAI;oBAAE,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;IAEhD,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QAC9B,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;QAC5C,MAAM,UAAU,GAAG,IAAA,0BAAa,EAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,WAAW,GAAG,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAEtC,IAAI,WAAW,CAAC,QAAQ,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,YAAY,CAAC,GAAG,EAAE,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YAC/F,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACzC,MAAM,OAAO,GAAG,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;YACjF,MAAM,OAAO,GAAG,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;YAC3D,MAAM,UAAU,GAA6B,EAAE,CAAC;YAChD,IAAI,OAAO,EAAE,CAAC;gBACZ,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;oBACxB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBAC5B,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM;wBAAE,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;gBAChD,CAAC;YACH,CAAC;YACD,WAAW,GAAG;gBACZ,QAAQ,EAAE,MAAM;gBAChB,QAAQ,EAAE,OAAO;gBACjB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC1D,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GAAG,SAAS,CAAC,SAAS,CAAC,aAAa,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAChE,IAAI,UAAU,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,CAAC,QAAQ,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACpF,WAAW,GAAG,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,UAAU,CAAC,EAAE,CAAC;QACtI,CAAC;QAED,MAAM,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAC5D,IAAI,QAAQ,IAAI,CAAC,WAAW,CAAC,QAAQ,KAAK,KAAK,IAAI,WAAW,CAAC,QAAQ,KAAK,SAAS,CAAC,EAAE,CAAC;YACvF,IAAI,QAAQ,CAAC,GAAG,IAAI,IAAI;gBAAE,WAAW,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;YACzD,IAAI,QAAQ,CAAC,GAAG,IAAI,IAAI;gBAAE,WAAW,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;QAC3D,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,UAAU,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,KAAK,MAAM,IAAI,WAAW,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC;YACzL,WAAW,GAAG,IAAA,4BAAe,EAAC,GAAG,CAAC,CAAC;QACrC,CAAC;QAED,OAAO;YACL,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,EAAE,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC;YACd,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO;YACtB,UAAU,EAAE,GAAG,CAAC,UAAU,IAAI,IAAI;YAClC,MAAM;YACN,EAAE;YACF,UAAU;YACV,WAAW;SACZ,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAU,CAAC;AAChG,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,CAAU,CAAC;AAE3G,SAAgB,kBAAkB,CAAC,GAAY;IAC7C,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACjD,MAAM,CAAC,GAAG,GAA8B,CAAC;IACzC,IAAI,OAAO,CAAC,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAE/D,MAAM,GAAG,GAAe,EAAE,QAAQ,EAAE,CAAC,CAAC,QAA+B,EAAE,CAAC;IACxE,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3E,GAAG,CAAC,MAAM,GAAI,CAAC,CAAC,MAAoB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,CAAC;IACD,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;QACpD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,QAAsB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACrH,GAAG,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC9D,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QAChC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,SAAS,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;YAC5C,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QAChC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,SAAS,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;YAC5C,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACzB,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;gBACvB,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACf,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,CAAC,CAAC,UAAU,IAAI,OAAO,CAAC,CAAC,UAAU,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC;QACrF,MAAM,EAAE,GAA6B,EAAE,CAAC;QACxC,KAAK,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,UAAqC,CAAC,EAAE,CAAC;YAChF,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAClE,IAAI,OAAO,CAAC,MAAM;oBAAE,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;YACtC,CAAC;QACH,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM;YAAE,GAAG,CAAC,UAAU,GAAG,EAAE,CAAC;IAClD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { IDatabase, TableInfoData, WhereClause } from '../db/index';
2
+ import { type ColumnGeneratorConfig, type ColumnPlan, type GenerateResult } from './types';
3
+ /**
4
+ * Generate `count` rows for a table with structured previews.
5
+ */
6
+ export declare function generateRows(db: IDatabase, info: TableInfoData, configs: ColumnGeneratorConfig[], count: number, plan?: Record<string, ColumnPlan>): Promise<GenerateResult>;
7
+ /**
8
+ * Render generated rows as a sequence of INSERT statements for preview.
9
+ */
10
+ export declare function buildSeedInsertSql(table: string, rows: WhereClause[][]): string;