Skip to content

Commit bc1491f

Browse files
author
Lenny Burdette
committed
feat: remove makeDefaultExport
Modules that return an object or only declare named exports are no longer mutated to include a `default` export. Addresses ember-cli#114 Breaking change: loader.js will no longer create a default export.
1 parent 14e8348 commit bc1491f

File tree

2 files changed

+4
-149
lines changed

2 files changed

+4
-149
lines changed

lib/loader/loader.js

+1-27
Original file line numberDiff line numberDiff line change
@@ -117,11 +117,6 @@ var loader, define, requireModule, require, requirejs;
117117
console.warn.apply(console, arguments);
118118
};
119119

120-
var constructMakeDefaultExportDeprecation = function (id) {
121-
return 'The `' + id + '` module does not define a default export, but loader.js ' +
122-
'generated one anyway. This behavior is deprecated and will be removed in v5.0.0.';
123-
};
124-
125120
Object.defineProperty(requirejs, 'deprecationLogger', {
126121
enumerable: false,
127122
get: function() {
@@ -133,27 +128,6 @@ var loader, define, requireModule, require, requirejs;
133128
});
134129
}
135130

136-
Module.prototype.makeDefaultExport = function() {
137-
var exports = this.module.exports;
138-
if (exports !== null &&
139-
(typeof exports === 'object' || typeof exports === 'function') &&
140-
exports['default'] === undefined && Object.isExtensible(exports)) {
141-
142-
if (DEBUG) {
143-
var id = this.id;
144-
145-
Object.defineProperty(exports, 'default', {
146-
get: function () {
147-
deprecationLogger(constructMakeDefaultExportDeprecation(id));
148-
return exports;
149-
}
150-
});
151-
} else {
152-
exports['default'] = exports;
153-
}
154-
}
155-
};
156-
157131
Module.prototype.exports = function() {
158132
// if finalized, there is no work to do. If reifying, there is a
159133
// circular dependency so we must return our (partial) exports.
@@ -173,7 +147,7 @@ var loader, define, requireModule, require, requirejs;
173147
if (!(this.hasExportsAsDep && result === undefined)) {
174148
this.module.exports = result;
175149
}
176-
this.makeDefaultExport();
150+
177151
return this.module.exports;
178152
};
179153

tests/all.js

+3-122
Original file line numberDiff line numberDiff line change
@@ -640,19 +640,14 @@ test('if factory returns a value it is used as export', function() {
640640
equal(foo.bar, 'bar');
641641
});
642642

