@coherent.js/core 1.0.0-beta.2 → 1.0.0-beta.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/dist/coherent.d.ts +10 -150
- package/dist/coherent.d.ts.map +1 -1
- package/dist/coherent.js +33 -166
- package/dist/coherent.js.map +1 -1
- package/dist/components/component-system.js +109 -109
- package/dist/core/html-utils.js +5 -5
- package/dist/core/object-factory.js +21 -21
- package/dist/core/object-utils.js +2 -2
- package/dist/database/adapters/mongodb.d.ts +15 -0
- package/dist/database/adapters/mongodb.d.ts.map +1 -0
- package/dist/database/adapters/mongodb.js +216 -0
- package/dist/database/adapters/mongodb.js.map +1 -0
- package/dist/database/adapters/mysql.d.ts +12 -0
- package/dist/database/adapters/mysql.d.ts.map +1 -0
- package/dist/database/adapters/mysql.js +171 -0
- package/dist/database/adapters/mysql.js.map +1 -0
- package/dist/database/adapters/postgresql.d.ts +12 -0
- package/dist/database/adapters/postgresql.d.ts.map +1 -0
- package/dist/database/adapters/postgresql.js +177 -0
- package/dist/database/adapters/postgresql.js.map +1 -0
- package/dist/database/adapters/sqlite.d.ts +15 -0
- package/dist/database/adapters/sqlite.d.ts.map +1 -0
- package/dist/database/adapters/sqlite.js +241 -0
- package/dist/database/adapters/sqlite.js.map +1 -0
- package/dist/database/connection-manager.d.ts +135 -0
- package/dist/database/connection-manager.d.ts.map +1 -0
- package/dist/database/connection-manager.js +362 -0
- package/dist/database/connection-manager.js.map +1 -0
- package/dist/database/index.d.ts +38 -0
- package/dist/database/index.d.ts.map +1 -0
- package/dist/database/index.js +60 -0
- package/dist/database/index.js.map +1 -0
- package/dist/database/middleware.d.ts +122 -0
- package/dist/database/middleware.d.ts.map +1 -0
- package/dist/database/middleware.js +390 -0
- package/dist/database/middleware.js.map +1 -0
- package/dist/database/migration.d.ts +62 -0
- package/dist/database/migration.d.ts.map +1 -0
- package/dist/database/migration.js +423 -0
- package/dist/database/migration.js.map +1 -0
- package/dist/database/model.d.ts +8 -0
- package/dist/database/model.d.ts.map +1 -0
- package/dist/database/model.js +167 -0
- package/dist/database/model.js.map +1 -0
- package/dist/database/query-builder.d.ts +111 -0
- package/dist/database/query-builder.d.ts.map +1 -0
- package/dist/database/query-builder.js +187 -0
- package/dist/database/query-builder.js.map +1 -0
- package/dist/database/utils.d.ts +196 -0
- package/dist/database/utils.d.ts.map +1 -0
- package/dist/database/utils.js +372 -0
- package/dist/database/utils.js.map +1 -0
- package/dist/dev/dev-tools.d.ts +1 -1
- package/dist/dev/dev-tools.js +28 -28
- package/dist/index.cjs +2 -1
- package/dist/index.cjs.map +2 -2
- package/dist/index.js +2 -1
- package/dist/index.js.map +2 -2
- package/dist/performance/bundle-optimizer.js +11 -11
- package/dist/performance/cache-manager.js +6 -6
- package/dist/performance/monitor.js +10 -10
- package/dist/performance/monitor.js.map +1 -1
- package/dist/rendering/base-renderer.js +13 -13
- package/dist/rendering/dom-renderer.d.ts +0 -23
- package/dist/rendering/dom-renderer.d.ts.map +1 -1
- package/dist/rendering/dom-renderer.js +9 -77
- package/dist/rendering/dom-renderer.js.map +1 -1
- package/dist/rendering/html-renderer.d.ts +0 -15
- package/dist/rendering/html-renderer.d.ts.map +1 -1
- package/dist/rendering/html-renderer.js +4 -85
- package/dist/rendering/html-renderer.js.map +1 -1
- package/dist/rendering/streaming-renderer.js +12 -12
- package/dist/utils/dependency-utils.js +2 -2
- package/dist/utils/normalization.js +1 -1
- package/dist/utils/validation.js +1 -1
- package/package.json +22 -1
- package/dist/components/lifecycle.d.ts +0 -212
- package/dist/components/lifecycle.d.ts.map +0 -1
- package/dist/components/lifecycle.js +0 -525
- package/dist/components/lifecycle.js.map +0 -1
- package/dist/forms/validation.d.ts +0 -271
- package/dist/forms/validation.d.ts.map +0 -1
- package/dist/forms/validation.js +0 -573
- package/dist/forms/validation.js.map +0 -1
- package/dist/performance/component-cache.d.ts +0 -120
- package/dist/performance/component-cache.d.ts.map +0 -1
- package/dist/performance/component-cache.js +0 -364
- package/dist/performance/component-cache.js.map +0 -1
- package/dist/rendering/css-manager.d.ts +0 -73
- package/dist/rendering/css-manager.d.ts.map +0 -1
- package/dist/rendering/css-manager.js +0 -176
- package/dist/rendering/css-manager.js.map +0 -1
- package/dist/rendering/vdom-diff.d.ts +0 -47
- package/dist/rendering/vdom-diff.d.ts.map +0 -1
- package/dist/rendering/vdom-diff.js +0 -416
- package/dist/rendering/vdom-diff.js.map +0 -1
- package/dist/routing/router.d.ts +0 -241
- package/dist/routing/router.d.ts.map +0 -1
- package/dist/routing/router.js +0 -648
- package/dist/routing/router.js.map +0 -1
- package/dist/state/reactive-state.d.ts +0 -166
- package/dist/state/reactive-state.d.ts.map +0 -1
- package/dist/state/reactive-state.js +0 -546
- package/dist/state/reactive-state.js.map +0 -1
- package/dist/utils/error-handler.d.ts +0 -148
- package/dist/utils/error-handler.d.ts.map +0 -1
- package/dist/utils/error-handler.js +0 -468
- package/dist/utils/error-handler.js.map +0 -1
|
@@ -38,26 +38,26 @@ export function createTextNode(text) {
|
|
|
38
38
|
* Helper function to create common elements
|
|
39
39
|
*/
|
|
40
40
|
export const h = {
|
|
41
|
-
div: (
|
|
42
|
-
span: (
|
|
43
|
-
p: (
|
|
44
|
-
h1: (
|
|
45
|
-
h2: (
|
|
46
|
-
h3: (
|
|
47
|
-
h4: (
|
|
48
|
-
h5: (
|
|
49
|
-
h6: (
|
|
50
|
-
a: (
|
|
51
|
-
img: (
|
|
52
|
-
button: (
|
|
53
|
-
input: (
|
|
54
|
-
form: (
|
|
55
|
-
ul: (
|
|
56
|
-
ol: (
|
|
57
|
-
li: (
|
|
58
|
-
table: (
|
|
59
|
-
tr: (
|
|
60
|
-
td: (
|
|
61
|
-
th: (
|
|
41
|
+
div: (props) => createElement('div', props),
|
|
42
|
+
span: (props) => createElement('span', props),
|
|
43
|
+
p: (props) => createElement('p', props),
|
|
44
|
+
h1: (props) => createElement('h1', props),
|
|
45
|
+
h2: (props) => createElement('h2', props),
|
|
46
|
+
h3: (props) => createElement('h3', props),
|
|
47
|
+
h4: (props) => createElement('h4', props),
|
|
48
|
+
h5: (props) => createElement('h5', props),
|
|
49
|
+
h6: (props) => createElement('h6', props),
|
|
50
|
+
a: (props) => createElement('a', props),
|
|
51
|
+
img: (props) => createElement('img', props),
|
|
52
|
+
button: (props) => createElement('button', props),
|
|
53
|
+
input: (props) => createElement('input', props),
|
|
54
|
+
form: (props) => createElement('form', props),
|
|
55
|
+
ul: (props) => createElement('ul', props),
|
|
56
|
+
ol: (props) => createElement('ol', props),
|
|
57
|
+
li: (props) => createElement('li', props),
|
|
58
|
+
table: (props) => createElement('table', props),
|
|
59
|
+
tr: (props) => createElement('tr', props),
|
|
60
|
+
td: (props) => createElement('td', props),
|
|
61
|
+
th: (props) => createElement('th', props)
|
|
62
62
|
};
|
|
63
63
|
//# sourceMappingURL=object-factory.js.map
|
|
@@ -156,7 +156,7 @@ export function smartClone(obj, maxDepth = 10, currentDepth = 0) {
|
|
|
156
156
|
};
|
|
157
157
|
}
|
|
158
158
|
else {
|
|
159
|
-
cloned[tag] = shallowClone(
|
|
159
|
+
cloned[tag] = shallowClone(props);
|
|
160
160
|
}
|
|
161
161
|
}
|
|
162
162
|
else {
|
|
@@ -333,7 +333,7 @@ export function normalizeChildren(children) {
|
|
|
333
333
|
/**
|
|
334
334
|
* Get children from a component's props
|
|
335
335
|
*/
|
|
336
|
-
export function getChildren(
|
|
336
|
+
export function getChildren(props) {
|
|
337
337
|
if (!props || typeof props !== 'object') {
|
|
338
338
|
return [];
|
|
339
339
|
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MongoDB Database Adapter for Coherent.js
|
|
3
|
+
*
|
|
4
|
+
* @fileoverview MongoDB adapter implementation with connection pooling and document operations.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Create a new MongoDB adapter instance
|
|
8
|
+
*
|
|
9
|
+
* @returns {Object} MongoDB adapter instance with database operations
|
|
10
|
+
*/
|
|
11
|
+
export function createMongoDBAdapter(): Object;
|
|
12
|
+
export namespace MongoDBAdapter {
|
|
13
|
+
export { createMongoDBAdapter as create };
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=mongodb.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mongodb.d.ts","sourceRoot":"","sources":["../../../../../src/database/adapters/mongodb.js"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;GAIG;AACH,wCAFa,MAAM,CA8NlB"}
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MongoDB Database Adapter for Coherent.js
|
|
3
|
+
*
|
|
4
|
+
* @fileoverview MongoDB adapter implementation with connection pooling and document operations.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Create a new MongoDB adapter instance
|
|
8
|
+
*
|
|
9
|
+
* @returns {Object} MongoDB adapter instance with database operations
|
|
10
|
+
*/
|
|
11
|
+
export function createMongoDBAdapter() {
|
|
12
|
+
let mongodb = null;
|
|
13
|
+
let client = null;
|
|
14
|
+
let db = null;
|
|
15
|
+
/**
|
|
16
|
+
* Initialize MongoDB module
|
|
17
|
+
*
|
|
18
|
+
* @private
|
|
19
|
+
* @returns {Promise<void>}
|
|
20
|
+
*/
|
|
21
|
+
async function initializeMongoDB() {
|
|
22
|
+
if (!mongodb) {
|
|
23
|
+
try {
|
|
24
|
+
const mongoModule = await import('mongodb');
|
|
25
|
+
mongodb = mongoModule;
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
throw new Error('Failed to load mongodb module. Make sure to install it: npm install mongodb');
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Connect to the database
|
|
34
|
+
*
|
|
35
|
+
* @param {Object} config - Database configuration
|
|
36
|
+
* @param {string} config.url - MongoDB connection URL
|
|
37
|
+
* @param {string} config.database - Database name
|
|
38
|
+
* @param {Object} [config.options] - MongoDB client options
|
|
39
|
+
* @returns {Promise<Object>} The database adapter instance
|
|
40
|
+
*/
|
|
41
|
+
async function connect(config) {
|
|
42
|
+
await initializeMongoDB();
|
|
43
|
+
try {
|
|
44
|
+
client = new mongodb.MongoClient(config.url, config.options || {});
|
|
45
|
+
await client.connect();
|
|
46
|
+
db = client.db(config.database);
|
|
47
|
+
return instance;
|
|
48
|
+
}
|
|
49
|
+
catch (_error) {
|
|
50
|
+
throw new Error(`Failed to connect to MongoDB: ${_error.message}`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Execute a query on a collection
|
|
55
|
+
*
|
|
56
|
+
* @param {string} collectionName - Name of the collection
|
|
57
|
+
* @param {Object} query - Query object
|
|
58
|
+
* @param {Object} [options] - Query options
|
|
59
|
+
* @returns {Promise<Array<Object>>} Query results
|
|
60
|
+
*/
|
|
61
|
+
async function query(collectionName, query = {}, options = {}) {
|
|
62
|
+
if (!db) {
|
|
63
|
+
throw new Error('Database connection not established. Call connect() first.');
|
|
64
|
+
}
|
|
65
|
+
try {
|
|
66
|
+
const collection = db.collection(collectionName);
|
|
67
|
+
const cursor = collection.find(query, options);
|
|
68
|
+
if (options.sort) {
|
|
69
|
+
cursor.sort(options.sort);
|
|
70
|
+
}
|
|
71
|
+
if (options.limit) {
|
|
72
|
+
cursor.limit(options.limit);
|
|
73
|
+
}
|
|
74
|
+
if (options.skip) {
|
|
75
|
+
cursor.skip(options.skip);
|
|
76
|
+
}
|
|
77
|
+
if (options.projection) {
|
|
78
|
+
cursor.project(options.projection);
|
|
79
|
+
}
|
|
80
|
+
return cursor.toArray();
|
|
81
|
+
}
|
|
82
|
+
catch (_error) {
|
|
83
|
+
throw new Error(`MongoDB query _error: ${_error.message}`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Execute a database command
|
|
88
|
+
*
|
|
89
|
+
* @param {Object} command - Database command
|
|
90
|
+
* @returns {Promise<Object>} Command result
|
|
91
|
+
*/
|
|
92
|
+
async function execute(command) {
|
|
93
|
+
if (!db) {
|
|
94
|
+
throw new Error('Database connection not established. Call connect() first.');
|
|
95
|
+
}
|
|
96
|
+
try {
|
|
97
|
+
return await db.command(command);
|
|
98
|
+
}
|
|
99
|
+
catch (_error) {
|
|
100
|
+
throw new Error(`MongoDB command _error: ${_error.message}`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Begin a transaction
|
|
105
|
+
*
|
|
106
|
+
* @returns {Promise<Object>} Session object for the transaction
|
|
107
|
+
*/
|
|
108
|
+
async function beginTransaction() {
|
|
109
|
+
if (!client) {
|
|
110
|
+
throw new Error('Database connection not established. Call connect() first.');
|
|
111
|
+
}
|
|
112
|
+
const session = client.startSession();
|
|
113
|
+
session.startTransaction();
|
|
114
|
+
return session;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Commit a transaction
|
|
118
|
+
*
|
|
119
|
+
* @param {Object} session - The session object from beginTransaction
|
|
120
|
+
* @returns {Promise<void>}
|
|
121
|
+
*/
|
|
122
|
+
async function commit(session) {
|
|
123
|
+
if (!session) {
|
|
124
|
+
throw new Error('No active transaction session');
|
|
125
|
+
}
|
|
126
|
+
try {
|
|
127
|
+
await session.commitTransaction();
|
|
128
|
+
}
|
|
129
|
+
finally {
|
|
130
|
+
await session.endSession();
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Rollback a transaction
|
|
135
|
+
*
|
|
136
|
+
* @param {Object} session - The session object from beginTransaction
|
|
137
|
+
* @returns {Promise<void>}
|
|
138
|
+
*/
|
|
139
|
+
async function rollback(session) {
|
|
140
|
+
if (!session) {
|
|
141
|
+
throw new Error('No active transaction session');
|
|
142
|
+
}
|
|
143
|
+
try {
|
|
144
|
+
await session.abortTransaction();
|
|
145
|
+
}
|
|
146
|
+
finally {
|
|
147
|
+
await session.endSession();
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Disconnect from the database
|
|
152
|
+
*
|
|
153
|
+
* @returns {Promise<void>}
|
|
154
|
+
*/
|
|
155
|
+
async function disconnect() {
|
|
156
|
+
if (client) {
|
|
157
|
+
await client.close();
|
|
158
|
+
client = null;
|
|
159
|
+
db = null;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Get the underlying database connection
|
|
164
|
+
*
|
|
165
|
+
* @returns {Object} The database connection
|
|
166
|
+
*/
|
|
167
|
+
function getConnection() {
|
|
168
|
+
if (!db) {
|
|
169
|
+
throw new Error('Database connection not established. Call connect() first.');
|
|
170
|
+
}
|
|
171
|
+
return db;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Ping the database to check if connection is alive
|
|
175
|
+
*
|
|
176
|
+
* @returns {Promise<boolean>} True if connection is alive
|
|
177
|
+
*/
|
|
178
|
+
async function ping() {
|
|
179
|
+
try {
|
|
180
|
+
await db.command({ ping: 1 });
|
|
181
|
+
return true;
|
|
182
|
+
}
|
|
183
|
+
catch {
|
|
184
|
+
return false;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Escape a value for MongoDB queries
|
|
189
|
+
*
|
|
190
|
+
* @param {*} value - Value to escape
|
|
191
|
+
* @returns {*} Escaped value
|
|
192
|
+
*/
|
|
193
|
+
function escape(value) {
|
|
194
|
+
// MongoDB driver handles escaping internally
|
|
195
|
+
return value;
|
|
196
|
+
}
|
|
197
|
+
// Public API
|
|
198
|
+
const instance = {
|
|
199
|
+
connect,
|
|
200
|
+
query,
|
|
201
|
+
execute,
|
|
202
|
+
beginTransaction,
|
|
203
|
+
commit,
|
|
204
|
+
rollback,
|
|
205
|
+
disconnect,
|
|
206
|
+
getConnection,
|
|
207
|
+
ping,
|
|
208
|
+
escape,
|
|
209
|
+
// Alias for backward compatibility
|
|
210
|
+
run: execute
|
|
211
|
+
};
|
|
212
|
+
return instance;
|
|
213
|
+
}
|
|
214
|
+
// For backward compatibility
|
|
215
|
+
export const MongoDBAdapter = { create: createMongoDBAdapter };
|
|
216
|
+
//# sourceMappingURL=mongodb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mongodb.js","sourceRoot":"","sources":["../../../../../src/database/adapters/mongodb.js"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MySQL Database Adapter for Coherent.js
|
|
3
|
+
*
|
|
4
|
+
* @fileoverview MySQL adapter implementation with connection pooling and transaction support.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Create MySQL adapter instance
|
|
8
|
+
*
|
|
9
|
+
* @returns {Object} MySQL adapter instance
|
|
10
|
+
*/
|
|
11
|
+
export function createMySQLAdapter(): Object;
|
|
12
|
+
//# sourceMappingURL=mysql.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mysql.d.ts","sourceRoot":"","sources":["../../../../../src/database/adapters/mysql.js"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;GAIG;AACH,sCAFa,MAAM,CAmLlB"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MySQL Database Adapter for Coherent.js
|
|
3
|
+
*
|
|
4
|
+
* @fileoverview MySQL adapter implementation with connection pooling and transaction support.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Create MySQL adapter instance
|
|
8
|
+
*
|
|
9
|
+
* @returns {Object} MySQL adapter instance
|
|
10
|
+
*/
|
|
11
|
+
export function createMySQLAdapter() {
|
|
12
|
+
let mysql = null;
|
|
13
|
+
async function initializeMySQL() {
|
|
14
|
+
if (!mysql) {
|
|
15
|
+
try {
|
|
16
|
+
const mysqlModule = await import('mysql2/promise');
|
|
17
|
+
mysql = mysqlModule.default || mysqlModule;
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
throw new Error('mysql2 package is required for MySQL adapter. Install with: npm install mysql2');
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return {
|
|
25
|
+
/**
|
|
26
|
+
* Create connection pool
|
|
27
|
+
*/
|
|
28
|
+
async createPool(config) {
|
|
29
|
+
await initializeMySQL();
|
|
30
|
+
const poolConfig = {
|
|
31
|
+
host: config.host,
|
|
32
|
+
port: config.port,
|
|
33
|
+
database: config.database,
|
|
34
|
+
user: config.username,
|
|
35
|
+
password: config.password,
|
|
36
|
+
connectionLimit: config.pool.max,
|
|
37
|
+
acquireTimeout: config.pool.acquireTimeoutMillis,
|
|
38
|
+
timeout: config.pool.createTimeoutMillis,
|
|
39
|
+
reconnect: true,
|
|
40
|
+
charset: 'utf8mb4',
|
|
41
|
+
timezone: 'Z'
|
|
42
|
+
};
|
|
43
|
+
const pool = mysql.createPool(poolConfig);
|
|
44
|
+
return pool;
|
|
45
|
+
},
|
|
46
|
+
/**
|
|
47
|
+
* Test database connection
|
|
48
|
+
*/
|
|
49
|
+
async testConnection(pool) {
|
|
50
|
+
const connection = await pool.getConnection();
|
|
51
|
+
try {
|
|
52
|
+
await connection.query('SELECT 1');
|
|
53
|
+
}
|
|
54
|
+
finally {
|
|
55
|
+
connection.release();
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
/**
|
|
59
|
+
* Execute database query
|
|
60
|
+
*/
|
|
61
|
+
async query(pool, sql, params = [], options = {}) {
|
|
62
|
+
const connection = await pool.getConnection();
|
|
63
|
+
try {
|
|
64
|
+
const [rows] = await connection.execute(sql, params);
|
|
65
|
+
if (options.single) {
|
|
66
|
+
return Array.isArray(rows) ? rows[0] || null : rows;
|
|
67
|
+
}
|
|
68
|
+
if (Array.isArray(rows)) {
|
|
69
|
+
return {
|
|
70
|
+
rows,
|
|
71
|
+
rowCount: rows.length,
|
|
72
|
+
affectedRows: rows.affectedRows || rows.length,
|
|
73
|
+
insertId: rows.insertId || null
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
return {
|
|
78
|
+
rows: [],
|
|
79
|
+
rowCount: rows.affectedRows || 0,
|
|
80
|
+
affectedRows: rows.affectedRows || 0,
|
|
81
|
+
insertId: rows.insertId || null
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
finally {
|
|
86
|
+
connection.release();
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
/**
|
|
90
|
+
* Start database transaction
|
|
91
|
+
*/
|
|
92
|
+
async transaction(pool) {
|
|
93
|
+
const connection = await pool.getConnection();
|
|
94
|
+
await connection.beginTransaction();
|
|
95
|
+
const transaction = {
|
|
96
|
+
connection,
|
|
97
|
+
pool,
|
|
98
|
+
isCommitted: false,
|
|
99
|
+
isRolledBack: false,
|
|
100
|
+
query: async (sql, params, queryOptions) => {
|
|
101
|
+
if (transaction.isCommitted || transaction.isRolledBack) {
|
|
102
|
+
throw new Error('Cannot execute query on completed transaction');
|
|
103
|
+
}
|
|
104
|
+
const [rows] = await connection.execute(sql, params);
|
|
105
|
+
if (queryOptions && queryOptions.single) {
|
|
106
|
+
return Array.isArray(rows) ? rows[0] || null : rows;
|
|
107
|
+
}
|
|
108
|
+
if (Array.isArray(rows)) {
|
|
109
|
+
return {
|
|
110
|
+
rows,
|
|
111
|
+
rowCount: rows.length,
|
|
112
|
+
affectedRows: rows.affectedRows || rows.length,
|
|
113
|
+
insertId: rows.insertId || null
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
return {
|
|
118
|
+
rows: [],
|
|
119
|
+
rowCount: rows.affectedRows || 0,
|
|
120
|
+
affectedRows: rows.affectedRows || 0,
|
|
121
|
+
insertId: rows.insertId || null
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
},
|
|
125
|
+
commit: async () => {
|
|
126
|
+
if (transaction.isCommitted || transaction.isRolledBack) {
|
|
127
|
+
throw new Error('Transaction already completed');
|
|
128
|
+
}
|
|
129
|
+
try {
|
|
130
|
+
await connection.commit();
|
|
131
|
+
transaction.isCommitted = true;
|
|
132
|
+
}
|
|
133
|
+
finally {
|
|
134
|
+
connection.release();
|
|
135
|
+
}
|
|
136
|
+
},
|
|
137
|
+
rollback: async () => {
|
|
138
|
+
if (transaction.isCommitted || transaction.isRolledBack) {
|
|
139
|
+
throw new Error('Transaction already completed');
|
|
140
|
+
}
|
|
141
|
+
try {
|
|
142
|
+
await connection.rollback();
|
|
143
|
+
transaction.isRolledBack = true;
|
|
144
|
+
}
|
|
145
|
+
finally {
|
|
146
|
+
connection.release();
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
};
|
|
150
|
+
return transaction;
|
|
151
|
+
},
|
|
152
|
+
/**
|
|
153
|
+
* Get pool statistics
|
|
154
|
+
*/
|
|
155
|
+
getPoolStats(pool) {
|
|
156
|
+
return {
|
|
157
|
+
total: pool.config.connectionLimit,
|
|
158
|
+
available: pool._freeConnections ? pool._freeConnections.length : 0,
|
|
159
|
+
acquired: pool._allConnections ? pool._allConnections.length - (pool._freeConnections ? pool._freeConnections.length : 0) : 0,
|
|
160
|
+
waiting: pool._connectionQueue ? pool._connectionQueue.length : 0
|
|
161
|
+
};
|
|
162
|
+
},
|
|
163
|
+
/**
|
|
164
|
+
* Close connection pool
|
|
165
|
+
*/
|
|
166
|
+
async closePool(pool) {
|
|
167
|
+
await pool.end();
|
|
168
|
+
}
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=mysql.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mysql.js","sourceRoot":"","sources":["../../../../../src/database/adapters/mysql.js"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;GAIG;AACH,MAAM,UAAU,kBAAkB;IAChC,IAAI,KAAK,GAAG,IAAI,CAAC;IAEjB,KAAK,UAAU,eAAe;QAC5B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,IAAI,CAAC;gBACH,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;gBACnD,KAAK,GAAG,WAAW,CAAC,OAAO,IAAI,WAAW,CAAC;YAC7C,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,IAAI,KAAK,CAAC,gFAAgF,CAAC,CAAC;YACpG,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL;;WAEG;QACH,KAAK,CAAC,UAAU,CAAC,MAAM;YACrB,MAAM,eAAe,EAAE,CAAC;YAExB,MAAM,UAAU,GAAG;gBACjB,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,IAAI,EAAE,MAAM,CAAC,QAAQ;gBACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,eAAe,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG;gBAChC,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,oBAAoB;gBAChD,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,mBAAmB;gBACxC,SAAS,EAAE,IAAI;gBACf,OAAO,EAAE,SAAS;gBAClB,QAAQ,EAAE,GAAG;aACd,CAAC;YAEF,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;YAC1C,OAAO,IAAI,CAAC;QACd,CAAC;QAED;;WAEG;QACH,KAAK,CAAC,cAAc,CAAC,IAAI;YACvB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;YAE9C,IAAI,CAAC;gBACH,MAAM,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YACrC,CAAC;oBAAS,CAAC;gBACT,UAAU,CAAC,OAAO,EAAE,CAAC;YACvB,CAAC;QACH,CAAC;QAED;;WAEG;QACH,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,EAAE,EAAE,OAAO,GAAG,EAAE;YAC9C,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;YAE9C,IAAI,CAAC;gBACH,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;gBAErD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;oBACnB,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;gBACtD,CAAC;gBAED,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;oBACxB,OAAO;wBACL,IAAI;wBACJ,QAAQ,EAAE,IAAI,CAAC,MAAM;wBACrB,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,MAAM;wBAC9C,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI;qBAChC,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,OAAO;wBACL,IAAI,EAAE,EAAE;wBACR,QAAQ,EAAE,IAAI,CAAC,YAAY,IAAI,CAAC;wBAChC,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,CAAC;wBACpC,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI;qBAChC,CAAC;gBACJ,CAAC;YAEH,CAAC;oBAAS,CAAC;gBACT,UAAU,CAAC,OAAO,EAAE,CAAC;YACvB,CAAC;QACH,CAAC;QAED;;WAEG;QACH,KAAK,CAAC,WAAW,CAAC,IAAI;YACpB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;YAE9C,MAAM,UAAU,CAAC,gBAAgB,EAAE,CAAC;YAEpC,MAAM,WAAW,GAAG;gBAClB,UAAU;gBACV,IAAI;gBACJ,WAAW,EAAE,KAAK;gBAClB,YAAY,EAAE,KAAK;gBAEnB,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE;oBACzC,IAAI,WAAW,CAAC,WAAW,IAAI,WAAW,CAAC,YAAY,EAAE,CAAC;wBACxD,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;oBACnE,CAAC;oBAED,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;oBAErD,IAAI,YAAY,IAAI,YAAY,CAAC,MAAM,EAAE,CAAC;wBACxC,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;oBACtD,CAAC;oBAED,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;wBACxB,OAAO;4BACL,IAAI;4BACJ,QAAQ,EAAE,IAAI,CAAC,MAAM;4BACrB,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,MAAM;4BAC9C,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI;yBAChC,CAAC;oBACJ,CAAC;yBAAM,CAAC;wBACN,OAAO;4BACL,IAAI,EAAE,EAAE;4BACR,QAAQ,EAAE,IAAI,CAAC,YAAY,IAAI,CAAC;4BAChC,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,CAAC;4BACpC,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI;yBAChC,CAAC;oBACJ,CAAC;gBACH,CAAC;gBAED,MAAM,EAAE,KAAK,IAAI,EAAE;oBACjB,IAAI,WAAW,CAAC,WAAW,IAAI,WAAW,CAAC,YAAY,EAAE,CAAC;wBACxD,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;oBACnD,CAAC;oBAED,IAAI,CAAC;wBACH,MAAM,UAAU,CAAC,MAAM,EAAE,CAAC;wBAC1B,WAAW,CAAC,WAAW,GAAG,IAAI,CAAC;oBACjC,CAAC;4BAAS,CAAC;wBACT,UAAU,CAAC,OAAO,EAAE,CAAC;oBACvB,CAAC;gBACH,CAAC;gBAED,QAAQ,EAAE,KAAK,IAAI,EAAE;oBACnB,IAAI,WAAW,CAAC,WAAW,IAAI,WAAW,CAAC,YAAY,EAAE,CAAC;wBACxD,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;oBACnD,CAAC;oBAED,IAAI,CAAC;wBACH,MAAM,UAAU,CAAC,QAAQ,EAAE,CAAC;wBAC5B,WAAW,CAAC,YAAY,GAAG,IAAI,CAAC;oBAClC,CAAC;4BAAS,CAAC;wBACT,UAAU,CAAC,OAAO,EAAE,CAAC;oBACvB,CAAC;gBACH,CAAC;aACF,CAAC;YAEF,OAAO,WAAW,CAAC;QACrB,CAAC;QAED;;WAEG;QACH,YAAY,CAAC,IAAI;YACf,OAAO;gBACL,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe;gBAClC,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACnE,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7H,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;aAClE,CAAC;QACJ,CAAC;QAED;;WAEG;QACH,KAAK,CAAC,SAAS,CAAC,IAAI;YAClB,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC;QACnB,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PostgreSQL Database Adapter for Coherent.js
|
|
3
|
+
*
|
|
4
|
+
* @fileoverview PostgreSQL adapter implementation with connection pooling and advanced features.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Create PostgreSQL adapter instance
|
|
8
|
+
*
|
|
9
|
+
* @returns {Object} PostgreSQL adapter instance
|
|
10
|
+
*/
|
|
11
|
+
export function createPostgreSQLAdapter(): Object;
|
|
12
|
+
//# sourceMappingURL=postgresql.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgresql.d.ts","sourceRoot":"","sources":["../../../../../src/database/adapters/postgresql.js"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;GAIG;AACH,2CAFa,MAAM,CAgMlB"}
|