this repo has no description

contextMenu: latest swc fixes

Changed files
+40 -6
packages
core-extensions
src
contextMenu
+4 -1
packages/core-extensions/src/contextMenu/index.tsx
···
export const webpackModules: Record<string, ExtensionWebpackModule> = {
contextMenu: {
-
dependencies: [{ ext: "spacepack", id: "spacepack" }, "MenuGroup:"]
},
evilMenu: {
dependencies: [
···
export const webpackModules: Record<string, ExtensionWebpackModule> = {
contextMenu: {
+
dependencies: [
+
{ ext: "spacepack", id: "spacepack" },
+
"Menu API only allows Items and groups of Items as children."
+
]
},
evilMenu: {
dependencies: [
+31 -4
packages/core-extensions/src/contextMenu/webpackModules/contextMenu.ts
···
return el;
}
-
const MenuElements = spacepack.findByCode("return null", "MenuGroup:")[0]
-
.exports;
-
module.exports = {
-
...MenuElements,
addItem,
_patchMenu,
_saveProps
};
···
return el;
}
module.exports = {
addItem,
_patchMenu,
_saveProps
};
+
+
// Unmangle Menu elements
+
const code =
+
spacepack.require.m[
+
spacepack.findByCode(
+
"Menu API only allows Items and groups of Items as children."
+
)[0].id
+
].toString();
+
+
let MangledMenu;
+
+
const typeRegex = /if\(.\.type===(.)\.(.+?)\).+?type:"(.+?)"/g;
+
const typeMap: Record<string, string | undefined> = {
+
checkbox: "MenuCheckboxItem",
+
control: "MenuControlItem",
+
groupstart: "MenuGroup",
+
customitem: "MenuItem",
+
radio: "MenuRadioItem",
+
separator: "MenuSeparator"
+
};
+
+
for (const [, modIdent, mangled, type] of code.matchAll(typeRegex)) {
+
if (!MangledMenu) {
+
const modId = code.match(new RegExp(`${modIdent}=.\\((\\d+?)\\)`))![1];
+
MangledMenu = spacepack.require(modId);
+
}
+
+
const prop = typeMap[type];
+
if (!prop) continue;
+
module.exports[prop] = MangledMenu[mangled];
+
}
+5 -1
packages/core-extensions/src/contextMenu/webpackModules/evilMenu.ts
···
);
const exp: any = {};
mod({}, exp, require);
module.exports = (el: any) => {
-
return exp.Menu({
children: el,
__contextMenu_evilMenu: true
});
···
);
const exp: any = {};
mod({}, exp, require);
+
const Menu = spacepack.findFunctionByStrings(
+
exp,
+
"Menu API only allows Items and groups of Items as children."
+
)!;
module.exports = (el: any) => {
+
return Menu({
children: el,
__contextMenu_evilMenu: true
});