@ductape/sdk 0.0.4-v42 → 0.0.4-v43
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/apps/services/app.service.d.ts +10 -0
- package/dist/apps/services/app.service.js +22 -0
- package/dist/apps/services/app.service.js.map +1 -1
- package/dist/database/adapters/base.adapter.d.ts +176 -0
- package/dist/database/adapters/base.adapter.js +31 -0
- package/dist/database/adapters/base.adapter.js.map +1 -0
- package/dist/database/adapters/dynamodb.adapter.d.ts +83 -0
- package/dist/database/adapters/dynamodb.adapter.js +1237 -0
- package/dist/database/adapters/dynamodb.adapter.js.map +1 -0
- package/dist/database/adapters/mongodb.adapter.d.ts +70 -0
- package/dist/database/adapters/mongodb.adapter.js +717 -0
- package/dist/database/adapters/mongodb.adapter.js.map +1 -0
- package/dist/database/adapters/mysql.adapter.d.ts +141 -0
- package/dist/database/adapters/mysql.adapter.js +1221 -0
- package/dist/database/adapters/mysql.adapter.js.map +1 -0
- package/dist/database/adapters/postgresql.adapter.d.ts +142 -0
- package/dist/database/adapters/postgresql.adapter.js +1288 -0
- package/dist/database/adapters/postgresql.adapter.js.map +1 -0
- package/dist/database/database.service.d.ts +190 -0
- package/dist/database/database.service.js +552 -0
- package/dist/database/database.service.js.map +1 -0
- package/dist/database/index.d.ts +18 -0
- package/dist/database/index.js +98 -0
- package/dist/database/index.js.map +1 -0
- package/dist/database/types/aggregation.types.d.ts +202 -0
- package/dist/database/types/aggregation.types.js +21 -0
- package/dist/database/types/aggregation.types.js.map +1 -0
- package/dist/database/types/connection.types.d.ts +132 -0
- package/dist/database/types/connection.types.js +6 -0
- package/dist/database/types/connection.types.js.map +1 -0
- package/dist/database/types/database.types.d.ts +173 -0
- package/dist/database/types/database.types.js +73 -0
- package/dist/database/types/database.types.js.map +1 -0
- package/dist/database/types/index.d.ts +12 -0
- package/dist/database/types/index.js +37 -0
- package/dist/database/types/index.js.map +1 -0
- package/dist/database/types/index.types.d.ts +220 -0
- package/dist/database/types/index.types.js +27 -0
- package/dist/database/types/index.types.js.map +1 -0
- package/dist/database/types/migration.types.d.ts +205 -0
- package/dist/database/types/migration.types.js +44 -0
- package/dist/database/types/migration.types.js.map +1 -0
- package/dist/database/types/query.types.d.ts +274 -0
- package/dist/database/types/query.types.js +57 -0
- package/dist/database/types/query.types.js.map +1 -0
- package/dist/database/types/result.types.d.ts +218 -0
- package/dist/database/types/result.types.js +6 -0
- package/dist/database/types/result.types.js.map +1 -0
- package/dist/database/types/schema.types.d.ts +190 -0
- package/dist/database/types/schema.types.js +69 -0
- package/dist/database/types/schema.types.js.map +1 -0
- package/dist/database/utils/helpers.d.ts +66 -0
- package/dist/database/utils/helpers.js +501 -0
- package/dist/database/utils/helpers.js.map +1 -0
- package/dist/database/utils/migration.utils.d.ts +151 -0
- package/dist/database/utils/migration.utils.js +476 -0
- package/dist/database/utils/migration.utils.js.map +1 -0
- package/dist/database/utils/transaction.d.ts +64 -0
- package/dist/database/utils/transaction.js +130 -0
- package/dist/database/utils/transaction.js.map +1 -0
- package/dist/database/validators/connection.validator.d.ts +20 -0
- package/dist/database/validators/connection.validator.js +267 -0
- package/dist/database/validators/connection.validator.js.map +1 -0
- package/dist/database/validators/query.validator.d.ts +31 -0
- package/dist/database/validators/query.validator.js +305 -0
- package/dist/database/validators/query.validator.js.map +1 -0
- package/dist/database/validators/schema.validator.d.ts +31 -0
- package/dist/database/validators/schema.validator.js +334 -0
- package/dist/database/validators/schema.validator.js.map +1 -0
- package/dist/index.d.ts +25 -4
- package/dist/index.js +36 -4
- package/dist/index.js.map +1 -1
- package/dist/processor/services/processor.service.js +10 -8
- package/dist/processor/services/processor.service.js.map +1 -1
- package/dist/types/processor.types.d.ts +2 -2
- package/package.json +3 -1
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Transaction implementation
|
|
4
|
+
* Provides a stable interface for database transactions
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.TransactionFactory = exports.Transaction = exports.Savepoint = void 0;
|
|
8
|
+
const database_types_1 = require("../types/database.types");
|
|
9
|
+
/**
|
|
10
|
+
* Savepoint implementation
|
|
11
|
+
*/
|
|
12
|
+
class Savepoint {
|
|
13
|
+
constructor(name, transaction, adapter) {
|
|
14
|
+
this.name = name;
|
|
15
|
+
this.transaction = transaction;
|
|
16
|
+
this.createdAt = new Date();
|
|
17
|
+
this.adapter = adapter;
|
|
18
|
+
}
|
|
19
|
+
async rollback() {
|
|
20
|
+
if (!this.transaction.isActive()) {
|
|
21
|
+
throw new database_types_1.DatabaseError(database_types_1.DatabaseErrorType.QUERY_ERROR, 'Cannot rollback savepoint: transaction is not active');
|
|
22
|
+
}
|
|
23
|
+
await this.adapter.rollbackToSavepoint(this.transaction.connection, this.transaction.native, this.name);
|
|
24
|
+
}
|
|
25
|
+
async release() {
|
|
26
|
+
if (!this.transaction.isActive()) {
|
|
27
|
+
throw new database_types_1.DatabaseError(database_types_1.DatabaseErrorType.QUERY_ERROR, 'Cannot release savepoint: transaction is not active');
|
|
28
|
+
}
|
|
29
|
+
await this.adapter.releaseSavepoint(this.transaction.connection, this.transaction.native, this.name);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
exports.Savepoint = Savepoint;
|
|
33
|
+
/**
|
|
34
|
+
* Transaction implementation
|
|
35
|
+
*/
|
|
36
|
+
class Transaction {
|
|
37
|
+
constructor(id, connection, native, adapter, options) {
|
|
38
|
+
this.savepoints = new Map();
|
|
39
|
+
this.savepointCounter = 0;
|
|
40
|
+
this.id = id;
|
|
41
|
+
this.connection = connection;
|
|
42
|
+
this.native = native;
|
|
43
|
+
this.adapter = adapter;
|
|
44
|
+
this.status = database_types_1.TransactionStatus.ACTIVE;
|
|
45
|
+
this.isolationLevel = options === null || options === void 0 ? void 0 : options.isolationLevel;
|
|
46
|
+
this.parent = options === null || options === void 0 ? void 0 : options.parent;
|
|
47
|
+
this.createdAt = new Date();
|
|
48
|
+
}
|
|
49
|
+
async commit() {
|
|
50
|
+
if (!this.isActive()) {
|
|
51
|
+
throw new database_types_1.DatabaseError(database_types_1.DatabaseErrorType.QUERY_ERROR, `Cannot commit transaction: transaction is ${this.status}`);
|
|
52
|
+
}
|
|
53
|
+
try {
|
|
54
|
+
await this.adapter.commitTransaction(this.connection, this.native);
|
|
55
|
+
this.status = database_types_1.TransactionStatus.COMMITTED;
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
this.status = database_types_1.TransactionStatus.FAILED;
|
|
59
|
+
throw new database_types_1.DatabaseError(database_types_1.DatabaseErrorType.QUERY_ERROR, `Failed to commit transaction: ${error.message}`, error);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
async rollback() {
|
|
63
|
+
if (!this.isActive()) {
|
|
64
|
+
throw new database_types_1.DatabaseError(database_types_1.DatabaseErrorType.QUERY_ERROR, `Cannot rollback transaction: transaction is ${this.status}`);
|
|
65
|
+
}
|
|
66
|
+
try {
|
|
67
|
+
await this.adapter.rollbackTransaction(this.connection, this.native);
|
|
68
|
+
this.status = database_types_1.TransactionStatus.ROLLED_BACK;
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
this.status = database_types_1.TransactionStatus.FAILED;
|
|
72
|
+
throw new database_types_1.DatabaseError(database_types_1.DatabaseErrorType.QUERY_ERROR, `Failed to rollback transaction: ${error.message}`, error);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
async savepoint(name) {
|
|
76
|
+
if (!this.isActive()) {
|
|
77
|
+
throw new database_types_1.DatabaseError(database_types_1.DatabaseErrorType.QUERY_ERROR, 'Cannot create savepoint: transaction is not active');
|
|
78
|
+
}
|
|
79
|
+
// Generate savepoint name if not provided
|
|
80
|
+
const savepointName = name || `sp_${this.savepointCounter++}_${Date.now()}`;
|
|
81
|
+
// Check if savepoint already exists
|
|
82
|
+
if (this.savepoints.has(savepointName)) {
|
|
83
|
+
throw new database_types_1.DatabaseError(database_types_1.DatabaseErrorType.QUERY_ERROR, `Savepoint '${savepointName}' already exists`);
|
|
84
|
+
}
|
|
85
|
+
try {
|
|
86
|
+
await this.adapter.createSavepoint(this.connection, this.native, savepointName);
|
|
87
|
+
const savepoint = new Savepoint(savepointName, this, this.adapter);
|
|
88
|
+
this.savepoints.set(savepointName, savepoint);
|
|
89
|
+
return savepoint;
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
throw new database_types_1.DatabaseError(database_types_1.DatabaseErrorType.QUERY_ERROR, `Failed to create savepoint: ${error.message}`, error);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
isActive() {
|
|
96
|
+
return this.status === database_types_1.TransactionStatus.ACTIVE;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Get a savepoint by name
|
|
100
|
+
*/
|
|
101
|
+
getSavepoint(name) {
|
|
102
|
+
return this.savepoints.get(name);
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Get all savepoints
|
|
106
|
+
*/
|
|
107
|
+
getSavepoints() {
|
|
108
|
+
return Array.from(this.savepoints.values());
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Remove a savepoint from tracking (after rollback or release)
|
|
112
|
+
*/
|
|
113
|
+
removeSavepoint(name) {
|
|
114
|
+
this.savepoints.delete(name);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
exports.Transaction = Transaction;
|
|
118
|
+
/**
|
|
119
|
+
* Transaction factory
|
|
120
|
+
* Creates transaction instances
|
|
121
|
+
*/
|
|
122
|
+
class TransactionFactory {
|
|
123
|
+
static create(connection, native, adapter, options) {
|
|
124
|
+
const id = `txn_${++this.idCounter}_${Date.now()}`;
|
|
125
|
+
return new Transaction(id, connection, native, adapter, options);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
exports.TransactionFactory = TransactionFactory;
|
|
129
|
+
TransactionFactory.idCounter = 0;
|
|
130
|
+
//# sourceMappingURL=transaction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transaction.js","sourceRoot":"","sources":["../../../src/database/utils/transaction.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Connection Configuration Validator
|
|
3
|
+
* Validates database connection configurations before attempting to connect
|
|
4
|
+
*/
|
|
5
|
+
import { DatabaseConnectionConfig } from '../types/connection.types';
|
|
6
|
+
/**
|
|
7
|
+
* Validation result
|
|
8
|
+
*/
|
|
9
|
+
export interface IValidationResult {
|
|
10
|
+
valid: boolean;
|
|
11
|
+
errors: string[];
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Validate a database connection configuration
|
|
15
|
+
*/
|
|
16
|
+
export declare function validateConnection(config: DatabaseConnectionConfig): IValidationResult;
|
|
17
|
+
/**
|
|
18
|
+
* Throw an error if validation fails
|
|
19
|
+
*/
|
|
20
|
+
export declare function assertValidConnection(config: DatabaseConnectionConfig): void;
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Connection Configuration Validator
|
|
4
|
+
* Validates database connection configurations before attempting to connect
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.validateConnection = validateConnection;
|
|
8
|
+
exports.assertValidConnection = assertValidConnection;
|
|
9
|
+
const database_types_1 = require("../types/database.types");
|
|
10
|
+
/**
|
|
11
|
+
* Validate a database connection configuration
|
|
12
|
+
*/
|
|
13
|
+
function validateConnection(config) {
|
|
14
|
+
const errors = [];
|
|
15
|
+
// Check if config is provided
|
|
16
|
+
if (!config) {
|
|
17
|
+
return {
|
|
18
|
+
valid: false,
|
|
19
|
+
errors: ['Connection configuration is required'],
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
// Validate based on connection type
|
|
23
|
+
if ('product' in config) {
|
|
24
|
+
// Product-based connection
|
|
25
|
+
validateProductConnection(config, errors);
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
// Direct connection
|
|
29
|
+
validateDirectConnection(config, errors);
|
|
30
|
+
}
|
|
31
|
+
return {
|
|
32
|
+
valid: errors.length === 0,
|
|
33
|
+
errors,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Validate product-based connection configuration
|
|
38
|
+
*/
|
|
39
|
+
function validateProductConnection(config, errors) {
|
|
40
|
+
if (!config.env || typeof config.env !== 'string') {
|
|
41
|
+
errors.push('Environment slug (env) is required and must be a string');
|
|
42
|
+
}
|
|
43
|
+
if (!config.product || typeof config.product !== 'string') {
|
|
44
|
+
errors.push('Product tag is required and must be a string');
|
|
45
|
+
}
|
|
46
|
+
if (!config.database || typeof config.database !== 'string') {
|
|
47
|
+
errors.push('Database tag is required and must be a string');
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Validate direct connection configuration
|
|
52
|
+
*/
|
|
53
|
+
function validateDirectConnection(config, errors) {
|
|
54
|
+
if (!('type' in config)) {
|
|
55
|
+
errors.push('Database type is required');
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
// Validate environment
|
|
59
|
+
if (!config.env || typeof config.env !== 'string') {
|
|
60
|
+
errors.push('Environment slug (env) is required and must be a string');
|
|
61
|
+
}
|
|
62
|
+
// Validate based on database type
|
|
63
|
+
switch (config.type) {
|
|
64
|
+
case database_types_1.DatabaseType.POSTGRESQL:
|
|
65
|
+
validatePostgreSQLConfig(config, errors);
|
|
66
|
+
break;
|
|
67
|
+
case database_types_1.DatabaseType.MYSQL:
|
|
68
|
+
validateMySQLConfig(config, errors);
|
|
69
|
+
break;
|
|
70
|
+
case database_types_1.DatabaseType.MONGODB:
|
|
71
|
+
validateMongoDBConfig(config, errors);
|
|
72
|
+
break;
|
|
73
|
+
case database_types_1.DatabaseType.DYNAMODB:
|
|
74
|
+
validateDynamoDBConfig(config, errors);
|
|
75
|
+
break;
|
|
76
|
+
case database_types_1.DatabaseType.SQLITE:
|
|
77
|
+
validateSQLiteConfig(config, errors);
|
|
78
|
+
break;
|
|
79
|
+
default:
|
|
80
|
+
errors.push(`Unsupported database type: ${config.type}`);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Validate PostgreSQL connection configuration
|
|
85
|
+
*/
|
|
86
|
+
function validatePostgreSQLConfig(config, errors) {
|
|
87
|
+
// Required fields
|
|
88
|
+
if (!config.host || typeof config.host !== 'string') {
|
|
89
|
+
errors.push('PostgreSQL: host is required and must be a string');
|
|
90
|
+
}
|
|
91
|
+
if (!config.database || typeof config.database !== 'string') {
|
|
92
|
+
errors.push('PostgreSQL: database name is required and must be a string');
|
|
93
|
+
}
|
|
94
|
+
if (!config.user || typeof config.user !== 'string') {
|
|
95
|
+
errors.push('PostgreSQL: user is required and must be a string');
|
|
96
|
+
}
|
|
97
|
+
if (!config.password || typeof config.password !== 'string') {
|
|
98
|
+
errors.push('PostgreSQL: password is required and must be a string');
|
|
99
|
+
}
|
|
100
|
+
// Optional fields validation
|
|
101
|
+
if (config.port !== undefined) {
|
|
102
|
+
if (typeof config.port !== 'number' || config.port < 1 || config.port > 65535) {
|
|
103
|
+
errors.push('PostgreSQL: port must be a number between 1 and 65535');
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
if (config.poolSize !== undefined) {
|
|
107
|
+
if (typeof config.poolSize !== 'number' || config.poolSize < 1) {
|
|
108
|
+
errors.push('PostgreSQL: poolSize must be a positive number');
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
if (config.connectionTimeout !== undefined) {
|
|
112
|
+
if (typeof config.connectionTimeout !== 'number' || config.connectionTimeout < 0) {
|
|
113
|
+
errors.push('PostgreSQL: connectionTimeout must be a non-negative number');
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Validate MySQL connection configuration
|
|
119
|
+
*/
|
|
120
|
+
function validateMySQLConfig(config, errors) {
|
|
121
|
+
// Required fields
|
|
122
|
+
if (!config.host || typeof config.host !== 'string') {
|
|
123
|
+
errors.push('MySQL: host is required and must be a string');
|
|
124
|
+
}
|
|
125
|
+
if (!config.database || typeof config.database !== 'string') {
|
|
126
|
+
errors.push('MySQL: database name is required and must be a string');
|
|
127
|
+
}
|
|
128
|
+
if (!config.user || typeof config.user !== 'string') {
|
|
129
|
+
errors.push('MySQL: user is required and must be a string');
|
|
130
|
+
}
|
|
131
|
+
if (!config.password || typeof config.password !== 'string') {
|
|
132
|
+
errors.push('MySQL: password is required and must be a string');
|
|
133
|
+
}
|
|
134
|
+
// Optional fields validation
|
|
135
|
+
if (config.port !== undefined) {
|
|
136
|
+
if (typeof config.port !== 'number' || config.port < 1 || config.port > 65535) {
|
|
137
|
+
errors.push('MySQL: port must be a number between 1 and 65535');
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
if (config.poolSize !== undefined) {
|
|
141
|
+
if (typeof config.poolSize !== 'number' || config.poolSize < 1) {
|
|
142
|
+
errors.push('MySQL: poolSize must be a positive number');
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
if (config.connectionTimeout !== undefined) {
|
|
146
|
+
if (typeof config.connectionTimeout !== 'number' || config.connectionTimeout < 0) {
|
|
147
|
+
errors.push('MySQL: connectionTimeout must be a non-negative number');
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
if (config.charset !== undefined && typeof config.charset !== 'string') {
|
|
151
|
+
errors.push('MySQL: charset must be a string');
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Validate MongoDB connection configuration
|
|
156
|
+
*/
|
|
157
|
+
function validateMongoDBConfig(config, errors) {
|
|
158
|
+
// Required fields
|
|
159
|
+
if (!config.uri || typeof config.uri !== 'string') {
|
|
160
|
+
errors.push('MongoDB: uri is required and must be a string');
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
// Validate URI format
|
|
164
|
+
if (!config.uri.startsWith('mongodb://') && !config.uri.startsWith('mongodb+srv://')) {
|
|
165
|
+
errors.push('MongoDB: uri must start with "mongodb://" or "mongodb+srv://"');
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
if (!config.database || typeof config.database !== 'string') {
|
|
169
|
+
errors.push('MongoDB: database name is required and must be a string');
|
|
170
|
+
}
|
|
171
|
+
// Optional fields validation
|
|
172
|
+
if (config.options) {
|
|
173
|
+
if (typeof config.options !== 'object') {
|
|
174
|
+
errors.push('MongoDB: options must be an object');
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
if (config.options.poolSize !== undefined) {
|
|
178
|
+
if (typeof config.options.poolSize !== 'number' || config.options.poolSize < 1) {
|
|
179
|
+
errors.push('MongoDB: options.poolSize must be a positive number');
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
if (config.options.serverSelectionTimeoutMS !== undefined) {
|
|
183
|
+
if (typeof config.options.serverSelectionTimeoutMS !== 'number' || config.options.serverSelectionTimeoutMS < 0) {
|
|
184
|
+
errors.push('MongoDB: options.serverSelectionTimeoutMS must be a non-negative number');
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Validate DynamoDB connection configuration
|
|
192
|
+
*/
|
|
193
|
+
function validateDynamoDBConfig(config, errors) {
|
|
194
|
+
var _a;
|
|
195
|
+
// Required fields
|
|
196
|
+
if (!config.region || typeof config.region !== 'string') {
|
|
197
|
+
errors.push('DynamoDB: region is required and must be a string');
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
// Validate region format (basic check)
|
|
201
|
+
if (!/^[a-z]{2}-[a-z]+-\d{1}$/.test(config.region)) {
|
|
202
|
+
errors.push('DynamoDB: region must be a valid AWS region (e.g., us-east-1)');
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
if (!config.accessKeyId || typeof config.accessKeyId !== 'string') {
|
|
206
|
+
errors.push('DynamoDB: accessKeyId is required and must be a string');
|
|
207
|
+
}
|
|
208
|
+
if (!config.secretAccessKey || typeof config.secretAccessKey !== 'string') {
|
|
209
|
+
errors.push('DynamoDB: secretAccessKey is required and must be a string');
|
|
210
|
+
}
|
|
211
|
+
// Optional fields validation
|
|
212
|
+
if (config.endpoint !== undefined && typeof config.endpoint !== 'string') {
|
|
213
|
+
errors.push('DynamoDB: endpoint must be a string');
|
|
214
|
+
}
|
|
215
|
+
if (config.options) {
|
|
216
|
+
if (typeof config.options !== 'object') {
|
|
217
|
+
errors.push('DynamoDB: options must be an object');
|
|
218
|
+
}
|
|
219
|
+
else {
|
|
220
|
+
if (config.options.maxRetries !== undefined) {
|
|
221
|
+
if (typeof config.options.maxRetries !== 'number' || config.options.maxRetries < 0) {
|
|
222
|
+
errors.push('DynamoDB: options.maxRetries must be a non-negative number');
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
if (((_a = config.options.httpOptions) === null || _a === void 0 ? void 0 : _a.timeout) !== undefined) {
|
|
226
|
+
if (typeof config.options.httpOptions.timeout !== 'number' || config.options.httpOptions.timeout < 0) {
|
|
227
|
+
errors.push('DynamoDB: options.httpOptions.timeout must be a non-negative number');
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Validate SQLite connection configuration
|
|
235
|
+
*/
|
|
236
|
+
function validateSQLiteConfig(config, errors) {
|
|
237
|
+
// Required fields
|
|
238
|
+
if (!config.filename || typeof config.filename !== 'string') {
|
|
239
|
+
errors.push('SQLite: filename is required and must be a string');
|
|
240
|
+
}
|
|
241
|
+
// Optional fields validation
|
|
242
|
+
if (config.mode !== undefined && typeof config.mode !== 'number') {
|
|
243
|
+
errors.push('SQLite: mode must be a number');
|
|
244
|
+
}
|
|
245
|
+
if (config.options) {
|
|
246
|
+
if (typeof config.options !== 'object') {
|
|
247
|
+
errors.push('SQLite: options must be an object');
|
|
248
|
+
}
|
|
249
|
+
else {
|
|
250
|
+
if (config.options.timeout !== undefined) {
|
|
251
|
+
if (typeof config.options.timeout !== 'number' || config.options.timeout < 0) {
|
|
252
|
+
errors.push('SQLite: options.timeout must be a non-negative number');
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Throw an error if validation fails
|
|
260
|
+
*/
|
|
261
|
+
function assertValidConnection(config) {
|
|
262
|
+
const result = validateConnection(config);
|
|
263
|
+
if (!result.valid) {
|
|
264
|
+
throw new Error(`Invalid connection configuration:\n${result.errors.join('\n')}`);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
//# sourceMappingURL=connection.validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection.validator.js","sourceRoot":"","sources":["../../../src/database/validators/connection.validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Query Validator
|
|
3
|
+
* Validates query options and data
|
|
4
|
+
*/
|
|
5
|
+
import { IQueryOptions } from '../types/query.types';
|
|
6
|
+
import { IValidationResult } from './connection.validator';
|
|
7
|
+
import { IColumnDefinition } from '../types/schema.types';
|
|
8
|
+
/**
|
|
9
|
+
* Validate query options
|
|
10
|
+
*/
|
|
11
|
+
export declare function validateQueryOptions(options?: Partial<IQueryOptions>): IValidationResult;
|
|
12
|
+
/**
|
|
13
|
+
* Validate insert data against column definitions
|
|
14
|
+
*/
|
|
15
|
+
export declare function validateInsertData(data: Record<string, any> | Record<string, any>[], columns: IColumnDefinition[]): IValidationResult;
|
|
16
|
+
/**
|
|
17
|
+
* Validate update data against column definitions
|
|
18
|
+
*/
|
|
19
|
+
export declare function validateUpdateData(data: Record<string, any>, columns: IColumnDefinition[]): IValidationResult;
|
|
20
|
+
/**
|
|
21
|
+
* Throw an error if query options validation fails
|
|
22
|
+
*/
|
|
23
|
+
export declare function assertValidQueryOptions(options?: Partial<IQueryOptions>): void;
|
|
24
|
+
/**
|
|
25
|
+
* Throw an error if insert data validation fails
|
|
26
|
+
*/
|
|
27
|
+
export declare function assertValidInsertData(data: Record<string, any> | Record<string, any>[], columns: IColumnDefinition[]): void;
|
|
28
|
+
/**
|
|
29
|
+
* Throw an error if update data validation fails
|
|
30
|
+
*/
|
|
31
|
+
export declare function assertValidUpdateData(data: Record<string, any>, columns: IColumnDefinition[]): void;
|