lokicms-plugin-sql 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/federation/cache-layer.d.ts +58 -0
- package/dist/federation/cache-layer.d.ts.map +1 -0
- package/dist/federation/cache-layer.js +210 -0
- package/dist/federation/cache-layer.js.map +1 -0
- package/dist/federation/index.d.ts +12 -0
- package/dist/federation/index.d.ts.map +1 -0
- package/dist/federation/index.js +9 -0
- package/dist/federation/index.js.map +1 -0
- package/dist/federation/source-manager.d.ts +57 -0
- package/dist/federation/source-manager.d.ts.map +1 -0
- package/dist/federation/source-manager.js +238 -0
- package/dist/federation/source-manager.js.map +1 -0
- package/dist/federation/sync-engine.d.ts +68 -0
- package/dist/federation/sync-engine.d.ts.map +1 -0
- package/dist/federation/sync-engine.js +288 -0
- package/dist/federation/sync-engine.js.map +1 -0
- package/dist/index.d.ts +80 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +79 -0
- package/dist/index.js.map +1 -0
- package/dist/plugin.d.ts +28 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +798 -0
- package/dist/plugin.js.map +1 -0
- package/dist/providers/base.d.ts +142 -0
- package/dist/providers/base.d.ts.map +1 -0
- package/dist/providers/base.js +161 -0
- package/dist/providers/base.js.map +1 -0
- package/dist/providers/index.d.ts +22 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +74 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/mariadb.d.ts +83 -0
- package/dist/providers/mariadb.d.ts.map +1 -0
- package/dist/providers/mariadb.js +293 -0
- package/dist/providers/mariadb.js.map +1 -0
- package/dist/providers/mysql.d.ts +78 -0
- package/dist/providers/mysql.d.ts.map +1 -0
- package/dist/providers/mysql.js +284 -0
- package/dist/providers/mysql.js.map +1 -0
- package/dist/providers/postgresql.d.ts +77 -0
- package/dist/providers/postgresql.d.ts.map +1 -0
- package/dist/providers/postgresql.js +296 -0
- package/dist/providers/postgresql.js.map +1 -0
- package/dist/providers/sqlite.d.ts +80 -0
- package/dist/providers/sqlite.d.ts.map +1 -0
- package/dist/providers/sqlite.js +283 -0
- package/dist/providers/sqlite.js.map +1 -0
- package/dist/query/builder.d.ts +74 -0
- package/dist/query/builder.d.ts.map +1 -0
- package/dist/query/builder.js +279 -0
- package/dist/query/builder.js.map +1 -0
- package/dist/query/index.d.ts +10 -0
- package/dist/query/index.d.ts.map +1 -0
- package/dist/query/index.js +8 -0
- package/dist/query/index.js.map +1 -0
- package/dist/query/transformer.d.ts +74 -0
- package/dist/query/transformer.d.ts.map +1 -0
- package/dist/query/transformer.js +236 -0
- package/dist/query/transformer.js.map +1 -0
- package/dist/types.d.ts +350 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +38 -0
- package/dist/types.js.map +1 -0
- package/dist/vectors/adapter.d.ts +128 -0
- package/dist/vectors/adapter.d.ts.map +1 -0
- package/dist/vectors/adapter.js +79 -0
- package/dist/vectors/adapter.js.map +1 -0
- package/dist/vectors/index.d.ts +41 -0
- package/dist/vectors/index.d.ts.map +1 -0
- package/dist/vectors/index.js +87 -0
- package/dist/vectors/index.js.map +1 -0
- package/dist/vectors/lokijs-vector.d.ts +112 -0
- package/dist/vectors/lokijs-vector.d.ts.map +1 -0
- package/dist/vectors/lokijs-vector.js +217 -0
- package/dist/vectors/lokijs-vector.js.map +1 -0
- package/dist/vectors/mariadb-vector.d.ts +56 -0
- package/dist/vectors/mariadb-vector.d.ts.map +1 -0
- package/dist/vectors/mariadb-vector.js +263 -0
- package/dist/vectors/mariadb-vector.js.map +1 -0
- package/dist/vectors/mysql-vector.d.ts +56 -0
- package/dist/vectors/mysql-vector.d.ts.map +1 -0
- package/dist/vectors/mysql-vector.js +235 -0
- package/dist/vectors/mysql-vector.js.map +1 -0
- package/dist/vectors/pgvector.d.ts +52 -0
- package/dist/vectors/pgvector.d.ts.map +1 -0
- package/dist/vectors/pgvector.js +190 -0
- package/dist/vectors/pgvector.js.map +1 -0
- package/dist/vectors/sqlite-vec.d.ts +80 -0
- package/dist/vectors/sqlite-vec.d.ts.map +1 -0
- package/dist/vectors/sqlite-vec.js +362 -0
- package/dist/vectors/sqlite-vec.js.map +1 -0
- package/package.json +64 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/query/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAC7E,YAAY,EACV,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,UAAU,EACV,aAAa,EACb,YAAY,EACZ,UAAU,GACX,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,sBAAsB,EACtB,4BAA4B,EAC5B,SAAS,GACV,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,cAAc,EACd,YAAY,EACZ,aAAa,GACd,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Query Layer Index
|
|
3
|
+
*
|
|
4
|
+
* Query building and transformation utilities.
|
|
5
|
+
*/
|
|
6
|
+
export { createQueryBuilder, createQueryBuilderForType } from './builder.js';
|
|
7
|
+
export { createRowTransformer, createAutoMapping, createEntryTransformer, createContentTypeTransformer, snakeCase, } from './transformer.js';
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/query/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAW7E,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,sBAAsB,EACtB,4BAA4B,EAC5B,SAAS,GACV,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Row Transformer
|
|
3
|
+
*
|
|
4
|
+
* Transforms SQL rows to/from LokiJS documents.
|
|
5
|
+
*/
|
|
6
|
+
import type { SQLProviderType } from '../types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Field mapping
|
|
9
|
+
*/
|
|
10
|
+
export interface FieldMapping {
|
|
11
|
+
/** SQL column name */
|
|
12
|
+
column: string;
|
|
13
|
+
/** Document field name */
|
|
14
|
+
field: string;
|
|
15
|
+
/** Transform function */
|
|
16
|
+
transform?: (value: unknown) => unknown;
|
|
17
|
+
/** Reverse transform function */
|
|
18
|
+
reverseTransform?: (value: unknown) => unknown;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Schema mapping
|
|
22
|
+
*/
|
|
23
|
+
export interface SchemaMapping {
|
|
24
|
+
/** Table name */
|
|
25
|
+
table: string;
|
|
26
|
+
/** Collection name */
|
|
27
|
+
collection: string;
|
|
28
|
+
/** Primary key column */
|
|
29
|
+
primaryKey: string;
|
|
30
|
+
/** Field mappings */
|
|
31
|
+
fields: FieldMapping[];
|
|
32
|
+
/** Auto-generated fields (timestamps, etc.) */
|
|
33
|
+
autoFields?: string[];
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Transformer interface
|
|
37
|
+
*/
|
|
38
|
+
export interface RowTransformer {
|
|
39
|
+
/** Transform SQL row to document */
|
|
40
|
+
toDocument(row: Record<string, unknown>): Record<string, unknown>;
|
|
41
|
+
/** Transform document to SQL row */
|
|
42
|
+
toRow(doc: Record<string, unknown>): Record<string, unknown>;
|
|
43
|
+
/** Get column names */
|
|
44
|
+
getColumns(): string[];
|
|
45
|
+
/** Get field names */
|
|
46
|
+
getFields(): string[];
|
|
47
|
+
/** Get primary key column */
|
|
48
|
+
getPrimaryKey(): string;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Create row transformer
|
|
52
|
+
*/
|
|
53
|
+
export declare function createRowTransformer(mapping: SchemaMapping, providerType: SQLProviderType): RowTransformer;
|
|
54
|
+
/**
|
|
55
|
+
* Create automatic field mapping from table info
|
|
56
|
+
*/
|
|
57
|
+
export declare function createAutoMapping(table: string, collection: string, columns: Array<{
|
|
58
|
+
name: string;
|
|
59
|
+
type: string;
|
|
60
|
+
primaryKey: boolean;
|
|
61
|
+
}>): SchemaMapping;
|
|
62
|
+
/**
|
|
63
|
+
* Convert camelCase to snake_case
|
|
64
|
+
*/
|
|
65
|
+
export declare function snakeCase(str: string): string;
|
|
66
|
+
/**
|
|
67
|
+
* Create transformer for LokiCMS entries
|
|
68
|
+
*/
|
|
69
|
+
export declare function createEntryTransformer(providerType: SQLProviderType, tablePrefix?: string): RowTransformer;
|
|
70
|
+
/**
|
|
71
|
+
* Create transformer for LokiCMS content types
|
|
72
|
+
*/
|
|
73
|
+
export declare function createContentTypeTransformer(providerType: SQLProviderType, tablePrefix?: string): RowTransformer;
|
|
74
|
+
//# sourceMappingURL=transformer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transformer.d.ts","sourceRoot":"","sources":["../../src/query/transformer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,sBAAsB;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,0BAA0B;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,yBAAyB;IACzB,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;IACxC,iCAAiC;IACjC,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;CAChD;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,iBAAiB;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,sBAAsB;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,yBAAyB;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,qBAAqB;IACrB,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,+CAA+C;IAC/C,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,oCAAoC;IACpC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAElE,oCAAoC;IACpC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE7D,uBAAuB;IACvB,UAAU,IAAI,MAAM,EAAE,CAAC;IAEvB,sBAAsB;IACtB,SAAS,IAAI,MAAM,EAAE,CAAC;IAEtB,6BAA6B;IAC7B,aAAa,IAAI,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,aAAa,EACtB,YAAY,EAAE,eAAe,GAC5B,cAAc,CA2FhB;AA4FD;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAE,CAAC,GAClE,aAAa,CAgBf;AASD;;GAEG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,YAAY,EAAE,eAAe,EAC7B,WAAW,GAAE,MAAmB,GAC/B,cAAc,CAoBhB;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAC1C,YAAY,EAAE,eAAe,EAC7B,WAAW,GAAE,MAAmB,GAC/B,cAAc,CAkBhB"}
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Row Transformer
|
|
3
|
+
*
|
|
4
|
+
* Transforms SQL rows to/from LokiJS documents.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Create row transformer
|
|
8
|
+
*/
|
|
9
|
+
export function createRowTransformer(mapping, providerType) {
|
|
10
|
+
const columnToField = new Map();
|
|
11
|
+
const fieldToColumn = new Map();
|
|
12
|
+
// Build lookup maps
|
|
13
|
+
for (const field of mapping.fields) {
|
|
14
|
+
columnToField.set(field.column, field);
|
|
15
|
+
fieldToColumn.set(field.field, field);
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Transform SQL row to document
|
|
19
|
+
*/
|
|
20
|
+
function toDocument(row) {
|
|
21
|
+
const doc = {};
|
|
22
|
+
for (const [column, value] of Object.entries(row)) {
|
|
23
|
+
const mapping = columnToField.get(column);
|
|
24
|
+
if (mapping) {
|
|
25
|
+
const transformedValue = mapping.transform
|
|
26
|
+
? mapping.transform(value)
|
|
27
|
+
: transformValue(value, providerType, 'toDocument');
|
|
28
|
+
doc[mapping.field] = transformedValue;
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
// No mapping, use column name as field name
|
|
32
|
+
doc[column] = transformValue(value, providerType, 'toDocument');
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return doc;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Transform document to SQL row
|
|
39
|
+
*/
|
|
40
|
+
function toRow(doc) {
|
|
41
|
+
const row = {};
|
|
42
|
+
for (const [field, value] of Object.entries(doc)) {
|
|
43
|
+
// Skip LokiJS internal fields
|
|
44
|
+
if (field.startsWith('$') || field === 'meta') {
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
const mapping = fieldToColumn.get(field);
|
|
48
|
+
if (mapping) {
|
|
49
|
+
const transformedValue = mapping.reverseTransform
|
|
50
|
+
? mapping.reverseTransform(value)
|
|
51
|
+
: transformValue(value, providerType, 'toRow');
|
|
52
|
+
row[mapping.column] = transformedValue;
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
// No mapping, use field name as column name
|
|
56
|
+
row[field] = transformValue(value, providerType, 'toRow');
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return row;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Get column names
|
|
63
|
+
*/
|
|
64
|
+
function getColumns() {
|
|
65
|
+
return mapping.fields.map((f) => f.column);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Get field names
|
|
69
|
+
*/
|
|
70
|
+
function getFields() {
|
|
71
|
+
return mapping.fields.map((f) => f.field);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Get primary key column
|
|
75
|
+
*/
|
|
76
|
+
function getPrimaryKey() {
|
|
77
|
+
return mapping.primaryKey;
|
|
78
|
+
}
|
|
79
|
+
return {
|
|
80
|
+
toDocument,
|
|
81
|
+
toRow,
|
|
82
|
+
getColumns,
|
|
83
|
+
getFields,
|
|
84
|
+
getPrimaryKey,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Transform value based on type and direction
|
|
89
|
+
*/
|
|
90
|
+
function transformValue(value, providerType, direction) {
|
|
91
|
+
if (value === null || value === undefined) {
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
if (direction === 'toDocument') {
|
|
95
|
+
// SQL → Document transformations
|
|
96
|
+
// Handle JSON strings
|
|
97
|
+
if (typeof value === 'string') {
|
|
98
|
+
// Try to parse as JSON if it looks like JSON
|
|
99
|
+
if ((value.startsWith('{') && value.endsWith('}')) ||
|
|
100
|
+
(value.startsWith('[') && value.endsWith(']'))) {
|
|
101
|
+
try {
|
|
102
|
+
return JSON.parse(value);
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
return value;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
// Handle Buffer/Blob to base64
|
|
110
|
+
if (Buffer.isBuffer(value)) {
|
|
111
|
+
return value.toString('base64');
|
|
112
|
+
}
|
|
113
|
+
// Handle BigInt
|
|
114
|
+
if (typeof value === 'bigint') {
|
|
115
|
+
return Number(value);
|
|
116
|
+
}
|
|
117
|
+
// Handle Date
|
|
118
|
+
if (value instanceof Date) {
|
|
119
|
+
return value.toISOString();
|
|
120
|
+
}
|
|
121
|
+
return value;
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
// Document → SQL transformations
|
|
125
|
+
// Handle objects/arrays to JSON
|
|
126
|
+
if (typeof value === 'object' && value !== null) {
|
|
127
|
+
if (Array.isArray(value) || Object.keys(value).length > 0) {
|
|
128
|
+
// PostgreSQL can use native JSONB
|
|
129
|
+
if (providerType === 'postgresql') {
|
|
130
|
+
return JSON.stringify(value);
|
|
131
|
+
}
|
|
132
|
+
// Other providers store as JSON string
|
|
133
|
+
return JSON.stringify(value);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
// Handle ISO date strings
|
|
137
|
+
if (typeof value === 'string') {
|
|
138
|
+
// Check if it's an ISO date string
|
|
139
|
+
const dateRegex = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/;
|
|
140
|
+
if (dateRegex.test(value)) {
|
|
141
|
+
// Keep as string for most providers
|
|
142
|
+
return value;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
// Handle base64 to Buffer
|
|
146
|
+
if (typeof value === 'string' && isBase64(value)) {
|
|
147
|
+
// Only convert if explicitly needed
|
|
148
|
+
return value;
|
|
149
|
+
}
|
|
150
|
+
return value;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Check if string is base64 encoded
|
|
155
|
+
*/
|
|
156
|
+
function isBase64(str) {
|
|
157
|
+
if (str.length < 16)
|
|
158
|
+
return false;
|
|
159
|
+
const base64Regex = /^[A-Za-z0-9+/]+=*$/;
|
|
160
|
+
return base64Regex.test(str);
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Create automatic field mapping from table info
|
|
164
|
+
*/
|
|
165
|
+
export function createAutoMapping(table, collection, columns) {
|
|
166
|
+
const primaryKey = columns.find((c) => c.primaryKey)?.name ?? 'id';
|
|
167
|
+
const fields = columns.map((col) => ({
|
|
168
|
+
column: col.name,
|
|
169
|
+
field: camelCase(col.name),
|
|
170
|
+
// Add type-specific transforms if needed
|
|
171
|
+
}));
|
|
172
|
+
return {
|
|
173
|
+
table,
|
|
174
|
+
collection,
|
|
175
|
+
primaryKey,
|
|
176
|
+
fields,
|
|
177
|
+
autoFields: ['created_at', 'updated_at'],
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Convert snake_case to camelCase
|
|
182
|
+
*/
|
|
183
|
+
function camelCase(str) {
|
|
184
|
+
return str.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Convert camelCase to snake_case
|
|
188
|
+
*/
|
|
189
|
+
export function snakeCase(str) {
|
|
190
|
+
return str.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`);
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Create transformer for LokiCMS entries
|
|
194
|
+
*/
|
|
195
|
+
export function createEntryTransformer(providerType, tablePrefix = 'lokicms_') {
|
|
196
|
+
const mapping = {
|
|
197
|
+
table: `${tablePrefix}entries`,
|
|
198
|
+
collection: 'entries',
|
|
199
|
+
primaryKey: 'id',
|
|
200
|
+
fields: [
|
|
201
|
+
{ column: 'id', field: 'id' },
|
|
202
|
+
{ column: 'content_type', field: 'contentType' },
|
|
203
|
+
{ column: 'data', field: 'data' },
|
|
204
|
+
{ column: 'status', field: 'status' },
|
|
205
|
+
{ column: 'locale', field: 'locale' },
|
|
206
|
+
{ column: 'created_at', field: 'createdAt' },
|
|
207
|
+
{ column: 'updated_at', field: 'updatedAt' },
|
|
208
|
+
{ column: 'published_at', field: 'publishedAt' },
|
|
209
|
+
{ column: 'created_by', field: 'createdBy' },
|
|
210
|
+
{ column: 'updated_by', field: 'updatedBy' },
|
|
211
|
+
],
|
|
212
|
+
};
|
|
213
|
+
return createRowTransformer(mapping, providerType);
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Create transformer for LokiCMS content types
|
|
217
|
+
*/
|
|
218
|
+
export function createContentTypeTransformer(providerType, tablePrefix = 'lokicms_') {
|
|
219
|
+
const mapping = {
|
|
220
|
+
table: `${tablePrefix}content_types`,
|
|
221
|
+
collection: 'contentTypes',
|
|
222
|
+
primaryKey: 'id',
|
|
223
|
+
fields: [
|
|
224
|
+
{ column: 'id', field: 'id' },
|
|
225
|
+
{ column: 'name', field: 'name' },
|
|
226
|
+
{ column: 'slug', field: 'slug' },
|
|
227
|
+
{ column: 'description', field: 'description' },
|
|
228
|
+
{ column: 'fields', field: 'fields' },
|
|
229
|
+
{ column: 'options', field: 'options' },
|
|
230
|
+
{ column: 'created_at', field: 'createdAt' },
|
|
231
|
+
{ column: 'updated_at', field: 'updatedAt' },
|
|
232
|
+
],
|
|
233
|
+
};
|
|
234
|
+
return createRowTransformer(mapping, providerType);
|
|
235
|
+
}
|
|
236
|
+
//# sourceMappingURL=transformer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transformer.js","sourceRoot":"","sources":["../../src/query/transformer.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,350 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LokiCMS SQL Plugin - Type Definitions
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Supported SQL providers
|
|
6
|
+
*/
|
|
7
|
+
export type SQLProviderType = 'postgresql' | 'mysql' | 'mariadb' | 'sqlite';
|
|
8
|
+
/**
|
|
9
|
+
* Vector storage providers (includes lokijs for in-memory)
|
|
10
|
+
*/
|
|
11
|
+
export type VectorProviderType = SQLProviderType | 'lokijs';
|
|
12
|
+
/**
|
|
13
|
+
* Connection mode
|
|
14
|
+
*/
|
|
15
|
+
export type ConnectionMode = 'readwrite' | 'readonly';
|
|
16
|
+
/**
|
|
17
|
+
* PostgreSQL connection config
|
|
18
|
+
*/
|
|
19
|
+
export interface PostgreSQLConnectionConfig {
|
|
20
|
+
connectionString?: string;
|
|
21
|
+
host?: string;
|
|
22
|
+
port?: number;
|
|
23
|
+
database?: string;
|
|
24
|
+
user?: string;
|
|
25
|
+
password?: string;
|
|
26
|
+
ssl?: boolean | {
|
|
27
|
+
rejectUnauthorized?: boolean;
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* MySQL/MariaDB connection config
|
|
32
|
+
*/
|
|
33
|
+
export interface MySQLConnectionConfig {
|
|
34
|
+
host: string;
|
|
35
|
+
port?: number;
|
|
36
|
+
database: string;
|
|
37
|
+
user: string;
|
|
38
|
+
password: string;
|
|
39
|
+
ssl?: boolean | object;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* SQLite connection config
|
|
43
|
+
*/
|
|
44
|
+
export interface SQLiteConnectionConfig {
|
|
45
|
+
filename: string;
|
|
46
|
+
readonly?: boolean;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Union of all connection configs
|
|
50
|
+
*/
|
|
51
|
+
export type ConnectionConfig = PostgreSQLConnectionConfig | MySQLConnectionConfig | SQLiteConnectionConfig;
|
|
52
|
+
/**
|
|
53
|
+
* Table to collection mapping
|
|
54
|
+
*/
|
|
55
|
+
export interface TableMapping {
|
|
56
|
+
/** Target LokiJS collection name */
|
|
57
|
+
collection: string;
|
|
58
|
+
/** Sync interval in minutes (for readonly sources) */
|
|
59
|
+
syncInterval?: number;
|
|
60
|
+
/** Primary key column (default: 'id') */
|
|
61
|
+
primaryKey?: string;
|
|
62
|
+
/** Transform function for rows */
|
|
63
|
+
transform?: (row: Record<string, unknown>) => Record<string, unknown>;
|
|
64
|
+
/** Columns to select (default: all) */
|
|
65
|
+
columns?: string[];
|
|
66
|
+
/** WHERE clause for filtering */
|
|
67
|
+
where?: string;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Source configuration (for data federation)
|
|
71
|
+
*/
|
|
72
|
+
export interface SourceConfig {
|
|
73
|
+
/** Unique source name */
|
|
74
|
+
name: string;
|
|
75
|
+
/** Provider type */
|
|
76
|
+
provider: SQLProviderType;
|
|
77
|
+
/** Connection mode (sources are typically readonly) */
|
|
78
|
+
mode: ConnectionMode;
|
|
79
|
+
/** Connection configuration */
|
|
80
|
+
connection: ConnectionConfig;
|
|
81
|
+
/** Table mappings */
|
|
82
|
+
tables: Record<string, TableMapping>;
|
|
83
|
+
/** Auto-sync enabled */
|
|
84
|
+
autoSync?: boolean;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Vector storage configuration
|
|
88
|
+
*/
|
|
89
|
+
export interface VectorConfig {
|
|
90
|
+
/** Provider for vector storage */
|
|
91
|
+
provider: VectorProviderType;
|
|
92
|
+
/** Connection (if not lokijs) */
|
|
93
|
+
connection?: ConnectionConfig;
|
|
94
|
+
/** Vector dimensions */
|
|
95
|
+
dimensions?: number;
|
|
96
|
+
/** Enable vector indexing */
|
|
97
|
+
enableIndex?: boolean;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Cache configuration
|
|
101
|
+
*/
|
|
102
|
+
export interface CacheConfig {
|
|
103
|
+
/** Enable caching */
|
|
104
|
+
enabled: boolean;
|
|
105
|
+
/** TTL in minutes */
|
|
106
|
+
ttlMinutes?: number;
|
|
107
|
+
/** Collections to cache (empty = all) */
|
|
108
|
+
collections?: string[];
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Main plugin configuration
|
|
112
|
+
*/
|
|
113
|
+
export interface SQLPluginConfig {
|
|
114
|
+
/** Primary data source */
|
|
115
|
+
primary?: {
|
|
116
|
+
provider: SQLProviderType;
|
|
117
|
+
mode: ConnectionMode;
|
|
118
|
+
connection: ConnectionConfig;
|
|
119
|
+
};
|
|
120
|
+
/** Additional readonly sources */
|
|
121
|
+
sources?: SourceConfig[];
|
|
122
|
+
/** Vector storage configuration */
|
|
123
|
+
vectors?: VectorConfig;
|
|
124
|
+
/** Cache configuration */
|
|
125
|
+
cache?: CacheConfig;
|
|
126
|
+
/** Table prefix for LokiCMS tables */
|
|
127
|
+
tablePrefix?: string;
|
|
128
|
+
/** Enable debug logging */
|
|
129
|
+
debug?: boolean;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Database capabilities
|
|
133
|
+
*/
|
|
134
|
+
export interface ProviderCapabilities {
|
|
135
|
+
/** Supports JSONB/JSON columns */
|
|
136
|
+
json: boolean;
|
|
137
|
+
/** Supports vector data type */
|
|
138
|
+
vectors: boolean;
|
|
139
|
+
/** Vector extension/version info */
|
|
140
|
+
vectorInfo?: string;
|
|
141
|
+
/** Supports full-text search */
|
|
142
|
+
fullText: boolean;
|
|
143
|
+
/** Full-text method (tsvector, FULLTEXT, FTS5) */
|
|
144
|
+
fullTextMethod?: string;
|
|
145
|
+
/** Supports transactions */
|
|
146
|
+
transactions: boolean;
|
|
147
|
+
/** Max connections */
|
|
148
|
+
maxConnections?: number;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Query result
|
|
152
|
+
*/
|
|
153
|
+
export interface QueryResult<T = Record<string, unknown>> {
|
|
154
|
+
rows: T[];
|
|
155
|
+
rowCount: number;
|
|
156
|
+
fields?: Array<{
|
|
157
|
+
name: string;
|
|
158
|
+
dataType: string;
|
|
159
|
+
}>;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Provider status
|
|
163
|
+
*/
|
|
164
|
+
export interface ProviderStatus {
|
|
165
|
+
connected: boolean;
|
|
166
|
+
provider: SQLProviderType;
|
|
167
|
+
version?: string;
|
|
168
|
+
database?: string;
|
|
169
|
+
mode: ConnectionMode;
|
|
170
|
+
capabilities: ProviderCapabilities;
|
|
171
|
+
error?: string;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Vector entry
|
|
175
|
+
*/
|
|
176
|
+
export interface VectorEntry {
|
|
177
|
+
id: string;
|
|
178
|
+
entryId: string;
|
|
179
|
+
collection: string;
|
|
180
|
+
vector: number[];
|
|
181
|
+
textHash: string;
|
|
182
|
+
createdAt: number;
|
|
183
|
+
updatedAt: number;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Vector search options
|
|
187
|
+
*/
|
|
188
|
+
export interface VectorSearchOptions {
|
|
189
|
+
limit?: number;
|
|
190
|
+
collection?: string;
|
|
191
|
+
minSimilarity?: number;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Vector search result
|
|
195
|
+
*/
|
|
196
|
+
export interface VectorSearchResult {
|
|
197
|
+
id: string;
|
|
198
|
+
entryId: string;
|
|
199
|
+
collection: string;
|
|
200
|
+
similarity: number;
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Sync result
|
|
204
|
+
*/
|
|
205
|
+
export interface SyncResult {
|
|
206
|
+
success: boolean;
|
|
207
|
+
source: string;
|
|
208
|
+
table: string;
|
|
209
|
+
collection: string;
|
|
210
|
+
inserted: number;
|
|
211
|
+
updated: number;
|
|
212
|
+
deleted: number;
|
|
213
|
+
errors: string[];
|
|
214
|
+
duration: number;
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Import options
|
|
218
|
+
*/
|
|
219
|
+
export interface ImportOptions {
|
|
220
|
+
/** Source name */
|
|
221
|
+
source: string;
|
|
222
|
+
/** Table to import */
|
|
223
|
+
table?: string;
|
|
224
|
+
/** Full refresh (delete existing) */
|
|
225
|
+
fullRefresh?: boolean;
|
|
226
|
+
/** Batch size */
|
|
227
|
+
batchSize?: number;
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Cache entry
|
|
231
|
+
*/
|
|
232
|
+
export interface CacheEntry {
|
|
233
|
+
key: string;
|
|
234
|
+
value: unknown;
|
|
235
|
+
expiresAt: number;
|
|
236
|
+
createdAt: number;
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Cache stats
|
|
240
|
+
*/
|
|
241
|
+
export interface CacheStats {
|
|
242
|
+
enabled: boolean;
|
|
243
|
+
entries: number;
|
|
244
|
+
size: number;
|
|
245
|
+
hits: number;
|
|
246
|
+
misses: number;
|
|
247
|
+
ttlMinutes: number;
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Column info
|
|
251
|
+
*/
|
|
252
|
+
export interface ColumnInfo {
|
|
253
|
+
name: string;
|
|
254
|
+
type: string;
|
|
255
|
+
nullable: boolean;
|
|
256
|
+
primaryKey: boolean;
|
|
257
|
+
defaultValue?: unknown;
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Table info
|
|
261
|
+
*/
|
|
262
|
+
export interface TableInfo {
|
|
263
|
+
name: string;
|
|
264
|
+
schema?: string;
|
|
265
|
+
columns: ColumnInfo[];
|
|
266
|
+
rowCount?: number;
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Database schema
|
|
270
|
+
*/
|
|
271
|
+
export interface DatabaseSchema {
|
|
272
|
+
tables: TableInfo[];
|
|
273
|
+
views?: string[];
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Logger interface
|
|
277
|
+
*/
|
|
278
|
+
export interface PluginLogger {
|
|
279
|
+
info(message: string, ...args: unknown[]): void;
|
|
280
|
+
warn(message: string, ...args: unknown[]): void;
|
|
281
|
+
error(message: string, ...args: unknown[]): void;
|
|
282
|
+
debug(message: string, ...args: unknown[]): void;
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* MCP Tool definition
|
|
286
|
+
*/
|
|
287
|
+
export interface McpToolDefinition {
|
|
288
|
+
description: string;
|
|
289
|
+
inputSchema: unknown;
|
|
290
|
+
handler(input: unknown): Promise<unknown>;
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* MCP Tools registry
|
|
294
|
+
*/
|
|
295
|
+
export interface McpTools {
|
|
296
|
+
registerTool(name: string, tool: McpToolDefinition): void;
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* Plugin hooks
|
|
300
|
+
*/
|
|
301
|
+
export interface PluginHooks {
|
|
302
|
+
on(event: string, callback: (...args: unknown[]) => void): void;
|
|
303
|
+
emit(event: string, ...args: unknown[]): void;
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* Plugin API
|
|
307
|
+
*/
|
|
308
|
+
export interface PluginAPI {
|
|
309
|
+
config: Record<string, unknown>;
|
|
310
|
+
logger: PluginLogger;
|
|
311
|
+
hooks: PluginHooks;
|
|
312
|
+
mcp: McpTools;
|
|
313
|
+
services: {
|
|
314
|
+
entries: unknown;
|
|
315
|
+
contentTypes: unknown;
|
|
316
|
+
[key: string]: unknown;
|
|
317
|
+
};
|
|
318
|
+
}
|
|
319
|
+
/**
|
|
320
|
+
* Plugin definition
|
|
321
|
+
*/
|
|
322
|
+
export interface PluginDefinition {
|
|
323
|
+
name: string;
|
|
324
|
+
version: string;
|
|
325
|
+
description: string;
|
|
326
|
+
register(api: PluginAPI): Promise<void>;
|
|
327
|
+
}
|
|
328
|
+
/** Supported providers */
|
|
329
|
+
export declare const SQL_PROVIDERS: readonly SQLProviderType[];
|
|
330
|
+
/** Vector providers */
|
|
331
|
+
export declare const VECTOR_PROVIDERS: readonly VectorProviderType[];
|
|
332
|
+
/** Default table prefix */
|
|
333
|
+
export declare const DEFAULT_TABLE_PREFIX = "lokicms_";
|
|
334
|
+
/** Default vector dimensions */
|
|
335
|
+
export declare const DEFAULT_VECTOR_DIMENSIONS = 384;
|
|
336
|
+
/** Default cache TTL */
|
|
337
|
+
export declare const DEFAULT_CACHE_TTL = 60;
|
|
338
|
+
/**
|
|
339
|
+
* SQL error codes
|
|
340
|
+
*/
|
|
341
|
+
export type SQLErrorCode = 'NOT_CONFIGURED' | 'CONNECTION_FAILED' | 'QUERY_FAILED' | 'PROVIDER_NOT_FOUND' | 'SOURCE_NOT_FOUND' | 'SYNC_FAILED' | 'VECTOR_NOT_SUPPORTED' | 'READONLY_SOURCE' | 'INVALID_CONFIG';
|
|
342
|
+
/**
|
|
343
|
+
* SQL error
|
|
344
|
+
*/
|
|
345
|
+
export declare class SQLError extends Error {
|
|
346
|
+
code: SQLErrorCode;
|
|
347
|
+
details?: Record<string, unknown> | undefined;
|
|
348
|
+
constructor(message: string, code: SQLErrorCode, details?: Record<string, unknown> | undefined);
|
|
349
|
+
}
|
|
350
|
+
//# sourceMappingURL=types.d.ts.map
|