Fix mapMangledModule for primitives
This commit is contained in:
parent
fb3ae98419
commit
974953ba01
|
@ -161,16 +161,32 @@ function loadAndCacheShortcut(key: string, val: any, forceLoad: boolean) {
|
||||||
const currentVal = val.getter();
|
const currentVal = val.getter();
|
||||||
if (!currentVal || val.preload === false) return currentVal;
|
if (!currentVal || val.preload === false) return currentVal;
|
||||||
|
|
||||||
let value: any;
|
function unwrapProxy(value: any) {
|
||||||
if (currentVal[SYM_LAZY_GET]) {
|
if (value[SYM_LAZY_GET]) {
|
||||||
value = forceLoad ? currentVal[SYM_LAZY_GET]() : currentVal[SYM_LAZY_CACHED];
|
return forceLoad ? value[SYM_LAZY_GET]() : value[SYM_LAZY_CACHED];
|
||||||
} else if (currentVal[SYM_PROXY_INNER_GET]) {
|
} else if (value[SYM_PROXY_INNER_GET]) {
|
||||||
value = forceLoad ? currentVal[SYM_PROXY_INNER_GET]() : currentVal[SYM_PROXY_INNER_VALUE];
|
return forceLoad ? value[SYM_PROXY_INNER_GET]() : value[SYM_PROXY_INNER_VALUE];
|
||||||
} else {
|
|
||||||
value = currentVal;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (value) define(window.shortcutList, key, { value });
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
const value = unwrapProxy(currentVal);
|
||||||
|
if (typeof value === "object") {
|
||||||
|
const descriptors = Object.getOwnPropertyDescriptors(value);
|
||||||
|
|
||||||
|
for (const propKey in descriptors) {
|
||||||
|
const descriptor = descriptors[propKey];
|
||||||
|
|
||||||
|
if (descriptor.writable === true || descriptor.set != null) {
|
||||||
|
value[propKey] = unwrapProxy(value[propKey]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (value) {
|
||||||
|
define(window.shortcutList, key, { value });
|
||||||
|
}
|
||||||
|
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
|
@ -426,6 +426,8 @@ export function findByFactoryCode<T = any>(...code: CodeFilter | [...CodeFilter,
|
||||||
* Find the module exports of the first module which the factory includes all the given code,
|
* Find the module exports of the first module which the factory includes all the given code,
|
||||||
* then map them into an easily usable object via the specified mappers.
|
* then map them into an easily usable object via the specified mappers.
|
||||||
*
|
*
|
||||||
|
* IMPORTANT: You can destructure the properties of the returned object at top level as long as the property filter does not return a primitive value export.
|
||||||
|
*
|
||||||
* @example
|
* @example
|
||||||
* const Modals = mapMangledModule("headerIdIsManaged:", {
|
* const Modals = mapMangledModule("headerIdIsManaged:", {
|
||||||
* openModal: filters.byCode("headerIdIsManaged:"),
|
* openModal: filters.byCode("headerIdIsManaged:"),
|
||||||
|
@ -444,7 +446,7 @@ export function mapMangledModule<S extends PropertyKey>(code: string | RegExp |
|
||||||
// Wrapper to select whether the parent factory filter or child mapper filter failed when the error is thrown
|
// Wrapper to select whether the parent factory filter or child mapper filter failed when the error is thrown
|
||||||
const errorMsgWrapper = lazyString(() => `Webpack mapMangledModule ${callbackCalled ? "mapper" : "factory"} filter matched no module. Filter: ${printFilter(callbackCalled ? mappers[newName] : factoryFilter)}`);
|
const errorMsgWrapper = lazyString(() => `Webpack mapMangledModule ${callbackCalled ? "mapper" : "factory"} filter matched no module. Filter: ${printFilter(callbackCalled ? mappers[newName] : factoryFilter)}`);
|
||||||
|
|
||||||
const [proxy, setInnerValue] = proxyInner(errorMsgWrapper, "Webpack find with proxy called on a primitive value.");
|
const [proxy, setInnerValue] = proxyInner(errorMsgWrapper, "Webpack find with proxy called on a primitive value. This may happen if you are trying to destructure a mapMangledModule primitive value on top level.");
|
||||||
mapping[newName] = proxy;
|
mapping[newName] = proxy;
|
||||||
setters[newName] = setInnerValue;
|
setters[newName] = setInnerValue;
|
||||||
}
|
}
|
||||||
|
@ -463,6 +465,10 @@ export function mapMangledModule<S extends PropertyKey>(code: string | RegExp |
|
||||||
const filter = mappers[newName];
|
const filter = mappers[newName];
|
||||||
|
|
||||||
if (filter(exportValue)) {
|
if (filter(exportValue)) {
|
||||||
|
if (typeof exportValue !== "object" && typeof exportValue !== "function") {
|
||||||
|
mapping[newName] = exportValue;
|
||||||
|
}
|
||||||
|
|
||||||
setters[newName](exportValue);
|
setters[newName](exportValue);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue