├── .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 | ![./preview.gif](./preview.gif) 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 | --------------------------------------------------------------------------------