UNPKG

react-torch

Version:

A lib to server-side render with react.

191 lines (190 loc) 7.72 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __generator = (this && this.__generator) || function (thisArg, body) { var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; function verb(n) { return function (v) { return step([n, v]); }; } function step(op) { if (f) throw new TypeError("Generator is already executing."); while (_) try { if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; if (y = 0, t) op = [op[0] & 2, t.value]; switch (op[0]) { case 0: case 1: t = op; break; case 4: _.label++; return { value: op[1], done: false }; case 5: _.label++; y = op[1]; op = [0]; continue; case 7: op = _.ops.pop(); _.trys.pop(); continue; default: if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } if (t[2]) _.ops.pop(); _.trys.pop(); continue; } op = body.call(thisArg, _); } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.webpackDevMiddleware = exports.useDevContext = void 0; var fs_1 = __importDefault(require("fs")); var path_1 = __importDefault(require("path")); var farrow_pipeline_1 = require("farrow-pipeline"); var reporter = function (state, stats) { if (state) { var opts = { colors: true, context: process.cwd(), }; if (stats.hasErrors()) { console.error(stats.toString(opts)); } else if (stats.hasWarnings()) { console.warn(stats.toString(opts)); } else { console.info(stats.toString(opts)); } var message = 'Compiled successfully.'; if (stats.hasErrors()) { message = 'Failed to compile.'; } else if (stats.hasWarnings()) { message = 'Compiled with warnings.'; } console.info(message); } else { console.info('Compiling...'); } }; var compile = function (compiler, context) { var state = false; var webpackStats = null; var forceRebuild = false; function done(stats) { // We are now on valid state state = true; webpackStats = stats; context.stats = stats; // @ts-ignore context.assets = webpackStats.assets; // Do the stuff in nextTick, because bundle may be invalidated // if a change happened while compiling process.nextTick(function () { // check if still in valid state if (!state) { return; } // print webpack output reporter(state, stats); }); // In lazy mode, we may issue another rebuild if (forceRebuild) { forceRebuild = false; rebuild(); } } function invalid() { if (state) { reporter(state, webpackStats); } // We are now in invalid state state = false; } function rebuild() { if (state) { state = false; compiler.run(function (err) { if (err) { console.error(err.stack || err); if (err.details) { console.error(err.details); } } }); } else { forceRebuild = true; } } compiler.hooks.invalid.tap('WebpackDevMiddleware', invalid); compiler.hooks.watchRun.tap('WebpackDevMiddleware', invalid); (!!compiler.webpack ? compiler.hooks.afterDone : compiler.hooks.done).tap('WebpackDevMiddleware', done); var watching = compiler.watch({ aggregateTimeout: 200, }, function (err) { if (err) { console.error(err.stack || err); if (err.details) { console.error(err.details); } } }); compiler.hooks.emit.tap('WebpackDevMiddleware', function (compilation) { // @ts-ignore if (compiler.hasWebpackDevMiddlewareAssetEmittedCallback) { return; } compiler.hooks.assetEmitted.tap('WebpackDevMiddleware', function (file, _a) { var targetPath = _a.targetPath, content = _a.content; var dir = path_1.default.dirname(targetPath); var name = path_1.default.basename(targetPath); return fs_1.default.mkdir(dir, { recursive: true }, function (mkdirError) { if (mkdirError) { console.error(name + "Unable to write \"" + dir + "\" directory to disk:\n" + mkdirError); } return fs_1.default.writeFile(targetPath, content, function (writeFileError) { if (writeFileError) { console.error(name + "Unable to write \"" + targetPath + "\" asset to disk:\n" + writeFileError); } console.log(name + "Asset written to disk: \"" + targetPath + "\""); }); }); }); // @ts-ignore compiler.hasWebpackDevMiddlewareAssetEmittedCallback = true; }); return watching; }; var WebpackDevContext = (0, farrow_pipeline_1.createContext)(null); var ctx = { assets: null, stats: null, }; var useDevContext = function () { // every farrow context provide a built-in hooks, Context.use() var ctx = WebpackDevContext.use(); if (ctx.value === null) { throw new Error("assest not found"); } return ctx.value; }; exports.useDevContext = useDevContext; // define a provider middleware var webpackDevMiddleware = function (compiler) { if (compiler) compile(compiler, ctx); return function (_, next) { return __awaiter(void 0, void 0, void 0, function () { var userCtx; return __generator(this, function (_a) { userCtx = WebpackDevContext.use(); userCtx.value = ctx; return [2 /*return*/, next()]; }); }); }; }; exports.webpackDevMiddleware = webpackDevMiddleware;