From 4215b5ae1309bbedca914a2f3fa3901202393f5a Mon Sep 17 00:00:00 2001 From: Charlie Laabs Date: Fri, 25 Mar 2022 22:38:20 -0500 Subject: [PATCH] typeorm 0.3, Dockerfile optmizations --- CHANGELOG.md | 5 ++ Dockerfile | 15 +++- ormconfig.js | 39 ---------- package-lock.json | 192 ++++++++++++++++++---------------------------- package.json | 8 +- src/index.ts | 12 +-- src/ormconfig.ts | 38 +++++++++ 7 files changed, 142 insertions(+), 167 deletions(-) delete mode 100644 ormconfig.js create mode 100644 src/ormconfig.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 41a180d..9d4561b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,11 @@ All notable changes to this project will be documented in this file. ## Versions +### 2.1.0 + +* Update dependencies (typeorm 0.3) +* Dockerfile optimization + ### 2.0.1 * Add a filter to ensure the bot doesn't just post exact previous messages. diff --git a/Dockerfile b/Dockerfile index a1c9845..1a3e5ab 100644 --- a/Dockerfile +++ b/Dockerfile @@ -7,6 +7,17 @@ WORKDIR /usr/app RUN apk add --no-cache tini +############ +# PROD DEPS +############ + +FROM base as prodDeps + +COPY package*.json ./ +# Install build tools for erlpack, then install prod deps only +RUN apk add --no-cache make gcc g++ python3 \ + && npm ci --only=production + ######## # BUILD ######## @@ -36,13 +47,13 @@ FROM base as deploy USER node # Steal node_modules from base image -COPY --from=build /usr/app/node_modules node_modules +COPY --from=prodDeps /usr/app/node_modules node_modules # Steal compiled code from build image COPY --from=build /usr/app/dist dist # Copy package.json for version number -COPY package*.json ormconfig.js ./ +COPY package.json ./ # RUN mkdir config diff --git a/ormconfig.js b/ormconfig.js deleted file mode 100644 index bda7248..0000000 --- a/ormconfig.js +++ /dev/null @@ -1,39 +0,0 @@ -const devConfig = { - type: 'better-sqlite3', - database: process.env.CONFIG_DIR - ? `${process.env.CONFIG_DIR}/db/db.sqlite3` - : 'config/db/db.sqlite3', - synchronize: true, - migrationsRun: false, - // logging: 'all', - enableWAL: true, - entities: ['src/entity/**/*.ts'], - migrations: ['src/migration/**/*.ts'], - subscribers: ['src/subscriber/**/*.ts'], - cli: { - entitiesDir: 'src/entity', - migrationsDir: 'src/migration', - }, -}; - -const prodConfig = { - type: 'better-sqlite3', - database: process.env.CONFIG_DIR - ? `${process.env.CONFIG_DIR}/db/db.sqlite3` - : 'config/db/db.sqlite3', - synchronize: false, - logging: false, - enableWAL: true, - entities: ['dist/entity/**/*.js'], - migrations: ['dist/migration/**/*.js'], - migrationsRun: true, - subscribers: ['dist/subscriber/**/*.js'], - cli: { - entitiesDir: 'dist/entity', - migrationsDir: 'dist/migration', - }, -}; - -const finalConfig = process.env.NODE_ENV !== 'production' ? devConfig : prodConfig; - -module.exports = finalConfig; diff --git a/package-lock.json b/package-lock.json index afc4e4b..ec6b89f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "markov-discord", - "version": "2.0.2", + "version": "2.1.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "markov-discord", - "version": "2.0.2", + "version": "2.1.0", "license": "MIT", "dependencies": { "@discordjs/builders": "^0.12.0", @@ -23,13 +23,13 @@ "erlpack": "github:discord/erlpack", "fs-extra": "^10.0.1", "json5": "^2.2.1", - "markov-strings-db": "^4.1.5", + "markov-strings-db": "^4.2.0", "pino": "^7.9.2", "pino-pretty": "^7.6.0", "reflect-metadata": "^0.1.13", "simple-eta": "^3.0.2", "source-map-support": "^0.5.21", - "typeorm": "^0.2.45", + "typeorm": "^0.3.3", "utf-8-validate": "^5.0.9", "zlib-sync": "^0.1.7" }, @@ -59,7 +59,7 @@ "version": "0.8.0", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", - "dev": true, + "devOptional": true, "engines": { "node": ">= 12" } @@ -68,7 +68,7 @@ "version": "0.7.0", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", - "dev": true, + "devOptional": true, "dependencies": { "@cspotcode/source-map-consumer": "0.8.0" }, @@ -494,25 +494,25 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", - "dev": true + "devOptional": true }, "node_modules/@tsconfig/node12": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", - "dev": true + "devOptional": true }, "node_modules/@tsconfig/node14": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", - "dev": true + "devOptional": true }, "node_modules/@tsconfig/node16": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", - "dev": true + "devOptional": true }, "node_modules/@types/fs-extra": { "version": "9.0.13", @@ -562,11 +562,6 @@ "@types/node": "*" } }, - "node_modules/@types/zen-observable": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/@types/zen-observable/-/zen-observable-0.8.3.tgz", - "integrity": "sha512-fbF6oTd4sGGy0xjHPKAt+eS2CrxJ3+6gQ3FGcBoIJR2TLAyCkCyI8JqZNy+FeON0AhVgNJoUumVoZQjBFUqHkw==" - }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "5.16.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.16.0.tgz", @@ -755,7 +750,7 @@ "version": "8.7.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", - "dev": true, + "devOptional": true, "bin": { "acorn": "bin/acorn" }, @@ -776,7 +771,7 @@ "version": "8.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true, + "devOptional": true, "engines": { "node": ">=0.4.0" } @@ -899,7 +894,7 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true + "devOptional": true }, "node_modules/argparse": { "version": "2.0.1", @@ -1554,7 +1549,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true + "devOptional": true }, "node_modules/croner": { "version": "4.1.97", @@ -1725,7 +1720,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, + "devOptional": true, "engines": { "node": ">=0.3.1" } @@ -3503,7 +3498,7 @@ "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true + "devOptional": true }, "node_modules/marked": { "version": "4.0.12", @@ -3518,15 +3513,15 @@ } }, "node_modules/markov-strings-db": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/markov-strings-db/-/markov-strings-db-4.1.5.tgz", - "integrity": "sha512-p37FSQxXFUnHQfdp4OOljxs+aomNHK8avGVzZZy8Xjl4HEy7JB/v8f+isbhddyjSXewSjqyFwwcoh4TuZj2NTQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/markov-strings-db/-/markov-strings-db-4.2.0.tgz", + "integrity": "sha512-KlPmvQC5s/lonqn5syB1d+KYs1eREmc3BswSRQCPJARZJzu/zqVbEMB9FoKd6PvlAFiJE9LH15z3kJg0GijLBA==", "dependencies": { "reflect-metadata": "^0.1.13", - "typeorm": "^0.2.41" + "typeorm": "^0.3.3" }, "engines": { - "node": ">=10" + "node": ">=14" } }, "node_modules/merge2": { @@ -5214,7 +5209,7 @@ "version": "10.7.0", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.7.0.tgz", "integrity": "sha512-TbIGS4xgJoX2i3do417KSaep1uRAW/Lu+WAL2doDHC0D6ummjirVOXU5/7aiZotbQ5p1Zp9tP7U6cYhA0O7M8A==", - "dev": true, + "devOptional": true, "dependencies": { "@cspotcode/source-map-support": "0.7.0", "@tsconfig/node10": "^1.0.7", @@ -5401,30 +5396,35 @@ } }, "node_modules/typeorm": { - "version": "0.2.45", - "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.2.45.tgz", - "integrity": "sha512-c0rCO8VMJ3ER7JQ73xfk0zDnVv0WDjpsP6Q1m6CVKul7DB9iVdWLRjPzc8v2eaeBuomsbZ2+gTaYr8k1gm3bYA==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.3.3.tgz", + "integrity": "sha512-01gesp6ikGMLGUxBDzEn4qcIiVW3gWzZsUPE6ETqzSRuHL4pCAWHvTPELN1agirBJrZNxhxiVFUXCmnPXYNfrg==", "dependencies": { "@sqltools/formatter": "^1.2.2", "app-root-path": "^3.0.0", "buffer": "^6.0.3", "chalk": "^4.1.0", "cli-highlight": "^2.1.11", - "debug": "^4.3.1", - "dotenv": "^8.2.0", - "glob": "^7.1.6", - "js-yaml": "^4.0.0", + "date-fns": "^2.28.0", + "debug": "^4.3.3", + "dotenv": "^16.0.0", + "glob": "^7.2.0", + "js-yaml": "^4.1.0", "mkdirp": "^1.0.4", "reflect-metadata": "^0.1.13", "sha.js": "^2.4.11", - "tslib": "^2.1.0", + "tslib": "^2.3.1", "uuid": "^8.3.2", "xml2js": "^0.4.23", - "yargs": "^17.0.1", - "zen-observable-ts": "^1.0.0" + "yargs": "^17.3.1" }, "bin": { - "typeorm": "cli.js" + "typeorm": "cli.js", + "typeorm-ts-node-commonjs": "cli-ts-node-commonjs.js", + "typeorm-ts-node-esm": "cli-ts-node-esm.js" + }, + "engines": { + "node": ">= 12.9.0" }, "funding": { "url": "https://opencollective.com/typeorm" @@ -5444,6 +5444,7 @@ "redis": "^3.1.1", "sql.js": "^1.4.0", "sqlite3": "^5.0.2", + "ts-node": "^10.7.0", "typeorm-aurora-data-api-driver": "^2.0.0" }, "peerDependenciesMeta": { @@ -5489,6 +5490,9 @@ "sqlite3": { "optional": true }, + "ts-node": { + "optional": true + }, "typeorm-aurora-data-api-driver": { "optional": true } @@ -5517,14 +5521,6 @@ "ieee754": "^1.2.1" } }, - "node_modules/typeorm/node_modules/dotenv": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", - "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", - "engines": { - "node": ">=10" - } - }, "node_modules/typeorm/node_modules/uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", @@ -5543,7 +5539,7 @@ "version": "4.6.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz", "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==", - "dev": true, + "devOptional": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -5630,7 +5626,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.0.tgz", "integrity": "sha512-mpSYqfsFvASnSn5qMiwrr4VKfumbPyONLCOPmsR3A6pTY/r0+tSaVbgPWSAIuzbk3lCTa+FForeTiO+wBQGkjA==", - "dev": true + "devOptional": true }, "node_modules/validator": { "version": "13.7.0", @@ -5937,25 +5933,11 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, + "devOptional": true, "engines": { "node": ">=6" } }, - "node_modules/zen-observable": { - "version": "0.8.15", - "resolved": "https://registry.npmjs.org/zen-observable/-/zen-observable-0.8.15.tgz", - "integrity": "sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ==" - }, - "node_modules/zen-observable-ts": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-1.1.0.tgz", - "integrity": "sha512-1h4zlLSqI2cRLPJUHJFL8bCWHhkpuXkF+dbGkRaWjgDIG26DmzyshUMrdV/rL3UnR+mhaX4fRq8LPouq0MYYIA==", - "dependencies": { - "@types/zen-observable": "0.8.3", - "zen-observable": "0.8.15" - } - }, "node_modules/zlib-sync": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/zlib-sync/-/zlib-sync-0.1.7.tgz", @@ -5979,13 +5961,13 @@ "version": "0.8.0", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", - "dev": true + "devOptional": true }, "@cspotcode/source-map-support": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", - "dev": true, + "devOptional": true, "requires": { "@cspotcode/source-map-consumer": "0.8.0" } @@ -6314,25 +6296,25 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", - "dev": true + "devOptional": true }, "@tsconfig/node12": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", - "dev": true + "devOptional": true }, "@tsconfig/node14": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", - "dev": true + "devOptional": true }, "@tsconfig/node16": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", - "dev": true + "devOptional": true }, "@types/fs-extra": { "version": "9.0.13", @@ -6382,11 +6364,6 @@ "@types/node": "*" } }, - "@types/zen-observable": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/@types/zen-observable/-/zen-observable-0.8.3.tgz", - "integrity": "sha512-fbF6oTd4sGGy0xjHPKAt+eS2CrxJ3+6gQ3FGcBoIJR2TLAyCkCyI8JqZNy+FeON0AhVgNJoUumVoZQjBFUqHkw==" - }, "@typescript-eslint/eslint-plugin": { "version": "5.16.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.16.0.tgz", @@ -6486,7 +6463,7 @@ "version": "8.7.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", - "dev": true + "devOptional": true }, "acorn-jsx": { "version": "5.3.2", @@ -6499,7 +6476,7 @@ "version": "8.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true + "devOptional": true }, "agent-base": { "version": "6.0.2", @@ -6594,7 +6571,7 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true + "devOptional": true }, "argparse": { "version": "2.0.1", @@ -7104,7 +7081,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true + "devOptional": true }, "croner": { "version": "4.1.97", @@ -7224,7 +7201,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true + "devOptional": true }, "dir-glob": { "version": "3.0.1", @@ -8579,7 +8556,7 @@ "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true + "devOptional": true }, "marked": { "version": "4.0.12", @@ -8588,12 +8565,12 @@ "dev": true }, "markov-strings-db": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/markov-strings-db/-/markov-strings-db-4.1.5.tgz", - "integrity": "sha512-p37FSQxXFUnHQfdp4OOljxs+aomNHK8avGVzZZy8Xjl4HEy7JB/v8f+isbhddyjSXewSjqyFwwcoh4TuZj2NTQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/markov-strings-db/-/markov-strings-db-4.2.0.tgz", + "integrity": "sha512-KlPmvQC5s/lonqn5syB1d+KYs1eREmc3BswSRQCPJARZJzu/zqVbEMB9FoKd6PvlAFiJE9LH15z3kJg0GijLBA==", "requires": { "reflect-metadata": "^0.1.13", - "typeorm": "^0.2.41" + "typeorm": "^0.3.3" } }, "merge2": { @@ -9858,7 +9835,7 @@ "version": "10.7.0", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.7.0.tgz", "integrity": "sha512-TbIGS4xgJoX2i3do417KSaep1uRAW/Lu+WAL2doDHC0D6ummjirVOXU5/7aiZotbQ5p1Zp9tP7U6cYhA0O7M8A==", - "dev": true, + "devOptional": true, "requires": { "@cspotcode/source-map-support": "0.7.0", "@tsconfig/node10": "^1.0.7", @@ -9993,27 +9970,27 @@ } }, "typeorm": { - "version": "0.2.45", - "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.2.45.tgz", - "integrity": "sha512-c0rCO8VMJ3ER7JQ73xfk0zDnVv0WDjpsP6Q1m6CVKul7DB9iVdWLRjPzc8v2eaeBuomsbZ2+gTaYr8k1gm3bYA==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.3.3.tgz", + "integrity": "sha512-01gesp6ikGMLGUxBDzEn4qcIiVW3gWzZsUPE6ETqzSRuHL4pCAWHvTPELN1agirBJrZNxhxiVFUXCmnPXYNfrg==", "requires": { "@sqltools/formatter": "^1.2.2", "app-root-path": "^3.0.0", "buffer": "^6.0.3", "chalk": "^4.1.0", "cli-highlight": "^2.1.11", - "debug": "^4.3.1", - "dotenv": "^8.2.0", - "glob": "^7.1.6", - "js-yaml": "^4.0.0", + "date-fns": "^2.28.0", + "debug": "^4.3.3", + "dotenv": "^16.0.0", + "glob": "^7.2.0", + "js-yaml": "^4.1.0", "mkdirp": "^1.0.4", "reflect-metadata": "^0.1.13", "sha.js": "^2.4.11", - "tslib": "^2.1.0", + "tslib": "^2.3.1", "uuid": "^8.3.2", "xml2js": "^0.4.23", - "yargs": "^17.0.1", - "zen-observable-ts": "^1.0.0" + "yargs": "^17.3.1" }, "dependencies": { "buffer": { @@ -10025,11 +10002,6 @@ "ieee754": "^1.2.1" } }, - "dotenv": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", - "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==" - }, "uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", @@ -10047,7 +10019,7 @@ "version": "4.6.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz", "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==", - "dev": true + "devOptional": true }, "unbox-primitive": { "version": "1.0.1", @@ -10110,7 +10082,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.0.tgz", "integrity": "sha512-mpSYqfsFvASnSn5qMiwrr4VKfumbPyONLCOPmsR3A6pTY/r0+tSaVbgPWSAIuzbk3lCTa+FForeTiO+wBQGkjA==", - "dev": true + "devOptional": true }, "validator": { "version": "13.7.0", @@ -10347,21 +10319,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true - }, - "zen-observable": { - "version": "0.8.15", - "resolved": "https://registry.npmjs.org/zen-observable/-/zen-observable-0.8.15.tgz", - "integrity": "sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ==" - }, - "zen-observable-ts": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-1.1.0.tgz", - "integrity": "sha512-1h4zlLSqI2cRLPJUHJFL8bCWHhkpuXkF+dbGkRaWjgDIG26DmzyshUMrdV/rL3UnR+mhaX4fRq8LPouq0MYYIA==", - "requires": { - "@types/zen-observable": "0.8.3", - "zen-observable": "0.8.15" - } + "devOptional": true }, "zlib-sync": { "version": "0.1.7", diff --git a/package.json b/package.json index d5d0998..db82222 100644 --- a/package.json +++ b/package.json @@ -1,13 +1,13 @@ { "name": "markov-discord", - "version": "2.0.2", + "version": "2.1.0", "description": "A conversational Markov chain bot for Discord", "main": "dist/index.js", "scripts": { "start": "NODE_ENV=production pm2 start --no-daemon dist/index.js", "start:ts": "ts-node src/index.ts", "build": "rimraf dist && tsc", - "lint": "tsc --noEmit && eslint **/*.ts *.js", + "lint": "tsc --noEmit && eslint .", "docker:build": "docker build . -t charlocharlie/markov-discord:latest --target deploy", "docker:run": "docker run --rm -ti -v $(pwd)/config:/usr/app/config charlocharlie/markov-discord:latest", "typeorm": "node --require ts-node/register ./node_modules/typeorm/cli.js", @@ -45,13 +45,13 @@ "erlpack": "github:discord/erlpack", "fs-extra": "^10.0.1", "json5": "^2.2.1", - "markov-strings-db": "^4.1.5", + "markov-strings-db": "^4.2.0", "pino": "^7.9.2", "pino-pretty": "^7.6.0", "reflect-metadata": "^0.1.13", "simple-eta": "^3.0.2", "source-map-support": "^0.5.21", - "typeorm": "^0.2.45", + "typeorm": "^0.3.3", "utf-8-validate": "^5.0.9", "zlib-sync": "^0.1.7" }, diff --git a/src/index.ts b/src/index.ts index 7fbebf2..585644d 100644 --- a/src/index.ts +++ b/src/index.ts @@ -6,7 +6,7 @@ import Markov, { MarkovConstructorOptions, AddDataProps, } from 'markov-strings-db'; -import { createConnection } from 'typeorm'; +import { DataSource } from 'typeorm'; import { MarkovInputData } from 'markov-strings-db/dist/src/entity/MarkovInputData'; import type { PackageJsonPerson } from 'types-package-json'; import makeEta from 'simple-eta'; @@ -27,6 +27,7 @@ import { trainCommand, } from './deploy-commands'; import { getRandomElement, getVersion, packageJson } from './util'; +import ormconfig from './ormconfig'; interface MarkovDataCustom { attachments: string[]; @@ -87,7 +88,7 @@ function getGuildChannelId(channel: Discord.TextBasedChannel): string | null { async function isValidChannel(channel: Discord.TextBasedChannel): Promise { const channelId = getGuildChannelId(channel); if (!channelId) return false; - const dbChannel = await Channel.findOne(channelId); + const dbChannel = await Channel.findOneBy({ id: channelId }); return dbChannel?.listen || false; } @@ -97,7 +98,7 @@ function isHumanAuthoredMessage(message: Discord.Message | Discord.PartialMessag async function getValidChannels(guild: Discord.Guild): Promise { L.trace('Getting valid channels from database'); - const dbChannels = await Channel.find({ guild: Guild.create({ id: guild.id }), listen: true }); + const dbChannels = await Channel.findBy({ guild: { id: guild.id }, listen: true }); L.trace({ dbChannels: dbChannels.map((c) => c.id) }, 'Valid channels from database'); const channels = ( await Promise.all( @@ -864,8 +865,9 @@ client.on('interactionCreate', async (interaction) => { * Loads the config settings from disk */ async function main(): Promise { - const connection = await Markov.extendConnectionOptions(); - await createConnection(connection); + const dataSourceOptions = Markov.extendDataSourceOptions(ormconfig); + const dataSource = new DataSource(dataSourceOptions); + await dataSource.initialize(); await client.login(config.token); } diff --git a/src/ormconfig.ts b/src/ormconfig.ts new file mode 100644 index 0000000..946a439 --- /dev/null +++ b/src/ormconfig.ts @@ -0,0 +1,38 @@ +import { DataSourceOptions } from 'typeorm'; +import { Channel } from './entity/Channel'; +import { Guild } from './entity/Guild'; +import { CreateTables1640838214672 } from './migration/1640838214672-CreateTables'; + +const ENTITIES = [Channel, Guild]; +const MIGRATIONS = [CreateTables1640838214672]; +// const SUBSCRIBERS = []; + +const devConfig: DataSourceOptions = { + type: 'better-sqlite3', + database: process.env.CONFIG_DIR + ? `${process.env.CONFIG_DIR}/db/db.sqlite3` + : 'config/db/db.sqlite3', + synchronize: true, + migrationsRun: false, + // logging: 'all', + entities: ENTITIES, + migrations: MIGRATIONS, + // subscribers: SUBSCRIBERS, +}; + +const prodConfig: DataSourceOptions = { + type: 'better-sqlite3', + database: process.env.CONFIG_DIR + ? `${process.env.CONFIG_DIR}/db/db.sqlite3` + : 'config/db/db.sqlite3', + synchronize: false, + logging: false, + entities: ENTITIES, + migrations: MIGRATIONS, + migrationsRun: true, + // subscribers: SUBSCRIBERS, +}; + +const finalConfig = process.env.NODE_ENV !== 'production' ? devConfig : prodConfig; + +export default finalConfig;