UNPKG

10.6 kBSource Map (JSON)View Raw
1{"version":3,"sources":["../../../next-server/lib/head.tsx"],"names":["defaultHead","inAmpMode","head","push","onlyReactElement","list","child","type","React","Fragment","concat","Children","toArray","props","children","reduce","fragmentList","fragmentChild","METATYPES","unique","keys","Set","tags","metaTypes","metaCategories","h","isUnique","hasKey","key","indexOf","slice","has","add","i","len","length","metatype","hasOwnProperty","category","categories","reduceComponents","headElements","headElement","headElementChildren","reverse","filter","map","c","process","env","NODE_ENV","__NEXT_OPTIMIZE_FONTS","some","url","startsWith","newProps","undefined","cloneElement","Head","ampState","AmpStateContext","headManager","HeadManagerContext"],"mappings":"4FAAA,qDACA,iEACA,yCACA,0DACA,0B,w4BAMO,QAASA,CAAAA,WAAT,CAAqBC,SAAS,CAAG,KAAjC,CAAuD,CAC5D,KAAMC,CAAAA,IAAI,CAAG,cAAC,qCAAM,OAAO,CAAC,OAAd,EAAD,CAAb,CACA,GAAI,CAACD,SAAL,CAAgB,CACdC,IAAI,CAACC,IAAL,cAAU,qCAAM,IAAI,CAAC,UAAX,CAAsB,OAAO,CAAC,oBAA9B,EAAV,EACD,CACD,MAAOD,CAAAA,IAAP,CACD,CAED,QAASE,CAAAA,gBAAT,CACEC,IADF,CAEEC,KAFF,CAGkC,CAChC;AACA,GAAI,MAAOA,CAAAA,KAAP,GAAiB,QAAjB,EAA6B,MAAOA,CAAAA,KAAP,GAAiB,QAAlD,CAA4D,CAC1D,MAAOD,CAAAA,IAAP,CACD,CACD;AACA,GAAIC,KAAK,CAACC,IAAN,GAAeC,eAAMC,QAAzB,CAAmC,CACjC,MAAOJ,CAAAA,IAAI,CAACK,MAAL,CACLF,eAAMG,QAAN,CAAeC,OAAf,CAAuBN,KAAK,CAACO,KAAN,CAAYC,QAAnC,EAA6CC,MAA7C,CACE,CACEC,YADF,CAEEC,aAFF,GAGqC,CACnC,GACE,MAAOA,CAAAA,aAAP,GAAyB,QAAzB,EACA,MAAOA,CAAAA,aAAP,GAAyB,QAF3B,CAGE,CACA,MAAOD,CAAAA,YAAP,CACD,CACD,MAAOA,CAAAA,YAAY,CAACN,MAAb,CAAoBO,aAApB,CAAP,CACD,CAZH,CAaE,EAbF,CADK,CAAP,CAiBD,CACD,MAAOZ,CAAAA,IAAI,CAACK,MAAL,CAAYJ,KAAZ,CAAP,CACD,CAED,KAAMY,CAAAA,SAAS,CAAG,CAAC,MAAD,CAAS,WAAT,CAAsB,SAAtB,CAAiC,UAAjC,CAAlB,CAEA;AACA;AACA;AACA;AACA,EACA,QAASC,CAAAA,MAAT,EAAkB,CAChB,KAAMC,CAAAA,IAAI,CAAG,GAAIC,CAAAA,GAAJ,EAAb,CACA,KAAMC,CAAAA,IAAI,CAAG,GAAID,CAAAA,GAAJ,EAAb,CACA,KAAME,CAAAA,SAAS,CAAG,GAAIF,CAAAA,GAAJ,EAAlB,CACA,KAAMG,CAAAA,cAAmD,CAAG,EAA5D,CAEA,MAAQC,CAAAA,CAAD,EAAgC,CACrC,GAAIC,CAAAA,QAAQ,CAAG,IAAf,CACA,GAAIC,CAAAA,MAAM,CAAG,KAAb,CAEA,GAAIF,CAAC,CAACG,GAAF,EAAS,MAAOH,CAAAA,CAAC,CAACG,GAAT,GAAiB,QAA1B,EAAsCH,CAAC,CAACG,GAAF,CAAMC,OAAN,CAAc,GAAd,EAAqB,CAA/D,CAAkE,CAChEF,MAAM,CAAG,IAAT,CACA,KAAMC,CAAAA,GAAG,CAAGH,CAAC,CAACG,GAAF,CAAME,KAAN,CAAYL,CAAC,CAACG,GAAF,CAAMC,OAAN,CAAc,GAAd,EAAqB,CAAjC,CAAZ,CACA,GAAIT,IAAI,CAACW,GAAL,CAASH,GAAT,CAAJ,CAAmB,CACjBF,QAAQ,CAAG,KAAX,CACD,CAFD,IAEO,CACLN,IAAI,CAACY,GAAL,CAASJ,GAAT,EACD,CACF,CAED;AACA,OAAQH,CAAC,CAAClB,IAAV,EACE,IAAK,OAAL,CACA,IAAK,MAAL,CACE,GAAIe,IAAI,CAACS,GAAL,CAASN,CAAC,CAAClB,IAAX,CAAJ,CAAsB,CACpBmB,QAAQ,CAAG,KAAX,CACD,CAFD,IAEO,CACLJ,IAAI,CAACU,GAAL,CAASP,CAAC,CAAClB,IAAX,EACD,CACD,MACF,IAAK,MAAL,CACE,IAAK,GAAI0B,CAAAA,CAAC,CAAG,CAAR,CAAWC,GAAG,CAAGhB,SAAS,CAACiB,MAAhC,CAAwCF,CAAC,CAAGC,GAA5C,CAAiDD,CAAC,EAAlD,CAAsD,CACpD,KAAMG,CAAAA,QAAQ,CAAGlB,SAAS,CAACe,CAAD,CAA1B,CACA,GAAI,CAACR,CAAC,CAACZ,KAAF,CAAQwB,cAAR,CAAuBD,QAAvB,CAAL,CAAuC,SAEvC,GAAIA,QAAQ,GAAK,SAAjB,CAA4B,CAC1B,GAAIb,SAAS,CAACQ,GAAV,CAAcK,QAAd,CAAJ,CAA6B,CAC3BV,QAAQ,CAAG,KAAX,CACD,CAFD,IAEO,CACLH,SAAS,CAACS,GAAV,CAAcI,QAAd,EACD,CACF,CAND,IAMO,CACL,KAAME,CAAAA,QAAQ,CAAGb,CAAC,CAACZ,KAAF,CAAQuB,QAAR,CAAjB,CACA,KAAMG,CAAAA,UAAU,CAAGf,cAAc,CAACY,QAAD,CAAd,EAA4B,GAAIf,CAAAA,GAAJ,EAA/C,CACA,GAAI,CAACe,QAAQ,GAAK,MAAb,EAAuB,CAACT,MAAzB,GAAoCY,UAAU,CAACR,GAAX,CAAeO,QAAf,CAAxC,CAAkE,CAChEZ,QAAQ,CAAG,KAAX,CACD,CAFD,IAEO,CACLa,UAAU,CAACP,GAAX,CAAeM,QAAf,EACAd,cAAc,CAACY,QAAD,CAAd,CAA2BG,UAA3B,CACD,CACF,CACF,CACD,MA/BJ,CAkCA,MAAOb,CAAAA,QAAP,CACD,CAlDD,CAmDD,CAED;AACA;AACA;AACA,GACA,QAASc,CAAAA,gBAAT,CACEC,YADF,CAEE5B,KAFF,CAGE,CACA,MAAO4B,CAAAA,YAAY,CAChB1B,MADI,CAEH,CAACV,IAAD,CAA2BqC,WAA3B,GAAoE,CAClE,KAAMC,CAAAA,mBAAmB,CAAGnC,eAAMG,QAAN,CAAeC,OAAf,CAC1B8B,WAAW,CAAC7B,KAAZ,CAAkBC,QADQ,CAA5B,CAGA,MAAOT,CAAAA,IAAI,CAACK,MAAL,CAAYiC,mBAAZ,CAAP,CACD,CAPE,CAQH,EARG,EAUJ5B,MAVI,CAUGX,gBAVH,CAUqB,EAVrB,EAWJwC,OAXI,GAYJlC,MAZI,CAYGV,WAAW,CAACa,KAAK,CAACZ,SAAP,CAZd,EAaJ4C,MAbI,CAaG1B,MAAM,EAbT,EAcJyB,OAdI,GAeJE,GAfI,CAeA,CAACC,CAAD,CAA6Bd,CAA7B,GAA2C,CAC9C,KAAML,CAAAA,GAAG,CAAGmB,CAAC,CAACnB,GAAF,EAASK,CAArB,CACA,GACEe,OAAO,CAACC,GAAR,CAAYC,QAAZ,GAAyB,aAAzB,EACAF,OAAO,CAACC,GAAR,CAAYE,qBADZ,EAEA,CAACtC,KAAK,CAACZ,SAHT,CAIE,CACA,GACE8C,CAAC,CAACxC,IAAF,GAAW,MAAX,EACAwC,CAAC,CAAClC,KAAF,CAAQ,MAAR,CADA,EAEA;AACA,CACE,kCADF,CAEE,0BAFF,EAGEuC,IAHF,CAGQC,GAAD,EAASN,CAAC,CAAClC,KAAF,CAAQ,MAAR,EAAgByC,UAAhB,CAA2BD,GAA3B,CAHhB,CAJF,CAQE,CACA,KAAME,CAAAA,QAAQ,CAAG,CAAE,IAAIR,CAAC,CAAClC,KAAF,EAAW,EAAf,CAAF,CAAjB,CACA0C,QAAQ,CAAC,WAAD,CAAR,CAAwBA,QAAQ,CAAC,MAAD,CAAhC,CACAA,QAAQ,CAAC,MAAD,CAAR,CAAmBC,SAAnB,CAEA;AACAD,QAAQ,CAAC,sBAAD,CAAR,CAAmC,IAAnC,CAEA,mBAAO/C,eAAMiD,YAAN,CAAmBV,CAAnB,CAAsBQ,QAAtB,CAAP,CACD,CACF,CACD,mBAAO/C,eAAMiD,YAAN,CAAmBV,CAAnB,CAAsB,CAAEnB,GAAF,CAAtB,CAAP,CACD,CA1CI,CAAP,CA2CD,CAED;AACA;AACA;AACA,GACA,QAAS8B,CAAAA,IAAT,CAAc,CAAE5C,QAAF,CAAd,CAA2D,CACzD,KAAM6C,CAAAA,QAAQ,CAAG,sBAAWC,2BAAX,CAAjB,CACA,KAAMC,CAAAA,WAAW,CAAG,sBAAWC,sCAAX,CAApB,CACA,mBACE,6BAAC,mBAAD,EACE,uBAAuB,CAAEtB,gBAD3B,CAEE,WAAW,CAAEqB,WAFf,CAGE,SAAS,CAAE,qBAAYF,QAAZ,CAHb,EAKG7C,QALH,CADF,CASD,C,aAEc4C,I","sourcesContent":["import React, { useContext } from 'react'\nimport Effect from './side-effect'\nimport { AmpStateContext } from './amp-context'\nimport { HeadManagerContext } from './head-manager-context'\nimport { isInAmpMode } from './amp'\n\ntype WithInAmpMode = {\n inAmpMode?: boolean\n}\n\nexport function defaultHead(inAmpMode = false): JSX.Element[] {\n const head = [<meta charSet=\"utf-8\" />]\n if (!inAmpMode) {\n head.push(<meta name=\"viewport\" content=\"width=device-width\" />)\n }\n return head\n}\n\nfunction onlyReactElement(\n list: Array<React.ReactElement<any>>,\n child: React.ReactChild\n): Array<React.ReactElement<any>> {\n // React children can be \"string\" or \"number\" in this case we ignore them for backwards compat\n if (typeof child === 'string' || typeof child === 'number') {\n return list\n }\n // Adds support for React.Fragment\n if (child.type === React.Fragment) {\n return list.concat(\n React.Children.toArray(child.props.children).reduce(\n (\n fragmentList: Array<React.ReactElement<any>>,\n fragmentChild: React.ReactChild\n ): Array<React.ReactElement<any>> => {\n if (\n typeof fragmentChild === 'string' ||\n typeof fragmentChild === 'number'\n ) {\n return fragmentList\n }\n return fragmentList.concat(fragmentChild)\n },\n []\n )\n )\n }\n return list.concat(child)\n}\n\nconst METATYPES = ['name', 'httpEquiv', 'charSet', 'itemProp']\n\n/*\n returns a function for filtering head child elements\n which shouldn't be duplicated, like <title/>\n Also adds support for deduplicated `key` properties\n*/\nfunction unique() {\n const keys = new Set()\n const tags = new Set()\n const metaTypes = new Set()\n const metaCategories: { [metatype: string]: Set<string> } = {}\n\n return (h: React.ReactElement<any>) => {\n let isUnique = true\n let hasKey = false\n\n if (h.key && typeof h.key !== 'number' && h.key.indexOf('$') > 0) {\n hasKey = true\n const key = h.key.slice(h.key.indexOf('$') + 1)\n if (keys.has(key)) {\n isUnique = false\n } else {\n keys.add(key)\n }\n }\n\n // eslint-disable-next-line default-case\n switch (h.type) {\n case 'title':\n case 'base':\n if (tags.has(h.type)) {\n isUnique = false\n } else {\n tags.add(h.type)\n }\n break\n case 'meta':\n for (let i = 0, len = METATYPES.length; i < len; i++) {\n const metatype = METATYPES[i]\n if (!h.props.hasOwnProperty(metatype)) continue\n\n if (metatype === 'charSet') {\n if (metaTypes.has(metatype)) {\n isUnique = false\n } else {\n metaTypes.add(metatype)\n }\n } else {\n const category = h.props[metatype]\n const categories = metaCategories[metatype] || new Set()\n if ((metatype !== 'name' || !hasKey) && categories.has(category)) {\n isUnique = false\n } else {\n categories.add(category)\n metaCategories[metatype] = categories\n }\n }\n }\n break\n }\n\n return isUnique\n }\n}\n\n/**\n *\n * @param headElements List of multiple <Head> instances\n */\nfunction reduceComponents(\n headElements: Array<React.ReactElement<any>>,\n props: WithInAmpMode\n) {\n return headElements\n .reduce(\n (list: React.ReactChild[], headElement: React.ReactElement<any>) => {\n const headElementChildren = React.Children.toArray(\n headElement.props.children\n )\n return list.concat(headElementChildren)\n },\n []\n )\n .reduce(onlyReactElement, [])\n .reverse()\n .concat(defaultHead(props.inAmpMode))\n .filter(unique())\n .reverse()\n .map((c: React.ReactElement<any>, i: number) => {\n const key = c.key || i\n if (\n process.env.NODE_ENV !== 'development' &&\n process.env.__NEXT_OPTIMIZE_FONTS &&\n !props.inAmpMode\n ) {\n if (\n c.type === 'link' &&\n c.props['href'] &&\n // TODO(prateekbh@): Replace this with const from `constants` when the tree shaking works.\n [\n 'https://fonts.googleapis.com/css',\n 'https://use.typekit.net/',\n ].some((url) => c.props['href'].startsWith(url))\n ) {\n const newProps = { ...(c.props || {}) }\n newProps['data-href'] = newProps['href']\n newProps['href'] = undefined\n\n // Add this attribute to make it easy to identify optimized tags\n newProps['data-optimized-fonts'] = true\n\n return React.cloneElement(c, newProps)\n }\n }\n return React.cloneElement(c, { key })\n })\n}\n\n/**\n * This component injects elements to `<head>` of your page.\n * To avoid duplicated `tags` in `<head>` you can use the `key` property, which will make sure every tag is only rendered once.\n */\nfunction Head({ children }: { children: React.ReactNode }) {\n const ampState = useContext(AmpStateContext)\n const headManager = useContext(HeadManagerContext)\n return (\n <Effect\n reduceComponentsToState={reduceComponents}\n headManager={headManager}\n inAmpMode={isInAmpMode(ampState)}\n >\n {children}\n </Effect>\n )\n}\n\nexport default Head\n"]}
\No newline at end of file