casterly
Version:
CLI for Casterly
66 lines (65 loc) • 2.87 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const utils_1 = require("@casterly/utils");
const cors_1 = __importDefault(require("cors"));
const express_1 = __importDefault(require("express"));
const webpack_1 = require("webpack");
const webpack_hot_middleware_1 = __importDefault(require("webpack-hot-middleware"));
const __1 = require("..");
const createWebpackConfig_1 = __importDefault(require("../config/createWebpackConfig"));
const userConfig_1 = __importDefault(require("../config/userConfig"));
const logger_1 = require("../output/logger");
const watcher_1 = require("../output/watcher");
async function startWatch() {
var _a, _b;
process.env.NODE_ENV = 'development';
const webpackConfigFn = userConfig_1.default.loadWebpackConfig();
const app = express_1.default();
app.use(cors_1.default());
let setServerReady = null;
const serverReadyPromise = new Promise((resolve) => {
setServerReady = resolve;
});
async function startWatch() {
const clientConfig = await createWebpackConfig_1.default({
dev: true,
isServer: false,
configFn: webpackConfigFn,
});
const serverConfig = await createWebpackConfig_1.default({
dev: true,
isServer: true,
configFn: webpackConfigFn,
});
const multiCompiler = webpack_1.webpack([clientConfig, serverConfig]);
const [clientCompiler, serverCompiler] = multiCompiler.compilers;
app.use(webpack_hot_middleware_1.default(clientCompiler, { path: '/_casterly/__webpack-hmr', log: false }));
const useTypescript = await utils_1.fileExists(__1.paths.appTsConfig);
watcher_1.watchCompilers(clientCompiler, serverCompiler, useTypescript);
await new Promise((resolve, reject) => {
const watcher = multiCompiler.watch([clientConfig.watchOptions, serverConfig.watchOptions], (error) => {
if (error) {
return reject(error);
}
resolve(watcher);
});
});
setServerReady();
}
startWatch();
app.get('/server-ready', (_, res) => {
serverReadyPromise.then(() => {
res.send('ok');
});
});
const port = process.env.PORT
? parseInt(process.env.PORT, 10)
: (_b = undefined !== null && undefined !== void 0 ? undefined : (_a = userConfig_1.default.userConfig.buildServer) === null || _a === void 0 ? void 0 : _a.port) !== null && _b !== void 0 ? _b : userConfig_1.default.defaultConfig.buildServer.port;
app.listen(port, () => {
logger_1.logStore.setState({ port });
});
}
exports.default = startWatch;
;