@shotleybuilder/gridlite-adapter-pglite 0.5.0 → 0.5.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.
- package/dist/adapter.d.ts +19 -22
- package/dist/adapter.d.ts.map +1 -1
- package/dist/adapter.js +92 -56
- package/dist/adapter.js.map +1 -1
- package/package.json +1 -1
package/dist/adapter.d.ts
CHANGED
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
* Wraps all PGLite-specific operations: live queries, schema introspection,
|
|
6
6
|
* state persistence, and filter suggestions.
|
|
7
7
|
*/
|
|
8
|
-
import type { QueryAdapter, LiveQueryHandle, ColumnStateEntry } from "@shotleybuilder/svelte-gridlite-kit/adapter";
|
|
9
|
-
import type { ColumnMetadata,
|
|
8
|
+
import type { QueryAdapter, LiveQueryHandle, ColumnStateEntry, QueryDescriptor, CountDescriptor, GroupSummaryDescriptor, GroupCountDescriptor, GroupDetailDescriptor } from "@shotleybuilder/svelte-gridlite-kit/adapter";
|
|
9
|
+
import type { ColumnMetadata, ViewPreset } from "@shotleybuilder/svelte-gridlite-kit/types";
|
|
10
10
|
import { type PGliteWithLive } from "./live.js";
|
|
11
11
|
export interface PGLiteAdapterOptions {
|
|
12
12
|
/** PGLite instance with the live extension loaded */
|
|
@@ -33,32 +33,29 @@ export declare class PGLiteAdapter implements QueryAdapter {
|
|
|
33
33
|
* Called by GridLite when in raw query mode after the first result.
|
|
34
34
|
*/
|
|
35
35
|
setColumnsFromResult(columns: ColumnMetadata[]): void;
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
36
|
+
private resolveSource;
|
|
37
|
+
createLiveQuery(query: QueryDescriptor): LiveQueryHandle;
|
|
38
|
+
executeCount(query: CountDescriptor): Promise<number>;
|
|
39
|
+
executeGroupSummary(query: GroupSummaryDescriptor): Promise<{
|
|
40
|
+
rows: Record<string, unknown>[];
|
|
41
|
+
}>;
|
|
42
|
+
executeGroupCount(query: GroupCountDescriptor): Promise<number>;
|
|
43
|
+
executeGroupDetail(query: GroupDetailDescriptor): Promise<{
|
|
44
|
+
rows: Record<string, unknown>[];
|
|
39
45
|
}>;
|
|
40
46
|
loadColumnState(gridId: string, viewId?: string): Promise<ColumnStateEntry[]>;
|
|
41
47
|
saveColumnState(gridId: string, columns: ColumnStateEntry[], viewId?: string): Promise<void>;
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
getNumericRange(column: string
|
|
50
|
-
table?: string;
|
|
51
|
-
source?: string;
|
|
52
|
-
filters?: FilterNode[];
|
|
53
|
-
filterLogic?: FilterLogic;
|
|
54
|
-
allowedColumns?: string[];
|
|
55
|
-
}): Promise<{
|
|
48
|
+
saveView(gridId: string, view: ViewPreset): Promise<void>;
|
|
49
|
+
loadView(viewId: string): Promise<ViewPreset | null>;
|
|
50
|
+
loadViews(gridId: string): Promise<ViewPreset[]>;
|
|
51
|
+
deleteView(viewId: string): Promise<void>;
|
|
52
|
+
loadDefaultView(gridId: string): Promise<ViewPreset | null>;
|
|
53
|
+
setDefaultView(gridId: string, viewId: string): Promise<void>;
|
|
54
|
+
getDistinctValues(column: string): Promise<string[]>;
|
|
55
|
+
getNumericRange(column: string): Promise<{
|
|
56
56
|
min: number;
|
|
57
57
|
max: number;
|
|
58
58
|
} | null>;
|
|
59
|
-
getTable(): string | undefined;
|
|
60
|
-
getSource(): string | undefined;
|
|
61
|
-
_getDb(): unknown;
|
|
62
59
|
}
|
|
63
60
|
/**
|
|
64
61
|
* Create a QueryAdapter backed by PGLite.
|
package/dist/adapter.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EACV,YAAY,EACZ,eAAe,EACf,gBAAgB,
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"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"}
|
package/dist/adapter.js
CHANGED
|
@@ -5,11 +5,11 @@
|
|
|
5
5
|
* Wraps all PGLite-specific operations: live queries, schema introspection,
|
|
6
6
|
* state persistence, and filter suggestions.
|
|
7
7
|
*/
|
|
8
|
-
import { quoteIdentifier, resolveFrom,
|
|
8
|
+
import { quoteIdentifier, resolveFrom, buildQuery, buildCountQuery, buildGroupSummaryQuery, buildGroupCountQuery, buildGroupDetailQuery, } from "@shotleybuilder/svelte-gridlite-kit/builder";
|
|
9
9
|
import { createLiveQueryStore } from "./live.js";
|
|
10
10
|
import { introspectTable } from "./schema.js";
|
|
11
11
|
import { runMigrations } from "./migrations.js";
|
|
12
|
-
import { loadColumnState as loadColumnStateFromDb, saveColumnState as saveColumnStateFromDb, } from "./views.js";
|
|
12
|
+
import { loadColumnState as loadColumnStateFromDb, saveColumnState as saveColumnStateFromDb, saveView as saveViewToDb, loadView as loadViewFromDb, loadViews as loadViewsFromDb, deleteView as deleteViewFromDb, loadDefaultView as loadDefaultViewFromDb, setDefaultView as setDefaultViewFromDb, } from "./views.js";
|
|
13
13
|
// ─── Adapter Implementation ─────────────────────────────────────────────────
|
|
14
14
|
export class PGLiteAdapter {
|
|
15
15
|
constructor(options) {
|
|
@@ -53,13 +53,67 @@ export class PGLiteAdapter {
|
|
|
53
53
|
this.columns = columns;
|
|
54
54
|
this.allowedColumns = columns.map((c) => c.name);
|
|
55
55
|
}
|
|
56
|
-
// ──
|
|
57
|
-
|
|
58
|
-
return
|
|
56
|
+
// ── Private Helpers ───────────────────────────────────────────────────────
|
|
57
|
+
resolveSource() {
|
|
58
|
+
return this.table ? { table: this.table } : { source: this.source };
|
|
59
59
|
}
|
|
60
|
-
// ──
|
|
61
|
-
|
|
62
|
-
const
|
|
60
|
+
// ── Query Execution ───────────────────────────────────────────────────────
|
|
61
|
+
createLiveQuery(query) {
|
|
62
|
+
const built = buildQuery({
|
|
63
|
+
...this.resolveSource(),
|
|
64
|
+
...query,
|
|
65
|
+
allowedColumns: this.allowedColumns,
|
|
66
|
+
});
|
|
67
|
+
const store = createLiveQueryStore(this.db, built.sql, built.params);
|
|
68
|
+
// Wrap the SQL-native store to satisfy the descriptor-based LiveQueryHandle interface
|
|
69
|
+
return {
|
|
70
|
+
subscribe: store.subscribe,
|
|
71
|
+
refresh: store.refresh,
|
|
72
|
+
update: async (newQuery) => {
|
|
73
|
+
const newBuilt = buildQuery({
|
|
74
|
+
...this.resolveSource(),
|
|
75
|
+
...newQuery,
|
|
76
|
+
allowedColumns: this.allowedColumns,
|
|
77
|
+
});
|
|
78
|
+
await store.update(newBuilt.sql, newBuilt.params);
|
|
79
|
+
},
|
|
80
|
+
destroy: store.destroy,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
async executeCount(query) {
|
|
84
|
+
const built = buildCountQuery({
|
|
85
|
+
...this.resolveSource(),
|
|
86
|
+
...query,
|
|
87
|
+
allowedColumns: this.allowedColumns,
|
|
88
|
+
});
|
|
89
|
+
const result = await this.db.query(built.sql, built.params);
|
|
90
|
+
return parseInt(result.rows[0]?.total ?? "0", 10);
|
|
91
|
+
}
|
|
92
|
+
async executeGroupSummary(query) {
|
|
93
|
+
const built = buildGroupSummaryQuery({
|
|
94
|
+
...this.resolveSource(),
|
|
95
|
+
...query,
|
|
96
|
+
allowedColumns: this.allowedColumns,
|
|
97
|
+
});
|
|
98
|
+
const result = await this.db.query(built.sql, built.params);
|
|
99
|
+
return { rows: result.rows };
|
|
100
|
+
}
|
|
101
|
+
async executeGroupCount(query) {
|
|
102
|
+
const built = buildGroupCountQuery({
|
|
103
|
+
...this.resolveSource(),
|
|
104
|
+
...query,
|
|
105
|
+
allowedColumns: this.allowedColumns,
|
|
106
|
+
});
|
|
107
|
+
const result = await this.db.query(built.sql, built.params);
|
|
108
|
+
return parseInt(result.rows[0]?.total ?? "0", 10);
|
|
109
|
+
}
|
|
110
|
+
async executeGroupDetail(query) {
|
|
111
|
+
const built = buildGroupDetailQuery({
|
|
112
|
+
...this.resolveSource(),
|
|
113
|
+
...query,
|
|
114
|
+
allowedColumns: this.allowedColumns,
|
|
115
|
+
});
|
|
116
|
+
const result = await this.db.query(built.sql, built.params);
|
|
63
117
|
return { rows: result.rows };
|
|
64
118
|
}
|
|
65
119
|
// ── State Persistence ─────────────────────────────────────────────────────
|
|
@@ -82,64 +136,57 @@ export class PGLiteAdapter {
|
|
|
82
136
|
label: c.label,
|
|
83
137
|
})), viewId);
|
|
84
138
|
}
|
|
139
|
+
// ── View Persistence ───────────────────────────────────────────────────────
|
|
140
|
+
async saveView(gridId, view) {
|
|
141
|
+
await saveViewToDb(this.db, gridId, view);
|
|
142
|
+
}
|
|
143
|
+
async loadView(viewId) {
|
|
144
|
+
return loadViewFromDb(this.db, viewId);
|
|
145
|
+
}
|
|
146
|
+
async loadViews(gridId) {
|
|
147
|
+
return loadViewsFromDb(this.db, gridId);
|
|
148
|
+
}
|
|
149
|
+
async deleteView(viewId) {
|
|
150
|
+
await deleteViewFromDb(this.db, viewId);
|
|
151
|
+
}
|
|
152
|
+
async loadDefaultView(gridId) {
|
|
153
|
+
return loadDefaultViewFromDb(this.db, gridId);
|
|
154
|
+
}
|
|
155
|
+
async setDefaultView(gridId, viewId) {
|
|
156
|
+
await setDefaultViewFromDb(this.db, gridId, viewId);
|
|
157
|
+
}
|
|
85
158
|
// ── Filter Suggestions ────────────────────────────────────────────────────
|
|
86
|
-
async getDistinctValues(column
|
|
87
|
-
const
|
|
88
|
-
const
|
|
89
|
-
const cols = options?.allowedColumns ?? this.allowedColumns;
|
|
90
|
-
const fromClause = resolveFrom(tbl, src);
|
|
91
|
-
const quotedCol = quoteIdentifier(column, cols);
|
|
159
|
+
async getDistinctValues(column) {
|
|
160
|
+
const fromClause = resolveFrom(this.table, this.source);
|
|
161
|
+
const quotedCol = quoteIdentifier(column, this.allowedColumns);
|
|
92
162
|
// Determine data type for JSONB detection
|
|
93
163
|
const colMeta = this.columns.find((c) => c.name === column);
|
|
94
164
|
const dataType = colMeta?.dataType;
|
|
95
|
-
let extraWhere = "";
|
|
96
|
-
let whereParams = [];
|
|
97
|
-
if (options?.filters && options.filters.length > 0) {
|
|
98
|
-
const built = buildWhereClauseFromNodes(options.filters, options.filterLogic ?? "and", 0, cols);
|
|
99
|
-
if (built.sql) {
|
|
100
|
-
// built.sql is "WHERE ..." — strip the WHERE prefix and add as AND
|
|
101
|
-
const clause = built.sql.replace(/^WHERE\s+/i, "");
|
|
102
|
-
extraWhere = ` AND ${clause}`;
|
|
103
|
-
whereParams = built.params;
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
165
|
let sql;
|
|
107
166
|
if (dataType === "json") {
|
|
108
|
-
sql = `SELECT DISTINCT jsonb_object_keys(${quotedCol}) AS val FROM ${fromClause} WHERE ${quotedCol} IS NOT NULL
|
|
167
|
+
sql = `SELECT DISTINCT jsonb_object_keys(${quotedCol}) AS val FROM ${fromClause} WHERE ${quotedCol} IS NOT NULL ORDER BY val LIMIT 200`;
|
|
109
168
|
}
|
|
110
169
|
else {
|
|
111
|
-
sql = `SELECT DISTINCT ${quotedCol}::TEXT AS val FROM ${fromClause} WHERE ${quotedCol} IS NOT NULL
|
|
170
|
+
sql = `SELECT DISTINCT ${quotedCol}::TEXT AS val FROM ${fromClause} WHERE ${quotedCol} IS NOT NULL ORDER BY val LIMIT 200`;
|
|
112
171
|
}
|
|
113
172
|
try {
|
|
114
|
-
const result = await this.db.query(sql
|
|
173
|
+
const result = await this.db.query(sql);
|
|
115
174
|
return result.rows.map((r) => r.val);
|
|
116
175
|
}
|
|
117
176
|
catch {
|
|
118
177
|
return [];
|
|
119
178
|
}
|
|
120
179
|
}
|
|
121
|
-
async getNumericRange(column
|
|
122
|
-
const tbl = options?.table ?? this.table;
|
|
123
|
-
const src = options?.source ?? this.source;
|
|
124
|
-
const cols = options?.allowedColumns ?? this.allowedColumns;
|
|
180
|
+
async getNumericRange(column) {
|
|
125
181
|
// Only query for numeric columns
|
|
126
182
|
const colMeta = this.columns.find((c) => c.name === column);
|
|
127
183
|
if (colMeta?.dataType !== "number")
|
|
128
184
|
return null;
|
|
129
|
-
const fromClause = resolveFrom(
|
|
130
|
-
const quotedCol = quoteIdentifier(column,
|
|
131
|
-
let whereClause = "";
|
|
132
|
-
let whereParams = [];
|
|
133
|
-
if (options?.filters && options.filters.length > 0) {
|
|
134
|
-
const built = buildWhereClauseFromNodes(options.filters, options.filterLogic ?? "and", 0, cols);
|
|
135
|
-
if (built.sql) {
|
|
136
|
-
whereClause = ` ${built.sql}`;
|
|
137
|
-
whereParams = built.params;
|
|
138
|
-
}
|
|
139
|
-
}
|
|
185
|
+
const fromClause = resolveFrom(this.table, this.source);
|
|
186
|
+
const quotedCol = quoteIdentifier(column, this.allowedColumns);
|
|
140
187
|
try {
|
|
141
|
-
const sql = `SELECT MIN(${quotedCol})::NUMERIC AS min_val, MAX(${quotedCol})::NUMERIC AS max_val FROM ${fromClause}
|
|
142
|
-
const result = await this.db.query(sql
|
|
188
|
+
const sql = `SELECT MIN(${quotedCol})::NUMERIC AS min_val, MAX(${quotedCol})::NUMERIC AS max_val FROM ${fromClause}`;
|
|
189
|
+
const result = await this.db.query(sql);
|
|
143
190
|
const row = result.rows[0];
|
|
144
191
|
if (row && row.min_val != null && row.max_val != null) {
|
|
145
192
|
return { min: Number(row.min_val), max: Number(row.max_val) };
|
|
@@ -150,17 +197,6 @@ export class PGLiteAdapter {
|
|
|
150
197
|
return null;
|
|
151
198
|
}
|
|
152
199
|
}
|
|
153
|
-
// ── Query Source ──────────────────────────────────────────────────────────
|
|
154
|
-
getTable() {
|
|
155
|
-
return this.table;
|
|
156
|
-
}
|
|
157
|
-
getSource() {
|
|
158
|
-
return this.source;
|
|
159
|
-
}
|
|
160
|
-
// ── Phase 1 Bridge ────────────────────────────────────────────────────────
|
|
161
|
-
_getDb() {
|
|
162
|
-
return this.db;
|
|
163
|
-
}
|
|
164
200
|
}
|
|
165
201
|
// ─── Factory Function ───────────────────────────────────────────────────────
|
|
166
202
|
/**
|
package/dist/adapter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"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"}
|