From b619a26a80827718f39335e64b9895387d9c982c Mon Sep 17 00:00:00 2001 From: Rory Mulligan Date: Fri, 28 Apr 2017 11:08:39 -0400 Subject: [PATCH] Undefining a module no longer undefines special modules, issue #128 --- src/loader.ts | 4 ++++ tests/unit/require.ts | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/src/loader.ts b/src/loader.ts index 1dbe652..7f0dd63 100644 --- a/src/loader.ts +++ b/src/loader.ts @@ -1099,9 +1099,13 @@ declare const Packages: {} | undefined; requireModule.undef = function (id: string, recursive?: boolean): void { const module: Module | undefined = modules[id]; const undefDeps = function (mod: Module): void { + if (mod === commonJsRequireModule || mod === commonJsModuleModule || mod === commonJsExportsModule) { + return; + } if (mod.deps) { forEach(mod.deps, undefDeps); } + modules[mod.mid] = undefined; }; if (module) { diff --git a/tests/unit/require.ts b/tests/unit/require.ts index e72e53a..8aef7a0 100644 --- a/tests/unit/require.ts +++ b/tests/unit/require.ts @@ -709,6 +709,38 @@ registerSuite({ } }, + 'important modules are not undefined'(this: any) { + let dfd = this.async(DEFAULT_TIMEOUT); + + global.define('undef-module', ['require', 'module', 'exports'], (require: any, module: any, exports: any) => { + return { + require, + module, + exports + }; + }); + + global.require(['undef-module'], function () { + global.require.undef('undef-module', true); + + global.define('undef-module-2', ['require', 'module', 'exports'], (require: any, module: any, exports: any) => { + return { + require, + module, + exports + }; + }); + + assert.doesNotThrow(() => { + global.require(['undef-module-2'], dfd.callback((defs: any) => { + assert.isTrue(defs.require !== undefined); + assert.isTrue(defs.module !== undefined); + assert.isTrue(defs.exports !== undefined); + })); + }); + }); + }, + 'cache injected module is properly undefined'(this: any) { let dfd = this.async(DEFAULT_TIMEOUT);