Skip to content

Commit

Permalink
feat!: register use Unique key, restore all register
Browse files Browse the repository at this point in the history
BREAKING CHANGE: register use Unique key, restore all register
  • Loading branch information
liangskyli committed May 2, 2023
1 parent de0d831 commit 359fe62
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 18 deletions.
4 changes: 4 additions & 0 deletions packages/mock/src/http/server/middleware.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,10 @@ const getMiddleware = async (
return { middleware, middlewareWatcher: undefined };
}

const registerKey = 'mock-getMiddleware';

register.register({
key: registerKey,
hookMatcher: (filename) => {
return filename.startsWith(join(cwd, './mock'));
},
Expand Down Expand Up @@ -56,6 +59,7 @@ const getMiddleware = async (
});
if (process.env.WATCH_FILES === 'false' || !watch) {
await middlewareWatcher?.close?.();
register.unregister(registerKey);
}
killProcess(middlewareWatcher);
return { middleware, middlewareWatcher };
Expand Down
6 changes: 3 additions & 3 deletions packages/utils/src/config.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import colors from 'colors';
import { register, restore } from './register';
import { register } from './register';

const getConfig = (configFile: string) => {
let config: any = null;
register({});
const { unregister } = register({ key: 'utils-getConfig' });
try {
config = require(configFile).default;
} catch (err: any) {
Expand All @@ -13,7 +13,7 @@ const getConfig = (configFile: string) => {
throw err;
}
} finally {
restore();
unregister();
}
return config;
};
Expand Down
56 changes: 41 additions & 15 deletions packages/utils/src/register.ts
Original file line number Diff line number Diff line change
@@ -1,20 +1,46 @@
import { register as esbuildRegister } from 'esbuild-register/dist/node';

let registered = false;
let revertList: { key: string; revert: () => void }[] = [];

let revert: () => void = () => {};

export function register(opts: Parameters<typeof esbuildRegister>[0]) {
if (!registered) {
revert = esbuildRegister({
target: `node${process.version.slice(1)}`,
...opts,
}).unregister;
registered = true;
export const register = (
opts: Parameters<typeof esbuildRegister>[0] & { key: string },
) => {
const { key, ...otherOpts } = opts;
if (revertList.filter((item) => item.key === key).length > 0) {
throw Error('register key have exist!');
}
}
const revert = esbuildRegister({
target: `node${process.version.slice(1)}`,
...otherOpts,
}).unregister;
revertList.push({ key, revert });

const unregister = () => {
revert();
revertList = revertList.filter((item) => item.key !== key);
};

return {
unregister,
};
};

export const restore = () => {
revertList.forEach(({ revert }) => {
revert();
});
revertList = [];
};

export function restore() {
revert();
registered = false;
}
export const unregister = (key: string) => {
revertList = revertList
.map((item) => {
if (item.key === key) {
item.revert();
return true;
} else {
return item;
}
})
.filter((item) => item !== true) as unknown as typeof revertList;
};

0 comments on commit 359fe62

Please sign in to comment.