diff --git a/packages/ember-cli-fastboot/addon/initializers/render-mode.js b/packages/ember-cli-fastboot/addon/initializers/render-mode.js new file mode 100644 index 000000000..39f76794f --- /dev/null +++ b/packages/ember-cli-fastboot/addon/initializers/render-mode.js @@ -0,0 +1,32 @@ +import ApplicationInstance from '@ember/application/instance'; +import { isSerializationFirstNode } from '@ember/-internals/glimmer'; + +export function initialize() { + if (typeof FastBoot === 'undefined') { + var current = document.getElementById('fastboot-body-start'); + + if (current && isSerializationFirstNode(current.nextSibling)) { + ApplicationInstance.prototype._bootSyncOld = + ApplicationInstance.prototype._bootSync; + ApplicationInstance.prototype._bootSync = function (options) { + this._bootSyncOld({ + ...options, + _rendermode: 'rehydrate', + }); + }; + + // Prevent clearRender by removing `fastboot-body-start` which is already + // guarded for + current.parentNode.removeChild(current); + var end = document.getElementById('fastboot-body-end'); + + if (end) { + end.parentNode.removeChild(end); + } + } + } +} + +export default { + initialize, +}; diff --git a/packages/ember-cli-fastboot/app/initializers/render-mode.js b/packages/ember-cli-fastboot/app/initializers/render-mode.js new file mode 100644 index 000000000..df13d064a --- /dev/null +++ b/packages/ember-cli-fastboot/app/initializers/render-mode.js @@ -0,0 +1,4 @@ +export { + default, + initialize, +} from 'ember-cli-fastboot/initializers/render-mode'; diff --git a/packages/ember-cli-fastboot/index.js b/packages/ember-cli-fastboot/index.js index a0d6bb737..da8a77028 100644 --- a/packages/ember-cli-fastboot/index.js +++ b/packages/ember-cli-fastboot/index.js @@ -75,8 +75,6 @@ module.exports = { // is eval'd in app-boot app.options.autoRun = false; - app.import('vendor/experimental-render-mode-rehydrate.js'); - // get the app registry object and app name so that we can build the fastboot // tree this._appRegistry = app.registry; diff --git a/packages/ember-cli-fastboot/vendor/experimental-render-mode-rehydrate.js b/packages/ember-cli-fastboot/vendor/experimental-render-mode-rehydrate.js deleted file mode 100644 index 45569a29f..000000000 --- a/packages/ember-cli-fastboot/vendor/experimental-render-mode-rehydrate.js +++ /dev/null @@ -1,41 +0,0 @@ -/* eslint-disable no-undef */ -(function () { - if (typeof FastBoot === 'undefined') { - var current = document.getElementById('fastboot-body-start'); - - var _Ember = require.has('ember') ? require('ember').default : window.Ember; - - if (current && !_Ember) { - console.error(`Experimental render mode rehydrate isn't working because it couldn't find Ember via AMD or global. -See https://github.com/ember-fastboot/ember-cli-fastboot/issues/938 for the current state of the fix.`); - return; - } - - if ( - current && - typeof _Ember.ViewUtils.isSerializationFirstNode === 'function' && - _Ember.ViewUtils.isSerializationFirstNode(current.nextSibling) - ) { - _Ember.ApplicationInstance.reopen({ - _bootSync: function (options) { - if (options === undefined) { - options = { - _renderMode: 'rehydrate', - }; - } - - return this._super(options); - }, - }); - - // Prevent clearRender by removing `fastboot-body-start` which is already - // guarded for - current.parentNode.removeChild(current); - var end = document.getElementById('fastboot-body-end'); - - if (end) { - end.parentNode.removeChild(end); - } - } - } -})();