dbctx 2.0.1 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.mjs +6004 -279
- package/package.json +11 -8
- package/dist/app/assemble.d.mts +0 -5
- package/dist/app/assemble.d.mts.map +0 -1
- package/dist/app/assemble.mjs +0 -182
- package/dist/app/config.d.mts +0 -9
- package/dist/app/config.d.mts.map +0 -1
- package/dist/app/config.mjs +0 -49
- package/dist/app/db.d.mts +0 -9
- package/dist/app/db.d.mts.map +0 -1
- package/dist/app/db.mjs +0 -182
- package/dist/app/detect.d.mts +0 -14
- package/dist/app/detect.d.mts.map +0 -1
- package/dist/app/detect.mjs +0 -108
- package/dist/app/list.d.mts +0 -4
- package/dist/app/list.d.mts.map +0 -1
- package/dist/app/list.mjs +0 -93
- package/dist/app/load-introspection.d.mts +0 -26
- package/dist/app/load-introspection.d.mts.map +0 -1
- package/dist/app/load-introspection.mjs +0 -89
- package/dist/app/login.d.mts +0 -2
- package/dist/app/login.d.mts.map +0 -1
- package/dist/app/login.mjs +0 -69
- package/dist/app/open-url.d.mts +0 -6
- package/dist/app/open-url.d.mts.map +0 -1
- package/dist/app/open-url.mjs +0 -33
- package/dist/app/sample.d.mts +0 -24
- package/dist/app/sample.d.mts.map +0 -1
- package/dist/app/sample.mjs +0 -257
- package/dist/app/session.d.mts +0 -9
- package/dist/app/session.d.mts.map +0 -1
- package/dist/app/session.mjs +0 -195
- package/dist/app/ssh.d.mts +0 -3
- package/dist/app/ssh.d.mts.map +0 -1
- package/dist/app/ssh.mjs +0 -218
- package/dist/app/tail.d.mts +0 -13
- package/dist/app/tail.d.mts.map +0 -1
- package/dist/app/tail.mjs +0 -168
- package/dist/db/analyze.d.mts +0 -3
- package/dist/db/analyze.d.mts.map +0 -1
- package/dist/db/analyze.mjs +0 -16
- package/dist/db/attributes.d.mts +0 -16
- package/dist/db/attributes.d.mts.map +0 -1
- package/dist/db/attributes.mjs +0 -37
- package/dist/db/check-constraints.d.mts +0 -9
- package/dist/db/check-constraints.d.mts.map +0 -1
- package/dist/db/check-constraints.mjs +0 -17
- package/dist/db/custom-types.d.mts +0 -26
- package/dist/db/custom-types.d.mts.map +0 -1
- package/dist/db/custom-types.mjs +0 -61
- package/dist/db/enums.d.mts +0 -8
- package/dist/db/enums.d.mts.map +0 -1
- package/dist/db/enums.mjs +0 -24
- package/dist/db/extensions.d.mts +0 -8
- package/dist/db/extensions.d.mts.map +0 -1
- package/dist/db/extensions.mjs +0 -14
- package/dist/db/file-stats.d.mts +0 -11
- package/dist/db/file-stats.d.mts.map +0 -1
- package/dist/db/file-stats.mjs +0 -43
- package/dist/db/foreign-keys.d.mts +0 -14
- package/dist/db/foreign-keys.d.mts.map +0 -1
- package/dist/db/foreign-keys.mjs +0 -44
- package/dist/db/functions.d.mts +0 -11
- package/dist/db/functions.d.mts.map +0 -1
- package/dist/db/functions.mjs +0 -23
- package/dist/db/index.d.mts +0 -19
- package/dist/db/index.d.mts.map +0 -1
- package/dist/db/index.mjs +0 -19
- package/dist/db/indexes.d.mts +0 -16
- package/dist/db/indexes.d.mts.map +0 -1
- package/dist/db/indexes.mjs +0 -38
- package/dist/db/planner-stats.d.mts +0 -33
- package/dist/db/planner-stats.d.mts.map +0 -1
- package/dist/db/planner-stats.mjs +0 -103
- package/dist/db/relations.d.mts +0 -11
- package/dist/db/relations.d.mts.map +0 -1
- package/dist/db/relations.mjs +0 -32
- package/dist/db/rls.d.mts +0 -21
- package/dist/db/rls.d.mts.map +0 -1
- package/dist/db/rls.mjs +0 -48
- package/dist/db/sample.d.mts +0 -16
- package/dist/db/sample.d.mts.map +0 -1
- package/dist/db/sample.mjs +0 -73
- package/dist/db/sequences.d.mts +0 -15
- package/dist/db/sequences.d.mts.map +0 -1
- package/dist/db/sequences.mjs +0 -31
- package/dist/db/stats.d.mts +0 -12
- package/dist/db/stats.d.mts.map +0 -1
- package/dist/db/stats.mjs +0 -34
- package/dist/db/triggers.d.mts +0 -11
- package/dist/db/triggers.d.mts.map +0 -1
- package/dist/db/triggers.mjs +0 -21
- package/dist/db/version.d.mts +0 -14
- package/dist/db/version.d.mts.map +0 -1
- package/dist/db/version.mjs +0 -27
- package/dist/flow/events.d.mts +0 -115
- package/dist/flow/events.d.mts.map +0 -1
- package/dist/flow/events.mjs +0 -2
- package/dist/flow/interpreter.d.mts +0 -21
- package/dist/flow/interpreter.d.mts.map +0 -1
- package/dist/flow/interpreter.mjs +0 -605
- package/dist/flow/projection.d.mts +0 -17
- package/dist/flow/projection.d.mts.map +0 -1
- package/dist/flow/projection.mjs +0 -83
- package/dist/flow/projection.test.d.mts +0 -2
- package/dist/flow/projection.test.d.mts.map +0 -1
- package/dist/flow/projection.test.mjs +0 -162
- package/dist/flow/reducer.d.mts +0 -5
- package/dist/flow/reducer.d.mts.map +0 -1
- package/dist/flow/reducer.mjs +0 -306
- package/dist/flow/reducer.test.d.mts +0 -2
- package/dist/flow/reducer.test.d.mts.map +0 -1
- package/dist/flow/reducer.test.mjs +0 -479
- package/dist/flow/run.d.mts +0 -3
- package/dist/flow/run.d.mts.map +0 -1
- package/dist/flow/run.mjs +0 -89
- package/dist/flow/states.d.mts +0 -54
- package/dist/flow/states.d.mts.map +0 -1
- package/dist/flow/states.mjs +0 -39
- package/dist/index.d.mts +0 -29
- package/dist/index.d.mts.map +0 -1
- package/dist/lib/atomic-write.d.mts +0 -4
- package/dist/lib/atomic-write.d.mts.map +0 -1
- package/dist/lib/atomic-write.mjs +0 -75
- package/dist/lib/env.d.mts +0 -2
- package/dist/lib/env.d.mts.map +0 -1
- package/dist/lib/env.mjs +0 -4
- package/dist/lib/stream-job.d.mts +0 -19
- package/dist/lib/stream-job.d.mts.map +0 -1
- package/dist/lib/stream-job.mjs +0 -55
- package/dist/lib/trpc-url.d.mts +0 -2
- package/dist/lib/trpc-url.d.mts.map +0 -1
- package/dist/lib/trpc-url.mjs +0 -5
- package/dist/lib/trpc.d.mts +0 -7
- package/dist/lib/trpc.d.mts.map +0 -1
- package/dist/lib/trpc.mjs +0 -37
- package/dist/lib/trpc.react.d.mts +0 -4
- package/dist/lib/trpc.react.d.mts.map +0 -1
- package/dist/lib/trpc.react.mjs +0 -3
- package/dist/lib/version.d.mts +0 -2
- package/dist/lib/version.d.mts.map +0 -1
- package/dist/lib/version.mjs +0 -5
- package/dist/logger.d.mts +0 -3
- package/dist/logger.d.mts.map +0 -1
- package/dist/logger.mjs +0 -11
- package/dist/providers/TrpcProvider.d.ts +0 -9
- package/dist/providers/TrpcProvider.d.ts.map +0 -1
- package/dist/providers/TrpcProvider.js +0 -41
- package/dist/store.d.mts +0 -176
- package/dist/store.d.mts.map +0 -1
- package/dist/store.mjs +0 -147
- package/dist/types/connection.d.mts +0 -17
- package/dist/types/connection.d.mts.map +0 -1
- package/dist/types/connection.mjs +0 -2
- package/dist/ui/App.d.ts +0 -10
- package/dist/ui/App.d.ts.map +0 -1
- package/dist/ui/App.js +0 -41
- package/dist/ui/components/Analyze.d.ts +0 -10
- package/dist/ui/components/Analyze.d.ts.map +0 -1
- package/dist/ui/components/Analyze.js +0 -54
- package/dist/ui/components/Billing.d.ts +0 -10
- package/dist/ui/components/Billing.d.ts.map +0 -1
- package/dist/ui/components/Billing.js +0 -40
- package/dist/ui/components/DB.d.ts +0 -10
- package/dist/ui/components/DB.d.ts.map +0 -1
- package/dist/ui/components/DB.js +0 -22
- package/dist/ui/components/DatabasePicker.d.ts +0 -13
- package/dist/ui/components/DatabasePicker.d.ts.map +0 -1
- package/dist/ui/components/DatabasePicker.js +0 -79
- package/dist/ui/components/Enrich.d.ts +0 -10
- package/dist/ui/components/Enrich.d.ts.map +0 -1
- package/dist/ui/components/Enrich.js +0 -41
- package/dist/ui/components/Error.d.ts +0 -7
- package/dist/ui/components/Error.d.ts.map +0 -1
- package/dist/ui/components/Error.js +0 -6
- package/dist/ui/components/Gate.d.ts +0 -10
- package/dist/ui/components/Gate.d.ts.map +0 -1
- package/dist/ui/components/Gate.js +0 -15
- package/dist/ui/components/Introspect.d.ts +0 -10
- package/dist/ui/components/Introspect.d.ts.map +0 -1
- package/dist/ui/components/Introspect.js +0 -66
- package/dist/ui/components/IntrospectionUpload.d.ts +0 -10
- package/dist/ui/components/IntrospectionUpload.d.ts.map +0 -1
- package/dist/ui/components/IntrospectionUpload.js +0 -30
- package/dist/ui/components/Login.d.ts +0 -19
- package/dist/ui/components/Login.d.ts.map +0 -1
- package/dist/ui/components/Login.js +0 -38
- package/dist/ui/components/OutputJson.d.ts +0 -10
- package/dist/ui/components/OutputJson.d.ts.map +0 -1
- package/dist/ui/components/OutputJson.js +0 -18
- package/dist/ui/components/PasswordInput.d.ts +0 -7
- package/dist/ui/components/PasswordInput.d.ts.map +0 -1
- package/dist/ui/components/PasswordInput.js +0 -32
- package/dist/ui/components/SSH.d.ts +0 -10
- package/dist/ui/components/SSH.d.ts.map +0 -1
- package/dist/ui/components/SSH.js +0 -22
- package/dist/ui/components/SamplesUpload.d.ts +0 -10
- package/dist/ui/components/SamplesUpload.d.ts.map +0 -1
- package/dist/ui/components/SamplesUpload.js +0 -24
- package/dist/ui/components/Sampling.d.ts +0 -10
- package/dist/ui/components/Sampling.d.ts.map +0 -1
- package/dist/ui/components/Sampling.js +0 -58
- package/dist/ui/components/Session.d.ts +0 -10
- package/dist/ui/components/Session.d.ts.map +0 -1
- package/dist/ui/components/Session.js +0 -47
- package/dist/ui/components/Spinner.d.ts +0 -3
- package/dist/ui/components/Spinner.d.ts.map +0 -1
- package/dist/ui/components/Spinner.js +0 -30
- package/dist/ui/components/Splash.d.ts +0 -3
- package/dist/ui/components/Splash.d.ts.map +0 -1
- package/dist/ui/components/Splash.js +0 -13
- package/dist/ui/components/TextInput.d.ts +0 -11
- package/dist/ui/components/TextInput.d.ts.map +0 -1
- package/dist/ui/components/TextInput.js +0 -286
- package/dist/ui/components/UserExplanation.d.ts +0 -10
- package/dist/ui/components/UserExplanation.d.ts.map +0 -1
- package/dist/ui/components/UserExplanation.js +0 -34
- package/dist/validatePaths.d.mts +0 -13
- package/dist/validatePaths.d.mts.map +0 -1
- package/dist/validatePaths.mjs +0 -58
|
@@ -1,103 +0,0 @@
|
|
|
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==
|
package/dist/db/relations.d.mts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { Pool } from 'pg';
|
|
2
|
-
export type TRelationType = 'partitioned_table' | 'table' | 'view' | 'materialized_view';
|
|
3
|
-
export type TRelationInfo = {
|
|
4
|
-
name: string;
|
|
5
|
-
type: TRelationType;
|
|
6
|
-
comment: string | null;
|
|
7
|
-
};
|
|
8
|
-
export type TGroupedRelations = Record<TRelationType, TRelationInfo[]>;
|
|
9
|
-
export declare const fetchPublicRelations: (pool: Pool) => Promise<TGroupedRelations>;
|
|
10
|
-
export declare const fetchViewDefinition: (pool: Pool, viewName: string) => Promise<string>;
|
|
11
|
-
//# sourceMappingURL=relations.d.mts.map
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
package/dist/db/relations.mjs
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { groupBy } from 'es-toolkit';
|
|
2
|
-
export const fetchPublicRelations = async (pool) => {
|
|
3
|
-
const result = await pool.query(`
|
|
4
|
-
SELECT relname AS name,
|
|
5
|
-
CASE relkind
|
|
6
|
-
WHEN 'p' THEN 'partitioned_table'
|
|
7
|
-
WHEN 'r' THEN 'table'
|
|
8
|
-
WHEN 'v' THEN 'view'
|
|
9
|
-
WHEN 'm' THEN 'materialized_view'
|
|
10
|
-
END AS type,
|
|
11
|
-
obj_description(oid, 'pg_class') AS comment
|
|
12
|
-
FROM pg_catalog.pg_class
|
|
13
|
-
WHERE relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = 'public')
|
|
14
|
-
AND (
|
|
15
|
-
relkind = 'p'
|
|
16
|
-
OR (relkind = 'r' AND NOT relispartition)
|
|
17
|
-
OR relkind IN ('v', 'm')
|
|
18
|
-
)
|
|
19
|
-
ORDER BY type, name
|
|
20
|
-
`);
|
|
21
|
-
return groupBy(result.rows, (row) => row.type);
|
|
22
|
-
};
|
|
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==
|
package/dist/db/rls.d.mts
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
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
|
package/dist/db/rls.d.mts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
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"}
|
package/dist/db/rls.mjs
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
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
|
package/dist/db/sample.d.mts
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
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
|
package/dist/db/sample.d.mts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
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"}
|
package/dist/db/sample.mjs
DELETED
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
const quoteIdent = (name) => `"${name.replace(/"/g, '""')}"`;
|
|
2
|
-
const LOW_CARDINALITY_THRESHOLD = 256;
|
|
3
|
-
const LOW_CARDINALITY_LIMIT = 256;
|
|
4
|
-
const HIGH_CARDINALITY_LIMIT = 64;
|
|
5
|
-
const BERNOULLI_OVERSAMPLE_FACTOR = 10;
|
|
6
|
-
const sampleDistinct = async (pool, tableName, columnExpr, limit) => {
|
|
7
|
-
const sql = `SELECT DISTINCT ${columnExpr}::text AS val FROM ${quoteIdent(tableName)} WHERE ${columnExpr} IS NOT NULL LIMIT $1`;
|
|
8
|
-
const result = await pool.query(sql, [limit]);
|
|
9
|
-
return result.rows.map((r) => r.val);
|
|
10
|
-
};
|
|
11
|
-
const sampleBernoulli = async (pool, tableName, columnExpr, estimatedRowCount, limit) => {
|
|
12
|
-
const percentage = Math.min(100, (limit / Math.max(estimatedRowCount, 1)) *
|
|
13
|
-
100 *
|
|
14
|
-
BERNOULLI_OVERSAMPLE_FACTOR);
|
|
15
|
-
const sql = `SELECT DISTINCT ${columnExpr}::text AS val FROM ${quoteIdent(tableName)} TABLESAMPLE BERNOULLI($1) WHERE ${columnExpr} IS NOT NULL LIMIT $2`;
|
|
16
|
-
const result = await pool.query(sql, [percentage, limit]);
|
|
17
|
-
return result.rows.map((r) => r.val);
|
|
18
|
-
};
|
|
19
|
-
const samplePlainLimit = async (pool, tableName, columnExpr, limit) => {
|
|
20
|
-
const sql = `SELECT ${columnExpr}::text AS val FROM ${quoteIdent(tableName)} WHERE ${columnExpr} IS NOT NULL LIMIT $1`;
|
|
21
|
-
const result = await pool.query(sql, [limit]);
|
|
22
|
-
return result.rows.map((r) => r.val);
|
|
23
|
-
};
|
|
24
|
-
const supportsTableSample = (kind) => kind === 'table' ||
|
|
25
|
-
kind === 'partitioned_table' ||
|
|
26
|
-
kind === 'materialized_view';
|
|
27
|
-
export const sampleColumn = async (pool, tableName, columnName, estimatedDistinct, estimatedRowCount, relationKind) => {
|
|
28
|
-
const columnExpr = quoteIdent(columnName);
|
|
29
|
-
const isLowCardinality = estimatedDistinct > 0 && estimatedDistinct < LOW_CARDINALITY_THRESHOLD;
|
|
30
|
-
if (isLowCardinality) {
|
|
31
|
-
const values = await sampleDistinct(pool, tableName, columnExpr, LOW_CARDINALITY_LIMIT);
|
|
32
|
-
return { column_name: columnName, strategy: 'distinct', values };
|
|
33
|
-
}
|
|
34
|
-
const limit = HIGH_CARDINALITY_LIMIT;
|
|
35
|
-
const values = supportsTableSample(relationKind) && estimatedRowCount > 0
|
|
36
|
-
? await sampleBernoulli(pool, tableName, columnExpr, estimatedRowCount, limit)
|
|
37
|
-
: await samplePlainLimit(pool, tableName, columnExpr, limit);
|
|
38
|
-
return { column_name: columnName, strategy: 'random', values };
|
|
39
|
-
};
|
|
40
|
-
export const sampleCompositeSubField = async (pool, tableName, columnName, subFieldName, estimatedDistinct, estimatedRowCount, relationKind) => {
|
|
41
|
-
const columnExpr = `(${quoteIdent(columnName)}).${quoteIdent(subFieldName)}`;
|
|
42
|
-
const isLowCardinality = estimatedDistinct > 0 && estimatedDistinct < LOW_CARDINALITY_THRESHOLD;
|
|
43
|
-
if (isLowCardinality) {
|
|
44
|
-
const values = await sampleDistinct(pool, tableName, columnExpr, LOW_CARDINALITY_LIMIT);
|
|
45
|
-
return {
|
|
46
|
-
column_name: `${columnName}.${subFieldName}`,
|
|
47
|
-
strategy: 'distinct',
|
|
48
|
-
values,
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
const limit = HIGH_CARDINALITY_LIMIT;
|
|
52
|
-
const values = supportsTableSample(relationKind) && estimatedRowCount > 0
|
|
53
|
-
? await sampleBernoulli(pool, tableName, columnExpr, estimatedRowCount, limit)
|
|
54
|
-
: await samplePlainLimit(pool, tableName, columnExpr, limit);
|
|
55
|
-
return {
|
|
56
|
-
column_name: `${columnName}.${subFieldName}`,
|
|
57
|
-
strategy: 'random',
|
|
58
|
-
values,
|
|
59
|
-
};
|
|
60
|
-
};
|
|
61
|
-
export const fetchCompositeSubFields = async (pool, typeName) => {
|
|
62
|
-
const result = await pool.query(`
|
|
63
|
-
SELECT a.attname AS name, format_type(a.atttypid, a.atttypmod) AS data_type
|
|
64
|
-
FROM pg_type t
|
|
65
|
-
JOIN pg_attribute a ON a.attrelid = t.typrelid
|
|
66
|
-
WHERE t.typname = $1
|
|
67
|
-
AND a.attnum > 0
|
|
68
|
-
AND NOT a.attisdropped
|
|
69
|
-
ORDER BY a.attnum
|
|
70
|
-
`, [typeName]);
|
|
71
|
-
return result.rows;
|
|
72
|
-
};
|
|
73
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FtcGxlLm1qcyIsInNvdXJjZVJvb3QiOiIuL3NyYy8iLCJzb3VyY2VzIjpbImRiL3NhbXBsZS5tdHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBZUEsTUFBTSxVQUFVLEdBQUcsQ0FBQyxJQUFZLEVBQVUsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUU3RSxNQUFNLHlCQUF5QixHQUFHLEdBQUcsQ0FBQztBQUN0QyxNQUFNLHFCQUFxQixHQUFHLEdBQUcsQ0FBQztBQUNsQyxNQUFNLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztBQUNsQyxNQUFNLDJCQUEyQixHQUFHLEVBQUUsQ0FBQztBQUV2QyxNQUFNLGNBQWMsR0FBRyxLQUFLLEVBQ3hCLElBQVUsRUFDVixTQUFpQixFQUNqQixVQUFrQixFQUNsQixLQUFhLEVBQ2EsRUFBRTtJQUM1QixNQUFNLEdBQUcsR0FBRyxtQkFBbUIsVUFBVSxzQkFBc0IsVUFBVSxDQUFDLFNBQVMsQ0FBQyxVQUFVLFVBQVUsdUJBQXVCLENBQUM7SUFDaEksTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFnQixHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzdELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6QyxDQUFDLENBQUM7QUFFRixNQUFNLGVBQWUsR0FBRyxLQUFLLEVBQ3pCLElBQVUsRUFDVixTQUFpQixFQUNqQixVQUFrQixFQUNsQixpQkFBeUIsRUFDekIsS0FBYSxFQUNhLEVBQUU7SUFDNUIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FDdkIsR0FBRyxFQUNILENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDcEMsR0FBRztRQUNILDJCQUEyQixDQUNsQyxDQUFDO0lBQ0YsTUFBTSxHQUFHLEdBQUcsbUJBQW1CLFVBQVUsc0JBQXNCLFVBQVUsQ0FBQyxTQUFTLENBQUMsb0NBQW9DLFVBQVUsdUJBQXVCLENBQUM7SUFDMUosTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFnQixHQUFHLEVBQUUsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUN6RSxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLEVBQzFCLElBQVUsRUFDVixTQUFpQixFQUNqQixVQUFrQixFQUNsQixLQUFhLEVBQ2EsRUFBRTtJQUM1QixNQUFNLEdBQUcsR0FBRyxVQUFVLFVBQVUsc0JBQXNCLFVBQVUsQ0FBQyxTQUFTLENBQUMsVUFBVSxVQUFVLHVCQUF1QixDQUFDO0lBQ3ZILE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBZ0IsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUM3RCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekMsQ0FBQyxDQUFDO0FBUUYsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLElBQW1CLEVBQVcsRUFBRSxDQUN6RCxJQUFJLEtBQUssT0FBTztJQUNoQixJQUFJLEtBQUssbUJBQW1CO0lBQzVCLElBQUksS0FBSyxtQkFBbUIsQ0FBQztBQUVqQyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsS0FBSyxFQUM3QixJQUFVLEVBQ1YsU0FBaUIsRUFDakIsVUFBa0IsRUFDbEIsaUJBQXlCLEVBQ3pCLGlCQUF5QixFQUN6QixZQUEyQixFQUNMLEVBQUU7SUFDeEIsTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzFDLE1BQU0sZ0JBQWdCLEdBQ2xCLGlCQUFpQixHQUFHLENBQUMsSUFBSSxpQkFBaUIsR0FBRyx5QkFBeUIsQ0FBQztJQUUzRSxJQUFJLGdCQUFnQixFQUFFLENBQUM7UUFDbkIsTUFBTSxNQUFNLEdBQUcsTUFBTSxjQUFjLENBQy9CLElBQUksRUFDSixTQUFTLEVBQ1QsVUFBVSxFQUNWLHFCQUFxQixDQUN4QixDQUFDO1FBQ0YsT0FBTyxFQUFDLFdBQVcsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQsTUFBTSxLQUFLLEdBQUcsc0JBQXNCLENBQUM7SUFFckMsTUFBTSxNQUFNLEdBQ1IsbUJBQW1CLENBQUMsWUFBWSxDQUFDLElBQUksaUJBQWlCLEdBQUcsQ0FBQztRQUN0RCxDQUFDLENBQUMsTUFBTSxlQUFlLENBQ2pCLElBQUksRUFDSixTQUFTLEVBQ1QsVUFBVSxFQUNWLGlCQUFpQixFQUNqQixLQUFLLENBQ1I7UUFDSCxDQUFDLENBQUMsTUFBTSxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUVyRSxPQUFPLEVBQUMsV0FBVyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBQyxDQUFDO0FBQ2pFLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLEtBQUssRUFDeEMsSUFBVSxFQUNWLFNBQWlCLEVBQ2pCLFVBQWtCLEVBQ2xCLFlBQW9CLEVBQ3BCLGlCQUF5QixFQUN6QixpQkFBeUIsRUFDekIsWUFBMkIsRUFDTCxFQUFFO0lBQ3hCLE1BQU0sVUFBVSxHQUFHLElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxLQUFLLFVBQVUsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO0lBQzdFLE1BQU0sZ0JBQWdCLEdBQ2xCLGlCQUFpQixHQUFHLENBQUMsSUFBSSxpQkFBaUIsR0FBRyx5QkFBeUIsQ0FBQztJQUUzRSxJQUFJLGdCQUFnQixFQUFFLENBQUM7UUFDbkIsTUFBTSxNQUFNLEdBQUcsTUFBTSxjQUFjLENBQy9CLElBQUksRUFDSixTQUFTLEVBQ1QsVUFBVSxFQUNWLHFCQUFxQixDQUN4QixDQUFDO1FBQ0YsT0FBTztZQUNILFdBQVcsRUFBRSxHQUFHLFVBQVUsSUFBSSxZQUFZLEVBQUU7WUFDNUMsUUFBUSxFQUFFLFVBQVU7WUFDcEIsTUFBTTtTQUNULENBQUM7SUFDTixDQUFDO0lBRUQsTUFBTSxLQUFLLEdBQUcsc0JBQXNCLENBQUM7SUFFckMsTUFBTSxNQUFNLEdBQ1IsbUJBQW1CLENBQUMsWUFBWSxDQUFDLElBQUksaUJBQWlCLEdBQUcsQ0FBQztRQUN0RCxDQUFDLENBQUMsTUFBTSxlQUFlLENBQ2pCLElBQUksRUFDSixTQUFTLEVBQ1QsVUFBVSxFQUNWLGlCQUFpQixFQUNqQixLQUFLLENBQ1I7UUFDSCxDQUFDLENBQUMsTUFBTSxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUVyRSxPQUFPO1FBQ0gsV0FBVyxFQUFFLEdBQUcsVUFBVSxJQUFJLFlBQVksRUFBRTtRQUM1QyxRQUFRLEVBQUUsUUFBUTtRQUNsQixNQUFNO0tBQ1QsQ0FBQztBQUNOLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLEtBQUssRUFDeEMsSUFBVSxFQUNWLFFBQWdCLEVBQ3NCLEVBQUU7SUFDeEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUMzQjs7Ozs7Ozs7U0FRQyxFQUNELENBQUMsUUFBUSxDQUFDLENBQ2IsQ0FBQztJQUNGLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQztBQUN2QixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7UG9vbH0gZnJvbSAncGcnO1xuXG5leHBvcnQgdHlwZSBUU2FtcGxlU3RyYXRlZ3kgPSAnZGlzdGluY3QnIHwgJ3JhbmRvbSc7XG5cbmV4cG9ydCB0eXBlIFRDb2x1bW5TYW1wbGUgPSB7XG4gICAgcmVhZG9ubHkgY29sdW1uX25hbWU6IHN0cmluZztcbiAgICByZWFkb25seSBzdHJhdGVneTogVFNhbXBsZVN0cmF0ZWd5O1xuICAgIHJlYWRvbmx5IHZhbHVlczogcmVhZG9ubHkgc3RyaW5nW107XG59O1xuXG5leHBvcnQgdHlwZSBUQ29tcG9zaXRlU3ViRmllbGQgPSB7XG4gICAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICAgIHJlYWRvbmx5IGRhdGFfdHlwZTogc3RyaW5nO1xufTtcblxuY29uc3QgcXVvdGVJZGVudCA9IChuYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4gYFwiJHtuYW1lLnJlcGxhY2UoL1wiL2csICdcIlwiJyl9XCJgO1xuXG5jb25zdCBMT1dfQ0FSRElOQUxJVFlfVEhSRVNIT0xEID0gMjU2O1xuY29uc3QgTE9XX0NBUkRJTkFMSVRZX0xJTUlUID0gMjU2O1xuY29uc3QgSElHSF9DQVJESU5BTElUWV9MSU1JVCA9IDY0O1xuY29uc3QgQkVSTk9VTExJX09WRVJTQU1QTEVfRkFDVE9SID0gMTA7XG5cbmNvbnN0IHNhbXBsZURpc3RpbmN0ID0gYXN5bmMgKFxuICAgIHBvb2w6IFBvb2wsXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgY29sdW1uRXhwcjogc3RyaW5nLFxuICAgIGxpbWl0OiBudW1iZXIsXG4pOiBQcm9taXNlPHJlYWRvbmx5IHN0cmluZ1tdPiA9PiB7XG4gICAgY29uc3Qgc3FsID0gYFNFTEVDVCBESVNUSU5DVCAke2NvbHVtbkV4cHJ9Ojp0ZXh0IEFTIHZhbCBGUk9NICR7cXVvdGVJZGVudCh0YWJsZU5hbWUpfSBXSEVSRSAke2NvbHVtbkV4cHJ9IElTIE5PVCBOVUxMIExJTUlUICQxYDtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwb29sLnF1ZXJ5PHt2YWw6IHN0cmluZ30+KHNxbCwgW2xpbWl0XSk7XG4gICAgcmV0dXJuIHJlc3VsdC5yb3dzLm1hcCgocikgPT4gci52YWwpO1xufTtcblxuY29uc3Qgc2FtcGxlQmVybm91bGxpID0gYXN5bmMgKFxuICAgIHBvb2w6IFBvb2wsXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgY29sdW1uRXhwcjogc3RyaW5nLFxuICAgIGVzdGltYXRlZFJvd0NvdW50OiBudW1iZXIsXG4gICAgbGltaXQ6IG51bWJlcixcbik6IFByb21pc2U8cmVhZG9ubHkgc3RyaW5nW10+ID0+IHtcbiAgICBjb25zdCBwZXJjZW50YWdlID0gTWF0aC5taW4oXG4gICAgICAgIDEwMCxcbiAgICAgICAgKGxpbWl0IC8gTWF0aC5tYXgoZXN0aW1hdGVkUm93Q291bnQsIDEpKSAqXG4gICAgICAgICAgICAxMDAgKlxuICAgICAgICAgICAgQkVSTk9VTExJX09WRVJTQU1QTEVfRkFDVE9SLFxuICAgICk7XG4gICAgY29uc3Qgc3FsID0gYFNFTEVDVCBESVNUSU5DVCAke2NvbHVtbkV4cHJ9Ojp0ZXh0IEFTIHZhbCBGUk9NICR7cXVvdGVJZGVudCh0YWJsZU5hbWUpfSBUQUJMRVNBTVBMRSBCRVJOT1VMTEkoJDEpIFdIRVJFICR7Y29sdW1uRXhwcn0gSVMgTk9UIE5VTEwgTElNSVQgJDJgO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBvb2wucXVlcnk8e3ZhbDogc3RyaW5nfT4oc3FsLCBbcGVyY2VudGFnZSwgbGltaXRdKTtcbiAgICByZXR1cm4gcmVzdWx0LnJvd3MubWFwKChyKSA9PiByLnZhbCk7XG59O1xuXG5jb25zdCBzYW1wbGVQbGFpbkxpbWl0ID0gYXN5bmMgKFxuICAgIHBvb2w6IFBvb2wsXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgY29sdW1uRXhwcjogc3RyaW5nLFxuICAgIGxpbWl0OiBudW1iZXIsXG4pOiBQcm9taXNlPHJlYWRvbmx5IHN0cmluZ1tdPiA9PiB7XG4gICAgY29uc3Qgc3FsID0gYFNFTEVDVCAke2NvbHVtbkV4cHJ9Ojp0ZXh0IEFTIHZhbCBGUk9NICR7cXVvdGVJZGVudCh0YWJsZU5hbWUpfSBXSEVSRSAke2NvbHVtbkV4cHJ9IElTIE5PVCBOVUxMIExJTUlUICQxYDtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwb29sLnF1ZXJ5PHt2YWw6IHN0cmluZ30+KHNxbCwgW2xpbWl0XSk7XG4gICAgcmV0dXJuIHJlc3VsdC5yb3dzLm1hcCgocikgPT4gci52YWwpO1xufTtcblxuZXhwb3J0IHR5cGUgVFJlbGF0aW9uS2luZCA9XG4gICAgfCAndGFibGUnXG4gICAgfCAncGFydGl0aW9uZWRfdGFibGUnXG4gICAgfCAndmlldydcbiAgICB8ICdtYXRlcmlhbGl6ZWRfdmlldyc7XG5cbmNvbnN0IHN1cHBvcnRzVGFibGVTYW1wbGUgPSAoa2luZDogVFJlbGF0aW9uS2luZCk6IGJvb2xlYW4gPT5cbiAgICBraW5kID09PSAndGFibGUnIHx8XG4gICAga2luZCA9PT0gJ3BhcnRpdGlvbmVkX3RhYmxlJyB8fFxuICAgIGtpbmQgPT09ICdtYXRlcmlhbGl6ZWRfdmlldyc7XG5cbmV4cG9ydCBjb25zdCBzYW1wbGVDb2x1bW4gPSBhc3luYyAoXG4gICAgcG9vbDogUG9vbCxcbiAgICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgICBjb2x1bW5OYW1lOiBzdHJpbmcsXG4gICAgZXN0aW1hdGVkRGlzdGluY3Q6IG51bWJlcixcbiAgICBlc3RpbWF0ZWRSb3dDb3VudDogbnVtYmVyLFxuICAgIHJlbGF0aW9uS2luZDogVFJlbGF0aW9uS2luZCxcbik6IFByb21pc2U8VENvbHVtblNhbXBsZT4gPT4ge1xuICAgIGNvbnN0IGNvbHVtbkV4cHIgPSBxdW90ZUlkZW50KGNvbHVtbk5hbWUpO1xuICAgIGNvbnN0IGlzTG93Q2FyZGluYWxpdHkgPVxuICAgICAgICBlc3RpbWF0ZWREaXN0aW5jdCA+IDAgJiYgZXN0aW1hdGVkRGlzdGluY3QgPCBMT1dfQ0FSRElOQUxJVFlfVEhSRVNIT0xEO1xuXG4gICAgaWYgKGlzTG93Q2FyZGluYWxpdHkpIHtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gYXdhaXQgc2FtcGxlRGlzdGluY3QoXG4gICAgICAgICAgICBwb29sLFxuICAgICAgICAgICAgdGFibGVOYW1lLFxuICAgICAgICAgICAgY29sdW1uRXhwcixcbiAgICAgICAgICAgIExPV19DQVJESU5BTElUWV9MSU1JVCxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHtjb2x1bW5fbmFtZTogY29sdW1uTmFtZSwgc3RyYXRlZ3k6ICdkaXN0aW5jdCcsIHZhbHVlc307XG4gICAgfVxuXG4gICAgY29uc3QgbGltaXQgPSBISUdIX0NBUkRJTkFMSVRZX0xJTUlUO1xuXG4gICAgY29uc3QgdmFsdWVzID1cbiAgICAgICAgc3VwcG9ydHNUYWJsZVNhbXBsZShyZWxhdGlvbktpbmQpICYmIGVzdGltYXRlZFJvd0NvdW50ID4gMFxuICAgICAgICAgICAgPyBhd2FpdCBzYW1wbGVCZXJub3VsbGkoXG4gICAgICAgICAgICAgICAgICBwb29sLFxuICAgICAgICAgICAgICAgICAgdGFibGVOYW1lLFxuICAgICAgICAgICAgICAgICAgY29sdW1uRXhwcixcbiAgICAgICAgICAgICAgICAgIGVzdGltYXRlZFJvd0NvdW50LFxuICAgICAgICAgICAgICAgICAgbGltaXQsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogYXdhaXQgc2FtcGxlUGxhaW5MaW1pdChwb29sLCB0YWJsZU5hbWUsIGNvbHVtbkV4cHIsIGxpbWl0KTtcblxuICAgIHJldHVybiB7Y29sdW1uX25hbWU6IGNvbHVtbk5hbWUsIHN0cmF0ZWd5OiAncmFuZG9tJywgdmFsdWVzfTtcbn07XG5cbmV4cG9ydCBjb25zdCBzYW1wbGVDb21wb3NpdGVTdWJGaWVsZCA9IGFzeW5jIChcbiAgICBwb29sOiBQb29sLFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIGNvbHVtbk5hbWU6IHN0cmluZyxcbiAgICBzdWJGaWVsZE5hbWU6IHN0cmluZyxcbiAgICBlc3RpbWF0ZWREaXN0aW5jdDogbnVtYmVyLFxuICAgIGVzdGltYXRlZFJvd0NvdW50OiBudW1iZXIsXG4gICAgcmVsYXRpb25LaW5kOiBUUmVsYXRpb25LaW5kLFxuKTogUHJvbWlzZTxUQ29sdW1uU2FtcGxlPiA9PiB7XG4gICAgY29uc3QgY29sdW1uRXhwciA9IGAoJHtxdW90ZUlkZW50KGNvbHVtbk5hbWUpfSkuJHtxdW90ZUlkZW50KHN1YkZpZWxkTmFtZSl9YDtcbiAgICBjb25zdCBpc0xvd0NhcmRpbmFsaXR5ID1cbiAgICAgICAgZXN0aW1hdGVkRGlzdGluY3QgPiAwICYmIGVzdGltYXRlZERpc3RpbmN0IDwgTE9XX0NBUkRJTkFMSVRZX1RIUkVTSE9MRDtcblxuICAgIGlmIChpc0xvd0NhcmRpbmFsaXR5KSB7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IGF3YWl0IHNhbXBsZURpc3RpbmN0KFxuICAgICAgICAgICAgcG9vbCxcbiAgICAgICAgICAgIHRhYmxlTmFtZSxcbiAgICAgICAgICAgIGNvbHVtbkV4cHIsXG4gICAgICAgICAgICBMT1dfQ0FSRElOQUxJVFlfTElNSVQsXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb2x1bW5fbmFtZTogYCR7Y29sdW1uTmFtZX0uJHtzdWJGaWVsZE5hbWV9YCxcbiAgICAgICAgICAgIHN0cmF0ZWd5OiAnZGlzdGluY3QnLFxuICAgICAgICAgICAgdmFsdWVzLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IGxpbWl0ID0gSElHSF9DQVJESU5BTElUWV9MSU1JVDtcblxuICAgIGNvbnN0IHZhbHVlcyA9XG4gICAgICAgIHN1cHBvcnRzVGFibGVTYW1wbGUocmVsYXRpb25LaW5kKSAmJiBlc3RpbWF0ZWRSb3dDb3VudCA+IDBcbiAgICAgICAgICAgID8gYXdhaXQgc2FtcGxlQmVybm91bGxpKFxuICAgICAgICAgICAgICAgICAgcG9vbCxcbiAgICAgICAgICAgICAgICAgIHRhYmxlTmFtZSxcbiAgICAgICAgICAgICAgICAgIGNvbHVtbkV4cHIsXG4gICAgICAgICAgICAgICAgICBlc3RpbWF0ZWRSb3dDb3VudCxcbiAgICAgICAgICAgICAgICAgIGxpbWl0LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IGF3YWl0IHNhbXBsZVBsYWluTGltaXQocG9vbCwgdGFibGVOYW1lLCBjb2x1bW5FeHByLCBsaW1pdCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBjb2x1bW5fbmFtZTogYCR7Y29sdW1uTmFtZX0uJHtzdWJGaWVsZE5hbWV9YCxcbiAgICAgICAgc3RyYXRlZ3k6ICdyYW5kb20nLFxuICAgICAgICB2YWx1ZXMsXG4gICAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBmZXRjaENvbXBvc2l0ZVN1YkZpZWxkcyA9IGFzeW5jIChcbiAgICBwb29sOiBQb29sLFxuICAgIHR5cGVOYW1lOiBzdHJpbmcsXG4pOiBQcm9taXNlPHJlYWRvbmx5IFRDb21wb3NpdGVTdWJGaWVsZFtdPiA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcG9vbC5xdWVyeTx7bmFtZTogc3RyaW5nOyBkYXRhX3R5cGU6IHN0cmluZ30+KFxuICAgICAgICBgXG4gICAgICAgIFNFTEVDVCBhLmF0dG5hbWUgQVMgbmFtZSwgZm9ybWF0X3R5cGUoYS5hdHR0eXBpZCwgYS5hdHR0eXBtb2QpIEFTIGRhdGFfdHlwZVxuICAgICAgICBGUk9NIHBnX3R5cGUgdFxuICAgICAgICBKT0lOIHBnX2F0dHJpYnV0ZSBhIE9OIGEuYXR0cmVsaWQgPSB0LnR5cHJlbGlkXG4gICAgICAgIFdIRVJFIHQudHlwbmFtZSA9ICQxXG4gICAgICAgICAgICBBTkQgYS5hdHRudW0gPiAwXG4gICAgICAgICAgICBBTkQgTk9UIGEuYXR0aXNkcm9wcGVkXG4gICAgICAgIE9SREVSIEJZIGEuYXR0bnVtXG4gICAgICAgIGAsXG4gICAgICAgIFt0eXBlTmFtZV0sXG4gICAgKTtcbiAgICByZXR1cm4gcmVzdWx0LnJvd3M7XG59O1xuIl19
|
package/dist/db/sequences.d.mts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import type { Pool } from 'pg';
|
|
2
|
-
export type TSequenceInfo = {
|
|
3
|
-
name: string;
|
|
4
|
-
data_type: string;
|
|
5
|
-
start_value: string;
|
|
6
|
-
min_value: string;
|
|
7
|
-
max_value: string;
|
|
8
|
-
increment: string;
|
|
9
|
-
cycle: boolean;
|
|
10
|
-
cache_size: string;
|
|
11
|
-
owned_by_table: string | null;
|
|
12
|
-
owned_by_column: string | null;
|
|
13
|
-
};
|
|
14
|
-
export declare const fetchPublicSequences: (pool: Pool) => Promise<TSequenceInfo[]>;
|
|
15
|
-
//# sourceMappingURL=sequences.d.mts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sequences.d.mts","sourceRoot":"./src/","sources":["db/sequences.mts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,IAAI,CAAC;AAE7B,MAAM,MAAM,aAAa,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC7B,MAAM,IAAI,KACX,OAAO,CAAC,aAAa,EAAE,CA8BzB,CAAC"}
|
package/dist/db/sequences.mjs
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
export const fetchPublicSequences = async (pool) => {
|
|
2
|
-
const result = await pool.query(`
|
|
3
|
-
SELECT
|
|
4
|
-
s.sequencename AS name,
|
|
5
|
-
s.data_type::text AS data_type,
|
|
6
|
-
s.start_value::text AS start_value,
|
|
7
|
-
s.min_value::text AS min_value,
|
|
8
|
-
s.max_value::text AS max_value,
|
|
9
|
-
s.increment_by::text AS increment,
|
|
10
|
-
s.cycle AS cycle,
|
|
11
|
-
s.cache_size::text AS cache_size,
|
|
12
|
-
t.relname AS owned_by_table,
|
|
13
|
-
a.attname AS owned_by_column
|
|
14
|
-
FROM pg_catalog.pg_sequences s
|
|
15
|
-
JOIN pg_catalog.pg_class c
|
|
16
|
-
ON c.relname = s.sequencename
|
|
17
|
-
AND c.relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = s.schemaname)
|
|
18
|
-
LEFT JOIN pg_catalog.pg_depend d
|
|
19
|
-
ON d.objid = c.oid
|
|
20
|
-
AND d.classid = 'pg_class'::regclass
|
|
21
|
-
AND d.refclassid = 'pg_class'::regclass
|
|
22
|
-
AND d.deptype = 'a'
|
|
23
|
-
LEFT JOIN pg_catalog.pg_class t ON t.oid = d.refobjid
|
|
24
|
-
LEFT JOIN pg_catalog.pg_attribute a
|
|
25
|
-
ON a.attrelid = d.refobjid AND a.attnum = d.refobjsubid
|
|
26
|
-
WHERE s.schemaname = 'public'
|
|
27
|
-
ORDER BY s.sequencename
|
|
28
|
-
`);
|
|
29
|
-
return result.rows;
|
|
30
|
-
};
|
|
31
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VxdWVuY2VzLm1qcyIsInNvdXJjZVJvb3QiOiIuL3NyYy8iLCJzb3VyY2VzIjpbImRiL3NlcXVlbmNlcy5tdHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBZUEsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsS0FBSyxFQUNyQyxJQUFVLEVBQ2MsRUFBRTtJQUMxQixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQWdCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztLQTBCOUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDO0FBQ3ZCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtQb29sfSBmcm9tICdwZyc7XG5cbmV4cG9ydCB0eXBlIFRTZXF1ZW5jZUluZm8gPSB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGRhdGFfdHlwZTogc3RyaW5nO1xuICAgIHN0YXJ0X3ZhbHVlOiBzdHJpbmc7XG4gICAgbWluX3ZhbHVlOiBzdHJpbmc7XG4gICAgbWF4X3ZhbHVlOiBzdHJpbmc7XG4gICAgaW5jcmVtZW50OiBzdHJpbmc7XG4gICAgY3ljbGU6IGJvb2xlYW47XG4gICAgY2FjaGVfc2l6ZTogc3RyaW5nO1xuICAgIG93bmVkX2J5X3RhYmxlOiBzdHJpbmcgfCBudWxsO1xuICAgIG93bmVkX2J5X2NvbHVtbjogc3RyaW5nIHwgbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBmZXRjaFB1YmxpY1NlcXVlbmNlcyA9IGFzeW5jIChcbiAgICBwb29sOiBQb29sLFxuKTogUHJvbWlzZTxUU2VxdWVuY2VJbmZvW10+ID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwb29sLnF1ZXJ5PFRTZXF1ZW5jZUluZm8+KGBcbiAgICAgICAgU0VMRUNUXG4gICAgICAgICAgICBzLnNlcXVlbmNlbmFtZSBBUyBuYW1lLFxuICAgICAgICAgICAgcy5kYXRhX3R5cGU6OnRleHQgQVMgZGF0YV90eXBlLFxuICAgICAgICAgICAgcy5zdGFydF92YWx1ZTo6dGV4dCBBUyBzdGFydF92YWx1ZSxcbiAgICAgICAgICAgIHMubWluX3ZhbHVlOjp0ZXh0IEFTIG1pbl92YWx1ZSxcbiAgICAgICAgICAgIHMubWF4X3ZhbHVlOjp0ZXh0IEFTIG1heF92YWx1ZSxcbiAgICAgICAgICAgIHMuaW5jcmVtZW50X2J5Ojp0ZXh0IEFTIGluY3JlbWVudCxcbiAgICAgICAgICAgIHMuY3ljbGUgQVMgY3ljbGUsXG4gICAgICAgICAgICBzLmNhY2hlX3NpemU6OnRleHQgQVMgY2FjaGVfc2l6ZSxcbiAgICAgICAgICAgIHQucmVsbmFtZSBBUyBvd25lZF9ieV90YWJsZSxcbiAgICAgICAgICAgIGEuYXR0bmFtZSBBUyBvd25lZF9ieV9jb2x1bW5cbiAgICAgICAgRlJPTSBwZ19jYXRhbG9nLnBnX3NlcXVlbmNlcyBzXG4gICAgICAgIEpPSU4gcGdfY2F0YWxvZy5wZ19jbGFzcyBjXG4gICAgICAgICAgICBPTiBjLnJlbG5hbWUgPSBzLnNlcXVlbmNlbmFtZVxuICAgICAgICAgICAgQU5EIGMucmVsbmFtZXNwYWNlID0gKFNFTEVDVCBvaWQgRlJPTSBwZ19uYW1lc3BhY2UgV0hFUkUgbnNwbmFtZSA9IHMuc2NoZW1hbmFtZSlcbiAgICAgICAgTEVGVCBKT0lOIHBnX2NhdGFsb2cucGdfZGVwZW5kIGRcbiAgICAgICAgICAgIE9OIGQub2JqaWQgPSBjLm9pZFxuICAgICAgICAgICAgQU5EIGQuY2xhc3NpZCA9ICdwZ19jbGFzcyc6OnJlZ2NsYXNzXG4gICAgICAgICAgICBBTkQgZC5yZWZjbGFzc2lkID0gJ3BnX2NsYXNzJzo6cmVnY2xhc3NcbiAgICAgICAgICAgIEFORCBkLmRlcHR5cGUgPSAnYSdcbiAgICAgICAgTEVGVCBKT0lOIHBnX2NhdGFsb2cucGdfY2xhc3MgdCBPTiB0Lm9pZCA9IGQucmVmb2JqaWRcbiAgICAgICAgTEVGVCBKT0lOIHBnX2NhdGFsb2cucGdfYXR0cmlidXRlIGFcbiAgICAgICAgICAgIE9OIGEuYXR0cmVsaWQgPSBkLnJlZm9iamlkIEFORCBhLmF0dG51bSA9IGQucmVmb2Jqc3ViaWRcbiAgICAgICAgV0hFUkUgcy5zY2hlbWFuYW1lID0gJ3B1YmxpYydcbiAgICAgICAgT1JERVIgQlkgcy5zZXF1ZW5jZW5hbWVcbiAgICBgKTtcblxuICAgIHJldHVybiByZXN1bHQucm93cztcbn07XG4iXX0=
|
package/dist/db/stats.d.mts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type { Pool } from 'pg';
|
|
2
|
-
export type TAttributeStats = {
|
|
3
|
-
attribute_name: string;
|
|
4
|
-
estimated_distinct: number;
|
|
5
|
-
};
|
|
6
|
-
export type TRelationStats = {
|
|
7
|
-
relation_name: string;
|
|
8
|
-
estimated_row_count: number;
|
|
9
|
-
attributes: TAttributeStats[];
|
|
10
|
-
};
|
|
11
|
-
export declare const fetchRelationStats: (pool: Pool, relationName: string) => Promise<TRelationStats>;
|
|
12
|
-
//# sourceMappingURL=stats.d.mts.map
|
package/dist/db/stats.d.mts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stats.d.mts","sourceRoot":"./src/","sources":["db/stats.mts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,IAAI,CAAC;AAE7B,MAAM,MAAM,eAAe,GAAG;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,UAAU,EAAE,eAAe,EAAE,CAAC;CACjC,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAC3B,MAAM,IAAI,EACV,cAAc,MAAM,KACrB,OAAO,CAAC,cAAc,CAuCxB,CAAC"}
|
package/dist/db/stats.mjs
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
export const fetchRelationStats = async (pool, relationName) => {
|
|
2
|
-
const result = await pool.query(`
|
|
3
|
-
SELECT
|
|
4
|
-
s.tablename AS relation_name,
|
|
5
|
-
c.reltuples::bigint AS estimated_row_count,
|
|
6
|
-
s.attname AS attribute_name,
|
|
7
|
-
CASE
|
|
8
|
-
WHEN s.n_distinct > 0 THEN s.n_distinct
|
|
9
|
-
ELSE abs(s.n_distinct) * c.reltuples
|
|
10
|
-
END::bigint AS estimated_distinct
|
|
11
|
-
FROM pg_catalog.pg_stats s
|
|
12
|
-
JOIN pg_catalog.pg_class c ON c.relname = s.tablename
|
|
13
|
-
JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace AND n.nspname = s.schemaname
|
|
14
|
-
WHERE s.schemaname = 'public'
|
|
15
|
-
AND s.tablename = $1
|
|
16
|
-
ORDER BY s.attname
|
|
17
|
-
`, [relationName]);
|
|
18
|
-
if (result.rows.length === 0) {
|
|
19
|
-
return {
|
|
20
|
-
relation_name: relationName,
|
|
21
|
-
estimated_row_count: 0,
|
|
22
|
-
attributes: [],
|
|
23
|
-
};
|
|
24
|
-
}
|
|
25
|
-
return {
|
|
26
|
-
relation_name: result.rows[0].relation_name,
|
|
27
|
-
estimated_row_count: Number(result.rows[0].estimated_row_count),
|
|
28
|
-
attributes: result.rows.map(({ attribute_name, estimated_distinct }) => ({
|
|
29
|
-
attribute_name,
|
|
30
|
-
estimated_distinct: Number(estimated_distinct),
|
|
31
|
-
})),
|
|
32
|
-
};
|
|
33
|
-
};
|
|
34
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdHMubWpzIiwic291cmNlUm9vdCI6Ii4vc3JjLyIsInNvdXJjZXMiOlsiZGIvc3RhdHMubXRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWFBLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLEtBQUssRUFDbkMsSUFBVSxFQUNWLFlBQW9CLEVBQ0csRUFBRTtJQUN6QixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLENBRzNCOzs7Ozs7Ozs7Ozs7Ozs7U0FlQyxFQUNELENBQUMsWUFBWSxDQUFDLENBQ2pCLENBQUM7SUFFRixJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzNCLE9BQU87WUFDSCxhQUFhLEVBQUUsWUFBWTtZQUMzQixtQkFBbUIsRUFBRSxDQUFDO1lBQ3RCLFVBQVUsRUFBRSxFQUFFO1NBQ2pCLENBQUM7SUFDTixDQUFDO0lBRUQsT0FBTztRQUNILGFBQWEsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWE7UUFDM0MsbUJBQW1CLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUM7UUFDL0QsVUFBVSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBQyxjQUFjLEVBQUUsa0JBQWtCLEVBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNuRSxjQUFjO1lBQ2Qsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLGtCQUFrQixDQUFDO1NBQ2pELENBQUMsQ0FBQztLQUNOLENBQUM7QUFDTixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7UG9vbH0gZnJvbSAncGcnO1xuXG5leHBvcnQgdHlwZSBUQXR0cmlidXRlU3RhdHMgPSB7XG4gICAgYXR0cmlidXRlX25hbWU6IHN0cmluZztcbiAgICBlc3RpbWF0ZWRfZGlzdGluY3Q6IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIFRSZWxhdGlvblN0YXRzID0ge1xuICAgIHJlbGF0aW9uX25hbWU6IHN0cmluZztcbiAgICBlc3RpbWF0ZWRfcm93X2NvdW50OiBudW1iZXI7XG4gICAgYXR0cmlidXRlczogVEF0dHJpYnV0ZVN0YXRzW107XG59O1xuXG5leHBvcnQgY29uc3QgZmV0Y2hSZWxhdGlvblN0YXRzID0gYXN5bmMgKFxuICAgIHBvb2w6IFBvb2wsXG4gICAgcmVsYXRpb25OYW1lOiBzdHJpbmcsXG4pOiBQcm9taXNlPFRSZWxhdGlvblN0YXRzPiA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcG9vbC5xdWVyeTxcbiAgICAgICAgVEF0dHJpYnV0ZVN0YXRzICYge3JlbGF0aW9uX25hbWU6IHN0cmluZzsgZXN0aW1hdGVkX3Jvd19jb3VudDogbnVtYmVyfVxuICAgID4oXG4gICAgICAgIGBcbiAgICAgICAgU0VMRUNUXG4gICAgICAgICAgICBzLnRhYmxlbmFtZSBBUyByZWxhdGlvbl9uYW1lLFxuICAgICAgICAgICAgYy5yZWx0dXBsZXM6OmJpZ2ludCBBUyBlc3RpbWF0ZWRfcm93X2NvdW50LFxuICAgICAgICAgICAgcy5hdHRuYW1lIEFTIGF0dHJpYnV0ZV9uYW1lLFxuICAgICAgICAgICAgQ0FTRVxuICAgICAgICAgICAgICAgIFdIRU4gcy5uX2Rpc3RpbmN0ID4gMCBUSEVOIHMubl9kaXN0aW5jdFxuICAgICAgICAgICAgICAgIEVMU0UgYWJzKHMubl9kaXN0aW5jdCkgKiBjLnJlbHR1cGxlc1xuICAgICAgICAgICAgRU5EOjpiaWdpbnQgQVMgZXN0aW1hdGVkX2Rpc3RpbmN0XG4gICAgICAgIEZST00gcGdfY2F0YWxvZy5wZ19zdGF0cyBzXG4gICAgICAgIEpPSU4gcGdfY2F0YWxvZy5wZ19jbGFzcyBjIE9OIGMucmVsbmFtZSA9IHMudGFibGVuYW1lXG4gICAgICAgIEpPSU4gcGdfY2F0YWxvZy5wZ19uYW1lc3BhY2UgbiBPTiBuLm9pZCA9IGMucmVsbmFtZXNwYWNlIEFORCBuLm5zcG5hbWUgPSBzLnNjaGVtYW5hbWVcbiAgICAgICAgV0hFUkUgcy5zY2hlbWFuYW1lID0gJ3B1YmxpYydcbiAgICAgICAgICAgIEFORCBzLnRhYmxlbmFtZSA9ICQxXG4gICAgICAgIE9SREVSIEJZIHMuYXR0bmFtZVxuICAgICAgICBgLFxuICAgICAgICBbcmVsYXRpb25OYW1lXSxcbiAgICApO1xuXG4gICAgaWYgKHJlc3VsdC5yb3dzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcmVsYXRpb25fbmFtZTogcmVsYXRpb25OYW1lLFxuICAgICAgICAgICAgZXN0aW1hdGVkX3Jvd19jb3VudDogMCxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IFtdLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIHJlbGF0aW9uX25hbWU6IHJlc3VsdC5yb3dzWzBdLnJlbGF0aW9uX25hbWUsXG4gICAgICAgIGVzdGltYXRlZF9yb3dfY291bnQ6IE51bWJlcihyZXN1bHQucm93c1swXS5lc3RpbWF0ZWRfcm93X2NvdW50KSxcbiAgICAgICAgYXR0cmlidXRlczogcmVzdWx0LnJvd3MubWFwKCh7YXR0cmlidXRlX25hbWUsIGVzdGltYXRlZF9kaXN0aW5jdH0pID0+ICh7XG4gICAgICAgICAgICBhdHRyaWJ1dGVfbmFtZSxcbiAgICAgICAgICAgIGVzdGltYXRlZF9kaXN0aW5jdDogTnVtYmVyKGVzdGltYXRlZF9kaXN0aW5jdCksXG4gICAgICAgIH0pKSxcbiAgICB9O1xufTtcbiJdfQ==
|
package/dist/db/triggers.d.mts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { Pool } from 'pg';
|
|
2
|
-
export type TTriggerInfo = {
|
|
3
|
-
relation_name: string;
|
|
4
|
-
name: string;
|
|
5
|
-
definition: string;
|
|
6
|
-
function_schema: string;
|
|
7
|
-
function_name: string;
|
|
8
|
-
is_enabled: boolean;
|
|
9
|
-
};
|
|
10
|
-
export declare const fetchPublicTriggers: (pool: Pool) => Promise<TTriggerInfo[]>;
|
|
11
|
-
//# sourceMappingURL=triggers.d.mts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"triggers.d.mts","sourceRoot":"./src/","sources":["db/triggers.mts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,IAAI,CAAC;AAE7B,MAAM,MAAM,YAAY,GAAG;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC5B,MAAM,IAAI,KACX,OAAO,CAAC,YAAY,EAAE,CAoBxB,CAAC"}
|
package/dist/db/triggers.mjs
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
export const fetchPublicTriggers = async (pool) => {
|
|
2
|
-
const result = await pool.query(`
|
|
3
|
-
SELECT
|
|
4
|
-
t.relname AS relation_name,
|
|
5
|
-
tg.tgname AS name,
|
|
6
|
-
pg_get_triggerdef(tg.oid, true) AS definition,
|
|
7
|
-
fn_ns.nspname AS function_schema,
|
|
8
|
-
fn.proname AS function_name,
|
|
9
|
-
tg.tgenabled <> 'D' AS is_enabled
|
|
10
|
-
FROM pg_catalog.pg_trigger tg
|
|
11
|
-
JOIN pg_catalog.pg_class t ON t.oid = tg.tgrelid
|
|
12
|
-
JOIN pg_catalog.pg_namespace n ON n.oid = t.relnamespace
|
|
13
|
-
JOIN pg_catalog.pg_proc fn ON fn.oid = tg.tgfoid
|
|
14
|
-
JOIN pg_catalog.pg_namespace fn_ns ON fn_ns.oid = fn.pronamespace
|
|
15
|
-
WHERE n.nspname = 'public'
|
|
16
|
-
AND NOT tg.tgisinternal
|
|
17
|
-
ORDER BY t.relname, tg.tgname
|
|
18
|
-
`);
|
|
19
|
-
return result.rows;
|
|
20
|
-
};
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJpZ2dlcnMubWpzIiwic291cmNlUm9vdCI6Ii4vc3JjLyIsInNvdXJjZXMiOlsiZGIvdHJpZ2dlcnMubXRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVdBLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLEtBQUssRUFDcEMsSUFBVSxFQUNhLEVBQUU7SUFDekIsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFlOzs7Ozs7Ozs7Ozs7Ozs7O0tBZ0I3QyxDQUFDLENBQUM7SUFFSCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFDdkIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1Bvb2x9IGZyb20gJ3BnJztcblxuZXhwb3J0IHR5cGUgVFRyaWdnZXJJbmZvID0ge1xuICAgIHJlbGF0aW9uX25hbWU6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgZGVmaW5pdGlvbjogc3RyaW5nO1xuICAgIGZ1bmN0aW9uX3NjaGVtYTogc3RyaW5nO1xuICAgIGZ1bmN0aW9uX25hbWU6IHN0cmluZztcbiAgICBpc19lbmFibGVkOiBib29sZWFuO1xufTtcblxuZXhwb3J0IGNvbnN0IGZldGNoUHVibGljVHJpZ2dlcnMgPSBhc3luYyAoXG4gICAgcG9vbDogUG9vbCxcbik6IFByb21pc2U8VFRyaWdnZXJJbmZvW10+ID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwb29sLnF1ZXJ5PFRUcmlnZ2VySW5mbz4oYFxuICAgICAgICBTRUxFQ1RcbiAgICAgICAgICAgIHQucmVsbmFtZSBBUyByZWxhdGlvbl9uYW1lLFxuICAgICAgICAgICAgdGcudGduYW1lIEFTIG5hbWUsXG4gICAgICAgICAgICBwZ19nZXRfdHJpZ2dlcmRlZih0Zy5vaWQsIHRydWUpIEFTIGRlZmluaXRpb24sXG4gICAgICAgICAgICBmbl9ucy5uc3BuYW1lIEFTIGZ1bmN0aW9uX3NjaGVtYSxcbiAgICAgICAgICAgIGZuLnByb25hbWUgQVMgZnVuY3Rpb25fbmFtZSxcbiAgICAgICAgICAgIHRnLnRnZW5hYmxlZCA8PiAnRCcgQVMgaXNfZW5hYmxlZFxuICAgICAgICBGUk9NIHBnX2NhdGFsb2cucGdfdHJpZ2dlciB0Z1xuICAgICAgICBKT0lOIHBnX2NhdGFsb2cucGdfY2xhc3MgdCBPTiB0Lm9pZCA9IHRnLnRncmVsaWRcbiAgICAgICAgSk9JTiBwZ19jYXRhbG9nLnBnX25hbWVzcGFjZSBuIE9OIG4ub2lkID0gdC5yZWxuYW1lc3BhY2VcbiAgICAgICAgSk9JTiBwZ19jYXRhbG9nLnBnX3Byb2MgZm4gT04gZm4ub2lkID0gdGcudGdmb2lkXG4gICAgICAgIEpPSU4gcGdfY2F0YWxvZy5wZ19uYW1lc3BhY2UgZm5fbnMgT04gZm5fbnMub2lkID0gZm4ucHJvbmFtZXNwYWNlXG4gICAgICAgIFdIRVJFIG4ubnNwbmFtZSA9ICdwdWJsaWMnXG4gICAgICAgICAgICBBTkQgTk9UIHRnLnRnaXNpbnRlcm5hbFxuICAgICAgICBPUkRFUiBCWSB0LnJlbG5hbWUsIHRnLnRnbmFtZVxuICAgIGApO1xuXG4gICAgcmV0dXJuIHJlc3VsdC5yb3dzO1xufTtcbiJdfQ==
|
package/dist/db/version.d.mts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import type { Pool } from 'pg';
|
|
2
|
-
export type TPostgresVersion = {
|
|
3
|
-
version: string;
|
|
4
|
-
version_num: number;
|
|
5
|
-
};
|
|
6
|
-
export declare const fetchPostgresVersion: (pool: Pool) => Promise<TPostgresVersion>;
|
|
7
|
-
export type TDatabaseIdentifier = {
|
|
8
|
-
system_identifier: string;
|
|
9
|
-
database_oid: number;
|
|
10
|
-
database_name: string;
|
|
11
|
-
};
|
|
12
|
-
export declare const fetchDatabaseComment: (pool: Pool) => Promise<string | null>;
|
|
13
|
-
export declare const fetchDatabaseIdentifier: (pool: Pool) => Promise<TDatabaseIdentifier>;
|
|
14
|
-
//# sourceMappingURL=version.d.mts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"version.d.mts","sourceRoot":"./src/","sources":["db/version.mts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,IAAI,CAAC;AAE7B,MAAM,MAAM,gBAAgB,GAAG;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC7B,MAAM,IAAI,KACX,OAAO,CAAC,gBAAgB,CAQ1B,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAC9B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC7B,MAAM,IAAI,KACX,OAAO,CAAC,MAAM,GAAG,IAAI,CAQvB,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAChC,MAAM,IAAI,KACX,OAAO,CAAC,mBAAmB,CAU7B,CAAC"}
|
package/dist/db/version.mjs
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
export const fetchPostgresVersion = async (pool) => {
|
|
2
|
-
const result = await pool.query(`
|
|
3
|
-
SELECT
|
|
4
|
-
current_setting('server_version') AS version,
|
|
5
|
-
current_setting('server_version_num')::int AS version_num
|
|
6
|
-
`);
|
|
7
|
-
return result.rows[0];
|
|
8
|
-
};
|
|
9
|
-
export const fetchDatabaseComment = async (pool) => {
|
|
10
|
-
const result = await pool.query(`
|
|
11
|
-
SELECT shobj_description(d.oid, 'pg_database') AS comment
|
|
12
|
-
FROM pg_database d
|
|
13
|
-
WHERE d.datname = current_database()
|
|
14
|
-
`);
|
|
15
|
-
return result.rows[0].comment;
|
|
16
|
-
};
|
|
17
|
-
export const fetchDatabaseIdentifier = async (pool) => {
|
|
18
|
-
const result = await pool.query(`
|
|
19
|
-
SELECT
|
|
20
|
-
system_identifier::text AS system_identifier,
|
|
21
|
-
(SELECT oid::int FROM pg_database WHERE datname = current_database()) AS database_oid,
|
|
22
|
-
current_database() AS database_name
|
|
23
|
-
FROM pg_control_system()
|
|
24
|
-
`);
|
|
25
|
-
return result.rows[0];
|
|
26
|
-
};
|
|
27
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5tanMiLCJzb3VyY2VSb290IjoiLi9zcmMvIiwic291cmNlcyI6WyJkYi92ZXJzaW9uLm10cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFPQSxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxLQUFLLEVBQ3JDLElBQVUsRUFDZSxFQUFFO0lBQzNCLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBbUI7Ozs7S0FJakQsQ0FBQyxDQUFDO0lBRUgsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCLENBQUMsQ0FBQztBQVFGLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLEtBQUssRUFDckMsSUFBVSxFQUNZLEVBQUU7SUFDeEIsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUEyQjs7OztLQUl6RCxDQUFDLENBQUM7SUFFSCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0FBQ2xDLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLEtBQUssRUFDeEMsSUFBVSxFQUNrQixFQUFFO0lBQzlCLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBc0I7Ozs7OztLQU1wRCxDQUFDLENBQUM7SUFFSCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1Bvb2x9IGZyb20gJ3BnJztcblxuZXhwb3J0IHR5cGUgVFBvc3RncmVzVmVyc2lvbiA9IHtcbiAgICB2ZXJzaW9uOiBzdHJpbmc7XG4gICAgdmVyc2lvbl9udW06IG51bWJlcjtcbn07XG5cbmV4cG9ydCBjb25zdCBmZXRjaFBvc3RncmVzVmVyc2lvbiA9IGFzeW5jIChcbiAgICBwb29sOiBQb29sLFxuKTogUHJvbWlzZTxUUG9zdGdyZXNWZXJzaW9uPiA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcG9vbC5xdWVyeTxUUG9zdGdyZXNWZXJzaW9uPihgXG4gICAgICAgIFNFTEVDVFxuICAgICAgICAgICAgY3VycmVudF9zZXR0aW5nKCdzZXJ2ZXJfdmVyc2lvbicpIEFTIHZlcnNpb24sXG4gICAgICAgICAgICBjdXJyZW50X3NldHRpbmcoJ3NlcnZlcl92ZXJzaW9uX251bScpOjppbnQgQVMgdmVyc2lvbl9udW1cbiAgICBgKTtcblxuICAgIHJldHVybiByZXN1bHQucm93c1swXTtcbn07XG5cbmV4cG9ydCB0eXBlIFREYXRhYmFzZUlkZW50aWZpZXIgPSB7XG4gICAgc3lzdGVtX2lkZW50aWZpZXI6IHN0cmluZztcbiAgICBkYXRhYmFzZV9vaWQ6IG51bWJlcjtcbiAgICBkYXRhYmFzZV9uYW1lOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgY29uc3QgZmV0Y2hEYXRhYmFzZUNvbW1lbnQgPSBhc3luYyAoXG4gICAgcG9vbDogUG9vbCxcbik6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4gPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBvb2wucXVlcnk8e2NvbW1lbnQ6IHN0cmluZyB8IG51bGx9PihgXG4gICAgICAgIFNFTEVDVCBzaG9ial9kZXNjcmlwdGlvbihkLm9pZCwgJ3BnX2RhdGFiYXNlJykgQVMgY29tbWVudFxuICAgICAgICBGUk9NIHBnX2RhdGFiYXNlIGRcbiAgICAgICAgV0hFUkUgZC5kYXRuYW1lID0gY3VycmVudF9kYXRhYmFzZSgpXG4gICAgYCk7XG5cbiAgICByZXR1cm4gcmVzdWx0LnJvd3NbMF0uY29tbWVudDtcbn07XG5cbmV4cG9ydCBjb25zdCBmZXRjaERhdGFiYXNlSWRlbnRpZmllciA9IGFzeW5jIChcbiAgICBwb29sOiBQb29sLFxuKTogUHJvbWlzZTxURGF0YWJhc2VJZGVudGlmaWVyPiA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcG9vbC5xdWVyeTxURGF0YWJhc2VJZGVudGlmaWVyPihgXG4gICAgICAgIFNFTEVDVFxuICAgICAgICAgICAgc3lzdGVtX2lkZW50aWZpZXI6OnRleHQgQVMgc3lzdGVtX2lkZW50aWZpZXIsXG4gICAgICAgICAgICAoU0VMRUNUIG9pZDo6aW50IEZST00gcGdfZGF0YWJhc2UgV0hFUkUgZGF0bmFtZSA9IGN1cnJlbnRfZGF0YWJhc2UoKSkgQVMgZGF0YWJhc2Vfb2lkLFxuICAgICAgICAgICAgY3VycmVudF9kYXRhYmFzZSgpIEFTIGRhdGFiYXNlX25hbWVcbiAgICAgICAgRlJPTSBwZ19jb250cm9sX3N5c3RlbSgpXG4gICAgYCk7XG5cbiAgICByZXR1cm4gcmVzdWx0LnJvd3NbMF07XG59O1xuIl19
|