From bbc464704475b08db4d746e3dd356c3b81ae9c15 Mon Sep 17 00:00:00 2001 From: Christopher Garrett Date: Tue, 27 Nov 2018 15:00:23 -0800 Subject: [PATCH] [BUGFIX beta] Reverts EmberError to be a standard function This reverts a change from some years ago that made EmberError a native class. The recent change to build non-transpiled classes is causing failures in libraries that subclass EmberError (specifically Ember Data) and with the messiness around how EmberError actually does the extending, using native classes is not ideal. Eventually, EmberError should be replaced entirely as it is not a good idea to subclass Error at all. This will have to happen in the future, and will likely require an RFC. --- packages/@ember/error/index.d.ts | 1 + packages/@ember/error/index.js | 28 +++++++++++++++++++ packages/@ember/error/index.ts | 46 -------------------------------- 3 files changed, 29 insertions(+), 46 deletions(-) create mode 100644 packages/@ember/error/index.d.ts create mode 100644 packages/@ember/error/index.js delete mode 100644 packages/@ember/error/index.ts diff --git a/packages/@ember/error/index.d.ts b/packages/@ember/error/index.d.ts new file mode 100644 index 00000000000..88d2082933f --- /dev/null +++ b/packages/@ember/error/index.d.ts @@ -0,0 +1 @@ +export default class EmberError extends Error {} diff --git a/packages/@ember/error/index.js b/packages/@ember/error/index.js new file mode 100644 index 00000000000..34d95bf79dc --- /dev/null +++ b/packages/@ember/error/index.js @@ -0,0 +1,28 @@ +/** + A subclass of the JavaScript Error object for use in Ember. + + @class Error + @namespace Ember + @extends Error + @constructor + @public +*/ +export default function EmberError(message) { + if (!(this instanceof EmberError)) { + return new EmberError(message); + } + + let error = Error.call(this, message); + + this.stack = error.stack; + this.description = error.description; + this.fileName = error.fileName; + this.lineNumber = error.lineNumber; + this.message = error.message; + this.name = error.name; + this.number = error.number; + this.code = error.code; +} + +EmberError.prototype = Object.create(Error.prototype); +EmberError.prototype.constructor = EmberError; diff --git a/packages/@ember/error/index.ts b/packages/@ember/error/index.ts deleted file mode 100644 index ed58a17983d..00000000000 --- a/packages/@ember/error/index.ts +++ /dev/null @@ -1,46 +0,0 @@ -/** - @module @ember/error -*/ -function ExtendBuiltin(klass: any): typeof Error { - function ExtendableBuiltin(this: any) { - klass.apply(this, arguments); - } - - ExtendableBuiltin.prototype = Object.create(klass.prototype); - ExtendableBuiltin.prototype.constructor = ExtendableBuiltin; - return ExtendableBuiltin as typeof Error; -} - -/** - A subclass of the JavaScript Error object for use in Ember. - - @class EmberError - @extends Error - @constructor - @public -*/ -export default class EmberError extends ExtendBuiltin(Error) { - description: string; - fileName: string; - lineNumber: number; - number: number; - code: string; - - constructor(message: string) { - super(); - - if (!(this instanceof EmberError)) { - return new EmberError(message); - } - - let error = Error.call(this, message); - this.stack = error.stack; - this.description = error.description; - this.fileName = error.fileName; - this.lineNumber = error.lineNumber; - this.message = error.message; - this.name = error.name; - this.number = error.number; - this.code = error.code; - } -}