UNPKG

next-api-og-image-sparticuz

Version:

Easy way to generate open-graph images dynamically using Next.js API Routes.

3 lines (2 loc) 5.54 kB
import{renderToStaticMarkup as e}from"react-dom/server";import r from"is-lambda";import t from"os";import n from"deepmerge";import o from"twemoji";import a from"@sparticuz/chromium";import i from"puppeteer-core";function s(){return s=Object.assign||function(e){for(var r=1;r<arguments.length;r++){var t=arguments[r];for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])}return e},s.apply(this,arguments)}function u(e,r){(null==r||r>e.length)&&(r=e.length);for(var t=0,n=new Array(r);t<r;t++)n[t]=e[t];return n}var c=["body","query"];function l(t){var l=(t=n({strategy:"query",cacheControl:"max-age 3600, must-revalidate",width:1200,height:630,type:"png",quality:90,hook:null,chrome:{args:null,executable:null},dev:{inspectHtml:!0,errorsInResponse:!0}},t)).template,v=l.html,f=l.react,d=t.cacheControl,g=t.strategy,y=t.type,b=t.width,P=t.hook,w=t.height,x=t.quality,j=t.chrome,C=j.args,q=j.executable,O=t.dev,S=O.inspectHtml,E=O.errorsInResponse;if(v&&f)throw new Error("Ambigious template provided. You must provide either `html` or `react` template.");if(!v&&!f)throw new Error("No template was provided.");var A,N,H=process.env.NODE_ENV,I=function(){var e=[].slice.call(arguments);return function(){try{return Promise.resolve(e.reduce(function(e,r){try{return Promise.resolve(e).then(function(e){return Promise.resolve(r(e))})}catch(e){return Promise.reject(e)}},Promise.resolve({envMode:process.env.NODE_ENV})))}catch(e){return Promise.reject(e)}}}(p,(A={width:b,height:w},N={args:C,executable:q},function(e){try{var t=e.page,n=e.envMode,o=e.executable;return t?Promise.resolve(s({},e,{page:t})):Promise.resolve(function(e,t,n){try{var o,i,s;return m(e)?Promise.resolve(r?{args:a.args,executablePath:h,headless:a.headless}:{args:null!=(o=null==n?void 0:n.args)?o:[],executablePath:h,headless:!0}):Promise.resolve({args:null!=(i=null==n?void 0:n.args)?i:[],executablePath:null!=(s=null==n?void 0:n.executable)?s:t,headless:!0})}catch(e){return Promise.reject(e)}}(n,o,N)).then(function(r){return Promise.resolve(i.launch(r)).then(function(r){return Promise.resolve(r.newPage()).then(function(r){return Promise.resolve(r.setViewport(A)).then(function(){return s({},e,{page:r})})})})})}catch(e){return Promise.reject(e)}}),function(e){var r=e.inspectHtml,t=e.type,n=e.quality;return function(e){var o=e.page,a=e.envMode;return s({},e,{createImage:function(e){try{return Promise.resolve(o.setContent(e)).then(function(){return Promise.resolve(!m(a)&&r?o.content():o.screenshot(s({type:t,encoding:"binary"},"jpeg"===t?{quality:n}:null)))})}catch(e){return Promise.reject(e)}}})}}({inspectHtml:S,type:y,quality:x}));return function(r,t){try{!function(e,r,t,n){var o={body:function(){var e=t.method,o=t.headers["content-type"];if("POST"!==e&&"application/json"!==o){var a="Strategy is set to `body` so parameters must be passed by POST request and JSON payload. Current method: "+e+" and current content type: "+o;throw r&&n.json({message:a}),new Error(a)}},query:function(){var e=t.method;if("GET"!==e){var o="Strategy is set to `query` so parameters must be passed by GET request and query params. Current method: "+e;throw r&&n.json({message:o}),new Error(o)}}}[e];if(!o)throw new Error("Unknown strategy provided. Possible values: "+c);o()}(g,!m(H)&&E,r,t);var n=JSON.parse(JSON.stringify("query"===g?r.query:r.body,function(e,r){return r&&"object"==typeof r?r:""+r}));return Promise.resolve(I()).then(function(a){function i(i){function c(n){var i=v&&!f?n:e(n);return Promise.resolve(a.createImage(function(e){return"<style>\n .emoji {\n height: 1em;\n width: 1em;\n margin: 0 .05em 0 .1em;\n vertical-align: -0.1em;\n }\n </style>"+o.parse(e,{folder:"svg",ext:".svg"})}(i))).then(function(e){function n(){t.setHeader("Content-Type",!m(H)&&S?"text/html":y?"image/"+y:"image/png"),t.setHeader("Cache-Control",d),t.write(e),t.end()}var o=function(){if(P){var n=s({},r,{image:e});return Promise.resolve(P(n)).then(function(e){if(e)for(var r,n=function(e,r){var t="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(t)return(t=t.call(e)).next.bind(t);if(Array.isArray(e)||(t=function(e,r){if(e){if("string"==typeof e)return u(e,r);var t=Object.prototype.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?u(e,r):void 0}}(e))){t&&(e=t);var n=0;return function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(e.entries());!(r=n()).done;){var o=r.value;t.setHeader(o[0],o[1])}})}}();return o&&o.then?o.then(n):n()})}return v&&!f?c(v&&!f?i:f(s({},n))):Promise.resolve(v&&!f?i:f(s({},n))).then(c)}return v&&!f?Promise.resolve(v&&!f?v(s({},n)):0).then(i):i(v&&!f?v(s({},n)):0)})}catch(e){return Promise.reject(e)}}}function m(e){return"production"===e||"staging"===e}function p(e){return s({},e,{executable:"win32"===process.platform?["arm64","ppc64","x64","s390x"].includes(t.arch())?"C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe":"C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe":"linux"===process.platform?"/usr/bin/google-chrome":"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"})}var h="/opt/nodejs/node_modules/@sparticuz/chromium/bin/chromium.br";export{l as withOGImage}; //# sourceMappingURL=next-api-og-image-sparticuz.module.js.map