dbctx 1.4.6 → 2.0.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 (164) hide show
  1. package/dist/app/assemble.d.mts +2 -2
  2. package/dist/app/assemble.d.mts.map +1 -1
  3. package/dist/app/assemble.mjs +37 -16
  4. package/dist/app/db.d.mts.map +1 -1
  5. package/dist/app/db.mjs +3 -2
  6. package/dist/app/detect.d.mts +1 -0
  7. package/dist/app/detect.d.mts.map +1 -1
  8. package/dist/app/detect.mjs +3 -2
  9. package/dist/app/list.d.mts +4 -0
  10. package/dist/app/list.d.mts.map +1 -0
  11. package/dist/app/list.mjs +93 -0
  12. package/dist/app/load-introspection.d.mts +26 -0
  13. package/dist/app/load-introspection.d.mts.map +1 -0
  14. package/dist/app/load-introspection.mjs +89 -0
  15. package/dist/app/login.d.mts +2 -0
  16. package/dist/app/login.d.mts.map +1 -0
  17. package/dist/app/login.mjs +69 -0
  18. package/dist/app/open-url.d.mts +2 -0
  19. package/dist/app/open-url.d.mts.map +1 -1
  20. package/dist/app/open-url.mjs +8 -3
  21. package/dist/app/sample.d.mts +24 -0
  22. package/dist/app/sample.d.mts.map +1 -0
  23. package/dist/app/sample.mjs +257 -0
  24. package/dist/app/session.d.mts +3 -2
  25. package/dist/app/session.d.mts.map +1 -1
  26. package/dist/app/session.mjs +46 -6
  27. package/dist/app/ssh.d.mts.map +1 -1
  28. package/dist/app/ssh.mjs +12 -1
  29. package/dist/app/tail.d.mts +13 -0
  30. package/dist/app/tail.d.mts.map +1 -0
  31. package/dist/app/tail.mjs +168 -0
  32. package/dist/db/check-constraints.d.mts +9 -0
  33. package/dist/db/check-constraints.d.mts.map +1 -0
  34. package/dist/db/check-constraints.mjs +17 -0
  35. package/dist/db/custom-types.d.mts +26 -0
  36. package/dist/db/custom-types.d.mts.map +1 -0
  37. package/dist/db/custom-types.mjs +61 -0
  38. package/dist/db/extensions.d.mts +8 -0
  39. package/dist/db/extensions.d.mts.map +1 -0
  40. package/dist/db/extensions.mjs +14 -0
  41. package/dist/db/foreign-keys.mjs +3 -3
  42. package/dist/db/functions.d.mts +11 -0
  43. package/dist/db/functions.d.mts.map +1 -0
  44. package/dist/db/functions.mjs +23 -0
  45. package/dist/db/index.d.mts +10 -1
  46. package/dist/db/index.d.mts.map +1 -1
  47. package/dist/db/index.mjs +11 -2
  48. package/dist/db/planner-stats.d.mts +33 -0
  49. package/dist/db/planner-stats.d.mts.map +1 -0
  50. package/dist/db/planner-stats.mjs +103 -0
  51. package/dist/db/relations.d.mts +1 -0
  52. package/dist/db/relations.d.mts.map +1 -1
  53. package/dist/db/relations.mjs +10 -1
  54. package/dist/db/rls.d.mts +21 -0
  55. package/dist/db/rls.d.mts.map +1 -0
  56. package/dist/db/rls.mjs +48 -0
  57. package/dist/db/sample.d.mts +16 -0
  58. package/dist/db/sample.d.mts.map +1 -0
  59. package/dist/db/sample.mjs +73 -0
  60. package/dist/db/sequences.d.mts +15 -0
  61. package/dist/db/sequences.d.mts.map +1 -0
  62. package/dist/db/sequences.mjs +31 -0
  63. package/dist/db/stats.mjs +3 -3
  64. package/dist/db/triggers.d.mts +11 -0
  65. package/dist/db/triggers.d.mts.map +1 -0
  66. package/dist/db/triggers.mjs +21 -0
  67. package/dist/flow/events.d.mts +115 -0
  68. package/dist/flow/events.d.mts.map +1 -0
  69. package/dist/flow/events.mjs +2 -0
  70. package/dist/flow/interpreter.d.mts +21 -0
  71. package/dist/flow/interpreter.d.mts.map +1 -0
  72. package/dist/flow/interpreter.mjs +605 -0
  73. package/dist/flow/projection.d.mts +17 -0
  74. package/dist/flow/projection.d.mts.map +1 -0
  75. package/dist/flow/projection.mjs +83 -0
  76. package/dist/flow/projection.test.d.mts +2 -0
  77. package/dist/flow/projection.test.d.mts.map +1 -0
  78. package/dist/flow/projection.test.mjs +162 -0
  79. package/dist/flow/reducer.d.mts +5 -0
  80. package/dist/flow/reducer.d.mts.map +1 -0
  81. package/dist/flow/reducer.mjs +306 -0
  82. package/dist/flow/reducer.test.d.mts +2 -0
  83. package/dist/flow/reducer.test.d.mts.map +1 -0
  84. package/dist/flow/reducer.test.mjs +479 -0
  85. package/dist/flow/run.d.mts +3 -0
  86. package/dist/flow/run.d.mts.map +1 -0
  87. package/dist/flow/run.mjs +89 -0
  88. package/dist/flow/states.d.mts +54 -0
  89. package/dist/flow/states.d.mts.map +1 -0
  90. package/dist/flow/states.mjs +39 -0
  91. package/dist/index.d.mts +11 -0
  92. package/dist/index.d.mts.map +1 -1
  93. package/dist/index.mjs +135 -12
  94. package/dist/lib/atomic-write.d.mts +4 -0
  95. package/dist/lib/atomic-write.d.mts.map +1 -0
  96. package/dist/lib/atomic-write.mjs +75 -0
  97. package/dist/lib/stream-job.d.mts +19 -0
  98. package/dist/lib/stream-job.d.mts.map +1 -0
  99. package/dist/lib/stream-job.mjs +55 -0
  100. package/dist/lib/trpc-url.mjs +2 -2
  101. package/dist/lib/trpc.mjs +2 -2
  102. package/dist/logger.d.mts.map +1 -1
  103. package/dist/logger.mjs +6 -3
  104. package/dist/providers/TrpcProvider.js +3 -3
  105. package/dist/store.d.mts +113 -1
  106. package/dist/store.d.mts.map +1 -1
  107. package/dist/store.mjs +81 -2
  108. package/dist/ui/App.d.ts +1 -1
  109. package/dist/ui/App.d.ts.map +1 -1
  110. package/dist/ui/App.js +32 -4
  111. package/dist/ui/components/Analyze.d.ts +10 -0
  112. package/dist/ui/components/Analyze.d.ts.map +1 -0
  113. package/dist/ui/components/Analyze.js +54 -0
  114. package/dist/ui/components/Billing.d.ts +10 -0
  115. package/dist/ui/components/Billing.d.ts.map +1 -0
  116. package/dist/ui/components/Billing.js +40 -0
  117. package/dist/ui/components/DB.d.ts.map +1 -1
  118. package/dist/ui/components/DB.js +2 -2
  119. package/dist/ui/components/DatabasePicker.d.ts +13 -0
  120. package/dist/ui/components/DatabasePicker.d.ts.map +1 -0
  121. package/dist/ui/components/DatabasePicker.js +79 -0
  122. package/dist/ui/components/Enrich.d.ts +10 -0
  123. package/dist/ui/components/Enrich.d.ts.map +1 -0
  124. package/dist/ui/components/Enrich.js +41 -0
  125. package/dist/ui/components/Gate.js +2 -2
  126. package/dist/ui/components/Introspect.d.ts.map +1 -1
  127. package/dist/ui/components/Introspect.js +2 -2
  128. package/dist/ui/components/IntrospectionUpload.d.ts +10 -0
  129. package/dist/ui/components/IntrospectionUpload.d.ts.map +1 -0
  130. package/dist/ui/components/IntrospectionUpload.js +30 -0
  131. package/dist/ui/components/Login.d.ts +19 -0
  132. package/dist/ui/components/Login.d.ts.map +1 -0
  133. package/dist/ui/components/Login.js +38 -0
  134. package/dist/ui/components/OutputJson.d.ts +10 -0
  135. package/dist/ui/components/OutputJson.d.ts.map +1 -0
  136. package/dist/ui/components/OutputJson.js +18 -0
  137. package/dist/ui/components/SSH.d.ts.map +1 -1
  138. package/dist/ui/components/SSH.js +2 -2
  139. package/dist/ui/components/SamplesUpload.d.ts +10 -0
  140. package/dist/ui/components/SamplesUpload.d.ts.map +1 -0
  141. package/dist/ui/components/SamplesUpload.js +24 -0
  142. package/dist/ui/components/Sampling.d.ts +10 -0
  143. package/dist/ui/components/Sampling.d.ts.map +1 -0
  144. package/dist/ui/components/Sampling.js +58 -0
  145. package/dist/ui/components/Session.d.ts.map +1 -1
  146. package/dist/ui/components/Session.js +4 -4
  147. package/dist/ui/components/Spinner.d.ts.map +1 -1
  148. package/dist/ui/components/Spinner.js +17 -5
  149. package/dist/ui/components/TextInput.d.ts +11 -0
  150. package/dist/ui/components/TextInput.d.ts.map +1 -0
  151. package/dist/ui/components/TextInput.js +286 -0
  152. package/dist/ui/components/UserExplanation.d.ts +10 -0
  153. package/dist/ui/components/UserExplanation.d.ts.map +1 -0
  154. package/dist/ui/components/UserExplanation.js +34 -0
  155. package/dist/validatePaths.d.mts +2 -1
  156. package/dist/validatePaths.d.mts.map +1 -1
  157. package/dist/validatePaths.mjs +6 -2
  158. package/package.json +7 -7
  159. package/dist/app/index.d.mts +0 -3
  160. package/dist/app/index.d.mts.map +0 -1
  161. package/dist/app/index.mjs +0 -82
  162. package/dist/schemas/index.d.mts +0 -107
  163. package/dist/schemas/index.d.mts.map +0 -1
  164. package/dist/schemas/index.mjs +0 -116
