FirebaseExtended/emberfire

Class constructor FirestoreAdapter cannot be invoked without 'new'

samselikoff opened this issue · 6 comments

I'm trying out v3 on a new 3.8 app and running into this error when trying to access this.store in a controller:

Class constructor FirestoreAdapter cannot be invoked without 'new'

I believe this is the same error @zoltan-nz pointed out on #553.

e.g.
DEBUG: -------------------------------
DEBUG: Ember      : 3.8.0
DEBUG: Ember Data : 3.8.0
DEBUG: jQuery     : 3.3.1
DEBUG: EmberFire  : 3.0.0-rc.1-4
DEBUG: Firebase   : 5.9.1
DEBUG: -------------------------------

Test case

I can provide a repo if needed

Expected behavior

I can use the store! :)

Actual behavior

I see this error message:

Uncaught TypeError: Class constructor FirestoreAdapter cannot be invoked without 'new'

Kind of weird that my application was working fine a couple of hours ago with EmberFire 3.0.0-rc.1-4 and Firebase 5.8.6, and suddenly it started throwing this error

I've read that this is more a Babel issue, I haven't tested but here they say that configuring Babel presets could help: https://stackoverflow.com/a/51860850 and babel/babel#4269 (comment) and koajs/koa#568 (comment)

I'm having the same issue. @samselikoff did you find a solution?

DEBUG: -------------------------------
DEBUG: Ember      : 3.9.1
DEBUG: Ember Data : 3.9.1
DEBUG: jQuery     : 3.4.0
DEBUG: EmberFire  : 3.0.0-rc.1-4
DEBUG: Firebase   : 5.10.0
DEBUG: -------------------------------

@bnetter I found a workaround, but not sure how other things it'll break, I'm actually right now testing for a project.

The problem seems related to babel and the way it handles native classes, when searching in Google I found a lot of "solutions" that pointed to exclude 'transform-es2015-classes' and 'transform-classes' from babel, also using target: 'node'; but again, I'm not very sure how to set/configure that.

Well, the workaround I've just see that allows me to build the project is to add ie 11 in the build targets. The easiest way is to change the config/targets.js file like this:

// config/targets.js 

'use strict';
  
const browsers = [
  'last 1 Chrome versions',
  'last 1 Firefox versions',
  'last 1 Safari versions'
];

const isCI = !!process.env.CI;
const isProduction = process.env.EMBER_ENV === 'production';

//if (isCI || isProduction) {
  browsers.push('ie 11');
//}

module.exports = {
  browsers
};

Well, it can be done properly just removing the if or adding the ie 11 to the array of browsers, but well that's basically the point.

The first problem I've found it's that when using Fastboot emberfire wants to import XMLHttpRequest, and it breaks the build; but that is more a general Fastboot issue, that I vaguely remember I solved before

I also had this and it went away after upgrading ember-source. Maybe version +3.5? Didn't need to touch targets.js.