UNPKG

@tapcart/app-studio-utils

Version:

A utility library for Tapcart's App Studio

35 lines 1.58 kB
// Block dependencies - can make dynamic with async imports but this will cause a performance hit import React from "react"; import * as TapcartMobileComponents from "@tapcart/mobile-components"; import jsxRuntime from "react/jsx-runtime"; // This function links the dependencies of the dynamic module import with the config // defined in component-config.js export const createRequires = (dependencies) => (name) => { const _dependencies = dependencies || {}; if (!(name in _dependencies)) { throw new Error(`Could not require '${name}'. '${name}' does not exist in dependencies.`); } // @ts-ignore return _dependencies[name]; }; const dependencies = { react: React, "react/jsx-runtime": jsxRuntime, "@tapcart/mobile-components": TapcartMobileComponents, }; const compilationCache = new Map(); const evalCode = (code, appStudioComponents, scopeOverrides) => { const cached = compilationCache.get(code); if (cached) return cached; const _requires = createRequires(Object.assign(Object.assign({}, dependencies), { "@tapcart/app-studio-components": appStudioComponents })); const exports = {}; const _module = { exports }; // Spread keys and values of scopeOverrides as arguments to the function const func = new Function("require", "module", "exports", ...Object.keys(scopeOverrides), code); func(_requires, _module, exports, ...Object.values(scopeOverrides)); compilationCache.set(code, _module.exports); return _module.exports; }; export default evalCode; //# sourceMappingURL=eval.js.map