UNPKG

@web3r/flowerkit

Version:

A collection of more than 60 often used utility JS functions that simplify frontend development.

24 lines (23 loc) 1.98 kB
import ow from"ow";import{getDocument}from"ssr-window";import{isNode}from"../../dom/isNode/index.js"; /** * Gets result of appending an async external script into the page * @param props{Object=} - options * @param props.isAsync{Boolean=} - `async` attribute * @param props.isDefer{Boolean=} - `defer` attribute * @param props.src{String} - script source * @param props.appendTo{Node|HTMLElement=} - element for script appending * @param props.id{String=} - ID for script * @param props.crossorigin{String=} - `crossorigin` attribute * @param props.type{String=} - `type` attribute * @return {Promise} * @example * // How to load external CDN script asynchronously? * getExternalScript({ * src: "https://ajax.googleapis.com/ajax/libs/d3js/7.8.5/d3.min.js", * id: "d3" * }) * .then((script) => { * console.log("Script is loaded"); * }); */const getExternalScript=(props={})=>{ow(props,ow.object.exactShape({isAsync:ow.optional.boolean,isDefer:ow.optional.boolean,src:ow.string.not.empty,type:ow.optional.string.not.empty,appendTo:ow.optional.object.validate((value=>({validator:isNode(value),message:()=>`The object must be node`}))),id:ow.optional.string.not.empty,crossorigin:ow.optional.string.not.empty}));const{isAsync:isAsync=true,isDefer:isDefer=false,src:src="",type:type,appendTo:appendTo=getDocument().body,id:id="",crossorigin:crossorigin}=props;return new Promise(((resolve,reject)=>{let isReady=false;const script=getDocument().createElement("script");script.src=src;script.async=isAsync;script.defer=isDefer;if(id)script.id=id;if(crossorigin)script.crossorigin=crossorigin;if(type)script.type=type;script.onerror=err=>{reject(err);script.onerror=null};script.onload=script.onreadystatechange=function(){if(!isReady&&(!this.readyState||this.readyState==="complete")){isReady=true;resolve(script);script.onload=null;script.onerror=null}};appendTo.appendChild(script)}))};export{getExternalScript}; //# sourceMappingURL=index.js.map