643-
test('if a module has no default property assume the return is the default', function() {
644-
var deprecationMessage;
645-
require.deprecationLogger = function(message) {
646-
deprecationMessage = message;
647-
};
648-
643+
test('if a module has no default property it does not create one', function() {
649644
define('foo', [], function() {
650645
return {
651646
bar: 'bar'
652647
};
653648
});
654649

655-
var foo = require('foo')['default'];
650+
var foo = require('foo');
656651

657652
var stats = statsForMonitor('loaderjs', tree);
658653

@@ -669,117 +664,12 @@ test('if a module has no default property assume the return is the default', fun
669664
pendingQueueLength: 1
670665
});
671666

667+
strictEqual(foo.default, undefined);
672668
equal(foo.bar, 'bar');
673-
674-
equal(deprecationMessage, 'The `foo` module does not define a default export, but loader.js generated one anyway. This behavior is deprecated and will be removed in v5.0.0.');
675669
});
676670

677671

678-
test('if a CJS style module has no default export assume module.exports is the default', function() {
679-
var deprecationMessage;
680-
require.deprecationLogger = function(message) {
681-
deprecationMessage = message;
682-
};
683-
684-
define('Foo', ['require', 'exports', 'module'], function(require, exports, module) {
685-
module.exports = function Foo() {
686-
this.bar = 'bar';
687-
};
688-
});
689-
690-
var Foo = require('Foo')['default'];
691-
var foo = new Foo();
692-
693-
equal(foo.bar, 'bar');
694-
var stats = statsForMonitor('loaderjs', tree);
695-
696-
deepEqual(stats, {
697-
findDeps: 1,
698-
define: 1,
699-
exports: 1,
700-
findModule: 1,
701-
modules: 1,
702-
reify: 1,
703-
require: 1,
704-
resolve: 0,
705-
resolveRelative: 0,
706-
pendingQueueLength: 1
707-
});
708-
709-
equal(deprecationMessage, 'The `Foo` module does not define a default export, but loader.js generated one anyway. This behavior is deprecated and will be removed in v5.0.0.');
710-
});
711-
712-
713-
test('if a module has no default property assume its export is default (function)', function() {
714-
var deprecationMessage;
715-
require.deprecationLogger = function(message) {
716-
deprecationMessage = message;
717-
};
718-
719-
var theFunction = function theFunction() {};
720-
define('foo', ['require', 'exports', 'module'], function() {
721-
return theFunction;
722-
});
723-
724-
equal(require('foo')['default'], theFunction);
725-
equal(require('foo'), theFunction);
726-
727-
var stats = statsForMonitor('loaderjs', tree);
728-
729-
deepEqual(stats, {
730-
findDeps: 1,
731-
define: 1,
732-
exports: 1,
733-
findModule: 2,
734-
modules: 1,
735-
reify: 1,
736-
require: 2,
737-
resolve: 0,
738-
resolveRelative: 0,
739-
pendingQueueLength: 1
740-
});
741-
742-
equal(deprecationMessage, 'The `foo` module does not define a default export, but loader.js generated one anyway. This behavior is deprecated and will be removed in v5.0.0.');
743-
});
744-
745-
test('if a module has no default property assume its export is default (object)', function() {
746-
var deprecationMessage;
747-
require.deprecationLogger = function(message) {
748-
deprecationMessage = message;
749-
};
750-
751-
var theObject = {};
752-
define('foo', ['require', 'exports', 'module'], function() {
753-
return theObject;
754-
});
755-
756-
equal(require('foo')['default'], theObject);
757-
equal(require('foo'), theObject);
758-
759-
var stats = statsForMonitor('loaderjs', tree);
760-
761-
deepEqual(stats, {
762-
findDeps: 1,
763-
define: 1,
764-
exports: 1,
765-
findModule: 2,
766-
modules: 1,
767-
reify: 1,
768-
require: 2,
769-
resolve: 0,
770-
resolveRelative: 0,
771-
pendingQueueLength: 1
772-
});
773-
774-
equal(deprecationMessage, 'The `foo` module does not define a default export, but loader.js generated one anyway. This behavior is deprecated and will be removed in v5.0.0.');
775-
});
776-
777672
test('does not add default if export is frozen', function() {
778-
var deprecationMessage;
779-
require.deprecationLogger = function(message) {
780-
deprecationMessage = message;
781-
};
782-
783673
var theObject = Object.freeze({});
784674
define('foo', ['require', 'exports', 'module'], function() {
785675
return theObject;
@@ -802,16 +692,9 @@ test('does not add default if export is frozen', function() {
802692
resolveRelative: 0,
803693
pendingQueueLength: 1
804694
});
805-
806-
equal(deprecationMessage, undefined);
807695
});
808696

809697
test('does not add default if export is sealed', function() {
810-
var deprecationMessage;
811-
require.deprecationLogger = function(message) {
812-
deprecationMessage = message;
813-
};
814-
815698
var theObject = Object.seal({ derp: {} });
816699
define('foo', ['require', 'exports', 'module'], function() {
817700
return theObject;
@@ -834,8 +717,6 @@ test('does not add default if export is sealed', function() {
834717
resolveRelative: 0,
835718
pendingQueueLength: 1
836719
});
837-
838-
equal(deprecationMessage, undefined);
839720
});
840721

841722
test('has good error message for missing module', function() {

0 commit comments

Comments
 (0)