data-api-client 2.0.0-beta.0 → 2.1.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.
@@ -0,0 +1,3 @@
1
+ import type { DataAPIClientConfig, DataAPIClient } from './types';
2
+ export declare const init: (params: DataAPIClientConfig) => DataAPIClient;
3
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,mBAAmB,EAAkB,aAAa,EAA6B,MAAM,SAAS,CAAA;AA0B5G,eAAO,MAAM,IAAI,GAAI,QAAQ,mBAAmB,KAAG,aAoJlD,CAAA"}
package/dist/client.js ADDED
@@ -0,0 +1,79 @@
1
+ 'use strict';
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.init = void 0;
4
+ const client_rds_data_1 = require("@aws-sdk/client-rds-data");
5
+ const utils_1 = require("./utils");
6
+ const query_1 = require("./query");
7
+ const transaction_1 = require("./transaction");
8
+ const retry_1 = require("./retry");
9
+ const init = (params) => {
10
+ const options = typeof params.options === 'object'
11
+ ? params.options
12
+ : params.options !== undefined
13
+ ? (0, utils_1.error)(`'options' must be an object`)
14
+ : {};
15
+ if (typeof params.region === 'string') {
16
+ options.region = params.region;
17
+ }
18
+ if (params.sslEnabled === false) {
19
+ console.warn('sslEnabled is deprecated. For local development, set options.endpoint instead.');
20
+ }
21
+ const config = {
22
+ engine: typeof params.engine === 'string' ? params.engine : 'pg',
23
+ secretArn: typeof params.secretArn === 'string' ? params.secretArn : (0, utils_1.error)(`'secretArn' string value required`),
24
+ resourceArn: typeof params.resourceArn === 'string' ? params.resourceArn : (0, utils_1.error)(`'resourceArn' string value required`),
25
+ database: typeof params.database === 'string'
26
+ ? params.database
27
+ : params.database !== undefined
28
+ ? (0, utils_1.error)(`'database' must be a string`)
29
+ : undefined,
30
+ hydrateColumnNames: typeof params.hydrateColumnNames === 'boolean' ? params.hydrateColumnNames : true,
31
+ formatOptions: {
32
+ deserializeDate: typeof params.formatOptions === 'object' && params.formatOptions.deserializeDate === false ? false : true,
33
+ treatAsLocalDate: typeof params.formatOptions === 'object' && params.formatOptions.treatAsLocalDate ? true : false
34
+ },
35
+ retryOptions: {
36
+ enabled: typeof params.retryOptions === 'object' && params.retryOptions.enabled === false ? false : true,
37
+ maxRetries: typeof params.retryOptions === 'object' && typeof params.retryOptions.maxRetries === 'number'
38
+ ? params.retryOptions.maxRetries
39
+ : 9,
40
+ retryableErrors: typeof params.retryOptions === 'object' && Array.isArray(params.retryOptions.retryableErrors)
41
+ ? params.retryOptions.retryableErrors
42
+ : []
43
+ },
44
+ RDS: params.client ? params.client : new client_rds_data_1.RDSDataClient(options)
45
+ };
46
+ return {
47
+ query: (...x) => query_1.query.call(undefined, config, ...x),
48
+ transaction: (x) => (0, transaction_1.transaction)(config, x),
49
+ batchExecuteStatement: async (args) => (0, retry_1.withRetry)(() => config.RDS.send(new client_rds_data_1.BatchExecuteStatementCommand({
50
+ ...args,
51
+ resourceArn: args.resourceArn || config.resourceArn,
52
+ secretArn: args.secretArn || config.secretArn,
53
+ database: args.database || config.database
54
+ })), config.retryOptions),
55
+ beginTransaction: async (args) => (0, retry_1.withRetry)(() => config.RDS.send(new client_rds_data_1.BeginTransactionCommand({
56
+ ...(args || {}),
57
+ resourceArn: (args === null || args === void 0 ? void 0 : args.resourceArn) || config.resourceArn,
58
+ secretArn: (args === null || args === void 0 ? void 0 : args.secretArn) || config.secretArn,
59
+ database: (args === null || args === void 0 ? void 0 : args.database) || config.database
60
+ })), config.retryOptions),
61
+ commitTransaction: async (args) => (0, retry_1.withRetry)(() => config.RDS.send(new client_rds_data_1.CommitTransactionCommand({
62
+ ...args,
63
+ resourceArn: args.resourceArn || config.resourceArn,
64
+ secretArn: args.secretArn || config.secretArn
65
+ })), config.retryOptions),
66
+ executeStatement: async (args) => (0, retry_1.withRetry)(() => config.RDS.send(new client_rds_data_1.ExecuteStatementCommand({
67
+ ...args,
68
+ resourceArn: args.resourceArn || config.resourceArn,
69
+ secretArn: args.secretArn || config.secretArn,
70
+ database: args.database || config.database
71
+ })), config.retryOptions),
72
+ rollbackTransaction: async (args) => (0, retry_1.withRetry)(() => config.RDS.send(new client_rds_data_1.RollbackTransactionCommand({
73
+ ...args,
74
+ resourceArn: args.resourceArn || config.resourceArn,
75
+ secretArn: args.secretArn || config.secretArn
76
+ })), config.retryOptions)
77
+ };
78
+ };
79
+ exports.init = init;
@@ -0,0 +1,28 @@
1
+ export interface PostgresError extends Error {
2
+ code?: string;
3
+ severity?: string;
4
+ detail?: string;
5
+ hint?: string;
6
+ position?: string;
7
+ internalPosition?: string;
8
+ internalQuery?: string;
9
+ where?: string;
10
+ schema?: string;
11
+ table?: string;
12
+ column?: string;
13
+ dataType?: string;
14
+ constraint?: string;
15
+ file?: string;
16
+ line?: string;
17
+ routine?: string;
18
+ }
19
+ export interface MySQLError extends Error {
20
+ code?: string;
21
+ errno?: number;
22
+ sqlState?: string;
23
+ sqlMessage?: string;
24
+ sql?: string;
25
+ }
26
+ export declare function mapToPostgresError(error: any): PostgresError;
27
+ export declare function mapToMySQLError(error: any): MySQLError;
28
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/compat/errors.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,aAAc,SAAQ,KAAK;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAKD,MAAM,WAAW,UAAW,SAAQ,KAAK;IACvC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,GAAG,CAAC,EAAE,MAAM,CAAA;CACb;AA6BD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,GAAG,GAAG,aAAa,CAgE5D;AAKD,wBAAgB,eAAe,CAAC,KAAK,EAAE,GAAG,GAAG,UAAU,CA+GtD"}
@@ -0,0 +1,163 @@
1
+ 'use strict';
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mapToPostgresError = mapToPostgresError;
4
+ exports.mapToMySQLError = mapToMySQLError;
5
+ function extractConstraintName(message) {
6
+ const match = message.match(/constraint "([^"]+)"/);
7
+ return match ? match[1] : undefined;
8
+ }
9
+ function extractTableName(message) {
10
+ const match = message.match(/table "([^"]+)"/);
11
+ return match ? match[1] : undefined;
12
+ }
13
+ function extractColumnName(message) {
14
+ const match = message.match(/column "([^"]+)"/);
15
+ return match ? match[1] : undefined;
16
+ }
17
+ function mapToPostgresError(error) {
18
+ var _a, _b;
19
+ const pgError = new Error(error.message);
20
+ pgError.name = 'error';
21
+ pgError.severity = 'ERROR';
22
+ const message = error.message || '';
23
+ if (message.includes('duplicate key') || message.includes('already exists')) {
24
+ pgError.code = '23505';
25
+ pgError.constraint = extractConstraintName(message);
26
+ pgError.detail = (_a = message.match(/Detail: (.+)/)) === null || _a === void 0 ? void 0 : _a[1];
27
+ }
28
+ else if (message.includes('violates foreign key constraint')) {
29
+ pgError.code = '23503';
30
+ pgError.constraint = extractConstraintName(message);
31
+ pgError.table = extractTableName(message);
32
+ }
33
+ else if (message.includes('violates not-null constraint')) {
34
+ pgError.code = '23502';
35
+ pgError.column = extractColumnName(message);
36
+ pgError.table = extractTableName(message);
37
+ }
38
+ else if (message.includes('violates check constraint')) {
39
+ pgError.code = '23514';
40
+ pgError.constraint = extractConstraintName(message);
41
+ }
42
+ else if (message.includes('syntax error')) {
43
+ pgError.code = '42601';
44
+ pgError.position = (_b = message.match(/at or near "(.+?)"/)) === null || _b === void 0 ? void 0 : _b[1];
45
+ }
46
+ else if (message.includes('column') && message.includes('does not exist')) {
47
+ pgError.code = '42703';
48
+ pgError.column = extractColumnName(message);
49
+ }
50
+ else if (message.includes('relation') && message.includes('does not exist')) {
51
+ pgError.code = '42P01';
52
+ pgError.table = extractTableName(message);
53
+ }
54
+ else if (message.includes('function') && message.includes('does not exist')) {
55
+ pgError.code = '42883';
56
+ }
57
+ else if (message.includes('invalid input syntax')) {
58
+ pgError.code = '22P02';
59
+ }
60
+ else if (message.includes('division by zero')) {
61
+ pgError.code = '22012';
62
+ }
63
+ else if (message.includes('value too long')) {
64
+ pgError.code = '22001';
65
+ }
66
+ else if (message.includes('permission denied')) {
67
+ pgError.code = '42501';
68
+ }
69
+ else if (message.includes('connection') || message.includes('timeout')) {
70
+ pgError.code = '08006';
71
+ }
72
+ else {
73
+ pgError.code = 'EUNKNOWN';
74
+ }
75
+ return pgError;
76
+ }
77
+ function mapToMySQLError(error) {
78
+ const mysqlError = new Error(error.message);
79
+ mysqlError.sqlMessage = error.message || '';
80
+ const message = error.message || '';
81
+ if (message.includes('Duplicate entry') || message.includes('duplicate key')) {
82
+ mysqlError.code = 'ER_DUP_ENTRY';
83
+ mysqlError.errno = 1062;
84
+ mysqlError.sqlState = '23000';
85
+ }
86
+ else if (message.includes('foreign key constraint fails')) {
87
+ if (message.includes('Cannot delete or update a parent row')) {
88
+ mysqlError.code = 'ER_ROW_IS_REFERENCED_2';
89
+ mysqlError.errno = 1451;
90
+ }
91
+ else {
92
+ mysqlError.code = 'ER_NO_REFERENCED_ROW_2';
93
+ mysqlError.errno = 1452;
94
+ }
95
+ mysqlError.sqlState = '23000';
96
+ }
97
+ else if (message.includes('cannot be null') || message.includes('NOT NULL')) {
98
+ mysqlError.code = 'ER_BAD_NULL_ERROR';
99
+ mysqlError.errno = 1048;
100
+ mysqlError.sqlState = '23000';
101
+ }
102
+ else if (message.includes("Table") && message.includes("doesn't exist")) {
103
+ mysqlError.code = 'ER_NO_SUCH_TABLE';
104
+ mysqlError.errno = 1146;
105
+ mysqlError.sqlState = '42S02';
106
+ }
107
+ else if (message.includes('Unknown column')) {
108
+ mysqlError.code = 'ER_BAD_FIELD_ERROR';
109
+ mysqlError.errno = 1054;
110
+ mysqlError.sqlState = '42S22';
111
+ }
112
+ else if (message.includes('syntax') || message.includes('SQL syntax')) {
113
+ mysqlError.code = 'ER_PARSE_ERROR';
114
+ mysqlError.errno = 1064;
115
+ mysqlError.sqlState = '42000';
116
+ }
117
+ else if (message.includes('Data too long') || message.includes('too long')) {
118
+ mysqlError.code = 'ER_DATA_TOO_LONG';
119
+ mysqlError.errno = 1406;
120
+ mysqlError.sqlState = '22001';
121
+ }
122
+ else if (message.includes('Division by 0')) {
123
+ mysqlError.code = 'ER_DIVISION_BY_ZERO';
124
+ mysqlError.errno = 1365;
125
+ mysqlError.sqlState = '22012';
126
+ }
127
+ else if (message.includes('Access denied')) {
128
+ mysqlError.code = 'ER_ACCESS_DENIED_ERROR';
129
+ mysqlError.errno = 1045;
130
+ mysqlError.sqlState = '28000';
131
+ }
132
+ else if (message.includes('Deadlock')) {
133
+ mysqlError.code = 'ER_LOCK_DEADLOCK';
134
+ mysqlError.errno = 1213;
135
+ mysqlError.sqlState = '40001';
136
+ }
137
+ else if (message.includes('Lock wait timeout')) {
138
+ mysqlError.code = 'ER_LOCK_WAIT_TIMEOUT';
139
+ mysqlError.errno = 1205;
140
+ mysqlError.sqlState = 'HY000';
141
+ }
142
+ else if (message.includes("Can't connect")) {
143
+ mysqlError.code = 'ER_CONNECTION_ERROR';
144
+ mysqlError.errno = 2003;
145
+ mysqlError.sqlState = 'HY000';
146
+ }
147
+ else if (message.includes('server has gone away')) {
148
+ mysqlError.code = 'ER_SERVER_GONE_ERROR';
149
+ mysqlError.errno = 2006;
150
+ mysqlError.sqlState = 'HY000';
151
+ }
152
+ else if (message.includes('Lost connection')) {
153
+ mysqlError.code = 'ER_SERVER_LOST';
154
+ mysqlError.errno = 2013;
155
+ mysqlError.sqlState = 'HY000';
156
+ }
157
+ else {
158
+ mysqlError.code = 'EUNKNOWN';
159
+ mysqlError.errno = 0;
160
+ mysqlError.sqlState = 'HY000';
161
+ }
162
+ return mysqlError;
163
+ }
@@ -0,0 +1,7 @@
1
+ export { createPgClient, createPgPool } from './pg';
2
+ export type { PgCompatClient, PgCompatPool, PgQueryResult } from './pg';
3
+ export { createMySQLConnection, createMySQLPool } from './mysql2';
4
+ export type { Connection, Pool, PoolConnection, MySQL2QueryResult } from './mysql2';
5
+ export { mapToPostgresError, mapToMySQLError } from './errors';
6
+ export type { PostgresError, MySQLError } from './errors';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/compat/index.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,MAAM,CAAA;AACnD,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,MAAM,CAAA;AAEvE,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AACjE,YAAY,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAEnF,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAC9D,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA"}
@@ -0,0 +1,12 @@
1
+ 'use strict';
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mapToMySQLError = exports.mapToPostgresError = exports.createMySQLPool = exports.createMySQLConnection = exports.createPgPool = exports.createPgClient = void 0;
4
+ var pg_1 = require("./pg");
5
+ Object.defineProperty(exports, "createPgClient", { enumerable: true, get: function () { return pg_1.createPgClient; } });
6
+ Object.defineProperty(exports, "createPgPool", { enumerable: true, get: function () { return pg_1.createPgPool; } });
7
+ var mysql2_1 = require("./mysql2");
8
+ Object.defineProperty(exports, "createMySQLConnection", { enumerable: true, get: function () { return mysql2_1.createMySQLConnection; } });
9
+ Object.defineProperty(exports, "createMySQLPool", { enumerable: true, get: function () { return mysql2_1.createMySQLPool; } });
10
+ var errors_1 = require("./errors");
11
+ Object.defineProperty(exports, "mapToPostgresError", { enumerable: true, get: function () { return errors_1.mapToPostgresError; } });
12
+ Object.defineProperty(exports, "mapToMySQLError", { enumerable: true, get: function () { return errors_1.mapToMySQLError; } });
@@ -0,0 +1,86 @@
1
+ import { EventEmitter } from 'events';
2
+ import type { DataAPIClientConfig } from '../types';
3
+ export interface PoolConnection extends Connection {
4
+ release?: () => void;
5
+ }
6
+ export interface Connection extends EventEmitter {
7
+ connect(callback?: (err: Error | null) => void): Promise<void>;
8
+ end(callback?: (err?: Error) => void): Promise<void>;
9
+ query<R = any>(sql: string): Promise<[R[] | MySQL2QueryResult<R>, any]>;
10
+ query<R = any>(sql: string, callback: (err: Error | null, results: R[] | MySQL2QueryResult<R>, fields: any) => void): Promise<void>;
11
+ query<R = any>(sql: string, params: any[]): Promise<[R[] | MySQL2QueryResult<R>, any]>;
12
+ query<R = any>(sql: string, params: any[], callback: (err: Error | null, results: R[] | MySQL2QueryResult<R>, fields: any) => void): Promise<void>;
13
+ query<R = any>(options: {
14
+ sql: string;
15
+ values?: any[];
16
+ }): Promise<[R[] | MySQL2QueryResult<R>, any]>;
17
+ query<R = any>(options: {
18
+ sql: string;
19
+ values?: any[];
20
+ }, callback: (err: Error | null, results: R[] | MySQL2QueryResult<R>, fields: any) => void): Promise<void>;
21
+ execute<R = any>(sql: string): Promise<[R[] | MySQL2QueryResult<R>, any]>;
22
+ execute<R = any>(sql: string, callback: (err: Error | null, results: R[] | MySQL2QueryResult<R>, fields: any) => void): Promise<void>;
23
+ execute<R = any>(sql: string, params: any[]): Promise<[R[] | MySQL2QueryResult<R>, any]>;
24
+ execute<R = any>(sql: string, params: any[], callback: (err: Error | null, results: R[] | MySQL2QueryResult<R>, fields: any) => void): Promise<void>;
25
+ execute<R = any>(options: {
26
+ sql: string;
27
+ values?: any[];
28
+ }): Promise<[R[] | MySQL2QueryResult<R>, any]>;
29
+ execute<R = any>(options: {
30
+ sql: string;
31
+ values?: any[];
32
+ }, callback: (err: Error | null, results: R[] | MySQL2QueryResult<R>, fields: any) => void): Promise<void>;
33
+ beginTransaction(callback?: (err: Error | null) => void): Promise<void>;
34
+ commit(callback?: (err?: Error) => void): Promise<void>;
35
+ rollback(callback?: (err?: Error) => void): Promise<void>;
36
+ ping(callback?: (err?: Error) => void): Promise<void>;
37
+ }
38
+ export interface Pool extends EventEmitter {
39
+ getConnection(callback: (err: Error | null, connection: PoolConnection) => any): void;
40
+ getConnection(): Promise<PoolConnection>;
41
+ end(callback?: (err?: Error) => void): Promise<void>;
42
+ query<R = any>(sql: string): Promise<[R[] | MySQL2QueryResult<R>, any]>;
43
+ query<R = any>(sql: string, callback: (err: Error | null, results: R[] | MySQL2QueryResult<R>, fields: any) => void): Promise<void>;
44
+ query<R = any>(sql: string, params: any[]): Promise<[R[] | MySQL2QueryResult<R>, any]>;
45
+ query<R = any>(sql: string, params: any[], callback: (err: Error | null, results: R[] | MySQL2QueryResult<R>, fields: any) => void): Promise<void>;
46
+ query<R = any>(options: {
47
+ sql: string;
48
+ values?: any[];
49
+ }): Promise<[R[] | MySQL2QueryResult<R>, any]>;
50
+ query<R = any>(options: {
51
+ sql: string;
52
+ values?: any[];
53
+ }, callback: (err: Error | null, results: R[] | MySQL2QueryResult<R>, fields: any) => void): Promise<void>;
54
+ execute<R = any>(sql: string): Promise<[R[] | MySQL2QueryResult<R>, any]>;
55
+ execute<R = any>(sql: string, callback: (err: Error | null, results: R[] | MySQL2QueryResult<R>, fields: any) => void): Promise<void>;
56
+ execute<R = any>(sql: string, params: any[]): Promise<[R[] | MySQL2QueryResult<R>, any]>;
57
+ execute<R = any>(sql: string, params: any[], callback: (err: Error | null, results: R[] | MySQL2QueryResult<R>, fields: any) => void): Promise<void>;
58
+ execute<R = any>(options: {
59
+ sql: string;
60
+ values?: any[];
61
+ }): Promise<[R[] | MySQL2QueryResult<R>, any]>;
62
+ execute<R = any>(options: {
63
+ sql: string;
64
+ values?: any[];
65
+ }, callback: (err: Error | null, results: R[] | MySQL2QueryResult<R>, fields: any) => void): Promise<void>;
66
+ releaseConnection(connection: PoolConnection): void;
67
+ promise(): Pool;
68
+ unprepare(sql: string): any;
69
+ config: DataAPIClientConfig;
70
+ }
71
+ export interface MySQL2QueryResult<R = any> {
72
+ rows?: R[];
73
+ fields?: Array<{
74
+ name: string;
75
+ type?: number;
76
+ table?: string;
77
+ database?: string;
78
+ }>;
79
+ insertId?: number;
80
+ affectedRows?: number;
81
+ changedRows?: number;
82
+ warningCount?: number;
83
+ }
84
+ export declare function createMySQLConnection(config: DataAPIClientConfig): Connection;
85
+ export declare function createMySQLPool(config: DataAPIClientConfig): Pool;
86
+ //# sourceMappingURL=mysql2.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mysql2.d.ts","sourceRoot":"","sources":["../../src/compat/mysql2.ts"],"names":[],"mappings":"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"}