diff --git a/backend/nodemon-api.json b/backend/nodemon-api.json index 8bc9954d..759b4e97 100644 --- a/backend/nodemon-api.json +++ b/backend/nodemon-api.json @@ -1,5 +1,6 @@ { - "watch": "src", + "watch": ["src", "../shared/src"], + "ignore": ["src/migrations/*"], "ext": "ts", - "exec": "node -r ts-node/register ./src/api/index.ts" + "exec": "node -r ts-node/register -r tsconfig-paths/register ./src/api/index.ts" } diff --git a/backend/nodemon-bot.json b/backend/nodemon-bot.json index 50e371dc..773cda65 100644 --- a/backend/nodemon-bot.json +++ b/backend/nodemon-bot.json @@ -1,5 +1,6 @@ { - "watch": "src", + "watch": ["src", "../shared/src"], + "ignore": ["src/api/*", "src/migrations/*"], "ext": "ts", - "exec": "node -r ts-node/register ./src/index.ts" + "exec": "node -r ts-node/register -r tsconfig-paths/register ./src/index.ts" } diff --git a/backend/ormconfig.js b/backend/ormconfig.js index ed43e333..c27a72b4 100644 --- a/backend/ormconfig.js +++ b/backend/ormconfig.js @@ -17,11 +17,11 @@ const moment = require('moment-timezone'); moment.tz.setDefault('UTC'); const entities = process.env.NODE_ENV === 'production' - ? path.relative(process.cwd(), path.resolve(__dirname, 'dist/data/entities/*.js')) + ? path.relative(process.cwd(), path.resolve(__dirname, 'dist/backend/src/data/entities/*.js')) : path.relative(process.cwd(), path.resolve(__dirname, 'src/data/entities/*.ts')); const migrations = process.env.NODE_ENV === 'production' - ? path.relative(process.cwd(), path.resolve(__dirname, 'dist/migrations/*.js')) + ? path.relative(process.cwd(), path.resolve(__dirname, 'dist/backend/src/migrations/*.js')) : path.relative(process.cwd(), path.resolve(__dirname, 'src/migrations/*.ts')); module.exports = { diff --git a/backend/package-lock.json b/backend/package-lock.json index f91cad9d..a0942190 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -506,6 +506,11 @@ "integrity": "sha512-SGGAhXLHDx+PK4YLNcNGa6goPf9XRWQNAUUbffkwVGGXIxmDKWyGGL4inzq2sPmExu431Ekb9aEMn9BkPqEYFA==", "dev": true }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=" + }, "@types/lodash": { "version": "4.14.144", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.144.tgz", @@ -4475,8 +4480,7 @@ "minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" }, "minimist-options": { "version": "3.0.2", @@ -6060,8 +6064,7 @@ "strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" }, "strip-bom-buf": { "version": "2.0.0", @@ -6339,6 +6342,27 @@ "yn": "^3.0.0" } }, + "tsconfig-paths": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz", + "integrity": "sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==", + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.0", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "^1.2.0" + } + } + } + }, "tslib": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", diff --git a/backend/package.json b/backend/package.json index d445dd98..f53089ec 100644 --- a/backend/package.json +++ b/backend/package.json @@ -4,15 +4,15 @@ "description": "", "private": true, "scripts": { - "start-bot-dev": "node -r ts-node/register src/index.ts", - "start-bot-prod": "cross-env NODE_ENV=production node dist/index.js", + "start-bot-dev": "node -r ts-node/register -r tsconfig-paths/register src/index.ts", + "start-bot-prod": "cross-env NODE_ENV=production node -r ./register-tsconfig-prod-paths.js dist/backend/src/index.js", "watch-bot": "nodemon --config nodemon-bot.json", "build": "rimraf dist && tsc", - "start-api-dev": "node -r ts-node/register src/api/index.ts", - "start-api-prod": "cross-env NODE_ENV=production node dist/api/index.js", + "start-api-dev": "node -r ts-node/register -r tsconfig-paths/register src/api/index.ts", + "start-api-prod": "cross-env NODE_ENV=production node -r ./register-tsconfig-prod-paths.js dist/backend/src/api/index.js", "watch-api": "nodemon --config nodemon-api.json", "format": "prettier --write \"./src/**/*.ts\"", - "typeorm": "node -r ts-node/register ./node_modules/typeorm/cli.js", + "typeorm": "node -r ts-node/register -r tsconfig-paths/register ./node_modules/typeorm/cli.js", "migrate": "npm run typeorm -- migration:run", "migrate-rollback": "npm run typeorm -- migration:revert", "test": "ava" @@ -49,6 +49,7 @@ "seedrandom": "^3.0.1", "tlds": "^1.203.1", "tmp": "0.0.33", + "tsconfig-paths": "^3.9.0", "typeorm": "^0.2.14", "uuid": "^3.3.2" }, @@ -79,7 +80,8 @@ "ts" ], "require": [ - "ts-node/register" + "ts-node/register", + "tsconfig-paths/register" ] } } diff --git a/backend/register-tsconfig-prod-paths.js b/backend/register-tsconfig-prod-paths.js new file mode 100644 index 00000000..b3cba281 --- /dev/null +++ b/backend/register-tsconfig-prod-paths.js @@ -0,0 +1,10 @@ +const path = require('path'); +const tsconfig = require('./tsconfig.json'); +const tsconfigPaths = require('tsconfig-paths'); + +// E.g. ./dist/backend +const baseUrl = path.resolve(tsconfig.compilerOptions.outDir, path.basename(__dirname)); +tsconfigPaths.register({ + baseUrl, + paths: tsconfig.compilerOptions.paths || [], +}); diff --git a/backend/src/api/index.ts b/backend/src/api/index.ts index 4dc9c942..85d2e744 100644 --- a/backend/src/api/index.ts +++ b/backend/src/api/index.ts @@ -10,7 +10,7 @@ import path from "path"; import { TokenError } from "passport-oauth2"; import { PluginError } from "knub"; -require("dotenv").config({ path: path.resolve(__dirname, "..", "..", "api.env") }); +require("dotenv").config({ path: path.resolve(process.cwd(), "api.env") }); function errorHandler(err) { console.error(err.stack || err); // tslint:disable-line:no-console diff --git a/backend/src/index.ts b/backend/src/index.ts index 57b45acd..8490b3be 100644 --- a/backend/src/index.ts +++ b/backend/src/index.ts @@ -12,7 +12,7 @@ import DiscordHTTPError from "eris/lib/errors/DiscordHTTPError"; // tslint:disab import { Configs } from "./data/Configs"; -require("dotenv").config({ path: path.resolve(__dirname, "..", "bot.env") }); +require("dotenv").config({ path: path.resolve(process.cwd(), "bot.env") }); // Error handling let recentPluginErrors = 0;