aurelia-bootstrapper-webpack
Version:
Sets up the default configuration for the aurelia framework and gets you up and running quick and easy.
92 lines (78 loc) • 2.37 kB
JavaScript
import 'aurelia-polyfills';
import { initialize } from 'aurelia-pal-browser';
import { WebpackLoader } from 'aurelia-loader-webpack';
initialize();
var bootstrapQueue = [];
var sharedLoader = null;
var Aurelia = null;
function onBootstrap(callback) {
return new Promise(function (resolve, reject) {
if (sharedLoader) {
resolve(callback(sharedLoader));
} else {
bootstrapQueue.push(function () {
try {
resolve(callback(sharedLoader));
} catch (e) {
reject(e);
}
});
}
});
}
function ready(global) {
return new Promise(function (resolve, reject) {
if (global.document.readyState === 'complete') {
resolve(global.document);
} else {
global.document.addEventListener('DOMContentLoaded', completed);
global.addEventListener('load', completed);
}
function completed() {
global.document.removeEventListener('DOMContentLoaded', completed);
global.removeEventListener('load', completed);
resolve(global.document);
}
});
}
function handleApp(loader, appHost) {
return config(loader, appHost, appHost.getAttribute('aurelia-app'));
}
function config(loader, appHost, configModuleId) {
var aurelia = new Aurelia(loader);
aurelia.host = appHost;
aurelia.configModuleId = configModuleId || null;
if (configModuleId) {
return loader.loadModule(configModuleId).then(function (customConfig) {
return customConfig.configure(aurelia);
});
}
aurelia.use.standardConfiguration().developmentLogging();
return aurelia.start().then(function () {
return aurelia.setRoot();
});
}
function run() {
return ready(window).then(function (doc) {
var appHost = doc.querySelectorAll('[aurelia-app]');
var loader = new WebpackLoader();
loader.loadModule('aurelia-framework').then(function (m) {
Aurelia = m.Aurelia;
for (var i = 0, ii = appHost.length; i < ii; ++i) {
handleApp(loader, appHost[i]).catch(console.error.bind(console));
}
sharedLoader = loader;
for (var _i = 0, _ii = bootstrapQueue.length; _i < _ii; ++_i) {
bootstrapQueue[_i]();
}
bootstrapQueue = null;
});
});
}
export function bootstrap(configure) {
return onBootstrap(function (loader) {
var aurelia = new Aurelia(loader);
return configure(aurelia);
});
}
run();