@@ -0,0 +1,61 @@
1
+ export const fetchPublicCustomTypes = async (pool) => {
2
+ const [domains, composites] = await Promise.all([
3
+ pool.query(`
4
+ SELECT
5
+ t.typname AS name,
6
+ format_type(t.typbasetype, t.typtypmod) AS base_type,
7
+ t.typnotnull AS not_null,
8
+ t.typdefault AS default_expression,
9
+ (
10
+ SELECT json_agg(json_build_object(
11
+ 'name', con.conname,
12
+ 'expression', pg_get_constraintdef(con.oid, true)
13
+ ) ORDER BY con.conname)
14
+ FROM pg_catalog.pg_constraint con
15
+ WHERE con.contypid = t.oid
16
+ ) AS check_constraints
17
+ FROM pg_catalog.pg_type t
18
+ JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace
19
+ WHERE n.nspname = 'public'
20
+ AND t.typtype = 'd'
21
+ ORDER BY t.typname
22
+ `),
23
+ pool.query(`
24
+ SELECT
25
+ t.typname AS name,
26
+ (
27
+ SELECT json_agg(json_build_object(
28
+ 'name', a.attname,
29
+ 'type', format_type(a.atttypid, a.atttypmod),
30
+ 'position', a.attnum
31
+ ) ORDER BY a.attnum)
32
+ FROM pg_catalog.pg_attribute a
33
+ WHERE a.attrelid = t.typrelid
34
+ AND a.attnum > 0
35
+ AND NOT a.attisdropped
36
+ ) AS attributes
37
+ FROM pg_catalog.pg_type t
38
+ JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace
39
+ JOIN pg_catalog.pg_class c ON c.oid = t.typrelid
40
+ WHERE n.nspname = 'public'
41
+ AND t.typtype = 'c'
42
+ AND c.relkind = 'c'
43
+ ORDER BY t.typname
44
+ `),
45
+ ]);
46
+ const domainInfos = domains.rows.map((r) => ({
47
+ kind: 'domain',
48
+ name: r.name,
49
+ base_type: r.base_type,
50
+ not_null: r.not_null,
51
+ default_expression: r.default_expression,
52
+ check_constraints: r.check_constraints ?? [],
53
+ }));
54
+ const compositeInfos = composites.rows.map((r) => ({
55
+ kind: 'composite',
56
+ name: r.name,
57
+ attributes: r.attributes ?? [],
58
+ }));
59
+ return [...domainInfos, ...compositeInfos];
60
+ };
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXR5cGVzLm1qcyIsInNvdXJjZVJvb3QiOiIuL3NyYy8iLCJzb3VyY2VzIjpbImRiL2N1c3RvbS10eXBlcy5tdHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBd0NBLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLEtBQUssRUFDdkMsSUFBVSxFQUNnQixFQUFFO0lBQzVCLE1BQU0sQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDO1FBQzVDLElBQUksQ0FBQyxLQUFLLENBQWE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7U0FtQnRCLENBQUM7UUFDRixJQUFJLENBQUMsS0FBSyxDQUFnQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1NBcUJ6QixDQUFDO0tBQ0wsQ0FBQyxDQUFDO0lBRUgsTUFBTSxXQUFXLEdBQWtCLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELElBQUksRUFBRSxRQUFRO1FBQ2QsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJO1FBQ1osU0FBUyxFQUFFLENBQUMsQ0FBQyxTQUFTO1FBQ3RCLFFBQVEsRUFBRSxDQUFDLENBQUMsUUFBUTtRQUNwQixrQkFBa0IsRUFBRSxDQUFDLENBQUMsa0JBQWtCO1FBQ3hDLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxpQkFBaUIsSUFBSSxFQUFFO0tBQy9DLENBQUMsQ0FBQyxDQUFDO0lBRUosTUFBTSxjQUFjLEdBQXFCLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pFLElBQUksRUFBRSxXQUFXO1FBQ2pCLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSTtRQUNaLFVBQVUsRUFBRSxDQUFDLENBQUMsVUFBVSxJQUFJLEVBQUU7S0FDakMsQ0FBQyxDQUFDLENBQUM7SUFFSixPQUFPLENBQUMsR0FBRyxXQUFXLEVBQUUsR0FBRyxjQUFjLENBQUMsQ0FBQztBQUMvQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7UG9vbH0gZnJvbSAncGcnO1xuXG5leHBvcnQgdHlwZSBUQ3VzdG9tVHlwZUtpbmQgPSAnY29tcG9zaXRlJyB8ICdkb21haW4nO1xuXG5leHBvcnQgdHlwZSBURG9tYWluSW5mbyA9IHtcbiAgICBraW5kOiAnZG9tYWluJztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgYmFzZV90eXBlOiBzdHJpbmc7XG4gICAgbm90X251bGw6IGJvb2xlYW47XG4gICAgZGVmYXVsdF9leHByZXNzaW9uOiBzdHJpbmcgfCBudWxsO1xuICAgIGNoZWNrX2NvbnN0cmFpbnRzOiByZWFkb25seSB7bmFtZTogc3RyaW5nOyBleHByZXNzaW9uOiBzdHJpbmd9W107XG59O1xuXG5leHBvcnQgdHlwZSBUQ29tcG9zaXRlQXR0cmlidXRlID0ge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICB0eXBlOiBzdHJpbmc7XG4gICAgcG9zaXRpb246IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIFRDb21wb3NpdGVJbmZvID0ge1xuICAgIGtpbmQ6ICdjb21wb3NpdGUnO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBhdHRyaWJ1dGVzOiByZWFkb25seSBUQ29tcG9zaXRlQXR0cmlidXRlW107XG59O1xuXG5leHBvcnQgdHlwZSBUQ3VzdG9tVHlwZUluZm8gPSBURG9tYWluSW5mbyB8IFRDb21wb3NpdGVJbmZvO1xuXG50eXBlIFREb21haW5Sb3cgPSB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGJhc2VfdHlwZTogc3RyaW5nO1xuICAgIG5vdF9udWxsOiBib29sZWFuO1xuICAgIGRlZmF1bHRfZXhwcmVzc2lvbjogc3RyaW5nIHwgbnVsbDtcbiAgICBjaGVja19jb25zdHJhaW50czogcmVhZG9ubHkge25hbWU6IHN0cmluZzsgZXhwcmVzc2lvbjogc3RyaW5nfVtdIHwgbnVsbDtcbn07XG5cbnR5cGUgVENvbXBvc2l0ZVJvdyA9IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgYXR0cmlidXRlczogcmVhZG9ubHkgVENvbXBvc2l0ZUF0dHJpYnV0ZVtdIHwgbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBmZXRjaFB1YmxpY0N1c3RvbVR5cGVzID0gYXN5bmMgKFxuICAgIHBvb2w6IFBvb2wsXG4pOiBQcm9taXNlPFRDdXN0b21UeXBlSW5mb1tdPiA9PiB7XG4gICAgY29uc3QgW2RvbWFpbnMsIGNvbXBvc2l0ZXNdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICBwb29sLnF1ZXJ5PFREb21haW5Sb3c+KGBcbiAgICAgICAgICAgIFNFTEVDVFxuICAgICAgICAgICAgICAgIHQudHlwbmFtZSBBUyBuYW1lLFxuICAgICAgICAgICAgICAgIGZvcm1hdF90eXBlKHQudHlwYmFzZXR5cGUsIHQudHlwdHlwbW9kKSBBUyBiYXNlX3R5cGUsXG4gICAgICAgICAgICAgICAgdC50eXBub3RudWxsIEFTIG5vdF9udWxsLFxuICAgICAgICAgICAgICAgIHQudHlwZGVmYXVsdCBBUyBkZWZhdWx0X2V4cHJlc3Npb24sXG4gICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICBTRUxFQ1QganNvbl9hZ2coanNvbl9idWlsZF9vYmplY3QoXG4gICAgICAgICAgICAgICAgICAgICAgICAnbmFtZScsIGNvbi5jb25uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2V4cHJlc3Npb24nLCBwZ19nZXRfY29uc3RyYWludGRlZihjb24ub2lkLCB0cnVlKVxuICAgICAgICAgICAgICAgICAgICApIE9SREVSIEJZIGNvbi5jb25uYW1lKVxuICAgICAgICAgICAgICAgICAgICBGUk9NIHBnX2NhdGFsb2cucGdfY29uc3RyYWludCBjb25cbiAgICAgICAgICAgICAgICAgICAgV0hFUkUgY29uLmNvbnR5cGlkID0gdC5vaWRcbiAgICAgICAgICAgICAgICApIEFTIGNoZWNrX2NvbnN0cmFpbnRzXG4gICAgICAgICAgICBGUk9NIHBnX2NhdGFsb2cucGdfdHlwZSB0XG4gICAgICAgICAgICBKT0lOIHBnX2NhdGFsb2cucGdfbmFtZXNwYWNlIG4gT04gbi5vaWQgPSB0LnR5cG5hbWVzcGFjZVxuICAgICAgICAgICAgV0hFUkUgbi5uc3BuYW1lID0gJ3B1YmxpYydcbiAgICAgICAgICAgICAgICBBTkQgdC50eXB0eXBlID0gJ2QnXG4gICAgICAgICAgICBPUkRFUiBCWSB0LnR5cG5hbWVcbiAgICAgICAgYCksXG4gICAgICAgIHBvb2wucXVlcnk8VENvbXBvc2l0ZVJvdz4oYFxuICAgICAgICAgICAgU0VMRUNUXG4gICAgICAgICAgICAgICAgdC50eXBuYW1lIEFTIG5hbWUsXG4gICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICBTRUxFQ1QganNvbl9hZ2coanNvbl9idWlsZF9vYmplY3QoXG4gICAgICAgICAgICAgICAgICAgICAgICAnbmFtZScsIGEuYXR0bmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICd0eXBlJywgZm9ybWF0X3R5cGUoYS5hdHR0eXBpZCwgYS5hdHR0eXBtb2QpLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3Bvc2l0aW9uJywgYS5hdHRudW1cbiAgICAgICAgICAgICAgICAgICAgKSBPUkRFUiBCWSBhLmF0dG51bSlcbiAgICAgICAgICAgICAgICAgICAgRlJPTSBwZ19jYXRhbG9nLnBnX2F0dHJpYnV0ZSBhXG4gICAgICAgICAgICAgICAgICAgIFdIRVJFIGEuYXR0cmVsaWQgPSB0LnR5cHJlbGlkXG4gICAgICAgICAgICAgICAgICAgICAgICBBTkQgYS5hdHRudW0gPiAwXG4gICAgICAgICAgICAgICAgICAgICAgICBBTkQgTk9UIGEuYXR0aXNkcm9wcGVkXG4gICAgICAgICAgICAgICAgKSBBUyBhdHRyaWJ1dGVzXG4gICAgICAgICAgICBGUk9NIHBnX2NhdGFsb2cucGdfdHlwZSB0XG4gICAgICAgICAgICBKT0lOIHBnX2NhdGFsb2cucGdfbmFtZXNwYWNlIG4gT04gbi5vaWQgPSB0LnR5cG5hbWVzcGFjZVxuICAgICAgICAgICAgSk9JTiBwZ19jYXRhbG9nLnBnX2NsYXNzIGMgT04gYy5vaWQgPSB0LnR5cHJlbGlkXG4gICAgICAgICAgICBXSEVSRSBuLm5zcG5hbWUgPSAncHVibGljJ1xuICAgICAgICAgICAgICAgIEFORCB0LnR5cHR5cGUgPSAnYydcbiAgICAgICAgICAgICAgICBBTkQgYy5yZWxraW5kID0gJ2MnXG4gICAgICAgICAgICBPUkRFUiBCWSB0LnR5cG5hbWVcbiAgICAgICAgYCksXG4gICAgXSk7XG5cbiAgICBjb25zdCBkb21haW5JbmZvczogVERvbWFpbkluZm9bXSA9IGRvbWFpbnMucm93cy5tYXAoKHIpID0+ICh7XG4gICAgICAgIGtpbmQ6ICdkb21haW4nLFxuICAgICAgICBuYW1lOiByLm5hbWUsXG4gICAgICAgIGJhc2VfdHlwZTogci5iYXNlX3R5cGUsXG4gICAgICAgIG5vdF9udWxsOiByLm5vdF9udWxsLFxuICAgICAgICBkZWZhdWx0X2V4cHJlc3Npb246IHIuZGVmYXVsdF9leHByZXNzaW9uLFxuICAgICAgICBjaGVja19jb25zdHJhaW50czogci5jaGVja19jb25zdHJhaW50cyA/PyBbXSxcbiAgICB9KSk7XG5cbiAgICBjb25zdCBjb21wb3NpdGVJbmZvczogVENvbXBvc2l0ZUluZm9bXSA9IGNvbXBvc2l0ZXMucm93cy5tYXAoKHIpID0+ICh7XG4gICAgICAgIGtpbmQ6ICdjb21wb3NpdGUnLFxuICAgICAgICBuYW1lOiByLm5hbWUsXG4gICAgICAgIGF0dHJpYnV0ZXM6IHIuYXR0cmlidXRlcyA/PyBbXSxcbiAgICB9KSk7XG5cbiAgICByZXR1cm4gWy4uLmRvbWFpbkluZm9zLCAuLi5jb21wb3NpdGVJbmZvc107XG59O1xuIl19
@@ -0,0 +1,8 @@
1
+ import type { Pool } from 'pg';
2
+ export type TExtensionInfo = {
3
+ name: string;
4
+ version: string;
5
+ schema: string;
6
+ };
7
+ export declare const fetchInstalledExtensions: (pool: Pool) => Promise<TExtensionInfo[]>;
8
+ //# sourceMappingURL=extensions.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extensions.d.mts","sourceRoot":"./src/","sources":["db/extensions.mts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,IAAI,CAAC;AAE7B,MAAM,MAAM,cAAc,GAAG;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,eAAO,MAAM,wBAAwB,GACjC,MAAM,IAAI,KACX,OAAO,CAAC,cAAc,EAAE,CAa1B,CAAC"}
@@ -0,0 +1,14 @@
1
+ export const fetchInstalledExtensions = async (pool) => {
2
+ const result = await pool.query(`
3
+ SELECT
4
+ e.extname AS name,
5
+ e.extversion AS version,
6
+ n.nspname AS schema
7
+ FROM pg_catalog.pg_extension e
8
+ JOIN pg_catalog.pg_namespace n ON n.oid = e.extnamespace
9
+ WHERE e.extname <> 'plpgsql'
10
+ ORDER BY e.extname
11
+ `);
12
+ return result.rows;
13
+ };
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0ZW5zaW9ucy5tanMiLCJzb3VyY2VSb290IjoiLi9zcmMvIiwic291cmNlcyI6WyJkYi9leHRlbnNpb25zLm10cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFRQSxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxLQUFLLEVBQ3pDLElBQVUsRUFDZSxFQUFFO0lBQzNCLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBaUI7Ozs7Ozs7OztLQVMvQyxDQUFDLENBQUM7SUFFSCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFDdkIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1Bvb2x9IGZyb20gJ3BnJztcblxuZXhwb3J0IHR5cGUgVEV4dGVuc2lvbkluZm8gPSB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHZlcnNpb246IHN0cmluZztcbiAgICBzY2hlbWE6IHN0cmluZztcbn07XG5cbmV4cG9ydCBjb25zdCBmZXRjaEluc3RhbGxlZEV4dGVuc2lvbnMgPSBhc3luYyAoXG4gICAgcG9vbDogUG9vbCxcbik6IFByb21pc2U8VEV4dGVuc2lvbkluZm9bXT4gPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBvb2wucXVlcnk8VEV4dGVuc2lvbkluZm8+KGBcbiAgICAgICAgU0VMRUNUXG4gICAgICAgICAgICBlLmV4dG5hbWUgQVMgbmFtZSxcbiAgICAgICAgICAgIGUuZXh0dmVyc2lvbiBBUyB2ZXJzaW9uLFxuICAgICAgICAgICAgbi5uc3BuYW1lIEFTIHNjaGVtYVxuICAgICAgICBGUk9NIHBnX2NhdGFsb2cucGdfZXh0ZW5zaW9uIGVcbiAgICAgICAgSk9JTiBwZ19jYXRhbG9nLnBnX25hbWVzcGFjZSBuIE9OIG4ub2lkID0gZS5leHRuYW1lc3BhY2VcbiAgICAgICAgV0hFUkUgZS5leHRuYW1lIDw+ICdwbHBnc3FsJ1xuICAgICAgICBPUkRFUiBCWSBlLmV4dG5hbWVcbiAgICBgKTtcblxuICAgIHJldHVybiByZXN1bHQucm93cztcbn07XG4iXX0=
@@ -7,14 +7,14 @@ export const fetchRelationForeignKeys = async (pool, relationName) => {
7
7
  FROM unnest(con.conkey) WITH ORDINALITY AS cols(attnum, ord)
8
8
  JOIN pg_attribute a ON a.attrelid = con.conrelid AND a.attnum = cols.attnum
9
9
  ORDER BY cols.ord
10
- ) AS attributes,
10
+ )::text[] AS attributes,
11
11
  ref_cl.relname AS referenced_relation,
12
12
  ARRAY(
13
13
  SELECT a.attname
14
14
  FROM unnest(con.confkey) WITH ORDINALITY AS cols(attnum, ord)
15
15
  JOIN pg_attribute a ON a.attrelid = con.confrelid AND a.attnum = cols.attnum
16
16
  ORDER BY cols.ord
17
- ) AS referenced_attributes,
17
+ )::text[] AS referenced_attributes,
18
18
  CASE con.confupdtype
19
19
  WHEN 'a' THEN 'NO ACTION'
20
20
  WHEN 'r' THEN 'RESTRICT'
