@vercel/functions 2.2.5 → 2.2.7
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/CHANGELOG.md +12 -0
- package/db-connections/index.d.ts +81 -0
- package/db-connections/index.js +148 -0
- package/db-connections/type-assertion.d.ts +13 -0
- package/db-connections/type-assertion.js +44 -0
- package/docs/modules/index.md +35 -0
- package/index.d.ts +1 -0
- package/index.js +3 -0
- package/package.json +11 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @vercel/functions
|
|
2
2
|
|
|
3
|
+
## 2.2.7
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Make DB pool inert in local dev ([#13647](https://github.com/vercel/vercel/pull/13647))
|
|
8
|
+
|
|
9
|
+
## 2.2.6
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- Introduce attachDatabasePool function ([#13632](https://github.com/vercel/vercel/pull/13632))
|
|
14
|
+
|
|
3
15
|
## 2.2.5
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
interface PgPool {
|
|
2
|
+
options?: {
|
|
3
|
+
idleTimeoutMillis?: number | null;
|
|
4
|
+
};
|
|
5
|
+
on?: (event: 'release', listener: (...args: any[]) => void) => void;
|
|
6
|
+
}
|
|
7
|
+
interface MySQLPool {
|
|
8
|
+
config?: {
|
|
9
|
+
connectionConfig?: {
|
|
10
|
+
idleTimeout?: number;
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
on?: (event: 'release', listener: (...args: any[]) => void) => void;
|
|
14
|
+
}
|
|
15
|
+
interface MySQL2Pool {
|
|
16
|
+
config?: {
|
|
17
|
+
idleTimeout?: number;
|
|
18
|
+
};
|
|
19
|
+
on?: (event: 'release', listener: (...args: any[]) => void) => void;
|
|
20
|
+
}
|
|
21
|
+
interface MariaDBPool {
|
|
22
|
+
config?: {
|
|
23
|
+
idleTimeout?: number;
|
|
24
|
+
};
|
|
25
|
+
on?: (event: 'release', listener: (...args: any[]) => void) => void;
|
|
26
|
+
}
|
|
27
|
+
interface MongoDBPool {
|
|
28
|
+
options?: {
|
|
29
|
+
maxIdleTimeMS?: number;
|
|
30
|
+
};
|
|
31
|
+
on?: (event: 'connectionCheckedOut' | 'connectionCheckedIn' | 'connectionPoolCreated' | 'connectionPoolClosed' | 'connectionCreated' | 'connectionReady' | 'connectionClosed', listener: (...args: any[]) => void) => void;
|
|
32
|
+
}
|
|
33
|
+
interface RedisPool {
|
|
34
|
+
options?: any;
|
|
35
|
+
on?: (event: 'ready' | 'end' | 'error' | 'connect', listener: (...args: any[]) => void) => void;
|
|
36
|
+
status?: string;
|
|
37
|
+
}
|
|
38
|
+
interface CassandraPool {
|
|
39
|
+
connect?: (callback?: (err?: Error) => void) => Promise<void>;
|
|
40
|
+
execute?: (query: string, params?: any[], options?: any) => Promise<any>;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* The database pool object. The supported pool types are:
|
|
44
|
+
* - PostgreSQL (pg)
|
|
45
|
+
* - MySQL2
|
|
46
|
+
* - MariaDB
|
|
47
|
+
* - MongoDB
|
|
48
|
+
* - Redis (ioredis)
|
|
49
|
+
* - Cassandra (cassandra-driver)
|
|
50
|
+
* - OTHER: This method uses duck-typing to detect the pool type. Respectively you can
|
|
51
|
+
* pass in any object with a compatible interface.
|
|
52
|
+
*/
|
|
53
|
+
export type DbPool = PgPool | MySQLPool | MySQL2Pool | MariaDBPool | MongoDBPool | RedisPool | CassandraPool;
|
|
54
|
+
/**
|
|
55
|
+
* Call this function right after creating a database pool with the database pool object
|
|
56
|
+
* as argument.
|
|
57
|
+
* This ensures that the current function instance stays alive long enough for
|
|
58
|
+
* idle database connections to be removed from the pool.
|
|
59
|
+
*
|
|
60
|
+
* @param dbPool - The database pool object. The supported pool types are:
|
|
61
|
+
* - PostgreSQL (pg)
|
|
62
|
+
* - MySQL2
|
|
63
|
+
* - MariaDB
|
|
64
|
+
* - MongoDB
|
|
65
|
+
* - Redis (ioredis)
|
|
66
|
+
* - Cassandra (cassandra-driver)
|
|
67
|
+
* - OTHER: This method uses duck-typing to detect the pool type. Respectively you can
|
|
68
|
+
* pass in any object with a compatible interface.
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* ```ts
|
|
72
|
+
* const pgPool = new Pool({
|
|
73
|
+
* connectionString: process.env.DATABASE_URL,
|
|
74
|
+
* });
|
|
75
|
+
* experimental_attachDatabasePool(pgPool);
|
|
76
|
+
* ```
|
|
77
|
+
*
|
|
78
|
+
* @experimental
|
|
79
|
+
*/
|
|
80
|
+
export declare function experimental_attachDatabasePool(dbPool: DbPool): void;
|
|
81
|
+
export {};
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var db_connections_exports = {};
|
|
20
|
+
__export(db_connections_exports, {
|
|
21
|
+
experimental_attachDatabasePool: () => experimental_attachDatabasePool
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(db_connections_exports);
|
|
24
|
+
var import_get_context = require("../get-context");
|
|
25
|
+
const DEBUG = !!process.env.DEBUG;
|
|
26
|
+
function getIdleTimeout(dbPool) {
|
|
27
|
+
if ("options" in dbPool && dbPool.options) {
|
|
28
|
+
if ("idleTimeoutMillis" in dbPool.options) {
|
|
29
|
+
return typeof dbPool.options.idleTimeoutMillis === "number" ? dbPool.options.idleTimeoutMillis : 1e4;
|
|
30
|
+
}
|
|
31
|
+
if ("maxIdleTimeMS" in dbPool.options) {
|
|
32
|
+
return typeof dbPool.options.maxIdleTimeMS === "number" ? dbPool.options.maxIdleTimeMS : 0;
|
|
33
|
+
}
|
|
34
|
+
if ("status" in dbPool) {
|
|
35
|
+
return 5e3;
|
|
36
|
+
}
|
|
37
|
+
if ("connect" in dbPool && "execute" in dbPool) {
|
|
38
|
+
return 3e4;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
if ("config" in dbPool && dbPool.config) {
|
|
42
|
+
if ("connectionConfig" in dbPool.config && dbPool.config.connectionConfig) {
|
|
43
|
+
return dbPool.config.connectionConfig.idleTimeout || 6e4;
|
|
44
|
+
}
|
|
45
|
+
if ("idleTimeout" in dbPool.config) {
|
|
46
|
+
return typeof dbPool.config.idleTimeout === "number" ? dbPool.config.idleTimeout : 6e4;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
if ("poolTimeout" in dbPool) {
|
|
50
|
+
return typeof dbPool.poolTimeout === "number" ? dbPool.poolTimeout : 6e4;
|
|
51
|
+
}
|
|
52
|
+
if ("idleTimeout" in dbPool) {
|
|
53
|
+
return typeof dbPool.idleTimeout === "number" ? dbPool.idleTimeout : 0;
|
|
54
|
+
}
|
|
55
|
+
return 1e4;
|
|
56
|
+
}
|
|
57
|
+
let idleTimeout = null;
|
|
58
|
+
let idleTimeoutResolve = () => {
|
|
59
|
+
};
|
|
60
|
+
const bootTime = Date.now();
|
|
61
|
+
const maximumDuration = 15 * 60 * 1e3 - 1e3;
|
|
62
|
+
function waitUntilIdleTimeout(dbPool) {
|
|
63
|
+
if (!process.env.VERCEL_URL) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
if (idleTimeout) {
|
|
67
|
+
clearTimeout(idleTimeout);
|
|
68
|
+
idleTimeoutResolve();
|
|
69
|
+
}
|
|
70
|
+
const promise = new Promise((resolve) => {
|
|
71
|
+
idleTimeoutResolve = resolve;
|
|
72
|
+
});
|
|
73
|
+
const waitTime = Math.min(
|
|
74
|
+
getIdleTimeout(dbPool) + 100,
|
|
75
|
+
maximumDuration - (Date.now() - bootTime)
|
|
76
|
+
);
|
|
77
|
+
idleTimeout = setTimeout(() => {
|
|
78
|
+
idleTimeoutResolve?.();
|
|
79
|
+
if (DEBUG) {
|
|
80
|
+
console.log("Database pool idle timeout reached. Releasing connections.");
|
|
81
|
+
}
|
|
82
|
+
}, waitTime);
|
|
83
|
+
const requestContext = (0, import_get_context.getContext)();
|
|
84
|
+
if (requestContext?.waitUntil) {
|
|
85
|
+
requestContext.waitUntil(promise);
|
|
86
|
+
} else {
|
|
87
|
+
console.warn("Pool release event triggered outside of request scope.");
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
function experimental_attachDatabasePool(dbPool) {
|
|
91
|
+
if (idleTimeout) {
|
|
92
|
+
idleTimeoutResolve?.();
|
|
93
|
+
clearTimeout(idleTimeout);
|
|
94
|
+
}
|
|
95
|
+
if ("on" in dbPool && dbPool.on && "options" in dbPool && "idleTimeoutMillis" in dbPool.options) {
|
|
96
|
+
const pgPool = dbPool;
|
|
97
|
+
pgPool.on("release", () => {
|
|
98
|
+
if (DEBUG) {
|
|
99
|
+
console.log("Client released from pool");
|
|
100
|
+
}
|
|
101
|
+
waitUntilIdleTimeout(dbPool);
|
|
102
|
+
});
|
|
103
|
+
return;
|
|
104
|
+
} else if ("on" in dbPool && dbPool.on && "config" in dbPool && dbPool.config && "connectionConfig" in dbPool.config) {
|
|
105
|
+
const mysqlPool = dbPool;
|
|
106
|
+
mysqlPool.on("release", () => {
|
|
107
|
+
if (DEBUG) {
|
|
108
|
+
console.log("MySQL client released from pool");
|
|
109
|
+
}
|
|
110
|
+
waitUntilIdleTimeout(dbPool);
|
|
111
|
+
});
|
|
112
|
+
return;
|
|
113
|
+
} else if ("on" in dbPool && dbPool.on && "config" in dbPool && dbPool.config && "idleTimeout" in dbPool.config) {
|
|
114
|
+
const mysql2Pool = dbPool;
|
|
115
|
+
mysql2Pool.on("release", () => {
|
|
116
|
+
if (DEBUG) {
|
|
117
|
+
console.log("MySQL2/MariaDB client released from pool");
|
|
118
|
+
}
|
|
119
|
+
waitUntilIdleTimeout(dbPool);
|
|
120
|
+
});
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
if ("on" in dbPool && dbPool.on && "options" in dbPool && dbPool.options && "maxIdleTimeMS" in dbPool.options) {
|
|
124
|
+
const mongoPool = dbPool;
|
|
125
|
+
mongoPool.on("connectionCheckedOut", () => {
|
|
126
|
+
if (DEBUG) {
|
|
127
|
+
console.log("MongoDB connection checked out");
|
|
128
|
+
}
|
|
129
|
+
waitUntilIdleTimeout(dbPool);
|
|
130
|
+
});
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
if ("on" in dbPool && dbPool.on && "options" in dbPool && dbPool.options && "socket" in dbPool.options) {
|
|
134
|
+
const redisPool = dbPool;
|
|
135
|
+
redisPool.on("end", () => {
|
|
136
|
+
if (DEBUG) {
|
|
137
|
+
console.log("Redis connection ended");
|
|
138
|
+
}
|
|
139
|
+
waitUntilIdleTimeout(dbPool);
|
|
140
|
+
});
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
throw new Error("Unsupported database pool type");
|
|
144
|
+
}
|
|
145
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
146
|
+
0 && (module.exports = {
|
|
147
|
+
experimental_attachDatabasePool
|
|
148
|
+
});
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Pool as PgPoolType } from 'pg';
|
|
2
|
+
import type { Pool as MySQL2PoolType } from 'mysql2/promise';
|
|
3
|
+
import type { Pool as MariaDBPoolType } from 'mariadb';
|
|
4
|
+
import type { MongoClient as MongoDBClientType } from 'mongodb';
|
|
5
|
+
import type { Redis as IoRedisType } from 'ioredis';
|
|
6
|
+
import type { Client as CassandraClientType } from 'cassandra-driver';
|
|
7
|
+
import type { DbPool } from '.';
|
|
8
|
+
export declare const pgSubtypeCheck: (pool: PgPoolType) => DbPool;
|
|
9
|
+
export declare const mysql2SubtypeCheck: (pool: MySQL2PoolType) => DbPool;
|
|
10
|
+
export declare const mariadbSubtypeCheck: (pool: MariaDBPoolType) => DbPool;
|
|
11
|
+
export declare const mongoSubtypeCheck: (client: MongoDBClientType) => DbPool;
|
|
12
|
+
export declare const ioredisSubtypeCheck: (redis: IoRedisType) => DbPool;
|
|
13
|
+
export declare const cassandraSubtypeCheck: (client: CassandraClientType) => DbPool;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var type_assertion_exports = {};
|
|
20
|
+
__export(type_assertion_exports, {
|
|
21
|
+
cassandraSubtypeCheck: () => cassandraSubtypeCheck,
|
|
22
|
+
ioredisSubtypeCheck: () => ioredisSubtypeCheck,
|
|
23
|
+
mariadbSubtypeCheck: () => mariadbSubtypeCheck,
|
|
24
|
+
mongoSubtypeCheck: () => mongoSubtypeCheck,
|
|
25
|
+
mysql2SubtypeCheck: () => mysql2SubtypeCheck,
|
|
26
|
+
pgSubtypeCheck: () => pgSubtypeCheck
|
|
27
|
+
});
|
|
28
|
+
module.exports = __toCommonJS(type_assertion_exports);
|
|
29
|
+
const pgSubtypeCheck = (pool) => pool;
|
|
30
|
+
const mysql2SubtypeCheck = (pool) => pool;
|
|
31
|
+
const mariadbSubtypeCheck = (pool) => pool;
|
|
32
|
+
const mongoSubtypeCheck = (client) => client;
|
|
33
|
+
const ioredisSubtypeCheck = (redis) => redis;
|
|
34
|
+
const cassandraSubtypeCheck = (client) => client;
|
|
35
|
+
throw new Error("This file is not used in the codebase.");
|
|
36
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
37
|
+
0 && (module.exports = {
|
|
38
|
+
cassandraSubtypeCheck,
|
|
39
|
+
ioredisSubtypeCheck,
|
|
40
|
+
mariadbSubtypeCheck,
|
|
41
|
+
mongoSubtypeCheck,
|
|
42
|
+
mysql2SubtypeCheck,
|
|
43
|
+
pgSubtypeCheck
|
|
44
|
+
});
|
package/docs/modules/index.md
CHANGED
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
|
|
11
11
|
### Functions
|
|
12
12
|
|
|
13
|
+
- [experimental_attachDatabasePool](index.md#experimental_attachdatabasepool)
|
|
13
14
|
- [geolocation](index.md#geolocation)
|
|
14
15
|
- [getCache](index.md#getcache)
|
|
15
16
|
- [getEnv](index.md#getenv)
|
|
@@ -20,6 +21,40 @@
|
|
|
20
21
|
|
|
21
22
|
## Functions
|
|
22
23
|
|
|
24
|
+
### experimental_attachDatabasePool
|
|
25
|
+
|
|
26
|
+
▸ **experimental_attachDatabasePool**(`dbPool`): `void`
|
|
27
|
+
|
|
28
|
+
Call this function right after creating a database pool with the database pool object
|
|
29
|
+
as argument.
|
|
30
|
+
This ensures that the current function instance stays alive long enough for
|
|
31
|
+
idle database connections to be removed from the pool.
|
|
32
|
+
|
|
33
|
+
**`Example`**
|
|
34
|
+
|
|
35
|
+
```ts
|
|
36
|
+
const pgPool = new Pool({
|
|
37
|
+
connectionString: process.env.DATABASE_URL,
|
|
38
|
+
});
|
|
39
|
+
experimental_attachDatabasePool(pgPool);
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
#### Parameters
|
|
43
|
+
|
|
44
|
+
| Name | Type | Description |
|
|
45
|
+
| :------- | :------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
46
|
+
| `dbPool` | `DbPool` | The database pool object. The supported pool types are: - PostgreSQL (pg) - MySQL2 - MariaDB - MongoDB - Redis (ioredis) - Cassandra (cassandra-driver) - OTHER: This method uses duck-typing to detect the pool type. Respectively you can pass in any object with a compatible interface. |
|
|
47
|
+
|
|
48
|
+
#### Returns
|
|
49
|
+
|
|
50
|
+
`void`
|
|
51
|
+
|
|
52
|
+
#### Defined in
|
|
53
|
+
|
|
54
|
+
[packages/functions/src/db-connections/index.ts:221](https://github.com/vercel/vercel/blob/main/packages/functions/src/db-connections/index.ts#L221)
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
23
58
|
### geolocation
|
|
24
59
|
|
|
25
60
|
▸ **geolocation**(`request`): [`Geo`](../interfaces/index.Geo.md)
|
package/index.d.ts
CHANGED
|
@@ -4,4 +4,5 @@ export { getEnv } from './get-env';
|
|
|
4
4
|
export { waitUntil } from './wait-until';
|
|
5
5
|
export { rewrite, next } from './middleware';
|
|
6
6
|
export { getCache } from './cache';
|
|
7
|
+
export { experimental_attachDatabasePool } from './db-connections';
|
|
7
8
|
export type { RuntimeCache } from './cache/types';
|
package/index.js
CHANGED
|
@@ -18,6 +18,7 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
19
|
var src_exports = {};
|
|
20
20
|
__export(src_exports, {
|
|
21
|
+
experimental_attachDatabasePool: () => import_db_connections.experimental_attachDatabasePool,
|
|
21
22
|
geolocation: () => import_headers.geolocation,
|
|
22
23
|
getCache: () => import_cache.getCache,
|
|
23
24
|
getEnv: () => import_get_env.getEnv,
|
|
@@ -32,8 +33,10 @@ var import_get_env = require("./get-env");
|
|
|
32
33
|
var import_wait_until = require("./wait-until");
|
|
33
34
|
var import_middleware = require("./middleware");
|
|
34
35
|
var import_cache = require("./cache");
|
|
36
|
+
var import_db_connections = require("./db-connections");
|
|
35
37
|
// Annotate the CommonJS export names for ESM import in node:
|
|
36
38
|
0 && (module.exports = {
|
|
39
|
+
experimental_attachDatabasePool,
|
|
37
40
|
geolocation,
|
|
38
41
|
getCache,
|
|
39
42
|
getEnv,
|
package/package.json
CHANGED
|
@@ -21,12 +21,16 @@
|
|
|
21
21
|
"import": "./oidc/index.js",
|
|
22
22
|
"require": "./oidc/index.js"
|
|
23
23
|
},
|
|
24
|
+
"./db-connections": {
|
|
25
|
+
"import": "./db-connections/index.js",
|
|
26
|
+
"require": "./db-connections/index.js"
|
|
27
|
+
},
|
|
24
28
|
"./middleware": {
|
|
25
29
|
"import": "./middleware.js",
|
|
26
30
|
"require": "./middleware.js"
|
|
27
31
|
}
|
|
28
32
|
},
|
|
29
|
-
"version": "2.2.
|
|
33
|
+
"version": "2.2.7",
|
|
30
34
|
"repository": {
|
|
31
35
|
"directory": "packages/functions",
|
|
32
36
|
"type": "git",
|
|
@@ -39,6 +43,12 @@
|
|
|
39
43
|
"@aws-sdk/client-s3": "3.609.0",
|
|
40
44
|
"@aws-sdk/credential-provider-web-identity": "3.609.0",
|
|
41
45
|
"@smithy/types": "3.3.0",
|
|
46
|
+
"@types/pg": "8.15.5",
|
|
47
|
+
"cassandra-driver": "4.8.0",
|
|
48
|
+
"ioredis": "5.6.1",
|
|
49
|
+
"mariadb": "3.4.5",
|
|
50
|
+
"mongodb": "6.18.0",
|
|
51
|
+
"mysql2": "3.14.2",
|
|
42
52
|
"tinyspawn": "1.3.1",
|
|
43
53
|
"typedoc": "0.24.6",
|
|
44
54
|
"typedoc-plugin-markdown": "4.1.2",
|