/** * Copyright 2018 Google Inc. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2.0 * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // If the loader is already loaded, just stop. if (!self.<%- amdFunctionName %>) { const singleRequire = name => { if (name !== 'require') { name = name + '.js'; } let promise = Promise.resolve(); if (!registry[name]) { <% if (useEval) { %> promise = fetch(name) .then(resp => resp.text()) .then(code => eval(code)); <% } else { %> promise = new Promise(async resolve => { if ("document" in self) { const script = document.createElement("script"); script.src = name; document.head.appendChild(script); script.onload = resolve; } else { importScripts(name); resolve(); } }); <% } %> } return promise.then(() => { if (!registry[name]) { throw new Error(`Module ${name} didn’t register its module`); } return registry[name]; }); }; const require = (names, resolve) => { Promise.all(names.map(singleRequire)) .then(modules => resolve(modules.length === 1 ? modules[0] : modules)); }; const registry = { require: Promise.resolve(require) }; self.<%- amdFunctionName %> = (moduleName, depsNames, factory) => { if (registry[moduleName]) { // Module is already loading or loaded. return; } registry[moduleName] = Promise.resolve().then(() => { let exports = {}; const module = { uri: location.origin + moduleName.slice(1) }; return Promise.all( depsNames.map(depName => { switch(depName) { case "exports": return exports; case "module": return module; default: return singleRequire(depName); } }) ).then(deps => { const facValue = factory(...deps); if(!exports.default) { exports.default = facValue; } return exports; }); }); }; }