| 13 | import {setScriptSrc} from './setScriptSrc.js'; |
| 14 | |
| 15 | export const bootstrap = bootstrapParams => { |
| 16 | var bootstrapPromise; |
| 17 | var script; |
| 18 | var bootstrapParamsKey; |
| 19 | var PRODUCT_NAME = "The Google Maps JavaScript API"; |
| 20 | var GOOGLE = "google"; |
| 21 | var IMPORT_API_NAME = "importLibrary"; |
| 22 | var PENDING_BOOTSTRAP_KEY = "__ib__"; |
| 23 | var doc = document; |
| 24 | var global_ = window; |
| 25 | var google_ = global_[GOOGLE] || (global_[GOOGLE] = {}); |
| 26 | var namespace = google_.maps || (google_.maps = {}); |
| 27 | var libraries = new Set(); |
| 28 | var searchParams = new URLSearchParams(); |
| 29 | var triggerBootstrap = () => bootstrapPromise || (bootstrapPromise = new Promise(async(resolve, reject) => { |
| 30 | await (script = doc.createElement("script")); |
| 31 | searchParams.set("libraries", [...libraries] + ""); |
| 32 | for (bootstrapParamsKey in bootstrapParams) { |
| 33 | searchParams.set(bootstrapParamsKey.replace(/[A-Z]/g, g => "_" + g[0].toLowerCase()), bootstrapParams[bootstrapParamsKey]); |
| 34 | } |
| 35 | searchParams.set("callback", GOOGLE + ".maps." + PENDING_BOOTSTRAP_KEY); |
| 36 | setScriptSrc(script, "https://maps.googleapis.com/maps/api/js?" + searchParams); |
| 37 | namespace[PENDING_BOOTSTRAP_KEY] = resolve; |
| 38 | script.onerror = () => bootstrapPromise = reject(Error(PRODUCT_NAME + " could not load.")); |
| 39 | script.nonce = doc.querySelector("script[nonce]")?.nonce || ""; |
| 40 | doc.head.append(script); |
| 41 | })); |
| 42 | namespace[IMPORT_API_NAME] ? console.warn(PRODUCT_NAME + " only loads once. Ignoring:", bootstrapParams) : namespace[IMPORT_API_NAME] = (libraryName, ...args) => libraries.add(libraryName) && triggerBootstrap().then(() => namespace[IMPORT_API_NAME](libraryName, ...args)); |
| 43 | }; |
no test coverage detected
searching dependent graphs…