@@ -41,4 +41,4 @@ export const fetchRelationForeignKeys = async (pool, relationName) => {
41
41
  `, [relationName]);
42
42
  return result.rows;
43
43
  };
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9yZWlnbi1rZXlzLm1qcyIsInNvdXJjZVJvb3QiOiIuL3NyYy8iLCJzb3VyY2VzIjpbImRiL2ZvcmVpZ24ta2V5cy5tdHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBbUJBLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLEtBQUssRUFDekMsSUFBVSxFQUNWLFlBQW9CLEVBQ00sRUFBRTtJQUM1QixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQzNCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7U0F1Q0MsRUFDRCxDQUFDLFlBQVksQ0FBQyxDQUNqQixDQUFDO0lBRUYsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDO0FBQ3ZCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtQb29sfSBmcm9tICdwZyc7XG5cbnR5cGUgVEZvcmVpZ25LZXlBY3Rpb24gPVxuICAgIHwgJ05PIEFDVElPTidcbiAgICB8ICdSRVNUUklDVCdcbiAgICB8ICdDQVNDQURFJ1xuICAgIHwgJ1NFVCBOVUxMJ1xuICAgIHwgJ1NFVCBERUZBVUxUJztcblxuZXhwb3J0IHR5cGUgVEZvcmVpZ25LZXlJbmZvID0ge1xuICAgIGNvbnN0cmFpbnRfbmFtZTogc3RyaW5nO1xuICAgIGF0dHJpYnV0ZXM6IHN0cmluZ1tdO1xuICAgIHJlZmVyZW5jZWRfcmVsYXRpb246IHN0cmluZztcbiAgICByZWZlcmVuY2VkX2F0dHJpYnV0ZXM6IHN0cmluZ1tdO1xuICAgIG9uX3VwZGF0ZTogVEZvcmVpZ25LZXlBY3Rpb247XG4gICAgb25fZGVsZXRlOiBURm9yZWlnbktleUFjdGlvbjtcbiAgICBjb21tZW50OiBzdHJpbmcgfCBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGZldGNoUmVsYXRpb25Gb3JlaWduS2V5cyA9IGFzeW5jIChcbiAgICBwb29sOiBQb29sLFxuICAgIHJlbGF0aW9uTmFtZTogc3RyaW5nLFxuKTogUHJvbWlzZTxURm9yZWlnbktleUluZm9bXT4gPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBvb2wucXVlcnk8VEZvcmVpZ25LZXlJbmZvPihcbiAgICAgICAgYFxuICAgICAgICBTRUxFQ1RcbiAgICAgICAgICAgIGNvbi5jb25uYW1lIEFTIGNvbnN0cmFpbnRfbmFtZSxcbiAgICAgICAgICAgIEFSUkFZKFxuICAgICAgICAgICAgICAgIFNFTEVDVCBhLmF0dG5hbWVcbiAgICAgICAgICAgICAgICBGUk9NIHVubmVzdChjb24uY29ua2V5KSBXSVRIIE9SRElOQUxJVFkgQVMgY29scyhhdHRudW0sIG9yZClcbiAgICAgICAgICAgICAgICBKT0lOIHBnX2F0dHJpYnV0ZSBhIE9OIGEuYXR0cmVsaWQgPSBjb24uY29ucmVsaWQgQU5EIGEuYXR0bnVtID0gY29scy5hdHRudW1cbiAgICAgICAgICAgICAgICBPUkRFUiBCWSBjb2xzLm9yZFxuICAgICAgICAgICAgKSBBUyBhdHRyaWJ1dGVzLFxuICAgICAgICAgICAgcmVmX2NsLnJlbG5hbWUgQVMgcmVmZXJlbmNlZF9yZWxhdGlvbixcbiAgICAgICAgICAgIEFSUkFZKFxuICAgICAgICAgICAgICAgIFNFTEVDVCBhLmF0dG5hbWVcbiAgICAgICAgICAgICAgICBGUk9NIHVubmVzdChjb24uY29uZmtleSkgV0lUSCBPUkRJTkFMSVRZIEFTIGNvbHMoYXR0bnVtLCBvcmQpXG4gICAgICAgICAgICAgICAgSk9JTiBwZ19hdHRyaWJ1dGUgYSBPTiBhLmF0dHJlbGlkID0gY29uLmNvbmZyZWxpZCBBTkQgYS5hdHRudW0gPSBjb2xzLmF0dG51bVxuICAgICAgICAgICAgICAgIE9SREVSIEJZIGNvbHMub3JkXG4gICAgICAgICAgICApIEFTIHJlZmVyZW5jZWRfYXR0cmlidXRlcyxcbiAgICAgICAgICAgIENBU0UgY29uLmNvbmZ1cGR0eXBlXG4gICAgICAgICAgICAgICAgV0hFTiAnYScgVEhFTiAnTk8gQUNUSU9OJ1xuICAgICAgICAgICAgICAgIFdIRU4gJ3InIFRIRU4gJ1JFU1RSSUNUJ1xuICAgICAgICAgICAgICAgIFdIRU4gJ2MnIFRIRU4gJ0NBU0NBREUnXG4gICAgICAgICAgICAgICAgV0hFTiAnbicgVEhFTiAnU0VUIE5VTEwnXG4gICAgICAgICAgICAgICAgV0hFTiAnZCcgVEhFTiAnU0VUIERFRkFVTFQnXG4gICAgICAgICAgICBFTkQgQVMgb25fdXBkYXRlLFxuICAgICAgICAgICAgQ0FTRSBjb24uY29uZmRlbHR5cGVcbiAgICAgICAgICAgICAgICBXSEVOICdhJyBUSEVOICdOTyBBQ1RJT04nXG4gICAgICAgICAgICAgICAgV0hFTiAncicgVEhFTiAnUkVTVFJJQ1QnXG4gICAgICAgICAgICAgICAgV0hFTiAnYycgVEhFTiAnQ0FTQ0FERSdcbiAgICAgICAgICAgICAgICBXSEVOICduJyBUSEVOICdTRVQgTlVMTCdcbiAgICAgICAgICAgICAgICBXSEVOICdkJyBUSEVOICdTRVQgREVGQVVMVCdcbiAgICAgICAgICAgIEVORCBBUyBvbl9kZWxldGUsXG4gICAgICAgICAgICBvYmpfZGVzY3JpcHRpb24oY29uLm9pZCwgJ3BnX2NvbnN0cmFpbnQnKSBBUyBjb21tZW50XG4gICAgICAgIEZST00gcGdfY2F0YWxvZy5wZ19jb25zdHJhaW50IGNvblxuICAgICAgICBKT0lOIHBnX2NhdGFsb2cucGdfY2xhc3MgY2wgT04gY2wub2lkID0gY29uLmNvbnJlbGlkXG4gICAgICAgIEpPSU4gcGdfY2F0YWxvZy5wZ19jbGFzcyByZWZfY2wgT04gcmVmX2NsLm9pZCA9IGNvbi5jb25mcmVsaWRcbiAgICAgICAgSk9JTiBwZ19jYXRhbG9nLnBnX25hbWVzcGFjZSBuIE9OIG4ub2lkID0gY2wucmVsbmFtZXNwYWNlXG4gICAgICAgIFdIRVJFIGNvbi5jb250eXBlID0gJ2YnXG4gICAgICAgICAgICBBTkQgbi5uc3BuYW1lID0gJ3B1YmxpYydcbiAgICAgICAgICAgIEFORCBjbC5yZWxuYW1lID0gJDFcbiAgICAgICAgT1JERVIgQlkgY29uLmNvbm5hbWVcbiAgICAgICAgYCxcbiAgICAgICAgW3JlbGF0aW9uTmFtZV0sXG4gICAgKTtcblxuICAgIHJldHVybiByZXN1bHQucm93cztcbn07XG4iXX0=
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9yZWlnbi1rZXlzLm1qcyIsInNvdXJjZVJvb3QiOiIuL3NyYy8iLCJzb3VyY2VzIjpbImRiL2ZvcmVpZ24ta2V5cy5tdHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBbUJBLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLEtBQUssRUFDekMsSUFBVSxFQUNWLFlBQW9CLEVBQ00sRUFBRTtJQUM1QixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQzNCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7U0F1Q0MsRUFDRCxDQUFDLFlBQVksQ0FBQyxDQUNqQixDQUFDO0lBRUYsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDO0FBQ3ZCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtQb29sfSBmcm9tICdwZyc7XG5cbnR5cGUgVEZvcmVpZ25LZXlBY3Rpb24gPVxuICAgIHwgJ05PIEFDVElPTidcbiAgICB8ICdSRVNUUklDVCdcbiAgICB8ICdDQVNDQURFJ1xuICAgIHwgJ1NFVCBOVUxMJ1xuICAgIHwgJ1NFVCBERUZBVUxUJztcblxuZXhwb3J0IHR5cGUgVEZvcmVpZ25LZXlJbmZvID0ge1xuICAgIGNvbnN0cmFpbnRfbmFtZTogc3RyaW5nO1xuICAgIGF0dHJpYnV0ZXM6IHN0cmluZ1tdO1xuICAgIHJlZmVyZW5jZWRfcmVsYXRpb246IHN0cmluZztcbiAgICByZWZlcmVuY2VkX2F0dHJpYnV0ZXM6IHN0cmluZ1tdO1xuICAgIG9uX3VwZGF0ZTogVEZvcmVpZ25LZXlBY3Rpb247XG4gICAgb25fZGVsZXRlOiBURm9yZWlnbktleUFjdGlvbjtcbiAgICBjb21tZW50OiBzdHJpbmcgfCBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGZldGNoUmVsYXRpb25Gb3JlaWduS2V5cyA9IGFzeW5jIChcbiAgICBwb29sOiBQb29sLFxuICAgIHJlbGF0aW9uTmFtZTogc3RyaW5nLFxuKTogUHJvbWlzZTxURm9yZWlnbktleUluZm9bXT4gPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBvb2wucXVlcnk8VEZvcmVpZ25LZXlJbmZvPihcbiAgICAgICAgYFxuICAgICAgICBTRUxFQ1RcbiAgICAgICAgICAgIGNvbi5jb25uYW1lIEFTIGNvbnN0cmFpbnRfbmFtZSxcbiAgICAgICAgICAgIEFSUkFZKFxuICAgICAgICAgICAgICAgIFNFTEVDVCBhLmF0dG5hbWVcbiAgICAgICAgICAgICAgICBGUk9NIHVubmVzdChjb24uY29ua2V5KSBXSVRIIE9SRElOQUxJVFkgQVMgY29scyhhdHRudW0sIG9yZClcbiAgICAgICAgICAgICAgICBKT0lOIHBnX2F0dHJpYnV0ZSBhIE9OIGEuYXR0cmVsaWQgPSBjb24uY29ucmVsaWQgQU5EIGEuYXR0bnVtID0gY29scy5hdHRudW1cbiAgICAgICAgICAgICAgICBPUkRFUiBCWSBjb2xzLm9yZFxuICAgICAgICAgICAgKTo6dGV4dFtdIEFTIGF0dHJpYnV0ZXMsXG4gICAgICAgICAgICByZWZfY2wucmVsbmFtZSBBUyByZWZlcmVuY2VkX3JlbGF0aW9uLFxuICAgICAgICAgICAgQVJSQVkoXG4gICAgICAgICAgICAgICAgU0VMRUNUIGEuYXR0bmFtZVxuICAgICAgICAgICAgICAgIEZST00gdW5uZXN0KGNvbi5jb25ma2V5KSBXSVRIIE9SRElOQUxJVFkgQVMgY29scyhhdHRudW0sIG9yZClcbiAgICAgICAgICAgICAgICBKT0lOIHBnX2F0dHJpYnV0ZSBhIE9OIGEuYXR0cmVsaWQgPSBjb24uY29uZnJlbGlkIEFORCBhLmF0dG51bSA9IGNvbHMuYXR0bnVtXG4gICAgICAgICAgICAgICAgT1JERVIgQlkgY29scy5vcmRcbiAgICAgICAgICAgICk6OnRleHRbXSBBUyByZWZlcmVuY2VkX2F0dHJpYnV0ZXMsXG4gICAgICAgICAgICBDQVNFIGNvbi5jb25mdXBkdHlwZVxuICAgICAgICAgICAgICAgIFdIRU4gJ2EnIFRIRU4gJ05PIEFDVElPTidcbiAgICAgICAgICAgICAgICBXSEVOICdyJyBUSEVOICdSRVNUUklDVCdcbiAgICAgICAgICAgICAgICBXSEVOICdjJyBUSEVOICdDQVNDQURFJ1xuICAgICAgICAgICAgICAgIFdIRU4gJ24nIFRIRU4gJ1NFVCBOVUxMJ1xuICAgICAgICAgICAgICAgIFdIRU4gJ2QnIFRIRU4gJ1NFVCBERUZBVUxUJ1xuICAgICAgICAgICAgRU5EIEFTIG9uX3VwZGF0ZSxcbiAgICAgICAgICAgIENBU0UgY29uLmNvbmZkZWx0eXBlXG4gICAgICAgICAgICAgICAgV0hFTiAnYScgVEhFTiAnTk8gQUNUSU9OJ1xuICAgICAgICAgICAgICAgIFdIRU4gJ3InIFRIRU4gJ1JFU1RSSUNUJ1xuICAgICAgICAgICAgICAgIFdIRU4gJ2MnIFRIRU4gJ0NBU0NBREUnXG4gICAgICAgICAgICAgICAgV0hFTiAnbicgVEhFTiAnU0VUIE5VTEwnXG4gICAgICAgICAgICAgICAgV0hFTiAnZCcgVEhFTiAnU0VUIERFRkFVTFQnXG4gICAgICAgICAgICBFTkQgQVMgb25fZGVsZXRlLFxuICAgICAgICAgICAgb2JqX2Rlc2NyaXB0aW9uKGNvbi5vaWQsICdwZ19jb25zdHJhaW50JykgQVMgY29tbWVudFxuICAgICAgICBGUk9NIHBnX2NhdGFsb2cucGdfY29uc3RyYWludCBjb25cbiAgICAgICAgSk9JTiBwZ19jYXRhbG9nLnBnX2NsYXNzIGNsIE9OIGNsLm9pZCA9IGNvbi5jb25yZWxpZFxuICAgICAgICBKT0lOIHBnX2NhdGFsb2cucGdfY2xhc3MgcmVmX2NsIE9OIHJlZl9jbC5vaWQgPSBjb24uY29uZnJlbGlkXG4gICAgICAgIEpPSU4gcGdfY2F0YWxvZy5wZ19uYW1lc3BhY2UgbiBPTiBuLm9pZCA9IGNsLnJlbG5hbWVzcGFjZVxuICAgICAgICBXSEVSRSBjb24uY29udHlwZSA9ICdmJ1xuICAgICAgICAgICAgQU5EIG4ubnNwbmFtZSA9ICdwdWJsaWMnXG4gICAgICAgICAgICBBTkQgY2wucmVsbmFtZSA9ICQxXG4gICAgICAgIE9SREVSIEJZIGNvbi5jb25uYW1lXG4gICAgICAgIGAsXG4gICAgICAgIFtyZWxhdGlvbk5hbWVdLFxuICAgICk7XG5cbiAgICByZXR1cm4gcmVzdWx0LnJvd3M7XG59O1xuIl19
@@ -0,0 +1,11 @@
1
+ import type { Pool } from 'pg';
2
+ export type TFunctionInfo = {
3
+ name: string;
4
+ language: string;
5
+ argument_types: string;
6
+ return_type: string;
7
+ definition: string;
8
+ is_trigger: boolean;
9
+ };
10
+ export declare const fetchPublicFunctions: (pool: Pool) => Promise<TFunctionInfo[]>;
11
+ //# sourceMappingURL=functions.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"functions.d.mts","sourceRoot":"./src/","sources":["db/functions.mts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,IAAI,CAAC;AAE7B,MAAM,MAAM,aAAa,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC7B,MAAM,IAAI,KACX,OAAO,CAAC,aAAa,EAAE,CAsBzB,CAAC"}
@@ -0,0 +1,23 @@
1
+ export const fetchPublicFunctions = async (pool) => {
2
+ const result = await pool.query(`
3
+ SELECT
4
+ p.proname AS name,
5
+ l.lanname AS language,
6
+ pg_get_function_arguments(p.oid) AS argument_types,
7
+ pg_get_function_result(p.oid) AS return_type,
8
+ pg_get_functiondef(p.oid) AS definition,
9
+ p.prorettype = 'trigger'::regtype AS is_trigger
10
+ FROM pg_catalog.pg_proc p
11
+ JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace
12
+ JOIN pg_catalog.pg_language l ON l.oid = p.prolang
13
+ WHERE n.nspname = 'public'
14
+ AND p.prokind = 'f'
15
+ AND NOT EXISTS (
16
+ SELECT 1 FROM pg_catalog.pg_depend d
17
+ WHERE d.objid = p.oid AND d.deptype = 'e'
18
+ )
19
+ ORDER BY p.proname
20
+ `);
21
+ return result.rows;
22
+ };
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb25zLm1qcyIsInNvdXJjZVJvb3QiOiIuL3NyYy8iLCJzb3VyY2VzIjpbImRiL2Z1bmN0aW9ucy5tdHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBV0EsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsS0FBSyxFQUNyQyxJQUFVLEVBQ2MsRUFBRTtJQUMxQixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQWdCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7S0FrQjlDLENBQUMsQ0FBQztJQUVILE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQztBQUN2QixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7UG9vbH0gZnJvbSAncGcnO1xuXG5leHBvcnQgdHlwZSBURnVuY3Rpb25JbmZvID0ge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBsYW5ndWFnZTogc3RyaW5nO1xuICAgIGFyZ3VtZW50X3R5cGVzOiBzdHJpbmc7XG4gICAgcmV0dXJuX3R5cGU6IHN0cmluZztcbiAgICBkZWZpbml0aW9uOiBzdHJpbmc7XG4gICAgaXNfdHJpZ2dlcjogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBjb25zdCBmZXRjaFB1YmxpY0Z1bmN0aW9ucyA9IGFzeW5jIChcbiAgICBwb29sOiBQb29sLFxuKTogUHJvbWlzZTxURnVuY3Rpb25JbmZvW10+ID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwb29sLnF1ZXJ5PFRGdW5jdGlvbkluZm8+KGBcbiAgICAgICAgU0VMRUNUXG4gICAgICAgICAgICBwLnByb25hbWUgQVMgbmFtZSxcbiAgICAgICAgICAgIGwubGFubmFtZSBBUyBsYW5ndWFnZSxcbiAgICAgICAgICAgIHBnX2dldF9mdW5jdGlvbl9hcmd1bWVudHMocC5vaWQpIEFTIGFyZ3VtZW50X3R5cGVzLFxuICAgICAgICAgICAgcGdfZ2V0X2Z1bmN0aW9uX3Jlc3VsdChwLm9pZCkgQVMgcmV0dXJuX3R5cGUsXG4gICAgICAgICAgICBwZ19nZXRfZnVuY3Rpb25kZWYocC5vaWQpIEFTIGRlZmluaXRpb24sXG4gICAgICAgICAgICBwLnByb3JldHR5cGUgPSAndHJpZ2dlcic6OnJlZ3R5cGUgQVMgaXNfdHJpZ2dlclxuICAgICAgICBGUk9NIHBnX2NhdGFsb2cucGdfcHJvYyBwXG4gICAgICAgIEpPSU4gcGdfY2F0YWxvZy5wZ19uYW1lc3BhY2UgbiBPTiBuLm9pZCA9IHAucHJvbmFtZXNwYWNlXG4gICAgICAgIEpPSU4gcGdfY2F0YWxvZy5wZ19sYW5ndWFnZSBsIE9OIGwub2lkID0gcC5wcm9sYW5nXG4gICAgICAgIFdIRVJFIG4ubnNwbmFtZSA9ICdwdWJsaWMnXG4gICAgICAgICAgICBBTkQgcC5wcm9raW5kID0gJ2YnXG4gICAgICAgICAgICBBTkQgTk9UIEVYSVNUUyAoXG4gICAgICAgICAgICAgICAgU0VMRUNUIDEgRlJPTSBwZ19jYXRhbG9nLnBnX2RlcGVuZCBkXG4gICAgICAgICAgICAgICAgV0hFUkUgZC5vYmppZCA9IHAub2lkIEFORCBkLmRlcHR5cGUgPSAnZSdcbiAgICAgICAgICAgIClcbiAgICAgICAgT1JERVIgQlkgcC5wcm9uYW1lXG4gICAgYCk7XG5cbiAgICByZXR1cm4gcmVzdWx0LnJvd3M7XG59O1xuIl19
@@ -1,4 +1,4 @@
1
- export { fetchPublicRelations, type TRelationType, type TRelationInfo, type TGroupedRelations, } from './relations.mjs';
1
+ export { fetchPublicRelations, fetchViewDefinition, type TRelationType, type TRelationInfo, type TGroupedRelations, } from './relations.mjs';
2
2
  export { fetchRelationAttributes, type TAttributeKind, type TGeneratedStorage, type TAttributeInfo, } from './attributes.mjs';
3
3
  export { fetchPublicEnums, type TEnumInfo, type TGroupedEnums, } from './enums.mjs';
4
4
  export { fetchRelationIndexes, type TIndexInfo } from './indexes.mjs';
@@ -7,4 +7,13 @@ export { fetchPostgresVersion, type TPostgresVersion, fetchDatabaseComment, fetc
7
7
  export { fetchRelationFileStats, type TRelationFileStats, } from './file-stats.mjs';
8
8
  export { analyzeRelation } from './analyze.mjs';
9
9
  export { fetchRelationStats, type TRelationStats, type TAttributeStats, } from './stats.mjs';
10
+ export { sampleColumn, sampleCompositeSubField, fetchCompositeSubFields, type TSampleStrategy, type TColumnSample, type TCompositeSubField, type TRelationKind, } from './sample.mjs';
11
+ export { fetchPublicCheckConstraints, type TCheckConstraintInfo, } from './check-constraints.mjs';
12
+ export { fetchInstalledExtensions, type TExtensionInfo } from './extensions.mjs';
13
+ export { fetchPublicSequences, type TSequenceInfo } from './sequences.mjs';
14
+ export { fetchPublicTriggers, type TTriggerInfo } from './triggers.mjs';
15
+ export { fetchPublicFunctions, type TFunctionInfo } from './functions.mjs';
16
+ export { fetchPublicCustomTypes, type TCustomTypeInfo, type TDomainInfo, type TCompositeInfo, type TCompositeAttribute, type TCustomTypeKind, } from './custom-types.mjs';
17
+ export { fetchPublicRLS, type TRelationRLS, type TPolicyInfo, type TPolicyCommand, } from './rls.mjs';
18
+ export { fetchPublicPlannerStatistics, type TRelationPlannerStats, type TAttributePlannerStats, type TExtendedStatistic, } from './planner-stats.mjs';
10
19
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","sourceRoot":"./src/","sources":["db/index.mts"],"names":[],"mappings":"AAAA,OAAO,EACH,oBAAoB,EACpB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,iBAAiB,GACzB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACH,uBAAuB,EACvB,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,cAAc,GACtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACH,gBAAgB,EAChB,KAAK,SAAS,EACd,KAAK,aAAa,GACrB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAC,oBAAoB,EAAE,KAAK,UAAU,EAAC,MAAM,eAAe,CAAC;AACpE,OAAO,EACH,wBAAwB,EACxB,KAAK,eAAe,GACvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACH,oBAAoB,EACpB,KAAK,gBAAgB,EACrB,oBAAoB,EACpB,uBAAuB,EACvB,KAAK,mBAAmB,GAC3B,MAAM,eAAe,CAAC;AACvB,OAAO,EACH,sBAAsB,EACtB,KAAK,kBAAkB,GAC1B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAC,eAAe,EAAC,MAAM,eAAe,CAAC;AAC9C,OAAO,EACH,kBAAkB,EAClB,KAAK,cAAc,EACnB,KAAK,eAAe,GACvB,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.mts","sourceRoot":"./src/","sources":["db/index.mts"],"names":[],"mappings":"AAAA,OAAO,EACH,oBAAoB,EACpB,mBAAmB,EACnB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,iBAAiB,GACzB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACH,uBAAuB,EACvB,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,cAAc,GACtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACH,gBAAgB,EAChB,KAAK,SAAS,EACd,KAAK,aAAa,GACrB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAC,oBAAoB,EAAE,KAAK,UAAU,EAAC,MAAM,eAAe,CAAC;AACpE,OAAO,EACH,wBAAwB,EACxB,KAAK,eAAe,GACvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACH,oBAAoB,EACpB,KAAK,gBAAgB,EACrB,oBAAoB,EACpB,uBAAuB,EACvB,KAAK,mBAAmB,GAC3B,MAAM,eAAe,CAAC;AACvB,OAAO,EACH,sBAAsB,EACtB,KAAK,kBAAkB,GAC1B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAC,eAAe,EAAC,MAAM,eAAe,CAAC;AAC9C,OAAO,EACH,kBAAkB,EAClB,KAAK,cAAc,EACnB,KAAK,eAAe,GACvB,MAAM,aAAa,CAAC;AACrB,OAAO,EACH,YAAY,EACZ,uBAAuB,EACvB,uBAAuB,EACvB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,aAAa,GACrB,MAAM,cAAc,CAAC;AACtB,OAAO,EACH,2BAA2B,EAC3B,KAAK,oBAAoB,GAC5B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAC,wBAAwB,EAAE,KAAK,cAAc,EAAC,MAAM,kBAAkB,CAAC;AAC/E,OAAO,EAAC,oBAAoB,EAAE,KAAK,aAAa,EAAC,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAC,mBAAmB,EAAE,KAAK,YAAY,EAAC,MAAM,gBAAgB,CAAC;AACtE,OAAO,EAAC,oBAAoB,EAAE,KAAK,aAAa,EAAC,MAAM,iBAAiB,CAAC;AACzE,OAAO,EACH,sBAAsB,EACtB,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,eAAe,GACvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACH,cAAc,EACd,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,cAAc,GACtB,MAAM,WAAW,CAAC;AACnB,OAAO,EACH,4BAA4B,EAC5B,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,GAC1B,MAAM,qBAAqB,CAAC"}
package/dist/db/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- export { fetchPublicRelations, } from './relations.mjs';
1
+ export { fetchPublicRelations, fetchViewDefinition, } from './relations.mjs';
2
2
  export { fetchRelationAttributes, } from './attributes.mjs';
3
3
  export { fetchPublicEnums, } from './enums.mjs';
4
4
  export { fetchRelationIndexes } from './indexes.mjs';
@@ -7,4 +7,13 @@ export { fetchPostgresVersion, fetchDatabaseComment, fetchDatabaseIdentifier, }
7
7
  export { fetchRelationFileStats, } from './file-stats.mjs';
8
8
  export { analyzeRelation } from './analyze.mjs';
9
9
  export { fetchRelationStats, } from './stats.mjs';
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgubWpzIiwic291cmNlUm9vdCI6Ii4vc3JjLyIsInNvdXJjZXMiOlsiZGIvaW5kZXgubXRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxvQkFBb0IsR0FJdkIsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQ0gsdUJBQXVCLEdBSTFCLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUNILGdCQUFnQixHQUduQixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUMsb0JBQW9CLEVBQWtCLE1BQU0sZUFBZSxDQUFDO0FBQ3BFLE9BQU8sRUFDSCx3QkFBd0IsR0FFM0IsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQ0gsb0JBQW9CLEVBRXBCLG9CQUFvQixFQUNwQix1QkFBdUIsR0FFMUIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNILHNCQUFzQixHQUV6QixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDOUMsT0FBTyxFQUNILGtCQUFrQixHQUdyQixNQUFNLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7XG4gICAgZmV0Y2hQdWJsaWNSZWxhdGlvbnMsXG4gICAgdHlwZSBUUmVsYXRpb25UeXBlLFxuICAgIHR5cGUgVFJlbGF0aW9uSW5mbyxcbiAgICB0eXBlIFRHcm91cGVkUmVsYXRpb25zLFxufSBmcm9tICcuL3JlbGF0aW9ucy5tanMnO1xuZXhwb3J0IHtcbiAgICBmZXRjaFJlbGF0aW9uQXR0cmlidXRlcyxcbiAgICB0eXBlIFRBdHRyaWJ1dGVLaW5kLFxuICAgIHR5cGUgVEdlbmVyYXRlZFN0b3JhZ2UsXG4gICAgdHlwZSBUQXR0cmlidXRlSW5mbyxcbn0gZnJvbSAnLi9hdHRyaWJ1dGVzLm1qcyc7XG5leHBvcnQge1xuICAgIGZldGNoUHVibGljRW51bXMsXG4gICAgdHlwZSBURW51bUluZm8sXG4gICAgdHlwZSBUR3JvdXBlZEVudW1zLFxufSBmcm9tICcuL2VudW1zLm1qcyc7XG5leHBvcnQge2ZldGNoUmVsYXRpb25JbmRleGVzLCB0eXBlIFRJbmRleEluZm99IGZyb20gJy4vaW5kZXhlcy5tanMnO1xuZXhwb3J0IHtcbiAgICBmZXRjaFJlbGF0aW9uRm9yZWlnbktleXMsXG4gICAgdHlwZSBURm9yZWlnbktleUluZm8sXG59IGZyb20gJy4vZm9yZWlnbi1rZXlzLm1qcyc7XG5leHBvcnQge1xuICAgIGZldGNoUG9zdGdyZXNWZXJzaW9uLFxuICAgIHR5cGUgVFBvc3RncmVzVmVyc2lvbixcbiAgICBmZXRjaERhdGFiYXNlQ29tbWVudCxcbiAgICBmZXRjaERhdGFiYXNlSWRlbnRpZmllcixcbiAgICB0eXBlIFREYXRhYmFzZUlkZW50aWZpZXIsXG59IGZyb20gJy4vdmVyc2lvbi5tanMnO1xuZXhwb3J0IHtcbiAgICBmZXRjaFJlbGF0aW9uRmlsZVN0YXRzLFxuICAgIHR5cGUgVFJlbGF0aW9uRmlsZVN0YXRzLFxufSBmcm9tICcuL2ZpbGUtc3RhdHMubWpzJztcbmV4cG9ydCB7YW5hbHl6ZVJlbGF0aW9ufSBmcm9tICcuL2FuYWx5emUubWpzJztcbmV4cG9ydCB7XG4gICAgZmV0Y2hSZWxhdGlvblN0YXRzLFxuICAgIHR5cGUgVFJlbGF0aW9uU3RhdHMsXG4gICAgdHlwZSBUQXR0cmlidXRlU3RhdHMsXG59IGZyb20gJy4vc3RhdHMubWpzJztcbiJdfQ==
10
+ export { sampleColumn, sampleCompositeSubField, fetchCompositeSubFields, } from './sample.mjs';
11
+ export { fetchPublicCheckConstraints, } from './check-constraints.mjs';
12
+ export { fetchInstalledExtensions } from './extensions.mjs';
13
+ export { fetchPublicSequences } from './sequences.mjs';
14
+ export { fetchPublicTriggers } from './triggers.mjs';
15
+ export { fetchPublicFunctions } from './functions.mjs';
16
+ export { fetchPublicCustomTypes, } from './custom-types.mjs';
17
+ export { fetchPublicRLS, } from './rls.mjs';
18
+ export { fetchPublicPlannerStatistics, } from './planner-stats.mjs';
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgubWpzIiwic291cmNlUm9vdCI6Ii4vc3JjLyIsInNvdXJjZXMiOlsiZGIvaW5kZXgubXRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxvQkFBb0IsRUFDcEIsbUJBQW1CLEdBSXRCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUNILHVCQUF1QixHQUkxQixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFDSCxnQkFBZ0IsR0FHbkIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFDLG9CQUFvQixFQUFrQixNQUFNLGVBQWUsQ0FBQztBQUNwRSxPQUFPLEVBQ0gsd0JBQXdCLEdBRTNCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUNILG9CQUFvQixFQUVwQixvQkFBb0IsRUFDcEIsdUJBQXVCLEdBRTFCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDSCxzQkFBc0IsR0FFekIsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzlDLE9BQU8sRUFDSCxrQkFBa0IsR0FHckIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUNILFlBQVksRUFDWix1QkFBdUIsRUFDdkIsdUJBQXVCLEdBSzFCLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFDSCwyQkFBMkIsR0FFOUIsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQUMsd0JBQXdCLEVBQXNCLE1BQU0sa0JBQWtCLENBQUM7QUFDL0UsT0FBTyxFQUFDLG9CQUFvQixFQUFxQixNQUFNLGlCQUFpQixDQUFDO0FBQ3pFLE9BQU8sRUFBQyxtQkFBbUIsRUFBb0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RSxPQUFPLEVBQUMsb0JBQW9CLEVBQXFCLE1BQU0saUJBQWlCLENBQUM7QUFDekUsT0FBTyxFQUNILHNCQUFzQixHQU16QixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFDSCxjQUFjLEdBSWpCLE1BQU0sV0FBVyxDQUFDO0FBQ25CLE9BQU8sRUFDSCw0QkFBNEIsR0FJL0IsTUFBTSxxQkFBcUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7XG4gICAgZmV0Y2hQdWJsaWNSZWxhdGlvbnMsXG4gICAgZmV0Y2hWaWV3RGVmaW5pdGlvbixcbiAgICB0eXBlIFRSZWxhdGlvblR5cGUsXG4gICAgdHlwZSBUUmVsYXRpb25JbmZvLFxuICAgIHR5cGUgVEdyb3VwZWRSZWxhdGlvbnMsXG59IGZyb20gJy4vcmVsYXRpb25zLm1qcyc7XG5leHBvcnQge1xuICAgIGZldGNoUmVsYXRpb25BdHRyaWJ1dGVzLFxuICAgIHR5cGUgVEF0dHJpYnV0ZUtpbmQsXG4gICAgdHlwZSBUR2VuZXJhdGVkU3RvcmFnZSxcbiAgICB0eXBlIFRBdHRyaWJ1dGVJbmZvLFxufSBmcm9tICcuL2F0dHJpYnV0ZXMubWpzJztcbmV4cG9ydCB7XG4gICAgZmV0Y2hQdWJsaWNFbnVtcyxcbiAgICB0eXBlIFRFbnVtSW5mbyxcbiAgICB0eXBlIFRHcm91cGVkRW51bXMsXG59IGZyb20gJy4vZW51bXMubWpzJztcbmV4cG9ydCB7ZmV0Y2hSZWxhdGlvbkluZGV4ZXMsIHR5cGUgVEluZGV4SW5mb30gZnJvbSAnLi9pbmRleGVzLm1qcyc7XG5leHBvcnQge1xuICAgIGZldGNoUmVsYXRpb25Gb3JlaWduS2V5cyxcbiAgICB0eXBlIFRGb3JlaWduS2V5SW5mbyxcbn0gZnJvbSAnLi9mb3JlaWduLWtleXMubWpzJztcbmV4cG9ydCB7XG4gICAgZmV0Y2hQb3N0Z3Jlc1ZlcnNpb24sXG4gICAgdHlwZSBUUG9zdGdyZXNWZXJzaW9uLFxuICAgIGZldGNoRGF0YWJhc2VDb21tZW50LFxuICAgIGZldGNoRGF0YWJhc2VJZGVudGlmaWVyLFxuICAgIHR5cGUgVERhdGFiYXNlSWRlbnRpZmllcixcbn0gZnJvbSAnLi92ZXJzaW9uLm1qcyc7XG5leHBvcnQge1xuICAgIGZldGNoUmVsYXRpb25GaWxlU3RhdHMsXG4gICAgdHlwZSBUUmVsYXRpb25GaWxlU3RhdHMsXG59IGZyb20gJy4vZmlsZS1zdGF0cy5tanMnO1xuZXhwb3J0IHthbmFseXplUmVsYXRpb259IGZyb20gJy4vYW5hbHl6ZS5tanMnO1xuZXhwb3J0IHtcbiAgICBmZXRjaFJlbGF0aW9uU3RhdHMsXG4gICAgdHlwZSBUUmVsYXRpb25TdGF0cyxcbiAgICB0eXBlIFRBdHRyaWJ1dGVTdGF0cyxcbn0gZnJvbSAnLi9zdGF0cy5tanMnO1xuZXhwb3J0IHtcbiAgICBzYW1wbGVDb2x1bW4sXG4gICAgc2FtcGxlQ29tcG9zaXRlU3ViRmllbGQsXG4gICAgZmV0Y2hDb21wb3NpdGVTdWJGaWVsZHMsXG4gICAgdHlwZSBUU2FtcGxlU3RyYXRlZ3ksXG4gICAgdHlwZSBUQ29sdW1uU2FtcGxlLFxuICAgIHR5cGUgVENvbXBvc2l0ZVN1YkZpZWxkLFxuICAgIHR5cGUgVFJlbGF0aW9uS2luZCxcbn0gZnJvbSAnLi9zYW1wbGUubWpzJztcbmV4cG9ydCB7XG4gICAgZmV0Y2hQdWJsaWNDaGVja0NvbnN0cmFpbnRzLFxuICAgIHR5cGUgVENoZWNrQ29uc3RyYWludEluZm8sXG59IGZyb20gJy4vY2hlY2stY29uc3RyYWludHMubWpzJztcbmV4cG9ydCB7ZmV0Y2hJbnN0YWxsZWRFeHRlbnNpb25zLCB0eXBlIFRFeHRlbnNpb25JbmZvfSBmcm9tICcuL2V4dGVuc2lvbnMubWpzJztcbmV4cG9ydCB7ZmV0Y2hQdWJsaWNTZXF1ZW5jZXMsIHR5cGUgVFNlcXVlbmNlSW5mb30gZnJvbSAnLi9zZXF1ZW5jZXMubWpzJztcbmV4cG9ydCB7ZmV0Y2hQdWJsaWNUcmlnZ2VycywgdHlwZSBUVHJpZ2dlckluZm99IGZyb20gJy4vdHJpZ2dlcnMubWpzJztcbmV4cG9ydCB7ZmV0Y2hQdWJsaWNGdW5jdGlvbnMsIHR5cGUgVEZ1bmN0aW9uSW5mb30gZnJvbSAnLi9mdW5jdGlvbnMubWpzJztcbmV4cG9ydCB7XG4gICAgZmV0Y2hQdWJsaWNDdXN0b21UeXBlcyxcbiAgICB0eXBlIFRDdXN0b21UeXBlSW5mbyxcbiAgICB0eXBlIFREb21haW5JbmZvLFxuICAgIHR5cGUgVENvbXBvc2l0ZUluZm8sXG4gICAgdHlwZSBUQ29tcG9zaXRlQXR0cmlidXRlLFxuICAgIHR5cGUgVEN1c3RvbVR5cGVLaW5kLFxufSBmcm9tICcuL2N1c3RvbS10eXBlcy5tanMnO1xuZXhwb3J0IHtcbiAgICBmZXRjaFB1YmxpY1JMUyxcbiAgICB0eXBlIFRSZWxhdGlvblJMUyxcbiAgICB0eXBlIFRQb2xpY3lJbmZvLFxuICAgIHR5cGUgVFBvbGljeUNvbW1hbmQsXG59IGZyb20gJy4vcmxzLm1qcyc7XG5leHBvcnQge1xuICAgIGZldGNoUHVibGljUGxhbm5lclN0YXRpc3RpY3MsXG4gICAgdHlwZSBUUmVsYXRpb25QbGFubmVyU3RhdHMsXG4gICAgdHlwZSBUQXR0cmlidXRlUGxhbm5lclN0YXRzLFxuICAgIHR5cGUgVEV4dGVuZGVkU3RhdGlzdGljLFxufSBmcm9tICcuL3BsYW5uZXItc3RhdHMubWpzJztcbiJdfQ==
@@ -0,0 +1,33 @@
1
+ import type { Pool } from 'pg';
2
+ export type TAttributePlannerStats = {
3
+ attribute_name: string;
4
+ inherited: boolean;
5
+ null_frac: number;
6
+ avg_width: number;
7
+ n_distinct: number;
8
+ most_common_vals: readonly string[] | null;
9
+ most_common_freqs: readonly number[] | null;
10
+ histogram_bounds: readonly string[] | null;
11
+ correlation: number | null;
12
+ most_common_elems: readonly string[] | null;
13
+ most_common_elem_freqs: readonly number[] | null;
14
+ elem_count_histogram: readonly number[] | null;
15
+ };
16
+ export type TExtendedStatistic = {
17
+ name: string;
18
+ kind: readonly string[];
19
+ columns: readonly string[];
20
+ ndistinct: string | null;
21
+ dependencies: string | null;
22
+ mcv: string | null;
23
+ };
24
+ export type TRelationPlannerStats = {
25
+ relation_name: string;
26
+ reltuples: number;
27
+ relpages: number;
28
+ relallvisible: number;
29
+ attributes: readonly TAttributePlannerStats[];
30
+ extended: readonly TExtendedStatistic[];
31
+ };
32
+ export declare const fetchPublicPlannerStatistics: (pool: Pool) => Promise<readonly TRelationPlannerStats[]>;
33
+ //# sourceMappingURL=planner-stats.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"planner-stats.d.mts","sourceRoot":"./src/","sources":["db/planner-stats.mts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,IAAI,CAAC;AAE7B,MAAM,MAAM,sBAAsB,GAAG;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;IAC3C,iBAAiB,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;IAC5C,gBAAgB,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;IAC3C,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,iBAAiB,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;IAC5C,sBAAsB,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;IACjD,oBAAoB,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;CAClD,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACxB,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,SAAS,sBAAsB,EAAE,CAAC;IAC9C,QAAQ,EAAE,SAAS,kBAAkB,EAAE,CAAC;CAC3C,CAAC;AAsCF,eAAO,MAAM,4BAA4B,GACrC,MAAM,IAAI,KACX,OAAO,CAAC,SAAS,qBAAqB,EAAE,CAwG1C,CAAC"}
@@ -0,0 +1,103 @@
1
+ // pg_stats exposes most_common_vals/histogram_bounds as anyarray which pg cannot
2
+ // serialize over the wire; cast to text[] so values come back as strings. On the
3
+ // replay side we cast back to the target column type before injecting.
4
+ export const fetchPublicPlannerStatistics = async (pool) => {
5
+ const [relationsResult, attributesResult, extendedResult] = await Promise.all([
6
+ pool.query(`
7
+ SELECT
8
+ c.relname AS relation_name,
9
+ c.reltuples::float8 AS reltuples,
10
+ c.relpages::int AS relpages,
11
+ c.relallvisible::int AS relallvisible
12
+ FROM pg_catalog.pg_class c
13
+ JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
14
+ WHERE n.nspname = 'public'
15
+ AND c.relkind IN ('r', 'p', 'm')
16
+ ORDER BY c.relname
17
+ `),
18
+ pool.query(`
19
+ SELECT
20
+ s.tablename AS relation_name,
21
+ s.attname AS attribute_name,
22
+ s.inherited AS inherited,
23
+ s.null_frac::float8 AS null_frac,
24
+ s.avg_width::int AS avg_width,
25
+ s.n_distinct::float8 AS n_distinct,
26
+ s.most_common_vals::text::text[] AS most_common_vals,
27
+ s.most_common_freqs AS most_common_freqs,
28
+ s.histogram_bounds::text::text[] AS histogram_bounds,
29
+ s.correlation::float8 AS correlation,
30
+ s.most_common_elems::text::text[] AS most_common_elems,
31
+ s.most_common_elem_freqs AS most_common_elem_freqs,
32
+ s.elem_count_histogram AS elem_count_histogram
33
+ FROM pg_catalog.pg_stats s
34
+ WHERE s.schemaname = 'public'
35
+ ORDER BY s.tablename, s.attname, s.inherited
36
+ `),
37
+ // pg_stats_ext exposes the column list under `attnames` (name[]),
38
+ // not `columns`. Kinds come back as `"char"[]`, which pg cannot
39
+ // serialize over the wire without an explicit cast to text[].
40
+ // This query is non-fatal: any catalog shape mismatch (e.g. older
41
+ // Postgres) falls through to empty extended stats rather than
42
+ // blocking the introspection upload.
43
+ pool
44
+ .query(`
45
+ SELECT
46
+ c.relname AS relation_name,
47
+ e.statistics_name AS name,
48
+ e.kinds::text::text[] AS kind,
49
+ e.attnames::text::text[] AS columns,
50
+ e.n_distinct::text AS ndistinct,
51
+ e.dependencies::text AS dependencies,
52
+ e.most_common_vals::text AS mcv
53
+ FROM pg_catalog.pg_stats_ext e
54
+ JOIN pg_catalog.pg_class c ON c.relname = e.tablename
55
+ JOIN pg_catalog.pg_namespace n
56
+ ON n.oid = c.relnamespace AND n.nspname = e.schemaname
57
+ WHERE e.schemaname = 'public'
58
+ ORDER BY c.relname, e.statistics_name
59
+ `)
60
+ .catch(() => ({ rows: [] })),
61
+ ]);
62
+ const attrsByRelation = new Map();
63
+ attributesResult.rows.forEach((r) => {
64
+ const bucket = attrsByRelation.get(r.relation_name) ?? [];
65
+ bucket.push({
66
+ attribute_name: r.attribute_name,
67
+ inherited: r.inherited,
68
+ null_frac: Number(r.null_frac),
69
+ avg_width: Number(r.avg_width),
70
+ n_distinct: Number(r.n_distinct),
71
+ most_common_vals: r.most_common_vals,
72
+ most_common_freqs: r.most_common_freqs,
73
+ histogram_bounds: r.histogram_bounds,
74
+ correlation: r.correlation === null ? null : Number(r.correlation),
75
+ most_common_elems: r.most_common_elems,
76
+ most_common_elem_freqs: r.most_common_elem_freqs,
77
+ elem_count_histogram: r.elem_count_histogram,
78
+ });
79
+ attrsByRelation.set(r.relation_name, bucket);
80
+ });
81
+ const extendedByRelation = new Map();
82
+ extendedResult.rows.forEach((r) => {
83
+ const bucket = extendedByRelation.get(r.relation_name) ?? [];
84
+ bucket.push({
85
+ name: r.name,
86
+ kind: r.kind,
87
+ columns: r.columns,
88
+ ndistinct: r.ndistinct,
89
+ dependencies: r.dependencies,
90
+ mcv: r.mcv,
91
+ });
92
+ extendedByRelation.set(r.relation_name, bucket);
93
+ });
94
+ return relationsResult.rows.map((r) => ({
95
+ relation_name: r.relation_name,
96
+ reltuples: Number(r.reltuples),
97
+ relpages: Number(r.relpages),
98
+ relallvisible: Number(r.relallvisible),
99
+ attributes: attrsByRelation.get(r.relation_name) ?? [],
100
+ extended: extendedByRelation.get(r.relation_name) ?? [],
101
+ }));
102
+ };
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhbm5lci1zdGF0cy5tanMiLCJzb3VyY2VSb290IjoiLi9zcmMvIiwic291cmNlcyI6WyJkYi9wbGFubmVyLXN0YXRzLm10cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFvRUEsaUZBQWlGO0FBQ2pGLGlGQUFpRjtBQUNqRix1RUFBdUU7QUFDdkUsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQUcsS0FBSyxFQUM3QyxJQUFVLEVBQytCLEVBQUU7SUFDM0MsTUFBTSxDQUFDLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLENBQUMsR0FDckQsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDO1FBQ2QsSUFBSSxDQUFDLEtBQUssQ0FBZTs7Ozs7Ozs7Ozs7YUFXeEIsQ0FBQztRQUNGLElBQUksQ0FBQyxLQUFLLENBQWdCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7YUFrQnpCLENBQUM7UUFDRixrRUFBa0U7UUFDbEUsZ0VBQWdFO1FBQ2hFLDhEQUE4RDtRQUM5RCxrRUFBa0U7UUFDbEUsOERBQThEO1FBQzlELHFDQUFxQztRQUNyQyxJQUFJO2FBQ0MsS0FBSyxDQUNGOzs7Ozs7Ozs7Ozs7Ozs7YUFlUCxDQUNJO2FBQ0EsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBQyxJQUFJLEVBQUUsRUFBb0IsRUFBQyxDQUFDLENBQUM7S0FDbkQsQ0FBQyxDQUFDO0lBRVAsTUFBTSxlQUFlLEdBQUcsSUFBSSxHQUFHLEVBQW9DLENBQUM7SUFDcEUsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQ2hDLE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMxRCxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ1IsY0FBYyxFQUFFLENBQUMsQ0FBQyxjQUFjO1lBQ2hDLFNBQVMsRUFBRSxDQUFDLENBQUMsU0FBUztZQUN0QixTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDOUIsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQzlCLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztZQUNoQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUMsZ0JBQWdCO1lBQ3BDLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxpQkFBaUI7WUFDdEMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLGdCQUFnQjtZQUNwQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLFdBQVcsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7WUFDbEUsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLGlCQUFpQjtZQUN0QyxzQkFBc0IsRUFBRSxDQUFDLENBQUMsc0JBQXNCO1lBQ2hELG9CQUFvQixFQUFFLENBQUMsQ0FBQyxvQkFBb0I7U0FDL0MsQ0FBQyxDQUFDO1FBQ0gsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2pELENBQUMsQ0FBQyxDQUFDO0lBRUgsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLEdBQUcsRUFBZ0MsQ0FBQztJQUNuRSxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQzlCLE1BQU0sTUFBTSxHQUFHLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzdELE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDUixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUk7WUFDWixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUk7WUFDWixPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU87WUFDbEIsU0FBUyxFQUFFLENBQUMsQ0FBQyxTQUFTO1lBQ3RCLFlBQVksRUFBRSxDQUFDLENBQUMsWUFBWTtZQUM1QixHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUc7U0FDYixDQUFDLENBQUM7UUFDSCxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNwRCxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDcEMsYUFBYSxFQUFFLENBQUMsQ0FBQyxhQUFhO1FBQzlCLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUM5QixRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7UUFDNUIsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDO1FBQ3RDLFVBQVUsRUFBRSxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFO1FBQ3RELFFBQVEsRUFBRSxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUU7S0FDMUQsQ0FBQyxDQUFDLENBQUM7QUFDUixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7UG9vbH0gZnJvbSAncGcnO1xuXG5leHBvcnQgdHlwZSBUQXR0cmlidXRlUGxhbm5lclN0YXRzID0ge1xuICAgIGF0dHJpYnV0ZV9uYW1lOiBzdHJpbmc7XG4gICAgaW5oZXJpdGVkOiBib29sZWFuO1xuICAgIG51bGxfZnJhYzogbnVtYmVyO1xuICAgIGF2Z193aWR0aDogbnVtYmVyO1xuICAgIG5fZGlzdGluY3Q6IG51bWJlcjtcbiAgICBtb3N0X2NvbW1vbl92YWxzOiByZWFkb25seSBzdHJpbmdbXSB8IG51bGw7XG4gICAgbW9zdF9jb21tb25fZnJlcXM6IHJlYWRvbmx5IG51bWJlcltdIHwgbnVsbDtcbiAgICBoaXN0b2dyYW1fYm91bmRzOiByZWFkb25seSBzdHJpbmdbXSB8IG51bGw7XG4gICAgY29ycmVsYXRpb246IG51bWJlciB8IG51bGw7XG4gICAgbW9zdF9jb21tb25fZWxlbXM6IHJlYWRvbmx5IHN0cmluZ1tdIHwgbnVsbDtcbiAgICBtb3N0X2NvbW1vbl9lbGVtX2ZyZXFzOiByZWFkb25seSBudW1iZXJbXSB8IG51bGw7XG4gICAgZWxlbV9jb3VudF9oaXN0b2dyYW06IHJlYWRvbmx5IG51bWJlcltdIHwgbnVsbDtcbn07XG5cbmV4cG9ydCB0eXBlIFRFeHRlbmRlZFN0YXRpc3RpYyA9IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAga2luZDogcmVhZG9ubHkgc3RyaW5nW107XG4gICAgY29sdW1uczogcmVhZG9ubHkgc3RyaW5nW107XG4gICAgbmRpc3RpbmN0OiBzdHJpbmcgfCBudWxsO1xuICAgIGRlcGVuZGVuY2llczogc3RyaW5nIHwgbnVsbDtcbiAgICBtY3Y6IHN0cmluZyB8IG51bGw7XG59O1xuXG5leHBvcnQgdHlwZSBUUmVsYXRpb25QbGFubmVyU3RhdHMgPSB7XG4gICAgcmVsYXRpb25fbmFtZTogc3RyaW5nO1xuICAgIHJlbHR1cGxlczogbnVtYmVyO1xuICAgIHJlbHBhZ2VzOiBudW1iZXI7XG4gICAgcmVsYWxsdmlzaWJsZTogbnVtYmVyO1xuICAgIGF0dHJpYnV0ZXM6IHJlYWRvbmx5IFRBdHRyaWJ1dGVQbGFubmVyU3RhdHNbXTtcbiAgICBleHRlbmRlZDogcmVhZG9ubHkgVEV4dGVuZGVkU3RhdGlzdGljW107XG59O1xuXG50eXBlIFRSZWxhdGlvblJvdyA9IHtcbiAgICByZWxhdGlvbl9uYW1lOiBzdHJpbmc7XG4gICAgcmVsdHVwbGVzOiBudW1iZXI7XG4gICAgcmVscGFnZXM6IG51bWJlcjtcbiAgICByZWxhbGx2aXNpYmxlOiBudW1iZXI7XG59O1xuXG50eXBlIFRBdHRyaWJ1dGVSb3cgPSB7XG4gICAgcmVsYXRpb25fbmFtZTogc3RyaW5nO1xuICAgIGF0dHJpYnV0ZV9uYW1lOiBzdHJpbmc7XG4gICAgaW5oZXJpdGVkOiBib29sZWFuO1xuICAgIG51bGxfZnJhYzogbnVtYmVyO1xuICAgIGF2Z193aWR0aDogbnVtYmVyO1xuICAgIG5fZGlzdGluY3Q6IG51bWJlcjtcbiAgICBtb3N0X2NvbW1vbl92YWxzOiByZWFkb25seSBzdHJpbmdbXSB8IG51bGw7XG4gICAgbW9zdF9jb21tb25fZnJlcXM6IHJlYWRvbmx5IG51bWJlcltdIHwgbnVsbDtcbiAgICBoaXN0b2dyYW1fYm91bmRzOiByZWFkb25seSBzdHJpbmdbXSB8IG51bGw7XG4gICAgY29ycmVsYXRpb246IG51bWJlciB8IG51bGw7XG4gICAgbW9zdF9jb21tb25fZWxlbXM6IHJlYWRvbmx5IHN0cmluZ1tdIHwgbnVsbDtcbiAgICBtb3N0X2NvbW1vbl9lbGVtX2ZyZXFzOiByZWFkb25seSBudW1iZXJbXSB8IG51bGw7XG4gICAgZWxlbV9jb3VudF9oaXN0b2dyYW06IHJlYWRvbmx5IG51bWJlcltdIHwgbnVsbDtcbn07XG5cbnR5cGUgVEV4dGVuZGVkUm93ID0ge1xuICAgIHJlbGF0aW9uX25hbWU6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAga2luZDogcmVhZG9ubHkgc3RyaW5nW107XG4gICAgY29sdW1uczogcmVhZG9ubHkgc3RyaW5nW107XG4gICAgbmRpc3RpbmN0OiBzdHJpbmcgfCBudWxsO1xuICAgIGRlcGVuZGVuY2llczogc3RyaW5nIHwgbnVsbDtcbiAgICBtY3Y6IHN0cmluZyB8IG51bGw7XG59O1xuXG4vLyBwZ19zdGF0cyBleHBvc2VzIG1vc3RfY29tbW9uX3ZhbHMvaGlzdG9ncmFtX2JvdW5kcyBhcyBhbnlhcnJheSB3aGljaCBwZyBjYW5ub3Rcbi8vIHNlcmlhbGl6ZSBvdmVyIHRoZSB3aXJlOyBjYXN0IHRvIHRleHRbXSBzbyB2YWx1ZXMgY29tZSBiYWNrIGFzIHN0cmluZ3MuIE9uIHRoZVxuLy8gcmVwbGF5IHNpZGUgd2UgY2FzdCBiYWNrIHRvIHRoZSB0YXJnZXQgY29sdW1uIHR5cGUgYmVmb3JlIGluamVjdGluZy5cbmV4cG9ydCBjb25zdCBmZXRjaFB1YmxpY1BsYW5uZXJTdGF0aXN0aWNzID0gYXN5bmMgKFxuICAgIHBvb2w6IFBvb2wsXG4pOiBQcm9taXNlPHJlYWRvbmx5IFRSZWxhdGlvblBsYW5uZXJTdGF0c1tdPiA9PiB7XG4gICAgY29uc3QgW3JlbGF0aW9uc1Jlc3VsdCwgYXR0cmlidXRlc1Jlc3VsdCwgZXh0ZW5kZWRSZXN1bHRdID1cbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICAgICAgcG9vbC5xdWVyeTxUUmVsYXRpb25Sb3c+KGBcbiAgICAgICAgICAgICAgICBTRUxFQ1RcbiAgICAgICAgICAgICAgICAgICAgYy5yZWxuYW1lIEFTIHJlbGF0aW9uX25hbWUsXG4gICAgICAgICAgICAgICAgICAgIGMucmVsdHVwbGVzOjpmbG9hdDggQVMgcmVsdHVwbGVzLFxuICAgICAgICAgICAgICAgICAgICBjLnJlbHBhZ2VzOjppbnQgQVMgcmVscGFnZXMsXG4gICAgICAgICAgICAgICAgICAgIGMucmVsYWxsdmlzaWJsZTo6aW50IEFTIHJlbGFsbHZpc2libGVcbiAgICAgICAgICAgICAgICBGUk9NIHBnX2NhdGFsb2cucGdfY2xhc3MgY1xuICAgICAgICAgICAgICAgIEpPSU4gcGdfY2F0YWxvZy5wZ19uYW1lc3BhY2UgbiBPTiBuLm9pZCA9IGMucmVsbmFtZXNwYWNlXG4gICAgICAgICAgICAgICAgV0hFUkUgbi5uc3BuYW1lID0gJ3B1YmxpYydcbiAgICAgICAgICAgICAgICAgICAgQU5EIGMucmVsa2luZCBJTiAoJ3InLCAncCcsICdtJylcbiAgICAgICAgICAgICAgICBPUkRFUiBCWSBjLnJlbG5hbWVcbiAgICAgICAgICAgIGApLFxuICAgICAgICAgICAgcG9vbC5xdWVyeTxUQXR0cmlidXRlUm93PihgXG4gICAgICAgICAgICAgICAgU0VMRUNUXG4gICAgICAgICAgICAgICAgICAgIHMudGFibGVuYW1lIEFTIHJlbGF0aW9uX25hbWUsXG4gICAgICAgICAgICAgICAgICAgIHMuYXR0bmFtZSBBUyBhdHRyaWJ1dGVfbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgcy5pbmhlcml0ZWQgQVMgaW5oZXJpdGVkLFxuICAgICAgICAgICAgICAgICAgICBzLm51bGxfZnJhYzo6ZmxvYXQ4IEFTIG51bGxfZnJhYyxcbiAgICAgICAgICAgICAgICAgICAgcy5hdmdfd2lkdGg6OmludCBBUyBhdmdfd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIHMubl9kaXN0aW5jdDo6ZmxvYXQ4IEFTIG5fZGlzdGluY3QsXG4gICAgICAgICAgICAgICAgICAgIHMubW9zdF9jb21tb25fdmFsczo6dGV4dDo6dGV4dFtdIEFTIG1vc3RfY29tbW9uX3ZhbHMsXG4gICAgICAgICAgICAgICAgICAgIHMubW9zdF9jb21tb25fZnJlcXMgQVMgbW9zdF9jb21tb25fZnJlcXMsXG4gICAgICAgICAgICAgICAgICAgIHMuaGlzdG9ncmFtX2JvdW5kczo6dGV4dDo6dGV4dFtdIEFTIGhpc3RvZ3JhbV9ib3VuZHMsXG4gICAgICAgICAgICAgICAgICAgIHMuY29ycmVsYXRpb246OmZsb2F0OCBBUyBjb3JyZWxhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgcy5tb3N0X2NvbW1vbl9lbGVtczo6dGV4dDo6dGV4dFtdIEFTIG1vc3RfY29tbW9uX2VsZW1zLFxuICAgICAgICAgICAgICAgICAgICBzLm1vc3RfY29tbW9uX2VsZW1fZnJlcXMgQVMgbW9zdF9jb21tb25fZWxlbV9mcmVxcyxcbiAgICAgICAgICAgICAgICAgICAgcy5lbGVtX2NvdW50X2hpc3RvZ3JhbSBBUyBlbGVtX2NvdW50X2hpc3RvZ3JhbVxuICAgICAgICAgICAgICAgIEZST00gcGdfY2F0YWxvZy5wZ19zdGF0cyBzXG4gICAgICAgICAgICAgICAgV0hFUkUgcy5zY2hlbWFuYW1lID0gJ3B1YmxpYydcbiAgICAgICAgICAgICAgICBPUkRFUiBCWSBzLnRhYmxlbmFtZSwgcy5hdHRuYW1lLCBzLmluaGVyaXRlZFxuICAgICAgICAgICAgYCksXG4gICAgICAgICAgICAvLyBwZ19zdGF0c19leHQgZXhwb3NlcyB0aGUgY29sdW1uIGxpc3QgdW5kZXIgYGF0dG5hbWVzYCAobmFtZVtdKSxcbiAgICAgICAgICAgIC8vIG5vdCBgY29sdW1uc2AuIEtpbmRzIGNvbWUgYmFjayBhcyBgXCJjaGFyXCJbXWAsIHdoaWNoIHBnIGNhbm5vdFxuICAgICAgICAgICAgLy8gc2VyaWFsaXplIG92ZXIgdGhlIHdpcmUgd2l0aG91dCBhbiBleHBsaWNpdCBjYXN0IHRvIHRleHRbXS5cbiAgICAgICAgICAgIC8vIFRoaXMgcXVlcnkgaXMgbm9uLWZhdGFsOiBhbnkgY2F0YWxvZyBzaGFwZSBtaXNtYXRjaCAoZS5nLiBvbGRlclxuICAgICAgICAgICAgLy8gUG9zdGdyZXMpIGZhbGxzIHRocm91Z2ggdG8gZW1wdHkgZXh0ZW5kZWQgc3RhdHMgcmF0aGVyIHRoYW5cbiAgICAgICAgICAgIC8vIGJsb2NraW5nIHRoZSBpbnRyb3NwZWN0aW9uIHVwbG9hZC5cbiAgICAgICAgICAgIHBvb2xcbiAgICAgICAgICAgICAgICAucXVlcnk8VEV4dGVuZGVkUm93PihcbiAgICAgICAgICAgICAgICAgICAgYFxuICAgICAgICAgICAgICAgIFNFTEVDVFxuICAgICAgICAgICAgICAgICAgICBjLnJlbG5hbWUgQVMgcmVsYXRpb25fbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgZS5zdGF0aXN0aWNzX25hbWUgQVMgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgZS5raW5kczo6dGV4dDo6dGV4dFtdIEFTIGtpbmQsXG4gICAgICAgICAgICAgICAgICAgIGUuYXR0bmFtZXM6OnRleHQ6OnRleHRbXSBBUyBjb2x1bW5zLFxuICAgICAgICAgICAgICAgICAgICBlLm5fZGlzdGluY3Q6OnRleHQgQVMgbmRpc3RpbmN0LFxuICAgICAgICAgICAgICAgICAgICBlLmRlcGVuZGVuY2llczo6dGV4dCBBUyBkZXBlbmRlbmNpZXMsXG4gICAgICAgICAgICAgICAgICAgIGUubW9zdF9jb21tb25fdmFsczo6dGV4dCBBUyBtY3ZcbiAgICAgICAgICAgICAgICBGUk9NIHBnX2NhdGFsb2cucGdfc3RhdHNfZXh0IGVcbiAgICAgICAgICAgICAgICBKT0lOIHBnX2NhdGFsb2cucGdfY2xhc3MgYyBPTiBjLnJlbG5hbWUgPSBlLnRhYmxlbmFtZVxuICAgICAgICAgICAgICAgIEpPSU4gcGdfY2F0YWxvZy5wZ19uYW1lc3BhY2UgblxuICAgICAgICAgICAgICAgICAgICBPTiBuLm9pZCA9IGMucmVsbmFtZXNwYWNlIEFORCBuLm5zcG5hbWUgPSBlLnNjaGVtYW5hbWVcbiAgICAgICAgICAgICAgICBXSEVSRSBlLnNjaGVtYW5hbWUgPSAncHVibGljJ1xuICAgICAgICAgICAgICAgIE9SREVSIEJZIGMucmVsbmFtZSwgZS5zdGF0aXN0aWNzX25hbWVcbiAgICAgICAgICAgIGAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5jYXRjaCgoKSA9PiAoe3Jvd3M6IFtdIGFzIFRFeHRlbmRlZFJvd1tdfSkpLFxuICAgICAgICBdKTtcblxuICAgIGNvbnN0IGF0dHJzQnlSZWxhdGlvbiA9IG5ldyBNYXA8c3RyaW5nLCBUQXR0cmlidXRlUGxhbm5lclN0YXRzW10+KCk7XG4gICAgYXR0cmlidXRlc1Jlc3VsdC5yb3dzLmZvckVhY2goKHIpID0+IHtcbiAgICAgICAgY29uc3QgYnVja2V0ID0gYXR0cnNCeVJlbGF0aW9uLmdldChyLnJlbGF0aW9uX25hbWUpID8/IFtdO1xuICAgICAgICBidWNrZXQucHVzaCh7XG4gICAgICAgICAgICBhdHRyaWJ1dGVfbmFtZTogci5hdHRyaWJ1dGVfbmFtZSxcbiAgICAgICAgICAgIGluaGVyaXRlZDogci5pbmhlcml0ZWQsXG4gICAgICAgICAgICBudWxsX2ZyYWM6IE51bWJlcihyLm51bGxfZnJhYyksXG4gICAgICAgICAgICBhdmdfd2lkdGg6IE51bWJlcihyLmF2Z193aWR0aCksXG4gICAgICAgICAgICBuX2Rpc3RpbmN0OiBOdW1iZXIoci5uX2Rpc3RpbmN0KSxcbiAgICAgICAgICAgIG1vc3RfY29tbW9uX3ZhbHM6IHIubW9zdF9jb21tb25fdmFscyxcbiAgICAgICAgICAgIG1vc3RfY29tbW9uX2ZyZXFzOiByLm1vc3RfY29tbW9uX2ZyZXFzLFxuICAgICAgICAgICAgaGlzdG9ncmFtX2JvdW5kczogci5oaXN0b2dyYW1fYm91bmRzLFxuICAgICAgICAgICAgY29ycmVsYXRpb246IHIuY29ycmVsYXRpb24gPT09IG51bGwgPyBudWxsIDogTnVtYmVyKHIuY29ycmVsYXRpb24pLFxuICAgICAgICAgICAgbW9zdF9jb21tb25fZWxlbXM6IHIubW9zdF9jb21tb25fZWxlbXMsXG4gICAgICAgICAgICBtb3N0X2NvbW1vbl9lbGVtX2ZyZXFzOiByLm1vc3RfY29tbW9uX2VsZW1fZnJlcXMsXG4gICAgICAgICAgICBlbGVtX2NvdW50X2hpc3RvZ3JhbTogci5lbGVtX2NvdW50X2hpc3RvZ3JhbSxcbiAgICAgICAgfSk7XG4gICAgICAgIGF0dHJzQnlSZWxhdGlvbi5zZXQoci5yZWxhdGlvbl9uYW1lLCBidWNrZXQpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgZXh0ZW5kZWRCeVJlbGF0aW9uID0gbmV3IE1hcDxzdHJpbmcsIFRFeHRlbmRlZFN0YXRpc3RpY1tdPigpO1xuICAgIGV4dGVuZGVkUmVzdWx0LnJvd3MuZm9yRWFjaCgocikgPT4ge1xuICAgICAgICBjb25zdCBidWNrZXQgPSBleHRlbmRlZEJ5UmVsYXRpb24uZ2V0KHIucmVsYXRpb25fbmFtZSkgPz8gW107XG4gICAgICAgIGJ1Y2tldC5wdXNoKHtcbiAgICAgICAgICAgIG5hbWU6IHIubmFtZSxcbiAgICAgICAgICAgIGtpbmQ6IHIua2luZCxcbiAgICAgICAgICAgIGNvbHVtbnM6IHIuY29sdW1ucyxcbiAgICAgICAgICAgIG5kaXN0aW5jdDogci5uZGlzdGluY3QsXG4gICAgICAgICAgICBkZXBlbmRlbmNpZXM6IHIuZGVwZW5kZW5jaWVzLFxuICAgICAgICAgICAgbWN2OiByLm1jdixcbiAgICAgICAgfSk7XG4gICAgICAgIGV4dGVuZGVkQnlSZWxhdGlvbi5zZXQoci5yZWxhdGlvbl9uYW1lLCBidWNrZXQpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlbGF0aW9uc1Jlc3VsdC5yb3dzLm1hcCgocikgPT4gKHtcbiAgICAgICAgcmVsYXRpb25fbmFtZTogci5yZWxhdGlvbl9uYW1lLFxuICAgICAgICByZWx0dXBsZXM6IE51bWJlcihyLnJlbHR1cGxlcyksXG4gICAgICAgIHJlbHBhZ2VzOiBOdW1iZXIoci5yZWxwYWdlcyksXG4gICAgICAgIHJlbGFsbHZpc2libGU6IE51bWJlcihyLnJlbGFsbHZpc2libGUpLFxuICAgICAgICBhdHRyaWJ1dGVzOiBhdHRyc0J5UmVsYXRpb24uZ2V0KHIucmVsYXRpb25fbmFtZSkgPz8gW10sXG4gICAgICAgIGV4dGVuZGVkOiBleHRlbmRlZEJ5UmVsYXRpb24uZ2V0KHIucmVsYXRpb25fbmFtZSkgPz8gW10sXG4gICAgfSkpO1xufTtcbiJdfQ==
@@ -7,4 +7,5 @@ export type TRelationInfo = {
7
7
  };
8
8
  export type TGroupedRelations = Record<TRelationType, TRelationInfo[]>;
9
9
  export declare const fetchPublicRelations: (pool: Pool) => Promise<TGroupedRelations>;
10
+ export declare const fetchViewDefinition: (pool: Pool, viewName: string) => Promise<string>;
10
11
  //# sourceMappingURL=relations.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"relations.d.mts","sourceRoot":"./src/","sources":["db/relations.mts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,IAAI,CAAC;AAG7B,MAAM,MAAM,aAAa,GACnB,mBAAmB,GACnB,OAAO,GACP,MAAM,GACN,mBAAmB,CAAC;AAE1B,MAAM,MAAM,aAAa,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,aAAa,CAAC;IACpB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,aAAa,EAAE,aAAa,EAAE,CAAC,CAAC;AAEvE,eAAO,MAAM,oBAAoB,GAC7B,MAAM,IAAI,KACX,OAAO,CAAC,iBAAiB,CAqB3B,CAAC"}
1
+ {"version":3,"file":"relations.d.mts","sourceRoot":"./src/","sources":["db/relations.mts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,IAAI,CAAC;AAG7B,MAAM,MAAM,aAAa,GACnB,mBAAmB,GACnB,OAAO,GACP,MAAM,GACN,mBAAmB,CAAC;AAE1B,MAAM,MAAM,aAAa,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,aAAa,CAAC;IACpB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,aAAa,EAAE,aAAa,EAAE,CAAC,CAAC;AAEvE,eAAO,MAAM,oBAAoB,GAC7B,MAAM,IAAI,KACX,OAAO,CAAC,iBAAiB,CAqB3B,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC5B,MAAM,IAAI,EACV,UAAU,MAAM,KACjB,OAAO,CAAC,MAAM,CAYhB,CAAC"}
@@ -20,4 +20,13 @@ export const fetchPublicRelations = async (pool) => {
20
20
  `);
