diff --git a/package.json b/package.json index 7a70d72..569b266 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@kele23/fe-aem-server", - "version": "0.7.2", + "version": "0.7.3", "description": "FE AEM Server", "main": "./src/index.js", "type": "module", diff --git a/src/engine/htl/bindings-provider.js b/src/engine/htl/bindings-provider.js index ef3204f..1b8484a 100644 --- a/src/engine/htl/bindings-provider.js +++ b/src/engine/htl/bindings-provider.js @@ -5,11 +5,14 @@ class BindingsProvider { /** * Construct a bindings provider * @param {Object} bindings Custom bindings provided in plugin configuration - * @param {Object} compilationOptions Compilation options + * @param {Object} modelAlias The model name + * @param {Object} defaultModel Path to default model ( if provided ) + * @param {Object} htlResourceResolver The resource resolver */ - constructor(bindings, modelAlias, htlResourceResolver) { + constructor(bindings, modelAlias, defaultModel, htlResourceResolver) { this.bindings = bindings; this.modelAlias = modelAlias; + this.defaultModel = defaultModel; this.htlResourceResolver = htlResourceResolver; } @@ -32,7 +35,7 @@ class BindingsProvider { */ provide(resource, currentGlobals) { const result = {}; - const res = this.htlResourceResolver.getResource(path.posix.join(resource.getResourceType(), '@model.js')); + const res = this._getModelResource(resource); if (res) { const absPath = this.htlResourceResolver.getSystemPath(res.getPath()); const model = new Model(absPath); @@ -54,6 +57,20 @@ class BindingsProvider { } return result; } + + _getModelResource(resource) { + // check current resource type model + const res = this.htlResourceResolver.getResource(path.posix.join(resource.getResourceType(), '@model.js')); + if (res) return res; + + // check default model if provided + if (this.defaultModel) { + const defModel = this.htlResourceResolver.getResource(this.defaultModel); + if (defModel) return defModel; + } + + return null; + } } export default BindingsProvider; diff --git a/src/engine/htl/htl-render.js b/src/engine/htl/htl-render.js index fa030ad..883e0ef 100644 --- a/src/engine/htl/htl-render.js +++ b/src/engine/htl/htl-render.js @@ -14,9 +14,9 @@ class HTLRender { * @param {BindingsProvider} bindings The BindingsPro * @param {Object} options Compilation options */ - constructor(repoReaders, { modelAlias, hotComponents }) { + constructor(repoReaders, { modelAlias, defaultModel, hotComponents }) { this.htlResourceResolver = new ResourceResolver(repoReaders); - this.bindings = new BindingsProvider({}, modelAlias, this.htlResourceResolver); + this.bindings = new BindingsProvider({}, modelAlias, defaultModel, this.htlResourceResolver); this.hotComponents = hotComponents; } diff --git a/src/server/server.js b/src/server/server.js index d6d71a5..b85bd20 100644 --- a/src/server/server.js +++ b/src/server/server.js @@ -48,6 +48,7 @@ class Server { this.repoReadersObj = crReposObj; this.render = new HTLRender(this.repoReadersObj, { modelAlias: this.serverConfig.modelAlias || ['model'], + defaultModel: this.serverConfig.defaultModel, hotComponents: serverConfig.hotComponents, }); this.proxies = serverConfig.proxies; diff --git a/test-webpack/repository/apps/_models/@default.js b/test-webpack/repository/apps/_models/@default.js new file mode 100644 index 0000000..e32504d --- /dev/null +++ b/test-webpack/repository/apps/_models/@default.js @@ -0,0 +1,7 @@ +/*global use*/ +use(function () { + return { + uniqueId: Math.floor(Math.random() * 10000), + ...this.properties, + }; +}); diff --git a/test-webpack/repository/apps/archi/components/content/text/text.html b/test-webpack/repository/apps/archi/components/content/text/text.html index 9692f94..3d81386 100644 --- a/test-webpack/repository/apps/archi/components/content/text/text.html +++ b/test-webpack/repository/apps/archi/components/content/text/text.html @@ -1,4 +1,7 @@ -