From c3d856e139d2882950e295537e6ff2e407d74919 Mon Sep 17 00:00:00 2001 From: Leo Horie Date: Wed, 16 Nov 2016 00:09:41 -0500 Subject: [PATCH] allow `a["b"] = require(...)` in bundler --- bundler/bundle.js | 2 +- bundler/tests/test-bundler.js | 26 ++++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/bundler/bundle.js b/bundler/bundle.js index 284566af..84574a6d 100644 --- a/bundler/bundle.js +++ b/bundler/bundle.js @@ -20,7 +20,7 @@ function run(input, output) { var modules = {} var bindings = {} var declaration = /^\s*(?:var|let|const|function)[\t ]+([\w_$]+)/gm - var include = /(?:((?:var|let|const|,|)[\t ]*)([\w_$\.]+)(\s*=\s*))?require\(([^\)]+)\)(\s*[`\.\(\[])?/gm + var include = /(?:((?:var|let|const|,|)[\t ]*)([\w_$\.\[\]"'`]+)(\s*=\s*))?require\(([^\)]+)\)(\s*[`\.\(\[])?/gm var uuid = 0 var process = function(filepath, data) { data.replace(declaration, function(match, binding) {bindings[binding] = 0}) diff --git a/bundler/tests/test-bundler.js b/bundler/tests/test-bundler.js index 04a64b83..80763c00 100644 --- a/bundler/tests/test-bundler.js +++ b/bundler/tests/test-bundler.js @@ -208,6 +208,32 @@ o.spec("bundler", function() { remove("c.js") remove("out.js") }) + o("works if assigned to property", function() { + write("a.js", `var x = {}\nx.b = require("./b")\nx.c = require("./c")`) + write("b.js", `var bb = 1\nmodule.exports = bb`) + write("c.js", `var cc = 2\nmodule.exports = cc`) + bundle(ns + "a.js", ns + "out.js") + + o(read("out.js")).equals(`new function() {\nvar x = {}\var bb = 1\nnx.b = bb\nvar cc = 1\nx.c = cc\n}`) + + remove("a.js") + remove("b.js") + remove("c.js") + remove("out.js") + }) + o("works if assigned to property", function() { + write("a.js", `var x = {}\nx["b"] = require("./b")\nx["c"] = require("./c")`) + write("b.js", `var bb = 1\nmodule.exports = bb`) + write("c.js", `var cc = 2\nmodule.exports = cc`) + bundle(ns + "a.js", ns + "out.js") + + o(read("out.js")).equals(`new function() {\nvar x = {}\nvar bb = 1\nx["b"] = bb\nvar cc = 2\nx["c"] = cc\n}`) + + remove("a.js") + remove("b.js") + remove("c.js") + remove("out.js") + }) o("works if collision", function() { write("a.js", `var b = require("./b")`) write("b.js", `var b = 1\nmodule.exports = 2`)