@snolla/data 0.0.0-stage → 1.0.7

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 (67) hide show
  1. package/dist/actor.d.ts +28 -0
  2. package/dist/actor.js +63 -0
  3. package/dist/audit.d.ts +36 -0
  4. package/dist/audit.js +198 -0
  5. package/dist/dataProvider.d.ts +41 -0
  6. package/dist/dataProvider.js +148 -0
  7. package/dist/dataSource.d.ts +4 -0
  8. package/dist/dataSource.js +65 -0
  9. package/dist/dbProvider.d.ts +1261 -0
  10. package/dist/dbProvider.js +1898 -0
  11. package/dist/freeze.d.ts +29 -0
  12. package/dist/freeze.js +69 -0
  13. package/dist/guard.d.ts +53 -0
  14. package/dist/guard.js +397 -0
  15. package/dist/insert.d.ts +9 -0
  16. package/dist/insert.js +44 -0
  17. package/dist/migrations/siteid.d.mts +738 -0
  18. package/dist/migrations/siteid.mjs +512 -0
  19. package/dist/publish.d.ts +1 -0
  20. package/dist/publish.js +1 -0
  21. package/dist/schema/dsl.d.ts +64 -0
  22. package/dist/schema/dsl.js +28 -0
  23. package/dist/schema/generate.d.mts +14 -0
  24. package/dist/schema/generate.mjs +282 -0
  25. package/dist/schema/generated/ddl.d.ts +7 -0
  26. package/dist/schema/generated/ddl.js +11 -0
  27. package/dist/schema/generated/kysely-types.d.ts +1988 -0
  28. package/dist/schema/generated/kysely-types.js +5 -0
  29. package/dist/schema/index.d.ts +2 -0
  30. package/dist/schema/index.js +7 -0
  31. package/dist/schema/provision.d.mts +11 -0
  32. package/dist/schema/provision.mjs +111 -0
  33. package/dist/schema/tables.d.ts +2 -0
  34. package/dist/schema/tables.js +3301 -0
  35. package/dist/scripts/canon-audit.d.mts +25 -0
  36. package/dist/scripts/canon-audit.mjs +213 -0
  37. package/dist/scripts/canon-smoke.d.mts +1 -0
  38. package/dist/scripts/canon-smoke.mjs +44 -0
  39. package/dist/scripts/dialect-ddl-stand.d.mts +1 -0
  40. package/dist/scripts/dialect-ddl-stand.mjs +136 -0
  41. package/dist/scripts/owner-spec-check.d.mts +1 -0
  42. package/dist/scripts/owner-spec-check.mjs +166 -0
  43. package/dist/scripts/owners/owner-resolve-spec.json +540 -0
  44. package/dist/scripts/owners-audit.d.mts +60 -0
  45. package/dist/scripts/owners-audit.mjs +443 -0
  46. package/dist/scripts/owners-fixture.d.mts +20 -0
  47. package/dist/scripts/owners-fixture.mjs +192 -0
  48. package/dist/scripts/schema-lengths-audit.d.mts +22 -0
  49. package/dist/scripts/schema-lengths-audit.mjs +146 -0
  50. package/dist/scripts/siteid-migrate.d.mts +7 -0
  51. package/dist/scripts/siteid-migrate.mjs +260 -0
  52. package/dist/scripts/tenant-invariant-audit.d.mts +1 -0
  53. package/dist/scripts/tenant-invariant-audit.mjs +34 -0
  54. package/dist/singleMode.d.ts +5 -0
  55. package/dist/singleMode.js +23 -0
  56. package/dist/sqliteDialect.d.ts +6 -0
  57. package/dist/sqliteDialect.js +92 -0
  58. package/dist/templateDefs.d.ts +38 -0
  59. package/dist/templateDefs.js +163 -0
  60. package/dist/test/fixtures/broken-driver/index.d.ts +3 -0
  61. package/dist/test/fixtures/broken-driver/index.js +5 -0
  62. package/dist/test/support/dialect-stand.d.ts +37 -0
  63. package/dist/test/support/dialect-stand.js +162 -0
  64. package/dist/test/support/render-parity.d.ts +44 -0
  65. package/dist/test/support/render-parity.js +262 -0
  66. package/package.json +50 -5
  67. package/README.md +0 -3
