hazo_connect 2.3.3 → 2.3.5
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/app/hazo_connect/api/sqlite/data/route.ts +9 -0
- package/app/hazo_connect/api/sqlite/schema/route.ts +3 -0
- package/app/hazo_connect/api/sqlite/tables/route.ts +4 -0
- package/app/hazo_connect/sqlite_admin/page.tsx +5 -3
- package/app/page.tsx +2 -2
- package/dist/ui/components/sqlite-admin-client.d.ts +7 -0
- package/dist/ui/components/sqlite-admin-client.d.ts.map +1 -0
- package/dist/ui/components/sqlite-admin-client.js +411 -0
- package/dist/ui/components/sqlite-admin-client.js.map +1 -0
- package/dist/ui/index.d.ts +7 -5
- package/dist/ui/index.d.ts.map +1 -1
- package/dist/ui/index.js +9 -2
- package/dist/ui/index.js.map +1 -1
- package/package.json +1 -1
- package/app/hazo_connect/sqlite_admin/sqlite-admin-client.tsx +0 -949
|
@@ -5,6 +5,7 @@ import {
|
|
|
5
5
|
type SqliteFilterOperator,
|
|
6
6
|
type SqliteWhereFilter
|
|
7
7
|
} from "hazo_connect/server"
|
|
8
|
+
import { getHazoConnectSingleton } from "hazo_connect/nextjs/setup"
|
|
8
9
|
|
|
9
10
|
export const dynamic = "force-dynamic"
|
|
10
11
|
const allowedOperators: SqliteFilterOperator[] = [
|
|
@@ -30,6 +31,8 @@ export async function GET(request: NextRequest) {
|
|
|
30
31
|
}
|
|
31
32
|
|
|
32
33
|
try {
|
|
34
|
+
// Initialize the singleton to ensure the adapter is registered with the admin service
|
|
35
|
+
getHazoConnectSingleton()
|
|
33
36
|
const service = getSqliteAdminService()
|
|
34
37
|
const options = parseRowQueryOptions(url.searchParams)
|
|
35
38
|
const page = await service.getTableData(table, options)
|
|
@@ -41,6 +44,8 @@ export async function GET(request: NextRequest) {
|
|
|
41
44
|
|
|
42
45
|
export async function POST(request: NextRequest) {
|
|
43
46
|
try {
|
|
47
|
+
// Initialize the singleton to ensure the adapter is registered with the admin service
|
|
48
|
+
getHazoConnectSingleton()
|
|
44
49
|
const service = getSqliteAdminService()
|
|
45
50
|
const payload = await request.json()
|
|
46
51
|
const table = payload?.table
|
|
@@ -62,6 +67,8 @@ export async function POST(request: NextRequest) {
|
|
|
62
67
|
|
|
63
68
|
export async function PATCH(request: NextRequest) {
|
|
64
69
|
try {
|
|
70
|
+
// Initialize the singleton to ensure the adapter is registered with the admin service
|
|
71
|
+
getHazoConnectSingleton()
|
|
65
72
|
const service = getSqliteAdminService()
|
|
66
73
|
const payload = await request.json()
|
|
67
74
|
const table = payload?.table
|
|
@@ -94,6 +101,8 @@ export async function PATCH(request: NextRequest) {
|
|
|
94
101
|
|
|
95
102
|
export async function DELETE(request: NextRequest) {
|
|
96
103
|
try {
|
|
104
|
+
// Initialize the singleton to ensure the adapter is registered with the admin service
|
|
105
|
+
getHazoConnectSingleton()
|
|
97
106
|
const service = getSqliteAdminService()
|
|
98
107
|
const payload = await request.json()
|
|
99
108
|
const table = payload?.table
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { NextRequest, NextResponse } from "next/server"
|
|
2
2
|
import { getSqliteAdminService } from "hazo_connect/server"
|
|
3
|
+
import { getHazoConnectSingleton } from "hazo_connect/nextjs/setup"
|
|
3
4
|
|
|
4
5
|
export const dynamic = "force-dynamic"
|
|
5
6
|
|
|
6
7
|
export async function GET(request: NextRequest) {
|
|
8
|
+
// Initialize the singleton to ensure the adapter is registered with the admin service
|
|
9
|
+
getHazoConnectSingleton()
|
|
7
10
|
const service = getSqliteAdminService()
|
|
8
11
|
const url = new URL(request.url)
|
|
9
12
|
const table = url.searchParams.get("table")
|
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
import { NextResponse } from "next/server"
|
|
2
2
|
import { getSqliteAdminService } from "hazo_connect/server"
|
|
3
|
+
import { getHazoConnectSingleton } from "hazo_connect/nextjs/setup"
|
|
3
4
|
|
|
4
5
|
export const dynamic = "force-dynamic"
|
|
5
6
|
|
|
6
7
|
export async function GET() {
|
|
7
8
|
try {
|
|
9
|
+
// Initialize the singleton to ensure the adapter is registered with the admin service
|
|
10
|
+
getHazoConnectSingleton()
|
|
11
|
+
|
|
8
12
|
const service = getSqliteAdminService()
|
|
9
13
|
const tables = await service.listTables()
|
|
10
14
|
return NextResponse.json({ data: tables })
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import { getSqliteAdminService } from "hazo_connect/server"
|
|
2
|
-
import
|
|
3
|
-
import SqliteAdminClient from "
|
|
2
|
+
import { getHazoConnectSingleton } from "hazo_connect/nextjs/setup"
|
|
3
|
+
import { SqliteAdminClient } from "hazo_connect/ui"
|
|
4
4
|
|
|
5
5
|
export const dynamic = "force-dynamic"
|
|
6
6
|
|
|
7
7
|
export default async function SqliteAdminPage() {
|
|
8
|
+
// Initialize the singleton to ensure the adapter is registered with the admin service
|
|
9
|
+
getHazoConnectSingleton()
|
|
8
10
|
const service = getSqliteAdminService()
|
|
9
|
-
|
|
11
|
+
|
|
10
12
|
try {
|
|
11
13
|
const tables = await service.listTables()
|
|
12
14
|
return <SqliteAdminClient initialTables={tables} />
|
package/app/page.tsx
CHANGED
|
@@ -3,11 +3,11 @@ import React from "react";
|
|
|
3
3
|
|
|
4
4
|
// HomePage introduces the component library workspace with a neutral placeholder.
|
|
5
5
|
export default function HomePage() {
|
|
6
|
-
return (
|
|
6
|
+
return (
|
|
7
7
|
<main className="cls_home_page flex min-h-screen flex-col items-center justify-center gap-4 bg-slate-100">
|
|
8
8
|
<div className="cls_home_container mx-auto max-w-3xl rounded-lg border border-slate-200 bg-white p-8 shadow-sm">
|
|
9
9
|
<h1 className="text-3xl font-semibold text-slate-900">
|
|
10
|
-
hazo_connect component workspace
|
|
10
|
+
hazo_connect component workspace
|
|
11
11
|
</h1>
|
|
12
12
|
<p className="mt-4 text-base text-slate-600">
|
|
13
13
|
Start adding shared UI components inside the src/components directory to
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { TableSummary } from "../index.js";
|
|
2
|
+
export interface SqliteAdminClientProps {
|
|
3
|
+
initialTables: TableSummary[];
|
|
4
|
+
baseApiPath?: string;
|
|
5
|
+
}
|
|
6
|
+
export default function SqliteAdminClient({ initialTables, baseApiPath }: SqliteAdminClientProps): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
//# sourceMappingURL=sqlite-admin-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite-admin-client.d.ts","sourceRoot":"","sources":["../../../src/lib/ui/components/sqlite-admin-client.tsx"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAIV,YAAY,EACb,MAAM,aAAa,CAAA;AAGpB,MAAM,WAAW,sBAAsB;IACrC,aAAa,EAAE,YAAY,EAAE,CAAA;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AA6BD,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,EACxC,aAAa,EACb,WAA8B,EAC/B,EAAE,sBAAsB,2CAgsBxB"}
|
|
@@ -0,0 +1,411 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
"use client";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.default = SqliteAdminClient;
|
|
5
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
|
+
/**
|
|
7
|
+
* Purpose: SQLite Admin Client UI Component
|
|
8
|
+
*
|
|
9
|
+
* A full-featured database management interface for SQLite databases.
|
|
10
|
+
* Provides table browsing, data viewing/editing, schema inspection,
|
|
11
|
+
* filtering, pagination, and CRUD operations.
|
|
12
|
+
*
|
|
13
|
+
* This component is exported from hazo_connect/ui for use in consuming apps.
|
|
14
|
+
*/
|
|
15
|
+
const react_1 = require("react");
|
|
16
|
+
const lucide_react_1 = require("lucide-react");
|
|
17
|
+
const sonner_1 = require("sonner");
|
|
18
|
+
const DEFAULT_LIMIT = 20;
|
|
19
|
+
const DEFAULT_API_PATH = "/hazo_connect/api/sqlite";
|
|
20
|
+
const filterOperators = [
|
|
21
|
+
{ label: "Equals", value: "eq" },
|
|
22
|
+
{ label: "Not equal", value: "neq" },
|
|
23
|
+
{ label: "Greater than", value: "gt" },
|
|
24
|
+
{ label: "Greater or equal", value: "gte" },
|
|
25
|
+
{ label: "Less than", value: "lt" },
|
|
26
|
+
{ label: "Less or equal", value: "lte" },
|
|
27
|
+
{ label: "Contains", value: "like" },
|
|
28
|
+
{ label: "Contains (case-insensitive)", value: "ilike" },
|
|
29
|
+
{ label: "Is / Is Not", value: "is" }
|
|
30
|
+
];
|
|
31
|
+
function SqliteAdminClient({ initialTables, baseApiPath = DEFAULT_API_PATH }) {
|
|
32
|
+
const [tables, setTables] = (0, react_1.useState)(initialTables);
|
|
33
|
+
const [selectedTable, setSelectedTable] = (0, react_1.useState)(initialTables[0] ?? null);
|
|
34
|
+
const [schema, setSchema] = (0, react_1.useState)(null);
|
|
35
|
+
const [rows, setRows] = (0, react_1.useState)([]);
|
|
36
|
+
const [totalRows, setTotalRows] = (0, react_1.useState)(0);
|
|
37
|
+
const [limit, setLimit] = (0, react_1.useState)(DEFAULT_LIMIT);
|
|
38
|
+
const [offset, setOffset] = (0, react_1.useState)(0);
|
|
39
|
+
const [orderBy, setOrderBy] = (0, react_1.useState)();
|
|
40
|
+
const [orderDirection, setOrderDirection] = (0, react_1.useState)("asc");
|
|
41
|
+
const [filterState, setFilterState] = (0, react_1.useState)({
|
|
42
|
+
operator: "eq",
|
|
43
|
+
value: ""
|
|
44
|
+
});
|
|
45
|
+
const [isLoadingSchema, setIsLoadingSchema] = (0, react_1.useState)(false);
|
|
46
|
+
const [isLoadingData, setIsLoadingData] = (0, react_1.useState)(false);
|
|
47
|
+
const [isRefreshingTables, setIsRefreshingTables] = (0, react_1.useState)(false);
|
|
48
|
+
const [isCreateOpen, setIsCreateOpen] = (0, react_1.useState)(false);
|
|
49
|
+
const [editingRow, setEditingRow] = (0, react_1.useState)(null);
|
|
50
|
+
const columns = (0, react_1.useMemo)(() => schema?.columns ?? [], [schema]);
|
|
51
|
+
const filterColumns = (0, react_1.useMemo)(() => columns.filter(column => identifierIsFilterable(column.name)), [columns]);
|
|
52
|
+
(0, react_1.useEffect)(() => {
|
|
53
|
+
if (!selectedTable) {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
void loadSchemaAndData(selectedTable.name);
|
|
57
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
58
|
+
}, [selectedTable?.name]);
|
|
59
|
+
async function loadSchemaAndData(tableName) {
|
|
60
|
+
setIsLoadingSchema(true);
|
|
61
|
+
try {
|
|
62
|
+
const schemaResponse = await fetch(`${baseApiPath}/schema?table=${encodeURIComponent(tableName)}`);
|
|
63
|
+
if (!schemaResponse.ok) {
|
|
64
|
+
throw new Error(await schemaResponse.text());
|
|
65
|
+
}
|
|
66
|
+
const schemaJson = await schemaResponse.json();
|
|
67
|
+
setSchema(schemaJson.data);
|
|
68
|
+
const preferredFilterColumn = filterState.column && schemaJson.data?.columns?.some((col) => col.name === filterState.column)
|
|
69
|
+
? filterState.column
|
|
70
|
+
: schemaJson.data?.columns?.[0]?.name;
|
|
71
|
+
setFilterState(current => ({
|
|
72
|
+
...current,
|
|
73
|
+
column: preferredFilterColumn
|
|
74
|
+
}));
|
|
75
|
+
setLimit(DEFAULT_LIMIT);
|
|
76
|
+
setOffset(0);
|
|
77
|
+
setOrderBy(undefined);
|
|
78
|
+
setOrderDirection("asc");
|
|
79
|
+
await loadData(tableName, {
|
|
80
|
+
limit: DEFAULT_LIMIT,
|
|
81
|
+
offset: 0,
|
|
82
|
+
orderBy: undefined,
|
|
83
|
+
orderDirection: "asc",
|
|
84
|
+
filterOverride: {
|
|
85
|
+
...filterState,
|
|
86
|
+
column: preferredFilterColumn
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
sonner_1.toast.error(error instanceof Error
|
|
92
|
+
? error.message
|
|
93
|
+
: `Failed to load schema for table '${tableName}'`);
|
|
94
|
+
}
|
|
95
|
+
finally {
|
|
96
|
+
setIsLoadingSchema(false);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
async function loadData(tableName, overrides) {
|
|
100
|
+
setIsLoadingData(true);
|
|
101
|
+
const nextLimit = overrides?.limit ?? limit;
|
|
102
|
+
const nextOffset = overrides?.offset ?? offset;
|
|
103
|
+
const nextOrderBy = overrides?.orderBy ?? orderBy;
|
|
104
|
+
const nextOrderDirection = overrides?.orderDirection ?? orderDirection;
|
|
105
|
+
const nextFilter = overrides?.filterOverride ?? filterState;
|
|
106
|
+
try {
|
|
107
|
+
const params = new URLSearchParams({
|
|
108
|
+
table: tableName,
|
|
109
|
+
limit: String(nextLimit),
|
|
110
|
+
offset: String(nextOffset)
|
|
111
|
+
});
|
|
112
|
+
if (nextOrderBy) {
|
|
113
|
+
params.set("orderBy", nextOrderBy);
|
|
114
|
+
params.set("orderDirection", nextOrderDirection);
|
|
115
|
+
}
|
|
116
|
+
if (nextFilter.column && nextFilter.value.trim().length) {
|
|
117
|
+
const key = nextFilter.operator === "eq"
|
|
118
|
+
? `filter[${nextFilter.column}]`
|
|
119
|
+
: `filter[${nextFilter.column}][${nextFilter.operator}]`;
|
|
120
|
+
params.set(key, nextFilter.value);
|
|
121
|
+
}
|
|
122
|
+
else if (nextFilter.operator === "is" && nextFilter.column) {
|
|
123
|
+
const key = `filter[${nextFilter.column}][is]`;
|
|
124
|
+
params.set(key, nextFilter.value || "null");
|
|
125
|
+
}
|
|
126
|
+
const response = await fetch(`${baseApiPath}/data?${params.toString()}`);
|
|
127
|
+
if (!response.ok) {
|
|
128
|
+
throw new Error(await response.text());
|
|
129
|
+
}
|
|
130
|
+
const json = (await response.json());
|
|
131
|
+
setRows(json.data ?? []);
|
|
132
|
+
setTotalRows(json.total ?? 0);
|
|
133
|
+
setLimit(nextLimit);
|
|
134
|
+
setOffset(nextOffset);
|
|
135
|
+
setOrderBy(nextOrderBy);
|
|
136
|
+
setOrderDirection(nextOrderDirection);
|
|
137
|
+
setFilterState(nextFilter);
|
|
138
|
+
}
|
|
139
|
+
catch (error) {
|
|
140
|
+
sonner_1.toast.error(error instanceof Error
|
|
141
|
+
? error.message
|
|
142
|
+
: `Failed to load data for table '${tableName}'`);
|
|
143
|
+
}
|
|
144
|
+
finally {
|
|
145
|
+
setIsLoadingData(false);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
async function refreshTables() {
|
|
149
|
+
setIsRefreshingTables(true);
|
|
150
|
+
try {
|
|
151
|
+
const response = await fetch(`${baseApiPath}/tables`);
|
|
152
|
+
if (!response.ok) {
|
|
153
|
+
throw new Error(await response.text());
|
|
154
|
+
}
|
|
155
|
+
const json = await response.json();
|
|
156
|
+
setTables(json.data ?? []);
|
|
157
|
+
sonner_1.toast.success("Tables refreshed");
|
|
158
|
+
}
|
|
159
|
+
catch (error) {
|
|
160
|
+
sonner_1.toast.error(error instanceof Error ? error.message : "Failed to refresh tables");
|
|
161
|
+
}
|
|
162
|
+
finally {
|
|
163
|
+
setIsRefreshingTables(false);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
function handleSelectTable(table) {
|
|
167
|
+
setSelectedTable(table);
|
|
168
|
+
}
|
|
169
|
+
function handleChangePage(nextOffset) {
|
|
170
|
+
if (!selectedTable) {
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
void loadData(selectedTable.name, { offset: Math.max(0, nextOffset) });
|
|
174
|
+
}
|
|
175
|
+
function handleChangeLimit(nextLimit) {
|
|
176
|
+
if (!selectedTable) {
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
void loadData(selectedTable.name, { limit: nextLimit, offset: 0 });
|
|
180
|
+
}
|
|
181
|
+
function handleChangeOrder(column) {
|
|
182
|
+
if (!selectedTable) {
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
const nextDirection = orderBy === column
|
|
186
|
+
? orderDirection === "asc"
|
|
187
|
+
? "desc"
|
|
188
|
+
: "asc"
|
|
189
|
+
: "asc";
|
|
190
|
+
void loadData(selectedTable.name, {
|
|
191
|
+
orderBy: column,
|
|
192
|
+
orderDirection: nextDirection
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
function handleApplyFilter() {
|
|
196
|
+
if (!selectedTable) {
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
void loadData(selectedTable.name, { offset: 0 });
|
|
200
|
+
}
|
|
201
|
+
async function handleInsertRow(data) {
|
|
202
|
+
if (!selectedTable) {
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
try {
|
|
206
|
+
const response = await fetch(`${baseApiPath}/data`, {
|
|
207
|
+
method: "POST",
|
|
208
|
+
headers: {
|
|
209
|
+
"Content-Type": "application/json"
|
|
210
|
+
},
|
|
211
|
+
body: JSON.stringify({ table: selectedTable.name, data })
|
|
212
|
+
});
|
|
213
|
+
if (!response.ok) {
|
|
214
|
+
throw new Error(await response.text());
|
|
215
|
+
}
|
|
216
|
+
sonner_1.toast.success("Row inserted");
|
|
217
|
+
setIsCreateOpen(false);
|
|
218
|
+
await Promise.all([
|
|
219
|
+
refreshTables(),
|
|
220
|
+
loadData(selectedTable.name, { offset: 0 })
|
|
221
|
+
]);
|
|
222
|
+
}
|
|
223
|
+
catch (error) {
|
|
224
|
+
sonner_1.toast.error(error instanceof Error ? error.message : "Insert failed");
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
async function handleUpdateRow(row, data) {
|
|
228
|
+
if (!selectedTable || !schema) {
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
const criteria = buildCriteriaFromRow(row, schema.columns);
|
|
232
|
+
try {
|
|
233
|
+
const response = await fetch(`${baseApiPath}/data`, {
|
|
234
|
+
method: "PATCH",
|
|
235
|
+
headers: {
|
|
236
|
+
"Content-Type": "application/json"
|
|
237
|
+
},
|
|
238
|
+
body: JSON.stringify({
|
|
239
|
+
table: selectedTable.name,
|
|
240
|
+
data,
|
|
241
|
+
criteria
|
|
242
|
+
})
|
|
243
|
+
});
|
|
244
|
+
if (!response.ok) {
|
|
245
|
+
throw new Error(await response.text());
|
|
246
|
+
}
|
|
247
|
+
sonner_1.toast.success("Row updated");
|
|
248
|
+
setEditingRow(null);
|
|
249
|
+
await loadData(selectedTable.name);
|
|
250
|
+
}
|
|
251
|
+
catch (error) {
|
|
252
|
+
sonner_1.toast.error(error instanceof Error ? error.message : "Update failed");
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
async function handleDeleteRow(row) {
|
|
256
|
+
if (!selectedTable || !schema) {
|
|
257
|
+
return;
|
|
258
|
+
}
|
|
259
|
+
const criteria = buildCriteriaFromRow(row, schema.columns);
|
|
260
|
+
if (!Object.keys(criteria).length) {
|
|
261
|
+
sonner_1.toast.error("Unable to determine primary key for row deletion");
|
|
262
|
+
return;
|
|
263
|
+
}
|
|
264
|
+
if (!window.confirm("Delete this row? This action cannot be undone.")) {
|
|
265
|
+
return;
|
|
266
|
+
}
|
|
267
|
+
try {
|
|
268
|
+
const response = await fetch(`${baseApiPath}/data`, {
|
|
269
|
+
method: "DELETE",
|
|
270
|
+
headers: {
|
|
271
|
+
"Content-Type": "application/json"
|
|
272
|
+
},
|
|
273
|
+
body: JSON.stringify({
|
|
274
|
+
table: selectedTable.name,
|
|
275
|
+
criteria
|
|
276
|
+
})
|
|
277
|
+
});
|
|
278
|
+
if (!response.ok) {
|
|
279
|
+
throw new Error(await response.text());
|
|
280
|
+
}
|
|
281
|
+
sonner_1.toast.success("Row deleted");
|
|
282
|
+
await loadData(selectedTable.name, { offset: 0 });
|
|
283
|
+
await refreshTables();
|
|
284
|
+
}
|
|
285
|
+
catch (error) {
|
|
286
|
+
sonner_1.toast.error(error instanceof Error ? error.message : "Delete failed");
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
const totalPages = Math.max(1, Math.ceil(totalRows / limit));
|
|
290
|
+
const currentPage = Math.min(totalPages, Math.floor(offset / limit) + 1);
|
|
291
|
+
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(sonner_1.Toaster, { position: "top-right", richColors: true }), (0, jsx_runtime_1.jsxs)("div", { className: "flex min-h-[calc(100vh-4rem)] flex-col gap-4 p-6 lg:flex-row", children: [(0, jsx_runtime_1.jsxs)("aside", { className: "w-full max-w-xs rounded-lg border border-slate-200 bg-white shadow-sm lg:sticky lg:top-6 lg:h-[calc(100vh-6rem)]", children: [(0, jsx_runtime_1.jsxs)("header", { className: "flex items-center justify-between border-b border-slate-100 px-4 py-3", children: [(0, jsx_runtime_1.jsx)("h2", { className: "text-sm font-medium text-slate-700", children: "Tables" }), (0, jsx_runtime_1.jsxs)("button", { type: "button", onClick: refreshTables, disabled: isRefreshingTables, className: "inline-flex items-center gap-1 rounded-md border border-slate-200 bg-white px-2 py-1 text-xs font-medium text-slate-600 transition hover:bg-slate-50 disabled:cursor-not-allowed disabled:opacity-50", children: [isRefreshingTables ? ((0, jsx_runtime_1.jsx)(lucide_react_1.Loader2, { className: "h-3 w-3 animate-spin" })) : ((0, jsx_runtime_1.jsx)(lucide_react_1.RefreshCw, { className: "h-3 w-3" })), "Refresh"] })] }), (0, jsx_runtime_1.jsx)("nav", { className: "max-h-[calc(100vh-9rem)] overflow-auto px-2 py-3 text-sm", children: tables.length === 0 ? ((0, jsx_runtime_1.jsx)("p", { className: "rounded-md bg-slate-50 p-3 text-slate-500", children: "No tables detected." })) : ((0, jsx_runtime_1.jsx)("ul", { className: "space-y-1", children: tables.map(table => {
|
|
292
|
+
const isActive = selectedTable?.name === table.name;
|
|
293
|
+
return ((0, jsx_runtime_1.jsx)("li", { children: (0, jsx_runtime_1.jsxs)("button", { type: "button", onClick: () => handleSelectTable(table), className: [
|
|
294
|
+
"flex w-full items-center justify-between rounded-md px-3 py-2 text-left transition",
|
|
295
|
+
isActive
|
|
296
|
+
? "bg-slate-900 text-white shadow-sm"
|
|
297
|
+
: "bg-white text-slate-700 hover:bg-slate-100"
|
|
298
|
+
].join(" "), children: [(0, jsx_runtime_1.jsx)("span", { className: "truncate font-medium", children: table.name }), typeof table.row_count === "number" && ((0, jsx_runtime_1.jsx)("span", { className: [
|
|
299
|
+
"ml-2 inline-flex min-w-[2rem] items-center justify-center rounded-full px-2 text-xs",
|
|
300
|
+
isActive
|
|
301
|
+
? "bg-slate-800 text-slate-100"
|
|
302
|
+
: "bg-slate-100 text-slate-600"
|
|
303
|
+
].join(" "), children: table.row_count }))] }) }, table.name));
|
|
304
|
+
}) })) })] }), (0, jsx_runtime_1.jsxs)("section", { className: "flex-1 space-y-6", children: [(0, jsx_runtime_1.jsxs)("header", { className: "flex flex-col gap-3 rounded-lg border border-slate-200 bg-white p-4 shadow-sm", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex flex-wrap items-center justify-between gap-3", children: [(0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("h1", { className: "text-xl font-semibold text-slate-900", children: "SQLite Admin" }), (0, jsx_runtime_1.jsx)("p", { className: "text-sm text-slate-500", children: "Browse tables, inspect schema, and edit data safely." })] }), (0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-2", children: [(0, jsx_runtime_1.jsxs)("button", { type: "button", onClick: () => selectedTable && loadSchemaAndData(selectedTable.name), disabled: isLoadingSchema || isLoadingData, className: "inline-flex items-center gap-1 rounded-md border border-slate-200 bg-white px-3 py-2 text-sm font-medium text-slate-600 transition hover:bg-slate-100 disabled:cursor-not-allowed disabled:opacity-50", children: [isLoadingSchema || isLoadingData ? ((0, jsx_runtime_1.jsx)(lucide_react_1.Loader2, { className: "h-4 w-4 animate-spin" })) : ((0, jsx_runtime_1.jsx)(lucide_react_1.RefreshCw, { className: "h-4 w-4" })), "Refresh"] }), (0, jsx_runtime_1.jsxs)("button", { type: "button", onClick: () => setIsCreateOpen(true), disabled: !selectedTable || !schema, className: "inline-flex items-center gap-1 rounded-md bg-slate-900 px-3 py-2 text-sm font-medium text-white transition hover:bg-slate-800 disabled:cursor-not-allowed disabled:bg-slate-400", children: [(0, jsx_runtime_1.jsx)(lucide_react_1.Plus, { className: "h-4 w-4" }), "Add Row"] })] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "flex flex-wrap items-center gap-3 rounded-md bg-slate-50 p-3 text-sm text-slate-600", children: [(0, jsx_runtime_1.jsx)(lucide_react_1.Filter, { className: "h-4 w-4 text-slate-500" }), (0, jsx_runtime_1.jsx)("select", { className: "rounded-md border border-slate-200 bg-white px-2 py-1 text-sm", value: filterState.column ?? "", onChange: event => setFilterState(current => ({
|
|
305
|
+
...current,
|
|
306
|
+
column: event.target.value || undefined
|
|
307
|
+
})), children: filterColumns.length === 0 ? ((0, jsx_runtime_1.jsx)("option", { value: "", children: "No filterable columns" })) : (filterColumns.map(column => ((0, jsx_runtime_1.jsx)("option", { value: column.name, children: column.name }, column.name)))) }), (0, jsx_runtime_1.jsx)("select", { className: "rounded-md border border-slate-200 bg-white px-2 py-1 text-sm", value: filterState.operator, onChange: event => setFilterState(current => ({
|
|
308
|
+
...current,
|
|
309
|
+
operator: event.target.value
|
|
310
|
+
})), children: filterOperators.map(operator => ((0, jsx_runtime_1.jsx)("option", { value: operator.value, children: operator.label }, operator.value))) }), filterState.operator === "is" ? ((0, jsx_runtime_1.jsxs)("select", { className: "rounded-md border border-slate-200 bg-white px-2 py-1 text-sm", value: filterState.value, onChange: event => setFilterState(current => ({
|
|
311
|
+
...current,
|
|
312
|
+
value: event.target.value
|
|
313
|
+
})), children: [(0, jsx_runtime_1.jsx)("option", { value: "null", children: "NULL" }), (0, jsx_runtime_1.jsx)("option", { value: "not.null", children: "NOT NULL" })] })) : ((0, jsx_runtime_1.jsx)("input", { type: "text", className: "flex-1 rounded-md border border-slate-200 bg-white px-2 py-1 text-sm focus:border-slate-400 focus:outline-none", placeholder: "Filter value...", value: filterState.value, onChange: event => setFilterState(current => ({
|
|
314
|
+
...current,
|
|
315
|
+
value: event.target.value
|
|
316
|
+
})) })), (0, jsx_runtime_1.jsx)("button", { type: "button", onClick: handleApplyFilter, disabled: !selectedTable || !schema, className: "inline-flex items-center gap-1 rounded-md border border-slate-200 bg-white px-3 py-1.5 text-sm font-medium text-slate-600 transition hover:bg-slate-100 disabled:cursor-not-allowed disabled:opacity-50", children: "Apply" })] })] }), selectedTable ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)("section", { className: "rounded-lg border border-slate-200 bg-white shadow-sm", children: [(0, jsx_runtime_1.jsxs)("header", { className: "flex items-center justify-between border-b border-slate-100 px-4 py-3", children: [(0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("h2", { className: "text-base font-semibold text-slate-800", children: selectedTable.name }), (0, jsx_runtime_1.jsxs)("p", { className: "text-xs text-slate-500", children: [schema?.columns.length ?? 0, " columns"] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-2", children: [(0, jsx_runtime_1.jsxs)("label", { className: "flex items-center gap-1 text-xs text-slate-500", children: ["Rows per page", (0, jsx_runtime_1.jsx)("select", { value: limit, onChange: event => handleChangeLimit(Number.parseInt(event.target.value, 10)), className: "rounded-md border border-slate-200 bg-white px-2 py-1 text-xs shadow-sm", children: [10, 20, 50, 100].map(option => ((0, jsx_runtime_1.jsx)("option", { value: option, children: option }, option))) })] }), (0, jsx_runtime_1.jsxs)("div", { className: "inline-flex items-center gap-1 rounded-md border border-slate-200 bg-white px-2 py-1 text-xs text-slate-600 shadow-sm", children: [(0, jsx_runtime_1.jsxs)("button", { type: "button", onClick: () => handleChangeOrder(orderBy), className: "inline-flex items-center gap-1", disabled: !schema, children: ["Order:", " ", orderBy ? `${orderBy} - ${orderDirection}` : "not set"] }), schema && schema.columns.length > 0 && ((0, jsx_runtime_1.jsxs)("select", { value: orderBy ?? "", onChange: event => handleChangeOrder(event.target.value || undefined), className: "rounded border border-slate-200 bg-white px-1 py-0.5 text-xs", children: [(0, jsx_runtime_1.jsx)("option", { value: "", children: "None" }), schema.columns.map(column => ((0, jsx_runtime_1.jsx)("option", { value: column.name, children: column.name }, column.name)))] }))] })] })] }), (0, jsx_runtime_1.jsx)("div", { className: "overflow-auto", children: (0, jsx_runtime_1.jsxs)("table", { className: "min-w-full divide-y divide-slate-200 text-sm", children: [(0, jsx_runtime_1.jsx)("thead", { className: "bg-slate-50 text-xs uppercase tracking-wide text-slate-500", children: (0, jsx_runtime_1.jsxs)("tr", { children: [columns.map(column => ((0, jsx_runtime_1.jsx)("th", { className: "px-3 py-2 text-left", children: column.name }, column.name))), (0, jsx_runtime_1.jsx)("th", { className: "px-3 py-2 text-right text-slate-400", children: "Actions" })] }) }), (0, jsx_runtime_1.jsx)("tbody", { className: "divide-y divide-slate-100 bg-white text-sm text-slate-700", children: isLoadingData ? ((0, jsx_runtime_1.jsx)("tr", { children: (0, jsx_runtime_1.jsx)("td", { colSpan: columns.length + 1, className: "px-3 py-8 text-center", children: (0, jsx_runtime_1.jsxs)("div", { className: "inline-flex items-center gap-2 text-slate-500", children: [(0, jsx_runtime_1.jsx)(lucide_react_1.Loader2, { className: "h-4 w-4 animate-spin" }), "Loading data..."] }) }) })) : rows.length === 0 ? ((0, jsx_runtime_1.jsx)("tr", { children: (0, jsx_runtime_1.jsx)("td", { colSpan: columns.length + 1, className: "px-3 py-8 text-center text-slate-400", children: "No rows to display." }) })) : (rows.map((row, index) => ((0, jsx_runtime_1.jsxs)("tr", { className: "hover:bg-slate-50/60", children: [columns.map(column => ((0, jsx_runtime_1.jsx)("td", { className: "max-w-[200px] truncate px-3 py-2", children: formatCellValue(row[column.name]) }, column.name))), (0, jsx_runtime_1.jsx)("td", { className: "px-3 py-2 text-right", children: (0, jsx_runtime_1.jsxs)("div", { className: "inline-flex items-center gap-1", children: [(0, jsx_runtime_1.jsxs)("button", { type: "button", onClick: () => setEditingRow(row), className: "inline-flex items-center gap-1 rounded-md border border-slate-200 px-2 py-1 text-xs font-medium text-slate-600 transition hover:bg-slate-100", children: [(0, jsx_runtime_1.jsx)(lucide_react_1.Pencil, { className: "h-3 w-3" }), "Edit"] }), (0, jsx_runtime_1.jsxs)("button", { type: "button", onClick: () => handleDeleteRow(row), className: "inline-flex items-center gap-1 rounded-md border border-red-200 px-2 py-1 text-xs font-medium text-red-600 transition hover:bg-red-50", children: [(0, jsx_runtime_1.jsx)(lucide_react_1.Trash2, { className: "h-3 w-3" }), "Delete"] })] }) })] }, index)))) })] }) }), (0, jsx_runtime_1.jsxs)("footer", { className: "flex flex-wrap items-center justify-between gap-3 border-t border-slate-100 px-4 py-3 text-xs text-slate-500", children: [(0, jsx_runtime_1.jsxs)("span", { children: ["Page ", currentPage, " of ", totalPages, " - ", totalRows, " rows"] }), (0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-2", children: [(0, jsx_runtime_1.jsx)("button", { type: "button", onClick: () => handleChangePage(Math.max(0, offset - limit)), disabled: offset === 0 || isLoadingData, className: "inline-flex items-center gap-1 rounded-md border border-slate-200 bg-white px-2 py-1 text-xs font-medium text-slate-600 transition hover:bg-slate-100 disabled:cursor-not-allowed disabled:opacity-50", children: "Prev" }), (0, jsx_runtime_1.jsx)("button", { type: "button", onClick: () => handleChangePage(offset + limit), disabled: offset + limit >= totalRows || isLoadingData, className: "inline-flex items-center gap-1 rounded-md border border-slate-200 bg-white px-2 py-1 text-xs font-medium text-slate-600 transition hover:bg-slate-100 disabled:cursor-not-allowed disabled:opacity-50", children: "Next" })] })] })] }), (0, jsx_runtime_1.jsxs)("section", { className: "rounded-lg border border-slate-200 bg-white shadow-sm", children: [(0, jsx_runtime_1.jsx)("header", { className: "border-b border-slate-100 px-4 py-3", children: (0, jsx_runtime_1.jsx)("h3", { className: "text-sm font-semibold text-slate-700", children: "Schema" }) }), (0, jsx_runtime_1.jsx)("div", { className: "overflow-auto", children: (0, jsx_runtime_1.jsxs)("table", { className: "min-w-full divide-y divide-slate-200 text-sm", children: [(0, jsx_runtime_1.jsx)("thead", { className: "bg-slate-50 text-xs uppercase tracking-wide text-slate-500", children: (0, jsx_runtime_1.jsxs)("tr", { children: [(0, jsx_runtime_1.jsx)("th", { className: "px-3 py-2 text-left", children: "Column" }), (0, jsx_runtime_1.jsx)("th", { className: "px-3 py-2 text-left", children: "Type" }), (0, jsx_runtime_1.jsx)("th", { className: "px-3 py-2 text-left", children: "Not null" }), (0, jsx_runtime_1.jsx)("th", { className: "px-3 py-2 text-left", children: "Default" }), (0, jsx_runtime_1.jsx)("th", { className: "px-3 py-2 text-left", children: "Primary key" })] }) }), (0, jsx_runtime_1.jsx)("tbody", { className: "divide-y divide-slate-100 bg-white text-sm text-slate-700", children: columns.map(column => ((0, jsx_runtime_1.jsxs)("tr", { children: [(0, jsx_runtime_1.jsx)("td", { className: "px-3 py-2 font-medium", children: column.name }), (0, jsx_runtime_1.jsx)("td", { className: "px-3 py-2", children: column.type || "TEXT" }), (0, jsx_runtime_1.jsx)("td", { className: "px-3 py-2", children: column.notnull ? "Yes" : "No" }), (0, jsx_runtime_1.jsx)("td", { className: "px-3 py-2", children: column.default_value === null
|
|
317
|
+
? "NULL"
|
|
318
|
+
: String(column.default_value) }), (0, jsx_runtime_1.jsx)("td", { className: "px-3 py-2", children: column.primary_key_position
|
|
319
|
+
? `Yes (#${column.primary_key_position})`
|
|
320
|
+
: "No" })] }, column.name))) })] }) })] })] })) : ((0, jsx_runtime_1.jsx)("p", { className: "rounded-lg border border-dashed border-slate-300 bg-white p-6 text-center text-sm text-slate-500", children: "Select a table to begin." }))] })] }), schema && selectedTable && ((0, jsx_runtime_1.jsx)(RowModal, { title: `Insert into ${selectedTable.name}`, open: isCreateOpen, columns: schema.columns, onClose: () => setIsCreateOpen(false), onSubmit: handleInsertRow })), schema && selectedTable && editingRow && ((0, jsx_runtime_1.jsx)(RowModal, { title: `Edit row in ${selectedTable.name}`, open: Boolean(editingRow), columns: schema.columns, initialValues: editingRow, onClose: () => setEditingRow(null), onSubmit: data => handleUpdateRow(editingRow, data), primaryKeys: schema.columns.filter(column => column.primary_key_position > 0) }))] }));
|
|
321
|
+
}
|
|
322
|
+
// Internal modal component for row editing/creation
|
|
323
|
+
function RowModal({ title, open, columns, primaryKeys, initialValues, onClose, onSubmit }) {
|
|
324
|
+
const [formValues, setFormValues] = (0, react_1.useState)({});
|
|
325
|
+
(0, react_1.useEffect)(() => {
|
|
326
|
+
if (open) {
|
|
327
|
+
const nextValues = {};
|
|
328
|
+
columns.forEach(column => {
|
|
329
|
+
const rawValue = initialValues?.[column.name];
|
|
330
|
+
nextValues[column.name] =
|
|
331
|
+
rawValue === null || rawValue === undefined ? "" : String(rawValue);
|
|
332
|
+
});
|
|
333
|
+
setFormValues(nextValues);
|
|
334
|
+
}
|
|
335
|
+
}, [open, columns, initialValues]);
|
|
336
|
+
if (!open) {
|
|
337
|
+
return null;
|
|
338
|
+
}
|
|
339
|
+
function handleChange(column, value) {
|
|
340
|
+
setFormValues(current => ({
|
|
341
|
+
...current,
|
|
342
|
+
[column]: value
|
|
343
|
+
}));
|
|
344
|
+
}
|
|
345
|
+
function handleSubmit(event) {
|
|
346
|
+
event.preventDefault();
|
|
347
|
+
const payload = {};
|
|
348
|
+
for (const column of columns) {
|
|
349
|
+
const value = formValues[column.name];
|
|
350
|
+
payload[column.name] = coerceValue(column, value);
|
|
351
|
+
}
|
|
352
|
+
onSubmit(payload);
|
|
353
|
+
}
|
|
354
|
+
return ((0, jsx_runtime_1.jsx)("div", { className: "fixed inset-0 z-50 flex items-center justify-center bg-slate-900/30 backdrop-blur", children: (0, jsx_runtime_1.jsxs)("div", { className: "relative w-full max-w-2xl rounded-lg border border-slate-200 bg-white p-6 shadow-xl", children: [(0, jsx_runtime_1.jsxs)("header", { className: "mb-4 flex items-center justify-between", children: [(0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("h2", { className: "text-lg font-semibold text-slate-900", children: title }), primaryKeys && primaryKeys.length === 0 && ((0, jsx_runtime_1.jsx)("p", { className: "mt-1 text-xs text-amber-600", children: "Warning: table has no primary key defined. Updates/deletes rely on full row matching." }))] }), (0, jsx_runtime_1.jsx)("button", { type: "button", onClick: onClose, className: "rounded-full border border-slate-200 p-1 text-slate-500 transition hover:bg-slate-100", children: (0, jsx_runtime_1.jsx)(lucide_react_1.X, { className: "h-4 w-4" }) })] }), (0, jsx_runtime_1.jsxs)("form", { onSubmit: handleSubmit, className: "space-y-4", children: [(0, jsx_runtime_1.jsx)("div", { className: "grid max-h-[50vh] grid-cols-1 gap-4 overflow-auto pr-2 sm:grid-cols-2", children: columns.map(column => ((0, jsx_runtime_1.jsxs)("label", { className: "flex flex-col gap-1 text-sm", children: [(0, jsx_runtime_1.jsxs)("span", { className: "font-medium text-slate-700", children: [column.name, column.notnull && ((0, jsx_runtime_1.jsx)("sup", { className: "ml-1 text-amber-600", title: "Required", children: "*" }))] }), (0, jsx_runtime_1.jsx)("input", { type: "text", value: formValues[column.name] ?? "", onChange: event => handleChange(column.name, event.target.value), className: "rounded-md border border-slate-200 px-3 py-2 text-sm text-slate-700 shadow-sm focus:border-slate-400 focus:outline-none", placeholder: column.default_value === null
|
|
355
|
+
? column.type || "TEXT"
|
|
356
|
+
: String(column.default_value) }), (0, jsx_runtime_1.jsxs)("span", { className: "text-xs text-slate-400", children: [column.type || "TEXT", column.primary_key_position ? " - Primary key" : ""] })] }, column.name))) }), (0, jsx_runtime_1.jsxs)("footer", { className: "flex items-center justify-end gap-2", children: [(0, jsx_runtime_1.jsx)("button", { type: "button", onClick: onClose, className: "inline-flex items-center gap-1 rounded-md border border-slate-200 bg-white px-3 py-2 text-sm font-medium text-slate-600 transition hover:bg-slate-100", children: "Cancel" }), (0, jsx_runtime_1.jsxs)("button", { type: "submit", className: "inline-flex items-center gap-1 rounded-md bg-slate-900 px-3 py-2 text-sm font-medium text-white transition hover:bg-slate-800", children: [(0, jsx_runtime_1.jsx)(lucide_react_1.Save, { className: "h-4 w-4" }), "Save"] })] })] })] }) }));
|
|
357
|
+
}
|
|
358
|
+
// Helper functions
|
|
359
|
+
function buildCriteriaFromRow(row, columns) {
|
|
360
|
+
const criteria = {};
|
|
361
|
+
const primaryKeys = columns.filter(column => column.primary_key_position > 0);
|
|
362
|
+
if (primaryKeys.length) {
|
|
363
|
+
for (const primary of primaryKeys) {
|
|
364
|
+
criteria[primary.name] = row[primary.name];
|
|
365
|
+
}
|
|
366
|
+
return criteria;
|
|
367
|
+
}
|
|
368
|
+
for (const column of columns) {
|
|
369
|
+
criteria[column.name] = row[column.name];
|
|
370
|
+
}
|
|
371
|
+
return criteria;
|
|
372
|
+
}
|
|
373
|
+
function coerceValue(column, rawValue) {
|
|
374
|
+
if (rawValue === "") {
|
|
375
|
+
return column.notnull ? "" : null;
|
|
376
|
+
}
|
|
377
|
+
const normalisedType = (column.type ?? "").toLowerCase();
|
|
378
|
+
if (normalisedType.includes("int")) {
|
|
379
|
+
const parsed = Number.parseInt(rawValue, 10);
|
|
380
|
+
return Number.isNaN(parsed) ? rawValue : parsed;
|
|
381
|
+
}
|
|
382
|
+
if (normalisedType.includes("real") ||
|
|
383
|
+
normalisedType.includes("double") ||
|
|
384
|
+
normalisedType.includes("float") ||
|
|
385
|
+
normalisedType.includes("numeric")) {
|
|
386
|
+
const parsed = Number.parseFloat(rawValue);
|
|
387
|
+
return Number.isNaN(parsed) ? rawValue : parsed;
|
|
388
|
+
}
|
|
389
|
+
if (normalisedType.includes("bool")) {
|
|
390
|
+
return rawValue === "true" || rawValue === "1" ? 1 : 0;
|
|
391
|
+
}
|
|
392
|
+
return rawValue;
|
|
393
|
+
}
|
|
394
|
+
function formatCellValue(value) {
|
|
395
|
+
if (value === null || value === undefined) {
|
|
396
|
+
return "NULL";
|
|
397
|
+
}
|
|
398
|
+
if (typeof value === "object") {
|
|
399
|
+
try {
|
|
400
|
+
return JSON.stringify(value);
|
|
401
|
+
}
|
|
402
|
+
catch {
|
|
403
|
+
return String(value);
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
return String(value);
|
|
407
|
+
}
|
|
408
|
+
function identifierIsFilterable(name) {
|
|
409
|
+
return /^[A-Za-z_][A-Za-z0-9_]*$/.test(name);
|
|
410
|
+
}
|
|
411
|
+
//# sourceMappingURL=sqlite-admin-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite-admin-client.js","sourceRoot":"","sources":["../../../src/lib/ui/components/sqlite-admin-client.tsx"],"names":[],"mappings":"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"}
|
package/dist/ui/index.d.ts
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Purpose: UI-safe entry point for Hazo Connect
|
|
3
3
|
*
|
|
4
|
-
* This file exports
|
|
5
|
-
*
|
|
4
|
+
* This file exports types, interfaces, and React components that are safe to use
|
|
5
|
+
* in client components. Server-only functionality is NOT exported here.
|
|
6
6
|
*/
|
|
7
|
-
export type { SqliteTableType, TableSummary, TableSchema, TableColumn, TableForeignKey, RowPage, RowQueryOptions, SqliteWhereFilter, SqliteFilterOperator } from '../sqlite/admin-service';
|
|
8
|
-
export type { Logger, ConnectionType, HazoConnectConfig, HazoConnectAdapter, QueryOperator, WhereCondition, OrderDirection, JoinType, NestedSelect, HazoConnectError } from '../types';
|
|
9
|
-
export type { ErrorCode } from '../types';
|
|
7
|
+
export type { SqliteTableType, TableSummary, TableSchema, TableColumn, TableForeignKey, RowPage, RowQueryOptions, SqliteWhereFilter, SqliteFilterOperator } from '../sqlite/admin-service.js';
|
|
8
|
+
export type { Logger, ConnectionType, HazoConnectConfig, HazoConnectAdapter, QueryOperator, WhereCondition, OrderDirection, JoinType, NestedSelect, HazoConnectError } from '../types.js';
|
|
9
|
+
export type { ErrorCode } from '../types.js';
|
|
10
|
+
export { default as SqliteAdminClient } from './components/sqlite-admin-client.js';
|
|
11
|
+
export type { SqliteAdminClientProps } from './components/sqlite-admin-client.js';
|
|
10
12
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/ui/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/ui/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,YAAY,EACV,eAAe,EACf,YAAY,EACZ,WAAW,EACX,WAAW,EACX,eAAe,EACf,OAAO,EACP,eAAe,EACf,iBAAiB,EACjB,oBAAoB,EACrB,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/ui/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,YAAY,EACV,eAAe,EACf,YAAY,EACZ,WAAW,EACX,WAAW,EACX,eAAe,EACf,OAAO,EACP,eAAe,EACf,iBAAiB,EACjB,oBAAoB,EACrB,MAAM,4BAA4B,CAAA;AAGnC,YAAY,EACV,MAAM,EACN,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,cAAc,EACd,QAAQ,EACR,YAAY,EACZ,gBAAgB,EACjB,MAAM,aAAa,CAAA;AAEpB,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAG5C,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,qCAAqC,CAAA;AAClF,YAAY,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAA"}
|