From 085ba5b1228410735f157e8fd83490d52597123f Mon Sep 17 00:00:00 2001 From: Kuitos Date: Fri, 27 Mar 2020 12:40:04 +0800 Subject: [PATCH] :art: rename hijackers to sandbox patchers (#344) --- src/hijackers/index.ts | 19 ------------------- src/sandbox/index.ts | 6 +++--- .../patchers}/dynamicHeadAppend.ts | 6 +++--- .../patchers}/historyListener.ts | 2 +- src/sandbox/patchers/index.ts | 19 +++++++++++++++++++ src/{hijackers => sandbox/patchers}/timer.ts | 4 ++-- .../patchers}/windowListener.ts | 2 +- src/sandbox/snapshotSandbox.ts | 4 +++- 8 files changed, 32 insertions(+), 30 deletions(-) delete mode 100644 src/hijackers/index.ts rename src/{hijackers => sandbox/patchers}/dynamicHeadAppend.ts (98%) rename src/{hijackers => sandbox/patchers}/historyListener.ts (98%) create mode 100644 src/sandbox/patchers/index.ts rename src/{hijackers => sandbox/patchers}/timer.ts (93%) rename src/{hijackers => sandbox/patchers}/windowListener.ts (97%) diff --git a/src/hijackers/index.ts b/src/hijackers/index.ts deleted file mode 100644 index da9dd97a1..000000000 --- a/src/hijackers/index.ts +++ /dev/null @@ -1,19 +0,0 @@ -/** - * @author Kuitos - * @since 2019-04-11 - */ - -import { noop } from 'lodash'; -import { Freer } from '../interfaces'; -import hijackDynamicAppend from './dynamicHeadAppend'; -import hijackHistoryListener from './historyListener'; -import hijackTimer from './timer'; -import hijackWindowListener from './windowListener'; - -export function hijackAtMounting(appName: string, proxy: Window): Freer[] { - return [hijackTimer(), hijackWindowListener(), hijackHistoryListener(), hijackDynamicAppend(appName, proxy)]; -} - -export function hijackAtBootstrapping(appName: string, proxy: Window): Freer[] { - return [process.env.NODE_ENV === 'development' ? hijackDynamicAppend(appName, proxy, false) : () => () => noop]; -} diff --git a/src/sandbox/index.ts b/src/sandbox/index.ts index c5e0b8f19..1d5762231 100644 --- a/src/sandbox/index.ts +++ b/src/sandbox/index.ts @@ -2,7 +2,7 @@ * @author Kuitos * @since 2019-04-11 */ -import { hijackAtBootstrapping, hijackAtMounting } from '../hijackers'; +import { patchAtBootstrapping, patchAtMounting } from './patchers'; import { Freer, Rebuilder, SandBox } from '../interfaces'; import ProxySandbox from './proxySandbox'; import SnapshotSandbox from './snapshotSandbox'; @@ -36,7 +36,7 @@ export function genSandbox(appName: string) { } // some side effect could be be invoked while bootstrapping, such as dynamic stylesheet injection with style-loader, especially during the development phase - const bootstrappingFreers = hijackAtBootstrapping(appName, sandbox.proxy); + const bootstrappingFreers = patchAtBootstrapping(appName, sandbox.proxy); return { sandbox: sandbox.proxy, @@ -62,7 +62,7 @@ export function genSandbox(appName: string) { /* ------------------------------------------ 2. 开启全局变量补丁 ------------------------------------------*/ // render 沙箱启动时开始劫持各类全局监听,尽量不要在应用初始化阶段有 事件监听/定时器 等副作用 - mountingFreers = hijackAtMounting(appName, sandbox.proxy); + mountingFreers = patchAtMounting(appName, sandbox.proxy); /* ------------------------------------------ 3. 重置一些初始化时的副作用 ------------------------------------------*/ // 存在 rebuilder 则表明有些副作用需要重建 diff --git a/src/hijackers/dynamicHeadAppend.ts b/src/sandbox/patchers/dynamicHeadAppend.ts similarity index 98% rename from src/hijackers/dynamicHeadAppend.ts rename to src/sandbox/patchers/dynamicHeadAppend.ts index 545ce004d..e15b40cb0 100644 --- a/src/hijackers/dynamicHeadAppend.ts +++ b/src/sandbox/patchers/dynamicHeadAppend.ts @@ -5,8 +5,8 @@ import { execScripts } from 'import-html-entry'; import { isFunction } from 'lodash'; import { checkActivityFunctions } from 'single-spa'; -import { Freer } from '../interfaces'; -import { getWrapperId } from '../utils'; +import { Freer } from '../../interfaces'; +import { getWrapperId } from '../../utils'; const styledComponentSymbol = Symbol('styled-component'); @@ -60,7 +60,7 @@ function getWrapperElement(appName: string) { * @param proxy * @param mounting */ -export default function hijack(appName: string, proxy: Window, mounting = true): Freer { +export default function patch(appName: string, proxy: Window, mounting = true): Freer { let dynamicStyleSheetElements: Array = []; HTMLHeadElement.prototype.appendChild = function appendChild(this: HTMLHeadElement, newChild: T) { diff --git a/src/hijackers/historyListener.ts b/src/sandbox/patchers/historyListener.ts similarity index 98% rename from src/hijackers/historyListener.ts rename to src/sandbox/patchers/historyListener.ts index 7cbb19915..bf6a717c0 100644 --- a/src/hijackers/historyListener.ts +++ b/src/sandbox/patchers/historyListener.ts @@ -5,7 +5,7 @@ import { isFunction, noop } from 'lodash'; -export default function hijack() { +export default function patch() { // FIXME umi unmount feature request // eslint-disable-next-line @typescript-eslint/no-unused-vars let rawHistoryListen = (_: any) => noop; diff --git a/src/sandbox/patchers/index.ts b/src/sandbox/patchers/index.ts new file mode 100644 index 000000000..ce08b93a5 --- /dev/null +++ b/src/sandbox/patchers/index.ts @@ -0,0 +1,19 @@ +/** + * @author Kuitos + * @since 2019-04-11 + */ + +import { noop } from 'lodash'; +import { Freer } from '../../interfaces'; +import patchDynamicAppend from './dynamicHeadAppend'; +import patchHistoryListener from './historyListener'; +import patchTimer from './timer'; +import patchWindowListener from './windowListener'; + +export function patchAtMounting(appName: string, proxy: Window): Freer[] { + return [patchTimer(), patchWindowListener(), patchHistoryListener(), patchDynamicAppend(appName, proxy)]; +} + +export function patchAtBootstrapping(appName: string, proxy: Window): Freer[] { + return [process.env.NODE_ENV === 'development' ? patchDynamicAppend(appName, proxy, false) : () => () => noop]; +} diff --git a/src/hijackers/timer.ts b/src/sandbox/patchers/timer.ts similarity index 93% rename from src/hijackers/timer.ts rename to src/sandbox/patchers/timer.ts index 6f7beaf6c..42ff90381 100644 --- a/src/hijackers/timer.ts +++ b/src/sandbox/patchers/timer.ts @@ -4,12 +4,12 @@ */ import { noop } from 'lodash'; -import { sleep } from '../utils'; +import { sleep } from '../../utils'; const rawWindowInterval = window.setInterval; const rawWindowTimeout = window.setTimeout; -export default function hijack() { +export default function patch() { const timerIds: number[] = []; const intervalIds: number[] = []; diff --git a/src/hijackers/windowListener.ts b/src/sandbox/patchers/windowListener.ts similarity index 97% rename from src/hijackers/windowListener.ts rename to src/sandbox/patchers/windowListener.ts index 170c6d8a6..1de8641a9 100644 --- a/src/hijackers/windowListener.ts +++ b/src/sandbox/patchers/windowListener.ts @@ -8,7 +8,7 @@ import { noop } from 'lodash'; const rawAddEventListener = window.addEventListener; const rawRemoveEventListener = window.removeEventListener; -export default function hijack() { +export default function patch() { const listenerMap = new Map(); window.addEventListener = ( diff --git a/src/sandbox/snapshotSandbox.ts b/src/sandbox/snapshotSandbox.ts index cd1559309..da2760858 100644 --- a/src/sandbox/snapshotSandbox.ts +++ b/src/sandbox/snapshotSandbox.ts @@ -7,7 +7,9 @@ import { SandBox } from '../interfaces'; function iter(obj: object, callbackFn: (prop: any) => void) { // eslint-disable-next-line guard-for-in, no-restricted-syntax for (const prop in obj) { - callbackFn(prop); + if (obj.hasOwnProperty(prop)) { + callbackFn(prop); + } } }