db-mcp 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +860 -0
- package/dist/adapters/DatabaseAdapter.d.ts +141 -0
- package/dist/adapters/DatabaseAdapter.d.ts.map +1 -0
- package/dist/adapters/DatabaseAdapter.js +131 -0
- package/dist/adapters/DatabaseAdapter.js.map +1 -0
- package/dist/adapters/sqlite/SchemaManager.d.ts +58 -0
- package/dist/adapters/sqlite/SchemaManager.d.ts.map +1 -0
- package/dist/adapters/sqlite/SchemaManager.js +187 -0
- package/dist/adapters/sqlite/SchemaManager.js.map +1 -0
- package/dist/adapters/sqlite/SqliteAdapter.d.ts +161 -0
- package/dist/adapters/sqlite/SqliteAdapter.d.ts.map +1 -0
- package/dist/adapters/sqlite/SqliteAdapter.js +741 -0
- package/dist/adapters/sqlite/SqliteAdapter.js.map +1 -0
- package/dist/adapters/sqlite/index.d.ts +9 -0
- package/dist/adapters/sqlite/index.d.ts.map +1 -0
- package/dist/adapters/sqlite/index.js +8 -0
- package/dist/adapters/sqlite/index.js.map +1 -0
- package/dist/adapters/sqlite/json-utils.d.ts +100 -0
- package/dist/adapters/sqlite/json-utils.d.ts.map +1 -0
- package/dist/adapters/sqlite/json-utils.js +274 -0
- package/dist/adapters/sqlite/json-utils.js.map +1 -0
- package/dist/adapters/sqlite/output-schemas.d.ts +1187 -0
- package/dist/adapters/sqlite/output-schemas.d.ts.map +1 -0
- package/dist/adapters/sqlite/output-schemas.js +1337 -0
- package/dist/adapters/sqlite/output-schemas.js.map +1 -0
- package/dist/adapters/sqlite/prompts.d.ts +13 -0
- package/dist/adapters/sqlite/prompts.d.ts.map +1 -0
- package/dist/adapters/sqlite/prompts.js +605 -0
- package/dist/adapters/sqlite/prompts.js.map +1 -0
- package/dist/adapters/sqlite/resources.d.ts +13 -0
- package/dist/adapters/sqlite/resources.d.ts.map +1 -0
- package/dist/adapters/sqlite/resources.js +251 -0
- package/dist/adapters/sqlite/resources.js.map +1 -0
- package/dist/adapters/sqlite/tools/admin.d.ts +14 -0
- package/dist/adapters/sqlite/tools/admin.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/admin.js +788 -0
- package/dist/adapters/sqlite/tools/admin.js.map +1 -0
- package/dist/adapters/sqlite/tools/core.d.ts +25 -0
- package/dist/adapters/sqlite/tools/core.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/core.js +359 -0
- package/dist/adapters/sqlite/tools/core.js.map +1 -0
- package/dist/adapters/sqlite/tools/fts.d.ts +13 -0
- package/dist/adapters/sqlite/tools/fts.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/fts.js +347 -0
- package/dist/adapters/sqlite/tools/fts.js.map +1 -0
- package/dist/adapters/sqlite/tools/geo.d.ts +14 -0
- package/dist/adapters/sqlite/tools/geo.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/geo.js +252 -0
- package/dist/adapters/sqlite/tools/geo.js.map +1 -0
- package/dist/adapters/sqlite/tools/index.d.ts +30 -0
- package/dist/adapters/sqlite/tools/index.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/index.js +61 -0
- package/dist/adapters/sqlite/tools/index.js.map +1 -0
- package/dist/adapters/sqlite/tools/json-helpers.d.ts +14 -0
- package/dist/adapters/sqlite/tools/json-helpers.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/json-helpers.js +477 -0
- package/dist/adapters/sqlite/tools/json-helpers.js.map +1 -0
- package/dist/adapters/sqlite/tools/json-operations.d.ts +14 -0
- package/dist/adapters/sqlite/tools/json-operations.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/json-operations.js +839 -0
- package/dist/adapters/sqlite/tools/json-operations.js.map +1 -0
- package/dist/adapters/sqlite/tools/stats.d.ts +15 -0
- package/dist/adapters/sqlite/tools/stats.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/stats.js +1219 -0
- package/dist/adapters/sqlite/tools/stats.js.map +1 -0
- package/dist/adapters/sqlite/tools/text.d.ts +14 -0
- package/dist/adapters/sqlite/tools/text.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/text.js +1141 -0
- package/dist/adapters/sqlite/tools/text.js.map +1 -0
- package/dist/adapters/sqlite/tools/vector.d.ts +14 -0
- package/dist/adapters/sqlite/tools/vector.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/vector.js +613 -0
- package/dist/adapters/sqlite/tools/vector.js.map +1 -0
- package/dist/adapters/sqlite/tools/virtual.d.ts +13 -0
- package/dist/adapters/sqlite/tools/virtual.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/virtual.js +930 -0
- package/dist/adapters/sqlite/tools/virtual.js.map +1 -0
- package/dist/adapters/sqlite/types.d.ts +207 -0
- package/dist/adapters/sqlite/types.d.ts.map +1 -0
- package/dist/adapters/sqlite/types.js +186 -0
- package/dist/adapters/sqlite/types.js.map +1 -0
- package/dist/adapters/sqlite-native/NativeSqliteAdapter.d.ts +163 -0
- package/dist/adapters/sqlite-native/NativeSqliteAdapter.d.ts.map +1 -0
- package/dist/adapters/sqlite-native/NativeSqliteAdapter.js +748 -0
- package/dist/adapters/sqlite-native/NativeSqliteAdapter.js.map +1 -0
- package/dist/adapters/sqlite-native/index.d.ts +11 -0
- package/dist/adapters/sqlite-native/index.d.ts.map +1 -0
- package/dist/adapters/sqlite-native/index.js +11 -0
- package/dist/adapters/sqlite-native/index.js.map +1 -0
- package/dist/adapters/sqlite-native/tools/spatialite.d.ts +19 -0
- package/dist/adapters/sqlite-native/tools/spatialite.d.ts.map +1 -0
- package/dist/adapters/sqlite-native/tools/spatialite.js +628 -0
- package/dist/adapters/sqlite-native/tools/spatialite.js.map +1 -0
- package/dist/adapters/sqlite-native/tools/transactions.d.ts +12 -0
- package/dist/adapters/sqlite-native/tools/transactions.d.ts.map +1 -0
- package/dist/adapters/sqlite-native/tools/transactions.js +255 -0
- package/dist/adapters/sqlite-native/tools/transactions.js.map +1 -0
- package/dist/adapters/sqlite-native/tools/window.d.ts +12 -0
- package/dist/adapters/sqlite-native/tools/window.d.ts.map +1 -0
- package/dist/adapters/sqlite-native/tools/window.js +370 -0
- package/dist/adapters/sqlite-native/tools/window.js.map +1 -0
- package/dist/auth/AuthorizationServerDiscovery.d.ts +90 -0
- package/dist/auth/AuthorizationServerDiscovery.d.ts.map +1 -0
- package/dist/auth/AuthorizationServerDiscovery.js +204 -0
- package/dist/auth/AuthorizationServerDiscovery.js.map +1 -0
- package/dist/auth/OAuthResourceServer.d.ts +65 -0
- package/dist/auth/OAuthResourceServer.d.ts.map +1 -0
- package/dist/auth/OAuthResourceServer.js +121 -0
- package/dist/auth/OAuthResourceServer.js.map +1 -0
- package/dist/auth/TokenValidator.d.ts +60 -0
- package/dist/auth/TokenValidator.d.ts.map +1 -0
- package/dist/auth/TokenValidator.js +235 -0
- package/dist/auth/TokenValidator.js.map +1 -0
- package/dist/auth/errors.d.ts +74 -0
- package/dist/auth/errors.d.ts.map +1 -0
- package/dist/auth/errors.js +133 -0
- package/dist/auth/errors.js.map +1 -0
- package/dist/auth/index.d.ts +13 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +15 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/middleware.d.ts +81 -0
- package/dist/auth/middleware.d.ts.map +1 -0
- package/dist/auth/middleware.js +291 -0
- package/dist/auth/middleware.js.map +1 -0
- package/dist/auth/scopes.d.ts +136 -0
- package/dist/auth/scopes.d.ts.map +1 -0
- package/dist/auth/scopes.js +349 -0
- package/dist/auth/scopes.js.map +1 -0
- package/dist/auth/types.d.ts +257 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +8 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/cli.d.ts +8 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +236 -0
- package/dist/cli.js.map +1 -0
- package/dist/constants/ServerInstructions.d.ts +45 -0
- package/dist/constants/ServerInstructions.d.ts.map +1 -0
- package/dist/constants/ServerInstructions.js +356 -0
- package/dist/constants/ServerInstructions.js.map +1 -0
- package/dist/filtering/ToolConstants.d.ts +34 -0
- package/dist/filtering/ToolConstants.d.ts.map +1 -0
- package/dist/filtering/ToolConstants.js +174 -0
- package/dist/filtering/ToolConstants.js.map +1 -0
- package/dist/filtering/ToolFilter.d.ts +82 -0
- package/dist/filtering/ToolFilter.d.ts.map +1 -0
- package/dist/filtering/ToolFilter.js +296 -0
- package/dist/filtering/ToolFilter.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/server/McpServer.d.ts +61 -0
- package/dist/server/McpServer.d.ts.map +1 -0
- package/dist/server/McpServer.js +270 -0
- package/dist/server/McpServer.js.map +1 -0
- package/dist/transports/http.d.ts +134 -0
- package/dist/transports/http.d.ts.map +1 -0
- package/dist/transports/http.js +516 -0
- package/dist/transports/http.js.map +1 -0
- package/dist/transports/index.d.ts +5 -0
- package/dist/transports/index.d.ts.map +1 -0
- package/dist/transports/index.js +5 -0
- package/dist/transports/index.js.map +1 -0
- package/dist/types/index.d.ts +380 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +68 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/annotations.d.ts +44 -0
- package/dist/utils/annotations.d.ts.map +1 -0
- package/dist/utils/annotations.js +77 -0
- package/dist/utils/annotations.js.map +1 -0
- package/dist/utils/errors.d.ts +155 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +329 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/identifiers.d.ts +121 -0
- package/dist/utils/identifiers.d.ts.map +1 -0
- package/dist/utils/identifiers.js +319 -0
- package/dist/utils/identifiers.js.map +1 -0
- package/dist/utils/index.d.ts +7 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +7 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/insightsManager.d.ts +39 -0
- package/dist/utils/insightsManager.d.ts.map +1 -0
- package/dist/utils/insightsManager.js +63 -0
- package/dist/utils/insightsManager.js.map +1 -0
- package/dist/utils/logger.d.ts +189 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +394 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/progress-utils.d.ts +54 -0
- package/dist/utils/progress-utils.d.ts.map +1 -0
- package/dist/utils/progress-utils.js +74 -0
- package/dist/utils/progress-utils.js.map +1 -0
- package/dist/utils/resourceAnnotations.d.ts +36 -0
- package/dist/utils/resourceAnnotations.d.ts.map +1 -0
- package/dist/utils/resourceAnnotations.js +57 -0
- package/dist/utils/resourceAnnotations.js.map +1 -0
- package/dist/utils/where-clause.d.ts +41 -0
- package/dist/utils/where-clause.d.ts.map +1 -0
- package/dist/utils/where-clause.js +116 -0
- package/dist/utils/where-clause.js.map +1 -0
- package/package.json +83 -0
- package/server.json +53 -0
|
@@ -0,0 +1,628 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SpatiaLite Geospatial Tools for Native SQLite Adapter
|
|
3
|
+
*
|
|
4
|
+
* Provides true GIS capabilities via SpatiaLite extension.
|
|
5
|
+
* These tools gracefully fail if SpatiaLite is not installed.
|
|
6
|
+
* 7 tools total (Native-only).
|
|
7
|
+
*/
|
|
8
|
+
import { z } from "zod";
|
|
9
|
+
// SpatiaLite extension paths to try (platform-aware)
|
|
10
|
+
const SPATIALITE_PATHS = [
|
|
11
|
+
process.env["SPATIALITE_PATH"],
|
|
12
|
+
"mod_spatialite",
|
|
13
|
+
"mod_spatialite.dll",
|
|
14
|
+
"mod_spatialite.so",
|
|
15
|
+
"/usr/lib/x86_64-linux-gnu/mod_spatialite.so",
|
|
16
|
+
"/usr/local/lib/mod_spatialite.so",
|
|
17
|
+
"/usr/local/lib/mod_spatialite.dylib",
|
|
18
|
+
].filter((p) => Boolean(p));
|
|
19
|
+
// Track loaded state per database
|
|
20
|
+
const loadedDatabases = new WeakSet();
|
|
21
|
+
// Schemas
|
|
22
|
+
const LoadSpatialiteSchema = z.object({
|
|
23
|
+
extensionPath: z
|
|
24
|
+
.string()
|
|
25
|
+
.optional()
|
|
26
|
+
.describe("Custom path to mod_spatialite extension"),
|
|
27
|
+
forceReload: z
|
|
28
|
+
.boolean()
|
|
29
|
+
.optional()
|
|
30
|
+
.default(false)
|
|
31
|
+
.describe("Force reload if already loaded"),
|
|
32
|
+
});
|
|
33
|
+
const CreateSpatialTableSchema = z.object({
|
|
34
|
+
tableName: z.string().describe("Name of the spatial table to create"),
|
|
35
|
+
geometryColumn: z
|
|
36
|
+
.string()
|
|
37
|
+
.optional()
|
|
38
|
+
.default("geom")
|
|
39
|
+
.describe("Name of the geometry column"),
|
|
40
|
+
geometryType: z
|
|
41
|
+
.enum([
|
|
42
|
+
"POINT",
|
|
43
|
+
"LINESTRING",
|
|
44
|
+
"POLYGON",
|
|
45
|
+
"MULTIPOINT",
|
|
46
|
+
"MULTILINESTRING",
|
|
47
|
+
"MULTIPOLYGON",
|
|
48
|
+
"GEOMETRY",
|
|
49
|
+
])
|
|
50
|
+
.optional()
|
|
51
|
+
.default("POINT")
|
|
52
|
+
.describe("Type of geometry to store"),
|
|
53
|
+
srid: z
|
|
54
|
+
.number()
|
|
55
|
+
.optional()
|
|
56
|
+
.default(4326)
|
|
57
|
+
.describe("Spatial Reference System ID (4326 for WGS84)"),
|
|
58
|
+
additionalColumns: z
|
|
59
|
+
.array(z.object({
|
|
60
|
+
name: z.string(),
|
|
61
|
+
type: z.string(),
|
|
62
|
+
}))
|
|
63
|
+
.optional()
|
|
64
|
+
.default([])
|
|
65
|
+
.describe("Additional non-spatial columns"),
|
|
66
|
+
});
|
|
67
|
+
const SpatialQuerySchema = z.object({
|
|
68
|
+
query: z.string().describe("Spatial SQL query using SpatiaLite functions"),
|
|
69
|
+
params: z
|
|
70
|
+
.array(z.unknown())
|
|
71
|
+
.optional()
|
|
72
|
+
.default([])
|
|
73
|
+
.describe("Query parameters"),
|
|
74
|
+
});
|
|
75
|
+
const SpatialAnalysisSchema = z.object({
|
|
76
|
+
analysisType: z
|
|
77
|
+
.enum([
|
|
78
|
+
"nearest_neighbor",
|
|
79
|
+
"point_in_polygon",
|
|
80
|
+
"distance_matrix",
|
|
81
|
+
"spatial_extent",
|
|
82
|
+
])
|
|
83
|
+
.describe("Type of spatial analysis"),
|
|
84
|
+
sourceTable: z.string().describe("Source table for analysis"),
|
|
85
|
+
targetTable: z
|
|
86
|
+
.string()
|
|
87
|
+
.optional()
|
|
88
|
+
.describe("Target table for operations. For point_in_polygon, this should contain POLYGON geometries while sourceTable contains POINTs"),
|
|
89
|
+
geometryColumn: z
|
|
90
|
+
.string()
|
|
91
|
+
.optional()
|
|
92
|
+
.default("geom")
|
|
93
|
+
.describe("Geometry column name"),
|
|
94
|
+
limit: z.number().optional().default(100).describe("Limit results"),
|
|
95
|
+
excludeSelf: z
|
|
96
|
+
.boolean()
|
|
97
|
+
.optional()
|
|
98
|
+
.default(true)
|
|
99
|
+
.describe("For nearest_neighbor: exclude self-matches when source and target tables are the same (default: true)"),
|
|
100
|
+
includeGeometry: z
|
|
101
|
+
.boolean()
|
|
102
|
+
.optional()
|
|
103
|
+
.default(false)
|
|
104
|
+
.describe("Include full WKT geometry in results (default: false to reduce payload size)"),
|
|
105
|
+
});
|
|
106
|
+
const SpatialIndexSchema = z.object({
|
|
107
|
+
tableName: z.string().describe("Name of the spatial table"),
|
|
108
|
+
geometryColumn: z
|
|
109
|
+
.string()
|
|
110
|
+
.optional()
|
|
111
|
+
.default("geom")
|
|
112
|
+
.describe("Geometry column name"),
|
|
113
|
+
action: z
|
|
114
|
+
.enum(["create", "drop", "check"])
|
|
115
|
+
.optional()
|
|
116
|
+
.default("create")
|
|
117
|
+
.describe("Action to perform"),
|
|
118
|
+
});
|
|
119
|
+
const GeometryTransformSchema = z.object({
|
|
120
|
+
operation: z
|
|
121
|
+
.enum([
|
|
122
|
+
"buffer",
|
|
123
|
+
"intersection",
|
|
124
|
+
"union",
|
|
125
|
+
"difference",
|
|
126
|
+
"centroid",
|
|
127
|
+
"envelope",
|
|
128
|
+
"simplify",
|
|
129
|
+
])
|
|
130
|
+
.describe("Geometry operation to perform"),
|
|
131
|
+
geometry1: z.string().describe("First geometry (WKT format)"),
|
|
132
|
+
geometry2: z.string().optional().describe("Second geometry for binary ops"),
|
|
133
|
+
distance: z
|
|
134
|
+
.number()
|
|
135
|
+
.optional()
|
|
136
|
+
.default(0.001)
|
|
137
|
+
.describe("Distance for buffer or simplify tolerance"),
|
|
138
|
+
srid: z.number().optional().default(4326).describe("SRID for result"),
|
|
139
|
+
simplifyTolerance: z
|
|
140
|
+
.number()
|
|
141
|
+
.optional()
|
|
142
|
+
.describe("For buffer operation: apply ST_Simplify to reduce vertices in output polygon. Recommended: 0.0001-0.001 for lat/lon"),
|
|
143
|
+
});
|
|
144
|
+
const SpatialImportSchema = z.object({
|
|
145
|
+
tableName: z.string().describe("Target table name"),
|
|
146
|
+
format: z.enum(["wkt", "geojson"]).describe("Input format"),
|
|
147
|
+
data: z.string().describe("Geometry data (WKT string or GeoJSON)"),
|
|
148
|
+
srid: z.number().optional().default(4326).describe("SRID of input data"),
|
|
149
|
+
additionalData: z
|
|
150
|
+
.record(z.string(), z.unknown())
|
|
151
|
+
.optional()
|
|
152
|
+
.describe("Additional column values"),
|
|
153
|
+
});
|
|
154
|
+
/**
|
|
155
|
+
* Get all SpatiaLite tools
|
|
156
|
+
*/
|
|
157
|
+
export function getSpatialiteTools(adapter) {
|
|
158
|
+
return [
|
|
159
|
+
createLoadSpatialiteTool(adapter),
|
|
160
|
+
createSpatialTableTool(adapter),
|
|
161
|
+
createSpatialQueryTool(adapter),
|
|
162
|
+
createSpatialAnalysisTool(adapter),
|
|
163
|
+
createSpatialIndexTool(adapter),
|
|
164
|
+
createGeometryTransformTool(adapter),
|
|
165
|
+
createSpatialImportTool(adapter),
|
|
166
|
+
];
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Try to load SpatiaLite extension
|
|
170
|
+
*/
|
|
171
|
+
function tryLoadSpatialite(adapter, customPath) {
|
|
172
|
+
const db = adapter.getDatabase();
|
|
173
|
+
if (db === null) {
|
|
174
|
+
return { success: false, error: "Database not connected" };
|
|
175
|
+
}
|
|
176
|
+
const paths = customPath
|
|
177
|
+
? [customPath, ...SPATIALITE_PATHS]
|
|
178
|
+
: SPATIALITE_PATHS;
|
|
179
|
+
// On Windows, SpatiaLite DLL has many dependencies (libgeos, libproj, etc.)
|
|
180
|
+
// These must be in PATH for Windows to find them when loading the extension.
|
|
181
|
+
// Prepend the extension directory to PATH before attempting to load.
|
|
182
|
+
const envPath = process.env["SPATIALITE_PATH"];
|
|
183
|
+
if (envPath && process.platform === "win32") {
|
|
184
|
+
const extensionDir = envPath.replace(/[/\\][^/\\]+$/, ""); // Get directory from DLL path
|
|
185
|
+
const currentPath = process.env["PATH"] ?? "";
|
|
186
|
+
if (!currentPath.includes(extensionDir)) {
|
|
187
|
+
process.env["PATH"] = extensionDir + ";" + currentPath;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
for (const path of paths) {
|
|
191
|
+
try {
|
|
192
|
+
db.loadExtension(path);
|
|
193
|
+
// Initialize spatial metadata
|
|
194
|
+
db.exec("SELECT InitSpatialMetaData(1)");
|
|
195
|
+
loadedDatabases.add(db);
|
|
196
|
+
return { success: true, path };
|
|
197
|
+
}
|
|
198
|
+
catch {
|
|
199
|
+
// Try next path
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
return {
|
|
203
|
+
success: false,
|
|
204
|
+
error: "SpatiaLite extension not found. Install mod_spatialite and set SPATIALITE_PATH environment variable.",
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Check if SpatiaLite is loaded
|
|
209
|
+
* Exported for health check access
|
|
210
|
+
*/
|
|
211
|
+
export function isSpatialiteLoaded(adapter) {
|
|
212
|
+
const db = adapter.getDatabase();
|
|
213
|
+
if (db === null)
|
|
214
|
+
return false;
|
|
215
|
+
if (loadedDatabases.has(db))
|
|
216
|
+
return true;
|
|
217
|
+
try {
|
|
218
|
+
db.exec("SELECT spatialite_version()");
|
|
219
|
+
// Extension is loaded but not tracked - ensure metadata tables exist
|
|
220
|
+
// InitSpatialMetaData(1) safely skips if already initialized
|
|
221
|
+
db.exec("SELECT InitSpatialMetaData(1)");
|
|
222
|
+
loadedDatabases.add(db);
|
|
223
|
+
return true;
|
|
224
|
+
}
|
|
225
|
+
catch {
|
|
226
|
+
return false;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Ensure SpatiaLite is loaded, throw if not
|
|
231
|
+
*/
|
|
232
|
+
function ensureSpatialite(adapter) {
|
|
233
|
+
if (!isSpatialiteLoaded(adapter)) {
|
|
234
|
+
const result = tryLoadSpatialite(adapter);
|
|
235
|
+
if (!result.success) {
|
|
236
|
+
throw new Error(result.error ?? "Failed to load SpatiaLite");
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Load SpatiaLite extension
|
|
242
|
+
*/
|
|
243
|
+
function createLoadSpatialiteTool(adapter) {
|
|
244
|
+
return {
|
|
245
|
+
name: "sqlite_spatialite_load",
|
|
246
|
+
description: "Load SpatiaLite extension for geospatial capabilities. Required before using other spatial tools.",
|
|
247
|
+
group: "geo",
|
|
248
|
+
inputSchema: LoadSpatialiteSchema,
|
|
249
|
+
requiredScopes: ["admin"],
|
|
250
|
+
handler: (_params, _context) => {
|
|
251
|
+
const input = LoadSpatialiteSchema.parse(_params);
|
|
252
|
+
if (!input.forceReload && isSpatialiteLoaded(adapter)) {
|
|
253
|
+
return Promise.resolve({
|
|
254
|
+
success: true,
|
|
255
|
+
message: "SpatiaLite already loaded",
|
|
256
|
+
alreadyLoaded: true,
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
const result = tryLoadSpatialite(adapter, input.extensionPath);
|
|
260
|
+
if (result.success) {
|
|
261
|
+
return Promise.resolve({
|
|
262
|
+
success: true,
|
|
263
|
+
message: "SpatiaLite loaded successfully",
|
|
264
|
+
extensionPath: result.path,
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
return Promise.resolve({
|
|
268
|
+
success: false,
|
|
269
|
+
message: result.error,
|
|
270
|
+
searchedPaths: SPATIALITE_PATHS,
|
|
271
|
+
});
|
|
272
|
+
},
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Create spatial table
|
|
277
|
+
*/
|
|
278
|
+
function createSpatialTableTool(adapter) {
|
|
279
|
+
return {
|
|
280
|
+
name: "sqlite_spatialite_create_table",
|
|
281
|
+
description: "Create a spatial table with geometry column using SpatiaLite.",
|
|
282
|
+
group: "geo",
|
|
283
|
+
inputSchema: CreateSpatialTableSchema,
|
|
284
|
+
requiredScopes: ["write"],
|
|
285
|
+
handler: async (params, _context) => {
|
|
286
|
+
const input = CreateSpatialTableSchema.parse(params);
|
|
287
|
+
ensureSpatialite(adapter);
|
|
288
|
+
// Validate table name
|
|
289
|
+
if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(input.tableName)) {
|
|
290
|
+
throw new Error("Invalid table name");
|
|
291
|
+
}
|
|
292
|
+
// Build column definitions
|
|
293
|
+
const columns = ["id INTEGER PRIMARY KEY AUTOINCREMENT"];
|
|
294
|
+
for (const col of input.additionalColumns) {
|
|
295
|
+
if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(col.name)) {
|
|
296
|
+
throw new Error(`Invalid column name: ${col.name}`);
|
|
297
|
+
}
|
|
298
|
+
columns.push(`"${col.name}" ${col.type}`);
|
|
299
|
+
}
|
|
300
|
+
// Create base table
|
|
301
|
+
await adapter.executeWriteQuery(`CREATE TABLE IF NOT EXISTS "${input.tableName}" (${columns.join(", ")})`);
|
|
302
|
+
// Add geometry column using SpatiaLite
|
|
303
|
+
// NOTE: AddGeometryColumn is a SELECT function, must use executeReadQuery
|
|
304
|
+
const addResult = await adapter.executeReadQuery(`SELECT AddGeometryColumn('${input.tableName}', '${input.geometryColumn}', ${input.srid}, '${input.geometryType}', 'XY')`);
|
|
305
|
+
// Verify the geometry column was created
|
|
306
|
+
const verifyResult = await adapter.executeReadQuery(`SELECT name FROM pragma_table_info('${input.tableName}') WHERE name = '${input.geometryColumn}'`);
|
|
307
|
+
if (!verifyResult.rows || verifyResult.rows.length === 0) {
|
|
308
|
+
throw new Error(`Failed to create geometry column '${input.geometryColumn}'. AddGeometryColumn returned: ${JSON.stringify(addResult.rows)}`);
|
|
309
|
+
}
|
|
310
|
+
return {
|
|
311
|
+
success: true,
|
|
312
|
+
message: `Spatial table '${input.tableName}' created`,
|
|
313
|
+
tableName: input.tableName,
|
|
314
|
+
geometryColumn: input.geometryColumn,
|
|
315
|
+
geometryType: input.geometryType,
|
|
316
|
+
srid: input.srid,
|
|
317
|
+
};
|
|
318
|
+
},
|
|
319
|
+
};
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Execute spatial query
|
|
323
|
+
*/
|
|
324
|
+
function createSpatialQueryTool(adapter) {
|
|
325
|
+
return {
|
|
326
|
+
name: "sqlite_spatialite_query",
|
|
327
|
+
description: "Execute spatial SQL queries using SpatiaLite functions (ST_Distance, ST_Within, etc.).",
|
|
328
|
+
group: "geo",
|
|
329
|
+
inputSchema: SpatialQuerySchema,
|
|
330
|
+
requiredScopes: ["read"],
|
|
331
|
+
handler: async (params, _context) => {
|
|
332
|
+
const input = SpatialQuerySchema.parse(params);
|
|
333
|
+
ensureSpatialite(adapter);
|
|
334
|
+
const result = await adapter.executeReadQuery(input.query);
|
|
335
|
+
return {
|
|
336
|
+
success: true,
|
|
337
|
+
rowCount: result.rows?.length ?? 0,
|
|
338
|
+
rows: result.rows,
|
|
339
|
+
};
|
|
340
|
+
},
|
|
341
|
+
};
|
|
342
|
+
}
|
|
343
|
+
/**
|
|
344
|
+
* Spatial analysis
|
|
345
|
+
*/
|
|
346
|
+
function createSpatialAnalysisTool(adapter) {
|
|
347
|
+
return {
|
|
348
|
+
name: "sqlite_spatialite_analyze",
|
|
349
|
+
description: "Perform spatial analysis: nearest neighbor, point in polygon, distance matrix. For point_in_polygon, sourceTable should contain POINTs and targetTable should contain POLYGONs.",
|
|
350
|
+
group: "geo",
|
|
351
|
+
inputSchema: SpatialAnalysisSchema,
|
|
352
|
+
requiredScopes: ["read"],
|
|
353
|
+
handler: async (params, _context) => {
|
|
354
|
+
const input = SpatialAnalysisSchema.parse(params);
|
|
355
|
+
ensureSpatialite(adapter);
|
|
356
|
+
// Validate names
|
|
357
|
+
if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(input.sourceTable)) {
|
|
358
|
+
throw new Error("Invalid source table name");
|
|
359
|
+
}
|
|
360
|
+
if (input.targetTable &&
|
|
361
|
+
!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(input.targetTable)) {
|
|
362
|
+
throw new Error("Invalid target table name");
|
|
363
|
+
}
|
|
364
|
+
let query;
|
|
365
|
+
switch (input.analysisType) {
|
|
366
|
+
case "spatial_extent":
|
|
367
|
+
query = `SELECT
|
|
368
|
+
MbrMinX(Extent("${input.geometryColumn}")) as min_x,
|
|
369
|
+
MbrMinY(Extent("${input.geometryColumn}")) as min_y,
|
|
370
|
+
MbrMaxX(Extent("${input.geometryColumn}")) as max_x,
|
|
371
|
+
MbrMaxY(Extent("${input.geometryColumn}")) as max_y,
|
|
372
|
+
COUNT(*) as feature_count
|
|
373
|
+
FROM "${input.sourceTable}"`;
|
|
374
|
+
break;
|
|
375
|
+
case "nearest_neighbor": {
|
|
376
|
+
if (!input.targetTable) {
|
|
377
|
+
throw new Error("Missing required parameter 'targetTable' for nearest neighbor analysis");
|
|
378
|
+
}
|
|
379
|
+
// Exclude self-matches when tables are the same and excludeSelf is true
|
|
380
|
+
const sameTable = input.sourceTable === input.targetTable;
|
|
381
|
+
const selfFilter = sameTable && input.excludeSelf ? "WHERE s.id != t.id" : "";
|
|
382
|
+
// Conditionally include WKT geometry based on includeGeometry param
|
|
383
|
+
const geomColumns = input.includeGeometry
|
|
384
|
+
? `, AsText(s."${input.geometryColumn}") as source_geom, AsText(t."${input.geometryColumn}") as target_geom`
|
|
385
|
+
: "";
|
|
386
|
+
query = `SELECT
|
|
387
|
+
s.id as source_id, t.id as target_id,
|
|
388
|
+
ST_Distance(s."${input.geometryColumn}", t."${input.geometryColumn}") as distance${geomColumns}
|
|
389
|
+
FROM "${input.sourceTable}" s, "${input.targetTable}" t
|
|
390
|
+
${selfFilter}
|
|
391
|
+
ORDER BY distance LIMIT ${input.limit}`;
|
|
392
|
+
break;
|
|
393
|
+
}
|
|
394
|
+
case "point_in_polygon": {
|
|
395
|
+
if (!input.targetTable) {
|
|
396
|
+
throw new Error("Missing required parameter 'targetTable' for point in polygon analysis");
|
|
397
|
+
}
|
|
398
|
+
// Conditionally include WKT geometry based on includeGeometry param
|
|
399
|
+
const geomCols = input.includeGeometry
|
|
400
|
+
? `, AsText(s."${input.geometryColumn}") as source_geom, AsText(t."${input.geometryColumn}") as target_geom`
|
|
401
|
+
: "";
|
|
402
|
+
query = `SELECT
|
|
403
|
+
s.id as source_id, t.id as target_id${geomCols}
|
|
404
|
+
FROM "${input.sourceTable}" s, "${input.targetTable}" t
|
|
405
|
+
WHERE ST_Within(s."${input.geometryColumn}", t."${input.geometryColumn}")
|
|
406
|
+
LIMIT ${input.limit}`;
|
|
407
|
+
break;
|
|
408
|
+
}
|
|
409
|
+
case "distance_matrix":
|
|
410
|
+
query = `SELECT a.id as id1, b.id as id2,
|
|
411
|
+
ST_Distance(a."${input.geometryColumn}", b."${input.geometryColumn}") as distance
|
|
412
|
+
FROM "${input.sourceTable}" a, "${input.sourceTable}" b
|
|
413
|
+
WHERE a.id < b.id
|
|
414
|
+
ORDER BY distance LIMIT ${input.limit}`;
|
|
415
|
+
break;
|
|
416
|
+
}
|
|
417
|
+
const result = await adapter.executeReadQuery(query);
|
|
418
|
+
return {
|
|
419
|
+
success: true,
|
|
420
|
+
analysisType: input.analysisType,
|
|
421
|
+
rowCount: result.rows?.length ?? 0,
|
|
422
|
+
results: result.rows,
|
|
423
|
+
};
|
|
424
|
+
},
|
|
425
|
+
};
|
|
426
|
+
}
|
|
427
|
+
/**
|
|
428
|
+
* Spatial index management
|
|
429
|
+
*/
|
|
430
|
+
function createSpatialIndexTool(adapter) {
|
|
431
|
+
return {
|
|
432
|
+
name: "sqlite_spatialite_index",
|
|
433
|
+
description: "Create, drop, or check spatial R-Tree index on geometry column.",
|
|
434
|
+
group: "geo",
|
|
435
|
+
inputSchema: SpatialIndexSchema,
|
|
436
|
+
requiredScopes: ["write"],
|
|
437
|
+
handler: async (params, _context) => {
|
|
438
|
+
const input = SpatialIndexSchema.parse(params);
|
|
439
|
+
ensureSpatialite(adapter);
|
|
440
|
+
// Validate names
|
|
441
|
+
if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(input.tableName)) {
|
|
442
|
+
throw new Error("Invalid table name");
|
|
443
|
+
}
|
|
444
|
+
switch (input.action) {
|
|
445
|
+
case "create":
|
|
446
|
+
// NOTE: CreateSpatialIndex is a SELECT function, must use executeReadQuery
|
|
447
|
+
await adapter.executeReadQuery(`SELECT CreateSpatialIndex('${input.tableName}', '${input.geometryColumn}')`);
|
|
448
|
+
return {
|
|
449
|
+
success: true,
|
|
450
|
+
message: `Spatial index created on ${input.tableName}.${input.geometryColumn}`,
|
|
451
|
+
action: "create",
|
|
452
|
+
};
|
|
453
|
+
case "drop":
|
|
454
|
+
// NOTE: DisableSpatialIndex is a SELECT function, must use executeReadQuery
|
|
455
|
+
await adapter.executeReadQuery(`SELECT DisableSpatialIndex('${input.tableName}', '${input.geometryColumn}')`);
|
|
456
|
+
return {
|
|
457
|
+
success: true,
|
|
458
|
+
message: `Spatial index dropped from ${input.tableName}.${input.geometryColumn}`,
|
|
459
|
+
action: "drop",
|
|
460
|
+
};
|
|
461
|
+
case "check": {
|
|
462
|
+
const checkResult = await adapter.executeReadQuery(`SELECT CheckSpatialIndex('${input.tableName}', '${input.geometryColumn}')`);
|
|
463
|
+
return {
|
|
464
|
+
success: true,
|
|
465
|
+
message: "Spatial index check completed",
|
|
466
|
+
action: "check",
|
|
467
|
+
result: checkResult.rows,
|
|
468
|
+
};
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
},
|
|
472
|
+
};
|
|
473
|
+
}
|
|
474
|
+
/**
|
|
475
|
+
* Geometry transformation operations
|
|
476
|
+
*/
|
|
477
|
+
function createGeometryTransformTool(adapter) {
|
|
478
|
+
return {
|
|
479
|
+
name: "sqlite_spatialite_transform",
|
|
480
|
+
description: "Perform geometry operations: buffer, intersection, union, centroid, simplify.",
|
|
481
|
+
group: "geo",
|
|
482
|
+
inputSchema: GeometryTransformSchema,
|
|
483
|
+
requiredScopes: ["read"],
|
|
484
|
+
handler: async (params, _context) => {
|
|
485
|
+
const input = GeometryTransformSchema.parse(params);
|
|
486
|
+
ensureSpatialite(adapter);
|
|
487
|
+
let query;
|
|
488
|
+
switch (input.operation) {
|
|
489
|
+
case "buffer": {
|
|
490
|
+
const bufferGeom = `Buffer(GeomFromText('${input.geometry1}', ${input.srid}), ${input.distance})`;
|
|
491
|
+
// Auto-simplify buffer output with adaptive tolerance based on buffer distance
|
|
492
|
+
// Tolerance scales with distance (1% of buffer distance) for effective vertex reduction
|
|
493
|
+
// Use simplifyTolerance: 0 to disable, or specify custom tolerance
|
|
494
|
+
const defaultTolerance = Math.max(0.0001, input.distance * 0.01);
|
|
495
|
+
const tolerance = input.simplifyTolerance ?? defaultTolerance;
|
|
496
|
+
const finalGeom = tolerance > 0
|
|
497
|
+
? `Simplify(${bufferGeom}, ${tolerance})`
|
|
498
|
+
: bufferGeom;
|
|
499
|
+
query = `SELECT AsText(${finalGeom}) as result`;
|
|
500
|
+
break;
|
|
501
|
+
}
|
|
502
|
+
case "intersection":
|
|
503
|
+
if (!input.geometry2) {
|
|
504
|
+
throw new Error("Second geometry required for intersection");
|
|
505
|
+
}
|
|
506
|
+
query = `SELECT AsText(Intersection(
|
|
507
|
+
GeomFromText('${input.geometry1}', ${input.srid}),
|
|
508
|
+
GeomFromText('${input.geometry2}', ${input.srid})
|
|
509
|
+
)) as result`;
|
|
510
|
+
break;
|
|
511
|
+
case "union":
|
|
512
|
+
if (!input.geometry2) {
|
|
513
|
+
throw new Error("Second geometry required for union");
|
|
514
|
+
}
|
|
515
|
+
query = `SELECT AsText(GUnion(
|
|
516
|
+
GeomFromText('${input.geometry1}', ${input.srid}),
|
|
517
|
+
GeomFromText('${input.geometry2}', ${input.srid})
|
|
518
|
+
)) as result`;
|
|
519
|
+
break;
|
|
520
|
+
case "difference":
|
|
521
|
+
if (!input.geometry2) {
|
|
522
|
+
throw new Error("Second geometry required for difference");
|
|
523
|
+
}
|
|
524
|
+
query = `SELECT AsText(Difference(
|
|
525
|
+
GeomFromText('${input.geometry1}', ${input.srid}),
|
|
526
|
+
GeomFromText('${input.geometry2}', ${input.srid})
|
|
527
|
+
)) as result`;
|
|
528
|
+
break;
|
|
529
|
+
case "centroid":
|
|
530
|
+
query = `SELECT AsText(Centroid(GeomFromText('${input.geometry1}', ${input.srid}))) as result`;
|
|
531
|
+
break;
|
|
532
|
+
case "envelope":
|
|
533
|
+
query = `SELECT AsText(Envelope(GeomFromText('${input.geometry1}', ${input.srid}))) as result`;
|
|
534
|
+
break;
|
|
535
|
+
case "simplify":
|
|
536
|
+
query = `SELECT AsText(Simplify(GeomFromText('${input.geometry1}', ${input.srid}), ${input.distance})) as result`;
|
|
537
|
+
break;
|
|
538
|
+
}
|
|
539
|
+
const result = await adapter.executeReadQuery(query);
|
|
540
|
+
const wktResult = result.rows?.[0]?.["result"];
|
|
541
|
+
return {
|
|
542
|
+
success: true,
|
|
543
|
+
operation: input.operation,
|
|
544
|
+
result: wktResult,
|
|
545
|
+
};
|
|
546
|
+
},
|
|
547
|
+
};
|
|
548
|
+
}
|
|
549
|
+
/**
|
|
550
|
+
* Import spatial data
|
|
551
|
+
*/
|
|
552
|
+
function createSpatialImportTool(adapter) {
|
|
553
|
+
return {
|
|
554
|
+
name: "sqlite_spatialite_import",
|
|
555
|
+
description: "Import geometry data from WKT or GeoJSON into a spatial table.",
|
|
556
|
+
group: "geo",
|
|
557
|
+
inputSchema: SpatialImportSchema,
|
|
558
|
+
requiredScopes: ["write"],
|
|
559
|
+
handler: async (params, _context) => {
|
|
560
|
+
const input = SpatialImportSchema.parse(params);
|
|
561
|
+
ensureSpatialite(adapter);
|
|
562
|
+
// Validate table name
|
|
563
|
+
if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(input.tableName)) {
|
|
564
|
+
throw new Error("Invalid table name");
|
|
565
|
+
}
|
|
566
|
+
let wkt;
|
|
567
|
+
if (input.format === "geojson") {
|
|
568
|
+
// Parse GeoJSON and convert with SRID
|
|
569
|
+
try {
|
|
570
|
+
// Validate JSON to ensure it's valid GeoJSON
|
|
571
|
+
JSON.parse(input.data);
|
|
572
|
+
// Build INSERT with additional columns (matching WKT path)
|
|
573
|
+
// Use SetSRID(GeomFromGeoJSON(...), srid) to ensure SRID is set correctly
|
|
574
|
+
const columns = ["geom"];
|
|
575
|
+
const values = [
|
|
576
|
+
`SetSRID(GeomFromGeoJSON('${input.data}'), ${input.srid})`,
|
|
577
|
+
];
|
|
578
|
+
if (input.additionalData) {
|
|
579
|
+
for (const [key, value] of Object.entries(input.additionalData)) {
|
|
580
|
+
if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(key)) {
|
|
581
|
+
throw new Error(`Invalid column name: ${key}`);
|
|
582
|
+
}
|
|
583
|
+
columns.push(`"${key}"`);
|
|
584
|
+
values.push(typeof value === "string"
|
|
585
|
+
? `'${value.replace(/'/g, "''")}'`
|
|
586
|
+
: String(value));
|
|
587
|
+
}
|
|
588
|
+
}
|
|
589
|
+
const sql = `INSERT INTO "${input.tableName}" (${columns.join(", ")}) VALUES (${values.join(", ")})`;
|
|
590
|
+
const insertResult = await adapter.executeWriteQuery(sql);
|
|
591
|
+
return {
|
|
592
|
+
success: true,
|
|
593
|
+
message: "GeoJSON geometry imported",
|
|
594
|
+
rowsAffected: insertResult.rowsAffected ?? 1,
|
|
595
|
+
};
|
|
596
|
+
}
|
|
597
|
+
catch (e) {
|
|
598
|
+
throw new Error(`Invalid GeoJSON: ${e instanceof Error ? e.message : String(e)}`);
|
|
599
|
+
}
|
|
600
|
+
}
|
|
601
|
+
else {
|
|
602
|
+
wkt = input.data;
|
|
603
|
+
}
|
|
604
|
+
// Build INSERT with additional columns
|
|
605
|
+
const columns = ["geom"];
|
|
606
|
+
const values = [`GeomFromText('${wkt}', ${input.srid})`];
|
|
607
|
+
if (input.additionalData) {
|
|
608
|
+
for (const [key, value] of Object.entries(input.additionalData)) {
|
|
609
|
+
if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(key)) {
|
|
610
|
+
throw new Error(`Invalid column name: ${key}`);
|
|
611
|
+
}
|
|
612
|
+
columns.push(`"${key}"`);
|
|
613
|
+
values.push(typeof value === "string"
|
|
614
|
+
? `'${value.replace(/'/g, "''")}'`
|
|
615
|
+
: String(value));
|
|
616
|
+
}
|
|
617
|
+
}
|
|
618
|
+
const sql = `INSERT INTO "${input.tableName}" (${columns.join(", ")}) VALUES (${values.join(", ")})`;
|
|
619
|
+
const insertResult = await adapter.executeWriteQuery(sql);
|
|
620
|
+
return {
|
|
621
|
+
success: true,
|
|
622
|
+
message: "WKT geometry imported",
|
|
623
|
+
rowsAffected: insertResult.rowsAffected ?? 1,
|
|
624
|
+
};
|
|
625
|
+
},
|
|
626
|
+
};
|
|
627
|
+
}
|
|
628
|
+
//# sourceMappingURL=spatialite.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spatialite.js","sourceRoot":"","sources":["../../../../src/adapters/sqlite-native/tools/spatialite.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,qDAAqD;AACrD,MAAM,gBAAgB,GAAG;IACvB,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IAC9B,gBAAgB;IAChB,oBAAoB;IACpB,mBAAmB;IACnB,6CAA6C;IAC7C,kCAAkC;IAClC,qCAAqC;CACtC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAEzC,kCAAkC;AAClC,MAAM,eAAe,GAAG,IAAI,OAAO,EAAE,CAAC;AAEtC,UAAU;AACV,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,aAAa,EAAE,CAAC;SACb,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,yCAAyC,CAAC;IACtD,WAAW,EAAE,CAAC;SACX,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CAAC,gCAAgC,CAAC;CAC9C,CAAC,CAAC;AAEH,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;IACrE,cAAc,EAAE,CAAC;SACd,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,OAAO,CAAC,MAAM,CAAC;SACf,QAAQ,CAAC,6BAA6B,CAAC;IAC1C,YAAY,EAAE,CAAC;SACZ,IAAI,CAAC;QACJ,OAAO;QACP,YAAY;QACZ,SAAS;QACT,YAAY;QACZ,iBAAiB;QACjB,cAAc;QACd,UAAU;KACX,CAAC;SACD,QAAQ,EAAE;SACV,OAAO,CAAC,OAAO,CAAC;SAChB,QAAQ,CAAC,2BAA2B,CAAC;IACxC,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,OAAO,CAAC,IAAI,CAAC;SACb,QAAQ,CAAC,8CAA8C,CAAC;IAC3D,iBAAiB,EAAE,CAAC;SACjB,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;QACP,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;KACjB,CAAC,CACH;SACA,QAAQ,EAAE;SACV,OAAO,CAAC,EAAE,CAAC;SACX,QAAQ,CAAC,gCAAgC,CAAC;CAC9C,CAAC,CAAC;AAEH,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;IAC1E,MAAM,EAAE,CAAC;SACN,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;SAClB,QAAQ,EAAE;SACV,OAAO,CAAC,EAAE,CAAC;SACX,QAAQ,CAAC,kBAAkB,CAAC;CAChC,CAAC,CAAC;AAEH,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,YAAY,EAAE,CAAC;SACZ,IAAI,CAAC;QACJ,kBAAkB;QAClB,kBAAkB;QAClB,iBAAiB;QACjB,gBAAgB;KACjB,CAAC;SACD,QAAQ,CAAC,0BAA0B,CAAC;IACvC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IAC7D,WAAW,EAAE,CAAC;SACX,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,6HAA6H,CAC9H;IACH,cAAc,EAAE,CAAC;SACd,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,OAAO,CAAC,MAAM,CAAC;SACf,QAAQ,CAAC,sBAAsB,CAAC;IACnC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC;IACnE,WAAW,EAAE,CAAC;SACX,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,OAAO,CAAC,IAAI,CAAC;SACb,QAAQ,CACP,uGAAuG,CACxG;IACH,eAAe,EAAE,CAAC;SACf,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CACP,8EAA8E,CAC/E;CACJ,CAAC,CAAC;AAEH,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IAC3D,cAAc,EAAE,CAAC;SACd,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,OAAO,CAAC,MAAM,CAAC;SACf,QAAQ,CAAC,sBAAsB,CAAC;IACnC,MAAM,EAAE,CAAC;SACN,IAAI,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;SACjC,QAAQ,EAAE;SACV,OAAO,CAAC,QAAQ,CAAC;SACjB,QAAQ,CAAC,mBAAmB,CAAC;CACjC,CAAC,CAAC;AAEH,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,SAAS,EAAE,CAAC;SACT,IAAI,CAAC;QACJ,QAAQ;QACR,cAAc;QACd,OAAO;QACP,YAAY;QACZ,UAAU;QACV,UAAU;QACV,UAAU;KACX,CAAC;SACD,QAAQ,CAAC,+BAA+B,CAAC;IAC5C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IAC7D,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IAC3E,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CAAC,2CAA2C,CAAC;IACxD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IACrE,iBAAiB,EAAE,CAAC;SACjB,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,qHAAqH,CACtH;CACJ,CAAC,CAAC;AAEH,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IACnD,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC;IAC3D,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IAClE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC;IACxE,cAAc,EAAE,CAAC;SACd,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;SAC/B,QAAQ,EAAE;SACV,QAAQ,CAAC,0BAA0B,CAAC;CACxC,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAChC,OAA4B;IAE5B,OAAO;QACL,wBAAwB,CAAC,OAAO,CAAC;QACjC,sBAAsB,CAAC,OAAO,CAAC;QAC/B,sBAAsB,CAAC,OAAO,CAAC;QAC/B,yBAAyB,CAAC,OAAO,CAAC;QAClC,sBAAsB,CAAC,OAAO,CAAC;QAC/B,2BAA2B,CAAC,OAAO,CAAC;QACpC,uBAAuB,CAAC,OAAO,CAAC;KACjC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CACxB,OAA4B,EAC5B,UAAmB;IAEnB,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IACjC,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;QAChB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,wBAAwB,EAAE,CAAC;IAC7D,CAAC;IAED,MAAM,KAAK,GAAG,UAAU;QACtB,CAAC,CAAC,CAAC,UAAU,EAAE,GAAG,gBAAgB,CAAC;QACnC,CAAC,CAAC,gBAAgB,CAAC;IAErB,4EAA4E;IAC5E,6EAA6E;IAC7E,qEAAqE;IACrE,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC/C,IAAI,OAAO,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QAC5C,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,CAAC,8BAA8B;QACzF,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAC9C,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YACxC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,YAAY,GAAG,GAAG,GAAG,WAAW,CAAC;QACzD,CAAC;IACH,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YACvB,8BAA8B;YAC9B,EAAE,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;YACzC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACxB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QACjC,CAAC;QAAC,MAAM,CAAC;YACP,gBAAgB;QAClB,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO,EAAE,KAAK;QACd,KAAK,EACH,sGAAsG;KACzG,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAA4B;IAC7D,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IACjC,IAAI,EAAE,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAE9B,IAAI,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;QAAE,OAAO,IAAI,CAAC;IAEzC,IAAI,CAAC;QACH,EAAE,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QACvC,qEAAqE;QACrE,6DAA6D;QAC7D,EAAE,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QACzC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,OAA4B;IACpD,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,2BAA2B,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,wBAAwB,CAC/B,OAA4B;IAE5B,OAAO;QACL,IAAI,EAAE,wBAAwB;QAC9B,WAAW,EACT,mGAAmG;QACrG,KAAK,EAAE,KAAK;QACZ,WAAW,EAAE,oBAAoB;QACjC,cAAc,EAAE,CAAC,OAAO,CAAC;QACzB,OAAO,EAAE,CAAC,OAAgB,EAAE,QAAwB,EAAE,EAAE;YACtD,MAAM,KAAK,GAAG,oBAAoB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAElD,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC;gBACtD,OAAO,OAAO,CAAC,OAAO,CAAC;oBACrB,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE,2BAA2B;oBACpC,aAAa,EAAE,IAAI;iBACpB,CAAC,CAAC;YACL,CAAC;YAED,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;YAE/D,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,OAAO,OAAO,CAAC,OAAO,CAAC;oBACrB,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE,gCAAgC;oBACzC,aAAa,EAAE,MAAM,CAAC,IAAI;iBAC3B,CAAC,CAAC;YACL,CAAC;YAED,OAAO,OAAO,CAAC,OAAO,CAAC;gBACrB,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,MAAM,CAAC,KAAK;gBACrB,aAAa,EAAE,gBAAgB;aAChC,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,sBAAsB,CAAC,OAA4B;IAC1D,OAAO;QACL,IAAI,EAAE,gCAAgC;QACtC,WAAW,EACT,+DAA+D;QACjE,KAAK,EAAE,KAAK;QACZ,WAAW,EAAE,wBAAwB;QACrC,cAAc,EAAE,CAAC,OAAO,CAAC;QACzB,OAAO,EAAE,KAAK,EAAE,MAAe,EAAE,QAAwB,EAAE,EAAE;YAC3D,MAAM,KAAK,GAAG,wBAAwB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACrD,gBAAgB,CAAC,OAAO,CAAC,CAAC;YAE1B,sBAAsB;YACtB,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;gBACtD,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;YACxC,CAAC;YAED,2BAA2B;YAC3B,MAAM,OAAO,GAAG,CAAC,sCAAsC,CAAC,CAAC;YACzD,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;gBAC1C,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC/C,MAAM,IAAI,KAAK,CAAC,wBAAwB,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;gBACtD,CAAC;gBACD,OAAO,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;YAC5C,CAAC;YAED,oBAAoB;YACpB,MAAM,OAAO,CAAC,iBAAiB,CAC7B,+BAA+B,KAAK,CAAC,SAAS,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAC1E,CAAC;YAEF,uCAAuC;YACvC,0EAA0E;YAC1E,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,gBAAgB,CAC9C,6BAA6B,KAAK,CAAC,SAAS,OAAO,KAAK,CAAC,cAAc,MAAM,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,YAAY,UAAU,CAC1H,CAAC;YAEF,yCAAyC;YACzC,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,gBAAgB,CACjD,uCAAuC,KAAK,CAAC,SAAS,oBAAoB,KAAK,CAAC,cAAc,GAAG,CAClG,CAAC;YACF,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzD,MAAM,IAAI,KAAK,CACb,qCAAqC,KAAK,CAAC,cAAc,kCAAkC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAC5H,CAAC;YACJ,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,kBAAkB,KAAK,CAAC,SAAS,WAAW;gBACrD,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,cAAc,EAAE,KAAK,CAAC,cAAc;gBACpC,YAAY,EAAE,KAAK,CAAC,YAAY;gBAChC,IAAI,EAAE,KAAK,CAAC,IAAI;aACjB,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,sBAAsB,CAAC,OAA4B;IAC1D,OAAO;QACL,IAAI,EAAE,yBAAyB;QAC/B,WAAW,EACT,wFAAwF;QAC1F,KAAK,EAAE,KAAK;QACZ,WAAW,EAAE,kBAAkB;QAC/B,cAAc,EAAE,CAAC,MAAM,CAAC;QACxB,OAAO,EAAE,KAAK,EAAE,MAAe,EAAE,QAAwB,EAAE,EAAE;YAC3D,MAAM,KAAK,GAAG,kBAAkB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC/C,gBAAgB,CAAC,OAAO,CAAC,CAAC;YAE1B,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAE3D,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC;gBAClC,IAAI,EAAE,MAAM,CAAC,IAAI;aAClB,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,yBAAyB,CAChC,OAA4B;IAE5B,OAAO;QACL,IAAI,EAAE,2BAA2B;QACjC,WAAW,EACT,iLAAiL;QACnL,KAAK,EAAE,KAAK;QACZ,WAAW,EAAE,qBAAqB;QAClC,cAAc,EAAE,CAAC,MAAM,CAAC;QACxB,OAAO,EAAE,KAAK,EAAE,MAAe,EAAE,QAAwB,EAAE,EAAE;YAC3D,MAAM,KAAK,GAAG,qBAAqB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAClD,gBAAgB,CAAC,OAAO,CAAC,CAAC;YAE1B,iBAAiB;YACjB,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;gBACxD,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;YAC/C,CAAC;YACD,IACE,KAAK,CAAC,WAAW;gBACjB,CAAC,0BAA0B,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EACnD,CAAC;gBACD,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;YAC/C,CAAC;YAED,IAAI,KAAa,CAAC;YAClB,QAAQ,KAAK,CAAC,YAAY,EAAE,CAAC;gBAC3B,KAAK,gBAAgB;oBACnB,KAAK,GAAG;8BACY,KAAK,CAAC,cAAc;8BACpB,KAAK,CAAC,cAAc;8BACpB,KAAK,CAAC,cAAc;8BACpB,KAAK,CAAC,cAAc;;kBAEhC,KAAK,CAAC,WAAW,GAAG,CAAC;oBAC7B,MAAM;gBAER,KAAK,kBAAkB,CAAC,CAAC,CAAC;oBACxB,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;wBACvB,MAAM,IAAI,KAAK,CACb,wEAAwE,CACzE,CAAC;oBACJ,CAAC;oBACD,wEAAwE;oBACxE,MAAM,SAAS,GAAG,KAAK,CAAC,WAAW,KAAK,KAAK,CAAC,WAAW,CAAC;oBAC1D,MAAM,UAAU,GACd,SAAS,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC7D,oEAAoE;oBACpE,MAAM,WAAW,GAAG,KAAK,CAAC,eAAe;wBACvC,CAAC,CAAC,eAAe,KAAK,CAAC,cAAc,gCAAgC,KAAK,CAAC,cAAc,mBAAmB;wBAC5G,CAAC,CAAC,EAAE,CAAC;oBACP,KAAK,GAAG;;6BAEW,KAAK,CAAC,cAAc,SAAS,KAAK,CAAC,cAAc,iBAAiB,WAAW;kBACxF,KAAK,CAAC,WAAW,SAAS,KAAK,CAAC,WAAW;YACjD,UAAU;oCACc,KAAK,CAAC,KAAK,EAAE,CAAC;oBACxC,MAAM;gBACR,CAAC;gBAED,KAAK,kBAAkB,CAAC,CAAC,CAAC;oBACxB,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;wBACvB,MAAM,IAAI,KAAK,CACb,wEAAwE,CACzE,CAAC;oBACJ,CAAC;oBACD,oEAAoE;oBACpE,MAAM,QAAQ,GAAG,KAAK,CAAC,eAAe;wBACpC,CAAC,CAAC,eAAe,KAAK,CAAC,cAAc,gCAAgC,KAAK,CAAC,cAAc,mBAAmB;wBAC5G,CAAC,CAAC,EAAE,CAAC;oBACP,KAAK,GAAG;kDACgC,QAAQ;kBACxC,KAAK,CAAC,WAAW,SAAS,KAAK,CAAC,WAAW;+BAC9B,KAAK,CAAC,cAAc,SAAS,KAAK,CAAC,cAAc;kBAC9D,KAAK,CAAC,KAAK,EAAE,CAAC;oBACtB,MAAM;gBACR,CAAC;gBAED,KAAK,iBAAiB;oBACpB,KAAK,GAAG;6BACW,KAAK,CAAC,cAAc,SAAS,KAAK,CAAC,cAAc;kBAC5D,KAAK,CAAC,WAAW,SAAS,KAAK,CAAC,WAAW;;oCAEzB,KAAK,CAAC,KAAK,EAAE,CAAC;oBACxC,MAAM;YACV,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;YAErD,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,YAAY,EAAE,KAAK,CAAC,YAAY;gBAChC,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC;gBAClC,OAAO,EAAE,MAAM,CAAC,IAAI;aACrB,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,sBAAsB,CAAC,OAA4B;IAC1D,OAAO;QACL,IAAI,EAAE,yBAAyB;QAC/B,WAAW,EACT,iEAAiE;QACnE,KAAK,EAAE,KAAK;QACZ,WAAW,EAAE,kBAAkB;QAC/B,cAAc,EAAE,CAAC,OAAO,CAAC;QACzB,OAAO,EAAE,KAAK,EAAE,MAAe,EAAE,QAAwB,EAAE,EAAE;YAC3D,MAAM,KAAK,GAAG,kBAAkB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC/C,gBAAgB,CAAC,OAAO,CAAC,CAAC;YAE1B,iBAAiB;YACjB,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;gBACtD,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;YACxC,CAAC;YAED,QAAQ,KAAK,CAAC,MAAM,EAAE,CAAC;gBACrB,KAAK,QAAQ;oBACX,2EAA2E;oBAC3E,MAAM,OAAO,CAAC,gBAAgB,CAC5B,8BAA8B,KAAK,CAAC,SAAS,OAAO,KAAK,CAAC,cAAc,IAAI,CAC7E,CAAC;oBACF,OAAO;wBACL,OAAO,EAAE,IAAI;wBACb,OAAO,EAAE,4BAA4B,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,cAAc,EAAE;wBAC9E,MAAM,EAAE,QAAQ;qBACjB,CAAC;gBAEJ,KAAK,MAAM;oBACT,4EAA4E;oBAC5E,MAAM,OAAO,CAAC,gBAAgB,CAC5B,+BAA+B,KAAK,CAAC,SAAS,OAAO,KAAK,CAAC,cAAc,IAAI,CAC9E,CAAC;oBACF,OAAO;wBACL,OAAO,EAAE,IAAI;wBACb,OAAO,EAAE,8BAA8B,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,cAAc,EAAE;wBAChF,MAAM,EAAE,MAAM;qBACf,CAAC;gBAEJ,KAAK,OAAO,CAAC,CAAC,CAAC;oBACb,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,gBAAgB,CAChD,6BAA6B,KAAK,CAAC,SAAS,OAAO,KAAK,CAAC,cAAc,IAAI,CAC5E,CAAC;oBACF,OAAO;wBACL,OAAO,EAAE,IAAI;wBACb,OAAO,EAAE,+BAA+B;wBACxC,MAAM,EAAE,OAAO;wBACf,MAAM,EAAE,WAAW,CAAC,IAAI;qBACzB,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,2BAA2B,CAClC,OAA4B;IAE5B,OAAO;QACL,IAAI,EAAE,6BAA6B;QACnC,WAAW,EACT,+EAA+E;QACjF,KAAK,EAAE,KAAK;QACZ,WAAW,EAAE,uBAAuB;QACpC,cAAc,EAAE,CAAC,MAAM,CAAC;QACxB,OAAO,EAAE,KAAK,EAAE,MAAe,EAAE,QAAwB,EAAE,EAAE;YAC3D,MAAM,KAAK,GAAG,uBAAuB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACpD,gBAAgB,CAAC,OAAO,CAAC,CAAC;YAE1B,IAAI,KAAa,CAAC;YAClB,QAAQ,KAAK,CAAC,SAAS,EAAE,CAAC;gBACxB,KAAK,QAAQ,CAAC,CAAC,CAAC;oBACd,MAAM,UAAU,GAAG,wBAAwB,KAAK,CAAC,SAAS,MAAM,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,QAAQ,GAAG,CAAC;oBAClG,+EAA+E;oBAC/E,wFAAwF;oBACxF,mEAAmE;oBACnE,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;oBACjE,MAAM,SAAS,GAAG,KAAK,CAAC,iBAAiB,IAAI,gBAAgB,CAAC;oBAC9D,MAAM,SAAS,GACb,SAAS,GAAG,CAAC;wBACX,CAAC,CAAC,YAAY,UAAU,KAAK,SAAS,GAAG;wBACzC,CAAC,CAAC,UAAU,CAAC;oBACjB,KAAK,GAAG,iBAAiB,SAAS,aAAa,CAAC;oBAChD,MAAM;gBACR,CAAC;gBAED,KAAK,cAAc;oBACjB,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;wBACrB,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;oBAC/D,CAAC;oBACD,KAAK,GAAG;4BACU,KAAK,CAAC,SAAS,MAAM,KAAK,CAAC,IAAI;4BAC/B,KAAK,CAAC,SAAS,MAAM,KAAK,CAAC,IAAI;uBACpC,CAAC;oBACd,MAAM;gBAER,KAAK,OAAO;oBACV,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;wBACrB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;oBACxD,CAAC;oBACD,KAAK,GAAG;4BACU,KAAK,CAAC,SAAS,MAAM,KAAK,CAAC,IAAI;4BAC/B,KAAK,CAAC,SAAS,MAAM,KAAK,CAAC,IAAI;uBACpC,CAAC;oBACd,MAAM;gBAER,KAAK,YAAY;oBACf,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;wBACrB,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;oBAC7D,CAAC;oBACD,KAAK,GAAG;4BACU,KAAK,CAAC,SAAS,MAAM,KAAK,CAAC,IAAI;4BAC/B,KAAK,CAAC,SAAS,MAAM,KAAK,CAAC,IAAI;uBACpC,CAAC;oBACd,MAAM;gBAER,KAAK,UAAU;oBACb,KAAK,GAAG,wCAAwC,KAAK,CAAC,SAAS,MAAM,KAAK,CAAC,IAAI,eAAe,CAAC;oBAC/F,MAAM;gBAER,KAAK,UAAU;oBACb,KAAK,GAAG,wCAAwC,KAAK,CAAC,SAAS,MAAM,KAAK,CAAC,IAAI,eAAe,CAAC;oBAC/F,MAAM;gBAER,KAAK,UAAU;oBACb,KAAK,GAAG,wCAAwC,KAAK,CAAC,SAAS,MAAM,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,QAAQ,cAAc,CAAC;oBAClH,MAAM;YACV,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;YACrD,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAuB,CAAC;YAErE,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,MAAM,EAAE,SAAS;aAClB,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,uBAAuB,CAAC,OAA4B;IAC3D,OAAO;QACL,IAAI,EAAE,0BAA0B;QAChC,WAAW,EACT,gEAAgE;QAClE,KAAK,EAAE,KAAK;QACZ,WAAW,EAAE,mBAAmB;QAChC,cAAc,EAAE,CAAC,OAAO,CAAC;QACzB,OAAO,EAAE,KAAK,EAAE,MAAe,EAAE,QAAwB,EAAE,EAAE;YAC3D,MAAM,KAAK,GAAG,mBAAmB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAChD,gBAAgB,CAAC,OAAO,CAAC,CAAC;YAE1B,sBAAsB;YACtB,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;gBACtD,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;YACxC,CAAC;YAED,IAAI,GAAW,CAAC;YAChB,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC/B,sCAAsC;gBACtC,IAAI,CAAC;oBACH,6CAA6C;oBAC7C,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAEvB,2DAA2D;oBAC3D,0EAA0E;oBAC1E,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC;oBACzB,MAAM,MAAM,GAAG;wBACb,4BAA4B,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,IAAI,GAAG;qBAC3D,CAAC;oBAEF,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;wBACzB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC;4BAChE,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gCAC1C,MAAM,IAAI,KAAK,CAAC,wBAAwB,GAAG,EAAE,CAAC,CAAC;4BACjD,CAAC;4BACD,OAAO,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;4BACzB,MAAM,CAAC,IAAI,CACT,OAAO,KAAK,KAAK,QAAQ;gCACvB,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG;gCAClC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAClB,CAAC;wBACJ,CAAC;oBACH,CAAC;oBAED,MAAM,GAAG,GAAG,gBAAgB,KAAK,CAAC,SAAS,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;oBACrG,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;oBAC1D,OAAO;wBACL,OAAO,EAAE,IAAI;wBACb,OAAO,EAAE,2BAA2B;wBACpC,YAAY,EAAE,YAAY,CAAC,YAAY,IAAI,CAAC;qBAC7C,CAAC;gBACJ,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,MAAM,IAAI,KAAK,CACb,oBAAoB,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACjE,CAAC;gBACJ,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC;YACnB,CAAC;YAED,uCAAuC;YACvC,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC;YACzB,MAAM,MAAM,GAAG,CAAC,iBAAiB,GAAG,MAAM,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;YAEzD,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;gBACzB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC;oBAChE,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;wBAC1C,MAAM,IAAI,KAAK,CAAC,wBAAwB,GAAG,EAAE,CAAC,CAAC;oBACjD,CAAC;oBACD,OAAO,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;oBACzB,MAAM,CAAC,IAAI,CACT,OAAO,KAAK,KAAK,QAAQ;wBACvB,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG;wBAClC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAClB,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,MAAM,GAAG,GAAG,gBAAgB,KAAK,CAAC,SAAS,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;YACrG,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;YAE1D,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,uBAAuB;gBAChC,YAAY,EAAE,YAAY,CAAC,YAAY,IAAI,CAAC;aAC7C,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transaction Tools for Native SQLite Adapter
|
|
3
|
+
*
|
|
4
|
+
* Provides transaction control tools for complex multi-statement operations.
|
|
5
|
+
*/
|
|
6
|
+
import type { ToolDefinition } from "../../../types/index.js";
|
|
7
|
+
import type { NativeSqliteAdapter } from "../NativeSqliteAdapter.js";
|
|
8
|
+
/**
|
|
9
|
+
* Get all transaction tools
|
|
10
|
+
*/
|
|
11
|
+
export declare function getTransactionTools(adapter: NativeSqliteAdapter): ToolDefinition[];
|
|
12
|
+
//# sourceMappingURL=transactions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transactions.d.ts","sourceRoot":"","sources":["../../../../src/adapters/sqlite-native/tools/transactions.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAkB,MAAM,yBAAyB,CAAC;AAC9E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AA4BrE;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,mBAAmB,GAC3B,cAAc,EAAE,CAUlB"}
|