From 10f083c68d7accb0230b287620b15ba1e7e04bda Mon Sep 17 00:00:00 2001 From: Conrad Lippert-Zajaczkowski Date: Mon, 22 Apr 2019 03:55:25 -0500 Subject: [PATCH 1/2] fixes addon on apps with engines --- index.js | 60 ++++++++++++++++++++++++++++++++++------------------ package.json | 9 +++++--- 2 files changed, 45 insertions(+), 24 deletions(-) diff --git a/index.js b/index.js index 951262c..2dcb6fe 100644 --- a/index.js +++ b/index.js @@ -3,42 +3,60 @@ const path = require('path'); const Funnel = require('broccoli-funnel'); -const MergeTrees = require('broccoli-merge-trees'); -const map = require('broccoli-stew').map; +const BroccoliMergeTrees = require('broccoli-merge-trees'); +const fastbootTransform = require('fastboot-transform'); +const resolve = require('resolve'); module.exports = { name: require('./package').name, - included(app) { + included() { this._super.included.apply(this, arguments); + let app; - // see: https://github.com/ember-cli/ember-cli/issues/3718 - while (typeof app.import !== 'function' && app.app) { - app = app.app; + // If the addon has the _findHost() method (in ember-cli >= 2.7.0), we'll just + // use that. + if (typeof this._findHost === 'function') { + app = this._findHost(); + } else { + // Otherwise, we'll use this implementation borrowed from the _findHost() + // method in ember-cli. + let current = this; + do { + app = current.app || app; + } while (current.parent.parent && (current = current.parent)); } - if (typeof app.import !== 'function') { - throw new Error('ember-hammertime is being used within another addon or engine ' - + 'and is having trouble registering itself to the parent application.'); - } - - app.import('vendor/hammer-time.js'); + app.import('vendor/hammer-timejs/hammer-time.js'); }, - treeForVendor(vendorTree) { + treeForVendor(tree) { let trees = []; - let hammertimeTree = new Funnel(path.dirname(require.resolve('hammer-timejs/hammer-time.js')), { - files: ['hammer-time.js'] - }); - hammertimeTree = map(hammertimeTree, (content) => `if (typeof FastBoot === 'undefined') { ${content} }`); - if (vendorTree !== undefined) { - trees.push(vendorTree); + let hammerTimeJs = fastbootTransform(new Funnel(this.pathBase('hammer-timejs'), { + files: ['hammer-time.js'], + destDir: 'hammer-timejs' + })); + + trees.push(hammerTimeJs); + + if (tree) { + trees.push(tree); } - trees.push(hammertimeTree); + return new BroccoliMergeTrees(trees); + }, - return new MergeTrees(trees); + /* + Rely on the `resolve` package to mimic node's resolve algorithm. + It finds the modules in a manner that works for npm 2.x, + 3.x, and yarn in both the addon itself and projects that depend on this addon. + This is an edge case b/c some modules do not have a main + module we can require.resolve through node itself and similarily ember-cli + does not have such a hack for the same reason. + */ + pathBase(packageName) { + return path.dirname(resolve.sync(`${packageName}/package.json`, { basedir: __dirname })); }, isDevelopingAddon() { diff --git a/package.json b/package.json index dfbb70d..b4af485 100644 --- a/package.json +++ b/package.json @@ -27,12 +27,15 @@ "test:all": "ember try:each" }, "dependencies": { - "broccoli-funnel": "^2.0.1", - "broccoli-merge-trees": "^3.0.1", + "broccoli-funnel": "^2.0.2", + "broccoli-merge-trees": "^3.0.2", "broccoli-stew": "^2.0.0", + "ember-auto-import": "^1.3.0", "ember-cli-babel": "^6.16.0", "ember-get-config": "^0.2.4", - "hammer-timejs": "^1.1.0" + "fastboot-transform": "^0.1.3", + "hammer-timejs": "^1.1.0", + "resolve": "^1.10.0" }, "devDependencies": { "@ember/optional-features": "^0.6.3", From 53159d0d2bdc8818a7b9e04f29bce88b32e2d853 Mon Sep 17 00:00:00 2001 From: Conrad Lippert-Zajaczkowski Date: Fri, 26 Apr 2019 15:20:39 -0500 Subject: [PATCH 2/2] NPM: removed unused dep --- package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/package.json b/package.json index b4af485..239456e 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,6 @@ "broccoli-funnel": "^2.0.2", "broccoli-merge-trees": "^3.0.2", "broccoli-stew": "^2.0.0", - "ember-auto-import": "^1.3.0", "ember-cli-babel": "^6.16.0", "ember-get-config": "^0.2.4", "fastboot-transform": "^0.1.3",