const { readFileSync } = require('node:fs'); const { resolve } = require('node:path'); const vm = require('node:vm'); const ts = require('typescript'); function load(relativePath, mocks, globals = {}) { const filename = resolve(__dirname, '../../src', relativePath); const exports = {}; const code = ts.transpileModule(readFileSync(filename, 'utf8'), { compilerOptions: { module: ts.ModuleKind.CommonJS, target: ts.ScriptTarget.ES2022 }, }).outputText; vm.runInNewContext(code, { exports, JSON, console, ...globals, require(name) { if (!(name in mocks)) throw new Error(`Unexpected page-state dependency: ${name}`); return mocks[name]; }, }, { filename }); return exports; } function loadPageState(react, { storage = new Map(), pathname = () => '/test' } = {}) { return load('hooks/usePageState.ts', { react, '@umijs/max': { useLocation: () => ({ pathname: pathname() }) } }, { sessionStorage: { getItem: key => storage.get(key) ?? null, setItem: (key, value) => storage.set(key, value) }, }); } function loadTable(react, pageState) { return load('utils/table.ts', { react, '@/hooks/usePageState': pageState, '@ant-design/pro-components': {} }); } module.exports = { loadPageState, loadTable };