21
21
  return groupBy(result.rows, (row) => row.type);
22
22
  };
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVsYXRpb25zLm1qcyIsInNvdXJjZVJvb3QiOiIuL3NyYy8iLCJzb3VyY2VzIjpbImRiL3JlbGF0aW9ucy5tdHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFlBQVksQ0FBQztBQWdCbkMsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsS0FBSyxFQUNyQyxJQUFVLEVBQ2dCLEVBQUU7SUFDNUIsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFnQjs7Ozs7Ozs7Ozs7Ozs7Ozs7S0FpQjlDLENBQUMsQ0FBQztJQUVILE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQXNCLENBQUM7QUFDeEUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1Bvb2x9IGZyb20gJ3BnJztcbmltcG9ydCB7Z3JvdXBCeX0gZnJvbSAnZXMtdG9vbGtpdCc7XG5cbmV4cG9ydCB0eXBlIFRSZWxhdGlvblR5cGUgPVxuICAgIHwgJ3BhcnRpdGlvbmVkX3RhYmxlJ1xuICAgIHwgJ3RhYmxlJ1xuICAgIHwgJ3ZpZXcnXG4gICAgfCAnbWF0ZXJpYWxpemVkX3ZpZXcnO1xuXG5leHBvcnQgdHlwZSBUUmVsYXRpb25JbmZvID0ge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICB0eXBlOiBUUmVsYXRpb25UeXBlO1xuICAgIGNvbW1lbnQ6IHN0cmluZyB8IG51bGw7XG59O1xuXG5leHBvcnQgdHlwZSBUR3JvdXBlZFJlbGF0aW9ucyA9IFJlY29yZDxUUmVsYXRpb25UeXBlLCBUUmVsYXRpb25JbmZvW10+O1xuXG5leHBvcnQgY29uc3QgZmV0Y2hQdWJsaWNSZWxhdGlvbnMgPSBhc3luYyAoXG4gICAgcG9vbDogUG9vbCxcbik6IFByb21pc2U8VEdyb3VwZWRSZWxhdGlvbnM+ID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwb29sLnF1ZXJ5PFRSZWxhdGlvbkluZm8+KGBcbiAgICAgICAgU0VMRUNUIHJlbG5hbWUgQVMgbmFtZSxcbiAgICAgICAgICAgIENBU0UgcmVsa2luZFxuICAgICAgICAgICAgICAgIFdIRU4gJ3AnIFRIRU4gJ3BhcnRpdGlvbmVkX3RhYmxlJ1xuICAgICAgICAgICAgICAgIFdIRU4gJ3InIFRIRU4gJ3RhYmxlJ1xuICAgICAgICAgICAgICAgIFdIRU4gJ3YnIFRIRU4gJ3ZpZXcnXG4gICAgICAgICAgICAgICAgV0hFTiAnbScgVEhFTiAnbWF0ZXJpYWxpemVkX3ZpZXcnXG4gICAgICAgICAgICBFTkQgQVMgdHlwZSxcbiAgICAgICAgICAgIG9ial9kZXNjcmlwdGlvbihvaWQsICdwZ19jbGFzcycpIEFTIGNvbW1lbnRcbiAgICAgICAgRlJPTSBwZ19jYXRhbG9nLnBnX2NsYXNzXG4gICAgICAgIFdIRVJFIHJlbG5hbWVzcGFjZSA9IChTRUxFQ1Qgb2lkIEZST00gcGdfbmFtZXNwYWNlIFdIRVJFIG5zcG5hbWUgPSAncHVibGljJylcbiAgICAgICAgICAgIEFORCAoXG4gICAgICAgICAgICAgICAgcmVsa2luZCA9ICdwJ1xuICAgICAgICAgICAgICAgIE9SIChyZWxraW5kID0gJ3InIEFORCBOT1QgcmVsaXNwYXJ0aXRpb24pXG4gICAgICAgICAgICAgICAgT1IgcmVsa2luZCBJTiAoJ3YnLCAnbScpXG4gICAgICAgICAgICApXG4gICAgICAgIE9SREVSIEJZIHR5cGUsIG5hbWVcbiAgICBgKTtcblxuICAgIHJldHVybiBncm91cEJ5KHJlc3VsdC5yb3dzLCAocm93KSA9PiByb3cudHlwZSkgYXMgVEdyb3VwZWRSZWxhdGlvbnM7XG59O1xuIl19
23
+ export const fetchViewDefinition = async (pool, viewName) => {
24
+ const result = await pool.query(`
25
+ SELECT pg_get_viewdef(c.oid, true) AS definition
26
+ FROM pg_catalog.pg_class c
27
+ WHERE c.relname = $1
28
+ AND c.relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = 'public')
29
+ `, [viewName]);
30
+ return result.rows[0].definition;
31
+ };
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVsYXRpb25zLm1qcyIsInNvdXJjZVJvb3QiOiIuL3NyYy8iLCJzb3VyY2VzIjpbImRiL3JlbGF0aW9ucy5tdHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFlBQVksQ0FBQztBQWdCbkMsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsS0FBSyxFQUNyQyxJQUFVLEVBQ2dCLEVBQUU7SUFDNUIsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFnQjs7Ozs7Ozs7Ozs7Ozs7Ozs7S0FpQjlDLENBQUMsQ0FBQztJQUVILE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQXNCLENBQUM7QUFDeEUsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsS0FBSyxFQUNwQyxJQUFVLEVBQ1YsUUFBZ0IsRUFDRCxFQUFFO0lBQ2pCLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FDM0I7Ozs7O1NBS0MsRUFDRCxDQUFDLFFBQVEsQ0FBQyxDQUNiLENBQUM7SUFFRixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFFLENBQUMsVUFBVSxDQUFDO0FBQ3RDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtQb29sfSBmcm9tICdwZyc7XG5pbXBvcnQge2dyb3VwQnl9IGZyb20gJ2VzLXRvb2xraXQnO1xuXG5leHBvcnQgdHlwZSBUUmVsYXRpb25UeXBlID1cbiAgICB8ICdwYXJ0aXRpb25lZF90YWJsZSdcbiAgICB8ICd0YWJsZSdcbiAgICB8ICd2aWV3J1xuICAgIHwgJ21hdGVyaWFsaXplZF92aWV3JztcblxuZXhwb3J0IHR5cGUgVFJlbGF0aW9uSW5mbyA9IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdHlwZTogVFJlbGF0aW9uVHlwZTtcbiAgICBjb21tZW50OiBzdHJpbmcgfCBudWxsO1xufTtcblxuZXhwb3J0IHR5cGUgVEdyb3VwZWRSZWxhdGlvbnMgPSBSZWNvcmQ8VFJlbGF0aW9uVHlwZSwgVFJlbGF0aW9uSW5mb1tdPjtcblxuZXhwb3J0IGNvbnN0IGZldGNoUHVibGljUmVsYXRpb25zID0gYXN5bmMgKFxuICAgIHBvb2w6IFBvb2wsXG4pOiBQcm9taXNlPFRHcm91cGVkUmVsYXRpb25zPiA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcG9vbC5xdWVyeTxUUmVsYXRpb25JbmZvPihgXG4gICAgICAgIFNFTEVDVCByZWxuYW1lIEFTIG5hbWUsXG4gICAgICAgICAgICBDQVNFIHJlbGtpbmRcbiAgICAgICAgICAgICAgICBXSEVOICdwJyBUSEVOICdwYXJ0aXRpb25lZF90YWJsZSdcbiAgICAgICAgICAgICAgICBXSEVOICdyJyBUSEVOICd0YWJsZSdcbiAgICAgICAgICAgICAgICBXSEVOICd2JyBUSEVOICd2aWV3J1xuICAgICAgICAgICAgICAgIFdIRU4gJ20nIFRIRU4gJ21hdGVyaWFsaXplZF92aWV3J1xuICAgICAgICAgICAgRU5EIEFTIHR5cGUsXG4gICAgICAgICAgICBvYmpfZGVzY3JpcHRpb24ob2lkLCAncGdfY2xhc3MnKSBBUyBjb21tZW50XG4gICAgICAgIEZST00gcGdfY2F0YWxvZy5wZ19jbGFzc1xuICAgICAgICBXSEVSRSByZWxuYW1lc3BhY2UgPSAoU0VMRUNUIG9pZCBGUk9NIHBnX25hbWVzcGFjZSBXSEVSRSBuc3BuYW1lID0gJ3B1YmxpYycpXG4gICAgICAgICAgICBBTkQgKFxuICAgICAgICAgICAgICAgIHJlbGtpbmQgPSAncCdcbiAgICAgICAgICAgICAgICBPUiAocmVsa2luZCA9ICdyJyBBTkQgTk9UIHJlbGlzcGFydGl0aW9uKVxuICAgICAgICAgICAgICAgIE9SIHJlbGtpbmQgSU4gKCd2JywgJ20nKVxuICAgICAgICAgICAgKVxuICAgICAgICBPUkRFUiBCWSB0eXBlLCBuYW1lXG4gICAgYCk7XG5cbiAgICByZXR1cm4gZ3JvdXBCeShyZXN1bHQucm93cywgKHJvdykgPT4gcm93LnR5cGUpIGFzIFRHcm91cGVkUmVsYXRpb25zO1xufTtcblxuZXhwb3J0IGNvbnN0IGZldGNoVmlld0RlZmluaXRpb24gPSBhc3luYyAoXG4gICAgcG9vbDogUG9vbCxcbiAgICB2aWV3TmFtZTogc3RyaW5nLFxuKTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwb29sLnF1ZXJ5PHtkZWZpbml0aW9uOiBzdHJpbmd9PihcbiAgICAgICAgYFxuICAgICAgICBTRUxFQ1QgcGdfZ2V0X3ZpZXdkZWYoYy5vaWQsIHRydWUpIEFTIGRlZmluaXRpb25cbiAgICAgICAgRlJPTSBwZ19jYXRhbG9nLnBnX2NsYXNzIGNcbiAgICAgICAgV0hFUkUgYy5yZWxuYW1lID0gJDFcbiAgICAgICAgICAgIEFORCBjLnJlbG5hbWVzcGFjZSA9IChTRUxFQ1Qgb2lkIEZST00gcGdfbmFtZXNwYWNlIFdIRVJFIG5zcG5hbWUgPSAncHVibGljJylcbiAgICAgICAgYCxcbiAgICAgICAgW3ZpZXdOYW1lXSxcbiAgICApO1xuXG4gICAgcmV0dXJuIHJlc3VsdC5yb3dzWzBdIS5kZWZpbml0aW9uO1xufTtcbiJdfQ==
@@ -0,0 +1,21 @@
1
+ import type { Pool } from 'pg';
2
+ export type TPolicyCommand = 'ALL' | 'SELECT' | 'INSERT' | 'UPDATE' | 'DELETE';
3
+ export type TRelationRLS = {
4
+ relation_name: string;
5
+ rls_enabled: boolean;
6
+ rls_forced: boolean;
7
+ };
8
+ export type TPolicyInfo = {
9
+ relation_name: string;
10
+ name: string;
11
+ permissive: boolean;
12
+ roles: readonly string[];
13
+ command: TPolicyCommand;
14
+ using_expression: string | null;
15
+ with_check_expression: string | null;
16
+ };
17
+ export declare const fetchPublicRLS: (pool: Pool) => Promise<{
18
+ readonly relations: readonly TRelationRLS[];
19
+ readonly policies: readonly TPolicyInfo[];
20
+ }>;
21
+ //# sourceMappingURL=rls.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rls.d.mts","sourceRoot":"./src/","sources":["db/rls.mts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,IAAI,CAAC;AAE7B,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE/E,MAAM,MAAM,YAAY,GAAG;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,OAAO,EAAE,cAAc,CAAC;IACxB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;CACxC,CAAC;AAEF,eAAO,MAAM,cAAc,GACvB,MAAM,IAAI,KACX,OAAO,CAAC;IACP,QAAQ,CAAC,SAAS,EAAE,SAAS,YAAY,EAAE,CAAC;IAC5C,QAAQ,CAAC,QAAQ,EAAE,SAAS,WAAW,EAAE,CAAC;CAC7C,CA+CA,CAAC"}
@@ -0,0 +1,48 @@
1
+ export const fetchPublicRLS = async (pool) => {
2
+ const [relations, policies] = await Promise.all([
3
+ pool.query(`
4
+ SELECT
5
+ c.relname AS relation_name,
6
+ c.relrowsecurity AS rls_enabled,
7
+ c.relforcerowsecurity AS rls_forced
8
+ FROM pg_catalog.pg_class c
9
+ JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
10
+ WHERE n.nspname = 'public'
11
+ AND c.relkind IN ('r', 'p')
12
+ AND (c.relrowsecurity OR c.relforcerowsecurity)
13
+ ORDER BY c.relname
14
+ `),
15
+ pool.query(`
16
+ SELECT
17
+ t.relname AS relation_name,
18
+ pol.polname AS name,
19
+ pol.polpermissive AS permissive,
20
+ COALESCE(
21
+ (
22
+ SELECT array_agg(
23
+ CASE WHEN r = 0 THEN 'public' ELSE pg_get_userbyid(r) END
24
+ ORDER BY r
25
+ )
26
+ FROM unnest(pol.polroles) AS r
27
+ ),
28
+ ARRAY[]::text[]
29
+ ) AS roles,
30
+ CASE pol.polcmd
31
+ WHEN '*' THEN 'ALL'
32
+ WHEN 'r' THEN 'SELECT'
33
+ WHEN 'a' THEN 'INSERT'
34
+ WHEN 'w' THEN 'UPDATE'
35
+ WHEN 'd' THEN 'DELETE'
36
+ END AS command,
37
+ pg_get_expr(pol.polqual, pol.polrelid) AS using_expression,
38
+ pg_get_expr(pol.polwithcheck, pol.polrelid) AS with_check_expression
39
+ FROM pg_catalog.pg_policy pol
40
+ JOIN pg_catalog.pg_class t ON t.oid = pol.polrelid
41
+ JOIN pg_catalog.pg_namespace n ON n.oid = t.relnamespace
42
+ WHERE n.nspname = 'public'
43
+ ORDER BY t.relname, pol.polname
44
+ `),
45
+ ]);
46
+ return { relations: relations.rows, policies: policies.rows };
47
+ };
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmxzLm1qcyIsInNvdXJjZVJvb3QiOiIuL3NyYy8iLCJzb3VyY2VzIjpbImRiL3Jscy5tdHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBb0JBLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxLQUFLLEVBQy9CLElBQVUsRUFJWCxFQUFFO0lBQ0QsTUFBTSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUM7UUFDNUMsSUFBSSxDQUFDLEtBQUssQ0FBZTs7Ozs7Ozs7Ozs7U0FXeEIsQ0FBQztRQUNGLElBQUksQ0FBQyxLQUFLLENBQWM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1NBNkJ2QixDQUFDO0tBQ0wsQ0FBQyxDQUFDO0lBRUgsT0FBTyxFQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsSUFBSSxFQUFDLENBQUM7QUFDaEUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1Bvb2x9IGZyb20gJ3BnJztcblxuZXhwb3J0IHR5cGUgVFBvbGljeUNvbW1hbmQgPSAnQUxMJyB8ICdTRUxFQ1QnIHwgJ0lOU0VSVCcgfCAnVVBEQVRFJyB8ICdERUxFVEUnO1xuXG5leHBvcnQgdHlwZSBUUmVsYXRpb25STFMgPSB7XG4gICAgcmVsYXRpb25fbmFtZTogc3RyaW5nO1xuICAgIHJsc19lbmFibGVkOiBib29sZWFuO1xuICAgIHJsc19mb3JjZWQ6IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBUUG9saWN5SW5mbyA9IHtcbiAgICByZWxhdGlvbl9uYW1lOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHBlcm1pc3NpdmU6IGJvb2xlYW47XG4gICAgcm9sZXM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAgIGNvbW1hbmQ6IFRQb2xpY3lDb21tYW5kO1xuICAgIHVzaW5nX2V4cHJlc3Npb246IHN0cmluZyB8IG51bGw7XG4gICAgd2l0aF9jaGVja19leHByZXNzaW9uOiBzdHJpbmcgfCBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGZldGNoUHVibGljUkxTID0gYXN5bmMgKFxuICAgIHBvb2w6IFBvb2wsXG4pOiBQcm9taXNlPHtcbiAgICByZWFkb25seSByZWxhdGlvbnM6IHJlYWRvbmx5IFRSZWxhdGlvblJMU1tdO1xuICAgIHJlYWRvbmx5IHBvbGljaWVzOiByZWFkb25seSBUUG9saWN5SW5mb1tdO1xufT4gPT4ge1xuICAgIGNvbnN0IFtyZWxhdGlvbnMsIHBvbGljaWVzXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgcG9vbC5xdWVyeTxUUmVsYXRpb25STFM+KGBcbiAgICAgICAgICAgIFNFTEVDVFxuICAgICAgICAgICAgICAgIGMucmVsbmFtZSBBUyByZWxhdGlvbl9uYW1lLFxuICAgICAgICAgICAgICAgIGMucmVscm93c2VjdXJpdHkgQVMgcmxzX2VuYWJsZWQsXG4gICAgICAgICAgICAgICAgYy5yZWxmb3JjZXJvd3NlY3VyaXR5IEFTIHJsc19mb3JjZWRcbiAgICAgICAgICAgIEZST00gcGdfY2F0YWxvZy5wZ19jbGFzcyBjXG4gICAgICAgICAgICBKT0lOIHBnX2NhdGFsb2cucGdfbmFtZXNwYWNlIG4gT04gbi5vaWQgPSBjLnJlbG5hbWVzcGFjZVxuICAgICAgICAgICAgV0hFUkUgbi5uc3BuYW1lID0gJ3B1YmxpYydcbiAgICAgICAgICAgICAgICBBTkQgYy5yZWxraW5kIElOICgncicsICdwJylcbiAgICAgICAgICAgICAgICBBTkQgKGMucmVscm93c2VjdXJpdHkgT1IgYy5yZWxmb3JjZXJvd3NlY3VyaXR5KVxuICAgICAgICAgICAgT1JERVIgQlkgYy5yZWxuYW1lXG4gICAgICAgIGApLFxuICAgICAgICBwb29sLnF1ZXJ5PFRQb2xpY3lJbmZvPihgXG4gICAgICAgICAgICBTRUxFQ1RcbiAgICAgICAgICAgICAgICB0LnJlbG5hbWUgQVMgcmVsYXRpb25fbmFtZSxcbiAgICAgICAgICAgICAgICBwb2wucG9sbmFtZSBBUyBuYW1lLFxuICAgICAgICAgICAgICAgIHBvbC5wb2xwZXJtaXNzaXZlIEFTIHBlcm1pc3NpdmUsXG4gICAgICAgICAgICAgICAgQ09BTEVTQ0UoXG4gICAgICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgICAgIFNFTEVDVCBhcnJheV9hZ2coXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0FTRSBXSEVOIHIgPSAwIFRIRU4gJ3B1YmxpYycgRUxTRSBwZ19nZXRfdXNlcmJ5aWQocikgRU5EXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgT1JERVIgQlkgclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgRlJPTSB1bm5lc3QocG9sLnBvbHJvbGVzKSBBUyByXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIEFSUkFZW106OnRleHRbXVxuICAgICAgICAgICAgICAgICkgQVMgcm9sZXMsXG4gICAgICAgICAgICAgICAgQ0FTRSBwb2wucG9sY21kXG4gICAgICAgICAgICAgICAgICAgIFdIRU4gJyonIFRIRU4gJ0FMTCdcbiAgICAgICAgICAgICAgICAgICAgV0hFTiAncicgVEhFTiAnU0VMRUNUJ1xuICAgICAgICAgICAgICAgICAgICBXSEVOICdhJyBUSEVOICdJTlNFUlQnXG4gICAgICAgICAgICAgICAgICAgIFdIRU4gJ3cnIFRIRU4gJ1VQREFURSdcbiAgICAgICAgICAgICAgICAgICAgV0hFTiAnZCcgVEhFTiAnREVMRVRFJ1xuICAgICAgICAgICAgICAgIEVORCBBUyBjb21tYW5kLFxuICAgICAgICAgICAgICAgIHBnX2dldF9leHByKHBvbC5wb2xxdWFsLCBwb2wucG9scmVsaWQpIEFTIHVzaW5nX2V4cHJlc3Npb24sXG4gICAgICAgICAgICAgICAgcGdfZ2V0X2V4cHIocG9sLnBvbHdpdGhjaGVjaywgcG9sLnBvbHJlbGlkKSBBUyB3aXRoX2NoZWNrX2V4cHJlc3Npb25cbiAgICAgICAgICAgIEZST00gcGdfY2F0YWxvZy5wZ19wb2xpY3kgcG9sXG4gICAgICAgICAgICBKT0lOIHBnX2NhdGFsb2cucGdfY2xhc3MgdCBPTiB0Lm9pZCA9IHBvbC5wb2xyZWxpZFxuICAgICAgICAgICAgSk9JTiBwZ19jYXRhbG9nLnBnX25hbWVzcGFjZSBuIE9OIG4ub2lkID0gdC5yZWxuYW1lc3BhY2VcbiAgICAgICAgICAgIFdIRVJFIG4ubnNwbmFtZSA9ICdwdWJsaWMnXG4gICAgICAgICAgICBPUkRFUiBCWSB0LnJlbG5hbWUsIHBvbC5wb2xuYW1lXG4gICAgICAgIGApLFxuICAgIF0pO1xuXG4gICAgcmV0dXJuIHtyZWxhdGlvbnM6IHJlbGF0aW9ucy5yb3dzLCBwb2xpY2llczogcG9saWNpZXMucm93c307XG59O1xuIl19
@@ -0,0 +1,16 @@
1
+ import type { Pool } from 'pg';
2
+ export type TSampleStrategy = 'distinct' | 'random';
3
+ export type TColumnSample = {
4
+ readonly column_name: string;
5
+ readonly strategy: TSampleStrategy;
6
+ readonly values: readonly string[];
7
+ };
8
+ export type TCompositeSubField = {
9
+ readonly name: string;
10
+ readonly data_type: string;
11
+ };
12
+ export type TRelationKind = 'table' | 'partitioned_table' | 'view' | 'materialized_view';
13
+ export declare const sampleColumn: (pool: Pool, tableName: string, columnName: string, estimatedDistinct: number, estimatedRowCount: number, relationKind: TRelationKind) => Promise<TColumnSample>;
14
+ export declare const sampleCompositeSubField: (pool: Pool, tableName: string, columnName: string, subFieldName: string, estimatedDistinct: number, estimatedRowCount: number, relationKind: TRelationKind) => Promise<TColumnSample>;
15
+ export declare const fetchCompositeSubFields: (pool: Pool, typeName: string) => Promise<readonly TCompositeSubField[]>;
16
+ //# sourceMappingURL=sample.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sample.d.mts","sourceRoot":"./src/","sources":["db/sample.mts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,IAAI,CAAC;AAE7B,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,QAAQ,CAAC;AAEpD,MAAM,MAAM,aAAa,GAAG;IACxB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC9B,CAAC;AAiDF,MAAM,MAAM,aAAa,GACnB,OAAO,GACP,mBAAmB,GACnB,MAAM,GACN,mBAAmB,CAAC;AAO1B,eAAO,MAAM,YAAY,GACrB,MAAM,IAAI,EACV,WAAW,MAAM,EACjB,YAAY,MAAM,EAClB,mBAAmB,MAAM,EACzB,mBAAmB,MAAM,EACzB,cAAc,aAAa,KAC5B,OAAO,CAAC,aAAa,CA6BvB,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAChC,MAAM,IAAI,EACV,WAAW,MAAM,EACjB,YAAY,MAAM,EAClB,cAAc,MAAM,EACpB,mBAAmB,MAAM,EACzB,mBAAmB,MAAM,EACzB,cAAc,aAAa,KAC5B,OAAO,CAAC,aAAa,CAqCvB,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAChC,MAAM,IAAI,EACV,UAAU,MAAM,KACjB,OAAO,CAAC,SAAS,kBAAkB,EAAE,CAcvC,CAAC"}