// writes helpers require for vnc.html (they should output app.js) const fs = require('fs'); const path = require('path'); // util.promisify requires Node.js 8.x, so we have our own function promisify(original) { return function promise_wrap() { const args = Array.prototype.slice.call(arguments); return new Promise((resolve, reject) => { original.apply(this, args.concat((err, value) => { if (err) return reject(err); resolve(value); })); }); }; } const writeFile = promisify(fs.writeFile); module.exports = { 'amd': { appWriter: (base_out_path, script_base_path, out_path) => { // setup for requirejs const ui_path = path.relative(base_out_path, path.join(script_base_path, 'app', 'ui')); return writeFile(out_path, `requirejs(["${ui_path}"], (ui) => {});`) .then(() => { console.log(`Please place RequireJS in ${path.join(script_base_path, 'require.js')}`); const require_path = path.relative(base_out_path, path.join(script_base_path, 'require.js')); return [ require_path ]; }); }, noCopyOverride: () => {}, }, 'commonjs': { optionsOverride: (opts) => { // CommonJS supports properly shifting the default export to work as normal opts.plugins.unshift("add-module-exports"); }, appWriter: (base_out_path, script_base_path, out_path) => { const browserify = require('browserify'); const b = browserify(path.join(script_base_path, 'app/ui.js'), {}); return promisify(b.bundle).call(b) .then(buf => writeFile(out_path, buf)) .then(() => []); }, noCopyOverride: () => {}, removeModules: true, }, 'systemjs': { appWriter: (base_out_path, script_base_path, out_path) => { const ui_path = path.relative(base_out_path, path.join(script_base_path, 'app', 'ui.js')); return writeFile(out_path, `SystemJS.import("${ui_path}");`) .then(() => { console.log(`Please place SystemJS in ${path.join(script_base_path, 'system-production.js')}`); // FIXME: Should probably be in the legacy directory const promise_path = path.relative(base_out_path, path.join(base_out_path, 'vendor', 'promise.js')); const systemjs_path = path.relative(base_out_path, path.join(script_base_path, 'system-production.js')); return [ promise_path, systemjs_path ]; }); }, noCopyOverride: (paths, no_copy_files) => { no_copy_files.delete(path.join(paths.vendor, 'promise.js')); }, }, 'umd': { optionsOverride: (opts) => { // umd supports properly shifting the default export to work as normal opts.plugins.unshift("add-module-exports"); }, }, };