| "use strict"; |
| module.exports = bundle; |
| |
| var fs = require("fs"), |
| path = require("path"); |
| |
| var browserify = require("browserify"); |
| |
| var header = require("gulp-header"); |
| var gulpif = require("gulp-if"); |
| var sourcemaps = require("gulp-sourcemaps"); |
| var uglify = require("gulp-uglify"); |
| |
| var buffer = require("vinyl-buffer"); |
| var vinylfs = require("vinyl-fs"); |
| var source = require("vinyl-source-stream"); |
| |
| var pkg = require(path.join(__dirname, "..", "package.json")); |
| |
| /*eslint-disable no-template-curly-in-string*/ |
| var license = [ |
| "/*!", |
| " * protobuf.js v${version} (c) 2016, daniel wirtz", |
| " * compiled ${date}", |
| " * licensed under the bsd-3-clause license", |
| " * see: https://github.com/dcodeio/protobuf.js for details", |
| " */" |
| ].join("\n") + "\n"; |
| /*eslint-enable no-template-curly-in-string*/ |
| |
| var prelude = fs.readFileSync(require.resolve("../lib/prelude.js")).toString("utf8"); |
| |
| /** |
| * Bundles the library. |
| * @param {Object} options Bundler options |
| * @param {string} options.entry Entry file |
| * @param {string} options.target Target directory |
| * @param {boolean} [options.compress=false] Whether to minify or not |
| * @param {string[]} [options.exclude] Excluded source files |
| * @returns {undefined} |
| */ |
| function bundle(options) { |
| if (!options || !options.entry || !options.target) |
| throw TypeError("missing options"); |
| var bundler = browserify({ |
| entries: options.entry, |
| insertGlobalVars: false, |
| detectGlobals: false, |
| debug: true, |
| prelude: prelude, |
| preludePath: "./lib/prelude.js" |
| }) |
| .external("long"); |
| if (options.exclude) |
| options.exclude.forEach(bundler.exclude, bundler); |
| return bundler |
| .plugin(require("browserify-wrap"), { |
| // undefined var and global strict-mode for uglify |
| prefix: "(function(undefined){\"use strict\";", |
| suffix: "})();" |
| }) |
| .plugin(require("bundle-collapser/plugin")) |
| .bundle() |
| .pipe(source(options.compress ? "protobuf.min.js" : "protobuf.js")) |
| .pipe(buffer()) |
| .pipe(sourcemaps.init({ loadMaps: true })) |
| .pipe( |
| gulpif(options.compress, uglify({ |
| mangle: { |
| eval: true, |
| properties: { |
| regex: /^_/ |
| } |
| }, |
| compress: { |
| keep_fargs: false, |
| unsafe: true |
| }, |
| output: { |
| max_line_len: 0x7fffffff |
| } |
| })) |
| ) |
| .pipe(header(license, { |
| date: (new Date()).toUTCString().replace("GMT", "UTC").toLowerCase(), |
| version: pkg.version |
| })) |
| .pipe(sourcemaps.write(".", { sourceRoot: "" })) |
| .pipe(vinylfs.dest(options.target)) |
| .on("log", console.log) |
| .on("error", console.error); |
| } |