UNPKG

electron-angular-boilerplate

Version:

A basic electron app using AngularJS and Skeleton CSS with ES6 support

1,655 lines (1,349 loc) 73.3 kB
/* * SystemJS v0.16.11 */ (function($__global, $__globalName) { $__global.upgradeSystemLoader = function() { $__global.upgradeSystemLoader = undefined; // indexOf polyfill for IE var indexOf = Array.prototype.indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) if (this[i] === item) return i; return -1; } var isWindows = typeof process != 'undefined' && !!process.platform.match(/^win/); // Absolute URL parsing, from https://gist.github.com/Yaffle/1088850 function parseURI(url) { var m = String(url).replace(/^\s+|\s+$/g, '').match(/^([^:\/?#]+:)?(\/\/(?:[^:@\/?#]*(?::[^:@\/?#]*)?@)?(([^:\/?#]*)(?::(\d*))?))?([^?#]*)(\?[^#]*)?(#[\s\S]*)?/); // authority = '//' + user + ':' + pass '@' + hostname + ':' port return (m ? { href : m[0] || '', protocol : m[1] || '', authority: m[2] || '', host : m[3] || '', hostname : m[4] || '', port : m[5] || '', pathname : m[6] || '', search : m[7] || '', hash : m[8] || '' } : null); } function toAbsoluteURL(base, href) { function removeDotSegments(input) { var output = []; input.replace(/^(\.\.?(\/|$))+/, '') .replace(/\/(\.(\/|$))+/g, '/') .replace(/\/\.\.$/, '/../') .replace(/\/?[^\/]*/g, function (p) { if (p === '/..') output.pop(); else output.push(p); }); return output.join('').replace(/^\//, input.charAt(0) === '/' ? '/' : ''); } if (isWindows) href = href.replace(/\\/g, '/'); href = parseURI(href || ''); base = parseURI(base || ''); return !href || !base ? null : (href.protocol || base.protocol) + (href.protocol || href.authority ? href.authority : base.authority) + removeDotSegments(href.protocol || href.authority || href.pathname.charAt(0) === '/' ? href.pathname : (href.pathname ? ((base.authority && !base.pathname ? '/' : '') + base.pathname.slice(0, base.pathname.lastIndexOf('/') + 1) + href.pathname) : base.pathname)) + (href.protocol || href.authority || href.pathname ? href.search : (href.search || base.search)) + href.hash; } // clone the original System loader var System; (function() { var originalSystem = $__global.System; System = $__global.System = new LoaderPolyfill(originalSystem); System.baseURL = originalSystem.baseURL; System.paths = { '*': '*.js' }; System.originalSystem = originalSystem; })(); System.noConflict = function() { $__global.SystemJS = System; $__global.System = System.originalSystem; } /* * SystemJS Core * Code should be vaguely readable * */ var originalSystem = $__global.System.originalSystem; function core(loader) { /* __useDefault When a module object looks like: newModule( __useDefault: true, default: 'some-module' }) Then importing that module provides the 'some-module' result directly instead of the full module. Useful for eg module.exports = function() {} */ var loaderImport = loader['import']; loader['import'] = function(name, options) { return loaderImport.call(this, name, options).then(function(module) { return module.__useDefault ? module['default'] : module; }); } // support the empty module, as a concept loader.set('@empty', loader.newModule({})); // include the node require since we're overriding it if (typeof require != 'undefined') loader._nodeRequire = require; /* Config Extends config merging one deep only loader.config({ some: 'random', config: 'here', deep: { config: { too: 'too' } } }); <=> loader.some = 'random'; loader.config = 'here' loader.deep = loader.deep || {}; loader.deep.config = { too: 'too' }; */ loader.config = function(cfg) { for (var c in cfg) { var v = cfg[c]; if (typeof v == 'object' && !(v instanceof Array)) { this[c] = this[c] || {}; for (var p in v) this[c][p] = v[p]; } else this[c] = v; } } // override locate to allow baseURL to be document-relative var baseURI; if (typeof window == 'undefined' && typeof WorkerGlobalScope == 'undefined' && typeof process != 'undefined') { baseURI = 'file:' + process.cwd() + '/'; if (isWindows) baseURI = baseURI.replace(/\\/g, '/'); } // Inside of a Web Worker else if (typeof window == 'undefined') { baseURI = location.href; } else { baseURI = document.baseURI; if (!baseURI) { var bases = document.getElementsByTagName('base'); baseURI = bases[0] && bases[0].href || window.location.href; } } var loaderLocate = loader.locate; var normalizedBaseURL; loader.locate = function(load) { if (this.baseURL != normalizedBaseURL) { normalizedBaseURL = toAbsoluteURL(baseURI, this.baseURL); if (normalizedBaseURL.substr(normalizedBaseURL.length - 1, 1) != '/') normalizedBaseURL += '/'; this.baseURL = normalizedBaseURL; } return Promise.resolve(loaderLocate.call(this, load)); } function applyExtensions(extensions, loader) { loader._extensions = []; for(var i = 0, len = extensions.length; i < len; i++) { extensions[i](loader); } } loader._extensions = loader._extensions || []; loader._extensions.push(core); loader.clone = function() { var originalLoader = this; var loader = new LoaderPolyfill(originalSystem); loader.baseURL = originalLoader.baseURL; loader.paths = { '*': '*.js' }; applyExtensions(originalLoader._extensions, loader); return loader; }; } /* * Meta Extension * * Sets default metadata on a load record (load.metadata) from * loader.meta[moduleName]. * Also provides an inline meta syntax for module meta in source. * * Eg: * * loader.meta['my/module'] = { some: 'meta' }; * * load.metadata.some = 'meta' will now be set on the load record. * * The same meta could be set with a my/module.js file containing: * * my/module.js * "some meta"; * "another meta"; * console.log('this is my/module'); * * The benefit of inline meta is that coniguration doesn't need * to be known in advance, which is useful for modularising * configuration and avoiding the need for configuration injection. * * * Example * ------- * * The simplest meta example is setting the module format: * * System.meta['my/module'] = { format: 'amd' }; * * or inside 'my/module.js': * * "format amd"; * define(...); * */ function meta(loader) { var metaRegEx = /^(\s*\/\*.*\*\/|\s*\/\/[^\n]*|\s*"[^"]+"\s*;?|\s*'[^']+'\s*;?)+/; var metaPartRegEx = /\/\*.*\*\/|\/\/[^\n]*|"[^"]+"\s*;?|'[^']+'\s*;?/g; loader.meta = {}; loader._extensions = loader._extensions || []; loader._extensions.push(meta); function setConfigMeta(loader, load) { var meta = loader.meta && loader.meta[load.name]; if (meta) { for (var p in meta) load.metadata[p] = load.metadata[p] || meta[p]; } } var loaderLocate = loader.locate; loader.locate = function(load) { setConfigMeta(this, load); return loaderLocate.call(this, load); } var loaderTranslate = loader.translate; loader.translate = function(load) { // detect any meta header syntax var meta = load.source.match(metaRegEx); if (meta) { var metaParts = meta[0].match(metaPartRegEx); for (var i = 0; i < metaParts.length; i++) { var len = metaParts[i].length; var firstChar = metaParts[i].substr(0, 1); if (metaParts[i].substr(len - 1, 1) == ';') len--; if (firstChar != '"' && firstChar != "'") continue; var metaString = metaParts[i].substr(1, metaParts[i].length - 3); var metaName = metaString.substr(0, metaString.indexOf(' ')); if (metaName) { var metaValue = metaString.substr(metaName.length + 1, metaString.length - metaName.length - 1); if (load.metadata[metaName] instanceof Array) load.metadata[metaName].push(metaValue); else if (!load.metadata[metaName]) load.metadata[metaName] = metaValue; } } } // config meta overrides setConfigMeta(this, load); return loaderTranslate.call(this, load); } } /* * Instantiate registry extension * * Supports Traceur System.register 'instantiate' output for loading ES6 as ES5. * * - Creates the loader.register function * - Also supports metadata.format = 'register' in instantiate for anonymous register modules * - Also supports metadata.deps, metadata.execute and metadata.executingRequire * for handling dynamic modules alongside register-transformed ES6 modules * * Works as a standalone extension, but benefits from having a more * advanced __eval defined like in SystemJS polyfill-wrapper-end.js * * The code here replicates the ES6 linking groups algorithm to ensure that * circular ES6 compiled into System.register can work alongside circular AMD * and CommonJS, identically to the actual ES6 loader. * */ function register(loader) { if (typeof indexOf == 'undefined') indexOf = Array.prototype.indexOf; if (typeof __eval == 'undefined' || typeof document != 'undefined' && !document.addEventListener) __eval = 0 || eval; // uglify breaks without the 0 || loader._extensions = loader._extensions || []; loader._extensions.push(register); // define exec for easy evaluation of a load record (load.name, load.source, load.address) // main feature is source maps support handling var curSystem; function exec(load) { var loader = this; // support sourceMappingURL (efficiently) var sourceMappingURL; var lastLineIndex = load.source.lastIndexOf('\n'); if (lastLineIndex != -1) { if (load.source.substr(lastLineIndex + 1, 21) == '//# sourceMappingURL=') { sourceMappingURL = load.source.substr(lastLineIndex + 22, load.source.length - lastLineIndex - 22); if (typeof toAbsoluteURL != 'undefined') sourceMappingURL = toAbsoluteURL(load.address, sourceMappingURL); } } __eval(load.source, load.address, sourceMappingURL); } loader.__exec = exec; function dedupe(deps) { var newDeps = []; for (var i = 0, l = deps.length; i < l; i++) if (indexOf.call(newDeps, deps[i]) == -1) newDeps.push(deps[i]) return newDeps; } /* * There are two variations of System.register: * 1. System.register for ES6 conversion (2-3 params) - System.register([name, ]deps, declare) * see https://github.com/ModuleLoader/es6-module-loader/wiki/System.register-Explained * * 2. System.register for dynamic modules (3-4 params) - System.register([name, ]deps, executingRequire, execute) * the true or false statement * * this extension implements the linking algorithm for the two variations identical to the spec * allowing compiled ES6 circular references to work alongside AMD and CJS circular references. * */ // loader.register sets loader.defined for declarative modules var anonRegister; var calledRegister; function registerModule(name, deps, declare, execute) { if (typeof name != 'string') { execute = declare; declare = deps; deps = name; name = null; } calledRegister = true; var register; // dynamic if (typeof declare == 'boolean') { register = { declarative: false, deps: deps, execute: execute, executingRequire: declare }; } else { // ES6 declarative register = { declarative: true, deps: deps, declare: declare }; } // named register if (name) { register.name = name; // we never overwrite an existing define if (!(name in loader.defined)) loader.defined[name] = register; } // anonymous register else if (register.declarative) { if (anonRegister) throw new TypeError('Multiple anonymous System.register calls in the same module file.'); anonRegister = register; } } /* * Registry side table - loader.defined * Registry Entry Contains: * - name * - deps * - declare for declarative modules * - execute for dynamic modules, different to declarative execute on module * - executingRequire indicates require drives execution for circularity of dynamic modules * - declarative optional boolean indicating which of the above * * Can preload modules directly on System.defined['my/module'] = { deps, execute, executingRequire } * * Then the entry gets populated with derived information during processing: * - normalizedDeps derived from deps, created in instantiate * - groupIndex used by group linking algorithm * - evaluated indicating whether evaluation has happend * - module the module record object, containing: * - exports actual module exports * * Then for declarative only we track dynamic bindings with the records: * - name * - setters declarative setter functions * - exports actual module values * - dependencies, module records of dependencies * - importers, module records of dependents * * After linked and evaluated, entries are removed, declarative module records remain in separate * module binding table * */ function defineRegister(loader) { if (loader.register) return; loader.register = registerModule; if (!loader.defined) loader.defined = {}; // script injection mode calls this function synchronously on load var onScriptLoad = loader.onScriptLoad; loader.onScriptLoad = function(load) { onScriptLoad(load); // anonymous define if (anonRegister) load.metadata.entry = anonRegister; if (calledRegister) { load.metadata.format = load.metadata.format || 'register'; load.metadata.registered = true; } } } defineRegister(loader); function buildGroups(entry, loader, groups) { groups[entry.groupIndex] = groups[entry.groupIndex] || []; if (indexOf.call(groups[entry.groupIndex], entry) != -1) return; groups[entry.groupIndex].push(entry); for (var i = 0, l = entry.normalizedDeps.length; i < l; i++) { var depName = entry.normalizedDeps[i]; var depEntry = loader.defined[depName]; // not in the registry means already linked / ES6 if (!depEntry || depEntry.evaluated) continue; // now we know the entry is in our unlinked linkage group var depGroupIndex = entry.groupIndex + (depEntry.declarative != entry.declarative); // the group index of an entry is always the maximum if (depEntry.groupIndex === undefined || depEntry.groupIndex < depGroupIndex) { // if already in a group, remove from the old group if (depEntry.groupIndex !== undefined) { groups[depEntry.groupIndex].splice(indexOf.call(groups[depEntry.groupIndex], depEntry), 1); // if the old group is empty, then we have a mixed depndency cycle if (groups[depEntry.groupIndex].length == 0) throw new TypeError("Mixed dependency cycle detected"); } depEntry.groupIndex = depGroupIndex; } buildGroups(depEntry, loader, groups); } } function link(name, loader) { var startEntry = loader.defined[name]; // skip if already linked if (startEntry.module) return; startEntry.groupIndex = 0; var groups = []; buildGroups(startEntry, loader, groups); var curGroupDeclarative = !!startEntry.declarative == groups.length % 2; for (var i = groups.length - 1; i >= 0; i--) { var group = groups[i]; for (var j = 0; j < group.length; j++) { var entry = group[j]; // link each group if (curGroupDeclarative) linkDeclarativeModule(entry, loader); else linkDynamicModule(entry, loader); } curGroupDeclarative = !curGroupDeclarative; } } // module binding records var moduleRecords = {}; function getOrCreateModuleRecord(name) { return moduleRecords[name] || (moduleRecords[name] = { name: name, dependencies: [], exports: {}, // start from an empty module and extend importers: [] }) } function linkDeclarativeModule(entry, loader) { // only link if already not already started linking (stops at circular) if (entry.module) return; var module = entry.module = getOrCreateModuleRecord(entry.name); var exports = entry.module.exports; var declaration = entry.declare.call(loader.global, function(name, value) { module.locked = true; exports[name] = value; for (var i = 0, l = module.importers.length; i < l; i++) { var importerModule = module.importers[i]; if (!importerModule.locked) { var importerIndex = indexOf.call(importerModule.dependencies, module); importerModule.setters[importerIndex](exports); } } module.locked = false; return value; }); module.setters = declaration.setters; module.execute = declaration.execute; if (!module.setters || !module.execute) { throw new TypeError('Invalid System.register form for ' + entry.name); } // now link all the module dependencies for (var i = 0, l = entry.normalizedDeps.length; i < l; i++) { var depName = entry.normalizedDeps[i]; var depEntry = loader.defined[depName]; var depModule = moduleRecords[depName]; // work out how to set depExports based on scenarios... var depExports; if (depModule) { depExports = depModule.exports; } // dynamic, already linked in our registry else if (depEntry && !depEntry.declarative) { if (depEntry.module.exports && depEntry.module.exports.__esModule) depExports = depEntry.module.exports; else depExports = { 'default': depEntry.module.exports, '__useDefault': true }; } // in the loader registry else if (!depEntry) { depExports = loader.get(depName); } // we have an entry -> link else { linkDeclarativeModule(depEntry, loader); depModule = depEntry.module; depExports = depModule.exports; } // only declarative modules have dynamic bindings if (depModule && depModule.importers) { depModule.importers.push(module); module.dependencies.push(depModule); } else { module.dependencies.push(null); } // run the setter for this dependency if (module.setters[i]) module.setters[i](depExports); } } // An analog to loader.get covering execution of all three layers (real declarative, simulated declarative, simulated dynamic) function getModule(name, loader) { var exports; var entry = loader.defined[name]; if (!entry) { exports = loader.get(name); if (!exports) throw new Error('Unable to load dependency ' + name + '.'); } else { if (entry.declarative) ensureEvaluated(name, [], loader); else if (!entry.evaluated) linkDynamicModule(entry, loader); exports = entry.module.exports; } if ((!entry || entry.declarative) && exports && exports.__useDefault) return exports['default']; return exports; } function linkDynamicModule(entry, loader) { if (entry.module) return; var exports = {}; var module = entry.module = { exports: exports, id: entry.name }; // AMD requires execute the tree first if (!entry.executingRequire) { for (var i = 0, l = entry.normalizedDeps.length; i < l; i++) { var depName = entry.normalizedDeps[i]; // we know we only need to link dynamic due to linking algorithm var depEntry = loader.defined[depName]; if (depEntry) linkDynamicModule(depEntry, loader); } } // now execute entry.evaluated = true; var output = entry.execute.call(loader.global, function(name) { for (var i = 0, l = entry.deps.length; i < l; i++) { if (entry.deps[i] != name) continue; return getModule(entry.normalizedDeps[i], loader); } throw new TypeError('Module ' + name + ' not declared as a dependency.'); }, exports, module); if (output) module.exports = output; } /* * Given a module, and the list of modules for this current branch, * ensure that each of the dependencies of this module is evaluated * (unless one is a circular dependency already in the list of seen * modules, in which case we execute it) * * Then we evaluate the module itself depth-first left to right * execution to match ES6 modules */ function ensureEvaluated(moduleName, seen, loader) { var entry = loader.defined[moduleName]; // if already seen, that means it's an already-evaluated non circular dependency if (!entry || entry.evaluated || !entry.declarative) return; // this only applies to declarative modules which late-execute seen.push(moduleName); for (var i = 0, l = entry.normalizedDeps.length; i < l; i++) { var depName = entry.normalizedDeps[i]; if (indexOf.call(seen, depName) == -1) { if (!loader.defined[depName]) loader.get(depName); else ensureEvaluated(depName, seen, loader); } } if (entry.evaluated) return; entry.evaluated = true; entry.module.execute.call(loader.global); } // override the delete method to also clear the register caches var loaderDelete = loader['delete']; loader['delete'] = function(name) { delete moduleRecords[name]; return loaderDelete.call(this, name); }; var registerRegEx = /System\.register/; var loaderFetch = loader.fetch; loader.fetch = function(load) { var loader = this; defineRegister(loader); if (loader.defined[load.name]) { load.metadata.format = 'defined'; return ''; } anonRegister = null; calledRegister = false; // the above get picked up by onScriptLoad return loaderFetch.call(loader, load); } var loaderTranslate = loader.translate; loader.translate = function(load) { this.register = registerModule; this.__exec = exec; load.metadata.deps = load.metadata.deps || []; // we run the meta detection here (register is after meta) return Promise.resolve(loaderTranslate.call(this, load)).then(function(source) { // dont run format detection for globals shimmed // ideally this should be in the global extension, but there is // currently no neat way to separate it if (load.metadata.init || load.metadata.exports) load.metadata.format = load.metadata.format || 'global'; // run detection for register format if (load.metadata.format == 'register' || !load.metadata.format && load.source.match(registerRegEx)) load.metadata.format = 'register'; return source; }); } var loaderInstantiate = loader.instantiate; loader.instantiate = function(load) { var loader = this; var entry; // first we check if this module has already been defined in the registry if (loader.defined[load.name]) { entry = loader.defined[load.name]; entry.deps = entry.deps.concat(load.metadata.deps); } // picked up already by a script injection else if (load.metadata.entry) entry = load.metadata.entry; // otherwise check if it is dynamic else if (load.metadata.execute) { entry = { declarative: false, deps: load.metadata.deps || [], execute: load.metadata.execute, executingRequire: load.metadata.executingRequire // NodeJS-style requires or not }; } // Contains System.register calls else if (load.metadata.format == 'register') { anonRegister = null; calledRegister = false; var curSystem = loader.global.System; loader.global.System = loader; loader.__exec(load); loader.global.System = curSystem; if (anonRegister) entry = anonRegister; else load.metadata.bundle = true; if (!entry && System.defined[load.name]) entry = System.defined[load.name]; if (!calledRegister && !load.metadata.registered) throw new TypeError(load.name + ' detected as System.register but didn\'t execute.'); } // named bundles are just an empty module if (!entry && load.metadata.format != 'es6') return { deps: load.metadata.deps, execute: function() { return loader.newModule({}); } }; // place this module onto defined for circular references if (entry) loader.defined[load.name] = entry; // no entry -> treat as ES6 else return loaderInstantiate.call(this, load); entry.deps = dedupe(entry.deps); entry.name = load.name; // first, normalize all dependencies var normalizePromises = []; for (var i = 0, l = entry.deps.length; i < l; i++) normalizePromises.push(Promise.resolve(loader.normalize(entry.deps[i], load.name))); return Promise.all(normalizePromises).then(function(normalizedDeps) { entry.normalizedDeps = normalizedDeps; return { deps: entry.deps, execute: function() { // recursively ensure that the module and all its // dependencies are linked (with dependency group handling) link(load.name, loader); // now handle dependency execution in correct order ensureEvaluated(load.name, [], loader); // remove from the registry loader.defined[load.name] = undefined; var module = entry.module.exports; if (!module || !entry.declarative && module.__esModule !== true) module = { 'default': module, __useDefault: true }; // return the defined module object return loader.newModule(module); } }; }); } } /* * Extension to detect ES6 and auto-load Traceur or Babel for processing */ function es6(loader) { loader._extensions.push(es6); // good enough ES6 detection regex - format detections not designed to be accurate, but to handle the 99% use case var es6RegEx = /(^\s*|[}\);\n]\s*)(import\s+(['"]|(\*\s+as\s+)?[^"'\(\)\n;]+\s+from\s+['"]|\{)|export\s+\*\s+from\s+["']|export\s+(\{|default|function|class|var|const|let|async\s+function))/; var traceurRuntimeRegEx = /\$traceurRuntime\s*\./; var babelHelpersRegEx = /babelHelpers\s*\./; var transpilerNormalized, transpilerRuntimeNormalized; var firstLoad = true; var nodeResolver = typeof process != 'undefined' && typeof require != 'undefined' && require.resolve; function configNodeGlobal(loader, module, nodeModule, wilcardDummy) { loader.meta = loader.meta || {}; var meta = loader.meta[module] = loader.meta[module] || {}; meta.format = meta.format || 'global'; if (!loader.paths[module]) { var path = resolvePath(nodeModule, wilcardDummy); if (path) { loader.paths[module] = path; } } } function resolvePath(nodeModule, wildcard) { if (nodeResolver) { var ext = wildcard ? '/package.json' : ''; try { var match = nodeResolver(nodeModule + ext); return 'file:' + match.substr(0, match.length - ext.length) + (wildcard ? '/*.js' : ''); } catch(e) {} } } var loaderLocate = loader.locate; loader.locate = function(load) { var self = this; if (firstLoad) { if (self.transpiler == 'traceur') { configNodeGlobal(self, 'traceur', 'traceur/bin/traceur.js'); self.meta['traceur'].exports = 'traceur'; configNodeGlobal(self, 'traceur-runtime', 'traceur/bin/traceur-runtime.js'); } else if (self.transpiler == 'babel') { configNodeGlobal(self, 'babel', 'babel-core/browser.js'); configNodeGlobal(self, 'babel/external-helpers', 'babel-core/external-helpers.js'); configNodeGlobal(self, 'babel-runtime/*', 'babel-runtime', true); } firstLoad = false; } return loaderLocate.call(self, load); }; var loaderTranslate = loader.translate; loader.translate = function(load) { var loader = this; return loaderTranslate.call(loader, load) .then(function(source) { // detect ES6 if (load.metadata.format == 'es6' || !load.metadata.format && source.match(es6RegEx)) { load.metadata.format = 'es6'; return source; } if (load.metadata.format == 'register') { if (!loader.global.$traceurRuntime && load.source.match(traceurRuntimeRegEx)) { return loader['import']('traceur-runtime').then(function() { return source; }); } if (!loader.global.babelHelpers && load.source.match(babelHelpersRegEx)) { return loader['import']('babel/external-helpers').then(function() { return source; }); } } // ensure Traceur doesn't clobber the System global if (loader.transpiler == 'traceur') return Promise.all([ transpilerNormalized || (transpilerNormalized = loader.normalize(loader.transpiler)), transpilerRuntimeNormalized || (transpilerRuntimeNormalized = loader.normalize(loader.transpiler + '-runtime')) ]) .then(function(normalized) { if (load.name == normalized[0] || load.name == normalized[1]) return '(function() { var curSystem = System; ' + source + '\nSystem = curSystem; })();'; return source; }); return source; }); }; } /* SystemJS Global Format Supports metadata.deps metadata.init metadata.exports Also detects writes to the global object avoiding global collisions. See the SystemJS readme global support section for further information. */ function global(loader) { loader._extensions.push(global); function readGlobalProperty(p, value) { var pParts = p.split('.'); while (pParts.length) value = value[pParts.shift()]; return value; } // bare minimum ignores for IE8 var ignoredGlobalProps = ['sessionStorage', 'localStorage', 'clipboardData', 'frames', 'external']; var hasOwnProperty = Object.prototype.hasOwnProperty; function iterateGlobals(callback) { if (Object.keys) Object.keys(loader.global).forEach(callback); else for (var g in loader.global) { if (!hasOwnProperty.call(loader.global, g)) continue; callback(g); } } function forEachGlobal(callback) { iterateGlobals(function(globalName) { if (indexOf.call(ignoredGlobalProps, globalName) != -1) return; try { var value = loader.global[globalName]; } catch(e) { ignoredGlobalProps.push(globalName); } callback(globalName, value); }); } function createHelpers(loader) { if (loader.has('@@global-helpers')) return; var moduleGlobals = {}; var globalSnapshot; loader.set('@@global-helpers', loader.newModule({ prepareGlobal: function(moduleName, deps) { // first, we add all the dependency modules to the global for (var i = 0; i < deps.length; i++) { var moduleGlobal = moduleGlobals[deps[i]]; if (moduleGlobal) for (var m in moduleGlobal) loader.global[m] = moduleGlobal[m]; } // now store a complete copy of the global object // in order to detect changes globalSnapshot = {}; forEachGlobal(function(name, value) { globalSnapshot[name] = value; }); }, retrieveGlobal: function(moduleName, exportName, init) { var singleGlobal; var multipleExports; var exports = {}; // run init if (init) singleGlobal = init.call(loader.global); // check for global changes, creating the globalObject for the module // if many globals, then a module object for those is created // if one global, then that is the module directly else if (exportName) { var firstPart = exportName.split('.')[0]; singleGlobal = readGlobalProperty(exportName, loader.global); exports[firstPart] = loader.global[firstPart]; } else { forEachGlobal(function(name, value) { if (globalSnapshot[name] === value) return; if (typeof value === 'undefined') return; exports[name] = value; if (typeof singleGlobal !== 'undefined') { if (!multipleExports && singleGlobal !== value) multipleExports = true; } else { singleGlobal = value; } }); } moduleGlobals[moduleName] = exports; return multipleExports ? exports : singleGlobal; } })); } createHelpers(loader); var loaderInstantiate = loader.instantiate; loader.instantiate = function(load) { var loader = this; createHelpers(loader); var exportName = load.metadata.exports; if (!load.metadata.format) load.metadata.format = 'global'; // global is a fallback module format if (load.metadata.format == 'global') { load.metadata.execute = function(require, exports, module) { loader.get('@@global-helpers').prepareGlobal(module.id, load.metadata.deps); if (exportName) load.source += $__globalName + '["' + exportName + '"] = ' + exportName + ';'; // disable module detection var define = loader.global.define; var require = loader.global.require; loader.global.define = undefined; loader.global.module = undefined; loader.global.exports = undefined; loader.__exec(load); loader.global.require = require; loader.global.define = define; return loader.get('@@global-helpers').retrieveGlobal(module.id, exportName, load.metadata.init); } } return loaderInstantiate.call(loader, load); } } /* SystemJS CommonJS Format */ function cjs(loader) { loader._extensions.push(cjs); // CJS Module Format // require('...') || exports[''] = ... || exports.asd = ... || module.exports = ... var cjsExportsRegEx = /(?:^\uFEFF?|[^$_a-zA-Z\xA0-\uFFFF.]|module\.)exports\s*(\[['"]|\.)|(?:^\uFEFF?|[^$_a-zA-Z\xA0-\uFFFF.])module\.exports\s*[=,]/; // RegEx adjusted from https://github.com/jbrantly/yabble/blob/master/lib/yabble.js#L339 var cjsRequireRegEx = /(?:^\uFEFF?|[^$_a-zA-Z\xA0-\uFFFF."'])require\s*\(\s*("[^"\\]*(?:\\.[^"\\]*)*"|'[^'\\]*(?:\\.[^'\\]*)*')\s*\)/g; var commentRegEx = /(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/mg; function getCJSDeps(source) { cjsRequireRegEx.lastIndex = 0; var deps = []; // remove comments from the source first, if not minified if (source.length / source.split('\n').length < 200) source = source.replace(commentRegEx, ''); var match; while (match = cjsRequireRegEx.exec(source)) deps.push(match[1].substr(1, match[1].length - 2)); return deps; } if (typeof location != 'undefined' && location.origin) var curOrigin = location.protocol + '//' + location.hostname + (location.port ? ':' + location.port : ''); var loaderInstantiate = loader.instantiate; loader.instantiate = function(load) { if (!load.metadata.format) { cjsExportsRegEx.lastIndex = 0; cjsRequireRegEx.lastIndex = 0; if (cjsRequireRegEx.exec(load.source) || cjsExportsRegEx.exec(load.source)) load.metadata.format = 'cjs'; } if (load.metadata.format == 'cjs') { load.metadata.deps = load.metadata.deps ? load.metadata.deps.concat(getCJSDeps(load.source)) : getCJSDeps(load.source); load.metadata.executingRequire = true; load.metadata.execute = function(require, exports, module) { var dirname = (load.address || '').split('/'); dirname.pop(); dirname = dirname.join('/'); var address = load.address; if (curOrigin && address.substr(0, curOrigin.length) === curOrigin) { address = address.substr(curOrigin.length); dirname = dirname.substr(curOrigin.length); } else if (address.substr(0, 5) == 'file:') { address = address.substr(5); dirname = dirname.substr(5); } // if on the server, remove the "file:" part from the dirname if (System._nodeRequire) dirname = dirname.substr(5); var globals = loader.global._g = { global: loader.global, exports: exports, module: module, require: require, __filename: address, __dirname: dirname }; var source = '(function(global, exports, module, require, __filename, __dirname) { ' + load.source + '\n}).call(_g.exports, _g.global, _g.exports, _g.module, _g.require, _g.__filename, _g.__dirname);'; // disable AMD detection var define = loader.global.define; loader.global.define = undefined; loader.__exec({ name: load.name, address: load.address, source: source }); loader.global.define = define; loader.global._g = undefined; } } return loaderInstantiate.call(this, load); }; } /* SystemJS AMD Format Provides the AMD module format definition at System.format.amd as well as a RequireJS-style require on System.require */ function amd(loader) { // by default we only enforce AMD noConflict mode in Node var isNode = typeof module != 'undefined' && module.exports; loader._extensions.push(amd); // AMD Module Format Detection RegEx // define([.., .., ..], ...) // define(varName); || define(function(require, exports) {}); || define({}) var amdRegEx = /(?:^\uFEFF?|[^$_a-zA-Z\xA0-\uFFFF.])define\s*\(\s*("[^"]+"\s*,\s*|'[^']+'\s*,\s*)?\s*(\[(\s*(("[^"]+"|'[^']+')\s*,|\/\/.*\r?\n|\/\*(.|\s)*?\*\/))*(\s*("[^"]+"|'[^']+')\s*,?)?(\s*(\/\/.*\r?\n|\/\*(.|\s)*?\*\/))*\s*\]|function\s*|{|[_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*\))/; var commentRegEx = /(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/mg; var cjsRequirePre = "(?:^|[^$_a-zA-Z\\xA0-\\uFFFF.])"; var cjsRequirePost = "\\s*\\(\\s*(\"([^\"]+)\"|'([^']+)')\\s*\\)"; var fnBracketRegEx = /\(([^\)]*)\)/; var wsRegEx = /^\s+|\s+$/g; var requireRegExs = {}; function getCJSDeps(source, requireIndex) { // remove comments source = source.replace(commentRegEx, ''); // determine the require alias var params = source.match(fnBracketRegEx); var requireAlias = (params[1].split(',')[requireIndex] || 'require').replace(wsRegEx, ''); // find or generate the regex for this requireAlias var requireRegEx = requireRegExs[requireAlias] || (requireRegExs[requireAlias] = new RegExp(cjsRequirePre + requireAlias + cjsRequirePost, 'g')); requireRegEx.lastIndex = 0; var deps = []; var match; while (match = requireRegEx.exec(source)) deps.push(match[2] || match[3]); return deps; } /* AMD-compatible require To copy RequireJS, set window.require = window.requirejs = loader.amdRequire */ function require(names, callback, errback, referer) { // 'this' is bound to the loader var loader = this; // in amd, first arg can be a config object... we just ignore if (typeof names == 'object' && !(names instanceof Array)) return require.apply(null, Array.prototype.splice.call(arguments, 1, arguments.length - 1)); // amd require if (names instanceof Array) { var dynamicRequires = []; for (var i = 0; i < names.length; i++) dynamicRequires.push(loader['import'](names[i], referer)); Promise.all(dynamicRequires).then(function(modules) { if(callback) { callback.apply(null, modules); } }, errback); } // commonjs require else if (typeof names == 'string') { var module = loader.get(names); return module.__useDefault ? module['default'] : module; } else throw new TypeError('Invalid require'); }; loader.amdRequire = function() { return require.apply(this, arguments); }; function makeRequire(parentName, staticRequire, loader) { return function(names, callback, errback) { if (typeof names == 'string') { if (typeof callback === 'function') names = [names]; else return staticRequire(names); } return require.call(loader, names, callback, errback, { name: parentName }); } } // run once per loader function generateDefine(loader) { // script injection mode calls this function synchronously on load var onScriptLoad = loader.onScriptLoad; loader.onScriptLoad = function(load) { onScriptLoad(load); if (anonDefine || defineBundle) { load.metadata.format = 'defined'; load.metadata.registered = true; } if (anonDefine) { load.metadata.deps = load.metadata.deps ? load.metadata.deps.concat(anonDefine.deps) : anonDefine.deps; load.metadata.execute = anonDefine.execute; } } function define(name, deps, factory) { if (typeof name != 'string') { factory = deps; deps = name; name = null; } if (!(deps instanceof Array)) { factory = deps; deps = ['require', 'exports', 'module']; } if (typeof factory != 'function') factory = (function(factory) { return function() { return factory; } })(factory); // in IE8, a trailing comma becomes a trailing undefined entry if (deps[deps.length - 1] === undefined) deps.pop(); // remove system dependencies var requireIndex, exportsIndex, moduleIndex; if ((requireIndex = indexOf.call(deps, 'require')) != -1) { deps.splice(requireIndex, 1); var factoryText = factory.toString(); deps = deps.concat(getCJSDeps(factoryText, requireIndex)); } if ((exportsIndex = indexOf.call(deps, 'exports')) != -1) deps.splice(exportsIndex, 1); if ((moduleIndex = indexOf.call(deps, 'module')) != -1) deps.splice(moduleIndex, 1); var define = { deps: deps, execute: function(require, exports, module) { var depValues = []; for (var i = 0; i < deps.length; i++) depValues.push(require(deps[i])); module.uri = loader.baseURL + module.id; module.config = function() {}; // add back in system dependencies if (moduleIndex != -1) depValues.splice(moduleIndex, 0, module); if (exportsIndex != -1) depValues.splice(exportsIndex, 0, exports); if (requireIndex != -1) depValues.splice(requireIndex, 0, makeRequire(module.id, require, loader)); // set global require to AMD require var curRequire = global.require; global.require = System.amdRequire; var output = factory.apply(global, depValues); global.require = curRequire; if (typeof output == 'undefined' && module) output = module.exports; if (typeof output != 'undefined') return output; } }; // anonymous define if (!name) { // already defined anonymously -> throw if (anonDefine) throw new TypeError('Multiple defines for anonymous module'); anonDefine = define; } // named define else { // if it has no dependencies and we don't have any other // defines, then let this be an anonymous define if (deps.length == 0 && !anonDefine && !defineBundle) anonDefine = define; // otherwise its a bundle only else anonDefine = null; // the above is just to support single modules of the form: // define('jquery') // still loading anonymously // because it is done widely enough to be useful // note this is now a bundle defineBundle = true; // define the module through the register registry loader.register(name, define.deps, false, define.execute); } }; define.amd = {}; loader.amdDefine = define; } var anonDefine; // set to true if the current module turns out to be a named define bundle var defineBundle; var oldModule, oldExports, oldDefine; // adds define as a global (potentially just temporarily) function createDefine(loader) { if (!loader.amdDefine) generateDefine(loader); anonDefine = null; defineBundle = null; // ensure no NodeJS environment detection var global = loader.global; oldModule = global.module; oldExports = global.exports; oldDefine = global.define; global.module = undefined; global.exports = undefined; if (global.define && global.define === loader.amdDefine) return; global.define = loader.amdDefine; } function removeDefine(loader) { var global = loader.global; global.define = oldDefine; global.module = oldModule; global.exports = oldExports; } generateDefine(loader); if (loader.scriptLoader) { var loaderFetch = loader.fetch; loader.fetch = function(load) { createDefine(this); return loaderFetch.call(this, load); } } var loaderInstantiate = loader.instantiate; loader.instantiate = function(load) { var loader = this; if (load.metadata.format == 'amd' || !load.metadata.format && load.source.match(amdRegEx)) { load.metadata.format = 'amd'; if (loader.execute !== false) { createDefine(loader); loader.__exec(load); removeDefine(loader); if (!anonDefine && !defineBundle && !isNode) throw new TypeError('AMD module ' + load.name + ' did not define'); } if (anonDefine) { load.metadata.deps = load.metadata.deps ? load.metadata.deps.concat(anonDefine.deps) : anonDefine.deps; load.metadata.execute = anonDefine.execute; } } return loaderInstantiate.call(loader, load); } } /* SystemJS map support Provides map configuration through System.map['jquery'] = 'some/module/map' As well as contextual map config through System.map['bootstrap'] = { jquery: 'some/module/map2' } Note that this applies for subpaths, just like RequireJS jquery -> 'some/module/map' jquery/path -> 'some/module/map/path' bootstrap -> 'bootstrap' Inside any module name of the form 'bootstrap' or 'bootstrap/*' jquery -> 'some/module/map2' jquery/p -> 'some/module/map2/p' Maps are carefully applied from most specific contextual map, to least specific global map */ function map(loader) { loader.map = loader.map || {}; loader._extensions.push(map); // return if prefix parts (separated by '/') match the name // eg prefixMatch('jquery/some/thing', 'jquery') -> true // prefixMatch('jqueryhere/', 'jquery') -> false function prefixMatch(name, prefix) { if (name.length < prefix.length) return false; if (name.substr(0, prefix.length) != prefix) return false; if (name[prefix.length] && name[prefix.length] != '/') return false; return true; } // get the depth of a given path // eg pathLen('some/name') -> 2 function pathLen(name) { var len = 1; for (var i = 0, l = name.length; i < l; i++) if (name[i] === '/') len++; return len; } function doMap(name, matchLen, map) { return map + name.substr(matchLen); } // given a relative-resolved module name and normalized parent name, // apply the map configuration function applyMap(name, parentName, loader) { var curMatch, curMatchLength = 0; var curParent, curParentMatchLength = 0; var tmpParentLength, tmpPrefixLength; var subPath; var nameParts; // first find most specific contextual match if (parentName) { for (var p in loader.map) { var curMap = loader.map[p]; if (typeof curMap != 'object') continue; // most specific parent match wins first if (!prefixMatch(parentName, p)) continue; tmpParentLength = pathLen(p); if (tmpParentLength <= curParentMatchLength) continue; for (var q in curMap) { // most specific name match wins if (!prefixMatch(name, q)) continue; tmpPrefixLength = pathLen(q); if (tmpPrefixLength <= curMatchLength) continue; curMatch = q; curMatchLength = tmpPrefixLength; curParent = p; curParentMatchLength = tmpParentLength; } } } // if we found a contextual match, apply it now if (curMatch) return doMap(name, curMatch.length, loader.map[curParent][curMatch]); // now do the global map for (var p in loader.map) { var curMap = loader.map[p]; if (typeof curMap != 'string') continue; if (!prefixMatch(name, p)) continue; var tmpPrefixLength = pathLen(p); if (tmpPrefixLength <= curMatchLength) continue; curMatch = p; curMatchLength = tmpPrefixLength; } if (curMatch) return doMap(name, curMatch.length, l