Skip to content

Commit 44d6f48

Browse files
Tira Odhnermichael-ciniawsky
authored andcommitted
feat: allow loading nested objects onto existing libraries (#45)
1 parent 3c8b7f2 commit 44d6f48

File tree

2 files changed

+64
-24
lines changed

2 files changed

+64
-24
lines changed

index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ module.exports = function(content, sourceMap) {
3232
if(previous.length === 0) {
3333
imports.push("var " + expr + " = (" + current + " || {});");
3434
} else if(index < names.length-1) {
35-
imports.push(expr + " = {};");
35+
imports.push(expr + " = " + expr + " || {};");
3636
} else {
3737
imports.push(expr + " = " + value + ";");
3838
}

test/test.js

Lines changed: 63 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,71 @@
11
var should = require("should");
22
var loader = require("../");
33

4-
var HEADER = "/*** IMPORTS FROM imports-loader ***/\n";
5-
64
describe("loader", function() {
7-
it("should import nested objects", function() {
8-
loader.call({
9-
query: "?abc.def.ghi=>1"
10-
}, "").should.be.eql(HEADER +
11-
"var abc = (abc || {});\n" +
12-
"abc.def = {};\n" +
13-
"abc.def.ghi = 1;\n\n\n"
14-
);
5+
it("sets a header so the developer can see where imports-loader is being applied", function(){
6+
var generatedCode = loader.call({ query: "?someVariable=>1" });
7+
generatedCode.indexOf("/*** IMPORTS FROM imports-loader ***/\n").should.be.eql(0);
8+
});
9+
10+
it("can set a variable", function(){
11+
var generatedCode = loader.call({ query: "?someVariable=>1" });
12+
eval(generatedCode);;
13+
14+
someVariable.should.be.eql(1);
15+
});
16+
17+
it("can set multiple values", function(){
18+
var generatedCode = loader.call({ query: "?someVariable=>1,anotherVariable=>2" });
19+
eval(generatedCode);;
20+
21+
someVariable.should.be.eql(1);
22+
anotherVariable.should.be.eql(2);
23+
});
24+
25+
it("can set a nested variable", function(){
26+
var generatedCode = loader.call({ query: "?someVariable.someProperty.someSubProperty=>1" });
27+
eval(generatedCode);;
28+
29+
someVariable.someProperty.someSubProperty.should.be.eql(1);
30+
});
31+
32+
describe("loading properties onto an existing variable", function(){
33+
it("preserves the other original properties", function(){
34+
var generatedCode = loader.call({ query: "?someVariable.someProperty=>1" });
35+
var someVariable = { existingProperty: 123 }
36+
37+
eval(generatedCode);;
38+
39+
someVariable.existingProperty.should.be.eql(123);
40+
});
41+
42+
it("sets the new properties", function(){
43+
var generatedCode = loader.call({ query: "?someVariable.someProperty=>1" });
44+
var someVariable = { existingProperty: 123 }
45+
46+
eval(generatedCode);;
47+
48+
someVariable.someProperty.should.be.eql(1);
49+
});
1550
});
1651

17-
it("should import multiple nested objects", function() {
18-
loader.call({
19-
query: "?abc.def.ghi=>1,foo.bar.baz=>2"
20-
}, "").should.be.eql(HEADER +
21-
// First import
22-
"var abc = (abc || {});\n" +
23-
"abc.def = {};\n" +
24-
"abc.def.ghi = 1;\n" +
25-
// Second import
26-
"var foo = (foo || {});\n" +
27-
"foo.bar = {};\n" +
28-
"foo.bar.baz = 2;\n\n\n"
29-
);
52+
describe("loading sub-properties onto an existing property", function(){
53+
it("preserves the other original properties", function(){
54+
var generatedCode = loader.call({ query: "?someVariable.existingProperty.someSubProperty=>1" });
55+
var someVariable = { existingProperty: { existingSubProperty: 123 } }
56+
57+
eval(generatedCode);;
58+
59+
someVariable.existingProperty.existingSubProperty.should.be.eql(123);
60+
});
61+
62+
it("sets the new sub-properties", function(){
63+
var generatedCode = loader.call({ query: "?someVariable.existingProperty.someSubProperty=>1" });
64+
var someVariable = { existingProperty: { existingSubProperty: 123 } }
65+
66+
eval(generatedCode);;
67+
68+
someVariable.existingProperty.someSubProperty.should.be.eql(1);
69+
});
3070
});
3171
});

0 commit comments

Comments
 (0)