From 3330dce2643c9809471def41a1073f9492dde066 Mon Sep 17 00:00:00 2001 From: tresabhi Date: Sun, 11 Jun 2023 18:28:25 +0000 Subject: [PATCH] feat: better `cyclic.sh` script compatibility --- .vscode/settings.json | 4 ++ esbuild.config.js | 18 ++++++ package.dist.json | 6 ++ package.json | 14 +++-- src/commands/help.ts | 2 +- src/commands/ownedtanks.tsx | 2 - src/core/env.d.ts | 1 - src/core/process/args.ts | 35 +++-------- src/core/process/isDev.ts | 4 +- src/core/ui/render.tsx | 24 +++++--- src/types/global.d.ts | 6 ++ tsconfig.json | 3 +- yarn.lock | 117 +----------------------------------- 13 files changed, 72 insertions(+), 164 deletions(-) create mode 100644 esbuild.config.js create mode 100644 package.dist.json delete mode 100644 src/core/env.d.ts create mode 100644 src/types/global.d.ts diff --git a/.vscode/settings.json b/.vscode/settings.json index 3c3d7a00f..06a367ecb 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -2,12 +2,16 @@ "cSpell.words": [ "Abhi", "accountinfo", + "bepaint", + "cleandist", + "fuzzysort", "kranvagn", "ownedtanks", "Resvg", "searchplayers", "SKLLD", "Smri", + "startcase", "strvk", "tankopedia", "Unicum", diff --git a/esbuild.config.js b/esbuild.config.js new file mode 100644 index 000000000..ea6ec3e1f --- /dev/null +++ b/esbuild.config.js @@ -0,0 +1,18 @@ +import { build } from 'esbuild'; + +build({ + entryPoints: ['src/index.ts'], + outfile: 'dist/server.cjs', + + platform: 'node', + + bundle: true, + // minifying cases a few random errors; will investigate later + // minify: true, + sourcemap: true, + + loader: { + '.node': 'copy', + '.ttf': 'file', + }, +}); diff --git a/package.dist.json b/package.dist.json new file mode 100644 index 000000000..5a2dc478b --- /dev/null +++ b/package.dist.json @@ -0,0 +1,6 @@ +{ + "main": "server.js", + "scripts": { + "start": "node --enable-source-maps server.cjs" + } +} diff --git a/package.json b/package.json index be579f11a..e39c14e65 100644 --- a/package.json +++ b/package.json @@ -1,13 +1,16 @@ { "name": "blitzkrieg", - "version": "1.7.2", + "version": "1.7.3", "description": "", - "main": "index.js", + "main": "src/index.ts", "type": "module", "scripts": { "dev": "yarn build && yarn start", - "start": "vite-node src/index.ts --script", - "build": "rm -rf dist && esbuild src/index.ts --outfile=dist/index.cjs --bundle --platform=node --loader:.node=copy --minify --sourcemap", + "start": "node --enable-source-maps dist/server.cjs", + "cleandist": "rm -rf dist", + "build:raw": "node esbuild.config.js", + "build:package": "cp package.dist.json dist/package.json", + "build": "yarn cleandist && yarn build:raw && yarn build:package", "lint": "tsc" }, "license": "MIT", @@ -31,7 +34,6 @@ "@types/node": "^20.2.1", "@types/react": "^18.2.7", "esbuild": "^0.17.19", - "typescript": "^5.0.4", - "vite-node": "^0.31.1" + "typescript": "^5.0.4" } } diff --git a/src/commands/help.ts b/src/commands/help.ts index 0b1511cb8..327e465bc 100644 --- a/src/commands/help.ts +++ b/src/commands/help.ts @@ -11,7 +11,7 @@ import { client } from '../index.js'; export default { inProduction: true, - inDevelopment: false, + inDevelopment: true, inPublic: true, command: new SlashCommandBuilder() diff --git a/src/commands/ownedtanks.tsx b/src/commands/ownedtanks.tsx index c8af38ea8..1eb80b433 100644 --- a/src/commands/ownedtanks.tsx +++ b/src/commands/ownedtanks.tsx @@ -72,7 +72,6 @@ export default { `https://api.wotblitz.${server}/wotb/clans/accountinfo/?application_id=${wargamingApplicationId}&account_id=${id}&extra=clan`, ); - console.time('ownedtanks'); const image = await render( {/* TODO: integrate some of these into title bar */} @@ -109,7 +108,6 @@ export default { ); await interaction.editReply({ files: [image] }); - console.timeEnd('ownedtanks'); }, autocomplete: usernameAutocomplete, diff --git a/src/core/env.d.ts b/src/core/env.d.ts deleted file mode 100644 index 11f02fe2a..000000000 --- a/src/core/env.d.ts +++ /dev/null @@ -1 +0,0 @@ -/// diff --git a/src/core/process/args.ts b/src/core/process/args.ts index ad5eaf730..db57e13d3 100644 --- a/src/core/process/args.ts +++ b/src/core/process/args.ts @@ -1,28 +1,9 @@ -import { argv } from 'process'; -import errorWithCause from './errorWithCause.js'; +export const discordToken = process.env.DISCORD_TOKEN!; +export const wargamingApplicationId = process.env.WARGAMING_APPLICATION_ID!; -type ArgumentName = 'discord-token' | 'wargaming-application-id'; - -const args: Record = { - 'discord-token': '', - 'wargaming-application-id': '', -}; - -argv.forEach((arg) => { - if (arg.includes('=')) { - const [name, value] = arg.split('='); - args[name as ArgumentName] = value; - } -}); - -Object.keys(args).forEach((arg) => { - if (args[arg as ArgumentName] === '') { - throw errorWithCause( - `Missing argument: ${arg}`, - 'Missing required auth key.', - ); - } -}); - -export const discordToken = args['discord-token']; -export const wargamingApplicationId = args['wargaming-application-id']; +if (!discordToken) { + throw new Error('No Discord token provided'); +} +if (!wargamingApplicationId) { + throw new Error('No Wargaming application id provided}'); +} diff --git a/src/core/process/isDev.ts b/src/core/process/isDev.ts index 9c6c91ad3..71a694792 100644 --- a/src/core/process/isDev.ts +++ b/src/core/process/isDev.ts @@ -1,5 +1,7 @@ -const isDevBoolean = process.argv.includes('--dev'); +const isDevBoolean = process.env.NODE_ENV === 'development'; export default function isDev() { return isDevBoolean; } + +console.log(process.env.NODE_ENV); diff --git a/src/core/ui/render.tsx b/src/core/ui/render.tsx index b55c6956a..3b6aa7029 100644 --- a/src/core/ui/render.tsx +++ b/src/core/ui/render.tsx @@ -1,28 +1,34 @@ import { Resvg } from '@resvg/resvg-js'; import { readFile } from 'fs'; +import { join } from 'path'; import { ReactNode } from 'react'; import satori from 'satori'; +import robotoBlackFile from '../../assets/fonts/Roboto-Black.ttf'; +import robotoBoldFile from '../../assets/fonts/Roboto-Bold.ttf'; +import robotoFile from '../../assets/fonts/Roboto.ttf'; const FONT_NAME = 'Roboto'; -const FONT_FILES = ['Roboto', 'Roboto-Bold', 'Roboto-Black']; +const FONT_FILES = [robotoFile, robotoBoldFile, robotoBlackFile]; -let robotoFlex: Buffer; -let robotoFlexBold: Buffer; -let robotoFlexBlack: Buffer; +let roboto: Buffer; +let robotoBold: Buffer; +let robotoBlack: Buffer; console.log('Importing fonts...'); Promise.all( FONT_FILES.map( (file) => new Promise((resolve, reject) => { - readFile(`src/assets/fonts/${file}.ttf`, (error, data) => { + const path = join(__dirname, file); + + readFile(path, (error, data) => { if (error) reject(error); resolve(data); }); }), ), ).then((data) => { - [robotoFlex, robotoFlexBold, robotoFlexBlack] = data; + [roboto, robotoBold, robotoBlack] = data; console.log('Fonts imported'); }); @@ -30,9 +36,9 @@ export default async function render(element: ReactNode) { const svg = await satori(element, { width: 640, fonts: [ - { data: robotoFlex, name: FONT_NAME, weight: 400 }, - { data: robotoFlexBold, name: FONT_NAME, weight: 700 }, - { data: robotoFlexBlack, name: FONT_NAME, weight: 900 }, + { data: roboto, name: FONT_NAME, weight: 400 }, + { data: robotoBold, name: FONT_NAME, weight: 700 }, + { data: robotoBlack, name: FONT_NAME, weight: 900 }, ], }); const png = new Resvg(svg).render().asPng(); diff --git a/src/types/global.d.ts b/src/types/global.d.ts new file mode 100644 index 000000000..e5265e5ce --- /dev/null +++ b/src/types/global.d.ts @@ -0,0 +1,6 @@ +/// + +declare module '*.ttf' { + const path: string; + export default path; +} diff --git a/tsconfig.json b/tsconfig.json index ccc1693c1..8d1a8a7e4 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -10,5 +10,6 @@ "noEmit": true, "resolveJsonModule": true, "jsx": "react-jsx" - } + }, + "include": ["src/**/*.ts"] } diff --git a/yarn.lock b/yarn.lock index 16d15442d..dedafa72b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -333,11 +333,6 @@ dependencies: "@types/node" "*" -acorn@^8.8.2: - version "8.8.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" - integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== - base64-js@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-0.0.8.tgz#1101e9544f4a76b1bc3b26d452ca96d7a35e7978" @@ -355,11 +350,6 @@ busboy@^1.6.0: dependencies: streamsearch "^1.1.0" -cac@^6.7.14: - version "6.7.14" - resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959" - integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== - camelize@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.1.tgz#89b7e16884056331a35d6b5ad064332c91daa6c3" @@ -399,13 +389,6 @@ csstype@^3.0.2: resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== -debug@^4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - discord-api-types@^0.37.37: version "0.37.39" resolved "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.39.tgz" @@ -435,7 +418,7 @@ emoji-regex@^10.2.1: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.2.1.tgz#a41c330d957191efd3d9dfe6e1e8e1e9ab048b3f" integrity sha512-97g6QgOk8zlDRdgq1WxwgTMgEWGVAQvB5Fdpgc1MkNy56la5SKP9GsMXKDOdqwn90/41a8yPwIGk1Y6WVbeMQA== -esbuild@^0.17.19, esbuild@^0.17.5: +esbuild@^0.17.19: version "0.17.19" resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.17.19.tgz#087a727e98299f0462a3d0bcdd9cd7ff100bd955" integrity sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw== @@ -487,11 +470,6 @@ file-type@^18.2.1: strtok3 "^7.0.0" token-types "^5.0.1" -fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - fuzzysort@^2.0.4: version "2.0.4" resolved "https://registry.npmjs.org/fuzzysort/-/fuzzysort-2.0.4.tgz" @@ -517,11 +495,6 @@ inherits@^2.0.3: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -jsonc-parser@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" - integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== - linebreak@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/linebreak/-/linebreak-1.1.0.tgz#831cf378d98bced381d8ab118f852bd50d81e46b" @@ -557,26 +530,6 @@ markdown-escape@^2.0.0: resolved "https://registry.npmjs.org/markdown-escape/-/markdown-escape-2.0.0.tgz" integrity sha512-Trz4v0+XWlwy68LJIyw3bLbsJiC8XAbRCKF9DbEtZjyndKOGVx6n+wNB0VfoRmY2LKboQLeniap3xrb6LGSJ8A== -mlly@^1.2.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.3.0.tgz#3184cb80c6437bda861a9f452ae74e3434ed9cd1" - integrity sha512-HT5mcgIQKkOrZecOjOX3DJorTikWXwsBfpcr/MGBkhfWcjiqvnaL/9ppxvIUXfjT6xt4DVIAsN9fMUz1ev4bIw== - dependencies: - acorn "^8.8.2" - pathe "^1.1.0" - pkg-types "^1.0.3" - ufo "^1.1.2" - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -nanoid@^3.3.6: - version "3.3.6" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" - integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== - pako@^0.2.5: version "0.2.9" resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" @@ -590,44 +543,16 @@ parse-css-color@^0.2.1: color-name "^1.1.4" hex-rgb "^4.1.0" -pathe@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.1.tgz#1dd31d382b974ba69809adc9a7a347e65d84829a" - integrity sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q== - peek-readable@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/peek-readable/-/peek-readable-5.0.0.tgz" integrity sha512-YtCKvLUOvwtMGmrniQPdO7MwPjgkFBtFIrmfSbYmYuq3tKDV/mcfAhBth1+C3ru7uXIZasc/pHnb+YDYNkkj4A== -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - -pkg-types@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.0.3.tgz#988b42ab19254c01614d13f4f65a2cfc7880f868" - integrity sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A== - dependencies: - jsonc-parser "^3.2.0" - mlly "^1.2.0" - pathe "^1.1.0" - postcss-value-parser@^4.0.2, postcss-value-parser@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== -postcss@^8.4.23: - version "8.4.24" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.24.tgz#f714dba9b2284be3cc07dbd2fc57ee4dc972d2df" - integrity sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg== - dependencies: - nanoid "^3.3.6" - picocolors "^1.0.0" - source-map-js "^1.0.2" - react@^18.2.0: version "18.2.0" resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" @@ -651,13 +576,6 @@ readable-web-to-node-stream@^3.0.2: dependencies: readable-stream "^3.6.0" -rollup@^3.21.0: - version "3.25.0" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.25.0.tgz#71327d396a9decbf23c87b55916ae7204211738a" - integrity sha512-FnJkNRst2jEZGw7f+v4hFo6UTzpDKrAKcHZWcEfm5/GJQ5CK7wgb4moNLNAe7npKUev7yQn1AY/YbZRIxOv6Qg== - optionalDependencies: - fsevents "~2.3.2" - safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" @@ -678,11 +596,6 @@ satori@^0.9.1: postcss-value-parser "^4.2.0" yoga-wasm-web "^0.3.3" -source-map-js@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" - integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== - streamsearch@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz" @@ -736,11 +649,6 @@ typescript@^5.0.4: resolved "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz" integrity sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw== -ufo@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.1.2.tgz#d0d9e0fa09dece0c31ffd57bd363f030a35cfe76" - integrity sha512-TrY6DsjTQQgyS3E3dBaOXf0TpPD8u9FVrVYmKVegJuFw51n/YB9XPt+U6ydzFG5ZIN7+DIjPbNmXoBj9esYhgQ== - undici@^5.21.0: version "5.21.2" resolved "https://registry.npmjs.org/undici/-/undici-5.21.2.tgz" @@ -761,29 +669,6 @@ util-deprecate@^1.0.1: resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== -vite-node@^0.31.1: - version "0.31.4" - resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-0.31.4.tgz#0437f76c35fa83f0a868d3fb5896ca9e164291f5" - integrity sha512-uzL377GjJtTbuc5KQxVbDu2xfU/x0wVjUtXQR2ihS21q/NK6ROr4oG0rsSkBBddZUVCwzfx22in76/0ZZHXgkQ== - dependencies: - cac "^6.7.14" - debug "^4.3.4" - mlly "^1.2.0" - pathe "^1.1.0" - picocolors "^1.0.0" - vite "^3.0.0 || ^4.0.0" - -"vite@^3.0.0 || ^4.0.0": - version "4.3.9" - resolved "https://registry.yarnpkg.com/vite/-/vite-4.3.9.tgz#db896200c0b1aa13b37cdc35c9e99ee2fdd5f96d" - integrity sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg== - dependencies: - esbuild "^0.17.5" - postcss "^8.4.23" - rollup "^3.21.0" - optionalDependencies: - fsevents "~2.3.2" - ws@^8.13.0: version "8.13.0" resolved "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz"