From 072f165f9eb4de8d1723d8f0cab680ca0f46f239 Mon Sep 17 00:00:00 2001 From: undefined Date: Sat, 1 Jan 2022 03:42:41 +0800 Subject: [PATCH] core: easy require resolve hook --- packages/hydrooj/bin/hydrooj.js | 2 ++ packages/hydrooj/package.json | 3 ++- packages/hydrooj/src/handler/api.ts | 3 ++- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/hydrooj/bin/hydrooj.js b/packages/hydrooj/bin/hydrooj.js index 105764c9..dfcb1820 100755 --- a/packages/hydrooj/bin/hydrooj.js +++ b/packages/hydrooj/bin/hydrooj.js @@ -22,6 +22,8 @@ const fs = require('fs-extra'); const argv = require('cac')().parse(); const child = require('child_process'); const esbuild = require('esbuild'); +const { default: hook } = require('require-resolve-hook'); +const { bypass } = hook(/^hydrooj/, (id) => bypass(() => require.resolve(id))); const exec = (...args) => { console.log('Executing: ', args[0], args[1].join(' ')); diff --git a/packages/hydrooj/package.json b/packages/hydrooj/package.json index 3dace9c8..58a601d4 100644 --- a/packages/hydrooj/package.json +++ b/packages/hydrooj/package.json @@ -1,6 +1,6 @@ { "name": "hydrooj", - "version": "3.2.40", + "version": "3.2.41", "bin": "bin/hydrooj.js", "main": "src/loader", "module": "src/loader", @@ -41,6 +41,7 @@ "notp": "^2.0.3", "p-queue": "^7.1.0", "reflect-metadata": "^0.1.13", + "require-resolve-hook": "^1.1.0", "serialize-javascript": "^6.0.0", "sockjs": "^0.3.24", "source-map-support": "^0.5.21", diff --git a/packages/hydrooj/src/handler/api.ts b/packages/hydrooj/src/handler/api.ts index db9d972c..a0d17563 100644 --- a/packages/hydrooj/src/handler/api.ts +++ b/packages/hydrooj/src/handler/api.ts @@ -40,7 +40,8 @@ export function registerResolver( const wrappedFunc = async (arg, ctx, info) => { const res = await func(arg, ctx, info); if (typeof res !== 'object') return res; - if (handlers[value]) Object.assign(res, handlers[value]); + const node = value.includes('!') ? value.split('!')[0] : value; + if (handlers[node]) Object.assign(res, handlers[node]); ctx.parent = res; return res; };