feat: pass res to hydrators
This commit is contained in:
parent
7f55a32f67
commit
bbe5afea39
|
@ -1,7 +1,7 @@
|
||||||
/* eslint-disable import/no-extraneous-dependencies */
|
/* eslint-disable import/no-extraneous-dependencies */
|
||||||
import {createReadStream} from 'fs';
|
import {createReadStream} from 'fs';
|
||||||
import http, {ServerResponse} from 'http';
|
import http, {ServerResponse} from 'http';
|
||||||
import {join} from 'path';
|
import {join, resolve} from 'path';
|
||||||
|
|
||||||
import concat from 'concat-stream-p';
|
import concat from 'concat-stream-p';
|
||||||
import express from 'express';
|
import express from 'express';
|
||||||
|
@ -11,18 +11,19 @@ import {invokeHookFlat} from 'scwp';
|
||||||
import passport from './passport';
|
import passport from './passport';
|
||||||
import session from './session';
|
import session from './session';
|
||||||
|
|
||||||
const hydration = async (req, buffer) => {
|
const hydrate = async (req, res) => (
|
||||||
const hydration = JSON.stringify(
|
(await Promise.all(invokeHookFlat('hydrators', req, res)))
|
||||||
(await Promise.all(invokeHookFlat('hydration', req)))
|
.reduce((r, hydration) => ({...r, ...hydration}), {})
|
||||||
.reduce((hydration, result) => ({...hydration, ...result}), {}),
|
|
||||||
);
|
);
|
||||||
return buffer
|
|
||||||
|
const deliver = async (buffer, req, res) => (
|
||||||
|
buffer
|
||||||
.toString()
|
.toString()
|
||||||
.replace(
|
.replace(
|
||||||
'window.__HYDRATION__ = {};',
|
'window.__HYDRATION__ = {};',
|
||||||
`window.__HYDRATION__ = ${hydration};`,
|
`window.__HYDRATION__ = ${JSON.stringify(await hydrate(req, res))};`,
|
||||||
|
)
|
||||||
);
|
);
|
||||||
};
|
|
||||||
|
|
||||||
export async function createHttpServer() {
|
export async function createHttpServer() {
|
||||||
const app = express();
|
const app = express();
|
||||||
|
@ -41,7 +42,7 @@ export async function createHttpServer() {
|
||||||
proxy.on('proxyRes', async (proxyRes, req, res) => {
|
proxy.on('proxyRes', async (proxyRes, req, res) => {
|
||||||
const buffer = await proxyRes.pipe(concat());
|
const buffer = await proxyRes.pipe(concat());
|
||||||
if ('text/html; charset=UTF-8' === proxyRes.headers['content-type']) {
|
if ('text/html; charset=UTF-8' === proxyRes.headers['content-type']) {
|
||||||
res.end(await hydration(req, buffer));
|
res.end(await deliver(buffer, req, res));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
res.setHeader('Content-Type', proxyRes.headers['content-type']);
|
res.setHeader('Content-Type', proxyRes.headers['content-type']);
|
||||||
|
@ -60,7 +61,7 @@ export async function createHttpServer() {
|
||||||
app.use(express.static(join(__dirname, '..', 'client')));
|
app.use(express.static(join(__dirname, '..', 'client')));
|
||||||
const stream = createReadStream(join(__dirname, '..', 'client', 'index.html'));
|
const stream = createReadStream(join(__dirname, '..', 'client', 'index.html'));
|
||||||
const buffer = await stream.pipe(concat());
|
const buffer = await stream.pipe(concat());
|
||||||
app.get('*', async (req, res) => res.end(await hydration(req, buffer)));
|
app.get('*', async (req, res) => res.end(await deliver(buffer, req, res)));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
httpServer.listen(31344, '0.0.0.0');
|
httpServer.listen(31344, '0.0.0.0');
|
||||||
|
|
|
@ -19,9 +19,18 @@ export default (options = {}) => (
|
||||||
);
|
);
|
||||||
|
|
||||||
registerHooks({
|
registerHooks({
|
||||||
hydration: async (req) => ({
|
hydrators: async (req, res) => {
|
||||||
chat: await appChatState(req),
|
if (req.channel && !req.user) {
|
||||||
user: await appUserState(req),
|
const {name, type} = req.channel;
|
||||||
usernames: await appUsernamesState(req),
|
if (name !== 'anonymous' || type !== 'r') {
|
||||||
}),
|
res.redirect('/');
|
||||||
|
return new Promise(() => {});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
chat: await appChatState(req, res),
|
||||||
|
user: await appUserState(req, res),
|
||||||
|
usernames: await appUsernamesState(req, res),
|
||||||
|
};
|
||||||
|
},
|
||||||
}, module.id);
|
}, module.id);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user