// the polyfills must be the first thing imported in node.js
import 'angular2-universal-polyfills';
// Angular 2
import { enableProdMode } from '@angular/core';
// Angular2 Universal
import { platformNodeDynamic } from 'angular2-universal';
// Application imports
import { MainModule } from './main.node';
import { App } from './components';
import { routes } from './routes';
// enable prod for faster renders
enableProdMode();
declare var Zone: any;
export default function (params: any) : Promise<{ html: string, globals?: any }> {
const doc = `
\n
`;
// hold platform reference
var platformRef = platformNodeDynamic();
var platformConfig = {
ngModule: MainModule,
document: doc,
preboot: false,
baseUrl: '/',
requestUrl: params.url,
originUrl: params.origin
};
// defaults
var cancel = false;
const _config = Object.assign({
get cancel() { return cancel; },
cancelHandler() { return Zone.current.get('cancel') }
}, platformConfig);
// for each user
const zone = Zone.current.fork({
name: 'UNIVERSAL request',
properties: _config
});
return Promise.resolve(
zone.run(() => {
return platformRef.serializeModule(Zone.current.get('ngModule'))
})
).then(html => {
if (typeof html !== 'string' ) {
return { html : doc };
}
return { html };
}).catch(err => {
console.log(err);
return { html : doc };
});
}