UNPKG

next-api-og-image-sparticuz

Version:

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

3 lines (2 loc) 6.05 kB
!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports,require("react-dom/server"),require("is-lambda"),require("os"),require("deepmerge"),require("twemoji"),require("@sparticuz/chromium"),require("puppeteer-core")):"function"==typeof define&&define.amd?define(["exports","react-dom/server","is-lambda","os","deepmerge","twemoji","@sparticuz/chromium","puppeteer-core"],r):r((e||self).nextApiOgImageSparticuz={},e.server,e.isLambda,e.os,e.deepmerge,e.twemoji,e.chromium,e.puppeteerCore)}(this,function(e,r,t,n,o,a,i,s){function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var c=u(t),l=u(n),m=u(o),p=u(a),d=u(i),h=u(s);function f(){return f=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},f.apply(this,arguments)}function v(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 g=["body","query"];function y(e){return"production"===e||"staging"===e}function b(e){return f({},e,{executable:"win32"===process.platform?["arm64","ppc64","x64","s390x"].includes(l.default.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 P="/opt/nodejs/node_modules/@sparticuz/chromium/bin/chromium.br";e.withOGImage=function(e){var t=(e=m.default({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}},e)).template,n=t.html,o=t.react,a=e.cacheControl,i=e.strategy,s=e.type,u=e.width,l=e.hook,w=e.height,j=e.quality,x=e.chrome,q=x.args,C=x.executable,O=e.dev,S=O.inspectHtml,E=O.errorsInResponse;if(n&&o)throw new Error("Ambigious template provided. You must provide either `html` or `react` template.");if(!n&&!o)throw new Error("No template was provided.");var A,I,T=process.env.NODE_ENV,N=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)}}}(b,(A={width:u,height:w},I={args:q,executable:C},function(e){try{var r=e.page,t=e.envMode,n=e.executable;return r?Promise.resolve(f({},e,{page:r})):Promise.resolve(function(e,r,t){try{var n,o,a;return y(e)?Promise.resolve(c.default?{args:d.default.args,executablePath:P,headless:d.default.headless}:{args:null!=(n=null==t?void 0:t.args)?n:[],executablePath:P,headless:!0}):Promise.resolve({args:null!=(o=null==t?void 0:t.args)?o:[],executablePath:null!=(a=null==t?void 0:t.executable)?a:r,headless:!0})}catch(e){return Promise.reject(e)}}(t,n,I)).then(function(r){return Promise.resolve(h.default.launch(r)).then(function(r){return Promise.resolve(r.newPage()).then(function(r){return Promise.resolve(r.setViewport(A)).then(function(){return f({},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 f({},e,{createImage:function(e){try{return Promise.resolve(o.setContent(e)).then(function(){return Promise.resolve(!y(a)&&r?o.content():o.screenshot(f({type:t,encoding:"binary"},"jpeg"===t?{quality:n}:null)))})}catch(e){return Promise.reject(e)}}})}}({inspectHtml:S,type:s,quality:j}));return function(e,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: "+g);o()}(i,!y(T)&&E,e,t);var u=JSON.parse(JSON.stringify("query"===i?e.query:e.body,function(e,r){return r&&"object"==typeof r?r:""+r}));return Promise.resolve(N()).then(function(i){function c(c){function m(u){var c=n&&!o?u:r.renderToStaticMarkup(u);return Promise.resolve(i.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>"+p.default.parse(e,{folder:"svg",ext:".svg"})}(c))).then(function(r){function n(){t.setHeader("Content-Type",!y(T)&&S?"text/html":s?"image/"+s:"image/png"),t.setHeader("Cache-Control",a),t.write(r),t.end()}var o=function(){if(l){var n=f({},e,{image:r});return Promise.resolve(l(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 v(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)?v(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 n&&!o?m(n&&!o?c:o(f({},u))):Promise.resolve(n&&!o?c:o(f({},u))).then(m)}return n&&!o?Promise.resolve(n&&!o?n(f({},u)):0).then(c):c(n&&!o?n(f({},u)):0)})}catch(e){return Promise.reject(e)}}}}); //# sourceMappingURL=next-api-og-image-sparticuz.umd.js.map