git-off

git off handles large files in git repos
git clone https://noulin.net/git/git-off.git
Log | Files | Refs | README

browser-builder.js (2209B)


      1 #!/usr/bin/env node
      2 
      3 var path = require('path');
      4 
      5 var AWS = require('../');
      6 
      7 var license = [
      8   '// AWS SDK for JavaScript v' + AWS.VERSION,
      9   '// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.',
     10   '// License at https://sdk.amazonaws.com/js/BUNDLE_LICENSE.txt'
     11 ].join('\n') + '\n';
     12 
     13 function minify(code) {
     14   var uglify = require('uglify-js');
     15   var minified = uglify.minify(code, {fromString: true});
     16   return minified.code;
     17 }
     18 
     19 function stripComments(code) {
     20   var lines = code.split(/\r?\n/);
     21   var multiLine = false;
     22   lines = lines.map(function (line) {
     23     var rLine = line;
     24     if (line.match(/^\s*\/\//)) {
     25       rLine = null;
     26     } else if (line.match(/^\s*\/\*/)) {
     27       multiLine = true;
     28       rLine = null;
     29     }
     30 
     31     if (multiLine) {
     32       var multiLineEnd = line.match(/\*\/(.*)/);
     33       if (multiLineEnd) {
     34         multiLine = false;
     35         rLine = multiLineEnd[1];
     36       } else {
     37         rLine = null;
     38       }
     39     }
     40 
     41     return rLine;
     42   }).filter(function(l) { return l !== null; });
     43 
     44   var newCode = lines.join('\n');
     45   newCode = newCode.replace(/\/\*\*[\s\S]+?Copyright\s+.+?Amazon[\s\S]+?\*\//g, '');
     46   return newCode;
     47 }
     48 
     49 function build(options, callback) {
     50   if (arguments.length === 1) {
     51     callback = options;
     52     options = {};
     53   }
     54 
     55   var img = require('insert-module-globals');
     56   img.vars.process = function() { return '{browser:true}'; };
     57 
     58   if (options.services) process.env.AWS_SERVICES = options.services;
     59 
     60   var browserify = require('browserify');
     61   var brOpts = { basedir: path.resolve(__dirname, '..') };
     62   browserify(brOpts).add('./').ignore('domain').bundle(function(err, data) {
     63     if (err) return callback(err);
     64 
     65     var code = (data || '').toString();
     66     if (options.minify) code = minify(code);
     67     else code = stripComments(code);
     68 
     69     code = license + code;
     70     callback(null, code);
     71   });
     72 }
     73 
     74 // run if we called this tool directly
     75 if (require.main === module) {
     76   var opts = {
     77     services: process.argv[2] || process.env.SERVICES,
     78     minify: process.env.MINIFY ? true : false
     79   };
     80   build(opts, function(err, code) {
     81     if (err) console.error(err.message);
     82     else console.log(code);
     83   });
     84 }
     85 
     86 build.license = license;
     87 module.exports = build;