diff --git a/packages/core/build/.neutrinorc.js b/packages/core/build/.neutrinorc.js index 9a47ac6..05907c3 100644 --- a/packages/core/build/.neutrinorc.js +++ b/packages/core/build/.neutrinorc.js @@ -8,7 +8,7 @@ const node = require('@neutrinojs/node'); const glob = require('glob'); const { - FLECKS_ROOT = process.cwd(), + FLECKS_CORE_ROOT = process.cwd(), } = process.env; module.exports = require('../src/bootstrap/fleck.neutrinorc'); @@ -26,8 +26,8 @@ module.exports.use.push((neutrino) => { // Tests. module.exports.use.push((neutrino) => { // Test entrypoint. - const testPaths = glob.sync(join(FLECKS_ROOT, 'test/*.js')); - testPaths.push(...glob.sync(join(FLECKS_ROOT, `test/platforms/server/*.js`))); + const testPaths = glob.sync(join(FLECKS_CORE_ROOT, 'test/*.js')); + testPaths.push(...glob.sync(join(FLECKS_CORE_ROOT, `test/platforms/server/*.js`))); if (testPaths.length > 0) { const testEntry = neutrino.config.entry('test').clear(); testPaths.forEach((path) => testEntry.add(path)); diff --git a/packages/core/build/dox/build.md b/packages/core/build/dox/build.md index c55cdfb..52c86f6 100644 --- a/packages/core/build/dox/build.md +++ b/packages/core/build/dox/build.md @@ -71,7 +71,7 @@ from the `build` directory. The resolution order is determined by a few variable an overridden `server.neutrinorc.js` when building, however `general` is set to `.neutrinorc.js`, so it will also accept overrides of that more general configuration file. -- `root` specifies an alternative location to search. Defaults to `FLECKS_ROOT`. +- `root` specifies an alternative location to search. Defaults to `FLECKS_CORE_ROOT`. - `fleck` specifies the fleck owning the configuration. `@flecks/core` owns `babel.config.js`, `@flecks/server` owns `server.neutrinorc.js`, etc. This only really matters if you are writing a @@ -90,7 +90,7 @@ We would then expect flecks to search using the following resolution order: - `/foo/bar/baz/build/server.neutrinorc.js` - `/foo/bar/baz/build/.neutrinorc.js` -- `${FLECKS_ROOT}/build/server.neutrinorc.js` -- `${FLECKS_ROOT}/build/.neutrinorc.js` +- `${FLECKS_CORE_ROOT}/build/server.neutrinorc.js` +- `${FLECKS_CORE_ROOT}/build/.neutrinorc.js` - `@flecks/server/build/server.neutrinorc.js` - `@flecks/server/build/.neutrinorc.js` diff --git a/packages/core/src/bootstrap/autoentry.js b/packages/core/src/bootstrap/autoentry.js index 2c8817c..6d4ec41 100644 --- a/packages/core/src/bootstrap/autoentry.js +++ b/packages/core/src/bootstrap/autoentry.js @@ -8,7 +8,7 @@ const { const R = require('./require'); const { - FLECKS_ROOT = process.cwd(), + FLECKS_CORE_ROOT = process.cwd(), } = process.env; const resolver = (source) => (path) => { @@ -36,7 +36,7 @@ module.exports = () => (neutrino) => { neutrino.config.entryPoints.delete('index'); // Alias this package. neutrino.config.resolve.alias - .set(name, join(FLECKS_ROOT, 'src')); + .set(name, join(FLECKS_CORE_ROOT, 'src')); // Calculate entry points from `files`. files .filter(resolver(source)) diff --git a/packages/core/src/bootstrap/fleck.neutrinorc.js b/packages/core/src/bootstrap/fleck.neutrinorc.js index f760df6..449f240 100644 --- a/packages/core/src/bootstrap/fleck.neutrinorc.js +++ b/packages/core/src/bootstrap/fleck.neutrinorc.js @@ -4,13 +4,13 @@ const autoentry = require('./autoentry'); const fleck = require('./fleck'); const { - FLECKS_ROOT = process.cwd(), + FLECKS_CORE_ROOT = process.cwd(), } = process.env; module.exports = { options: { output: 'dist', - root: FLECKS_ROOT, + root: FLECKS_CORE_ROOT, }, use: [ copy({ diff --git a/packages/core/src/build/eslintrc.js b/packages/core/src/build/eslintrc.js index f495f19..f01cd66 100644 --- a/packages/core/src/build/eslintrc.js +++ b/packages/core/src/build/eslintrc.js @@ -5,11 +5,11 @@ const {targetNeutrino} = require('../server/commands'); const {default: Flecks} = require('../server/flecks'); const { - FLECKS_BUILD_TARGET = 'fleck', + FLECKS_CORE_BUILD_TARGET = 'fleck', } = process.env; const flecks = Flecks.bootstrap(); -const config = R(process.env[targetNeutrino(FLECKS_BUILD_TARGET)]); -flecks.invokeFlat('@flecks/core/build', FLECKS_BUILD_TARGET, config); +const config = R(process.env[targetNeutrino(FLECKS_CORE_BUILD_TARGET)]); +flecks.invokeFlat('@flecks/core/build', FLECKS_CORE_BUILD_TARGET, config); module.exports = neutrino(config).eslintrc(); diff --git a/packages/core/src/build/webpack.config.js b/packages/core/src/build/webpack.config.js index 8a1979e..fd1bebd 100644 --- a/packages/core/src/build/webpack.config.js +++ b/packages/core/src/build/webpack.config.js @@ -21,10 +21,10 @@ import Flecks from '../server/flecks'; const debug = D('@flecks/core/build/webpack.config.js'); const { - FLECKS_BUILD_LIST = '', + FLECKS_CORE_BUILD_LIST = '', } = process.env; -const buildList = FLECKS_BUILD_LIST +const buildList = FLECKS_CORE_BUILD_LIST .split(',') .map((name) => name.trim()) .filter((e) => e); diff --git a/packages/core/src/cli.js b/packages/core/src/cli.js index d834528..97aa486 100755 --- a/packages/core/src/cli.js +++ b/packages/core/src/cli.js @@ -7,13 +7,13 @@ import D from 'debug'; import Flecks from './server/flecks'; const { - FLECKS_ROOT = process.cwd(), + FLECKS_CORE_ROOT = process.cwd(), } = process.env; const debug = D('@flecks/core/cli'); // Guarantee local node_modules path. -const defaultNodeModules = resolve(join(FLECKS_ROOT, 'node_modules')); +const defaultNodeModules = resolve(join(FLECKS_CORE_ROOT, 'node_modules')); const nodePathSeparator = '/' === sep ? ':' : ';'; let updatedNodePath; if (!process.env.NODE_PATH) { diff --git a/packages/core/src/server/commands.js b/packages/core/src/server/commands.js index 34e4c2b..08ac955 100644 --- a/packages/core/src/server/commands.js +++ b/packages/core/src/server/commands.js @@ -7,11 +7,11 @@ import flatten from 'lodash.flatten'; import rimraf from 'rimraf'; const { - FLECKS_ROOT = process.cwd(), + FLECKS_CORE_ROOT = process.cwd(), } = process.env; const debug = D('@flecks/core/commands'); -const flecksRoot = normalize(FLECKS_ROOT); +const flecksRoot = normalize(FLECKS_CORE_ROOT); export const spawnWith = (cmd, localEnv, spawnArgs) => { debug('spawning:\n%s %s\nwith local environment: %O', cmd, spawnArgs.join(' '), localEnv); @@ -98,8 +98,8 @@ export default (program, flecks) => { const webpackConfig = flecks.localConfig('webpack.config.js', '@flecks/core'); const localEnv = { ...targetNeutrinos(flecks), - ...(target ? {FLECKS_BUILD_LIST: target} : {}), - ...(hot ? {FLECKS_HOT: 1} : {}), + ...(target ? {FLECKS_CORE_BUILD_LIST: target} : {}), + ...(hot ? {FLECKS_ENV_FLECKS_SERVER_hot: 'true'} : {}), }; const spawnArgs = [ '--colors', @@ -124,7 +124,7 @@ export default (program, flecks) => { // eslint-disable-next-line no-continue continue; } - process.env.FLECKS_BUILD_TARGET = target; + process.env.FLECKS_CORE_BUILD_TARGET = target; const spawnArgs = [ '--config', flecks.localConfig( `${target}.eslintrc.js`, @@ -136,7 +136,7 @@ export default (program, flecks) => { '.', ]; const localEnv = { - FLECKS_BUILD_TARGET: target, + FLECKS_CORE_BUILD_TARGET: target, ...targetNeutrinos(flecks), }; promises.push(new Promise((resolve, reject) => { diff --git a/packages/core/src/server/flecks.js b/packages/core/src/server/flecks.js index 263f07a..9647a8c 100644 --- a/packages/core/src/server/flecks.js +++ b/packages/core/src/server/flecks.js @@ -19,7 +19,7 @@ import R from '../bootstrap/require'; import Flecks from '../flecks'; const { - FLECKS_ROOT = process.cwd(), + FLECKS_CORE_ROOT = process.cwd(), } = process.env; const debug = D('@flecks/core/flecks/server'); @@ -106,11 +106,11 @@ export default class ServerFlecks extends Flecks { static bootstrap( { platforms = ['server'], - root = FLECKS_ROOT, + root = FLECKS_CORE_ROOT, without = [], } = {}, ) { - const resolvedRoot = resolve(FLECKS_ROOT, root); + const resolvedRoot = resolve(FLECKS_CORE_ROOT, root); let initial; let configType; try { @@ -374,7 +374,7 @@ export default class ServerFlecks extends Flecks { return this.constructor.localConfig(this.resolver, path, fleck, options); } - static localConfig(resolver, path, fleck, {general = path, root = FLECKS_ROOT} = {}) { + static localConfig(resolver, path, fleck, {general = path, root = FLECKS_CORE_ROOT} = {}) { let configFile; try { const localConfig = join(root, 'build', path); @@ -389,13 +389,13 @@ export default class ServerFlecks extends Flecks { } catch (error) { try { - const localConfig = join(FLECKS_ROOT, 'build', path); + const localConfig = join(FLECKS_CORE_ROOT, 'build', path); statSync(localConfig); configFile = localConfig; } catch (error) { try { - const localConfig = join(FLECKS_ROOT, 'build', general); + const localConfig = join(FLECKS_CORE_ROOT, 'build', general); statSync(localConfig); configFile = localConfig; } diff --git a/packages/core/test/platforms/server/bootstrap.js b/packages/core/test/platforms/server/bootstrap.js index bd92cdd..3c44820 100644 --- a/packages/core/test/platforms/server/bootstrap.js +++ b/packages/core/test/platforms/server/bootstrap.js @@ -3,7 +3,7 @@ import {expect} from 'chai'; // eslint-disable-next-line import/no-unresolved import {Flecks} from '@flecks/core/server'; -it('bootstraps FLECKS_ROOT by default', () => { +it('bootstraps FLECKS_CORE_ROOT by default', () => { const flecks = Flecks.bootstrap(); expect(flecks.fleck('@flecks/core')).to.not.equal(undefined); }); diff --git a/packages/create-app/template/build/flecks.yml b/packages/create-app/template/build/flecks.yml index 56c1ada..264fb5e 100644 --- a/packages/create-app/template/build/flecks.yml +++ b/packages/create-app/template/build/flecks.yml @@ -1,2 +1,3 @@ '@flecks/core': {} -'@flecks/server': {} +'@flecks/server': + start: true diff --git a/packages/create-app/template/package.json.extraneous b/packages/create-app/template/package.json.extraneous index e4eff8d..9005974 100644 --- a/packages/create-app/template/package.json.extraneous +++ b/packages/create-app/template/package.json.extraneous @@ -2,7 +2,7 @@ "private": true, "scripts": { "build": "flecks build", - "dev": "FLECKS_START_SERVER=1 npm run -- build -h" + "dev": "npm run -- build -h" }, "dependencies": { "@flecks/core": "^1.0.0", diff --git a/packages/create-fleck/src/cli.js b/packages/create-fleck/src/cli.js index 9f975b0..6e1401d 100644 --- a/packages/create-fleck/src/cli.js +++ b/packages/create-fleck/src/cli.js @@ -10,10 +10,10 @@ import {copySync, moveSync} from 'fs-extra'; import validate from 'validate-npm-package-name'; const { - FLECKS_ROOT = process.cwd(), + FLECKS_CORE_ROOT = process.cwd(), } = process.env; -const cwd = normalize(FLECKS_ROOT); +const cwd = normalize(FLECKS_CORE_ROOT); const forwardProcessCode = (fn) => async (...args) => { process.exitCode = await fn(args.slice(0, -2)); diff --git a/packages/db/src/connection.js b/packages/db/src/connection.js index d6b8e25..8bfc92d 100644 --- a/packages/db/src/connection.js +++ b/packages/db/src/connection.js @@ -2,16 +2,38 @@ import {ByType} from '@flecks/core'; import D from 'debug'; import Sequelize from 'sequelize'; -import environment from './environment'; - const debug = D('@flecks/db/server/connection'); export async function createDatabaseConnection(flecks) { - const env = environment(); - debug('environment: %O', {...env, ...(env.password ? {password: '*** REDACTED ***'} : {})}); + let config = {}; + const { + dialect, + username, + password, + host, + port, + database, + } = flecks.get('@flecks/db/server'); + if ('sqlite' === dialect) { + config = { + dialect: 'sqlite', + storage: database, + }; + } + else { + config = { + dialect, + username, + password, + host, + port, + database, + }; + } + debug('config: %O', {...config, ...(config.password ? {password: '*** REDACTED ***'} : {})}); const sequelize = new Sequelize({ logging: false, - ...env, + ...config, }); const Models = flecks.get('$flecks/db.models')[ByType]; Object.values(Models) diff --git a/packages/db/src/containers.js b/packages/db/src/containers.js index bde4946..c7bd4cf 100644 --- a/packages/db/src/containers.js +++ b/packages/db/src/containers.js @@ -1,13 +1,11 @@ -import environment from './environment'; - -export default () => { +export default (flecks) => { const { dialect, username, password, port, database, - } = environment(); + } = flecks.get('@flecks/db/server'); let args = []; let image; let mount; diff --git a/packages/db/src/environment.js b/packages/db/src/environment.js deleted file mode 100644 index 1208513..0000000 --- a/packages/db/src/environment.js +++ /dev/null @@ -1,25 +0,0 @@ -const { - SEQUELIZE_DIALECT = 'sqlite', - SEQUELIZE_USER = 'user', - SEQUELIZE_PASSWORD = 'Set_The_SEQUELIZE_PASSWORD_Environment_Variable', - SEQUELIZE_HOST = 'localhost', - SEQUELIZE_PORT, - SEQUELIZE_DATABASE = ':memory:', -} = process.env; - -export default () => { - if ('sqlite' === SEQUELIZE_DIALECT) { - return ({ - dialect: 'sqlite', - storage: SEQUELIZE_DATABASE, - }); - } - return ({ - dialect: SEQUELIZE_DIALECT, - username: SEQUELIZE_USER, - password: SEQUELIZE_PASSWORD, - host: SEQUELIZE_HOST, - port: SEQUELIZE_PORT, - database: SEQUELIZE_DATABASE, - }); -}; diff --git a/packages/db/src/server.js b/packages/db/src/server.js index db2216f..beaeb86 100644 --- a/packages/db/src/server.js +++ b/packages/db/src/server.js @@ -12,7 +12,13 @@ export {createDatabaseConnection}; export default { [Hooks]: { '@flecks/core/config': () => ({ + dialect: 'sqlite', + username: undefined, + password: undefined, + host: undefined, 'models.decorate': ['...'], + port: undefined, + database: ':memory:', }), '@flecks/core/starting': (flecks) => { flecks.set('$flecks/db.models', flecks.gather( diff --git a/packages/fleck/src/server/build/fleck.neutrinorc.js b/packages/fleck/src/server/build/fleck.neutrinorc.js index dd8e2fa..9d4f34d 100644 --- a/packages/fleck/src/server/build/fleck.neutrinorc.js +++ b/packages/fleck/src/server/build/fleck.neutrinorc.js @@ -7,7 +7,7 @@ const D = require('debug'); const glob = require('glob'); const { - FLECKS_ROOT = process.cwd(), + FLECKS_CORE_ROOT = process.cwd(), } = process.env; const debug = D('@flecks/fleck/fleck.neutrino.js'); @@ -47,9 +47,9 @@ config.use.push((neutrino) => { config.use.push((neutrino) => { // Test entrypoint. - const testPaths = glob.sync(join(FLECKS_ROOT, 'test/*.js')); + const testPaths = glob.sync(join(FLECKS_CORE_ROOT, 'test/*.js')); for (let i = 0; i < flecks.platforms.length; ++i) { - testPaths.push(...glob.sync(join(FLECKS_ROOT, `test/platforms/${flecks.platforms[i]}/*.js`))); + testPaths.push(...glob.sync(join(FLECKS_CORE_ROOT, `test/platforms/${flecks.platforms[i]}/*.js`))); } if (testPaths.length > 0) { const testEntry = neutrino.config.entry('test').clear(); diff --git a/packages/fleck/src/server/commands.js b/packages/fleck/src/server/commands.js index 6f45295..51a6404 100644 --- a/packages/fleck/src/server/commands.js +++ b/packages/fleck/src/server/commands.js @@ -13,7 +13,7 @@ import { const debug = D('@flecks/core/commands'); const { - FLECKS_ROOT = process.cwd(), + FLECKS_CORE_ROOT = process.cwd(), } = process.env; export default (program, flecks) => { @@ -29,13 +29,13 @@ export default (program, flecks) => { const { watch, } = opts; - const testPaths = glob.sync(join(FLECKS_ROOT, 'test/*.js')); + const testPaths = glob.sync(join(FLECKS_CORE_ROOT, 'test/*.js')); if (0 === testPaths.length) { // eslint-disable-next-line no-console console.log('No fleck tests found.'); return 0; } - const testLocation = join(FLECKS_ROOT, 'dist', 'test.js'); + const testLocation = join(FLECKS_CORE_ROOT, 'dist', 'test.js'); if (watch) { await unlink(testLocation); } diff --git a/packages/governor/src/limiter.js b/packages/governor/src/limiter.js index 54426d6..1f1cf44 100644 --- a/packages/governor/src/limiter.js +++ b/packages/governor/src/limiter.js @@ -1,7 +1,7 @@ import {createClient} from 'redis'; import {RateLimiterRedis} from 'rate-limiter-flexible'; -export default async (options) => { +export default async (flecks, options) => { const storeClient = createClient(); // @todo node-redis@4 // await storeClient.connect(); diff --git a/packages/governor/src/server.js b/packages/governor/src/server.js index a33d69c..32399ca 100644 --- a/packages/governor/src/server.js +++ b/packages/governor/src/server.js @@ -55,10 +55,13 @@ export default { '@flecks/server/up': async (flecks) => { if (flecks.fleck('@flecks/http/server')) { const {http} = flecks.get('@flecks/governor/server'); - const limiter = await createLimiter({ - keyPrefix: '@flecks/governor.http.request.route', - ...http, - }); + const limiter = await createLimiter( + flecks, + { + keyPrefix: '@flecks/governor.http.request.route', + ...http, + }, + ); flecks.set('$flecks/governor.http.limiter', limiter); } if (flecks.fleck('@flecks/socket/server')) { @@ -70,17 +73,23 @@ export default { .map(async ([name, Packet]) => ( [ name, - await createLimiter({keyPrefix: `@flecks/governor.packet.${name}`, ...Packet.limit}), + await createLimiter( + flecks, + {keyPrefix: `@flecks/governor.packet.${name}`, ...Packet.limit}, + ), ] )), ), ); flecks.set('$flecks/governor.packet.limiters', limiters); const {socket} = flecks.get('@flecks/governor/server'); - const limiter = await createLimiter({ - keyPrefix: '@flecks/governor.socket.request.socket', - ...socket, - }); + const limiter = await createLimiter( + flecks, + { + keyPrefix: '@flecks/governor.socket.request.socket', + ...socket, + }, + ); flecks.set('$flecks/governor.socket.limiter', limiter); } }, diff --git a/packages/http/src/server/build/dev-server.js b/packages/http/src/server/build/dev-server.js index 0beb304..b90065f 100644 --- a/packages/http/src/server/build/dev-server.js +++ b/packages/http/src/server/build/dev-server.js @@ -1,10 +1,8 @@ -const env = require('../environment'); - -module.exports = () => (neutrino) => { +module.exports = (flecks) => (neutrino) => { if ('production' === neutrino.config.get('mode')) { return; } - const {devHost, devPort, devPublic} = env(); + const {devHost, devPort, devPublic} = flecks.get('@flecks/http/server'); neutrino.config.devServer .hot(false) .host(devHost) diff --git a/packages/http/src/server/build/http.neutrinorc.js b/packages/http/src/server/build/http.neutrinorc.js index 03afe99..5a91b05 100644 --- a/packages/http/src/server/build/http.neutrinorc.js +++ b/packages/http/src/server/build/http.neutrinorc.js @@ -9,7 +9,7 @@ const runtime = require('./runtime'); const targets = require('./targets'); const { - FLECKS_ROOT = process.cwd(), + FLECKS_CORE_ROOT = process.cwd(), } = process.env; const debug = D('@flecks/http/http.neutrino.js'); @@ -22,14 +22,14 @@ debug('bootstrapped'); const config = { options: { output: 'dist', - root: FLECKS_ROOT, + root: FLECKS_CORE_ROOT, }, use: [ ({config}) => { config .plugin('environment') .use(EnvironmentPlugin, [{ - FLECKS_BUILD_TARGET: 'client', + FLECKS_CORE_BUILD_TARGET: 'client', }]); }, targets(flecks), @@ -63,7 +63,7 @@ else { })); } // Configure dev server. -config.use.push(devServer()); +config.use.push(devServer(flecks)); // Build the client runtime. config.use.push(runtime(flecks)); // Output configuration. diff --git a/packages/http/src/server/build/targets.js b/packages/http/src/server/build/targets.js index 464ced0..be9a4e5 100644 --- a/packages/http/src/server/build/targets.js +++ b/packages/http/src/server/build/targets.js @@ -5,15 +5,14 @@ const {realpathSync} = require('fs'); const {require: R} = require('@flecks/core/server'); const { - FLECKS_HTTP_OUTPUT = 'http', - FLECKS_ROOT = process.cwd(), + FLECKS_CORE_ROOT = process.cwd(), } = process.env; module.exports = (flecks) => (neutrino) => { const {options} = neutrino; const {output: originalOutput} = options; neutrino.config.resolve.modules.merge([ - join(FLECKS_ROOT, 'node_modules'), + join(FLECKS_CORE_ROOT, 'node_modules'), 'node_modules', ]); options.root = realpathSync(dirname(R.resolve(join(flecks.resolve('@flecks/http'), 'entry.js')))); @@ -23,5 +22,5 @@ module.exports = (flecks) => (neutrino) => { entry: './client/tests', title: 'Testbed', }; - options.output = join(originalOutput, FLECKS_HTTP_OUTPUT); + options.output = join(originalOutput, flecks.get('@flecks/http/server.output')); }; diff --git a/packages/http/src/server/environment.js b/packages/http/src/server/environment.js deleted file mode 100644 index 77e6646..0000000 --- a/packages/http/src/server/environment.js +++ /dev/null @@ -1,15 +0,0 @@ -const { - HTTP_DEV_HOST = 'localhost', - HTTP_DEV_PORT = 32341, - HTTP_DEV_PUBLIC, - HTTP_HOST = '0.0.0.0', - HTTP_PORT = 32340, -} = process.env; - -module.exports = () => ({ - devHost: HTTP_DEV_HOST, - devPort: HTTP_DEV_PORT, - devPublic: HTTP_DEV_PUBLIC, - host: HTTP_HOST, - port: HTTP_PORT, -}); diff --git a/packages/http/src/server/http.js b/packages/http/src/server/http.js index 55fe4c7..13340a3 100644 --- a/packages/http/src/server/http.js +++ b/packages/http/src/server/http.js @@ -8,11 +8,8 @@ import express from 'express'; import httpProxy from 'http-proxy'; import flatten from 'lodash.flatten'; -import env from './environment'; - const { - FLECKS_HTTP_OUTPUT = 'http', - FLECKS_ROOT = process.cwd(), + FLECKS_CORE_ROOT = process.cwd(), NODE_ENV, } = process.env; @@ -28,8 +25,9 @@ export const createHttpServer = async (flecks) => { devHost, devPort, host, + output, port, - } = env(); + } = flecks.get('@flecks/http/server'); const app = express(); app.set('trust proxy', trust); const httpServer = createServer(app); @@ -90,18 +88,18 @@ export const createHttpServer = async (flecks) => { } else { // Serve the document root, sans index. - app.use(express.static(join(FLECKS_ROOT, 'dist', FLECKS_HTTP_OUTPUT), {index: false})); + app.use(express.static(join(FLECKS_CORE_ROOT, 'dist', output), {index: false})); // Tests bypass middleware and stream processing. app.get('/tests.html', (req, res) => { res.setHeader('Content-Type', 'text/html; charset=UTF-8'); - const stream = createReadStream(join(FLECKS_ROOT, 'dist', FLECKS_HTTP_OUTPUT, 'tests.html')); + const stream = createReadStream(join(FLECKS_CORE_ROOT, 'dist', output, 'tests.html')); stream.pipe(res); }); // Fallback to serving HTML. app.get('*', routeMiddleware, async (req, res) => { if (req.accepts('text/html')) { res.setHeader('Content-Type', 'text/html; charset=UTF-8'); - const stream = createReadStream(join(FLECKS_ROOT, 'dist', FLECKS_HTTP_OUTPUT, 'index.html')); + const stream = createReadStream(join(FLECKS_CORE_ROOT, 'dist', output, 'index.html')); deliverHtmlStream(stream, flecks, req, res); } else { diff --git a/packages/http/src/server/index.js b/packages/http/src/server/index.js index 738185e..63cf89f 100644 --- a/packages/http/src/server/index.js +++ b/packages/http/src/server/index.js @@ -20,7 +20,7 @@ export default { } // Otherwise, spawn `webpack-dev-server` (WDS). const localEnv = { - FLECKS_BUILD_LIST: 'http', + FLECKS_CORE_BUILD_LIST: 'http', }; const spawnArgs = [ '--mode', 'development', @@ -33,6 +33,12 @@ export default { delete neutrinoConfigs.http; }, '@flecks/core/config': () => ({ + devHost: 'localhost', + devPort: 32341, + devPublic: undefined, + host: '0.0.0.0', + output: 'http', + port: 32340, 'stream.html': ['...'], 'request.route': [], 'request.socket': [], diff --git a/packages/redis/src/containers.js b/packages/redis/src/containers.js index 84e40c1..c849547 100644 --- a/packages/redis/src/containers.js +++ b/packages/redis/src/containers.js @@ -1,11 +1,7 @@ -const { - REDIS_PORT = 6379, -} = process.env; - -export default () => ({ +export default (flecks) => ({ redis: { image: 'redis', mount: '/data', - ports: {[REDIS_PORT]: 6379}, + ports: {[flecks.get('@flecks/redis/server.port')]: 6379}, }, }); diff --git a/packages/redis/src/create-client.js b/packages/redis/src/create-client.js index 3bccad9..95b6410 100644 --- a/packages/redis/src/create-client.js +++ b/packages/redis/src/create-client.js @@ -1,13 +1,12 @@ import {createClient} from 'redis'; -const { - REDIS_HOST = 'localhost', - REDIS_PORT = 6379, -} = process.env; - -export default (opts = {}) => ( - createClient({ - url: `redis://${opts.host || REDIS_HOST}:${opts.port || REDIS_PORT}`, +export default (flecks, opts = {}) => { + const { + host, + port, + } = flecks.get('@flecks/redis/server'); + return createClient({ + url: `redis://${host}:${port}`, ...opts, - }) -); + }); +}; diff --git a/packages/redis/src/server.js b/packages/redis/src/server.js index bfc4050..5f9c3bf 100644 --- a/packages/redis/src/server.js +++ b/packages/redis/src/server.js @@ -29,9 +29,13 @@ export const keys = (client, pattern) => safeKeys(client, pattern, 0); export default { [Hooks]: { + '@flecks/core/config': () => ({ + host: 'localhost', + port: 6379, + }), '@flecks/docker/containers': containers, - '@flecks/repl/context': () => ({ - redisClient: createClient(), + '@flecks/repl/context': (flecks) => ({ + redisClient: createClient(flecks), }), }, }; diff --git a/packages/redis/src/session/server.js b/packages/redis/src/session/server.js index c83c130..39c7730 100644 --- a/packages/redis/src/session/server.js +++ b/packages/redis/src/session/server.js @@ -12,16 +12,16 @@ const RedisStore = ConnectRedis(session); export default { [Hooks]: { - '@flecks/user/session': async () => { - const client = createClient({legacyMode: true}); + '@flecks/user/session': async (flecks) => { + const client = createClient(flecks, {legacyMode: true}); await client.connect(); return { store: new RedisStore({client}), }; }, - '@flecks/socket/server': async () => { - const pubClient = createClient(); - const subClient = createClient(); + '@flecks/socket/server': async (flecks) => { + const pubClient = createClient(flecks); + const subClient = createClient(flecks); await Promise.all([pubClient.connect(), subClient.connect()]); debug('creating adapter'); return { diff --git a/packages/server/src/index.js b/packages/server/src/index.js index 25bb75b..990db1a 100644 --- a/packages/server/src/index.js +++ b/packages/server/src/index.js @@ -3,6 +3,10 @@ import {Hooks} from '@flecks/core'; export default { [Hooks]: { '@flecks/core/config': () => ({ + hot: false, + inspect: false, + profile: false, + start: false, up: ['...'], }), }, diff --git a/packages/server/src/server/build/runtime.js b/packages/server/src/server/build/runtime.js index 5e5890f..7319c27 100644 --- a/packages/server/src/server/build/runtime.js +++ b/packages/server/src/server/build/runtime.js @@ -8,7 +8,7 @@ module.exports = (flecks) => (neutrino) => { // Inject flecks configuration. const paths = Object.keys(resolver); const source = [ - "process.env.FLECKS_BUILD_TARGET = 'server';", + "process.env.FLECKS_CORE_BUILD_TARGET = 'server';", 'module.exports = (async () => ({', ` config: ${JSON.stringify(config)},`, ' flecks: Object.fromEntries(await Promise.all([', diff --git a/packages/server/src/server/build/server.neutrinorc.js b/packages/server/src/server/build/server.neutrinorc.js index fbb07e6..8e462b9 100644 --- a/packages/server/src/server/build/server.neutrinorc.js +++ b/packages/server/src/server/build/server.neutrinorc.js @@ -9,11 +9,7 @@ const D = require('debug'); const runtime = require('./runtime'); const { - FLECKS_HOT = false, - FLECKS_INSPECT = false, - FLECKS_PROFILE = false, - FLECKS_ROOT = process.cwd(), - FLECKS_START_SERVER = false, + FLECKS_CORE_ROOT = process.cwd(), } = process.env; const debug = D('@flecks/server/server.neutrino.js'); @@ -22,15 +18,22 @@ debug('bootstrapping flecks...'); const flecks = Flecks.bootstrap(); debug('bootstrapped'); +const { + hot, + inspect, + profile, + start: isStarting, +} = flecks.get('@flecks/server'); + const entry = (neutrino) => { const entries = neutrino.config.entry('index'); - entries.delete(join(FLECKS_ROOT, 'src', 'index')); + entries.delete(join(FLECKS_CORE_ROOT, 'src', 'index')); entries.add('@flecks/server/entry'); }; // Augment the application-starting configuration. const start = (neutrino) => { - if (FLECKS_START_SERVER) { + if (isStarting) { neutrino.use(startServer({name: 'index.js'})); } if (!neutrino.config.plugins.has('start-server')) { @@ -42,13 +45,13 @@ const start = (neutrino) => { const options = args[0]; options.keyboard = false; // HMR. - options.signal = true; + options.signal = !!hot; // Debugging. - if (FLECKS_INSPECT) { + if (inspect) { options.nodeArgs.push('--inspect'); } // Profiling. - if (FLECKS_PROFILE) { + if (profile) { options.nodeArgs.push('--prof'); } // Bail hard on unhandled rejections and report. @@ -66,7 +69,7 @@ const compiler = flecks.invokeFleck( const config = { options: { output: 'dist', - root: FLECKS_ROOT, + root: FLECKS_CORE_ROOT, }, use: [ entry, @@ -84,7 +87,7 @@ else { }); config.use.unshift(node({ clean: false, - hot: FLECKS_HOT, + hot, })); } // Stub out non-server-friendly modules on the server. @@ -123,7 +126,7 @@ config.use.push(runtime(flecks)); // Give the resolver a helping hand. config.use.push((neutrino) => { neutrino.config.resolve.modules.merge([ - join(FLECKS_ROOT, 'node_modules'), + join(FLECKS_CORE_ROOT, 'node_modules'), 'node_modules', ]); }); diff --git a/packages/socket/src/packet/acceptor.js b/packages/socket/src/packet/acceptor.js index 360270b..ad6a817 100644 --- a/packages/socket/src/packet/acceptor.js +++ b/packages/socket/src/packet/acceptor.js @@ -1,5 +1,9 @@ import D from 'debug'; +const { + NODE_ENV, +} = process.env; + const debug = D('@flecks/socket/acceptor'); export default (socket) => async (packet, fn) => { @@ -17,9 +21,6 @@ export default (socket) => async (packet, fn) => { return; } debug('acceptor error: %O', error); - const { - NODE_ENV, - } = process.env; if (error instanceof Error) { fn({ code: error.code || 500, diff --git a/packages/user/src/session/server.js b/packages/user/src/session/server.js index 0cfa3e1..5dfc27f 100644 --- a/packages/user/src/session/server.js +++ b/packages/user/src/session/server.js @@ -5,12 +5,13 @@ import expressSession from 'express-session'; const debug = D('@flecks/user/session'); -const { - FLECKS_USER_COOKIE_SECRET = 'UNSAFE_DEV_COOKIE', -} = process.env; - export default { [Hooks]: { + '@flecks/core/config': () => ({ + cookieSecret: ( + 'Set the FLECKS_ENV_FLECKS_USER_SESSION_SERVER_cookieSecret environment variable!' + ), + }), '@flecks/http/server/request.route': (flecks) => { const urle = express.urlencoded({extended: true}); return (req, res, next) => { @@ -37,7 +38,7 @@ export default { resave: false, sameSite: true, saveUninitialized: false, - secret: FLECKS_USER_COOKIE_SECRET, + secret: flecks.get('@flecks/user/session/server.cookieSecret'), ...await flecks.invokeReduceAsync('@flecks/user/session'), })); },