var fs = require('fs'); var basename = process.argv[2].split('_')[0]; // e.g. template_crx -> template var filename = `tmp/${process.argv[2]}.js`; // If it's not a collection of files in src/, it's a single file in src/main/ var sources = (fs.readdirSync('src').indexOf(basename) >= 0) ? fs.readdirSync(`src/${basename}`) : [`${basename}.coffee`]; // Extract variables to be made global from source file list // e.g. ImageExpand from src/Images/ImageExpand.coffee // but not QR.post or eventPage var names = []; for (var f of sources) { var m = f.match(/^([$A-Z][$\w]*)\.coffee$/); if (m) names.push(m[1]); } var script = fs.readFileSync(filename, 'utf8').replace(/\r\n/g, '\n'); var replaced = 0; script = script.replace( // matches declaration at the start of the function, not including helper function assignments /^( *var )(.*)(,\n *|;\n)/m, function(declaration, v, n, e) { replaced++; var n0 = names.sort().join(', '); if (n0 !== n) throw new Error(`${filename}: expected variables (${n0}) found (${n})`); return (e[0] === ',') ? v : ''; } ); if (replaced !== 1) { throw new Error(`${filename}: no declaration found`); } fs.writeFileSync(filename, script);