Skip to content

Commit

Permalink
Move loader.js to be included as an addon.
Browse files Browse the repository at this point in the history
This allows us to:

* Remove another bower dependency
* Ensure that ember-cli is properly paired with the loader.js version
* Remove reexporter code, since we now know for certain what loader.js
  we have.
  • Loading branch information
rwjblue committed Jan 20, 2016
1 parent 3c28afe commit 1e50818
Show file tree
Hide file tree
Showing 12 changed files with 8 additions and 200 deletions.
3 changes: 1 addition & 2 deletions blueprints/app/files/bower.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,7 @@
"ember-cli-test-loader": "0.2.2",
"ember-load-initializers": "0.1.7",
"ember-qunit-notifications": "0.1.0",
"jquery": "1.11.3",
"loader.js": "^3.5.0"
"jquery": "1.11.3"
},
"resolutions": {
"ember": "2.2.0"
Expand Down
13 changes: 0 additions & 13 deletions lib/broccoli/ember-app.js
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,6 @@ module.exports = EmberApp;
- outputPaths, defaults to `{}`,
- minifyCSS, defaults to `{enabled: !!isProduction,options: { relativeTo: 'app/styles' }},
- minifyJS, defaults to `{enabled: !!isProduction},
- loader, defaults to this.bowerDirectory + '/loader.js/loader.js',
- sourcemaps, defaults to `{}`,
- trees, defaults to `{},`
- jshintrc, defaults to `{},`
Expand Down Expand Up @@ -165,7 +164,6 @@ EmberApp.prototype._initOptions = function(options, isProduction) {
minifyJS: {
enabled: !!isProduction
},
loader: this.bowerDirectory + '/loader.js/loader.js',
sourcemaps: {},
trees: {},
jshintrc: {},
Expand Down Expand Up @@ -256,7 +254,6 @@ EmberApp.prototype._initVendorFiles = function() {
}

this.vendorFiles = omit(merge({
'loader.js': this.options.loader,
'jquery.js': this.bowerDirectory + '/jquery/dist/jquery.js',
'handlebars.js': handlebarsVendorFiles,
'ember.js': {
Expand Down Expand Up @@ -834,16 +831,6 @@ EmberApp.prototype._addonTree = function _addonTree() {
var transpiledAddonTree = new Babel(addonES6, this._prunedBabelOptions());
var trees = [ transpiledAddonTree ];

if (!this.project._loaderSupportsIndexFallback()) {
var addonReexports = new Funnel(addonTrees, {
srcDir: 'reexports',
allowEmpty: true,
annotation: 'Funnel: Addon Re-exports'
});

trees.push(addonReexports);
}

var reexportsAndTranspiledAddonTree = mergeTrees(trees, {
annotation: 'TreeMerger: (re-exports)'
});
Expand Down
5 changes: 0 additions & 5 deletions lib/models/addon.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ var existsSync = require('exists-sync');
var path = require('path');
var assign = require('lodash/object/assign');
var SilentError = require('silent-error');
var Reexporter = require('../utilities/reexport');
var debug = require('debug')('ember-cli:addon');

var nodeModulesPath = require('node-modules-path');
Expand Down Expand Up @@ -614,10 +613,6 @@ Addon.prototype.compileAddon = function(tree) {
var addonJs = this.processedAddonJsFiles(tree);
var templatesTree = this.compileTemplates(tree);

if (!this.project._loaderSupportsIndexFallback()) {
reexported = new Reexporter(this.name, this.name + '.js');
}

var trees = [addonJs, templatesTree, reexported].filter(Boolean);

return mergeTrees(trees, {
Expand Down
47 changes: 0 additions & 47 deletions lib/models/project.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ var AddonsFactory = require('../models/addons-factory');
var Command = require('../models/command');
var UI = require('../ui');
var nodeModulesPath = require('node-modules-path');
var semver = require('semver');

var getPackageBaseName = require('../utilities/get-package-base-name');
var versionUtils = require('../utilities/version-utils');
Expand Down Expand Up @@ -531,52 +530,6 @@ Project.prototype.findAddonByName = function(name) {
});
};

/**
Used to determine if the `loader.js` version present supports index fallback.
This allows us to avoid manual re-exporters for `addon/index.js` if >= 3.5.0 is used.
@private
@method _loaderSupportsIndexFallback
@return {Boolean}
*/
var loaderWarningIssued = false;
Project.prototype._issueLoaderVersionWarning = function() {
if (!loaderWarningIssued) {
this.ui.writeWarnLine('Please update loader.js to 3.5.0 or higher.');

loaderWarningIssued = true;
}
};

Project.prototype._loaderSupportsIndexFallback = function() {
try {
var loaderPath = path.join(this.root, this.bowerDirectory, 'loader.js', '.bower.json');

if (!existsSync(loaderPath)) {
this._issueLoaderVersionWarning();

return false;
}

var loaderJSON = JSON.parse(fs.readFileSync(loaderPath));

var satisfied = semver.satisfies(loaderJSON.version, '>= 3.5.0');
if (!satisfied) {
this._issueLoaderVersionWarning();
}

return satisfied;
} catch(e) {
this._issueLoaderVersionWarning();

// always return true/false regardless of errors parsing
// version number in `bower.json` (`semver` and Bower do
// not always agree on valid version numbers).
return false;
}
};

/**
Returns a new project based on the first package.json that is found
in `pathName`.
Expand Down
43 changes: 0 additions & 43 deletions lib/utilities/reexport.js

This file was deleted.

1 change: 0 additions & 1 deletion tests/fixtures/addon/simple/bower.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
"jquery": "^1.11.1",
"ember": "1.7.0",
"ember-data": "1.0.0-beta.10",
"loader.js": "ember-cli/loader.js#1.0.1",
"ember-cli-shims": "ember-cli/ember-cli-shims#0.0.3",
"ember-cli-test-loader": "rwjblue/ember-cli-test-loader#0.0.4",
"ember-load-initializers": "ember-cli/ember-load-initializers#0.0.2"
Expand Down
3 changes: 2 additions & 1 deletion tests/fixtures/addon/simple/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
"ember-before-blueprint-addon": "latest",
"ember-after-blueprint-addon": "latest",
"ember-devDeps-addon": "latest",
"ember-addon-with-dependencies": "latest"
"ember-addon-with-dependencies": "latest",
"loader.js": "latest"
}
}
1 change: 0 additions & 1 deletion tests/fixtures/project-with-handlebars/bower.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
"jquery": "^1.11.1",
"ember": "1.7.0",
"ember-data": "1.0.0-beta.10",
"loader.js": "ember-cli/loader.js#1.0.1",
"ember-cli-shims": "ember-cli/ember-cli-shims#0.0.3",
"ember-cli-test-loader": "rwjblue/ember-cli-test-loader#0.0.4",
"ember-load-initializers": "ember-cli/ember-load-initializers#0.0.2"
Expand Down
3 changes: 2 additions & 1 deletion tests/fixtures/project-with-handlebars/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
},
"devDependencies": {
"ember-cli": "latest",
"ember-resolver": "^2.0.2"
"ember-resolver": "^2.0.2",
"loader.js": "*"
}
}
2 changes: 1 addition & 1 deletion tests/unit/broccoli/ember-app-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -716,7 +716,7 @@ describe('broccoli/ember-app', function() {

describe('vendorFiles', function() {
var defaultVendorFiles = [
'loader.js', 'jquery.js', 'ember.js',
'jquery.js', 'ember.js',
'app-shims.js', 'ember-resolver.js', 'ember-load-initializers.js'
];

Expand Down
51 changes: 2 additions & 49 deletions tests/unit/models/project-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,8 @@ describe('models/project.js', function() {
'ember-after-blueprint-addon': 'latest',
'something-else': 'latest',
'ember-devDeps-addon': 'latest',
'ember-addon-with-dependencies': 'latest'
'ember-addon-with-dependencies': 'latest',
'loader.js': 'latest'
};

expect(project.dependencies()).to.deep.equal(expected);
Expand All @@ -175,7 +176,6 @@ describe('models/project.js', function() {
'jquery': '^1.11.1',
'ember': '1.7.0',
'ember-data': '1.0.0-beta.10',
'loader.js': 'ember-cli/loader.js#1.0.1',
'ember-cli-shims': 'ember-cli/ember-cli-shims#0.0.3',
'ember-cli-test-loader': 'rwjblue/ember-cli-test-loader#0.0.4',
'ember-load-initializers': 'ember-cli/ember-load-initializers#0.0.2',
Expand Down Expand Up @@ -521,53 +521,6 @@ describe('models/project.js', function() {
});
});

describe('_loaderSupportsIndexFallback', function() {
var loaderBowerJSONPath;

beforeEach(function() {
tmpPath = path.join(process.cwd(), 'tmp');
projectPath = path.join(tmpPath, 'test-app');
loaderBowerJSONPath = projectPath + '/bower_components/loader.js/.bower.json';

return tmp.setup(projectPath)
.then(function() {
project = new Project(projectPath, { }, new MockUI());
});
});

afterEach(function() {
return tmp.teardown(tmpPath);
});

it('returns false when `loader.js` is not a dependency', function(){
touch(loaderBowerJSONPath, {
version: '/foo/bar'
});

expect(project._loaderSupportsIndexFallback()).to.equal(false);
});

it('returns true when `loader.js` version matches', function(){
touch(loaderBowerJSONPath, {
version: '3.5.0'
});

expect(project._loaderSupportsIndexFallback()).to.equal(true);
});

it('returns false when `loader.js` is specified in an odd format', function(){
touch(loaderBowerJSONPath, {
version: 'lol/wat/zomg'
});

expect(project._loaderSupportsIndexFallback()).to.equal(false);
});

it('returns false when `loader.js` .bower.json is not found', function(){
expect(project._loaderSupportsIndexFallback()).to.equal(false);
});
});

describe('.nullProject', function (){
it('is a singleton', function() {
expect(Project.nullProject()).to.equal(Project.nullProject());
Expand Down
36 changes: 0 additions & 36 deletions tests/unit/utilities/reexport-test.js

This file was deleted.

0 comments on commit 1e50818

Please sign in to comment.