diff --git a/packages/klay-kiln/lib/kiln.js b/packages/klay-kiln/lib/kiln.js index 4230a285..ea870dbd 100644 --- a/packages/klay-kiln/lib/kiln.js +++ b/packages/klay-kiln/lib/kiln.js @@ -27,20 +27,22 @@ module.exports = function () { 'extension determineDependencies must be a function'); } - function createDeps(listOfDependencies, modelName) { + function createDeps(listOfDependencies, modelName, kiln) { return _(listOfDependencies). map(function (item) { var parts = item.split(':'); var model = parts.length > 1 ? parts[0] : modelName; var extension = parts.length > 1 ? parts[1] : parts[0]; - return {name: item, value: bake(model, extension)}; + return {name: item, value: bake.call(kiln, model, extension)}; }). keyBy('name'). mapValues('value'). + assign({kiln}). value(); } function bake(modelName, extension, options) { + var kilnRef = this; var modelDef = getModelDefOrThrow(modelName); if (typeof extension === 'string') { var extensionName = extension; @@ -62,7 +64,7 @@ module.exports = function () { var determineDeps = _.get(extension, 'determineDependencies', _.noop); var dependsOn = determineDeps(modelDef, options) || []; - var dependencies = createDeps(dependsOn, modelName); + var dependencies = createDeps(dependsOn, modelName, kilnRef); var result = extension.bake(modelDef, options, dependencies); var prebakedOfModel = prebaked[modelName] || {}; @@ -110,13 +112,13 @@ module.exports = function () { return _(getExtensions(modelDef)). map(item => _.assign({ name: item.extension.name, - result: bake(modelName, item.extension, item.options), + result: bake.call(kiln, modelName, item.extension, item.options), })). keyBy('name'). mapValues('result'). value(); } else { - return bake(modelName, extension, options); + return bake.call(kiln, modelName, extension, options); } }, getModels: function () { diff --git a/packages/klay-kiln/test/kiln.test.js b/packages/klay-kiln/test/kiln.test.js index e74d3b04..14beeef0 100644 --- a/packages/klay-kiln/test/kiln.test.js +++ b/packages/klay-kiln/test/kiln.test.js @@ -182,21 +182,21 @@ defineTest('kiln.js', function (Kiln) { dep1Args.should.have.deep.property('0.model', userModel); dep1Args.should.have.deep.property('0.metadata', userOptions); dep1Args.should.have.property('1').eql(dep1Options); - dep1Args.should.have.property('2').eql({}); + dep1Args.should.have.property('2').eql({kiln}); var dep2Args = dep2Stub.firstCall.args; dep2Args.should.have.deep.property('0.name', 'photo'); dep2Args.should.have.deep.property('0.model', photoModel); dep2Args.should.have.deep.property('0.metadata').eql({}); dep2Args.should.have.property('1').eql(dep2Options); - dep2Args.should.have.property('2').eql({}); + dep2Args.should.have.property('2').eql({kiln}); var bakeArgs = bakeStub.firstCall.args; bakeArgs.should.have.deep.property('0.name', 'user'); bakeArgs.should.have.deep.property('0.model', userModel); bakeArgs.should.have.deep.property('0.metadata', userOptions); bakeArgs.should.have.property('1').eql(extensionOptions); - bakeArgs.should.have.property('2').eql({dep1: {result: 'dep1'}, 'photo:dep2': {result: 'dep2'}}); + bakeArgs.should.have.property('2').eql({kiln, dep1: {result: 'dep1'}, 'photo:dep2': {result: 'dep2'}}); }); it('should cache results of already baked extensions', function () {