diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..2cd9eac --- /dev/null +++ b/.env.example @@ -0,0 +1,18 @@ +# Values contained below are also the defaults. + +# Enable debug mode +# Primarily turns off minification of output styles, might also display more info in the console +#MAMI_DEBUG=1 + +# Application title +# Sets the title of the application, might be overridden for the window title by the common settings below once they're loaded +#MAMI_TITLE="Flashii Chat" + +# Common configuration location +# Contains further information shared by the other chat client +#FUTAMI_URL="//futami.flashii.net/common.json" + +# Compatibility client location +# Alternative chat client for older browser, redirected to when checks in init.js fail +# Also has a handy little button in the settings. +#AMI_URL="//sockchat.flashii.net" diff --git a/.gitignore b/.gitignore index 8ac51c1..c21d614 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ /public/assets /public/index.html /public/mami.webmanifest +/.env diff --git a/Makefile b/Makefile index dfea755..2d91467 100644 --- a/Makefile +++ b/Makefile @@ -2,6 +2,7 @@ NODE_EXE := $(shell which node) NPM_EXE := $(shell which npm) BUILD_EXE := build.js +ENV_FILE := .env all: install build @@ -12,18 +13,18 @@ update: ${NPM_EXE} update --save build: - ${NODE_EXE} ${BUILD_EXE} + ${NODE_EXE} --env-file-if-exists ${ENV_FILE} ${BUILD_EXE} rebuild-css: - ${NODE_EXE} ${BUILD_EXE} css + ${NODE_EXE} --env-file-if-exists ${ENV_FILE} ${BUILD_EXE} css rebuild-html: - ${NODE_EXE} ${BUILD_EXE} html + ${NODE_EXE} --env-file-if-exists ${ENV_FILE} ${BUILD_EXE} html rebuild-js: - ${NODE_EXE} ${BUILD_EXE} js + ${NODE_EXE} --env-file-if-exists ${ENV_FILE} ${BUILD_EXE} js rebuild-webmanifest: - ${NODE_EXE} ${BUILD_EXE} webmanifest + ${NODE_EXE} --env-file-if-exists ${ENV_FILE} ${BUILD_EXE} webmanifest .PHONY: all install update build rebuild-css rebuild-html rebuild-js rebuild-webmanifest diff --git a/README.md b/README.md index f23f6cf..8a8ff57 100644 --- a/README.md +++ b/README.md @@ -4,17 +4,29 @@ The Flashii Chat client. ## Configuration -Configuration consists of a `config.json` file that contains the various URLs and a default chat title (the unified one is taken from whatever the remote `common.json` supplies). -Make sure you create the file before building. An example is also supplied. +Configuration consists of a `.env` file that contains the various URLs and a default chat title (the unified one is taken from whatever the remote `common.json` supplies). +The defaults supplied by `build.js` are what are used for the production instance. Make sure you modify them as needed! ## Building -Mami uses a build script written in Node.js; make sure you have NPM available and then run the following commands. +Mami uses a build script written in Node.js and a Makefile to make life easier. +I recommend using something like `nvm` with a Node version of at least `v22.14.0 (LTS)`. + +The following make recipes are available: ```sh -# Installs packages without updating package.json or package-lock.json -npm ci +# Runs the package install and build recipes +make [all] -# Runs the build process, make sure to run this after updates or changes as well -node build.js +# Installs package versions expected by package-lock.json +make install + +# Runs the build process +make build + +# Updates latest versions of packages expected by package.json +make update + +# Rebuild a specific type of asset for speedier development +make rebuild-css / rebuild-html / rebuild-js / rebuild-webmanifest ``` diff --git a/build.js b/build.js index 0793db0..6f5fc53 100644 --- a/build.js +++ b/build.js @@ -4,8 +4,8 @@ const fs = require('fs'); const exec = require('util').promisify(require('child_process').exec); (async () => { - const config = JSON.parse(fs.readFileSync(pathJoin(__dirname, 'config/config.json'))); - const isDebug = fs.existsSync(pathJoin(__dirname, '.debug')); + const title = process.env.MAMI_TITLE ?? 'Flashii Chat'; + const isDebug = !!process.env.MAMI_DEBUG; const env = { root: __dirname, @@ -15,14 +15,11 @@ const exec = require('util').promisify(require('child_process').exec); swc: { es: 'es2021' }, housekeep: [ pathJoin(__dirname, 'public', 'assets') ], vars: { - html: { - title: config.title, - }, + html: { title }, build: { FUTAMI_DEBUG: isDebug, - FUTAMI_URL: config.common_url, - MAMI_URL: config.modern_url, - AMI_URL: config.compat_url, + FUTAMI_URL: process.env.FUTAMI_URL ?? '//futami.flashii.net/common.json', + AMI_URL: process.env.AMI_URL ?? '//sockchat.flashii.net', GIT_HASH: (await exec('git log --pretty="%H" -n1 HEAD')).stdout, }, }, @@ -37,7 +34,17 @@ const exec = require('util').promisify(require('child_process').exec); { source: 'mami.css', target: '/assets', name: 'mami.{hash}.css', vars: { html: ':source' } }, ], webmanifest: [ - { source: 'mami.webmanifest', target: '/', name: 'mami.webmanifest', icons: '/icons', vars: { html: ':source' }, body: { name: config.title, short_name: config.title } } + { + source: 'mami.webmanifest', + target: '/', + name: 'mami.webmanifest', + icons: '/icons', + vars: { html: ':source' }, + body: { + name: title, + short_name: title, + }, + }, ], html: [ { source: 'mami.html', target: '/', name: 'index.html', template: 'html' }, diff --git a/config/config.example.json b/config/config.example.json deleted file mode 100644 index dabc3fe..0000000 --- a/config/config.example.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "title": "Flashii Chat", - "common_url": "//futami.flashii.net/common.json", - "modern_url": "//chat.flashii.net", - "compat_url": "//sockchat.flashii.net" -}