"use strict";exports.__esModule=true;exports.execOnce=execOnce;exports.getLocationOrigin=getLocationOrigin;exports.getURL=getURL;exports.getDisplayName=getDisplayName;exports.isResSent=isResSent;exports.loadGetInitialProps=loadGetInitialProps;exports.formatWithValidation=formatWithValidation;exports.ST=exports.SP=exports.urlObjectKeys=void 0;var _formatUrl=require("./router/utils/format-url");/**
 * Utils
 */function execOnce(fn){let used=false;let result;return(...args)=>{if(!used){used=true;result=fn(...args);}return result;};}function getLocationOrigin(){const{protocol,hostname,port}=window.location;return`${protocol}//${hostname}${port?':'+port:''}`;}function getURL(){const{href}=window.location;const origin=getLocationOrigin();return href.substring(origin.length);}function getDisplayName(Component){return typeof Component==='string'?Component:Component.displayName||Component.name||'Unknown';}function isResSent(res){return res.finished||res.headersSent;}async function loadGetInitialProps(App,ctx){if(process.env.NODE_ENV!=='production'){var _App$prototype;if((_App$prototype=App.prototype)!=null&&_App$prototype.getInitialProps){const message=`"${getDisplayName(App)}.getInitialProps()" is defined as an instance method - visit https://nextjs.org/docs/messages/get-initial-props-as-an-instance-method for more information.`;throw new Error(message);}}// when called from _app `ctx` is nested in `ctx`
const res=ctx.res||ctx.ctx&&ctx.ctx.res;if(!App.getInitialProps){if(ctx.ctx&&ctx.Component){// @ts-ignore pageProps default
return{pageProps:await loadGetInitialProps(ctx.Component,ctx.ctx)};}return{};}const props=await App.getInitialProps(ctx);if(res&&isResSent(res)){return props;}if(!props){const message=`"${getDisplayName(App)}.getInitialProps()" should resolve to an object. But found "${props}" instead.`;throw new Error(message);}if(process.env.NODE_ENV!=='production'){if(Object.keys(props).length===0&&!ctx.ctx){console.warn(`${getDisplayName(App)} returned an empty object from \`getInitialProps\`. This de-optimizes and prevents automatic static optimization. https://nextjs.org/docs/messages/empty-object-getInitialProps`);}}return props;}const urlObjectKeys=['auth','hash','host','hostname','href','path','pathname','port','protocol','query','search','slashes'];exports.urlObjectKeys=urlObjectKeys;function formatWithValidation(url){if(process.env.NODE_ENV==='development'){if(url!==null&&typeof url==='object'){Object.keys(url).forEach(key=>{if(urlObjectKeys.indexOf(key)===-1){console.warn(`Unknown key passed via urlObject into url.format: ${key}`);}});}}return(0,_formatUrl.formatUrl)(url);}const SP=typeof performance!=='undefined';exports.SP=SP;const ST=SP&&typeof performance.mark==='function'&&typeof performance.measure==='function';exports.ST=ST;
//# sourceMappingURL=utils.js.map