{"version":3,"sources":["jsdelivr-header.js","/npm/rung-cli@1.4.0/src/vm.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,wGCwBgB,kB,QAwBA,0B,QAwBA,4B,QAgBA,gCA9FhB,IAAA,IAAA,QAAA,OACA,UAAA,QAAA,Y,6CACA,OAAA,QAAA,SAMA,UAAA,QAAA,cACA,IAAA,QAAA,QACA,MAAA,QAAA,UACA,QAAA,QAAA,Y,wEASO,IAAM,mCAAe,EAAA,OAAA,QAAM,SAAC,EAAS,GAAV,OAC9B,IAAA,IAAA,GAAO,CAAE,YAAW,IAAI,EADM,IAU3B,SAAS,WAAuB,IAAd,EAAc,UAAA,OAAA,QAAA,IAAA,UAAA,GAAA,UAAA,GAAJ,GACzB,EAAK,IAAA,IAAA,OAAW,CAClB,QAAS,CACL,UAAU,KAOlB,OAHA,EAAG,OAAH,UAAA,YAAuB,cACvB,EAAG,QAAO,EAAA,MAAA,YAAW,GAAU,KAExB,CACV,CAaM,SAAS,aAAa,EAAM,GAAoC,IAA5B,EAA4B,UAAA,OAAA,QAAA,IAAA,UAAA,GAAA,UAAA,GAAlB,GAAI,EAAc,UAAA,OAAA,QAAA,IAAA,UAAA,GAAA,UAAA,GAAJ,GAY/D,OAXiB,EAAA,OAAA,WAAS,WACtB,IAAM,EAAK,SAAS,GAGpB,EAAG,QAAQ,QAAQ,MAAO,EAAA,QAAA,iBAAgB,EAAI,GAG9C,IAAM,EAAS,EAAG,IAAI,EAAW,EAAlB,OACf,OAAO,EAAA,UAAA,UAAQ,EAAA,OAAA,QAAO,EAAQ,UAAW,GAC5C,GATgB,UAAA,OAWV,EACV,CAWM,SAAS,cAAc,EAAW,EAAS,GAC9C,OAAO,aAAa,EAAU,KAAM,EAAU,OAAQ,EAAS,GAC1D,MAAK,EAAA,OAAA,QAAO,GAAI,UACxB,CAaM,SAAS,gBAAgB,EAAW,EAAS,EAAS,GACzD,OAAO,aAAa,EAAU,KAAM,EAAU,OAAQ,EAAS,GAC1D,MAAK,SAAA,GAYF,OAXsB,IAAA,WAAA,SAAY,SAAC,EAAS,GACxC,MAA4B,cAAxB,EAAA,OAAA,MAAK,EAAI,WACF,EAAO,IAAI,UAAU,0DAIzB,EAAI,UAAU,OAAS,EACxB,EAAI,UAAU,KAAK,KAAM,EAAS,GAClC,EAAQ,EAAI,UAAU,KAAK,KAAM,GAC1C,GAGJ,IACA,KAAI,SAAA,GAAA,OAAU,EAAA,IAAA,QAAO,EAAU,KAAM,EAAO,GAAxC,GACZ","file":"/npm/rung-cli@1.4.0/dist/vm.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/rung-cli@1.4.0/dist/vm.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","import { NodeVM, VM } from 'vm2';\nimport Promise, { reject, resolve } from 'bluebird';\nimport {\n    curry,\n    propOr,\n    tryCatch,\n    type\n} from 'ramda';\nimport { compileHTML } from './compiler';\nimport { upsert } from './db';\nimport { translator } from './i18n';\nimport { evaluateModules } from './module';\n\n/**\n * Safely evaluates a piece of JS code as if it were running in the browser.\n *\n * @param {Object} sandbox\n * @param {String} code\n * @return {*}\n */\nexport const runInBrowser = curry((sandbox, code) =>\n    new VM({ sandbox }).run(code));\n\n/**\n * Returns an instance of the Rung virtual machine\n *\n * @author Marcelo Haskell Camargo\n * @param {Object} translator - Map of strings to translate\n * @return {NodeVM}\n */\nexport function createVM(strings = []) {\n    const vm = new NodeVM({\n        require: {\n            external: true\n        }\n    });\n\n    vm.freeze(compileHTML, '__render__');\n    vm.freeze(translator(strings), '_');\n\n    return vm;\n}\n\n/**\n * Runs an app on a virtualized environment and returns its result as\n * native JS data\n *\n * @author Marcelo Haskell Camargo\n * @param {String} name - The unique identifier to track the app\n * @param {String} source - ES6 source to run\n * @param {Object} strings - Object containing the strings to translate\n * @param {String[][]} modules - Map of modules with [filename, source]\n * @return {Promise}\n */\nexport function runInSandbox(name, source, strings = {}, modules = []) {\n    const evaluate = tryCatch(() => {\n        const vm = createVM(strings);\n\n        // Pre-evaluate and inject in vm all necessary modules\n        vm.options.require.mock = evaluateModules(vm, modules);\n\n        // Run with all modules! :)\n        const result = vm.run(source, `${name}.js`);\n        return resolve(propOr(result, 'default', result));\n    }, reject);\n\n    return evaluate();\n}\n\n/**\n * Tries to get the parameter types by running the script to get config.params\n *\n * @author Marcelo Haskell Camargo\n * @param {Object} extension - Must contain name and source\n * @param {Object} strings - Object with strings to translate\n * @param {String[][]} modules - Object with modules name and source\n * @return {Promise}\n */\nexport function getProperties(extension, strings, modules) {\n    return runInSandbox(extension.name, extension.source, strings, modules)\n        .then(propOr({}, 'config'));\n}\n\n/**\n * Runs an app with a context (with parameters) and gets the cards.\n * The result may be a string, a nullable value, an array...\n *\n * @author Marcelo Haskell Camargo\n * @param {Object} extension - Object containing name and source\n * @param {Object} context - Context to pass to the main function\n * @param {Object} strings - Object with strings to translate\n * @param {String[][]} modules - Modules with [filename, source]\n * @return {Promise}\n */\nexport function runAndGetAlerts(extension, context, strings, modules) {\n    return runInSandbox(extension.name, extension.source, strings, modules)\n        .then(app => {\n            const runExtension = ~new Promise((resolve, reject) => {\n                if (type(app.extension) !== 'Function') {\n                    return reject(new TypeError('Expected default exported expression to be a function'));\n                }\n\n                // Async vs sync extension\n                return app.extension.length > 1\n                    ? app.extension.call(null, context, resolve)\n                    : resolve(app.extension.call(null, context));\n            });\n\n            return runExtension();\n        })\n        .tap(result => upsert(extension.name, result.db));\n}\n"]}