├── .DS_Store
├── .gitignore
├── LICENSE
├── README.md
├── docker-compose.yml
├── example
├── db.sqlite
├── index.ts
├── mysql.ts
├── postgres.ts
├── schema.sql
└── sqlite.ts
├── ormGPT.iml
├── package-lock.json
├── package.json
├── preview.gif
├── src
├── DatabaseEngineAdapter.ts
├── ErrorResponse.ts
├── ModelTuning.ts
├── MysqlAdapter.ts
├── PostgresAdapter.ts
├── SqliteAdapter.ts
├── SuccessResponse.ts
└── index.ts
├── tsconfig.json
└── yarn.lock
/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pilotpirxie/ormGPT/61b8566ba9cb9db419062c692e47058e3edb320e/.DS_Store
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | lerna-debug.log*
8 | .pnpm-debug.log*
9 |
10 | # Diagnostic reports (https://nodejs.org/api/report.html)
11 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
12 |
13 | # Runtime data
14 | pids
15 | *.pid
16 | *.seed
17 | *.pid.lock
18 |
19 | # Directory for instrumented libs generated by jscoverage/JSCover
20 | lib-cov
21 |
22 | # Coverage directory used by tools like istanbul
23 | coverage
24 | *.lcov
25 |
26 | # nyc test coverage
27 | .nyc_output
28 |
29 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
30 | .grunt
31 |
32 | # Bower dependency directory (https://bower.io/)
33 | bower_components
34 |
35 | # node-waf configuration
36 | .lock-wscript
37 |
38 | # Compiled binary addons (https://nodejs.org/api/addons.html)
39 | build/Release
40 |
41 | # Dependency directories
42 | node_modules/
43 | jspm_packages/
44 |
45 | # Snowpack dependency directory (https://snowpack.dev/)
46 | web_modules/
47 |
48 | # TypeScript cache
49 | *.tsbuildinfo
50 |
51 | # Optional npm cache directory
52 | .npm
53 |
54 | # Optional eslint cache
55 | .eslintcache
56 |
57 | # Optional stylelint cache
58 | .stylelintcache
59 |
60 | # Microbundle cache
61 | .rpt2_cache/
62 | .rts2_cache_cjs/
63 | .rts2_cache_es/
64 | .rts2_cache_umd/
65 |
66 | # Optional REPL history
67 | .node_repl_history
68 |
69 | # Output of 'npm pack'
70 | *.tgz
71 |
72 | # Yarn Integrity file
73 | .yarn-integrity
74 |
75 | # dotenv environment variable files
76 | .env
77 | .env.development.local
78 | .env.test.local
79 | .env.production.local
80 | .env.local
81 |
82 | # parcel-bundler cache (https://parceljs.org/)
83 | .cache
84 | .parcel-cache
85 |
86 | # Next.js build output
87 | .next
88 | out
89 |
90 | # Nuxt.js build / generate output
91 | .nuxt
92 | dist
93 |
94 | # Gatsby files
95 | .cache/
96 | # Comment in the public line in if your project uses Gatsby and not Next.js
97 | # https://nextjs.org/blog/next-9-1#public-directory-support
98 | # public
99 |
100 | # vuepress build output
101 | .vuepress/dist
102 |
103 | # vuepress v2.x temp and cache directory
104 | .temp
105 | .cache
106 |
107 | # Docusaurus cache and generated files
108 | .docusaurus
109 |
110 | # Serverless directories
111 | .serverless/
112 |
113 | # FuseBox cache
114 | .fusebox/
115 |
116 | # DynamoDB Local files
117 | .dynamodb/
118 |
119 | # TernJS port file
120 | .tern-port
121 |
122 | # Stores VSCode versions used for testing VSCode extensions
123 | .vscode-test
124 |
125 | # yarn v2
126 | .yarn/cache
127 | .yarn/unplugged
128 | .yarn/build-state.yml
129 | .yarn/install-state.gz
130 | .pnp.*
131 | .env
132 | .docker
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2023 pilotpirxie
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # ormGPT
2 |
3 | An ORM based on OpenAI that translates plain human language into SQL queries and executes them on a database.
4 |
5 | Currently supports database dialects: MySQL, PostgreSQL, and SQLite.
6 |
7 | Supported languages: English, German, French, Spanish, Polish, Italian, Dutch, Portuguese, Ukrainian, Arabic, Chinese, Japanese, Korean, Turkish and many more.
8 |
9 | ```shell
10 | ormgpt.query("give me post with id 1, all comments for this post and user information about author");
11 | ```
12 |
13 | Generated query:
14 | ```sql
15 | SELECT
16 | p.id AS post_id,
17 | p.title,
18 | p.body,
19 | c.id AS comment_id,
20 | c.body AS comment_body,
21 | u.username AS author_username,
22 | u.email AS author_email
23 | FROM
24 | posts p
25 | JOIN comments c ON p.id = c.post_id
26 | JOIN users u ON u.id = p.user_id
27 | WHERE
28 | p.id = 1;
29 | ```
30 |
31 | Response:
32 | ```js
33 | [
34 | {
35 | post_id: 1,
36 | title: 'Hello world!',
37 | body: 'This is my first post!',
38 | comment_id: 1,
39 | comment_body: 'Hello world!',
40 | author_username: 'test',
41 | author_email: 'test@example.com'
42 | }
43 | ]
44 | ```
45 |
46 | 
47 |
48 | ## Installation
49 |
50 | ```shell
51 | npm install ormgpt
52 |
53 | # or
54 |
55 | yarn add ormgpt
56 |
57 | # or
58 |
59 | pnpm add ormgpt
60 | ```
61 |
62 | ## Usage
63 | Prepare a database schema file, for example `schema.sql`. This file will be used to generate queries.
64 |
65 | ```js
66 | const client = await createConnection({
67 | host: 'localhost',
68 | port: 3306,
69 | database: 'ormgpt',
70 | user: 'root',
71 | password: 'mysecretpassword',
72 | });
73 |
74 | const mysqlAdapter = new MysqlAdapter({
75 | client
76 | });
77 |
78 | const ormgpt = new ormGPT({
79 | apiKey: "OPENAI_API_KEY",
80 | schemaFilePath: "./example/schema.sql",
81 | dialect: "postgres",
82 | dbEngineAdapter: mysqlAdapter,
83 | });
84 |
85 | await ormgpt.query(
86 | "add new user with username 'test' and email 'test@example.com'",
87 | );
88 |
89 | const users = await ormgpt.query("get all users");
90 | console.log(users);
91 | ```
92 |
93 | ### Adapters
94 |
95 | MySQL
96 | ```js
97 | const client = await createConnection({
98 | host: 'localhost',
99 | port: 3306,
100 | database: 'ormgpt',
101 | user: 'root',
102 | password: 'mysecretpassword',
103 | });
104 |
105 | const mysqlAdapter = new MysqlAdapter({
106 | client
107 | });
108 | ```
109 |
110 | Postgres
111 | ```js
112 | const client = new Client({
113 | host: 'localhost',
114 | port: 5432,
115 | database: 'ormgpt',
116 | user: 'mysecretuser',
117 | password: 'mysecretpassword',
118 | });
119 | client.connect();
120 |
121 | const postgresAdapter = new PostgresAdapter({
122 | client
123 | });
124 | ```
125 |
126 | SQLite
127 | ```js
128 | const sqliteAdapter = new SqliteAdapter({
129 | dbFilePath: "./example/db.sqlite",
130 | });
131 | ```
132 |
133 | ### Why?
134 |
135 | In the last two years, I found ORMs to be new "days since the last javascript framework" in the JavaScript ecosystem. And since AI is a hot buzzword
136 | I decided to experiment a little to combine both and create an ORM that uses OpenAI to generate SQL queries. Please don't use this in production.
137 |
138 | ### License
139 | MIT
--------------------------------------------------------------------------------
/docker-compose.yml:
--------------------------------------------------------------------------------
1 | version: '3.9'
2 |
3 | services:
4 | db:
5 | image: postgres:15
6 | environment:
7 | POSTGRES_DB: ormgpt
8 | POSTGRES_USER: mysecretuser
9 | POSTGRES_PASSWORD: mysecretpassword
10 | ports:
11 | - "5432:5432"
12 | volumes:
13 | - ./.docker/postgres:/var/lib/postgresql/data
14 | restart: unless-stopped
15 | db2:
16 | image: mysql:8
17 | environment:
18 | MYSQL_ROOT_PASSWORD: mysecretpassword
19 | MYSQL_DATABASE: ormgpt
20 | restart: unless-stopped
21 | ports:
22 | - "3306:3306"
23 | volumes:
24 | - ./.docker/mysql:/var/lib/mysql
--------------------------------------------------------------------------------
/example/db.sqlite:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pilotpirxie/ormGPT/61b8566ba9cb9db419062c692e47058e3edb320e/example/db.sqlite
--------------------------------------------------------------------------------
/example/index.ts:
--------------------------------------------------------------------------------
1 | import 'dotenv/config';
2 | import {ormGPT} from "../src";
3 |
4 |
5 | (async () => {
6 | const ormgpt = new ormGPT({
7 | apiKey: process.env.OPENAI_API_KEY || "",
8 | schemaFilePath: "./example/schema.sql",
9 | dialect: "postgres",
10 | });
11 |
12 | const userQuery = await ormgpt.getQuery("give me all users data");
13 | console.log(userQuery);
14 |
15 | const userQuery2 = await ormgpt.getQuery("give me all users data where id is 1");
16 | console.log(userQuery2);
17 |
18 | const postQuery1 = await ormgpt.getQuery("give me all posts for user with id 1");
19 | console.log(postQuery1);
20 |
21 | const postQuery2 = await ormgpt.getQuery(
22 | "give me post with id 1 and all comments for it",
23 | );
24 | console.log(postQuery2);
25 |
26 | const postQuery3 = await ormgpt.getQuery(
27 | "give me post with id 1, all comments for this post and user information about author",
28 | );
29 | console.log(postQuery3);
30 |
31 | const commentQuery = await ormgpt.getQuery(
32 | "give me all comments written between 2023-01-01 and 2023-12-01",
33 | );
34 | console.log(commentQuery);
35 |
36 | const commentQuery2 = await ormgpt.getQuery(
37 | "add a comment for post with id 1 with content 'Hello world!' as user with id 3",
38 | );
39 | console.log(commentQuery2);
40 |
41 | const userQuery3 = await ormgpt.getQuery(
42 | "add new user with username 'test' and email 'test@example.com'",
43 | );
44 | console.log(userQuery3);
45 |
46 | const userQuery4 = await ormgpt.getQuery(
47 | "write batch insert of 10 users with username 'test'+current_index and email 'test+current_index@example.com'",
48 | );
49 | console.log(userQuery4);
50 | })();
51 |
--------------------------------------------------------------------------------
/example/mysql.ts:
--------------------------------------------------------------------------------
1 | import "dotenv/config";
2 | import { ormGPT } from "../src";
3 | import {createConnection} from "mysql2/promise";
4 | import {MysqlAdapter} from "../src/MysqlAdapter";
5 |
6 | (async () => {
7 | const client = await createConnection({
8 | host: 'localhost',
9 | port: 3306,
10 | database: 'ormgpt',
11 | user: 'root',
12 | password: 'mysecretpassword',
13 | });
14 |
15 | const mysqlAdapter = new MysqlAdapter({
16 | client
17 | });
18 |
19 | const ormgpt = new ormGPT({
20 | apiKey: process.env.OPENAI_API_KEY || "",
21 | schemaFilePath: "./example/schema.sql",
22 | dialect: "postgres",
23 | dbEngineAdapter: mysqlAdapter,
24 | });
25 |
26 | await ormgpt.query(
27 | "add new user with username 'test' and email 'test@example.com'",
28 | );
29 |
30 | const users = await ormgpt.query("get all users");
31 | console.log(users);
32 |
33 | client.end();
34 | })();
35 |
--------------------------------------------------------------------------------
/example/postgres.ts:
--------------------------------------------------------------------------------
1 | import "dotenv/config";
2 | import { ormGPT } from "../src";
3 | import { SqliteAdapter } from "../src/SqliteAdapter";
4 | import {Client, Pool} from 'pg'
5 | import {PostgresAdapter} from "../src/PostgresAdapter";
6 |
7 | (async () => {
8 | const client = new Client({
9 | host: 'localhost',
10 | port: 5432,
11 | database: 'ormgpt',
12 | user: 'mysecretuser',
13 | password: 'mysecretpassword',
14 | });
15 | client.connect();
16 |
17 | const postgresAdapter = new PostgresAdapter({
18 | client
19 | });
20 |
21 | const ormgpt = new ormGPT({
22 | apiKey: process.env.OPENAI_API_KEY || "",
23 | schemaFilePath: "./example/schema.sql",
24 | dialect: "postgres",
25 | dbEngineAdapter: postgresAdapter,
26 | });
27 |
28 | await ormgpt.query(
29 | "add new user with username 'test' and email 'test@example.com'",
30 | );
31 |
32 | const users = await ormgpt.query("get all users");
33 | console.log(users);
34 |
35 | client.end();
36 | })();
37 |
--------------------------------------------------------------------------------
/example/schema.sql:
--------------------------------------------------------------------------------
1 | CREATE TABLE users
2 | (
3 | id SERIAL PRIMARY KEY,
4 | username VARCHAR(255) NOT NULL,
5 | email VARCHAR(255) NOT NULL
6 | );
7 |
8 | CREATE TABLE posts
9 | (
10 | id SERIAL PRIMARY KEY,
11 | title VARCHAR(255) NOT NULL,
12 | body TEXT NOT NULL,
13 | user_id INTEGER REFERENCES users (id)
14 | );
15 |
16 | CREATE TABLE comments
17 | (
18 | id SERIAL PRIMARY KEY,
19 | body TEXT NOT NULL,
20 | user_id INTEGER REFERENCES users (id),
21 | post_id INTEGER REFERENCES posts (id)
22 | );
23 |
24 | CREATE TABLE likes
25 | (
26 | id SERIAL PRIMARY KEY,
27 | user_id INTEGER REFERENCES users (id),
28 | post_id INTEGER REFERENCES posts (id)
29 | );
30 |
--------------------------------------------------------------------------------
/example/sqlite.ts:
--------------------------------------------------------------------------------
1 | import "dotenv/config";
2 | import { ormGPT } from "../src";
3 | import { SqliteAdapter } from "../src/SqliteAdapter";
4 |
5 | (async () => {
6 | const sqliteAdapter = new SqliteAdapter({
7 | dbFilePath: "./example/db.sqlite",
8 | });
9 |
10 | const ormgpt = new ormGPT({
11 | apiKey: process.env.OPENAI_API_KEY || "",
12 | schemaFilePath: "./example/schema.sql",
13 | dialect: "postgres",
14 | dbEngineAdapter: sqliteAdapter,
15 | });
16 |
17 | await ormgpt.query(
18 | "add new user with id 1, username 'test' and email 'test@example.com'",
19 | );
20 |
21 | const users = await ormgpt.query("get all users");
22 | console.log(users);
23 |
24 | await ormgpt.query(
25 | "add new user with id 2, username 'test2' and email 'test2@example.com'"
26 | );
27 |
28 | await ormgpt.query(
29 | "add new post with id 1, title 'Hello world!' and content 'This is my first post!' as user with id 1"
30 | );
31 |
32 | await ormgpt.query(
33 | "add new post with id 2, title 'Hello world 2!' and content 'This is my second post!' as user with id 2"
34 | );
35 |
36 | await ormgpt.query(
37 | "add comment to post with id 1 with comment content 'Hello world!', comment id 1 and add as user with id 2"
38 | );
39 |
40 | const postQuery3 = await ormgpt.query(
41 | "give me post with id 1, all comments for this post and user information about author",
42 | );
43 | console.log(postQuery3);
44 | })();
45 |
--------------------------------------------------------------------------------
/ormGPT.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "ormgpt",
3 | "version": "1.0.0",
4 | "lockfileVersion": 3,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "name": "ormgpt",
9 | "version": "1.0.0",
10 | "license": "MIT",
11 | "dependencies": {
12 | "better-sqlite3": "^9.0.0"
13 | },
14 | "devDependencies": {
15 | "@types/better-sqlite3": "^7.6.5",
16 | "@types/node": "18",
17 | "dotenv": "^16.3.1",
18 | "prettier": "^3.0.3",
19 | "ts-node": "^10.9.1",
20 | "typescript": "^5.2.2"
21 | }
22 | },
23 | "node_modules/@cspotcode/source-map-support": {
24 | "version": "0.8.1",
25 | "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
26 | "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
27 | "dev": true,
28 | "license": "MIT",
29 | "dependencies": {
30 | "@jridgewell/trace-mapping": "0.3.9"
31 | },
32 | "engines": {
33 | "node": ">=12"
34 | }
35 | },
36 | "node_modules/@jridgewell/resolve-uri": {
37 | "version": "3.1.1",
38 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
39 | "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
40 | "dev": true,
41 | "license": "MIT",
42 | "engines": {
43 | "node": ">=6.0.0"
44 | }
45 | },
46 | "node_modules/@jridgewell/sourcemap-codec": {
47 | "version": "1.4.15",
48 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
49 | "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
50 | "dev": true,
51 | "license": "MIT"
52 | },
53 | "node_modules/@jridgewell/trace-mapping": {
54 | "version": "0.3.9",
55 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
56 | "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
57 | "dev": true,
58 | "license": "MIT",
59 | "dependencies": {
60 | "@jridgewell/resolve-uri": "^3.0.3",
61 | "@jridgewell/sourcemap-codec": "^1.4.10"
62 | }
63 | },
64 | "node_modules/@tsconfig/node10": {
65 | "version": "1.0.9",
66 | "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz",
67 | "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==",
68 | "dev": true,
69 | "license": "MIT"
70 | },
71 | "node_modules/@tsconfig/node12": {
72 | "version": "1.0.11",
73 | "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz",
74 | "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==",
75 | "dev": true,
76 | "license": "MIT"
77 | },
78 | "node_modules/@tsconfig/node14": {
79 | "version": "1.0.3",
80 | "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz",
81 | "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==",
82 | "dev": true,
83 | "license": "MIT"
84 | },
85 | "node_modules/@tsconfig/node16": {
86 | "version": "1.0.4",
87 | "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz",
88 | "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==",
89 | "dev": true,
90 | "license": "MIT"
91 | },
92 | "node_modules/@types/better-sqlite3": {
93 | "version": "7.6.5",
94 | "resolved": "https://registry.npmjs.org/@types/better-sqlite3/-/better-sqlite3-7.6.5.tgz",
95 | "integrity": "sha512-H3ZUx89KiPhYa9nalUXVVStSUFHuzYxt4yoazufpTTYW9rVUCzhh02V8CH2C8nE4libnK0UgFq5DFIe0DOhqow==",
96 | "dev": true,
97 | "license": "MIT",
98 | "dependencies": {
99 | "@types/node": "*"
100 | }
101 | },
102 | "node_modules/@types/better-sqlite3/node_modules/@types/node": {
103 | "version": "20.8.4",
104 | "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.4.tgz",
105 | "integrity": "sha512-ZVPnqU58giiCjSxjVUESDtdPk4QR5WQhhINbc9UBrKLU68MX5BF6kbQzTrkwbolyr0X8ChBpXfavr5mZFKZQ5A==",
106 | "dev": true,
107 | "license": "MIT",
108 | "dependencies": {
109 | "undici-types": "~5.25.1"
110 | }
111 | },
112 | "node_modules/@types/node": {
113 | "version": "18.18.4",
114 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.18.4.tgz",
115 | "integrity": "sha512-t3rNFBgJRugIhackit2mVcLfF6IRc0JE4oeizPQL8Zrm8n2WY/0wOdpOPhdtG0V9Q2TlW/axbF1MJ6z+Yj/kKQ==",
116 | "dev": true,
117 | "license": "MIT"
118 | },
119 | "node_modules/acorn": {
120 | "version": "8.10.0",
121 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz",
122 | "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==",
123 | "dev": true,
124 | "license": "MIT",
125 | "bin": {
126 | "acorn": "bin/acorn"
127 | },
128 | "engines": {
129 | "node": ">=0.4.0"
130 | }
131 | },
132 | "node_modules/acorn-walk": {
133 | "version": "8.2.0",
134 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz",
135 | "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==",
136 | "dev": true,
137 | "license": "MIT",
138 | "engines": {
139 | "node": ">=0.4.0"
140 | }
141 | },
142 | "node_modules/arg": {
143 | "version": "4.1.3",
144 | "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
145 | "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
146 | "dev": true,
147 | "license": "MIT"
148 | },
149 | "node_modules/base64-js": {
150 | "version": "1.5.1",
151 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
152 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
153 | "funding": [
154 | {
155 | "type": "github",
156 | "url": "https://github.com/sponsors/feross"
157 | },
158 | {
159 | "type": "patreon",
160 | "url": "https://www.patreon.com/feross"
161 | },
162 | {
163 | "type": "consulting",
164 | "url": "https://feross.org/support"
165 | }
166 | ],
167 | "license": "MIT"
168 | },
169 | "node_modules/better-sqlite3": {
170 | "version": "9.0.0",
171 | "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-9.0.0.tgz",
172 | "integrity": "sha512-lDxQ9qg/XuUHZG6xzrQaMHkNWl37t35/LPB/VJGV8DdScSuGFNfFSqgscXEd8UIuyk/d9wU8iaMxQa4If5Wqog==",
173 | "hasInstallScript": true,
174 | "license": "MIT",
175 | "dependencies": {
176 | "bindings": "^1.5.0",
177 | "prebuild-install": "^7.1.1"
178 | }
179 | },
180 | "node_modules/bindings": {
181 | "version": "1.5.0",
182 | "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
183 | "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
184 | "license": "MIT",
185 | "dependencies": {
186 | "file-uri-to-path": "1.0.0"
187 | }
188 | },
189 | "node_modules/bl": {
190 | "version": "4.1.0",
191 | "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
192 | "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
193 | "license": "MIT",
194 | "dependencies": {
195 | "buffer": "^5.5.0",
196 | "inherits": "^2.0.4",
197 | "readable-stream": "^3.4.0"
198 | }
199 | },
200 | "node_modules/buffer": {
201 | "version": "5.7.1",
202 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
203 | "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
204 | "funding": [
205 | {
206 | "type": "github",
207 | "url": "https://github.com/sponsors/feross"
208 | },
209 | {
210 | "type": "patreon",
211 | "url": "https://www.patreon.com/feross"
212 | },
213 | {
214 | "type": "consulting",
215 | "url": "https://feross.org/support"
216 | }
217 | ],
218 | "license": "MIT",
219 | "dependencies": {
220 | "base64-js": "^1.3.1",
221 | "ieee754": "^1.1.13"
222 | }
223 | },
224 | "node_modules/chownr": {
225 | "version": "1.1.4",
226 | "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
227 | "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
228 | "license": "ISC"
229 | },
230 | "node_modules/create-require": {
231 | "version": "1.1.1",
232 | "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
233 | "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
234 | "dev": true,
235 | "license": "MIT"
236 | },
237 | "node_modules/decompress-response": {
238 | "version": "6.0.0",
239 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz",
240 | "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
241 | "license": "MIT",
242 | "dependencies": {
243 | "mimic-response": "^3.1.0"
244 | },
245 | "engines": {
246 | "node": ">=10"
247 | },
248 | "funding": {
249 | "url": "https://github.com/sponsors/sindresorhus"
250 | }
251 | },
252 | "node_modules/deep-extend": {
253 | "version": "0.6.0",
254 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
255 | "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
256 | "license": "MIT",
257 | "engines": {
258 | "node": ">=4.0.0"
259 | }
260 | },
261 | "node_modules/detect-libc": {
262 | "version": "2.0.2",
263 | "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz",
264 | "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==",
265 | "license": "Apache-2.0",
266 | "engines": {
267 | "node": ">=8"
268 | }
269 | },
270 | "node_modules/diff": {
271 | "version": "4.0.2",
272 | "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
273 | "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
274 | "dev": true,
275 | "license": "BSD-3-Clause",
276 | "engines": {
277 | "node": ">=0.3.1"
278 | }
279 | },
280 | "node_modules/dotenv": {
281 | "version": "16.3.1",
282 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz",
283 | "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==",
284 | "dev": true,
285 | "license": "BSD-2-Clause",
286 | "engines": {
287 | "node": ">=12"
288 | },
289 | "funding": {
290 | "url": "https://github.com/motdotla/dotenv?sponsor=1"
291 | }
292 | },
293 | "node_modules/end-of-stream": {
294 | "version": "1.4.4",
295 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
296 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
297 | "license": "MIT",
298 | "dependencies": {
299 | "once": "^1.4.0"
300 | }
301 | },
302 | "node_modules/expand-template": {
303 | "version": "2.0.3",
304 | "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz",
305 | "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==",
306 | "license": "(MIT OR WTFPL)",
307 | "engines": {
308 | "node": ">=6"
309 | }
310 | },
311 | "node_modules/file-uri-to-path": {
312 | "version": "1.0.0",
313 | "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
314 | "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
315 | "license": "MIT"
316 | },
317 | "node_modules/fs-constants": {
318 | "version": "1.0.0",
319 | "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
320 | "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==",
321 | "license": "MIT"
322 | },
323 | "node_modules/github-from-package": {
324 | "version": "0.0.0",
325 | "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz",
326 | "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==",
327 | "license": "MIT"
328 | },
329 | "node_modules/ieee754": {
330 | "version": "1.2.1",
331 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
332 | "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
333 | "funding": [
334 | {
335 | "type": "github",
336 | "url": "https://github.com/sponsors/feross"
337 | },
338 | {
339 | "type": "patreon",
340 | "url": "https://www.patreon.com/feross"
341 | },
342 | {
343 | "type": "consulting",
344 | "url": "https://feross.org/support"
345 | }
346 | ],
347 | "license": "BSD-3-Clause"
348 | },
349 | "node_modules/inherits": {
350 | "version": "2.0.4",
351 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
352 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
353 | "license": "ISC"
354 | },
355 | "node_modules/ini": {
356 | "version": "1.3.8",
357 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
358 | "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
359 | "license": "ISC"
360 | },
361 | "node_modules/lru-cache": {
362 | "version": "6.0.0",
363 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
364 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
365 | "license": "ISC",
366 | "dependencies": {
367 | "yallist": "^4.0.0"
368 | },
369 | "engines": {
370 | "node": ">=10"
371 | }
372 | },
373 | "node_modules/make-error": {
374 | "version": "1.3.6",
375 | "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
376 | "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
377 | "dev": true,
378 | "license": "ISC"
379 | },
380 | "node_modules/mimic-response": {
381 | "version": "3.1.0",
382 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz",
383 | "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==",
384 | "license": "MIT",
385 | "engines": {
386 | "node": ">=10"
387 | },
388 | "funding": {
389 | "url": "https://github.com/sponsors/sindresorhus"
390 | }
391 | },
392 | "node_modules/minimist": {
393 | "version": "1.2.8",
394 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
395 | "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
396 | "license": "MIT",
397 | "funding": {
398 | "url": "https://github.com/sponsors/ljharb"
399 | }
400 | },
401 | "node_modules/mkdirp-classic": {
402 | "version": "0.5.3",
403 | "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
404 | "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==",
405 | "license": "MIT"
406 | },
407 | "node_modules/napi-build-utils": {
408 | "version": "1.0.2",
409 | "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz",
410 | "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==",
411 | "license": "MIT"
412 | },
413 | "node_modules/node-abi": {
414 | "version": "3.50.0",
415 | "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.50.0.tgz",
416 | "integrity": "sha512-2Gxu7Eq7vnBIRfYSmqPruEllMM14FjOQFJSoqdGWthVn+tmwEXzmdPpya6cvvwf0uZA3F5N1fMFr9mijZBplFA==",
417 | "license": "MIT",
418 | "dependencies": {
419 | "semver": "^7.3.5"
420 | },
421 | "engines": {
422 | "node": ">=10"
423 | }
424 | },
425 | "node_modules/once": {
426 | "version": "1.4.0",
427 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
428 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
429 | "license": "ISC",
430 | "dependencies": {
431 | "wrappy": "1"
432 | }
433 | },
434 | "node_modules/prebuild-install": {
435 | "version": "7.1.1",
436 | "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz",
437 | "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==",
438 | "license": "MIT",
439 | "dependencies": {
440 | "detect-libc": "^2.0.0",
441 | "expand-template": "^2.0.3",
442 | "github-from-package": "0.0.0",
443 | "minimist": "^1.2.3",
444 | "mkdirp-classic": "^0.5.3",
445 | "napi-build-utils": "^1.0.1",
446 | "node-abi": "^3.3.0",
447 | "pump": "^3.0.0",
448 | "rc": "^1.2.7",
449 | "simple-get": "^4.0.0",
450 | "tar-fs": "^2.0.0",
451 | "tunnel-agent": "^0.6.0"
452 | },
453 | "bin": {
454 | "prebuild-install": "bin.js"
455 | },
456 | "engines": {
457 | "node": ">=10"
458 | }
459 | },
460 | "node_modules/prettier": {
461 | "version": "3.0.3",
462 | "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz",
463 | "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==",
464 | "dev": true,
465 | "license": "MIT",
466 | "bin": {
467 | "prettier": "bin/prettier.cjs"
468 | },
469 | "engines": {
470 | "node": ">=14"
471 | },
472 | "funding": {
473 | "url": "https://github.com/prettier/prettier?sponsor=1"
474 | }
475 | },
476 | "node_modules/pump": {
477 | "version": "3.0.0",
478 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
479 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
480 | "license": "MIT",
481 | "dependencies": {
482 | "end-of-stream": "^1.1.0",
483 | "once": "^1.3.1"
484 | }
485 | },
486 | "node_modules/rc": {
487 | "version": "1.2.8",
488 | "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
489 | "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
490 | "license": "(BSD-2-Clause OR MIT OR Apache-2.0)",
491 | "dependencies": {
492 | "deep-extend": "^0.6.0",
493 | "ini": "~1.3.0",
494 | "minimist": "^1.2.0",
495 | "strip-json-comments": "~2.0.1"
496 | },
497 | "bin": {
498 | "rc": "cli.js"
499 | }
500 | },
501 | "node_modules/readable-stream": {
502 | "version": "3.6.2",
503 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
504 | "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
505 | "license": "MIT",
506 | "dependencies": {
507 | "inherits": "^2.0.3",
508 | "string_decoder": "^1.1.1",
509 | "util-deprecate": "^1.0.1"
510 | },
511 | "engines": {
512 | "node": ">= 6"
513 | }
514 | },
515 | "node_modules/safe-buffer": {
516 | "version": "5.2.1",
517 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
518 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
519 | "funding": [
520 | {
521 | "type": "github",
522 | "url": "https://github.com/sponsors/feross"
523 | },
524 | {
525 | "type": "patreon",
526 | "url": "https://www.patreon.com/feross"
527 | },
528 | {
529 | "type": "consulting",
530 | "url": "https://feross.org/support"
531 | }
532 | ],
533 | "license": "MIT"
534 | },
535 | "node_modules/semver": {
536 | "version": "7.5.4",
537 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
538 | "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
539 | "license": "ISC",
540 | "dependencies": {
541 | "lru-cache": "^6.0.0"
542 | },
543 | "bin": {
544 | "semver": "bin/semver.js"
545 | },
546 | "engines": {
547 | "node": ">=10"
548 | }
549 | },
550 | "node_modules/simple-concat": {
551 | "version": "1.0.1",
552 | "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz",
553 | "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==",
554 | "funding": [
555 | {
556 | "type": "github",
557 | "url": "https://github.com/sponsors/feross"
558 | },
559 | {
560 | "type": "patreon",
561 | "url": "https://www.patreon.com/feross"
562 | },
563 | {
564 | "type": "consulting",
565 | "url": "https://feross.org/support"
566 | }
567 | ],
568 | "license": "MIT"
569 | },
570 | "node_modules/simple-get": {
571 | "version": "4.0.1",
572 | "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz",
573 | "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==",
574 | "funding": [
575 | {
576 | "type": "github",
577 | "url": "https://github.com/sponsors/feross"
578 | },
579 | {
580 | "type": "patreon",
581 | "url": "https://www.patreon.com/feross"
582 | },
583 | {
584 | "type": "consulting",
585 | "url": "https://feross.org/support"
586 | }
587 | ],
588 | "license": "MIT",
589 | "dependencies": {
590 | "decompress-response": "^6.0.0",
591 | "once": "^1.3.1",
592 | "simple-concat": "^1.0.0"
593 | }
594 | },
595 | "node_modules/string_decoder": {
596 | "version": "1.3.0",
597 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
598 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
599 | "license": "MIT",
600 | "dependencies": {
601 | "safe-buffer": "~5.2.0"
602 | }
603 | },
604 | "node_modules/strip-json-comments": {
605 | "version": "2.0.1",
606 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
607 | "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==",
608 | "license": "MIT",
609 | "engines": {
610 | "node": ">=0.10.0"
611 | }
612 | },
613 | "node_modules/tar-fs": {
614 | "version": "2.1.1",
615 | "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz",
616 | "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==",
617 | "license": "MIT",
618 | "dependencies": {
619 | "chownr": "^1.1.1",
620 | "mkdirp-classic": "^0.5.2",
621 | "pump": "^3.0.0",
622 | "tar-stream": "^2.1.4"
623 | }
624 | },
625 | "node_modules/tar-stream": {
626 | "version": "2.2.0",
627 | "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
628 | "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
629 | "license": "MIT",
630 | "dependencies": {
631 | "bl": "^4.0.3",
632 | "end-of-stream": "^1.4.1",
633 | "fs-constants": "^1.0.0",
634 | "inherits": "^2.0.3",
635 | "readable-stream": "^3.1.1"
636 | },
637 | "engines": {
638 | "node": ">=6"
639 | }
640 | },
641 | "node_modules/ts-node": {
642 | "version": "10.9.1",
643 | "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz",
644 | "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==",
645 | "dev": true,
646 | "license": "MIT",
647 | "dependencies": {
648 | "@cspotcode/source-map-support": "^0.8.0",
649 | "@tsconfig/node10": "^1.0.7",
650 | "@tsconfig/node12": "^1.0.7",
651 | "@tsconfig/node14": "^1.0.0",
652 | "@tsconfig/node16": "^1.0.2",
653 | "acorn": "^8.4.1",
654 | "acorn-walk": "^8.1.1",
655 | "arg": "^4.1.0",
656 | "create-require": "^1.1.0",
657 | "diff": "^4.0.1",
658 | "make-error": "^1.1.1",
659 | "v8-compile-cache-lib": "^3.0.1",
660 | "yn": "3.1.1"
661 | },
662 | "bin": {
663 | "ts-node": "dist/bin.js",
664 | "ts-node-cwd": "dist/bin-cwd.js",
665 | "ts-node-esm": "dist/bin-esm.js",
666 | "ts-node-script": "dist/bin-script.js",
667 | "ts-node-transpile-only": "dist/bin-transpile.js",
668 | "ts-script": "dist/bin-script-deprecated.js"
669 | },
670 | "peerDependencies": {
671 | "@swc/core": ">=1.2.50",
672 | "@swc/wasm": ">=1.2.50",
673 | "@types/node": "*",
674 | "typescript": ">=2.7"
675 | },
676 | "peerDependenciesMeta": {
677 | "@swc/core": {
678 | "optional": true
679 | },
680 | "@swc/wasm": {
681 | "optional": true
682 | }
683 | }
684 | },
685 | "node_modules/tunnel-agent": {
686 | "version": "0.6.0",
687 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
688 | "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
689 | "license": "Apache-2.0",
690 | "dependencies": {
691 | "safe-buffer": "^5.0.1"
692 | },
693 | "engines": {
694 | "node": "*"
695 | }
696 | },
697 | "node_modules/typescript": {
698 | "version": "5.2.2",
699 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz",
700 | "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==",
701 | "dev": true,
702 | "license": "Apache-2.0",
703 | "bin": {
704 | "tsc": "bin/tsc",
705 | "tsserver": "bin/tsserver"
706 | },
707 | "engines": {
708 | "node": ">=14.17"
709 | }
710 | },
711 | "node_modules/undici-types": {
712 | "version": "5.25.3",
713 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.25.3.tgz",
714 | "integrity": "sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==",
715 | "dev": true,
716 | "license": "MIT"
717 | },
718 | "node_modules/util-deprecate": {
719 | "version": "1.0.2",
720 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
721 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
722 | "license": "MIT"
723 | },
724 | "node_modules/v8-compile-cache-lib": {
725 | "version": "3.0.1",
726 | "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
727 | "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
728 | "dev": true,
729 | "license": "MIT"
730 | },
731 | "node_modules/wrappy": {
732 | "version": "1.0.2",
733 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
734 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
735 | "license": "ISC"
736 | },
737 | "node_modules/yallist": {
738 | "version": "4.0.0",
739 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
740 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
741 | "license": "ISC"
742 | },
743 | "node_modules/yn": {
744 | "version": "3.1.1",
745 | "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
746 | "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
747 | "dev": true,
748 | "license": "MIT",
749 | "engines": {
750 | "node": ">=6"
751 | }
752 | }
753 | }
754 | }
755 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "ormgpt",
3 | "version": "1.0.2",
4 | "main": "./dist/index.js",
5 | "repository": {
6 | "url": "https://github.com/pilotpirxie/ormGPT.git",
7 | "type": "git"
8 | },
9 | "license": "MIT",
10 | "scripts": {
11 | "demo": "ts-node example/index.ts",
12 | "demo:local": "ts-node example/index.ts",
13 | "demo:sqlite": "ts-node example/sqlite.ts",
14 | "demo:postgres": "ts-node example/postgres.ts",
15 | "demo:mysql": "ts-node example/mysql.ts",
16 | "build": "tsc"
17 | },
18 | "devDependencies": {
19 | "@types/better-sqlite3": "^7.6.5",
20 | "@types/node": "18",
21 | "@types/pg": "^8.10.5",
22 | "dotenv": "^16.3.1",
23 | "prettier": "^3.0.3",
24 | "ts-node": "^10.9.1",
25 | "typescript": "^5.2.2"
26 | },
27 | "keywords": [
28 | "orm",
29 | "mysql",
30 | "ormgpt",
31 | "postgresql",
32 | "sqlite",
33 | "query",
34 | "database",
35 | "db"
36 | ],
37 | "dependencies": {
38 | "better-sqlite3": "^9.0.0",
39 | "mysql2": "^3.6.1",
40 | "pg": "^8.11.3"
41 | },
42 | "files": [
43 | "dist"
44 | ]
45 | }
46 |
--------------------------------------------------------------------------------
/preview.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pilotpirxie/ormGPT/61b8566ba9cb9db419062c692e47058e3edb320e/preview.gif
--------------------------------------------------------------------------------
/src/DatabaseEngineAdapter.ts:
--------------------------------------------------------------------------------
1 | export interface DatabaseEngineAdapter {
2 | executeQuery(query: string): Promise;
3 | }
4 |
--------------------------------------------------------------------------------
/src/ErrorResponse.ts:
--------------------------------------------------------------------------------
1 | export type ErrorResponse = {
2 | error: {
3 | message: string;
4 | type: string;
5 | param: string | null;
6 | code: string | null;
7 | }
8 | }
--------------------------------------------------------------------------------
/src/ModelTuning.ts:
--------------------------------------------------------------------------------
1 | export type ModelTuning = {
2 | temperature: number;
3 | max_tokens: number;
4 | top_p: number;
5 | frequency_penalty: number;
6 | presence_penalty: number;
7 | }
--------------------------------------------------------------------------------
/src/MysqlAdapter.ts:
--------------------------------------------------------------------------------
1 | import {DatabaseEngineAdapter} from "./DatabaseEngineAdapter";
2 | import {Connection} from "mysql2/promise";
3 |
4 | export class MysqlAdapter implements DatabaseEngineAdapter {
5 | private db: Connection;
6 |
7 | constructor({ client }: { client: Connection }) {
8 | this.db = client;
9 | }
10 |
11 | async executeQuery(query: string): Promise {
12 | if (this.isSelectQuery(query)) {
13 | const [rows] = await this.db.query(query);
14 | return rows as unknown[];
15 | } else {
16 | await this.db.execute(query);
17 | return [];
18 | }
19 | }
20 |
21 | private isSelectQuery(query: string): boolean {
22 | return query.trim().toLowerCase().startsWith("select");
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/src/PostgresAdapter.ts:
--------------------------------------------------------------------------------
1 | import { DatabaseEngineAdapter } from "./DatabaseEngineAdapter";
2 | import {Client, Pool} from "pg";
3 |
4 | export class PostgresAdapter implements DatabaseEngineAdapter {
5 | private db: Client;
6 |
7 | constructor({ client }: { client: Client }) {
8 | this.db = client;
9 | }
10 |
11 | async executeQuery(query: string): Promise {
12 | const res = await this.db.query(query);
13 | return res.rows;
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/src/SqliteAdapter.ts:
--------------------------------------------------------------------------------
1 | import { DatabaseEngineAdapter } from "./DatabaseEngineAdapter";
2 | import betterSqlite3, { Statement } from "better-sqlite3";
3 |
4 | export class SqliteAdapter implements DatabaseEngineAdapter {
5 | private db: betterSqlite3.Database;
6 |
7 | constructor({ dbFilePath }: { dbFilePath: string }) {
8 | this.db = new betterSqlite3(dbFilePath);
9 | }
10 |
11 | executeQuery(query: string): Promise {
12 | return new Promise((resolve, reject) => {
13 | const statement: Statement = this.db.prepare(query);
14 | if (this.isSelectQuery(query)) {
15 | resolve(statement.all());
16 | } else {
17 | const info = statement.run();
18 | resolve([]);
19 | }
20 | });
21 | }
22 |
23 | private isSelectQuery(query: string): boolean {
24 | return query.trim().toLowerCase().startsWith("select");
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/src/SuccessResponse.ts:
--------------------------------------------------------------------------------
1 | export type SuccessResponse = {
2 | id: string;
3 | object: string;
4 | created: number;
5 | model: string;
6 | choices: Choice[];
7 | usage: Usage;
8 | };
9 |
10 | export type Choice = {
11 | index: number;
12 | message: Message;
13 | finish_reason: string;
14 | };
15 |
16 | export type Message = {
17 | role: string;
18 | content: string;
19 | };
20 |
21 | export type Usage = {
22 | prompt_tokens: number;
23 | completion_tokens: number;
24 | total_tokens: number;
25 | };
26 |
--------------------------------------------------------------------------------
/src/index.ts:
--------------------------------------------------------------------------------
1 | import fs from "fs";
2 | import path from "path";
3 | import {ErrorResponse} from "./ErrorResponse";
4 | import {SuccessResponse} from "./SuccessResponse";
5 | import {DatabaseEngineAdapter} from "./DatabaseEngineAdapter";
6 | import {ModelTuning} from "./ModelTuning";
7 |
8 | export class ormGPT {
9 | private apiKey: string;
10 | private apiUrl: string = "https://api.openai.com/v1/chat/completions";
11 | private dbSchema: string;
12 | private dialect: string;
13 | private dbEngineAdapter?: DatabaseEngineAdapter;
14 | private model: string = "gpt-3.5-turbo";
15 | private modelOptions: ModelTuning = {
16 | temperature: 1,
17 | max_tokens: 256,
18 | top_p: 1,
19 | frequency_penalty: 0,
20 | presence_penalty: 0,
21 | }
22 |
23 | constructor({
24 | apiKey,
25 | dialect,
26 | schemaFilePath,
27 | dbEngineAdapter,
28 | apiUrl,
29 | model,
30 | modelOptions
31 | } : {
32 | apiKey: string;
33 | schemaFilePath: string;
34 | dialect: "postgres" | "mysql" | "sqlite";
35 | dbEngineAdapter?: DatabaseEngineAdapter;
36 | apiUrl?: string;
37 | model?: string;
38 | modelOptions?: ModelTuning;
39 | }) {
40 | this.apiKey = apiKey;
41 | this.dbSchema = fs.readFileSync(path.resolve(schemaFilePath), "utf-8");
42 | this.dialect = dialect;
43 | this.dbEngineAdapter = dbEngineAdapter;
44 |
45 | if (apiUrl) {
46 | this.apiUrl = apiUrl;
47 | }
48 | if (model) {
49 | this.model = model;
50 | }
51 | if (modelOptions) {
52 | this.modelOptions = modelOptions;
53 | }
54 | }
55 |
56 | private async getResponse(request: string): Promise {
57 | const prompt = `
58 | You are an SQL engine brain.
59 | You are using ${this.dialect} dialect.
60 | Having db schema as follows:
61 | ${this.dbSchema}
62 |
63 | Write a query to fulfil the user request: ${request}
64 |
65 | Don't write anything else than SQL query.
66 | `;
67 |
68 | const response = await fetch(this.apiUrl, {
69 | method: "POST",
70 | headers: {
71 | "Content-Type": "application/json",
72 | Authorization: `Bearer ${this.apiKey}`,
73 | },
74 | body: JSON.stringify({
75 | model: this.model,
76 | messages: [
77 | {
78 | role: "user",
79 | content: prompt,
80 | },
81 | ],
82 | ...this.modelOptions,
83 | }),
84 | });
85 |
86 | const data = (await response.json()) as ErrorResponse | SuccessResponse;
87 |
88 | if (data.hasOwnProperty("error")) {
89 | throw new Error((data as ErrorResponse).error.message);
90 | }
91 |
92 | return (data as SuccessResponse).choices[0].message.content;
93 | }
94 |
95 | public async getQuery(request: string): Promise {
96 | try {
97 | return await this.getResponse(request);
98 | } catch (error) {
99 | console.error("Error when generating query", request);
100 | throw error;
101 | }
102 | }
103 |
104 | public async query(request: string): Promise {
105 | try {
106 | if (!this.dbEngineAdapter) {
107 | throw new Error("No dbEngineAdapter provided");
108 | }
109 |
110 | const query = await this.getQuery(request);
111 | console.log("Executing query", query);
112 | return this.dbEngineAdapter.executeQuery(query);
113 | } catch (error) {
114 | console.error("Error when executing query", request);
115 | throw error;
116 | }
117 | }
118 | }
119 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ES2020"
4 | /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */,
5 | "module": "commonjs"
6 | /* Specify what module code is generated. */,
7 | "outDir": "./dist"
8 | /* Specify an output folder for all emitted files. */,
9 | "moduleResolution": "Node"
10 | /* Specify how TypeScript looks up a file from a given module specifier. */,
11 | "lib": [
12 | "ES2022",
13 | "DOM"
14 | ]
15 | /* Specify a set of bundled library declaration files that describe the target runtime environment. */,
16 | "esModuleInterop": true
17 | /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */,
18 | "forceConsistentCasingInFileNames": true
19 | /* Ensure that casing is correct in imports. */,
20 | "strict": true
21 | /* Enable all strict type-checking options. */,
22 | "skipLibCheck": true
23 | /* Skip type checking all .d.ts files. */,
24 | "declaration": true
25 | /* Generates corresponding '.d.ts' file. */,
26 | "declarationMap": true
27 | /* Generates a sourcemap for each corresponding '.d.ts' file. */,
28 | "sourceMap": true
29 | /* Generates corresponding '.map' file. */,
30 | "allowSyntheticDefaultImports": true
31 | /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */,
32 | "checkJs": true
33 | /* Enable error reporting in type-checked JavaScript files. */,
34 | "allowJs": true
35 | /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */
36 | },
37 | "exclude": [
38 | "node_modules",
39 | "bin",
40 | "test",
41 | "coverage",
42 | "dist",
43 | "example"
44 | ]
45 | }
--------------------------------------------------------------------------------
/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@cspotcode/source-map-support@^0.8.0":
6 | version "0.8.1"
7 | resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz"
8 | integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==
9 | dependencies:
10 | "@jridgewell/trace-mapping" "0.3.9"
11 |
12 | "@jridgewell/resolve-uri@^3.0.3":
13 | version "3.1.1"
14 | resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz"
15 | integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==
16 |
17 | "@jridgewell/sourcemap-codec@^1.4.10":
18 | version "1.4.15"
19 | resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz"
20 | integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
21 |
22 | "@jridgewell/trace-mapping@0.3.9":
23 | version "0.3.9"
24 | resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz"
25 | integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==
26 | dependencies:
27 | "@jridgewell/resolve-uri" "^3.0.3"
28 | "@jridgewell/sourcemap-codec" "^1.4.10"
29 |
30 | "@tsconfig/node10@^1.0.7":
31 | version "1.0.9"
32 | resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz"
33 | integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==
34 |
35 | "@tsconfig/node12@^1.0.7":
36 | version "1.0.11"
37 | resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz"
38 | integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==
39 |
40 | "@tsconfig/node14@^1.0.0":
41 | version "1.0.3"
42 | resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz"
43 | integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==
44 |
45 | "@tsconfig/node16@^1.0.2":
46 | version "1.0.4"
47 | resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz"
48 | integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==
49 |
50 | "@types/better-sqlite3@^7.6.5":
51 | version "7.6.5"
52 | resolved "https://registry.npmjs.org/@types/better-sqlite3/-/better-sqlite3-7.6.5.tgz"
53 | integrity sha512-H3ZUx89KiPhYa9nalUXVVStSUFHuzYxt4yoazufpTTYW9rVUCzhh02V8CH2C8nE4libnK0UgFq5DFIe0DOhqow==
54 | dependencies:
55 | "@types/node" "*"
56 |
57 | "@types/node@*", "@types/node@18":
58 | version "18.18.4"
59 | resolved "https://registry.npmjs.org/@types/node/-/node-18.18.4.tgz"
60 | integrity sha512-t3rNFBgJRugIhackit2mVcLfF6IRc0JE4oeizPQL8Zrm8n2WY/0wOdpOPhdtG0V9Q2TlW/axbF1MJ6z+Yj/kKQ==
61 |
62 | "@types/pg@^8.10.5":
63 | version "8.10.5"
64 | resolved "https://registry.yarnpkg.com/@types/pg/-/pg-8.10.5.tgz#a578f856373f71e2b601d599b306f382e6378a26"
65 | integrity sha512-GS3ebGcSJQqKSnq4/WnSH1XQvx0vTDLEmqLENk7onKvTnry9BWPsZiZeUMJlEPw+5bCQDzfxZFhxlUztpNCKgQ==
66 | dependencies:
67 | "@types/node" "*"
68 | pg-protocol "*"
69 | pg-types "^4.0.1"
70 |
71 | acorn-walk@^8.1.1:
72 | version "8.2.0"
73 | resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz"
74 | integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==
75 |
76 | acorn@^8.4.1:
77 | version "8.10.0"
78 | resolved "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz"
79 | integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==
80 |
81 | arg@^4.1.0:
82 | version "4.1.3"
83 | resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz"
84 | integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==
85 |
86 | base64-js@^1.3.1:
87 | version "1.5.1"
88 | resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz"
89 | integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
90 |
91 | better-sqlite3@^9.0.0:
92 | version "9.0.0"
93 | resolved "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-9.0.0.tgz"
94 | integrity sha512-lDxQ9qg/XuUHZG6xzrQaMHkNWl37t35/LPB/VJGV8DdScSuGFNfFSqgscXEd8UIuyk/d9wU8iaMxQa4If5Wqog==
95 | dependencies:
96 | bindings "^1.5.0"
97 | prebuild-install "^7.1.1"
98 |
99 | bindings@^1.5.0:
100 | version "1.5.0"
101 | resolved "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz"
102 | integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==
103 | dependencies:
104 | file-uri-to-path "1.0.0"
105 |
106 | bl@^4.0.3:
107 | version "4.1.0"
108 | resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz"
109 | integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==
110 | dependencies:
111 | buffer "^5.5.0"
112 | inherits "^2.0.4"
113 | readable-stream "^3.4.0"
114 |
115 | buffer-writer@2.0.0:
116 | version "2.0.0"
117 | resolved "https://registry.yarnpkg.com/buffer-writer/-/buffer-writer-2.0.0.tgz#ce7eb81a38f7829db09c873f2fbb792c0c98ec04"
118 | integrity sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==
119 |
120 | buffer@^5.5.0:
121 | version "5.7.1"
122 | resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz"
123 | integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==
124 | dependencies:
125 | base64-js "^1.3.1"
126 | ieee754 "^1.1.13"
127 |
128 | chownr@^1.1.1:
129 | version "1.1.4"
130 | resolved "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz"
131 | integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==
132 |
133 | create-require@^1.1.0:
134 | version "1.1.1"
135 | resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz"
136 | integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==
137 |
138 | decompress-response@^6.0.0:
139 | version "6.0.0"
140 | resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz"
141 | integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==
142 | dependencies:
143 | mimic-response "^3.1.0"
144 |
145 | deep-extend@^0.6.0:
146 | version "0.6.0"
147 | resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz"
148 | integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
149 |
150 | denque@^2.1.0:
151 | version "2.1.0"
152 | resolved "https://registry.yarnpkg.com/denque/-/denque-2.1.0.tgz#e93e1a6569fb5e66f16a3c2a2964617d349d6ab1"
153 | integrity sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==
154 |
155 | detect-libc@^2.0.0:
156 | version "2.0.2"
157 | resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz"
158 | integrity sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==
159 |
160 | diff@^4.0.1:
161 | version "4.0.2"
162 | resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz"
163 | integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==
164 |
165 | dotenv@^16.3.1:
166 | version "16.3.1"
167 | resolved "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz"
168 | integrity sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==
169 |
170 | end-of-stream@^1.1.0, end-of-stream@^1.4.1:
171 | version "1.4.4"
172 | resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz"
173 | integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
174 | dependencies:
175 | once "^1.4.0"
176 |
177 | expand-template@^2.0.3:
178 | version "2.0.3"
179 | resolved "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz"
180 | integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==
181 |
182 | file-uri-to-path@1.0.0:
183 | version "1.0.0"
184 | resolved "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz"
185 | integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==
186 |
187 | fs-constants@^1.0.0:
188 | version "1.0.0"
189 | resolved "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz"
190 | integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==
191 |
192 | generate-function@^2.3.1:
193 | version "2.3.1"
194 | resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.3.1.tgz#f069617690c10c868e73b8465746764f97c3479f"
195 | integrity sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==
196 | dependencies:
197 | is-property "^1.0.2"
198 |
199 | github-from-package@0.0.0:
200 | version "0.0.0"
201 | resolved "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz"
202 | integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==
203 |
204 | iconv-lite@^0.6.3:
205 | version "0.6.3"
206 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501"
207 | integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
208 | dependencies:
209 | safer-buffer ">= 2.1.2 < 3.0.0"
210 |
211 | ieee754@^1.1.13:
212 | version "1.2.1"
213 | resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz"
214 | integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
215 |
216 | inherits@^2.0.3, inherits@^2.0.4:
217 | version "2.0.4"
218 | resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz"
219 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
220 |
221 | ini@~1.3.0:
222 | version "1.3.8"
223 | resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz"
224 | integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
225 |
226 | is-property@^1.0.2:
227 | version "1.0.2"
228 | resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84"
229 | integrity sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==
230 |
231 | long@^5.2.1:
232 | version "5.2.3"
233 | resolved "https://registry.yarnpkg.com/long/-/long-5.2.3.tgz#a3ba97f3877cf1d778eccbcb048525ebb77499e1"
234 | integrity sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==
235 |
236 | lru-cache@^6.0.0:
237 | version "6.0.0"
238 | resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz"
239 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
240 | dependencies:
241 | yallist "^4.0.0"
242 |
243 | lru-cache@^7.14.1:
244 | version "7.18.3"
245 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89"
246 | integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==
247 |
248 | lru-cache@^8.0.0:
249 | version "8.0.5"
250 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-8.0.5.tgz#983fe337f3e176667f8e567cfcce7cb064ea214e"
251 | integrity sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==
252 |
253 | make-error@^1.1.1:
254 | version "1.3.6"
255 | resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz"
256 | integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==
257 |
258 | mimic-response@^3.1.0:
259 | version "3.1.0"
260 | resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz"
261 | integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==
262 |
263 | minimist@^1.2.0, minimist@^1.2.3:
264 | version "1.2.8"
265 | resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz"
266 | integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
267 |
268 | mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3:
269 | version "0.5.3"
270 | resolved "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz"
271 | integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==
272 |
273 | mysql2@^3.6.1:
274 | version "3.6.1"
275 | resolved "https://registry.yarnpkg.com/mysql2/-/mysql2-3.6.1.tgz#be8876c8bb5d5da544951217dfa87a5ffbd8407e"
276 | integrity sha512-O7FXjLtNkjcMBpLURwkXIhyVbX9i4lq4nNRCykPNOXfceq94kJ0miagmTEGCZieuO8JtwtXaZ41U6KT4eF9y3g==
277 | dependencies:
278 | denque "^2.1.0"
279 | generate-function "^2.3.1"
280 | iconv-lite "^0.6.3"
281 | long "^5.2.1"
282 | lru-cache "^8.0.0"
283 | named-placeholders "^1.1.3"
284 | seq-queue "^0.0.5"
285 | sqlstring "^2.3.2"
286 |
287 | named-placeholders@^1.1.3:
288 | version "1.1.3"
289 | resolved "https://registry.yarnpkg.com/named-placeholders/-/named-placeholders-1.1.3.tgz#df595799a36654da55dda6152ba7a137ad1d9351"
290 | integrity sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w==
291 | dependencies:
292 | lru-cache "^7.14.1"
293 |
294 | napi-build-utils@^1.0.1:
295 | version "1.0.2"
296 | resolved "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz"
297 | integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==
298 |
299 | node-abi@^3.3.0:
300 | version "3.50.0"
301 | resolved "https://registry.npmjs.org/node-abi/-/node-abi-3.50.0.tgz"
302 | integrity sha512-2Gxu7Eq7vnBIRfYSmqPruEllMM14FjOQFJSoqdGWthVn+tmwEXzmdPpya6cvvwf0uZA3F5N1fMFr9mijZBplFA==
303 | dependencies:
304 | semver "^7.3.5"
305 |
306 | obuf@~1.1.2:
307 | version "1.1.2"
308 | resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e"
309 | integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==
310 |
311 | once@^1.3.1, once@^1.4.0:
312 | version "1.4.0"
313 | resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz"
314 | integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
315 | dependencies:
316 | wrappy "1"
317 |
318 | packet-reader@1.0.0:
319 | version "1.0.0"
320 | resolved "https://registry.yarnpkg.com/packet-reader/-/packet-reader-1.0.0.tgz#9238e5480dedabacfe1fe3f2771063f164157d74"
321 | integrity sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==
322 |
323 | pg-cloudflare@^1.1.1:
324 | version "1.1.1"
325 | resolved "https://registry.yarnpkg.com/pg-cloudflare/-/pg-cloudflare-1.1.1.tgz#e6d5833015b170e23ae819e8c5d7eaedb472ca98"
326 | integrity sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==
327 |
328 | pg-connection-string@^2.6.2:
329 | version "2.6.2"
330 | resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.6.2.tgz#713d82053de4e2bd166fab70cd4f26ad36aab475"
331 | integrity sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA==
332 |
333 | pg-int8@1.0.1:
334 | version "1.0.1"
335 | resolved "https://registry.yarnpkg.com/pg-int8/-/pg-int8-1.0.1.tgz#943bd463bf5b71b4170115f80f8efc9a0c0eb78c"
336 | integrity sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==
337 |
338 | pg-numeric@1.0.2:
339 | version "1.0.2"
340 | resolved "https://registry.yarnpkg.com/pg-numeric/-/pg-numeric-1.0.2.tgz#816d9a44026086ae8ae74839acd6a09b0636aa3a"
341 | integrity sha512-BM/Thnrw5jm2kKLE5uJkXqqExRUY/toLHda65XgFTBTFYZyopbKjBe29Ii3RbkvlsMoFwD+tHeGaCjjv0gHlyw==
342 |
343 | pg-pool@^3.6.1:
344 | version "3.6.1"
345 | resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-3.6.1.tgz#5a902eda79a8d7e3c928b77abf776b3cb7d351f7"
346 | integrity sha512-jizsIzhkIitxCGfPRzJn1ZdcosIt3pz9Sh3V01fm1vZnbnCMgmGl5wvGGdNN2EL9Rmb0EcFoCkixH4Pu+sP9Og==
347 |
348 | pg-protocol@*, pg-protocol@^1.6.0:
349 | version "1.6.0"
350 | resolved "https://registry.yarnpkg.com/pg-protocol/-/pg-protocol-1.6.0.tgz#4c91613c0315349363af2084608db843502f8833"
351 | integrity sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q==
352 |
353 | pg-types@^2.1.0:
354 | version "2.2.0"
355 | resolved "https://registry.yarnpkg.com/pg-types/-/pg-types-2.2.0.tgz#2d0250d636454f7cfa3b6ae0382fdfa8063254a3"
356 | integrity sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==
357 | dependencies:
358 | pg-int8 "1.0.1"
359 | postgres-array "~2.0.0"
360 | postgres-bytea "~1.0.0"
361 | postgres-date "~1.0.4"
362 | postgres-interval "^1.1.0"
363 |
364 | pg-types@^4.0.1:
365 | version "4.0.1"
366 | resolved "https://registry.yarnpkg.com/pg-types/-/pg-types-4.0.1.tgz#31857e89d00a6c66b06a14e907c3deec03889542"
367 | integrity sha512-hRCSDuLII9/LE3smys1hRHcu5QGcLs9ggT7I/TCs0IE+2Eesxi9+9RWAAwZ0yaGjxoWICF/YHLOEjydGujoJ+g==
368 | dependencies:
369 | pg-int8 "1.0.1"
370 | pg-numeric "1.0.2"
371 | postgres-array "~3.0.1"
372 | postgres-bytea "~3.0.0"
373 | postgres-date "~2.0.1"
374 | postgres-interval "^3.0.0"
375 | postgres-range "^1.1.1"
376 |
377 | pg@^8.11.3:
378 | version "8.11.3"
379 | resolved "https://registry.yarnpkg.com/pg/-/pg-8.11.3.tgz#d7db6e3fe268fcedd65b8e4599cda0b8b4bf76cb"
380 | integrity sha512-+9iuvG8QfaaUrrph+kpF24cXkH1YOOUeArRNYIxq1viYHZagBxrTno7cecY1Fa44tJeZvaoG+Djpkc3JwehN5g==
381 | dependencies:
382 | buffer-writer "2.0.0"
383 | packet-reader "1.0.0"
384 | pg-connection-string "^2.6.2"
385 | pg-pool "^3.6.1"
386 | pg-protocol "^1.6.0"
387 | pg-types "^2.1.0"
388 | pgpass "1.x"
389 | optionalDependencies:
390 | pg-cloudflare "^1.1.1"
391 |
392 | pgpass@1.x:
393 | version "1.0.5"
394 | resolved "https://registry.yarnpkg.com/pgpass/-/pgpass-1.0.5.tgz#9b873e4a564bb10fa7a7dbd55312728d422a223d"
395 | integrity sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==
396 | dependencies:
397 | split2 "^4.1.0"
398 |
399 | postgres-array@~2.0.0:
400 | version "2.0.0"
401 | resolved "https://registry.yarnpkg.com/postgres-array/-/postgres-array-2.0.0.tgz#48f8fce054fbc69671999329b8834b772652d82e"
402 | integrity sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==
403 |
404 | postgres-array@~3.0.1:
405 | version "3.0.2"
406 | resolved "https://registry.yarnpkg.com/postgres-array/-/postgres-array-3.0.2.tgz#68d6182cb0f7f152a7e60dc6a6889ed74b0a5f98"
407 | integrity sha512-6faShkdFugNQCLwucjPcY5ARoW1SlbnrZjmGl0IrrqewpvxvhSLHimCVzqeuULCbG0fQv7Dtk1yDbG3xv7Veog==
408 |
409 | postgres-bytea@~1.0.0:
410 | version "1.0.0"
411 | resolved "https://registry.yarnpkg.com/postgres-bytea/-/postgres-bytea-1.0.0.tgz#027b533c0aa890e26d172d47cf9ccecc521acd35"
412 | integrity sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==
413 |
414 | postgres-bytea@~3.0.0:
415 | version "3.0.0"
416 | resolved "https://registry.yarnpkg.com/postgres-bytea/-/postgres-bytea-3.0.0.tgz#9048dc461ac7ba70a6a42d109221619ecd1cb089"
417 | integrity sha512-CNd4jim9RFPkObHSjVHlVrxoVQXz7quwNFpz7RY1okNNme49+sVyiTvTRobiLV548Hx/hb1BG+iE7h9493WzFw==
418 | dependencies:
419 | obuf "~1.1.2"
420 |
421 | postgres-date@~1.0.4:
422 | version "1.0.7"
423 | resolved "https://registry.yarnpkg.com/postgres-date/-/postgres-date-1.0.7.tgz#51bc086006005e5061c591cee727f2531bf641a8"
424 | integrity sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==
425 |
426 | postgres-date@~2.0.1:
427 | version "2.0.1"
428 | resolved "https://registry.yarnpkg.com/postgres-date/-/postgres-date-2.0.1.tgz#638b62e5c33764c292d37b08f5257ecb09231457"
429 | integrity sha512-YtMKdsDt5Ojv1wQRvUhnyDJNSr2dGIC96mQVKz7xufp07nfuFONzdaowrMHjlAzY6GDLd4f+LUHHAAM1h4MdUw==
430 |
431 | postgres-interval@^1.1.0:
432 | version "1.2.0"
433 | resolved "https://registry.yarnpkg.com/postgres-interval/-/postgres-interval-1.2.0.tgz#b460c82cb1587507788819a06aa0fffdb3544695"
434 | integrity sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==
435 | dependencies:
436 | xtend "^4.0.0"
437 |
438 | postgres-interval@^3.0.0:
439 | version "3.0.0"
440 | resolved "https://registry.yarnpkg.com/postgres-interval/-/postgres-interval-3.0.0.tgz#baf7a8b3ebab19b7f38f07566c7aab0962f0c86a"
441 | integrity sha512-BSNDnbyZCXSxgA+1f5UU2GmwhoI0aU5yMxRGO8CdFEcY2BQF9xm/7MqKnYoM1nJDk8nONNWDk9WeSmePFhQdlw==
442 |
443 | postgres-range@^1.1.1:
444 | version "1.1.3"
445 | resolved "https://registry.yarnpkg.com/postgres-range/-/postgres-range-1.1.3.tgz#9ccd7b01ca2789eb3c2e0888b3184225fa859f76"
446 | integrity sha512-VdlZoocy5lCP0c/t66xAfclglEapXPCIVhqqJRncYpvbCgImF0w67aPKfbqUMr72tO2k5q0TdTZwCLjPTI6C9g==
447 |
448 | prebuild-install@^7.1.1:
449 | version "7.1.1"
450 | resolved "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz"
451 | integrity sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==
452 | dependencies:
453 | detect-libc "^2.0.0"
454 | expand-template "^2.0.3"
455 | github-from-package "0.0.0"
456 | minimist "^1.2.3"
457 | mkdirp-classic "^0.5.3"
458 | napi-build-utils "^1.0.1"
459 | node-abi "^3.3.0"
460 | pump "^3.0.0"
461 | rc "^1.2.7"
462 | simple-get "^4.0.0"
463 | tar-fs "^2.0.0"
464 | tunnel-agent "^0.6.0"
465 |
466 | prettier@^3.0.3:
467 | version "3.0.3"
468 | resolved "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz"
469 | integrity sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==
470 |
471 | pump@^3.0.0:
472 | version "3.0.0"
473 | resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz"
474 | integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
475 | dependencies:
476 | end-of-stream "^1.1.0"
477 | once "^1.3.1"
478 |
479 | rc@^1.2.7:
480 | version "1.2.8"
481 | resolved "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz"
482 | integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
483 | dependencies:
484 | deep-extend "^0.6.0"
485 | ini "~1.3.0"
486 | minimist "^1.2.0"
487 | strip-json-comments "~2.0.1"
488 |
489 | readable-stream@^3.1.1, readable-stream@^3.4.0:
490 | version "3.6.2"
491 | resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz"
492 | integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==
493 | dependencies:
494 | inherits "^2.0.3"
495 | string_decoder "^1.1.1"
496 | util-deprecate "^1.0.1"
497 |
498 | safe-buffer@^5.0.1, safe-buffer@~5.2.0:
499 | version "5.2.1"
500 | resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz"
501 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
502 |
503 | "safer-buffer@>= 2.1.2 < 3.0.0":
504 | version "2.1.2"
505 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
506 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
507 |
508 | semver@^7.3.5:
509 | version "7.5.4"
510 | resolved "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz"
511 | integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==
512 | dependencies:
513 | lru-cache "^6.0.0"
514 |
515 | seq-queue@^0.0.5:
516 | version "0.0.5"
517 | resolved "https://registry.yarnpkg.com/seq-queue/-/seq-queue-0.0.5.tgz#d56812e1c017a6e4e7c3e3a37a1da6d78dd3c93e"
518 | integrity sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==
519 |
520 | simple-concat@^1.0.0:
521 | version "1.0.1"
522 | resolved "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz"
523 | integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==
524 |
525 | simple-get@^4.0.0:
526 | version "4.0.1"
527 | resolved "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz"
528 | integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==
529 | dependencies:
530 | decompress-response "^6.0.0"
531 | once "^1.3.1"
532 | simple-concat "^1.0.0"
533 |
534 | split2@^4.1.0:
535 | version "4.2.0"
536 | resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4"
537 | integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==
538 |
539 | sqlstring@^2.3.2:
540 | version "2.3.3"
541 | resolved "https://registry.yarnpkg.com/sqlstring/-/sqlstring-2.3.3.tgz#2ddc21f03bce2c387ed60680e739922c65751d0c"
542 | integrity sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==
543 |
544 | string_decoder@^1.1.1:
545 | version "1.3.0"
546 | resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz"
547 | integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
548 | dependencies:
549 | safe-buffer "~5.2.0"
550 |
551 | strip-json-comments@~2.0.1:
552 | version "2.0.1"
553 | resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz"
554 | integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==
555 |
556 | tar-fs@^2.0.0:
557 | version "2.1.1"
558 | resolved "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz"
559 | integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==
560 | dependencies:
561 | chownr "^1.1.1"
562 | mkdirp-classic "^0.5.2"
563 | pump "^3.0.0"
564 | tar-stream "^2.1.4"
565 |
566 | tar-stream@^2.1.4:
567 | version "2.2.0"
568 | resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz"
569 | integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==
570 | dependencies:
571 | bl "^4.0.3"
572 | end-of-stream "^1.4.1"
573 | fs-constants "^1.0.0"
574 | inherits "^2.0.3"
575 | readable-stream "^3.1.1"
576 |
577 | ts-node@^10.9.1:
578 | version "10.9.1"
579 | resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz"
580 | integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==
581 | dependencies:
582 | "@cspotcode/source-map-support" "^0.8.0"
583 | "@tsconfig/node10" "^1.0.7"
584 | "@tsconfig/node12" "^1.0.7"
585 | "@tsconfig/node14" "^1.0.0"
586 | "@tsconfig/node16" "^1.0.2"
587 | acorn "^8.4.1"
588 | acorn-walk "^8.1.1"
589 | arg "^4.1.0"
590 | create-require "^1.1.0"
591 | diff "^4.0.1"
592 | make-error "^1.1.1"
593 | v8-compile-cache-lib "^3.0.1"
594 | yn "3.1.1"
595 |
596 | tunnel-agent@^0.6.0:
597 | version "0.6.0"
598 | resolved "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz"
599 | integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==
600 | dependencies:
601 | safe-buffer "^5.0.1"
602 |
603 | typescript@^5.2.2:
604 | version "5.2.2"
605 | resolved "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz"
606 | integrity sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==
607 |
608 | util-deprecate@^1.0.1:
609 | version "1.0.2"
610 | resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz"
611 | integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
612 |
613 | v8-compile-cache-lib@^3.0.1:
614 | version "3.0.1"
615 | resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz"
616 | integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==
617 |
618 | wrappy@1:
619 | version "1.0.2"
620 | resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz"
621 | integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
622 |
623 | xtend@^4.0.0:
624 | version "4.0.2"
625 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
626 | integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
627 |
628 | yallist@^4.0.0:
629 | version "4.0.0"
630 | resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz"
631 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
632 |
633 | yn@3.1.1:
634 | version "3.1.1"
635 | resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz"
636 | integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==
637 |
--------------------------------------------------------------------------------