UNPKG

lively.vm

Version:

Controlled JavaScript code execution and instrumentation.

98 lines (84 loc) 3.42 kB
/*global require, process*/ var fs = require("fs"); var path = require("path"); var rollup = require('rollup'); var babel = require('rollup-plugin-babel'); var uglify = require("uglify-js"); var targetFile = "dist/lively.vm.js"; var targetFile2 = "dist/lively.vm_standalone.js"; var targetFileMin = "dist/lively.vm_standalone.min.js"; var placeholderSrc = "throw new Error('Not yet read')"; var parts = { "lively.notifications": {source: placeholderSrc, path: require.resolve("lively.notifications/dist/lively.notifications.js")}, "lively.ast": {source: placeholderSrc, path: require.resolve("lively.ast/dist/lively.ast.js")}, "lively.classes": {source: placeholderSrc, path: require.resolve("lively.classes/dist/lively.classes.js")}, "lively.lang": {source: placeholderSrc, path: require.resolve("lively.lang/dist/lively.lang.js")}, "lively.source-transform": {source: placeholderSrc, path: require.resolve("lively.source-transform/dist/lively.source-transform.js")}, "babel-regenerator": {source: placeholderSrc, path: require.resolve("babel-regenerator-runtime/runtime.js")} } if (!fs.existsSync('./dist')) { fs.mkdirSync('./dist'); } Object.keys(parts).forEach(name => parts[name].source = fs.readFileSync(parts[name].path)); // output format - 'amd', 'cjs', 'es6', 'iife', 'umd' module.exports = Promise.resolve() .then(() => rollup.rollup({ entry: "index.js", plugins: [ babel({ exclude: 'node_modules/**', sourceMap: false, "presets": [["es2015", {modules: false}]], "plugins": [ 'transform-async-to-generator', "syntax-object-rest-spread", "transform-object-rest-spread", "external-helpers" ], babelrc: false })] })) .then(bundle => bundle.generate({ format: 'iife', moduleName: 'lively.vm', globals: { "lively.lang": "lively.lang", "lively.ast": "lively.ast", "lively.notifications": "lively.notifications", "lively.classes": "lively.classes", "lively.source-transform": "lively.sourceTransform", "module": "typeof module !== 'undefined' ? module.constructor : {}", "fs": "typeof module !== 'undefined' && typeof module.require === 'function' ? module.require('fs') : {readFile: () => { throw new Error('fs module not available'); }}" }, })) // 3. massage code a little .then(bundled => { var noDeps = `(function() { var GLOBAL = typeof window !== "undefined" ? window : typeof global!=="undefined" ? global : typeof self!=="undefined" ? self : this; ${bundled.code} if (typeof module !== "undefined" && module.exports) module.exports = GLOBAL.lively.vm; })();`; var complete = [ "babel-regenerator", "lively.lang", "lively.notifications", "lively.ast", "lively.classes", "lively.source-transform", ].map(key => { return ` // INLINED ${parts[key].path} ${parts[key].source} // INLINED END ${parts[key].path}`; }).join("\n") + "\n" + noDeps; return {noDeps: noDeps, complete: complete}; }) // 4. inject dependencies .then(sources => { fs.writeFileSync(targetFile, sources.noDeps); fs.writeFileSync(targetFile2, sources.complete); // fs.writeFileSync(targetFileMin, uglify.minify(sources.complete, {fromString: true}).code); }) .catch(err => { console.error(err.stack || err); throw err; })