From ea011c6ebd4a71dce721e6c3425e088177c6327f Mon Sep 17 00:00:00 2001 From: Nev Date: Mon, 29 Jul 2024 00:08:39 -0700 Subject: [PATCH] [Bug] getInst() function is getting mis-optimized for a worker with rollup #302 --- lib/src/funcs/readArgs.ts | 6 +++++- lib/src/helpers/environment.ts | 20 +++++++++++++++----- lib/src/helpers/perf.ts | 5 ++++- lib/src/iterator/create.ts | 4 +++- lib/src/object/copy.ts | 2 +- package.json | 4 ++-- 6 files changed, 30 insertions(+), 11 deletions(-) diff --git a/lib/src/funcs/readArgs.ts b/lib/src/funcs/readArgs.ts index abc5ee3d..313784b6 100644 --- a/lib/src/funcs/readArgs.ts +++ b/lib/src/funcs/readArgs.ts @@ -91,7 +91,11 @@ export function readArgs(theArgs: ArrayLike | Iterable, start?: n // IArgument is both ArrayLike and an iterable, so prefering to treat it as // an array for performance !_iterSymbol && (_iterSymbol = createCachedValue(hasSymbol() && getKnownSymbol(WellKnownSymbols.iterator))); - let iterFn = _iterSymbol.v && theArgs[_iterSymbol.v]; + let iterFn: any; + if (_iterSymbol.v) { + iterFn = (theArgs as any)[_iterSymbol.v]; + } + if (iterFn) { let values: T[] = []; let from = (start === UNDEF_VALUE || start < 0) ? 0 : start; diff --git a/lib/src/helpers/environment.ts b/lib/src/helpers/environment.ts index 52ab1d04..3a0e1a0c 100644 --- a/lib/src/helpers/environment.ts +++ b/lib/src/helpers/environment.ts @@ -11,6 +11,7 @@ import { _getGlobalValue } from "../internal/global"; import { ILazyValue, _globalLazyTestHooks, _initTestHooks, getLazy } from "./lazy"; import { ICachedValue, createCachedValue } from "./cache"; import { safe } from "./safe"; +import { safeGet } from "./safe_get"; const WINDOW = "window"; @@ -31,7 +32,9 @@ export function _getGlobalInstFn(getFn: (...args: unknown[]) => T, theArgs?: let cachedValue: ICachedValue; return function() { !_globalLazyTestHooks && _initTestHooks(); - (!cachedValue || _globalLazyTestHooks.lzy) && (cachedValue = createCachedValue(safe(getFn, theArgs).v)); + if (!cachedValue || _globalLazyTestHooks.lzy) { + cachedValue = createCachedValue(safe(getFn, theArgs).v); + } return cachedValue.v; } @@ -86,10 +89,11 @@ export function lazySafeGetInst(name: string | number | symbol) : ILazyValue< * @param useCached - [Optional] used for testing to bypass the cached lookup, when `true` this will * cause the cached global to be reset. */ -/*#__NO_SIDE_EFFECTS__*/ export function getGlobal(useCached?: boolean): Window { !_globalLazyTestHooks && _initTestHooks(); - (!_cachedGlobal || useCached === false || _globalLazyTestHooks.lzy) && (_cachedGlobal = createCachedValue(safe(_getGlobalValue).v || NULL_VALUE)); + if (!_cachedGlobal || useCached === false || _globalLazyTestHooks.lzy) { + _cachedGlobal = createCachedValue(safe(_getGlobalValue).v || NULL_VALUE); + } return _cachedGlobal.v; } @@ -117,7 +121,13 @@ export function getGlobal(useCached?: boolean): Window { */ /*#__NO_SIDE_EFFECTS__*/ export function getInst(name: string | number | symbol, useCached?: boolean): T | null { - const gbl = (!_cachedGlobal || useCached === false) ? getGlobal(useCached) : _cachedGlobal.v; + let gbl: any; + if (!_cachedGlobal || useCached === false) { + gbl = getGlobal(useCached); + } else { + gbl = _cachedGlobal.v; + } + if (gbl && gbl[name]) { return gbl[name] as T; } @@ -125,7 +135,7 @@ export function getInst(name: string | number | symbol, useCached?: boolean): // Test workaround, for environments where .window (when global == window) doesn't return the base window if (name === WINDOW) { // tslint:disable-next-line: no-angle-bracket-type-assertion - return getWindow() as T; + return safeGet(() => window, null) as T; } return NULL_VALUE; diff --git a/lib/src/helpers/perf.ts b/lib/src/helpers/perf.ts index 5be24cd3..228858bc 100644 --- a/lib/src/helpers/perf.ts +++ b/lib/src/helpers/perf.ts @@ -39,7 +39,10 @@ export function hasPerformance(): boolean { /*#__NO_SIDE_EFFECTS__*/ export function getPerformance(): Performance { !_globalLazyTestHooks && _initTestHooks(); - (!_perf || _globalLazyTestHooks.lzy) && (_perf = createCachedValue(safe(getInst, ["performance"]).v)); + if (!_perf || _globalLazyTestHooks.lzy) { + _perf = createCachedValue(safe(getInst, ["performance"]).v); + } + return _perf.v; } diff --git a/lib/src/iterator/create.ts b/lib/src/iterator/create.ts index 3b2d6b16..96f5760a 100644 --- a/lib/src/iterator/create.ts +++ b/lib/src/iterator/create.ts @@ -196,7 +196,9 @@ export function createIterator(ctx: CreateIteratorContext): Iterator { } function _next(): IteratorResult { - isDone = isDone || (ctx.n ? ctx.n(arguments) : true); + if (!isDone) { + isDone = (ctx.n ? ctx.n(arguments) : true); + } let result = { done: isDone diff --git a/lib/src/object/copy.ts b/lib/src/object/copy.ts index b3b9c2cb..5b360896 100644 --- a/lib/src/object/copy.ts +++ b/lib/src/object/copy.ts @@ -122,7 +122,7 @@ function _deepCopy(visitMap: _RecursiveVisitMap[], value: T, ctx: _DeepCopyCo if (value && theType === OBJECT) { isPlain = isPlainObject(value); } else { - isPrim = value === NULL_VALUE || isPrimitiveType(theType); + isPrim = (value === NULL_VALUE) || isPrimitiveType(theType); } let details: IObjDeepCopyHandlerDetails = { diff --git a/package.json b/package.json index 75dc1e0b..0f074a0b 100644 --- a/package.json +++ b/package.json @@ -159,8 +159,8 @@ "devDependencies": { "@istanbuljs/nyc-config-typescript": "^1.0.2", "@microsoft/api-extractor": "^7.34.4", - "@nevware21/grunt-eslint-ts": "0.5.0", - "@nevware21/grunt-ts-plugin": "0.5.0", + "@nevware21/grunt-eslint-ts": "^0.5.0", + "@nevware21/grunt-ts-plugin": "^0.5.0", "@rollup/plugin-commonjs": "^26.0.1", "@rollup/plugin-json": "^6.0.0", "@rollup/plugin-node-resolve": "^15.0.1",