From 7adedde60cf390b5db5f7e054138f6d117f284d6 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 19 Dec 2022 14:02:43 +0000 Subject: chore: autopublish 2022-12-19T14:02:42Z --- gatsby-config.ts | 2 +- public/404.html | 6 +++--- public/404/index.html | 6 +++--- public/_gatsby/slices/_gatsby-scripts-1.html | 4 ++-- public/chunk-map.json | 2 +- public/component---src-pages-index-tsx-1676c35bb1c747e4fdde.js | 2 ++ public/component---src-pages-index-tsx-1676c35bb1c747e4fdde.js.map | 1 + public/component---src-pages-index-tsx-6070c4fb7ff006986756.js | 2 -- public/component---src-pages-index-tsx-6070c4fb7ff006986756.js.map | 1 - public/index.html | 6 +++--- public/offline-plugin-app-shell-fallback/index.html | 4 ++-- public/page-data/app-data.json | 2 +- public/page-data/sq/d/3317292869.json | 2 +- public/sw.js | 4 ++-- public/webpack-runtime-af1fe928a9d033e7cefa.js | 2 ++ public/webpack-runtime-af1fe928a9d033e7cefa.js.map | 1 + public/webpack-runtime-b0f88c15645fa04a1c3a.js | 2 -- public/webpack-runtime-b0f88c15645fa04a1c3a.js.map | 1 - public/webpack.stats.json | 2 +- 19 files changed, 26 insertions(+), 26 deletions(-) create mode 100644 public/component---src-pages-index-tsx-1676c35bb1c747e4fdde.js create mode 100644 public/component---src-pages-index-tsx-1676c35bb1c747e4fdde.js.map delete mode 100644 public/component---src-pages-index-tsx-6070c4fb7ff006986756.js delete mode 100644 public/component---src-pages-index-tsx-6070c4fb7ff006986756.js.map create mode 100644 public/webpack-runtime-af1fe928a9d033e7cefa.js create mode 100644 public/webpack-runtime-af1fe928a9d033e7cefa.js.map delete mode 100644 public/webpack-runtime-b0f88c15645fa04a1c3a.js delete mode 100644 public/webpack-runtime-b0f88c15645fa04a1c3a.js.map diff --git a/gatsby-config.ts b/gatsby-config.ts index 715135e..a01b01b 100644 --- a/gatsby-config.ts +++ b/gatsby-config.ts @@ -3,7 +3,7 @@ module.exports = { title: "Kevin J Hoerr ", description: "The official website of Kevin Hoerr, developer of websites.", author: "Kevin J Hoerr", - version: "1671458417", + version: "1671458528", }, graphqlTypegen: true, plugins: [ diff --git a/public/404.html b/public/404.html index 27ca877..0f56e16 100644 --- a/public/404.html +++ b/public/404.html @@ -17,10 +17,10 @@ data-styled.g4[id="Content-sc-1nsqces-0"]{content:"haedly,"}/*!sc*/ .jVEOXb{width:100%;position:fixed;left:0px;bottom:0px;text-align:center;font-size:12px;}/*!sc*/ .jVEOXb span{background-color:#e1e1e1;}/*!sc*/ data-styled.g5[id="Footer-sc-1as233t-0"]{content:"jVEOXb,"}/*!sc*/ -
Not found
Sorry 😔 we couldn't find what you were looking for.
+
Not found
Sorry 😔 we couldn't find what you were looking for.
- \ No newline at end of file + \ No newline at end of file diff --git a/public/404/index.html b/public/404/index.html index 031ce77..6f570a8 100644 --- a/public/404/index.html +++ b/public/404/index.html @@ -17,10 +17,10 @@ data-styled.g4[id="Content-sc-1nsqces-0"]{content:"haedly,"}/*!sc*/ .jVEOXb{width:100%;position:fixed;left:0px;bottom:0px;text-align:center;font-size:12px;}/*!sc*/ .jVEOXb span{background-color:#e1e1e1;}/*!sc*/ data-styled.g5[id="Footer-sc-1as233t-0"]{content:"jVEOXb,"}/*!sc*/ -
Not found
Sorry 😔 we couldn't find what you were looking for.
+
Not found
Sorry 😔 we couldn't find what you were looking for.
- \ No newline at end of file + \ No newline at end of file diff --git a/public/_gatsby/slices/_gatsby-scripts-1.html b/public/_gatsby/slices/_gatsby-scripts-1.html index 973c9a7..88da698 100644 --- a/public/_gatsby/slices/_gatsby-scripts-1.html +++ b/public/_gatsby/slices/_gatsby-scripts-1.html @@ -2,6 +2,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/public/chunk-map.json b/public/chunk-map.json index bf690d1..72461c2 100644 --- a/public/chunk-map.json +++ b/public/chunk-map.json @@ -1 +1 @@ -{"app":["/app-ab8ccc4e8dafa3ca248d.js"],"component---cache-caches-gatsby-plugin-offline-app-shell-js":["/component---cache-caches-gatsby-plugin-offline-app-shell-js-56599e2012c5599fcb23.js"],"component---src-pages-404-tsx":["/component---src-pages-404-tsx-e5c4489e3eb49814ef3c.js"],"component---src-pages-index-tsx":["/component---src-pages-index-tsx-6070c4fb7ff006986756.js"]} \ No newline at end of file +{"app":["/app-ab8ccc4e8dafa3ca248d.js"],"component---cache-caches-gatsby-plugin-offline-app-shell-js":["/component---cache-caches-gatsby-plugin-offline-app-shell-js-56599e2012c5599fcb23.js"],"component---src-pages-404-tsx":["/component---src-pages-404-tsx-e5c4489e3eb49814ef3c.js"],"component---src-pages-index-tsx":["/component---src-pages-index-tsx-1676c35bb1c747e4fdde.js"]} \ No newline at end of file diff --git a/public/component---src-pages-index-tsx-1676c35bb1c747e4fdde.js b/public/component---src-pages-index-tsx-1676c35bb1c747e4fdde.js new file mode 100644 index 0000000..ae24532 --- /dev/null +++ b/public/component---src-pages-index-tsx-1676c35bb1c747e4fdde.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunksubmelon_dev=self.webpackChunksubmelon_dev||[]).push([[691],{3723:function(e,t,n){n.d(t,{L:function(){return h},M:function(){return E},P:function(){return w},S:function(){return P},_:function(){return o},a:function(){return i},b:function(){return s},g:function(){return d},h:function(){return c}});var r=n(7294),l=(n(2369),n(5697)),a=n.n(l);function i(){return i=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(l[n]=e[n]);return l}const c=()=>"undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;function s(e,t,n,r,l){return void 0===l&&(l={}),i({},n,{loading:r,shouldLoad:e,"data-main-image":"",style:i({},l,{opacity:t?1:0})})}function d(e,t,n,r,l,a,o,c){const s={};a&&(s.backgroundColor=a,"fixed"===n?(s.width=r,s.height=l,s.backgroundColor=a,s.position="relative"):("constrained"===n||"fullWidth"===n)&&(s.position="absolute",s.top=0,s.left=0,s.bottom=0,s.right=0)),o&&(s.objectFit=o),c&&(s.objectPosition=c);const d=i({},e,{"aria-hidden":!0,"data-placeholder-image":"",style:i({opacity:t?0:1,transition:"opacity 500ms linear"},s)});return d}const u=["children"],p=function(e){let{layout:t,width:n,height:l}=e;return"fullWidth"===t?r.createElement("div",{"aria-hidden":!0,style:{paddingTop:l/n*100+"%"}}):"constrained"===t?r.createElement("div",{style:{maxWidth:n,display:"block"}},r.createElement("img",{alt:"",role:"presentation","aria-hidden":"true",src:"data:image/svg+xml;charset=utf-8,%3Csvg height='"+l+"' width='"+n+"' xmlns='http://www.w3.org/2000/svg' version='1.1'%3E%3C/svg%3E",style:{maxWidth:"100%",display:"block",position:"static"}})):null},h=function(e){let{children:t}=e,n=o(e,u);return r.createElement(r.Fragment,null,r.createElement(p,i({},n)),t,null)},m=["src","srcSet","loading","alt","shouldLoad"],g=["fallback","sources","shouldLoad"],f=function(e){let{src:t,srcSet:n,loading:l,alt:a="",shouldLoad:c}=e,s=o(e,m);return r.createElement("img",i({},s,{decoding:"async",loading:l,src:c?t:void 0,"data-src":c?void 0:t,srcSet:c?n:void 0,"data-srcset":c?void 0:n,alt:a}))},v=function(e){let{fallback:t,sources:n=[],shouldLoad:l=!0}=e,a=o(e,g);const c=a.sizes||(null==t?void 0:t.sizes),s=r.createElement(f,i({},a,t,{sizes:c,shouldLoad:l}));return n.length?r.createElement("picture",null,n.map((e=>{let{media:t,srcSet:n,type:a}=e;return r.createElement("source",{key:t+"-"+a+"-"+n,type:a,media:t,srcSet:l?n:void 0,"data-srcset":l?void 0:n,sizes:c})})),s):s};var y;f.propTypes={src:l.string.isRequired,alt:l.string.isRequired,sizes:l.string,srcSet:l.string,shouldLoad:l.bool},v.displayName="Picture",v.propTypes={alt:l.string.isRequired,shouldLoad:l.bool,fallback:l.exact({src:l.string.isRequired,srcSet:l.string,sizes:l.string}),sources:l.arrayOf(l.oneOfType([l.exact({media:l.string.isRequired,type:l.string,sizes:l.string,srcSet:l.string.isRequired}),l.exact({media:l.string,type:l.string.isRequired,sizes:l.string,srcSet:l.string.isRequired})]))};const b=["fallback"],w=function(e){let{fallback:t}=e,n=o(e,b);return t?r.createElement(v,i({},n,{fallback:{src:t},"aria-hidden":!0,alt:""})):r.createElement("div",i({},n))};w.displayName="Placeholder",w.propTypes={fallback:l.string,sources:null==(y=v.propTypes)?void 0:y.sources,alt:function(e,t,n){return e[t]?new Error("Invalid prop `"+t+"` supplied to `"+n+"`. Validation failed."):null}};const E=function(e){return r.createElement(r.Fragment,null,r.createElement(v,i({},e)),r.createElement("noscript",null,r.createElement(v,i({},e,{shouldLoad:!0}))))};E.displayName="MainImage",E.propTypes=v.propTypes;const x=function(e,t,n){for(var r=arguments.length,l=new Array(r>3?r-3:0),i=3;iJSON.stringify(l.images)),[l.images]);u&&(d=u);const T=function(e,t,n){let r="";return"fullWidth"===e&&(r=''),"constrained"===e&&(r='
"),r}(y,f,v);return(0,r.useEffect)((()=>{O||(O=Promise.all([n.e(774),n.e(223)]).then(n.bind(n,8223)).then((e=>{let{renderImageToString:t,swapPlaceholderImage:n}=e;return I=t,{renderImageToString:t,swapPlaceholderImage:n}})));const e=C.current.querySelector("[data-gatsby-image-ssr]");if(e&&c())return e.complete?(null==p||p({wasCached:!0}),null==h||h({wasCached:!0}),setTimeout((()=>{e.removeAttribute("data-gatsby-image-ssr")}),0)):(null==p||p({wasCached:!0}),e.addEventListener("load",(function t(){e.removeEventListener("load",t),null==h||h({wasCached:!0}),setTimeout((()=>{e.removeAttribute("data-gatsby-image-ssr")}),0)}))),void L.add(j);if(I&&L.has(j))return;let t,r;return O.then((e=>{let{renderImageToString:n,swapPlaceholderImage:o}=e;C.current&&(C.current.innerHTML=n(i({isLoading:!0,isLoaded:L.has(j),image:l},g)),L.has(j)||(t=requestAnimationFrame((()=>{C.current&&(r=o(C.current,j,L,a,p,h,m))}))))})),()=>{t&&cancelAnimationFrame(t),r&&r()}}),[l]),(0,r.useLayoutEffect)((()=>{L.has(j)&&I&&(C.current.innerHTML=I(i({isLoading:L.has(j),isLoaded:L.has(j),image:l},g)),null==p||p({wasCached:!0}),null==h||h({wasCached:!0}))}),[l]),(0,r.createElement)(t,i({},x,{style:i({},w,a,{backgroundColor:s}),className:E+(d?" "+d:""),ref:C,dangerouslySetInnerHTML:{__html:T},suppressHydrationWarning:!0}))},T=(0,r.memo)((function(e){return e.image?(0,r.createElement)(j,e):null}));T.propTypes=C,T.displayName="GatsbyImage";const N=["src","__imageData","__error","width","height","aspectRatio","tracedSVGOptions","placeholder","formats","quality","transformOptions","jpgOptions","pngOptions","webpOptions","avifOptions","blurredOptions","breakpoints","outputPixelDensities"],z=function(e,t){for(var n=arguments.length,r=new Array(n>2?n-2:0),l=2;l{if(void 0!==e.layout&&!M.has(e.layout))return new Error("Invalid value "+e.layout+'" provided for prop "layout". Defaulting to "constrained". Valid values are "fixed", "fullWidth" or "constrained".')}},P=(_=T,function(e){let{src:t,__imageData:n,__error:l}=e,a=o(e,N);return l&&console.warn(l),n?r.createElement(_,i({image:n},a)):(console.warn("Image not loaded",t),null)});var _;P.displayName="StaticImage",P.propTypes=A},2369:function(e){const t=(e,t)=>{if("string"!=typeof e&&!Array.isArray(e))throw new TypeError("Expected the input to be `string | string[]`");t=Object.assign({pascalCase:!1},t);if(e=Array.isArray(e)?e.map((e=>e.trim())).filter((e=>e.length)).join("-"):e.trim(),0===e.length)return"";if(1===e.length)return t.pascalCase?e.toUpperCase():e.toLowerCase();return e!==e.toLowerCase()&&(e=(e=>{let t=!1,n=!1,r=!1;for(let l=0;lt.toUpperCase())).replace(/\d+(\w|$)/g,(e=>e.toUpperCase())),n=e,t.pascalCase?n.charAt(0).toUpperCase()+n.slice(1):n;var n};e.exports=t,e.exports.default=t},4690:function(e,t,n){n.d(t,{F:function(){return a}});var r=n(7294),l=n(1980);function a(){const{author:e,description:t,title:n}=(0,l.$)();return r.createElement(r.Fragment,null,r.createElement("meta",{name:"twitter:description",content:null!=t?t:""}),r.createElement("meta",{name:"twitter:title",content:null!=n?n:""}),r.createElement("meta",{name:"twitter:creator",content:null!=e?e:""}),r.createElement("meta",{name:"twitter:card",content:"summary"}),r.createElement("meta",{name:"description",content:null!=t?t:""}),r.createElement("title",null,n))}},955:function(e,t,n){n.d(t,{y:function(){return a},A:function(){return d}});var r=n(7294),l=n(1693);var a=e=>{let{children:t,...n}=e;return r.createElement(l.gp,{theme:{link:!0}},r.createElement(l.Jo,n,t))},i=n(4405),o=n(1980);const c="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".split("");function s(e){var t,n;return null!==(t=null===(n=e.toString().match(/.{1,2}/g))||void 0===n?void 0:n.map((e=>c[parseInt(e)])).join(""))&&void 0!==t?t:""}var d=e=>{let{children:t}=e;const n=(0,o.w)();return r.createElement(r.StrictMode,null,r.createElement("main",null,r.createElement(i.Pd.Provider,{value:{size:"20",style:{marginBottom:"-4px"}}},r.createElement(l.VY,null,t),r.createElement(l.$_,null,r.createElement("span",null,"©2022 kjhoerr@https://submelon.dev/:",function(e){const t=new Date(1e3*e);return[t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate(),t.getUTCHours(),t.getUTCMinutes()].map(s).join(".")+"-0"}(Number(n)))))))}},1980:function(e,t,n){n.d(t,{$:function(){return l},w:function(){return a}});var r=n(1883);const l=()=>{var e;const{site:t}=(0,r.useStaticQuery)("1151343463");return null!==(e=null==t?void 0:t.siteMetadata)&&void 0!==e?e:{}},a=()=>{var e,t;const{site:n}=(0,r.useStaticQuery)("3317292869");return null!==(e=null==n||null===(t=n.siteMetadata)||void 0===t?void 0:t.version)&&void 0!==e?e:"0"}},7200:function(e,t,n){n.r(t),n.d(t,{Head:function(){return c.F}});var r=n(7294),l=n(3723),a=n(9583),i=n(955),o=n(1693),c=n(4690);t.default=()=>r.createElement(i.A,null,r.createElement("div",null,r.createElement(l.S,{src:"../images/main.png",alt:"Picture of Kevin Hoerr",placeholder:"tracedSVG",layout:"fixed",width:350,height:350,__imageData:n(4297)})),r.createElement(o.ti,null,"Hello!"),r.createElement(o.gp,null,r.createElement("p",null,"I'm a computer science and math graduate from Millersville University. I work as a Solutions Architect and specialize in development operations and systems validation for web applications."),r.createElement("p",null,"My most recent projects have been focused on full-stack development. I use Kubernetes for orchestration and NextJS for the front-end. For back-end development, I have built services enabled by Java with Spring Boot, Quarkus, and rust+actix-web with a GraphQL serving public API."),r.createElement("p",null,"I run a personal Kubernetes cluster at home using MicroOS and k3d. I have also run multiple clusters via DigitalOcean with deployments dedicated for hosting git projects, CI/CD, and code coverage. Since then all projects have been moved to GitHub."),r.createElement("em",null,"- Kevin H.")),r.createElement(i.y,{href:"https://cybr.es/@kjhoerr",rel:"me","aria-label":"My Mastodon account"},r.createElement(a.WJp,null)," @kjhoerr@cybr.es"),r.createElement(i.y,{href:"https://github.com/kjhoerr",rel:"me","aria-label":"My GitHub account with my most active personal projects"},r.createElement(a.hJX,null)," kjhoerr on GitHub"))},1693:function(e,t,n){n.d(t,{Jo:function(){return l},gp:function(){return a},ti:function(){return i},VY:function(){return o},$_:function(){return c}});var r=n(2788),l=r.default.a.withConfig({displayName:"BlockAnchor",componentId:"sc-49dv1p-0"})(["padding:8px;width:328px;display:block;text-align:center;-webkit-text-decoration:none;text-decoration:none;color:#666;&:visited,&:active{padding:8px;width:328px;display:block;text-align:center;-webkit-text-decoration:none;text-decoration:none;color:#666;}"]),a=r.default.div.withConfig({displayName:"BlockBody",componentId:"sc-13lvm6o-0"})(["& + &{margin-top:3px;}background-color:#fff;border:1px #000 solid;border-left:3px #000 solid;border-right:3px #000 solid;padding:",";& > ","{&:hover{background-color:#ddd;color:#222;}}&:last-child,&:last-child > ","{border-bottom-left-radius:18px;border-bottom-right-radius:18px;}"],(e=>e.theme.link?"0":"4px 8px"),l,l),i=r.default.div.withConfig({displayName:"BlockHeader",componentId:"sc-1tkpfhe-0"})(["background-color:#000;width:100%;text-align:center;color:#fff;font-size:36px;font-weight:bold;margin-top:3px;padding-top:4px;"]),o=r.default.div.withConfig({displayName:"Content",componentId:"sc-1nsqces-0"})(["width:350px;margin:0px auto;margin-bottom:120px;padding-top:136px;"]),c=r.default.div.withConfig({displayName:"Footer",componentId:"sc-1as233t-0"})(["width:100%;position:fixed;left:0px;bottom:0px;text-align:center;font-size:12px;span{background-color:#e1e1e1;}"])},4405:function(e,t,n){n.d(t,{w_:function(){return s},Pd:function(){return a}});var r=n(7294),l={color:void 0,size:void 0,className:void 0,style:void 0,attr:void 0},a=r.createContext&&r.createContext(l),i=function(){return i=Object.assign||function(e){for(var t,n=1,r=arguments.length;n\n placeholder?: \"tracedSVG\" | \"dominantColor\" | \"blurred\" | \"none\"\n tracedSVGOptions?: Record\n width?: number\n height?: number\n aspectRatio?: number\n sizes?: string\n quality?: number\n transformOptions?: {\n fit?: Fit\n cropFocus?: number | string\n duotone?: {\n highlight: string\n shadow: string\n opacity?: number\n }\n grayscale?: boolean\n rotate?: number\n trim?: number\n }\n jpgOptions?: Record\n pngOptions?: Record\n webpOptions?: Record\n avifOptions?: Record\n blurredOptions?: { width?: number; toFormat?: ImageFormat }\n breakpoints?: Array\n outputPixelDensities?: Array\n backgroundColor?: string\n}\n\nexport interface IImageSizeArgs {\n width?: number\n height?: number\n layout?: Layout\n filename: string\n outputPixelDensities?: Array\n breakpoints?: Array\n fit?: Fit\n reporter?: IReporter\n sourceMetadata: { width: number; height: number }\n}\n\nexport interface IImageSizes {\n sizes: Array\n presentationWidth: number\n presentationHeight: number\n aspectRatio: number\n unscaledWidth: number\n}\n\nexport interface IImage {\n src: string\n width: number\n height: number\n format: ImageFormat\n}\n\nexport interface IGatsbyImageHelperArgs {\n pluginName: string\n generateImageSource: (\n filename: string,\n width: number,\n height: number,\n format: ImageFormat,\n fit?: Fit,\n options?: Record\n ) => IImage\n layout?: Layout\n formats?: Array\n filename: string\n placeholderURL?: string\n width?: number\n height?: number\n sizes?: string\n reporter?: IReporter\n sourceMetadata?: { width: number; height: number; format: ImageFormat }\n fit?: Fit\n options?: Record\n breakpoints?: Array\n backgroundColor?: string\n aspectRatio?: number\n}\n\nconst warn = (message: string): void => console.warn(message)\n\nconst sortNumeric = (a: number, b: number): number => a - b\n\nexport const getSizes = (width: number, layout: Layout): string | undefined => {\n switch (layout) {\n // If screen is wider than the max size, image width is the max size,\n // otherwise it's the width of the screen\n case `constrained`:\n return `(min-width: ${width}px) ${width}px, 100vw`\n\n // Image is always the same width, whatever the size of the screen\n case `fixed`:\n return `${width}px`\n\n // Image is always the width of the screen\n case `fullWidth`:\n return `100vw`\n\n default:\n return undefined\n }\n}\n\nexport const getSrcSet = (images: Array): string =>\n images.map(image => `${image.src} ${image.width}w`).join(`,\\n`)\n\nexport function formatFromFilename(filename: string): ImageFormat | undefined {\n const dot = filename.lastIndexOf(`.`)\n if (dot !== -1) {\n const ext = filename.slice(dot + 1)\n if (ext === `jpeg`) {\n return `jpg`\n }\n if (ext.length === 3 || ext.length === 4) {\n return ext as ImageFormat\n }\n }\n return undefined\n}\n\nexport function setDefaultDimensions(\n args: IGatsbyImageHelperArgs\n): IGatsbyImageHelperArgs {\n let {\n layout = `constrained`,\n width,\n height,\n sourceMetadata,\n breakpoints,\n aspectRatio,\n formats = [`auto`, `webp`],\n } = args\n formats = formats.map(format => format.toLowerCase() as ImageFormat)\n layout = camelCase(layout) as Layout\n\n if (width && height) {\n return { ...args, formats, layout, aspectRatio: width / height }\n }\n if (sourceMetadata.width && sourceMetadata.height && !aspectRatio) {\n aspectRatio = sourceMetadata.width / sourceMetadata.height\n }\n\n if (layout === `fullWidth`) {\n width = width || sourceMetadata.width || breakpoints[breakpoints.length - 1]\n height = height || Math.round(width / (aspectRatio || DEFAULT_ASPECT_RATIO))\n } else {\n if (!width) {\n if (height && aspectRatio) {\n width = height * aspectRatio\n } else if (sourceMetadata.width) {\n width = sourceMetadata.width\n } else if (height) {\n width = Math.round(height / DEFAULT_ASPECT_RATIO)\n } else {\n width = DEFAULT_FIXED_WIDTH\n }\n }\n\n if (aspectRatio && !height) {\n height = Math.round(width / aspectRatio)\n } else if (!aspectRatio) {\n aspectRatio = width / height\n }\n }\n return { ...args, width, height, aspectRatio, layout, formats }\n}\n\n/**\n * Use this for getting an image for the blurred placeholder. This ensures the\n * aspect ratio and crop match the main image\n */\nexport function getLowResolutionImageURL(\n args: IGatsbyImageHelperArgs,\n width = 20\n): string {\n args = setDefaultDimensions(args)\n const { generateImageSource, filename, aspectRatio } = args\n return generateImageSource(\n filename,\n width,\n Math.round(width / aspectRatio),\n args.sourceMetadata.format || `jpg`,\n args.fit,\n args.options\n )?.src\n}\n\nexport function generateImageData(\n args: IGatsbyImageHelperArgs\n): IGatsbyImageData {\n args = setDefaultDimensions(args)\n\n let {\n pluginName,\n sourceMetadata,\n generateImageSource,\n layout,\n fit,\n options,\n width,\n height,\n filename,\n reporter = { warn },\n backgroundColor,\n placeholderURL,\n } = args\n\n if (!pluginName) {\n reporter.warn(\n `[gatsby-plugin-image] \"generateImageData\" was not passed a plugin name`\n )\n }\n\n if (typeof generateImageSource !== `function`) {\n throw new Error(`generateImageSource must be a function`)\n }\n\n if (!sourceMetadata || (!sourceMetadata.width && !sourceMetadata.height)) {\n // No metadata means we let the CDN handle max size etc, aspect ratio etc\n sourceMetadata = {\n width,\n height,\n format: sourceMetadata?.format || formatFromFilename(filename) || `auto`,\n }\n } else if (!sourceMetadata.format) {\n sourceMetadata.format = formatFromFilename(filename)\n }\n\n const formats = new Set(args.formats)\n\n if (formats.size === 0 || formats.has(`auto`) || formats.has(``)) {\n formats.delete(`auto`)\n formats.delete(``)\n formats.add