From 401a669aca7c30f80a43963e0c9dd2fa026b266c Mon Sep 17 00:00:00 2001 From: coderaiser Date: Fri, 22 Mar 2024 16:57:29 +0200 Subject: [PATCH] feature: user-menu: get rid of mock-require --- package.json | 1 + server/user-menu.js | 11 ++++++++--- server/user-menu.spec.js | 22 ++++------------------ 3 files changed, 13 insertions(+), 21 deletions(-) diff --git a/package.json b/package.json index ed6fefa0ac..be4840c60d 100644 --- a/package.json +++ b/package.json @@ -188,6 +188,7 @@ "memfs": "^4.2.0", "minor": "^1.2.2", "mock-require": "^3.0.1", + "montag": "^1.2.1", "morgan": "^1.6.1", "multi-rename": "^2.0.0", "nodemon": "^3.0.1", diff --git a/server/user-menu.js b/server/user-menu.js index 2beb80790b..eb7f210f09 100644 --- a/server/user-menu.js +++ b/server/user-menu.js @@ -1,7 +1,8 @@ 'use strict'; +const once = require('once'); const {homedir} = require('node:os'); -const {readFile} = require('node:fs/promises'); +const {readFile: _readFile, readFile} = require('node:fs/promises'); const {join} = require('node:path'); @@ -13,13 +14,14 @@ const {codeframe} = require('putout'); const putout = threadIt(require.resolve('putout')); threadIt.init(); + // warm up worker cache transpile(''); const URL = '/api/v1/user-menu'; const DEFAULT_MENU_PATH = join(__dirname, '../static/user-menu.js'); -module.exports = currify(async ({menuName}, req, res, next) => { +module.exports = currify(async ({menuName, readFile = _readFile}, req, res, next) => { if (req.url.indexOf(URL)) return next(); @@ -30,12 +32,13 @@ module.exports = currify(async ({menuName}, req, res, next) => { req, res, menuName, + readFile, }); next(); }); -async function onGET({req, res, menuName}) { +async function onGET({req, res, menuName, readFile}) { const {dir} = req.query; const url = req.url.replace(URL, ''); @@ -65,6 +68,7 @@ async function onGET({req, res, menuName}) { if (e) return sendDefaultMenu(res); + debugger; const [parseError, result] = await transpile(source); if (parseError) @@ -108,3 +112,4 @@ async function transpile(source) { ], }); } + diff --git a/server/user-menu.spec.js b/server/user-menu.spec.js index d1718d45c9..ea60ba3004 100644 --- a/server/user-menu.spec.js +++ b/server/user-menu.spec.js @@ -7,11 +7,9 @@ const {test, stub} = require('supertape'); const serveOnce = require('serve-once'); const threadIt = require('thread-it'); -const {reRequire} = require('mock-require'); const userMenu = require('./user-menu'); const {request} = serveOnce(userMenu); - const {readFileSync} = fs; const userMenuPath = join(__dirname, '..', '.cloudcmd.menu.js'); @@ -37,51 +35,39 @@ test('cloudcmd: user menu', async (t) => { options, }); - threadIt.terminate(); - t.equal(userMenuFile, body); t.end(); }); test('cloudcmd: user menu: io.mv', async (t) => { + const readFile = stub().returns(fixtureMove); const options = { menuName: '.cloudcmd.menu.js', + readFile, }; - const {readFile} = fs.promises; - - fs.promises.readFile = stub().returns(fixtureMove); - const userMenu = reRequire('./user-menu'); const {request} = serveOnce(userMenu); - const {body} = await request.get(`/api/v1/user-menu?dir=${__dirname}`, { options, }); - threadIt.terminate(); - fs.promises.readFile = readFile; - t.equal(body, fixtureMoveFix); t.end(); }); test('cloudcmd: user menu: io.cp', async (t) => { + const readFile = stub().returns(fixtureCopy); const options = { menuName: '.cloudcmd.menu.js', + readFile, }; - const {readFile} = fs.promises; - - fs.promises.readFile = stub().returns(fixtureCopy); - const userMenu = reRequire('./user-menu'); const {request} = serveOnce(userMenu); - const {body} = await request.get(`/api/v1/user-menu?dir=${__dirname}`, { options, }); threadIt.terminate(); - fs.promises.readFile = readFile; t.equal(body, fixtureCopyFix); t.end();