diff --git a/packages/core-extensions/src/spacepack/webpackModules/spacepack.ts b/packages/core-extensions/src/spacepack/webpackModules/spacepack.ts index f6369cd..3574454 100644 --- a/packages/core-extensions/src/spacepack/webpackModules/spacepack.ts +++ b/packages/core-extensions/src/spacepack/webpackModules/spacepack.ts @@ -160,6 +160,22 @@ export const spacepack: Spacepack = { ) )?.[0]?.[1] ?? null ); + }, + + lazyLoad: (find: string | RegExp | (string | RegExp)[], match: RegExp) => { + const module = Array.isArray(find) + ? spacepack.findByCode(...find) + : spacepack.findByCode(find); + if (module.length < 1) return Promise.reject("Find failed"); + + const findId = module[0].id; + const findCode = webpackRequire.m[findId].toString().replace(/\n/g, ""); + + const matchResult = findCode.match(match); + if (!matchResult) return Promise.reject("Match failed"); + + const matchId = matchResult[1]; + return webpackRequire.el(matchId).then(() => webpackRequire(matchId)); } }; diff --git a/packages/types/src/coreExtensions.ts b/packages/types/src/coreExtensions.ts index a8ab1bb..3022613 100644 --- a/packages/types/src/coreExtensions.ts +++ b/packages/types/src/coreExtensions.ts @@ -23,6 +23,10 @@ export type Spacepack = { ...strings: (string | RegExp)[] // eslint-disable-next-line @typescript-eslint/ban-types ) => Function | null; + lazyLoad: ( + find: string | RegExp | (string | RegExp)[], + match: RegExp + ) => Promise; }; export type NoticeProps = {