@@ -0,0 +1,540 @@
1
+ {
2
+ "spec": "owner-name-resolution",
3
+ "version": 1,
4
+ "task": "task:3818",
5
+ "title": "OwnerName -> (table, pk): контракт резолва полиморфных владельцев легаси-MSSQL",
6
+ "evidence": {
7
+ "snapshot": "owners-observed.json",
8
+ "probe": "probe-owner-names.mjs",
9
+ "source": "read-only probe of production MSSQL (mssql.kzntsv.site / MoreThenCms), 2026-10-13",
10
+ "canon": "packages/data/schema (task:3812) — the spec may only point at canon tables"
11
+ },
12
+ "observedTotals": {
13
+ "Gallery": 5430,
14
+ "orphans": 638,
15
+ "idOwnerNull": 0
16
+ },
17
+ "resolutionOrder": [
18
+ "IdOwner (GUID) -> owner table row; OwnerName is only a cross-check",
19
+ "OwnerName is NOT authoritative: legacy code writes role names, the API writes 'owner' (GalleriesController.cs:51), and the data carries values no legacy class implements (Theme, PostModule, postPart)"
20
+ ],
21
+ "observedOwners": {
22
+ "Product": {
23
+ "table": "Products",
24
+ "pk": "ProductId",
25
+ "rows": 2719,
26
+ "orphans": 128,
27
+ "status": "resolvable"
28
+ },
29
+ "Post": {
30
+ "table": "Posts",
31
+ "pk": "PostId",
32
+ "rows": 1141,
33
+ "orphans": 10,
34
+ "status": "resolvable"
35
+ },
36
+ "Theme": {
37
+ "table": "Themes",
38
+ "pk": "ThemeId",
39
+ "rows": 590,
40
+ "orphans": 335,
41
+ "status": "resolvable"
42
+ },
43
+ "Page": {
44
+ "table": "Pages",
45
+ "pk": "PageId",
46
+ "rows": 521,
47
+ "orphans": 9,
48
+ "status": "resolvable"
49
+ },
50
+ "PostModule": {
51
+ "table": "Modules",
52
+ "pk": "ModuleId",
53
+ "rows": 156,
54
+ "orphans": 0,
55
+ "status": "resolvable"
56
+ },
57
+ "postPart": {
58
+ "table": "Parts",
59
+ "pk": "PartId",
60
+ "rows": 136,
61
+ "orphans": 136,
62
+ "status": "quarantine-only",
63
+ "reason": "Parts is dropped from the canon (task:3812 DROPPED list) and holds 0 rows in production -> every postPart gallery is an orphan by construction"
64
+ },
65
+ "CatalogProduct": {
66
+ "table": "CatalogProducts",
67
+ "pk": "ProductId",
68
+ "rows": 127,
69
+ "orphans": 4,
70
+ "status": "resolvable"
71
+ },
72
+ "tableRecord": {
73
+ "table": "TableRecords",
74
+ "pk": "RecordId",
75
+ "rows": 34,
76
+ "orphans": 16,
77
+ "status": "resolvable"
78
+ },
79
+ "Store": {
80
+ "table": "Stores",
81
+ "pk": "StoreId",
82
+ "rows": 2,
83
+ "orphans": 0,
84
+ "status": "resolvable"
85
+ },
86
+ "catalog": {
87
+ "table": "Catalogs",
88
+ "pk": "CatalogId",
89
+ "rows": 2,
90
+ "orphans": 0,
91
+ "status": "resolvable"
92
+ },
93
+ "blog": {
94
+ "table": "Blogs",
95
+ "pk": "BlogId",
96
+ "rows": 1,
97
+ "orphans": 0,
98
+ "status": "resolvable"
99
+ },
100
+ "link": {
101
+ "table": "Links",
102
+ "pk": "LinkId",
103
+ "rows": 1,
104
+ "orphans": 0,
105
+ "status": "resolvable"
106
+ }
107
+ },
108
+ "aliases": {
109
+ "TableRecord": {
110
+ "aliasOf": "tableRecord"
111
+ },
112
+ "Part": {
113
+ "aliasOf": "postPart"
114
+ },
115
+ "Module": {
116
+ "aliasOf": "PostModule"
117
+ },
118
+ "Catalog": {
119
+ "aliasOf": "catalog"
120
+ },
121
+ "Blog": {
122
+ "aliasOf": "blog"
123
+ },
124
+ "Link": {
125
+ "aliasOf": "link"
126
+ },
127
+ "CatalogProducts": {
128
+ "aliasOf": "CatalogProduct"
129
+ },
130
+ "ProductVariant": {
131
+ "table": "ProductVariants",
132
+ "pk": "VariantId"
133
+ },
134
+ "CatalogCategory": {
135
+ "table": "CatalogCategories",
136
+ "pk": "CategoryId"
137
+ },
138
+ "CatalogTag": {
139
+ "table": "CatalogTags",
140
+ "pk": "TagId"
141
+ },
142
+ "BlogCategory": {
143
+ "table": "BlogCategories",
144
+ "pk": "CategoryId"
145
+ },
146
+ "BlogTag": {
147
+ "table": "BlogTags",
148
+ "pk": "TagId"
149
+ },
150
+ "BlogAuthor": {
151
+ "table": "BlogAuthors",
152
+ "pk": "AuthorId"
153
+ },
154
+ "CustomCategory": {
155
+ "table": "CustomCategories",
156
+ "pk": "CategoryId"
157
+ },
158
+ "customCategory": {
159
+ "table": "CustomCategories",
160
+ "pk": "CategoryId"
161
+ },
162
+ "StoreCategory": {
163
+ "table": "StoreCategories",
164
+ "pk": "CategoryId"
165
+ },
166
+ "StoreTag": {
167
+ "table": "StoreTags",
168
+ "pk": "TagId"
169
+ },
170
+ "StoreVendor": {
171
+ "table": "StoreVendors",
172
+ "pk": "VendorId"
173
+ },
174
+ "Watermark": {
175
+ "table": "Watermark_ImageWatermark",
176
+ "pk": "IdWatermark"
177
+ },
178
+ "watermark": {
179
+ "table": "Watermark_ImageWatermark",
180
+ "pk": "IdWatermark"
181
+ },
182
+ "ImageWatermark": {
183
+ "table": "Watermark_ImageWatermark",
184
+ "pk": "IdWatermark"
185
+ }
186
+ },
187
+ "polyRoots": {
188
+ "Folders": {
189
+ "ownerColumn": "OwnerId",
190
+ "nameColumn": null,
191
+ "siteFrom": "owner-row",
192
+ "unresolved": "refuse",
193
+ "note": "Legacy `AssetsFolder.OwnerId` is `IAssetsOwner.AssetsOwnerId` (MoreThenCms/Assets/AssetsFolder.cs, IAssetsOwner.cs) and the folder's public path is /assets/<ownerId:N>/, so the owner set is exactly the interface's implementors: Page, Post, Product, Store/StoreCategory/StoreTag/StoreVendor, Catalog/CatalogCategory/CatalogTag/CatalogProduct, TableRecord, Form and the site itself (ISiteContext.AssetsOwnerId == SiteId). Parts are NOT in this set — `BasePart` implements IGalleryOwner (galleries), not IAssetsOwner (task:3976).",
194
+ "evidence": {
195
+ "totalFolders": 183639,
196
+ "assetsFolders": 182871,
197
+ "themeFolders": 768,
198
+ "distinctOwners": 182844,
199
+ "ownersResolved": 16265,
200
+ "ownersDangling": 166579,
201
+ "foldersWithFiles": 163,
202
+ "source": "MoreThenCms_m1 / production MoreThenCms, 2026-10-19"
203
+ },
204
+ "resolvers": [
205
+ {
206
+ "column": "OwnerId",
207
+ "table": "Pages",
208
+ "pk": "PageId"
209
+ },
210
+ {
211
+ "column": "OwnerId",
212
+ "table": "Posts",
213
+ "pk": "PostId"
214
+ },
215
+ {
216
+ "column": "OwnerId",
217
+ "table": "Products",
218
+ "pk": "ProductId"
219
+ },
220
+ {
221
+ "column": "OwnerId",
222
+ "table": "CatalogProducts",
223
+ "pk": "ProductId"
224
+ },
225
+ {
226
+ "column": "OwnerId",
227
+ "table": "Catalogs",
228
+ "pk": "CatalogId"
229
+ },
230
+ {
231
+ "column": "OwnerId",
232
+ "table": "CatalogCategories",
233
+ "pk": "CategoryId"
234
+ },
235
+ {
236
+ "column": "OwnerId",
237
+ "table": "CatalogTags",
238
+ "pk": "TagId"
239
+ },
240
+ {
241
+ "column": "OwnerId",
242
+ "table": "Stores",
243
+ "pk": "StoreId"
244
+ },
245
+ {
246
+ "column": "OwnerId",
247
+ "table": "StoreCategories",
248
+ "pk": "CategoryId"
249
+ },
250
+ {
251
+ "column": "OwnerId",
252
+ "table": "StoreTags",
253
+ "pk": "TagId"
254
+ },
255
+ {
256
+ "column": "OwnerId",
257
+ "table": "StoreVendors",
258
+ "pk": "VendorId"
259
+ },
260
+ {
261
+ "column": "OwnerId",
262
+ "table": "TableRecords",
263
+ "pk": "RecordId"
264
+ },
265
+ {
266
+ "column": "OwnerId",
267
+ "table": "Forms",
268
+ "pk": "FormId"
269
+ },
270
+ {
271
+ "column": "OwnerId",
272
+ "table": "Sites",
273
+ "pk": "SiteId"
274
+ }
275
+ ],
276
+ "danglingAllowed": {
277
+ "columns": [
278
+ "ImagesFolder_ThemeId",
279
+ "ScriptsFolder_ThemeId",
280
+ "StylesheetsFolder_ThemeId"
281
+ ],
282
+ "reason": "theme folders (768 on MoreThenCms_p1) carry no owner at all: the site comes from the canon FK to Themes, not from OwnerId (task:3976)"
283
+ }
284
+ },
285
+ "Gallery": {
286
+ "ownerColumn": "IdOwner",
287
+ "nameColumn": "OwnerName",
288
+ "nameRole": "cross-check only; never the join key",
289
+ "targets": "observedOwners + aliases",
290
+ "siteFrom": "owner-row",
291
+ "unresolved": "refuse",
292
+ "evidence": {
293
+ "total": 5430,
294
+ "orphans": 638,
295
+ "idOwnerNull": 0
296
+ },
297
+ "resolvers": [
298
+ {
299
+ "column": "IdOwner",
300
+ "table": "Products",
301
+ "pk": "ProductId"
302
+ },
303
+ {
304
+ "column": "IdOwner",
305
+ "table": "Posts",
306
+ "pk": "PostId"
307
+ },
308
+ {
309
+ "column": "IdOwner",
310
+ "table": "Themes",
311
+ "pk": "ThemeId"
312
+ },
313
+ {
314
+ "column": "IdOwner",
315
+ "table": "Pages",
316
+ "pk": "PageId"
317
+ },
318
+ {
319
+ "column": "IdOwner",
320
+ "table": "Modules",
321
+ "pk": "ModuleId"
322
+ },
323
+ {
324
+ "column": "IdOwner",
325
+ "table": "CatalogProducts",
326
+ "pk": "ProductId"
327
+ },
328
+ {
329
+ "column": "IdOwner",
330
+ "table": "TableRecords",
331
+ "pk": "RecordId"
332
+ },
333
+ {
334
+ "column": "IdOwner",
335
+ "table": "Stores",
336
+ "pk": "StoreId"
337
+ },
338
+ {
339
+ "column": "IdOwner",
340
+ "table": "Catalogs",
341
+ "pk": "CatalogId"
342
+ },
343
+ {
344
+ "column": "IdOwner",
345
+ "table": "Blogs",
346
+ "pk": "BlogId"
347
+ },
348
+ {
349
+ "column": "IdOwner",
350
+ "table": "Links",
351
+ "pk": "LinkId"
352
+ }
353
+ ]
354
+ },
355
+ "Modules": {
356
+ "hostColumns": [
357
+ "PostId",
358
+ "PageId"
359
+ ],
360
+ "hostTables": {
361
+ "PostId": "Posts",
362
+ "PageId": "Pages"
363
+ },
364
+ "nameColumn": null,
365
+ "siteFrom": "owner-row",
366
+ "resolvers": [
367
+ {
368
+ "column": "PostId",
369
+ "table": "Posts",
370
+ "pk": "PostId"
371
+ },
372
+ {
373
+ "column": "PageId",
374
+ "table": "Pages",
375
+ "pk": "PageId"
376
+ }
377
+ ],
378
+ "unresolved": "refuse",
379
+ "evidence": {
380
+ "total": 165,
381
+ "discriminator": {
382
+ "PostModule": 165
383
+ },
384
+ "postIdSet": 165,
385
+ "pageIdSet": 0,
386
+ "orphans": 0,
387
+ "note": "live Modules has no OwnerName column: the host is the non-null PostId/PageId FK, not a name"
388
+ }
389
+ },
390
+ "GalleryImagesTemplates": {
391
+ "siteFrom": "none",
392
+ "nameColumn": null,
393
+ "note": "task:3891 — a dictionary of image templates keyed by OwnerTemplateId with no single owner column, and empty in production (owners-observed.json emptyMaps: 0 rows). It therefore carries no site of its own: its rows, if any ever appear, are the sweep's business. Without this declaration the plan would report it unresolved and refuse a cutover over an empty map."
394
+ },
395
+ "GalleryImageSizeWatermark": {
396
+ "siteFrom": "parent-chain",
397
+ "resolvers": [
398
+ {
399
+ "column": "GalleryImageSize_IdSize",
400
+ "table": "GalleryImageSize",
401
+ "pk": "IdSize"
402
+ },
403
+ {
404
+ "column": "Watermark_IdWatermark",
405
+ "table": "Watermark",
406
+ "pk": "IdWatermark"
407
+ }
408
+ ],
409
+ "note": "task:3876 — a watermark configuration hangs off a gallery image size and off the watermark itself. Both legs are chained from the Gallery root, so this root's own step must wait until those parents carry a site (the planner reads that dependency off `resolvers`; the second leg is the fallback for rows the first does not reach)."
410
+ },
411
+ "NumberingCounters": {
412
+ "siteFrom": "owner-row",
413
+ "resolvers": [
414
+ {
415
+ "column": "OwnerId",
416
+ "table": "Blogs",
417
+ "pk": "BlogId"
418
+ },
419
+ {
420
+ "column": "OwnerId",
421
+ "table": "Stores",
422
+ "pk": "StoreId"
423
+ },
424
+ {
425
+ "column": "OwnerId",
426
+ "table": "Catalogs",
427
+ "pk": "CatalogId"
428
+ },
429
+ {
430
+ "column": "OwnerId",
431
+ "table": "Sites",
432
+ "pk": "SiteId"
433
+ }
434
+ ],
435
+ "note": "OwnerId is a soft reference (Blog / Store / Catalog / Site), resolved by GUID; the name column is absent. Declared here rather than in the planner since task:3876, so every root follows one rule."
436
+ },
437
+ "_Modules": {
438
+ "ownerColumn": "OwnerId",
439
+ "nameColumn": null,
440
+ "siteFrom": "owner-row",
441
+ "unresolved": "refuse",
442
+ "note": "task:3895 — `_Modules` is the legacy twin of `Modules` (its rows are the module instances the templates describe) and its `OwnerId` is the same polymorphic owner reference. It leaned on the implicit `observedOwners` fallback: a spec edit could have reordered the probe with nothing to notice. Declared here in the same order the fallback used (production: 18 rows, none of them matches an owner — real orphans, they stay on the sentinel).",
443
+ "resolvers": [
444
+ {
445
+ "column": "OwnerId",
446
+ "table": "Products",
447
+ "pk": "ProductId"
448
+ },
449
+ {
450
+ "column": "OwnerId",
451
+ "table": "Posts",
452
+ "pk": "PostId"
453
+ },
454
+ {
455
+ "column": "OwnerId",
456
+ "table": "Themes",
457
+ "pk": "ThemeId"
458
+ },
459
+ {
460
+ "column": "OwnerId",
461
+ "table": "Pages",
462
+ "pk": "PageId"
463
+ },
464
+ {
465
+ "column": "OwnerId",
466
+ "table": "Modules",
467
+ "pk": "ModuleId"
468
+ },
469
+ {
470
+ "column": "OwnerId",
471
+ "table": "CatalogProducts",
472
+ "pk": "ProductId"
473
+ },
474
+ {
475
+ "column": "OwnerId",
476
+ "table": "TableRecords",
477
+ "pk": "RecordId"
478
+ },
479
+ {
480
+ "column": "OwnerId",
481
+ "table": "Stores",
482
+ "pk": "StoreId"
483
+ },
484
+ {
485
+ "column": "OwnerId",
486
+ "table": "Catalogs",
487
+ "pk": "CatalogId"
488
+ },
489
+ {
490
+ "column": "OwnerId",
491
+ "table": "Blogs",
492
+ "pk": "BlogId"
493
+ },
494
+ {
495
+ "column": "OwnerId",
496
+ "table": "Links",
497
+ "pk": "LinkId"
498
+ }
499
+ ]
500
+ }
501
+ },
502
+ "unresolved": {
503
+ "policy": "refuse",
504
+ "exit": "--purge --manifest <dir>",
505
+ "reason": "task:4092 — nothing is parked. A row that ends the run without a site is a missing edge in the resolver graph, not data to file away: the cutover SQL refuses by table name, and deleting the leftovers is an explicit operator decision (children first, primary keys written to a manifest before the first delete). The sentinel site is gone from the migration — planting it made 169 175 lost rows look placed while the run reported green, and it hid the real defect (tables that already carried SiteId were never backfilled).",
506
+ "cascadeRows": {
507
+ "Gallery": 638,
508
+ "GalleryImage": 297,
509
+ "GalleryImageFile": 295,
510
+ "GalleryImageSize": 1048,
511
+ "GalleryImageSizeWatermark": 17,
512
+ "Watermark": 14
513
+ },
514
+ "janitor": "polymorphic OwnerId cannot carry a FK -> orphans will re-accumulate; a janitor task / delete hook is a known debt",
515
+ "cascadeRowsDefinition": "child rows attached to the quarantined galleries (row counts, not distinct galleries)"
516
+ },
517
+ "numbering": {
518
+ "tasks": {
519
+ "seed": 4,
520
+ "labels": [
521
+ "PostNumber",
522
+ "CatalogProductNumber",
523
+ "StoreProductNumber",
524
+ "FormSubmission"
525
+ ],
526
+ "rule": "NumberingTasks is global config: 4 default rows for the whole database, NOT 4 per site. Superseded the earlier 'seed per site' rule (task:3876, operator verdict): the live table never carried SiteId, callers address a task by GUID and NumberingCounters.TaskId is a hard FK to it, so per-site copies would mean new ids plus a rewrite of every counter and every stored id — for rows that are identical across the database. Canon scope: dictionary."
527
+ },
528
+ "counters": {
529
+ "rows": 86,
530
+ "distinctOwners": 85,
531
+ "siteFrom": "resolved owner row (Blog / Store / Catalog / Site) -> owner.SiteId; unresolvable -> quarantine",
532
+ "rule": "OwnerId is a soft reference like Gallery.IdOwner; resolve by GUID, name column is absent"
533
+ }
534
+ },
535
+ "anomalies": [
536
+ "OwnerName = 'owner' is written by the legacy API (GalleriesController.cs:51) and names no type — resolvable only via IdOwner",
537
+ "lowercase aliases (catalog / blog / link / postPart / tableRecord) are real production values, not typos to normalize away",
538
+ "deviation from wiki:3821: Modules resolves through PostId/PageId FKs, not OwnerName/OwnerId (verified live: no OwnerName column)"
539
+ ]
540
+ }
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Run every contract check against one adapter. Returns the report (the same
3
+ * shape the production dry-run produced) and the discrepancy list.
4
+ */
5
+ export function runOwnerAudit({ adapter, contract, log }: {
6
+ adapter: any;
7
+ contract?: {
8
+ spec: any;
9
+ observed: any;
10
+ ownership: any;
11
+ };
12
+ log?: () => void;
13
+ }): Promise<{
14
+ report: {
15
+ _task: string;
16
+ _source: any;
17
+ _target: any;
18
+ clusters: {};
19
+ };
20
+ discrepancies: string[];
21
+ }>;
22
+ export const REPO_CONTRACT: {
23
+ spec: any;
24
+ observed: any;
25
+ ownership: any;
26
+ };
27
+ export const PROD_EVIDENCE: string;
28
+ export function sqliteAdapter(db: any, { source, target }?: {
29
+ source?: string;
30
+ target?: string;
31
+ }): {
32
+ source: string;
33
+ target: string;
34
+ quote: (name: any) => string;
35
+ query: (sql: any) => Promise<any>;
36
+ tableColumns: (tables: any) => Promise<Map<any, any>>;
37
+ tablesWithColumn: (column: any) => Promise<Set<any>>;
38
+ close: () => Promise<void>;
39
+ };
40
+ export function parseMssqlUrl(url: any): {
41
+ server: string;
42
+ port: number;
43
+ database: any;
44
+ user: any;
45
+ password: any;
46
+ encrypt: boolean;
47
+ trustServerCertificate: boolean;
48
+ };
49
+ export function mssqlAdapter({ url, source, target }?: {
50
+ source?: string;
51
+ }): Promise<{
52
+ source: string;
53
+ target: any;
54
+ quote: (name: any) => string;
55
+ query: (sql: any) => Promise<any>;
56
+ tableColumns: (tables: any) => Promise<Map<any, any>>;
57
+ tablesWithColumn: (column: any) => Promise<Set<any>>;
58
+ close: () => Promise<any>;
59
+ }>;
60
+ export function reportDiff(fresh: any, expected: any): any[];