diff --git a/packages/xarc-app-dev/lib/dev-admin/dev-fastify.js b/packages/xarc-app-dev/lib/dev-admin/dev-fastify.js index 89d2ae823..c49ca2ea0 100644 --- a/packages/xarc-app-dev/lib/dev-admin/dev-fastify.js +++ b/packages/xarc-app-dev/lib/dev-admin/dev-fastify.js @@ -2,19 +2,12 @@ /* eslint-disable no-console, no-magic-numbers */ -const fastifyPlugin = require("fastify-plugin"); -const archetype = require("@xarc/app/config/archetype"); const Middleware = require("./middleware"); const Url = require("url"); const mime = require("mime"); const fs = require("fs"); async function register(fastify) { - if (!archetype.webpack.devMiddleware) { - console.error("dev-hapi plugin was loaded but WEBPACK_DEV_MIDDLEWARE is not true. Skipping."); - return; - } - const middleware = new Middleware({ baseUrl: () => { return Url.format({ @@ -32,10 +25,11 @@ async function register(fastify) { await middleware.process(request.raw, reply, { skip: () => {}, replyHtml: html => { + console.log("replying", html); reply .code(200) .header("Content-Type", "text/html") - .send(html); + .send(`${html}`); }, replyNotFound: () => { reply.callNotFound(); @@ -70,6 +64,4 @@ async function register(fastify) { fastify.use(middleware.hotMiddleware); } -module.exports = fastifyPlugin(register, { - name: "electrode-dev-fastify" -}); +module.exports = register; diff --git a/packages/xarc-app-dev/lib/dev-admin/dev-server.js b/packages/xarc-app-dev/lib/dev-admin/dev-server.js index c77ea7457..21d581ba6 100644 --- a/packages/xarc-app-dev/lib/dev-admin/dev-server.js +++ b/packages/xarc-app-dev/lib/dev-admin/dev-server.js @@ -5,6 +5,7 @@ const ck = require("chalker"); const archetype = require("@xarc/app/config/archetype"); const optionalRequire = require("optional-require")(require); +const fastifyServer = optionalRequire("@xarc/fastify-server"); const electrodeServer = optionalRequire("electrode-server"); const Hapi = optionalRequire("@hapi/hapi"); const Koa = optionalRequire("koa"); @@ -18,16 +19,31 @@ if (process.env.WEBPACK_DEV === undefined) { process.env.WEBPACK_DEV = true; } -if (electrodeServer) { +if (fastifyServer) { + fastifyServer({ + electrode: { + logLevel: "warn", + pinoOptions: false + }, + connection: { + host: archetype.webpack.devHostname, + port: archetype.webpack.devPort + }, + plugins: { + webpackDevFastify: { + module: "./dev-fastify", + requireFromPath: __dirname + } + } + }); +} else if (electrodeServer) { electrodeServer({ electrode: { logLevel: "warn" }, - connections: { - default: { - host: archetype.webpack.devHostname, - port: archetype.webpack.devPort - } + connection: { + host: archetype.webpack.devHostname, + port: archetype.webpack.devPort }, plugins: { webpackDevHapi: { @@ -50,7 +66,7 @@ if (electrodeServer) { ); }) .catch(err => { - console.error(ck`koa webpack dev server failed${err}`); + console.error(ck`Hapi webpack dev server failed${err}`); }); } else if (Koa) { const app = new Koa(); @@ -81,7 +97,10 @@ if (electrodeServer) { } else { console.error( ck(` -ERROR: can't find one of electrode-server, express, koa to run dev-server. +ERROR: can't find a HTTP server to run dev-server. +Please install at least one of these dependencies: + @xarc/fastify-server@1+, electrode-server@3+, @hapi/hapi@18+, express@4+, or koa + `) ); } diff --git a/packages/xarc-app-dev/lib/dev-admin/middleware.js b/packages/xarc-app-dev/lib/dev-admin/middleware.js index f60457860..5aa46d9b9 100644 --- a/packages/xarc-app-dev/lib/dev-admin/middleware.js +++ b/packages/xarc-app-dev/lib/dev-admin/middleware.js @@ -436,13 +436,13 @@ ${listDirectoryHtml(this.listAssetPath, outputPath)} const bundle = require.resolve(`${modName}/dist/${dllParts[1]}`); return Promise.resolve(cycle.replyFile(bundle)); } else if (req.url === this.devBaseUrl || req.url === this.devBaseUrlSlash) { - res.send(` + const html = `

Electrode Development Dashboard

View current working directory files

View webpack dev memfs files

View your app server console logs

-`); - return Promise.resolve(); +`; + return Promise.resolve(cycle.replyHtml(html)); } return Promise.resolve(this.canContinue); diff --git a/packages/xarc-app-dev/lib/webpack-dev-fastify.js b/packages/xarc-app-dev/lib/webpack-dev-fastify.js index eaf822bac..73e7f6f40 100644 --- a/packages/xarc-app-dev/lib/webpack-dev-fastify.js +++ b/packages/xarc-app-dev/lib/webpack-dev-fastify.js @@ -1,8 +1,6 @@ "use strict"; /* eslint-disable no-console, no-magic-numbers */ -const fastifyPlugin = require("fastify-plugin"); - const archetype = require("@xarc/app/config/archetype"); const AppDevMiddleware = require("./app-dev-middleware"); @@ -26,6 +24,4 @@ async function register(server) { return; } -module.exports = fastifyPlugin(register, { - name: "@xarc/app-dev" -}); +module.exports = register; diff --git a/packages/xarc-app-dev/package.json b/packages/xarc-app-dev/package.json index c0291a06e..744248c48 100644 --- a/packages/xarc-app-dev/package.json +++ b/packages/xarc-app-dev/package.json @@ -59,7 +59,6 @@ "core-js": "^3", "electrode-hapi-compat": "^1.2.0", "electrode-node-resolver": "^2.0.0", - "fastify-plugin": "^1.6.0", "filter-scan-dir": "^1.0.9", "fs-extra": "^0.30.0", "identity-obj-proxy": "^3.0.0", diff --git a/packages/xarc-app-dev/test/spec/dev-admin/dev-fastify.spec.js b/packages/xarc-app-dev/test/spec/dev-admin/dev-fastify.spec.js index 874dc2d16..3de703d1e 100644 --- a/packages/xarc-app-dev/test/spec/dev-admin/dev-fastify.spec.js +++ b/packages/xarc-app-dev/test/spec/dev-admin/dev-fastify.spec.js @@ -131,7 +131,7 @@ describe("dev-admin-fastify", function() { expect(reply.called); expect(reply.statusCode).eq(200); expect(reply.savedHeaders).deep.eq([{ name: "Content-Type", value: "text/html" }]); - expect(reply.savedPayloads).deep.eq(["Some html content"]); + expect(reply.savedPayloads).deep.eq(["Some html content"]); }); it("process calls replyNotFound", async () => { @@ -204,17 +204,4 @@ describe("dev-admin-fastify", function() { expect(reply.statusCode).eq(404); expect(reply.savedPayloads.length).eq(0); }); - - it("middleware skip does not load middleware", () => { - mockRequire("@xarc/app/config/archetype", { - webpack: { devMiddleware: false } - }); - - const register = require("../../../lib/dev-admin/dev-fastify"); - register(mockFastify); - - expect(MiddlewareClass.setupCount).eq(0); - expect(mockFastify.use.callCount).eq(0); - expect(mockFastify.hooks.listenerCount("onRequest")).eq(0); - }); }); diff --git a/packages/xarc-app-dev/test/spec/dev-fastify.spec.js b/packages/xarc-app-dev/test/spec/dev-fastify.spec.js index 497fc1c6e..01f7ccb39 100644 --- a/packages/xarc-app-dev/test/spec/dev-fastify.spec.js +++ b/packages/xarc-app-dev/test/spec/dev-fastify.spec.js @@ -9,13 +9,6 @@ describe("dev-fastify", function() { }; before(() => { - mockRequire("fastify-plugin", (register, params) => { - return { - isMockFastifyPlugin: true, - register, - params - }; - }); mockRequire("@xarc/app/config/archetype", { webpack: webpackConfig }); @@ -31,38 +24,17 @@ describe("dev-fastify", function() { }; }); - it("fastify exports module", () => { - const fastifyMod = require("../../lib/webpack-dev-fastify"); - expect(fastifyMod.isMockFastifyPlugin).true; - expect(fastifyMod.params.name).eq("@xarc/app-dev"); - expect(fastifyMod.register).exist; - }); - - it("if WEBPACK_DEV_MIDDLEWARE is not true, skip with console log", () => { - webpackConfig.devMiddleware = false; - const fastifyMod = require("../../lib/webpack-dev-fastify"); - expect(fastifyMod.isMockFastifyPlugin).true; - expect(fastifyMod.register).exist; - fastifyMod.register(fakeServer); - expect(hooks.onRequest).not.exist; - }); it("on request hook is attached", () => { const fastifyMod = require("../../lib/webpack-dev-fastify"); - expect(fastifyMod.isMockFastifyPlugin).true; - expect(fastifyMod.register).exist; - fastifyMod.register(fakeServer); + fastifyMod(fakeServer); expect(hooks.onRequest).exist; }); it("calling request hook sets webpackDev", () => { const fastifyMod = require("../../lib/webpack-dev-fastify"); - expect(fastifyMod.isMockFastifyPlugin).true; - expect(fastifyMod.register).exist; - fastifyMod.register(fakeServer); + fastifyMod(fakeServer); expect(hooks.onRequest).exist; - const fakeRequest = { - app: {} - }; + const fakeRequest = { app: {} }; hooks.onRequest(fakeRequest); expect(fakeRequest.app.webpackDev).exist; });