diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/200.html b/200.html new file mode 100644 index 0000000..a3e2adc --- /dev/null +++ b/200.html @@ -0,0 +1 @@ +
\ No newline at end of file diff --git a/404.html b/404.html new file mode 100644 index 0000000..50d602c --- /dev/null +++ b/404.html @@ -0,0 +1 @@ +
\ No newline at end of file diff --git a/README.md b/README.md deleted file mode 100644 index 8c816c1..0000000 --- a/README.md +++ /dev/null @@ -1 +0,0 @@ -# mjkatgithub.github.io diff --git a/__nuxt_content/blog/sql_dump.txt b/__nuxt_content/blog/sql_dump.txt new file mode 100644 index 0000000..39c25c0 --- /dev/null +++ b/__nuxt_content/blog/sql_dump.txt @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/__nuxt_content/data/sql_dump.txt b/__nuxt_content/data/sql_dump.txt new file mode 100644 index 0000000..48db758 --- /dev/null +++ b/__nuxt_content/data/sql_dump.txt @@ -0,0 +1 @@ +H4sIAAAAAAAACu1YbW/aOhT+K1autO5KkDD63qvpNh3pynjrIHRtxxSZ5EDcxDaznQY67b9fOYF2bZPBlfaRT21yHp/nPOfE1oO/Gh/6ju06yLXP2g5qnqNuz0XOdXPgDpDnc6aAKY+wCUdvSYBc59pFl/1mx+7foJZzU0EjQwAOFiMDnfV6bcfu6ldSicRXiYArEJJwNjLQld3/cGH3dfS+6KXnhViGnjcycpJht/l56Pz9D6pW0WM6o2I0uwOn76Jm1+29qO/Kbg+dAXq744fgRzKhXoAV3qmgCY4lVNDOogWfVOrtir3WNd3/Lt8tLvYP4Xp4eFwXZx/vrh5q3rzh0NpxZO9U0M79rrlv1qrVcdJOcdT+Xt9vXbwLZrBL28w5iG/tY9s+Tzt+fe/Ibcn+Uf1hqJfVODtQx5ObqyiIBgdDyZS3cO+voy8yGLZ683TuXcHF2UV8wI92cnkUFDYqRqPfu3waw8sRaC2vmrHJ7PTC0tnBXAF7PQxd0XIQ+TiB/sFpZRU9Tks/WTFhUVWCkuad5Ey3cfX3x8iYYRWOjJOR8QQbGZWR8cvTydcfI0MRFUMG7CxQm7DoCfYaMk4WiAKSnIIKCZsiRnzI8ImIM0So1EyeWFaapiam+IEzMwArfLBSIsOYSGXF0qofdo5q/Vp37/Pt5bt/BUy892nsyRCLPJkKEzpmmOQpLSx1vRbxOZPWOFlUKVQfS6jqEswZm46Mn5VnxdIIo1NEsRJkXlhjHjIVt/6yTmmEsaJKzE+Wr7mYri1mCS1ibxDpcxEUEgd5zJxOrVvZcmijXp+qAjLGGbxKfMMTlYzLu77I46bPqXXagdgPCRctzBiwKQEQa0UtE+wdFepqMqnwVGBaWgBZIbISqKdCmBAhlbWW+XFlCbebEuWHpcQqC5vq3qIQ+1zAinl3LfNyaRHpR6LCZFxIOs1Cucy7CKvpE/R3ZDmsROM59mHMeVSqcrIE5LTPha5v8Wp1CXsHS8UDfbIV7pc8aEruExxbp5noFMYejrA35qpWO9xgyyyTFNH3IQiIKpUusnAmPJEgLJkEvMXAD1Wfc9XX/6zvQJ6kRL8+AJWA4t0VZ0ETwFoJX0sWL/MVkkkFQEvkLmP5Lt6YbrUqZ/v26tOiJF6gN+hcEBb87pzviSnEKDs0CqvjOh7psD7d1390SVTYgFbCpCqhWY480pDNmTJ4NccXMXYJA9SBgPiEgSwjZYQBXYE24tUrCgnv2ER/lmRqBqUaf8UUURVsEz9UErMUx0pGmD3EQNAwjEnB4bjqY46qJhlqU6JLwD5qwD3EfEaBKfRBQFr4RcwA+xA8IX0B6UadmwV+YePOsCIBRg2Iuc/LVI0zUJBhyjW93Ad2Cto+oIFKJhNE0IQnLECcIRUCIkyBYKB+szsmEBBtx8HUFrqwHc8hG+yQZ/jChgTEDPCixE/o0HqWHFecPRlXJRHA9IlTTPIrorTT3yojY8z1T5uTH1uzuTWbW7O5NZtbs7k1m1uzuTWbW7O5NZt/1mz+rLw8T9Egc5s/9S3oo/vUD3bwacjVfM/dexA0Cc96KbtrhAObVmsTfNtUDleM9qoHd5/T5Q3z/1hhVIzhZUPfKj+/XR84Lspu+tF7pEQC6MuF03cQCdB79OLG/elS+9t/MWBuF18YAAA= \ No newline at end of file diff --git a/__nuxt_content/pages/sql_dump.txt b/__nuxt_content/pages/sql_dump.txt new file mode 100644 index 0000000..757cad1 --- /dev/null +++ b/__nuxt_content/pages/sql_dump.txt @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/_nuxt/2bjzV9mk.js b/_nuxt/2bjzV9mk.js new file mode 100644 index 0000000..0118779 --- /dev/null +++ b/_nuxt/2bjzV9mk.js @@ -0,0 +1 @@ +import{u as c,j as d,c as t,o as n,B as r,i as u}from"./DoyGpJzh.js";const p=["id"],f=["href"],k={__name:"ProseH1",props:{id:{type:String,required:!1}},setup(a){const o=a,{headings:e}=c().public.mdc,i=d(()=>o.id&&(typeof e?.anchorLinks=="boolean"&&e?.anchorLinks===!0||typeof e?.anchorLinks=="object"&&e?.anchorLinks?.h1));return(s,h)=>(n(),t("h1",{id:o.id},[u(i)?(n(),t("a",{key:0,href:`#${o.id}`},[r(s.$slots,"default")],8,f)):r(s.$slots,"default",{key:1})],8,p))}};export{k as default}; diff --git a/_nuxt/5rOWPCt3.js b/_nuxt/5rOWPCt3.js new file mode 100644 index 0000000..58590d3 --- /dev/null +++ b/_nuxt/5rOWPCt3.js @@ -0,0 +1 @@ +import{j as i,g as n,o,i as s,Z as c,$ as h,a0 as u,u as l,a1 as p}from"./DoyGpJzh.js";const g="img",f={__name:"ProseImg",props:{src:{type:String,default:""},alt:{type:String,default:""},width:{type:[String,Number],default:void 0},height:{type:[String,Number],default:void 0}},setup(a){const t=a,r=i(()=>{if(t.src?.startsWith("/")&&!t.src.startsWith("//")){const e=h(u(l().app.baseURL));if(e!=="/"&&!t.src.startsWith(e))return p(e,t.src)}return t.src});return(e,d)=>(o(),n(c(s(g)),{src:s(r),alt:t.alt,width:t.width,height:t.height},null,8,["src","alt","width","height"]))}};export{f as default}; diff --git a/_nuxt/7bIYhyNW.js b/_nuxt/7bIYhyNW.js new file mode 100644 index 0000000..35e8257 --- /dev/null +++ b/_nuxt/7bIYhyNW.js @@ -0,0 +1 @@ +import{_ as w}from"./BVb_6jXh.js";import{k,f as b,l as R,u as T,c as C,g as D,h as E,i as h,o as _}from"./DoyGpJzh.js";import{u as x,q as A}from"./DqAykS8P.js";import{a as f,u as N}from"./DDtx_1iE.js";var U={};const B={class:"prose"},q={__name:"[...slug]",async setup(I){let i,u;const c=k(),g=U.NITRO_PRESET==="static",{data:t}=([i,u]=b(async()=>x(`blog-${c.path}`,async()=>{try{return await A("blog").path(c.path).first()}catch{return null}})),i=await i,u(),i);if(t.value){if((t.value.draft===!0||t.value.path?.includes("/drafts/"))&&g)throw R({statusCode:404,statusMessage:"Page Not Found"});const l=t.value.head||t.value.meta?.head;if(l){const s=l,m=T(),v=m.public.baseURL||m.app?.baseURL||"https://mjkatgithub.github.io",y=s.meta||[],e={},o={},d=[];y.forEach(a=>{const r=a.property||a.name;if(r?.startsWith("og:")){const n=r.replace("og:","");e[n]=a.content}else if(r?.startsWith("twitter:")){const n=r.replace("twitter:","");o[n]=a.content}else if(r){const n=a.property?{property:a.property,content:a.content}:{name:a.name,content:a.content};d.push(n)}}),f({title:t.value.title||e.title||"",description:t.value.description||e.description||"",ogTitle:e.title||t.value.title||"",ogDescription:e.description||t.value.description||"",ogImage:e.image||"",ogUrl:e.url||`${v}${c.path}`,twitterTitle:o.title||e.title||t.value.title||"",twitterDescription:o.description||e.description||t.value.description||"",twitterImage:o.image||"",twitterCard:o.card||"summary"}),N({htmlAttrs:s.htmlAttrs||{},link:s.link||[],meta:d})}else f({title:t.value.title||"",description:t.value.description||""})}return(p,l)=>{const s=w;return _(),C("article",B,[h(t)?(_(),D(s,{key:0,value:h(t)},null,8,["value"])):E("",!0)])}}};export{q as default}; diff --git a/_nuxt/AXNJV5TW.js b/_nuxt/AXNJV5TW.js new file mode 100644 index 0000000..6b261df --- /dev/null +++ b/_nuxt/AXNJV5TW.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./BHk8F3tI.js","./DoyGpJzh.js","./entry.C_X0rZFC.css"])))=>i.map(i=>d[i]); +import{A as w}from"./DoyGpJzh.js";import{c as p,t as d,a as f,f as b}from"./DqAykS8P.js";async function h(n,a="gzip"){let e;if(typeof Buffer<"u"){const i=Buffer.from(n,"base64");e=Uint8Array.from(i)}else if(typeof atob<"u")e=Uint8Array.from(atob(n),i=>i.charCodeAt(0));else throw new TypeError("No base64 decoding method available");const o=new Response(new Blob([e])).body?.pipeThrough(new DecompressionStream(a)),c=await new Response(o).text();return JSON.parse(c)}function l(n,a){const e=g(n),t={...a};for(const o in t)e[o]==="json"&&t[o]&&t[o]!=="undefined"&&(t[o]=JSON.parse(t[o])),e[o]==="boolean"&&t[o]!=="undefined"&&(t[o]=!!t[o]);for(const o in t)t[o]==="NULL"&&(t[o]=void 0);return t}function g(n){const a=n.match(/FROM\s+(\w+)/);return a?p[y(a[1])]?.fields||{}:{}}function y(n){return n.replace(/^_content_/,"")}let r;const u=new Map,s=new Map;function x(n){async function a(e){const t=String(e);return r||(s.has("_")||s.set("_",S()),r=await s.get("_"),s.delete("_")),u.has(t)||(s.has(t)||s.set(t,_(e)),await s.get(t),u.set(t,"loaded"),s.delete(t)),r}return{all:async(e,t)=>(await a(n),r.exec({sql:e,bind:t,rowMode:"object",returnValue:"resultRows"}).map(o=>l(e,o))),first:async(e,t)=>(await a(n),l(e,r.exec({sql:e,bind:t,rowMode:"object",returnValue:"resultRows"}).shift())),exec:async(e,t)=>{await a(n),await r.exec({sql:e,bind:t})}}}async function S(){if(!r){const n=await w(()=>import("./BHk8F3tI.js"),__vite__mapDeps([0,1,2]),import.meta.url).then(e=>e.default);globalThis.sqlite3ApiConfig={silent:!0,debug:(...e)=>console.debug(...e),warn:(...e)=>{String(e[0]).includes("OPFS sqlite3_vfs")||console.warn(...e)},error:(...e)=>console.error(...e),log:(...e)=>console.log(...e)};const a=await n();r=new a.oo1.DB}return r}async function _(n){if(window.sessionStorage.getItem("previewToken"))return r;let a=null;const e=`checksum_${n}`,t=`collection_${n}`;let o="matched";try{r.exec({sql:`SELECT * FROM ${d.info} where id = '${e}'`,rowMode:"object",returnValue:"resultRows"}).shift()?.version!==f[String(n)]&&(o="mismatch")}catch{o="missing"}if(o!=="matched"){if(window.localStorage.getItem(`content_${e}`)===f[String(n)]&&(a=window.localStorage.getItem(`content_${t}`)),!a){a=await b(void 0,String(n));try{window.localStorage.setItem(`content_${e}`,f[String(n)]),window.localStorage.setItem(`content_${t}`,a)}catch(i){console.error("Database integrity check failed, rebuilding database",i)}}const c=await h(a);await r.exec({sql:`DROP TABLE IF EXISTS ${d[String(n)]}`}),o==="mismatch"&&await r.exec({sql:`DELETE FROM ${d.info} WHERE id = '${e}'`});for(const i of c)try{await r.exec(i)}catch(m){console.error("Error executing command",m)}}return r}export{x as loadDatabaseAdapter}; diff --git a/_nuxt/AhKKV9Cv.js b/_nuxt/AhKKV9Cv.js new file mode 100644 index 0000000..b3b8727 --- /dev/null +++ b/_nuxt/AhKKV9Cv.js @@ -0,0 +1 @@ +import{_ as g}from"./BVb_6jXh.js";import{u as y,q as v}from"./DqAykS8P.js";import{f as b,u as w,c as k,g as C,h as T,i as d,o as _}from"./DoyGpJzh.js";import{a as h,u as R}from"./DDtx_1iE.js";const x={class:"prose"},q={__name:"about",async setup(A){let n,p;const{data:t}=([n,p]=b(async()=>y("about",async()=>await v("pages").path("/about").first())),n=await n,p(),n),u=t.value?.head||t.value?.meta?.head;if(u){const r=u,c=w(),l=c.public.baseURL||c.app?.baseURL||"https://mjkatgithub.github.io",f=r.meta||[],e={},o={},m=[];f.forEach(a=>{const s=a.property||a.name;if(s?.startsWith("og:")){const i=s.replace("og:","");e[i]=a.content}else if(s?.startsWith("twitter:")){const i=s.replace("twitter:","");o[i]=a.content}else if(s){const i=a.property?{property:a.property,content:a.content}:{name:a.name,content:a.content};m.push(i)}}),h({title:t.value.title||e.title||"",description:t.value.description||e.description||"",ogTitle:e.title||t.value.title||"",ogDescription:e.description||t.value.description||"",ogImage:e.image||"",ogUrl:e.url||`${l}/about`,twitterTitle:o.title||e.title||t.value.title||"",twitterDescription:o.description||e.description||t.value.description||"",twitterImage:o.image||"",twitterCard:o.card||"summary"}),R({htmlAttrs:r.htmlAttrs||{},link:r.link||[],meta:m})}else t.value&&h({title:t.value.title||"",description:t.value.description||""});return(r,c)=>{const l=g;return _(),k("article",x,[d(t)?(_(),C(l,{key:0,value:d(t)},null,8,["value"])):T("",!0)])}}};export{q as default}; diff --git a/_nuxt/B8n2Ky-8.js b/_nuxt/B8n2Ky-8.js new file mode 100644 index 0000000..0121677 --- /dev/null +++ b/_nuxt/B8n2Ky-8.js @@ -0,0 +1 @@ +import{u as c,j as d,c as t,o as n,B as r,i as u}from"./DoyGpJzh.js";const p=["id"],f=["href"],k={__name:"ProseH4",props:{id:{type:String,required:!1}},setup(a){const e=a,{headings:o}=c().public.mdc,i=d(()=>e.id&&(typeof o?.anchorLinks=="boolean"&&o?.anchorLinks===!0||typeof o?.anchorLinks=="object"&&o?.anchorLinks?.h4));return(s,h)=>(n(),t("h4",{id:e.id},[e.id&&u(i)?(n(),t("a",{key:0,href:`#${e.id}`},[r(s.$slots,"default")],8,f)):r(s.$slots,"default",{key:1})],8,p))}};export{k as default}; diff --git a/_nuxt/BARQDQ5B.js b/_nuxt/BARQDQ5B.js new file mode 100644 index 0000000..feae558 --- /dev/null +++ b/_nuxt/BARQDQ5B.js @@ -0,0 +1 @@ +import{c as t,o as l,B as a,D as r}from"./DoyGpJzh.js";const o={__name:"ProsePre",props:{code:{type:String,default:""},language:{type:String,default:null},filename:{type:String,default:null},highlights:{type:Array,default:()=>[]},meta:{type:String,default:null},class:{type:String,default:null}},setup(s){return(e,n)=>(l(),t("pre",{class:r(e.$props.class)},[a(e.$slots,"default")],2))}};export{o as default}; diff --git a/_nuxt/BHk8F3tI.js b/_nuxt/BHk8F3tI.js new file mode 100644 index 0000000..05a4ee1 --- /dev/null +++ b/_nuxt/BHk8F3tI.js @@ -0,0 +1,3 @@ +import"./DoyGpJzh.js";var Ft=(()=>{var qe=import.meta.url;return function(ce={}){var ge,i=ce,ye,Ee,Ne=new Promise((e,t)=>{ye=e,Ee=t}),Je=typeof window=="object",Oe=typeof importScripts=="function";typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string"&&process.type!="renderer";const Fe=globalThis.sqlite3InitModuleState||Object.assign(Object.create(null),{debugModule:()=>{}});delete globalThis.sqlite3InitModuleState,Fe.debugModule("globalThis.location =",globalThis.location);var Qe=Object.assign({},i),re="./this.program",me="";function Ae(e){return i.locateFile?i.locateFile(e,me):me+e}var Le,Me;(Je||Oe)&&(Oe?me=self.location.href:typeof document<"u"&&document.currentScript&&(me=document.currentScript.src),qe&&(me=qe),me.startsWith("blob:")?me="":me=me.substr(0,me.replace(/[?#].*/,"").lastIndexOf("/")+1),Oe&&(Me=e=>{var t=new XMLHttpRequest;return t.open("GET",e,!1),t.responseType="arraybuffer",t.send(null),new Uint8Array(t.response)}),Le=e=>fetch(e,{credentials:"same-origin"}).then(t=>t.ok?t.arrayBuffer():Promise.reject(new Error(t.status+" : "+t.url))));var He=i.print||console.log.bind(console),Pe=i.printErr||console.error.bind(console);Object.assign(i,Qe),Qe=null,i.arguments&&i.arguments,i.thisProgram&&(re=i.thisProgram);var Xe=i.wasmBinary,Ce,ut=!1,xe,je,Ve,ue,we,Ie;function ft(){var e=Ce.buffer;i.HEAP8=xe=new Int8Array(e),i.HEAP16=Ve=new Int16Array(e),i.HEAPU8=je=new Uint8Array(e),i.HEAPU16=new Uint16Array(e),i.HEAP32=ue=new Int32Array(e),i.HEAPU32=we=new Uint32Array(e),i.HEAPF32=new Float32Array(e),i.HEAPF64=new Float64Array(e),i.HEAP64=Ie=new BigInt64Array(e),i.HEAPU64=new BigUint64Array(e)}if(i.wasmMemory)Ce=i.wasmMemory;else{var Pt=i.INITIAL_MEMORY||16777216;Ce=new WebAssembly.Memory({initial:Pt/65536,maximum:32768})}ft();var dt=[],pt=[],mt=[];function Ot(){var e=i.preRun;e&&(typeof e=="function"&&(e=[e]),e.forEach(Dt)),it(dt)}function Lt(){!i.noFSInit&&!a.initialized&&a.init(),a.ignorePermissions=!1,it(pt)}function Ct(){var e=i.postRun;e&&(typeof e=="function"&&(e=[e]),e.forEach(Nt)),it(mt)}function Dt(e){dt.unshift(e)}function Rt(e){pt.unshift(e)}function Nt(e){mt.unshift(e)}var De=0,Ge=null;function Yn(e){return e}function nt(e){De++,i.monitorRunDependencies?.(De)}function Ye(e){if(De--,i.monitorRunDependencies?.(De),De==0&&Ge){var t=Ge;Ge=null,t()}}function rt(e){i.onAbort?.(e),e="Aborted("+e+")",Pe(e),ut=!0,e+=". Build with -sASSERTIONS for more info.";var t=new WebAssembly.RuntimeError(e);throw Ee(t),t}var Mt="data:application/octet-stream;base64,",ht=e=>e.startsWith(Mt);function jt(){if(i.locateFile){var e="sqlite3.wasm";return ht(e)?e:Ae(e)}return new URL(""+new URL("sqlite3.DBpDb1lf.wasm",import.meta.url).href,import.meta.url).href}var st;function gt(e){if(e==st&&Xe)return new Uint8Array(Xe);if(Me)return Me(e);throw"both async and sync fetching of the wasm failed"}function Bt(e){return Xe?Promise.resolve().then(()=>gt(e)):Le(e).then(t=>new Uint8Array(t),()=>gt(e))}function qt(e,t,n){return Bt(e).then(r=>WebAssembly.instantiate(r,t)).then(n,r=>{Pe(`failed to asynchronously prepare wasm: ${r}`),rt(r)})}function Ut(e,t,n,r){return!e&&typeof WebAssembly.instantiateStreaming=="function"&&!ht(t)&&typeof fetch=="function"?fetch(t,{credentials:"same-origin"}).then(s=>{var o=WebAssembly.instantiateStreaming(s,n);return o.then(r,function(p){return Pe(`wasm streaming compile failed: ${p}`),Pe("falling back to ArrayBuffer instantiation"),qt(t,n,r)})}):qt(t,n,r)}function zt(){return{env:St,wasi_snapshot_preview1:St}}function Wt(){var e=zt();function t(r,s){return m=r.exports,Rt(m.__wasm_call_ctors),Ye(),m}nt();function n(r){t(r.instance)}if(i.instantiateWasm)try{return i.instantiateWasm(e,t)}catch(r){Pe(`Module.instantiateWasm callback failed with error: ${r}`),Ee(r)}return st??=jt(),Ut(Xe,st,e,n).catch(Ee),{}}var it=e=>{e.forEach(t=>t(i))};i.noExitRuntime;var fe={isAbs:e=>e.charAt(0)==="/",splitPath:e=>{var t=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return t.exec(e).slice(1)},normalizeArray:(e,t)=>{for(var n=0,r=e.length-1;r>=0;r--){var s=e[r];s==="."?e.splice(r,1):s===".."?(e.splice(r,1),n++):n&&(e.splice(r,1),n--)}if(t)for(;n;n--)e.unshift("..");return e},normalize:e=>{var t=fe.isAbs(e),n=e.substr(-1)==="/";return e=fe.normalizeArray(e.split("/").filter(r=>!!r),!t).join("/"),!e&&!t&&(e="."),e&&n&&(e+="/"),(t?"/":"")+e},dirname:e=>{var t=fe.splitPath(e),n=t[0],r=t[1];return!n&&!r?".":(r&&(r=r.substr(0,r.length-1)),n+r)},basename:e=>{if(e==="/")return"/";e=fe.normalize(e),e=e.replace(/\/$/,"");var t=e.lastIndexOf("/");return t===-1?e:e.substr(t+1)},join:(...e)=>fe.normalize(e.join("/")),join2:(e,t)=>fe.normalize(e+"/"+t)},Qt=()=>{if(typeof crypto=="object"&&typeof crypto.getRandomValues=="function")return e=>crypto.getRandomValues(e);rt("initRandomDevice")},bt=e=>(bt=Qt())(e),ke={resolve:(...e)=>{for(var t="",n=!1,r=e.length-1;r>=-1&&!n;r--){var s=r>=0?e[r]:a.cwd();if(typeof s!="string")throw new TypeError("Arguments to path.resolve must be strings");if(!s)return"";t=s+"/"+t,n=fe.isAbs(s)}return t=fe.normalizeArray(t.split("/").filter(o=>!!o),!n).join("/"),(n?"/":"")+t||"."},relative:(e,t)=>{e=ke.resolve(e).substr(1),t=ke.resolve(t).substr(1);function n(R){for(var z=0;z=0&&R[Q]==="";Q--);return z>Q?[]:R.slice(z,Q-z+1)}for(var r=n(e.split("/")),s=n(t.split("/")),o=Math.min(r.length,s.length),p=o,g=0;g{for(var r=t+n,s=t;e[s]&&!(s>=r);)++s;if(s-t>16&&e.buffer&&yt)return yt.decode(e.subarray(t,s));for(var o="";t>10,56320|R&1023)}}return o},ot=[],Ze=e=>{for(var t=0,n=0;n=55296&&r<=57343?(t+=4,++n):t+=3}return t},lt=(e,t,n,r)=>{if(!(r>0))return 0;for(var s=n,o=n+r-1,p=0;p=55296&&g<=57343){var P=e.charCodeAt(++p);g=65536+((g&1023)<<10)|P&1023}if(g<=127){if(n>=o)break;t[n++]=g}else if(g<=2047){if(n+1>=o)break;t[n++]=192|g>>6,t[n++]=128|g&63}else if(g<=65535){if(n+2>=o)break;t[n++]=224|g>>12,t[n++]=128|g>>6&63,t[n++]=128|g&63}else{if(n+3>=o)break;t[n++]=240|g>>18,t[n++]=128|g>>12&63,t[n++]=128|g>>6&63,t[n++]=128|g&63}}return t[n]=0,n-s};function wt(e,t,n){var r=Ze(e)+1,s=new Array(r),o=lt(e,s,0,s.length);return s.length=o,s}var Ht=()=>{if(!ot.length){var e=null;if(typeof window<"u"&&typeof window.prompt=="function"&&(e=window.prompt("Input: "),e!==null&&(e+=` +`)),!e)return null;ot=wt(e)}return ot.shift()},Re={ttys:[],init(){},shutdown(){},register(e,t){Re.ttys[e]={input:[],output:[],ops:t},a.registerDevice(e,Re.stream_ops)},stream_ops:{open(e){var t=Re.ttys[e.node.rdev];if(!t)throw new a.ErrnoError(43);e.tty=t,e.seekable=!1},close(e){e.tty.ops.fsync(e.tty)},fsync(e){e.tty.ops.fsync(e.tty)},read(e,t,n,r,s){if(!e.tty||!e.tty.ops.get_char)throw new a.ErrnoError(60);for(var o=0,p=0;p0&&(He(Be(e.output)),e.output=[])},ioctl_tcgets(e){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(e,t,n){return 0},ioctl_tiocgwinsz(e){return[24,80]}},default_tty1_ops:{put_char(e,t){t===null||t===10?(Pe(Be(e.output)),e.output=[]):t!=0&&e.output.push(t)},fsync(e){e.output&&e.output.length>0&&(Pe(Be(e.output)),e.output=[])}}},Vt=(e,t)=>{je.fill(0,e,e+t)},Et=(e,t)=>Math.ceil(e/t)*t,vt=e=>{e=Et(e,65536);var t=At(65536,e);return t&&Vt(t,e),t},oe={ops_table:null,mount(e){return oe.createNode(null,"/",16895,0)},createNode(e,t,n,r){if(a.isBlkdev(n)||a.isFIFO(n))throw new a.ErrnoError(63);oe.ops_table||={dir:{node:{getattr:oe.node_ops.getattr,setattr:oe.node_ops.setattr,lookup:oe.node_ops.lookup,mknod:oe.node_ops.mknod,rename:oe.node_ops.rename,unlink:oe.node_ops.unlink,rmdir:oe.node_ops.rmdir,readdir:oe.node_ops.readdir,symlink:oe.node_ops.symlink},stream:{llseek:oe.stream_ops.llseek}},file:{node:{getattr:oe.node_ops.getattr,setattr:oe.node_ops.setattr},stream:{llseek:oe.stream_ops.llseek,read:oe.stream_ops.read,write:oe.stream_ops.write,allocate:oe.stream_ops.allocate,mmap:oe.stream_ops.mmap,msync:oe.stream_ops.msync}},link:{node:{getattr:oe.node_ops.getattr,setattr:oe.node_ops.setattr,readlink:oe.node_ops.readlink},stream:{}},chrdev:{node:{getattr:oe.node_ops.getattr,setattr:oe.node_ops.setattr},stream:a.chrdev_stream_ops}};var s=a.createNode(e,t,n,r);return a.isDir(s.mode)?(s.node_ops=oe.ops_table.dir.node,s.stream_ops=oe.ops_table.dir.stream,s.contents={}):a.isFile(s.mode)?(s.node_ops=oe.ops_table.file.node,s.stream_ops=oe.ops_table.file.stream,s.usedBytes=0,s.contents=null):a.isLink(s.mode)?(s.node_ops=oe.ops_table.link.node,s.stream_ops=oe.ops_table.link.stream):a.isChrdev(s.mode)&&(s.node_ops=oe.ops_table.chrdev.node,s.stream_ops=oe.ops_table.chrdev.stream),s.timestamp=Date.now(),e&&(e.contents[t]=s,e.timestamp=s.timestamp),s},getFileDataAsTypedArray(e){return e.contents?e.contents.subarray?e.contents.subarray(0,e.usedBytes):new Uint8Array(e.contents):new Uint8Array(0)},expandFileStorage(e,t){var n=e.contents?e.contents.length:0;if(!(n>=t)){var r=1024*1024;t=Math.max(t,n*(n>>0),n!=0&&(t=Math.max(t,256));var s=e.contents;e.contents=new Uint8Array(t),e.usedBytes>0&&e.contents.set(s.subarray(0,e.usedBytes),0)}},resizeFileStorage(e,t){if(e.usedBytes!=t)if(t==0)e.contents=null,e.usedBytes=0;else{var n=e.contents;e.contents=new Uint8Array(t),n&&e.contents.set(n.subarray(0,Math.min(t,e.usedBytes))),e.usedBytes=t}},node_ops:{getattr(e){var t={};return t.dev=a.isChrdev(e.mode)?e.id:1,t.ino=e.id,t.mode=e.mode,t.nlink=1,t.uid=0,t.gid=0,t.rdev=e.rdev,a.isDir(e.mode)?t.size=4096:a.isFile(e.mode)?t.size=e.usedBytes:a.isLink(e.mode)?t.size=e.link.length:t.size=0,t.atime=new Date(e.timestamp),t.mtime=new Date(e.timestamp),t.ctime=new Date(e.timestamp),t.blksize=4096,t.blocks=Math.ceil(t.size/t.blksize),t},setattr(e,t){t.mode!==void 0&&(e.mode=t.mode),t.timestamp!==void 0&&(e.timestamp=t.timestamp),t.size!==void 0&&oe.resizeFileStorage(e,t.size)},lookup(e,t){throw a.genericErrors[44]},mknod(e,t,n,r){return oe.createNode(e,t,n,r)},rename(e,t,n){if(a.isDir(e.mode)){var r;try{r=a.lookupNode(t,n)}catch{}if(r)for(var s in r.contents)throw new a.ErrnoError(55)}delete e.parent.contents[e.name],e.parent.timestamp=Date.now(),e.name=n,t.contents[n]=e,t.timestamp=e.parent.timestamp},unlink(e,t){delete e.contents[t],e.timestamp=Date.now()},rmdir(e,t){var n=a.lookupNode(e,t);for(var r in n.contents)throw new a.ErrnoError(55);delete e.contents[t],e.timestamp=Date.now()},readdir(e){var t=[".",".."];for(var n of Object.keys(e.contents))t.push(n);return t},symlink(e,t,n){var r=oe.createNode(e,t,41471,0);return r.link=n,r},readlink(e){if(!a.isLink(e.mode))throw new a.ErrnoError(28);return e.link}},stream_ops:{read(e,t,n,r,s){var o=e.node.contents;if(s>=e.node.usedBytes)return 0;var p=Math.min(e.node.usedBytes-s,r);if(p>8&&o.subarray)t.set(o.subarray(s,s+p),n);else for(var g=0;g0||n+t{var s=`al ${e}`;Le(e).then(o=>{t(new Uint8Array(o)),s&&Ye()},o=>{if(n)n();else throw`Loading data file "${e}" failed.`}),s&&nt()},$t=(e,t,n,r,s,o)=>{a.createDataFile(e,t,n,r,s,o)},Kt=i.preloadPlugins||[],Jt=(e,t,n,r)=>{typeof Browser<"u"&&Browser.init();var s=!1;return Kt.forEach(o=>{s||o.canHandle(t)&&(o.handle(e,t,n,r),s=!0)}),s},Xt=(e,t,n,r,s,o,p,g,P,R)=>{var z=t?ke.resolve(fe.join2(e,t)):e;function Q(T){function A(D){R?.(),g||$t(e,t,D,r,s,P),o?.(),Ye()}Jt(T,z,A,()=>{p?.(),Ye()})||A(T)}nt(),typeof n=="string"?Gt(n,Q,p):Q(n)},Yt=e=>{var t={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090},n=t[e];if(typeof n>"u")throw new Error(`Unknown file open mode: ${e}`);return n},at=(e,t)=>{var n=0;return e&&(n|=365),t&&(n|=146),n},a={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:!1,ignorePermissions:!0,ErrnoError:class{constructor(e){this.name="ErrnoError",this.errno=e}},genericErrors:{},filesystems:null,syncFSRequests:0,readFiles:{},FSStream:class{constructor(){this.shared={}}get object(){return this.node}set object(e){this.node=e}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(e){this.shared.flags=e}get position(){return this.shared.position}set position(e){this.shared.position=e}},FSNode:class{constructor(e,t,n,r){e||(e=this),this.parent=e,this.mount=e.mount,this.mounted=null,this.id=a.nextInode++,this.name=t,this.mode=n,this.node_ops={},this.stream_ops={},this.rdev=r,this.readMode=365,this.writeMode=146}get read(){return(this.mode&this.readMode)===this.readMode}set read(e){e?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(e){e?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return a.isDir(this.mode)}get isDevice(){return a.isChrdev(this.mode)}},lookupPath(e,t={}){if(e=ke.resolve(e),!e)return{path:"",node:null};var n={follow_mount:!0,recurse_count:0};if(t=Object.assign(n,t),t.recurse_count>8)throw new a.ErrnoError(32);for(var r=e.split("/").filter(Q=>!!Q),s=a.root,o="/",p=0;p40)throw new a.ErrnoError(32)}}return{path:o,node:s}},getPath(e){for(var t;;){if(a.isRoot(e)){var n=e.mount.mountpoint;return t?n[n.length-1]!=="/"?`${n}/${t}`:n+t:n}t=t?`${e.name}/${t}`:e.name,e=e.parent}},hashName(e,t){for(var n=0,r=0;r>>0)%a.nameTable.length},hashAddNode(e){var t=a.hashName(e.parent.id,e.name);e.name_next=a.nameTable[t],a.nameTable[t]=e},hashRemoveNode(e){var t=a.hashName(e.parent.id,e.name);if(a.nameTable[t]===e)a.nameTable[t]=e.name_next;else for(var n=a.nameTable[t];n;){if(n.name_next===e){n.name_next=e.name_next;break}n=n.name_next}},lookupNode(e,t){var n=a.mayLookup(e);if(n)throw new a.ErrnoError(n);for(var r=a.hashName(e.id,t),s=a.nameTable[r];s;s=s.name_next){var o=s.name;if(s.parent.id===e.id&&o===t)return s}return a.lookup(e,t)},createNode(e,t,n,r){var s=new a.FSNode(e,t,n,r);return a.hashAddNode(s),s},destroyNode(e){a.hashRemoveNode(e)},isRoot(e){return e===e.parent},isMountpoint(e){return!!e.mounted},isFile(e){return(e&61440)===32768},isDir(e){return(e&61440)===16384},isLink(e){return(e&61440)===40960},isChrdev(e){return(e&61440)===8192},isBlkdev(e){return(e&61440)===24576},isFIFO(e){return(e&61440)===4096},isSocket(e){return(e&49152)===49152},flagsToPermissionString(e){var t=["r","w","rw"][e&3];return e&512&&(t+="w"),t},nodePermissions(e,t){return a.ignorePermissions?0:t.includes("r")&&!(e.mode&292)||t.includes("w")&&!(e.mode&146)||t.includes("x")&&!(e.mode&73)?2:0},mayLookup(e){if(!a.isDir(e.mode))return 54;var t=a.nodePermissions(e,"x");return t||(e.node_ops.lookup?0:2)},mayCreate(e,t){try{var n=a.lookupNode(e,t);return 20}catch{}return a.nodePermissions(e,"wx")},mayDelete(e,t,n){var r;try{r=a.lookupNode(e,t)}catch(o){return o.errno}var s=a.nodePermissions(e,"wx");if(s)return s;if(n){if(!a.isDir(r.mode))return 54;if(a.isRoot(r)||a.getPath(r)===a.cwd())return 10}else if(a.isDir(r.mode))return 31;return 0},mayOpen(e,t){return e?a.isLink(e.mode)?32:a.isDir(e.mode)&&(a.flagsToPermissionString(t)!=="r"||t&512)?31:a.nodePermissions(e,a.flagsToPermissionString(t)):44},MAX_OPEN_FDS:4096,nextfd(){for(var e=0;e<=a.MAX_OPEN_FDS;e++)if(!a.streams[e])return e;throw new a.ErrnoError(33)},getStreamChecked(e){var t=a.getStream(e);if(!t)throw new a.ErrnoError(8);return t},getStream:e=>a.streams[e],createStream(e,t=-1){return e=Object.assign(new a.FSStream,e),t==-1&&(t=a.nextfd()),e.fd=t,a.streams[t]=e,e},closeStream(e){a.streams[e]=null},dupStream(e,t=-1){var n=a.createStream(e,t);return n.stream_ops?.dup?.(n),n},chrdev_stream_ops:{open(e){var t=a.getDevice(e.node.rdev);e.stream_ops=t.stream_ops,e.stream_ops.open?.(e)},llseek(){throw new a.ErrnoError(70)}},major:e=>e>>8,minor:e=>e&255,makedev:(e,t)=>e<<8|t,registerDevice(e,t){a.devices[e]={stream_ops:t}},getDevice:e=>a.devices[e],getMounts(e){for(var t=[],n=[e];n.length;){var r=n.pop();t.push(r),n.push(...r.mounts)}return t},syncfs(e,t){typeof e=="function"&&(t=e,e=!1),a.syncFSRequests++,a.syncFSRequests>1&&Pe(`warning: ${a.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`);var n=a.getMounts(a.root.mount),r=0;function s(p){return a.syncFSRequests--,t(p)}function o(p){if(p)return o.errored?void 0:(o.errored=!0,s(p));++r>=n.length&&s(null)}n.forEach(p=>{if(!p.type.syncfs)return o(null);p.type.syncfs(p,e,o)})},mount(e,t,n){var r=n==="/",s=!n,o;if(r&&a.root)throw new a.ErrnoError(10);if(!r&&!s){var p=a.lookupPath(n,{follow_mount:!1});if(n=p.path,o=p.node,a.isMountpoint(o))throw new a.ErrnoError(10);if(!a.isDir(o.mode))throw new a.ErrnoError(54)}var g={type:e,opts:t,mountpoint:n,mounts:[]},P=e.mount(g);return P.mount=g,g.root=P,r?a.root=P:o&&(o.mounted=g,o.mount&&o.mount.mounts.push(g)),P},unmount(e){var t=a.lookupPath(e,{follow_mount:!1});if(!a.isMountpoint(t.node))throw new a.ErrnoError(28);var n=t.node,r=n.mounted,s=a.getMounts(r);Object.keys(a.nameTable).forEach(p=>{for(var g=a.nameTable[p];g;){var P=g.name_next;s.includes(g.mount)&&a.destroyNode(g),g=P}}),n.mounted=null;var o=n.mount.mounts.indexOf(r);n.mount.mounts.splice(o,1)},lookup(e,t){return e.node_ops.lookup(e,t)},mknod(e,t,n){var r=a.lookupPath(e,{parent:!0}),s=r.node,o=fe.basename(e);if(!o||o==="."||o==="..")throw new a.ErrnoError(28);var p=a.mayCreate(s,o);if(p)throw new a.ErrnoError(p);if(!s.node_ops.mknod)throw new a.ErrnoError(63);return s.node_ops.mknod(s,o,t,n)},create(e,t){return t=t!==void 0?t:438,t&=4095,t|=32768,a.mknod(e,t,0)},mkdir(e,t){return t=t!==void 0?t:511,t&=1023,t|=16384,a.mknod(e,t,0)},mkdirTree(e,t){for(var n=e.split("/"),r="",s=0;s"u"&&(n=t,t=438),t|=8192,a.mknod(e,t,n)},symlink(e,t){if(!ke.resolve(e))throw new a.ErrnoError(44);var n=a.lookupPath(t,{parent:!0}),r=n.node;if(!r)throw new a.ErrnoError(44);var s=fe.basename(t),o=a.mayCreate(r,s);if(o)throw new a.ErrnoError(o);if(!r.node_ops.symlink)throw new a.ErrnoError(63);return r.node_ops.symlink(r,s,e)},rename(e,t){var n=fe.dirname(e),r=fe.dirname(t),s=fe.basename(e),o=fe.basename(t),p,g,P;if(p=a.lookupPath(e,{parent:!0}),g=p.node,p=a.lookupPath(t,{parent:!0}),P=p.node,!g||!P)throw new a.ErrnoError(44);if(g.mount!==P.mount)throw new a.ErrnoError(75);var R=a.lookupNode(g,s),z=ke.relative(e,r);if(z.charAt(0)!==".")throw new a.ErrnoError(28);if(z=ke.relative(t,n),z.charAt(0)!==".")throw new a.ErrnoError(55);var Q;try{Q=a.lookupNode(P,o)}catch{}if(R!==Q){var T=a.isDir(R.mode),A=a.mayDelete(g,s,T);if(A)throw new a.ErrnoError(A);if(A=Q?a.mayDelete(P,o,T):a.mayCreate(P,o),A)throw new a.ErrnoError(A);if(!g.node_ops.rename)throw new a.ErrnoError(63);if(a.isMountpoint(R)||Q&&a.isMountpoint(Q))throw new a.ErrnoError(10);if(P!==g&&(A=a.nodePermissions(g,"w"),A))throw new a.ErrnoError(A);a.hashRemoveNode(R);try{g.node_ops.rename(R,P,o),R.parent=P}catch(D){throw D}finally{a.hashAddNode(R)}}},rmdir(e){var t=a.lookupPath(e,{parent:!0}),n=t.node,r=fe.basename(e),s=a.lookupNode(n,r),o=a.mayDelete(n,r,!0);if(o)throw new a.ErrnoError(o);if(!n.node_ops.rmdir)throw new a.ErrnoError(63);if(a.isMountpoint(s))throw new a.ErrnoError(10);n.node_ops.rmdir(n,r),a.destroyNode(s)},readdir(e){var t=a.lookupPath(e,{follow:!0}),n=t.node;if(!n.node_ops.readdir)throw new a.ErrnoError(54);return n.node_ops.readdir(n)},unlink(e){var t=a.lookupPath(e,{parent:!0}),n=t.node;if(!n)throw new a.ErrnoError(44);var r=fe.basename(e),s=a.lookupNode(n,r),o=a.mayDelete(n,r,!1);if(o)throw new a.ErrnoError(o);if(!n.node_ops.unlink)throw new a.ErrnoError(63);if(a.isMountpoint(s))throw new a.ErrnoError(10);n.node_ops.unlink(n,r),a.destroyNode(s)},readlink(e){var t=a.lookupPath(e),n=t.node;if(!n)throw new a.ErrnoError(44);if(!n.node_ops.readlink)throw new a.ErrnoError(28);return ke.resolve(a.getPath(n.parent),n.node_ops.readlink(n))},stat(e,t){var n=a.lookupPath(e,{follow:!t}),r=n.node;if(!r)throw new a.ErrnoError(44);if(!r.node_ops.getattr)throw new a.ErrnoError(63);return r.node_ops.getattr(r)},lstat(e){return a.stat(e,!0)},chmod(e,t,n){var r;if(typeof e=="string"){var s=a.lookupPath(e,{follow:!n});r=s.node}else r=e;if(!r.node_ops.setattr)throw new a.ErrnoError(63);r.node_ops.setattr(r,{mode:t&4095|r.mode&-4096,timestamp:Date.now()})},lchmod(e,t){a.chmod(e,t,!0)},fchmod(e,t){var n=a.getStreamChecked(e);a.chmod(n.node,t)},chown(e,t,n,r){var s;if(typeof e=="string"){var o=a.lookupPath(e,{follow:!r});s=o.node}else s=e;if(!s.node_ops.setattr)throw new a.ErrnoError(63);s.node_ops.setattr(s,{timestamp:Date.now()})},lchown(e,t,n){a.chown(e,t,n,!0)},fchown(e,t,n){var r=a.getStreamChecked(e);a.chown(r.node,t,n)},truncate(e,t){if(t<0)throw new a.ErrnoError(28);var n;if(typeof e=="string"){var r=a.lookupPath(e,{follow:!0});n=r.node}else n=e;if(!n.node_ops.setattr)throw new a.ErrnoError(63);if(a.isDir(n.mode))throw new a.ErrnoError(31);if(!a.isFile(n.mode))throw new a.ErrnoError(28);var s=a.nodePermissions(n,"w");if(s)throw new a.ErrnoError(s);n.node_ops.setattr(n,{size:t,timestamp:Date.now()})},ftruncate(e,t){var n=a.getStreamChecked(e);if((n.flags&2097155)===0)throw new a.ErrnoError(28);a.truncate(n.node,t)},utime(e,t,n){var r=a.lookupPath(e,{follow:!0}),s=r.node;s.node_ops.setattr(s,{timestamp:Math.max(t,n)})},open(e,t,n){if(e==="")throw new a.ErrnoError(44);t=typeof t=="string"?Yt(t):t,t&64?(n=typeof n>"u"?438:n,n=n&4095|32768):n=0;var r;if(typeof e=="object")r=e;else{e=fe.normalize(e);try{var s=a.lookupPath(e,{follow:!(t&131072)});r=s.node}catch{}}var o=!1;if(t&64)if(r){if(t&128)throw new a.ErrnoError(20)}else r=a.mknod(e,n,0),o=!0;if(!r)throw new a.ErrnoError(44);if(a.isChrdev(r.mode)&&(t&=-513),t&65536&&!a.isDir(r.mode))throw new a.ErrnoError(54);if(!o){var p=a.mayOpen(r,t);if(p)throw new a.ErrnoError(p)}t&512&&!o&&a.truncate(r,0),t&=-131713;var g=a.createStream({node:r,path:a.getPath(r),flags:t,seekable:!0,position:0,stream_ops:r.stream_ops,ungotten:[],error:!1});return g.stream_ops.open&&g.stream_ops.open(g),i.logReadFiles&&!(t&1)&&(e in a.readFiles||(a.readFiles[e]=1)),g},close(e){if(a.isClosed(e))throw new a.ErrnoError(8);e.getdents&&(e.getdents=null);try{e.stream_ops.close&&e.stream_ops.close(e)}catch(t){throw t}finally{a.closeStream(e.fd)}e.fd=null},isClosed(e){return e.fd===null},llseek(e,t,n){if(a.isClosed(e))throw new a.ErrnoError(8);if(!e.seekable||!e.stream_ops.llseek)throw new a.ErrnoError(70);if(n!=0&&n!=1&&n!=2)throw new a.ErrnoError(28);return e.position=e.stream_ops.llseek(e,t,n),e.ungotten=[],e.position},read(e,t,n,r,s){if(r<0||s<0)throw new a.ErrnoError(28);if(a.isClosed(e))throw new a.ErrnoError(8);if((e.flags&2097155)===1)throw new a.ErrnoError(8);if(a.isDir(e.node.mode))throw new a.ErrnoError(31);if(!e.stream_ops.read)throw new a.ErrnoError(28);var o=typeof s<"u";if(!o)s=e.position;else if(!e.seekable)throw new a.ErrnoError(70);var p=e.stream_ops.read(e,t,n,r,s);return o||(e.position+=p),p},write(e,t,n,r,s,o){if(r<0||s<0)throw new a.ErrnoError(28);if(a.isClosed(e))throw new a.ErrnoError(8);if((e.flags&2097155)===0)throw new a.ErrnoError(8);if(a.isDir(e.node.mode))throw new a.ErrnoError(31);if(!e.stream_ops.write)throw new a.ErrnoError(28);e.seekable&&e.flags&1024&&a.llseek(e,0,2);var p=typeof s<"u";if(!p)s=e.position;else if(!e.seekable)throw new a.ErrnoError(70);var g=e.stream_ops.write(e,t,n,r,s,o);return p||(e.position+=g),g},allocate(e,t,n){if(a.isClosed(e))throw new a.ErrnoError(8);if(t<0||n<=0)throw new a.ErrnoError(28);if((e.flags&2097155)===0)throw new a.ErrnoError(8);if(!a.isFile(e.node.mode)&&!a.isDir(e.node.mode))throw new a.ErrnoError(43);if(!e.stream_ops.allocate)throw new a.ErrnoError(138);e.stream_ops.allocate(e,t,n)},mmap(e,t,n,r,s){if((r&2)!==0&&(s&2)===0&&(e.flags&2097155)!==2)throw new a.ErrnoError(2);if((e.flags&2097155)===1)throw new a.ErrnoError(2);if(!e.stream_ops.mmap)throw new a.ErrnoError(43);if(!t)throw new a.ErrnoError(28);return e.stream_ops.mmap(e,t,n,r,s)},msync(e,t,n,r,s){return e.stream_ops.msync?e.stream_ops.msync(e,t,n,r,s):0},ioctl(e,t,n){if(!e.stream_ops.ioctl)throw new a.ErrnoError(59);return e.stream_ops.ioctl(e,t,n)},readFile(e,t={}){if(t.flags=t.flags||0,t.encoding=t.encoding||"binary",t.encoding!=="utf8"&&t.encoding!=="binary")throw new Error(`Invalid encoding type "${t.encoding}"`);var n,r=a.open(e,t.flags),s=a.stat(e),o=s.size,p=new Uint8Array(o);return a.read(r,p,0,o,0),t.encoding==="utf8"?n=Be(p):t.encoding==="binary"&&(n=p),a.close(r),n},writeFile(e,t,n={}){n.flags=n.flags||577;var r=a.open(e,n.flags,n.mode);if(typeof t=="string"){var s=new Uint8Array(Ze(t)+1),o=lt(t,s,0,s.length);a.write(r,s,0,o,void 0,n.canOwn)}else if(ArrayBuffer.isView(t))a.write(r,t,0,t.byteLength,void 0,n.canOwn);else throw new Error("Unsupported data type");a.close(r)},cwd:()=>a.currentPath,chdir(e){var t=a.lookupPath(e,{follow:!0});if(t.node===null)throw new a.ErrnoError(44);if(!a.isDir(t.node.mode))throw new a.ErrnoError(54);var n=a.nodePermissions(t.node,"x");if(n)throw new a.ErrnoError(n);a.currentPath=t.path},createDefaultDirectories(){a.mkdir("/tmp"),a.mkdir("/home"),a.mkdir("/home/web_user")},createDefaultDevices(){a.mkdir("/dev"),a.registerDevice(a.makedev(1,3),{read:()=>0,write:(r,s,o,p,g)=>p}),a.mkdev("/dev/null",a.makedev(1,3)),Re.register(a.makedev(5,0),Re.default_tty_ops),Re.register(a.makedev(6,0),Re.default_tty1_ops),a.mkdev("/dev/tty",a.makedev(5,0)),a.mkdev("/dev/tty1",a.makedev(6,0));var e=new Uint8Array(1024),t=0,n=()=>(t===0&&(t=bt(e).byteLength),e[--t]);a.createDevice("/dev","random",n),a.createDevice("/dev","urandom",n),a.mkdir("/dev/shm"),a.mkdir("/dev/shm/tmp")},createSpecialDirectories(){a.mkdir("/proc");var e=a.mkdir("/proc/self");a.mkdir("/proc/self/fd"),a.mount({mount(){var t=a.createNode(e,"fd",16895,73);return t.node_ops={lookup(n,r){var s=+r,o=a.getStreamChecked(s),p={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>o.path}};return p.parent=p,p}},t}},{},"/proc/self/fd")},createStandardStreams(e,t,n){e?a.createDevice("/dev","stdin",e):a.symlink("/dev/tty","/dev/stdin"),t?a.createDevice("/dev","stdout",null,t):a.symlink("/dev/tty","/dev/stdout"),n?a.createDevice("/dev","stderr",null,n):a.symlink("/dev/tty1","/dev/stderr"),a.open("/dev/stdin",0),a.open("/dev/stdout",1),a.open("/dev/stderr",1)},staticInit(){[44].forEach(e=>{a.genericErrors[e]=new a.ErrnoError(e),a.genericErrors[e].stack=""}),a.nameTable=new Array(4096),a.mount(oe,{},"/"),a.createDefaultDirectories(),a.createDefaultDevices(),a.createSpecialDirectories(),a.filesystems={MEMFS:oe}},init(e,t,n){a.initialized=!0,e??=i.stdin,t??=i.stdout,n??=i.stderr,a.createStandardStreams(e,t,n)},quit(){a.initialized=!1;for(var e=0;ethis.length-1||A<0)){var D=A%this.chunkSize,q=A/this.chunkSize|0;return this.getter(q)[D]}}setDataGetter(A){this.getter=A}cacheLength(){var A=new XMLHttpRequest;if(A.open("HEAD",n,!1),A.send(null),!(A.status>=200&&A.status<300||A.status===304))throw new Error("Couldn't load "+n+". Status: "+A.status);var D=Number(A.getResponseHeader("Content-length")),q,w=(q=A.getResponseHeader("Accept-Ranges"))&&q==="bytes",x=(q=A.getResponseHeader("Content-Encoding"))&&q==="gzip",N=1024*1024;w||(N=D);var O=(L,$)=>{if(L>$)throw new Error("invalid range ("+L+", "+$+") or no bytes requested!");if($>D-1)throw new Error("only "+D+" bytes available! programmer error!");var c=new XMLHttpRequest;if(c.open("GET",n,!1),D!==N&&c.setRequestHeader("Range","bytes="+L+"-"+$),c.responseType="arraybuffer",c.overrideMimeType&&c.overrideMimeType("text/plain; charset=x-user-defined"),c.send(null),!(c.status>=200&&c.status<300||c.status===304))throw new Error("Couldn't load "+n+". Status: "+c.status);return c.response!==void 0?new Uint8Array(c.response||[]):wt(c.responseText||"")},S=this;S.setDataGetter(L=>{var $=L*N,c=(L+1)*N-1;if(c=Math.min(c,D-1),typeof S.chunks[L]>"u"&&(S.chunks[L]=O($,c)),typeof S.chunks[L]>"u")throw new Error("doXHR failed!");return S.chunks[L]}),(x||!D)&&(N=D=1,D=this.getter(0).length,N=D,He("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=D,this._chunkSize=N,this.lengthKnown=!0}get length(){return this.lengthKnown||this.cacheLength(),this._length}get chunkSize(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}if(typeof XMLHttpRequest<"u"){if(!Oe)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var p=new o,g={isDevice:!1,contents:p}}else var g={isDevice:!1,url:n};var P=a.createFile(e,t,g,r,s);g.contents?P.contents=g.contents:g.url&&(P.contents=null,P.url=g.url),Object.defineProperties(P,{usedBytes:{get:function(){return this.contents.length}}});var R={},z=Object.keys(P.stream_ops);z.forEach(T=>{var A=P.stream_ops[T];R[T]=(...D)=>(a.forceLoadFile(P),A(...D))});function Q(T,A,D,q,w){var x=T.node.contents;if(w>=x.length)return 0;var N=Math.min(x.length-w,q);if(x.slice)for(var O=0;O(a.forceLoadFile(P),Q(T,A,D,q,w)),R.mmap=(T,A,D,q,w)=>{a.forceLoadFile(P);var x=vt(A);if(!x)throw new a.ErrnoError(48);return Q(T,xe,x,A,D),{ptr:x,allocated:!0}},P.stream_ops=R,P}},Zt=(e,t)=>e?Be(je,e,t):"",ae={DEFAULT_POLLMASK:5,calculateAt(e,t,n){if(fe.isAbs(t))return t;var r;if(e===-100)r=a.cwd();else{var s=ae.getStreamFromFD(e);r=s.path}if(t.length==0){if(!n)throw new a.ErrnoError(44);return r}return fe.join2(r,t)},doStat(e,t,n){var r=e(t);ue[n>>2]=r.dev,ue[n+4>>2]=r.mode,we[n+8>>2]=r.nlink,ue[n+12>>2]=r.uid,ue[n+16>>2]=r.gid,ue[n+20>>2]=r.rdev,Ie[n+24>>3]=BigInt(r.size),ue[n+32>>2]=4096,ue[n+36>>2]=r.blocks;var s=r.atime.getTime(),o=r.mtime.getTime(),p=r.ctime.getTime();return Ie[n+40>>3]=BigInt(Math.floor(s/1e3)),we[n+48>>2]=s%1e3*1e3*1e3,Ie[n+56>>3]=BigInt(Math.floor(o/1e3)),we[n+64>>2]=o%1e3*1e3*1e3,Ie[n+72>>3]=BigInt(Math.floor(p/1e3)),we[n+80>>2]=p%1e3*1e3*1e3,Ie[n+88>>3]=BigInt(r.ino),0},doMsync(e,t,n,r,s){if(!a.isFile(t.node.mode))throw new a.ErrnoError(43);if(r&2)return 0;var o=je.slice(e,e+n);a.msync(t,o,s,n,r)},getStreamFromFD(e){var t=a.getStreamChecked(e);return t},varargs:void 0,getStr(e){var t=Zt(e);return t}};function en(e,t){try{return e=ae.getStr(e),a.chmod(e,t),0}catch(n){if(typeof a>"u"||n.name!=="ErrnoError")throw n;return-n.errno}}function tn(e,t,n,r){try{if(t=ae.getStr(t),t=ae.calculateAt(e,t),n&-8)return-28;var s=a.lookupPath(t,{follow:!0}),o=s.node;if(!o)return-44;var p="";return n&4&&(p+="r"),n&2&&(p+="w"),n&1&&(p+="x"),p&&a.nodePermissions(o,p)?-2:0}catch(g){if(typeof a>"u"||g.name!=="ErrnoError")throw g;return-g.errno}}function nn(e,t){try{return a.fchmod(e,t),0}catch(n){if(typeof a>"u"||n.name!=="ErrnoError")throw n;return-n.errno}}function rn(e,t,n){try{return a.fchown(e,t,n),0}catch(r){if(typeof a>"u"||r.name!=="ErrnoError")throw r;return-r.errno}}function et(){var e=ue[+ae.varargs>>2];return ae.varargs+=4,e}var Ue=et;function sn(e,t,n){ae.varargs=n;try{var r=ae.getStreamFromFD(e);switch(t){case 0:{var s=et();if(s<0)return-28;for(;a.streams[s];)s++;var o;return o=a.dupStream(r,s),o.fd}case 1:case 2:return 0;case 3:return r.flags;case 4:{var s=et();return r.flags|=s,0}case 12:{var s=Ue(),p=0;return Ve[s+p>>1]=2,0}case 13:case 14:return 0}return-28}catch(g){if(typeof a>"u"||g.name!=="ErrnoError")throw g;return-g.errno}}function on(e,t){try{var n=ae.getStreamFromFD(e);return ae.doStat(a.stat,n.path,t)}catch(r){if(typeof a>"u"||r.name!=="ErrnoError")throw r;return-r.errno}}var ln=9007199254740992,an=-9007199254740992,$e=e=>eln?NaN:Number(e);function cn(e,t){t=$e(t);try{return isNaN(t)?61:(a.ftruncate(e,t),0)}catch(n){if(typeof a>"u"||n.name!=="ErrnoError")throw n;return-n.errno}}var ze=(e,t,n)=>lt(e,je,t,n);function _n(e,t){try{if(t===0)return-28;var n=a.cwd(),r=Ze(n)+1;return t"u"||s.name!=="ErrnoError")throw s;return-s.errno}}function un(e,t,n){ae.varargs=n;try{var r=ae.getStreamFromFD(e);switch(t){case 21509:return r.tty?0:-59;case 21505:{if(!r.tty)return-59;if(r.tty.ops.ioctl_tcgets){var s=r.tty.ops.ioctl_tcgets(r),o=Ue();ue[o>>2]=s.c_iflag||0,ue[o+4>>2]=s.c_oflag||0,ue[o+8>>2]=s.c_cflag||0,ue[o+12>>2]=s.c_lflag||0;for(var p=0;p<32;p++)xe[o+p+17]=s.c_cc[p]||0;return 0}return 0}case 21510:case 21511:case 21512:return r.tty?0:-59;case 21506:case 21507:case 21508:{if(!r.tty)return-59;if(r.tty.ops.ioctl_tcsets){for(var o=Ue(),g=ue[o>>2],P=ue[o+4>>2],R=ue[o+8>>2],z=ue[o+12>>2],Q=[],p=0;p<32;p++)Q.push(xe[o+p+17]);return r.tty.ops.ioctl_tcsets(r.tty,t,{c_iflag:g,c_oflag:P,c_cflag:R,c_lflag:z,c_cc:Q})}return 0}case 21519:{if(!r.tty)return-59;var o=Ue();return ue[o>>2]=0,0}case 21520:return r.tty?-28:-59;case 21531:{var o=Ue();return a.ioctl(r,t,o)}case 21523:{if(!r.tty)return-59;if(r.tty.ops.ioctl_tiocgwinsz){var T=r.tty.ops.ioctl_tiocgwinsz(r.tty),o=Ue();Ve[o>>1]=T[0],Ve[o+2>>1]=T[1]}return 0}case 21524:return r.tty?0:-59;case 21515:return r.tty?0:-59;default:return-28}}catch(A){if(typeof a>"u"||A.name!=="ErrnoError")throw A;return-A.errno}}function fn(e,t){try{return e=ae.getStr(e),ae.doStat(a.lstat,e,t)}catch(n){if(typeof a>"u"||n.name!=="ErrnoError")throw n;return-n.errno}}function dn(e,t,n){try{return t=ae.getStr(t),t=ae.calculateAt(e,t),t=fe.normalize(t),t[t.length-1]==="/"&&(t=t.substr(0,t.length-1)),a.mkdir(t,n,0),0}catch(r){if(typeof a>"u"||r.name!=="ErrnoError")throw r;return-r.errno}}function pn(e,t,n,r){try{t=ae.getStr(t);var s=r&256,o=r&4096;return r=r&-6401,t=ae.calculateAt(e,t,o),ae.doStat(s?a.lstat:a.stat,t,n)}catch(p){if(typeof a>"u"||p.name!=="ErrnoError")throw p;return-p.errno}}function mn(e,t,n,r){ae.varargs=r;try{t=ae.getStr(t),t=ae.calculateAt(e,t);var s=r?et():0;return a.open(t,n,s).fd}catch(o){if(typeof a>"u"||o.name!=="ErrnoError")throw o;return-o.errno}}function hn(e,t,n,r){try{if(t=ae.getStr(t),t=ae.calculateAt(e,t),r<=0)return-28;var s=a.readlink(t),o=Math.min(r,Ze(s)),p=xe[n+o];return ze(s,n,r+1),xe[n+o]=p,o}catch(g){if(typeof a>"u"||g.name!=="ErrnoError")throw g;return-g.errno}}function gn(e){try{return e=ae.getStr(e),a.rmdir(e),0}catch(t){if(typeof a>"u"||t.name!=="ErrnoError")throw t;return-t.errno}}function qn(e,t){try{return e=ae.getStr(e),ae.doStat(a.stat,e,t)}catch(n){if(typeof a>"u"||n.name!=="ErrnoError")throw n;return-n.errno}}function bn(e,t,n){try{return t=ae.getStr(t),t=ae.calculateAt(e,t),n===0?a.unlink(t):n===512?a.rmdir(t):rt("Invalid flags passed to unlinkat"),0}catch(r){if(typeof a>"u"||r.name!=="ErrnoError")throw r;return-r.errno}}var xt=e=>we[e>>2]+ue[e+4>>2]*4294967296;function yn(e,t,n,r){try{t=ae.getStr(t),t=ae.calculateAt(e,t,!0);var s=Date.now(),o,p;if(!n)o=s,p=s;else{var g=xt(n),P=ue[n+8>>2];P==1073741823?o=s:P==1073741822?o=-1:o=g*1e3+P/(1e3*1e3),n+=16,g=xt(n),P=ue[n+8>>2],P==1073741823?p=s:P==1073741822?p=-1:p=g*1e3+P/(1e3*1e3)}return(p!=-1||o!=-1)&&a.utime(t,o,p),0}catch(R){if(typeof a>"u"||R.name!=="ErrnoError")throw R;return-R.errno}}var wn=1,En=()=>wn,vn=e=>e%4===0&&(e%100!==0||e%400===0),xn=[0,31,60,91,121,152,182,213,244,274,305,335],Sn=[0,31,59,90,120,151,181,212,243,273,304,334],An=e=>{var t=vn(e.getFullYear()),n=t?xn:Sn,r=n[e.getMonth()]+e.getDate()-1;return r};function In(e,t){e=$e(e);var n=new Date(e*1e3);ue[t>>2]=n.getSeconds(),ue[t+4>>2]=n.getMinutes(),ue[t+8>>2]=n.getHours(),ue[t+12>>2]=n.getDate(),ue[t+16>>2]=n.getMonth(),ue[t+20>>2]=n.getFullYear()-1900,ue[t+24>>2]=n.getDay();var r=An(n)|0;ue[t+28>>2]=r,ue[t+36>>2]=-(n.getTimezoneOffset()*60);var s=new Date(n.getFullYear(),0,1),o=new Date(n.getFullYear(),6,1).getTimezoneOffset(),p=s.getTimezoneOffset(),g=(o!=p&&n.getTimezoneOffset()==Math.min(p,o))|0;ue[t+32>>2]=g}function kn(e,t,n,r,s,o,p){s=$e(s);try{if(isNaN(s))return 61;var g=ae.getStreamFromFD(r),P=a.mmap(g,e,s,t,n),R=P.ptr;return ue[o>>2]=P.allocated,we[p>>2]=R,0}catch(z){if(typeof a>"u"||z.name!=="ErrnoError")throw z;return-z.errno}}function Tn(e,t,n,r,s,o){o=$e(o);try{var p=ae.getStreamFromFD(s);n&2&&ae.doMsync(e,p,t,r,o)}catch(g){if(typeof a>"u"||g.name!=="ErrnoError")throw g;return-g.errno}}var Fn=(e,t,n,r)=>{var s=new Date().getFullYear(),o=new Date(s,0,1),p=new Date(s,6,1),g=o.getTimezoneOffset(),P=p.getTimezoneOffset(),R=Math.max(g,P);we[e>>2]=R*60,ue[t>>2]=+(g!=P);var z=A=>{var D=A>=0?"-":"+",q=Math.abs(A),w=String(Math.floor(q/60)).padStart(2,"0"),x=String(q%60).padStart(2,"0");return`UTC${D}${w}${x}`},Q=z(g),T=z(P);PDate.now(),On=()=>performance.now(),Ln=()=>2147483648,Cn=e=>{var t=Ce.buffer,n=(e-t.byteLength+65535)/65536|0;try{return Ce.grow(n),ft(),1}catch{}},Dn=e=>{var t=je.length;e>>>=0;var n=Ln();if(e>n)return!1;for(var r=1;r<=4;r*=2){var s=t*(1+.2/r);s=Math.min(s,e+100663296);var o=Math.min(n,Et(Math.max(e,s),65536)),p=Cn(o);if(p)return!0}return!1},ct={},Rn=()=>re||"./this.program",Ke=()=>{if(!Ke.strings){var e=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",t={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:e,_:Rn()};for(var n in ct)ct[n]===void 0?delete t[n]:t[n]=ct[n];var r=[];for(var n in t)r.push(`${n}=${t[n]}`);Ke.strings=r}return Ke.strings},Nn=(e,t)=>{for(var n=0;n{var n=0;return Ke().forEach((r,s)=>{var o=t+n;we[e+s*4>>2]=o,Nn(r,o),n+=r.length+1}),0},jn=(e,t)=>{var n=Ke();we[e>>2]=n.length;var r=0;return n.forEach(s=>r+=s.length+1),we[t>>2]=r,0};function Bn(e){try{var t=ae.getStreamFromFD(e);return a.close(t),0}catch(n){if(typeof a>"u"||n.name!=="ErrnoError")throw n;return n.errno}}function Un(e,t){try{var n=0,r=0,s=0,o=ae.getStreamFromFD(e),p=o.tty?2:a.isDir(o.mode)?3:a.isLink(o.mode)?7:4;return xe[t]=p,Ve[t+2>>1]=s,Ie[t+8>>3]=BigInt(n),Ie[t+16>>3]=BigInt(r),0}catch(g){if(typeof a>"u"||g.name!=="ErrnoError")throw g;return g.errno}}var zn=(e,t,n,r)=>{for(var s=0,o=0;o>2],g=we[t+4>>2];t+=8;var P=a.read(e,xe,p,g,r);if(P<0)return-1;if(s+=P,P>2]=o,0}catch(p){if(typeof a>"u"||p.name!=="ErrnoError")throw p;return p.errno}}function Qn(e,t,n,r){t=$e(t);try{if(isNaN(t))return 61;var s=ae.getStreamFromFD(e);return a.llseek(s,t,n),Ie[r>>3]=BigInt(s.position),s.getdents&&t===0&&n===0&&(s.getdents=null),0}catch(o){if(typeof a>"u"||o.name!=="ErrnoError")throw o;return o.errno}}function Hn(e){try{var t=ae.getStreamFromFD(e);return t.stream_ops?.fsync?t.stream_ops.fsync(t):0}catch(n){if(typeof a>"u"||n.name!=="ErrnoError")throw n;return n.errno}}var Vn=(e,t,n,r)=>{for(var s=0,o=0;o>2],g=we[t+4>>2];t+=8;var P=a.write(e,xe,p,g,r);if(P<0)return-1;if(s+=P,P>2]=o,0}catch(p){if(typeof a>"u"||p.name!=="ErrnoError")throw p;return p.errno}}a.createPreloadedFile=Xt,a.staticInit();var St={__syscall_chmod:en,__syscall_faccessat:tn,__syscall_fchmod:nn,__syscall_fchown32:rn,__syscall_fcntl64:sn,__syscall_fstat64:on,__syscall_ftruncate64:cn,__syscall_getcwd:_n,__syscall_ioctl:un,__syscall_lstat64:fn,__syscall_mkdirat:dn,__syscall_newfstatat:pn,__syscall_openat:mn,__syscall_readlinkat:hn,__syscall_rmdir:gn,__syscall_stat64:qn,__syscall_unlinkat:bn,__syscall_utimensat:yn,_emscripten_get_now_is_monotonic:En,_localtime_js:In,_mmap_js:kn,_munmap_js:Tn,_tzset_js:Fn,emscripten_date_now:Pn,emscripten_get_now:On,emscripten_resize_heap:Dn,environ_get:Mn,environ_sizes_get:jn,fd_close:Bn,fd_fdstat_get:Un,fd_read:Wn,fd_seek:Qn,fd_sync:Hn,fd_write:Gn,memory:Ce},m=Wt();i._sqlite3_status64=(e,t,n,r)=>(i._sqlite3_status64=m.sqlite3_status64)(e,t,n,r),i._sqlite3_status=(e,t,n,r)=>(i._sqlite3_status=m.sqlite3_status)(e,t,n,r),i._sqlite3_db_status=(e,t,n,r,s)=>(i._sqlite3_db_status=m.sqlite3_db_status)(e,t,n,r,s),i._sqlite3_msize=e=>(i._sqlite3_msize=m.sqlite3_msize)(e),i._sqlite3_vfs_find=e=>(i._sqlite3_vfs_find=m.sqlite3_vfs_find)(e),i._sqlite3_initialize=()=>(i._sqlite3_initialize=m.sqlite3_initialize)(),i._sqlite3_malloc=e=>(i._sqlite3_malloc=m.sqlite3_malloc)(e),i._sqlite3_free=e=>(i._sqlite3_free=m.sqlite3_free)(e),i._sqlite3_vfs_register=(e,t)=>(i._sqlite3_vfs_register=m.sqlite3_vfs_register)(e,t),i._sqlite3_vfs_unregister=e=>(i._sqlite3_vfs_unregister=m.sqlite3_vfs_unregister)(e),i._sqlite3_malloc64=e=>(i._sqlite3_malloc64=m.sqlite3_malloc64)(e),i._sqlite3_realloc=(e,t)=>(i._sqlite3_realloc=m.sqlite3_realloc)(e,t),i._sqlite3_realloc64=(e,t)=>(i._sqlite3_realloc64=m.sqlite3_realloc64)(e,t),i._sqlite3_value_text=e=>(i._sqlite3_value_text=m.sqlite3_value_text)(e),i._sqlite3_randomness=(e,t)=>(i._sqlite3_randomness=m.sqlite3_randomness)(e,t),i._sqlite3_stricmp=(e,t)=>(i._sqlite3_stricmp=m.sqlite3_stricmp)(e,t),i._sqlite3_strnicmp=(e,t,n)=>(i._sqlite3_strnicmp=m.sqlite3_strnicmp)(e,t,n),i._sqlite3_uri_parameter=(e,t)=>(i._sqlite3_uri_parameter=m.sqlite3_uri_parameter)(e,t),i._sqlite3_uri_boolean=(e,t,n)=>(i._sqlite3_uri_boolean=m.sqlite3_uri_boolean)(e,t,n),i._sqlite3_serialize=(e,t,n,r)=>(i._sqlite3_serialize=m.sqlite3_serialize)(e,t,n,r),i._sqlite3_prepare_v2=(e,t,n,r,s)=>(i._sqlite3_prepare_v2=m.sqlite3_prepare_v2)(e,t,n,r,s),i._sqlite3_step=e=>(i._sqlite3_step=m.sqlite3_step)(e),i._sqlite3_column_int64=(e,t)=>(i._sqlite3_column_int64=m.sqlite3_column_int64)(e,t),i._sqlite3_reset=e=>(i._sqlite3_reset=m.sqlite3_reset)(e),i._sqlite3_exec=(e,t,n,r,s)=>(i._sqlite3_exec=m.sqlite3_exec)(e,t,n,r,s),i._sqlite3_column_int=(e,t)=>(i._sqlite3_column_int=m.sqlite3_column_int)(e,t),i._sqlite3_finalize=e=>(i._sqlite3_finalize=m.sqlite3_finalize)(e),i._sqlite3_file_control=(e,t,n,r)=>(i._sqlite3_file_control=m.sqlite3_file_control)(e,t,n,r),i._sqlite3_column_name=(e,t)=>(i._sqlite3_column_name=m.sqlite3_column_name)(e,t),i._sqlite3_column_text=(e,t)=>(i._sqlite3_column_text=m.sqlite3_column_text)(e,t),i._sqlite3_column_type=(e,t)=>(i._sqlite3_column_type=m.sqlite3_column_type)(e,t),i._sqlite3_errmsg=e=>(i._sqlite3_errmsg=m.sqlite3_errmsg)(e),i._sqlite3_deserialize=(e,t,n,r,s,o)=>(i._sqlite3_deserialize=m.sqlite3_deserialize)(e,t,n,r,s,o),i._sqlite3_clear_bindings=e=>(i._sqlite3_clear_bindings=m.sqlite3_clear_bindings)(e),i._sqlite3_value_blob=e=>(i._sqlite3_value_blob=m.sqlite3_value_blob)(e),i._sqlite3_value_bytes=e=>(i._sqlite3_value_bytes=m.sqlite3_value_bytes)(e),i._sqlite3_value_double=e=>(i._sqlite3_value_double=m.sqlite3_value_double)(e),i._sqlite3_value_int=e=>(i._sqlite3_value_int=m.sqlite3_value_int)(e),i._sqlite3_value_int64=e=>(i._sqlite3_value_int64=m.sqlite3_value_int64)(e),i._sqlite3_value_subtype=e=>(i._sqlite3_value_subtype=m.sqlite3_value_subtype)(e),i._sqlite3_value_pointer=(e,t)=>(i._sqlite3_value_pointer=m.sqlite3_value_pointer)(e,t),i._sqlite3_value_type=e=>(i._sqlite3_value_type=m.sqlite3_value_type)(e),i._sqlite3_value_nochange=e=>(i._sqlite3_value_nochange=m.sqlite3_value_nochange)(e),i._sqlite3_value_frombind=e=>(i._sqlite3_value_frombind=m.sqlite3_value_frombind)(e),i._sqlite3_value_dup=e=>(i._sqlite3_value_dup=m.sqlite3_value_dup)(e),i._sqlite3_value_free=e=>(i._sqlite3_value_free=m.sqlite3_value_free)(e),i._sqlite3_result_blob=(e,t,n,r)=>(i._sqlite3_result_blob=m.sqlite3_result_blob)(e,t,n,r),i._sqlite3_result_error_toobig=e=>(i._sqlite3_result_error_toobig=m.sqlite3_result_error_toobig)(e),i._sqlite3_result_error_nomem=e=>(i._sqlite3_result_error_nomem=m.sqlite3_result_error_nomem)(e),i._sqlite3_result_double=(e,t)=>(i._sqlite3_result_double=m.sqlite3_result_double)(e,t),i._sqlite3_result_error=(e,t,n)=>(i._sqlite3_result_error=m.sqlite3_result_error)(e,t,n),i._sqlite3_result_int=(e,t)=>(i._sqlite3_result_int=m.sqlite3_result_int)(e,t),i._sqlite3_result_int64=(e,t)=>(i._sqlite3_result_int64=m.sqlite3_result_int64)(e,t),i._sqlite3_result_null=e=>(i._sqlite3_result_null=m.sqlite3_result_null)(e),i._sqlite3_result_pointer=(e,t,n,r)=>(i._sqlite3_result_pointer=m.sqlite3_result_pointer)(e,t,n,r),i._sqlite3_result_subtype=(e,t)=>(i._sqlite3_result_subtype=m.sqlite3_result_subtype)(e,t),i._sqlite3_result_text=(e,t,n,r)=>(i._sqlite3_result_text=m.sqlite3_result_text)(e,t,n,r),i._sqlite3_result_zeroblob=(e,t)=>(i._sqlite3_result_zeroblob=m.sqlite3_result_zeroblob)(e,t),i._sqlite3_result_zeroblob64=(e,t)=>(i._sqlite3_result_zeroblob64=m.sqlite3_result_zeroblob64)(e,t),i._sqlite3_result_error_code=(e,t)=>(i._sqlite3_result_error_code=m.sqlite3_result_error_code)(e,t),i._sqlite3_user_data=e=>(i._sqlite3_user_data=m.sqlite3_user_data)(e),i._sqlite3_context_db_handle=e=>(i._sqlite3_context_db_handle=m.sqlite3_context_db_handle)(e),i._sqlite3_vtab_nochange=e=>(i._sqlite3_vtab_nochange=m.sqlite3_vtab_nochange)(e),i._sqlite3_vtab_in_first=(e,t)=>(i._sqlite3_vtab_in_first=m.sqlite3_vtab_in_first)(e,t),i._sqlite3_vtab_in_next=(e,t)=>(i._sqlite3_vtab_in_next=m.sqlite3_vtab_in_next)(e,t),i._sqlite3_aggregate_context=(e,t)=>(i._sqlite3_aggregate_context=m.sqlite3_aggregate_context)(e,t),i._sqlite3_get_auxdata=(e,t)=>(i._sqlite3_get_auxdata=m.sqlite3_get_auxdata)(e,t),i._sqlite3_set_auxdata=(e,t,n,r)=>(i._sqlite3_set_auxdata=m.sqlite3_set_auxdata)(e,t,n,r),i._sqlite3_column_count=e=>(i._sqlite3_column_count=m.sqlite3_column_count)(e),i._sqlite3_data_count=e=>(i._sqlite3_data_count=m.sqlite3_data_count)(e),i._sqlite3_column_blob=(e,t)=>(i._sqlite3_column_blob=m.sqlite3_column_blob)(e,t),i._sqlite3_column_bytes=(e,t)=>(i._sqlite3_column_bytes=m.sqlite3_column_bytes)(e,t),i._sqlite3_column_double=(e,t)=>(i._sqlite3_column_double=m.sqlite3_column_double)(e,t),i._sqlite3_column_value=(e,t)=>(i._sqlite3_column_value=m.sqlite3_column_value)(e,t),i._sqlite3_column_decltype=(e,t)=>(i._sqlite3_column_decltype=m.sqlite3_column_decltype)(e,t),i._sqlite3_bind_blob=(e,t,n,r,s)=>(i._sqlite3_bind_blob=m.sqlite3_bind_blob)(e,t,n,r,s),i._sqlite3_bind_double=(e,t,n)=>(i._sqlite3_bind_double=m.sqlite3_bind_double)(e,t,n),i._sqlite3_bind_int=(e,t,n)=>(i._sqlite3_bind_int=m.sqlite3_bind_int)(e,t,n),i._sqlite3_bind_int64=(e,t,n)=>(i._sqlite3_bind_int64=m.sqlite3_bind_int64)(e,t,n),i._sqlite3_bind_null=(e,t)=>(i._sqlite3_bind_null=m.sqlite3_bind_null)(e,t),i._sqlite3_bind_pointer=(e,t,n,r,s)=>(i._sqlite3_bind_pointer=m.sqlite3_bind_pointer)(e,t,n,r,s),i._sqlite3_bind_text=(e,t,n,r,s)=>(i._sqlite3_bind_text=m.sqlite3_bind_text)(e,t,n,r,s),i._sqlite3_bind_parameter_count=e=>(i._sqlite3_bind_parameter_count=m.sqlite3_bind_parameter_count)(e),i._sqlite3_bind_parameter_name=(e,t)=>(i._sqlite3_bind_parameter_name=m.sqlite3_bind_parameter_name)(e,t),i._sqlite3_bind_parameter_index=(e,t)=>(i._sqlite3_bind_parameter_index=m.sqlite3_bind_parameter_index)(e,t),i._sqlite3_db_handle=e=>(i._sqlite3_db_handle=m.sqlite3_db_handle)(e),i._sqlite3_stmt_readonly=e=>(i._sqlite3_stmt_readonly=m.sqlite3_stmt_readonly)(e),i._sqlite3_stmt_isexplain=e=>(i._sqlite3_stmt_isexplain=m.sqlite3_stmt_isexplain)(e),i._sqlite3_stmt_explain=(e,t)=>(i._sqlite3_stmt_explain=m.sqlite3_stmt_explain)(e,t),i._sqlite3_stmt_busy=e=>(i._sqlite3_stmt_busy=m.sqlite3_stmt_busy)(e),i._sqlite3_stmt_status=(e,t,n)=>(i._sqlite3_stmt_status=m.sqlite3_stmt_status)(e,t,n),i._sqlite3_sql=e=>(i._sqlite3_sql=m.sqlite3_sql)(e),i._sqlite3_expanded_sql=e=>(i._sqlite3_expanded_sql=m.sqlite3_expanded_sql)(e),i._sqlite3_preupdate_old=(e,t,n)=>(i._sqlite3_preupdate_old=m.sqlite3_preupdate_old)(e,t,n),i._sqlite3_preupdate_count=e=>(i._sqlite3_preupdate_count=m.sqlite3_preupdate_count)(e),i._sqlite3_preupdate_depth=e=>(i._sqlite3_preupdate_depth=m.sqlite3_preupdate_depth)(e),i._sqlite3_preupdate_blobwrite=e=>(i._sqlite3_preupdate_blobwrite=m.sqlite3_preupdate_blobwrite)(e),i._sqlite3_preupdate_new=(e,t,n)=>(i._sqlite3_preupdate_new=m.sqlite3_preupdate_new)(e,t,n),i._sqlite3_value_numeric_type=e=>(i._sqlite3_value_numeric_type=m.sqlite3_value_numeric_type)(e),i._sqlite3_set_authorizer=(e,t,n)=>(i._sqlite3_set_authorizer=m.sqlite3_set_authorizer)(e,t,n),i._sqlite3_strglob=(e,t)=>(i._sqlite3_strglob=m.sqlite3_strglob)(e,t),i._sqlite3_strlike=(e,t,n)=>(i._sqlite3_strlike=m.sqlite3_strlike)(e,t,n),i._sqlite3_auto_extension=e=>(i._sqlite3_auto_extension=m.sqlite3_auto_extension)(e),i._sqlite3_cancel_auto_extension=e=>(i._sqlite3_cancel_auto_extension=m.sqlite3_cancel_auto_extension)(e),i._sqlite3_reset_auto_extension=()=>(i._sqlite3_reset_auto_extension=m.sqlite3_reset_auto_extension)(),i._sqlite3_prepare_v3=(e,t,n,r,s,o)=>(i._sqlite3_prepare_v3=m.sqlite3_prepare_v3)(e,t,n,r,s,o),i._sqlite3_create_module=(e,t,n,r)=>(i._sqlite3_create_module=m.sqlite3_create_module)(e,t,n,r),i._sqlite3_create_module_v2=(e,t,n,r,s)=>(i._sqlite3_create_module_v2=m.sqlite3_create_module_v2)(e,t,n,r,s),i._sqlite3_drop_modules=(e,t)=>(i._sqlite3_drop_modules=m.sqlite3_drop_modules)(e,t),i._sqlite3_declare_vtab=(e,t)=>(i._sqlite3_declare_vtab=m.sqlite3_declare_vtab)(e,t),i._sqlite3_vtab_on_conflict=e=>(i._sqlite3_vtab_on_conflict=m.sqlite3_vtab_on_conflict)(e),i._sqlite3_vtab_collation=(e,t)=>(i._sqlite3_vtab_collation=m.sqlite3_vtab_collation)(e,t),i._sqlite3_vtab_in=(e,t,n)=>(i._sqlite3_vtab_in=m.sqlite3_vtab_in)(e,t,n),i._sqlite3_vtab_rhs_value=(e,t,n)=>(i._sqlite3_vtab_rhs_value=m.sqlite3_vtab_rhs_value)(e,t,n),i._sqlite3_vtab_distinct=e=>(i._sqlite3_vtab_distinct=m.sqlite3_vtab_distinct)(e),i._sqlite3_keyword_name=(e,t,n)=>(i._sqlite3_keyword_name=m.sqlite3_keyword_name)(e,t,n),i._sqlite3_keyword_count=()=>(i._sqlite3_keyword_count=m.sqlite3_keyword_count)(),i._sqlite3_keyword_check=(e,t)=>(i._sqlite3_keyword_check=m.sqlite3_keyword_check)(e,t),i._sqlite3_complete=e=>(i._sqlite3_complete=m.sqlite3_complete)(e),i._sqlite3_libversion=()=>(i._sqlite3_libversion=m.sqlite3_libversion)(),i._sqlite3_libversion_number=()=>(i._sqlite3_libversion_number=m.sqlite3_libversion_number)(),i._sqlite3_shutdown=()=>(i._sqlite3_shutdown=m.sqlite3_shutdown)(),i._sqlite3_last_insert_rowid=e=>(i._sqlite3_last_insert_rowid=m.sqlite3_last_insert_rowid)(e),i._sqlite3_set_last_insert_rowid=(e,t)=>(i._sqlite3_set_last_insert_rowid=m.sqlite3_set_last_insert_rowid)(e,t),i._sqlite3_changes64=e=>(i._sqlite3_changes64=m.sqlite3_changes64)(e),i._sqlite3_changes=e=>(i._sqlite3_changes=m.sqlite3_changes)(e),i._sqlite3_total_changes64=e=>(i._sqlite3_total_changes64=m.sqlite3_total_changes64)(e),i._sqlite3_total_changes=e=>(i._sqlite3_total_changes=m.sqlite3_total_changes)(e),i._sqlite3_txn_state=(e,t)=>(i._sqlite3_txn_state=m.sqlite3_txn_state)(e,t),i._sqlite3_close_v2=e=>(i._sqlite3_close_v2=m.sqlite3_close_v2)(e),i._sqlite3_busy_handler=(e,t,n)=>(i._sqlite3_busy_handler=m.sqlite3_busy_handler)(e,t,n),i._sqlite3_progress_handler=(e,t,n,r)=>(i._sqlite3_progress_handler=m.sqlite3_progress_handler)(e,t,n,r),i._sqlite3_busy_timeout=(e,t)=>(i._sqlite3_busy_timeout=m.sqlite3_busy_timeout)(e,t),i._sqlite3_interrupt=e=>(i._sqlite3_interrupt=m.sqlite3_interrupt)(e),i._sqlite3_is_interrupted=e=>(i._sqlite3_is_interrupted=m.sqlite3_is_interrupted)(e),i._sqlite3_create_function=(e,t,n,r,s,o,p,g)=>(i._sqlite3_create_function=m.sqlite3_create_function)(e,t,n,r,s,o,p,g),i._sqlite3_create_function_v2=(e,t,n,r,s,o,p,g,P)=>(i._sqlite3_create_function_v2=m.sqlite3_create_function_v2)(e,t,n,r,s,o,p,g,P),i._sqlite3_create_window_function=(e,t,n,r,s,o,p,g,P,R)=>(i._sqlite3_create_window_function=m.sqlite3_create_window_function)(e,t,n,r,s,o,p,g,P,R),i._sqlite3_overload_function=(e,t,n)=>(i._sqlite3_overload_function=m.sqlite3_overload_function)(e,t,n),i._sqlite3_trace_v2=(e,t,n,r)=>(i._sqlite3_trace_v2=m.sqlite3_trace_v2)(e,t,n,r),i._sqlite3_commit_hook=(e,t,n)=>(i._sqlite3_commit_hook=m.sqlite3_commit_hook)(e,t,n),i._sqlite3_update_hook=(e,t,n)=>(i._sqlite3_update_hook=m.sqlite3_update_hook)(e,t,n),i._sqlite3_rollback_hook=(e,t,n)=>(i._sqlite3_rollback_hook=m.sqlite3_rollback_hook)(e,t,n),i._sqlite3_preupdate_hook=(e,t,n)=>(i._sqlite3_preupdate_hook=m.sqlite3_preupdate_hook)(e,t,n),i._sqlite3_error_offset=e=>(i._sqlite3_error_offset=m.sqlite3_error_offset)(e),i._sqlite3_errcode=e=>(i._sqlite3_errcode=m.sqlite3_errcode)(e),i._sqlite3_extended_errcode=e=>(i._sqlite3_extended_errcode=m.sqlite3_extended_errcode)(e),i._sqlite3_errstr=e=>(i._sqlite3_errstr=m.sqlite3_errstr)(e),i._sqlite3_limit=(e,t,n)=>(i._sqlite3_limit=m.sqlite3_limit)(e,t,n),i._sqlite3_open=(e,t)=>(i._sqlite3_open=m.sqlite3_open)(e,t),i._sqlite3_open_v2=(e,t,n,r)=>(i._sqlite3_open_v2=m.sqlite3_open_v2)(e,t,n,r),i._sqlite3_create_collation=(e,t,n,r,s)=>(i._sqlite3_create_collation=m.sqlite3_create_collation)(e,t,n,r,s),i._sqlite3_create_collation_v2=(e,t,n,r,s,o)=>(i._sqlite3_create_collation_v2=m.sqlite3_create_collation_v2)(e,t,n,r,s,o),i._sqlite3_collation_needed=(e,t,n)=>(i._sqlite3_collation_needed=m.sqlite3_collation_needed)(e,t,n),i._sqlite3_get_autocommit=e=>(i._sqlite3_get_autocommit=m.sqlite3_get_autocommit)(e),i._sqlite3_table_column_metadata=(e,t,n,r,s,o,p,g,P)=>(i._sqlite3_table_column_metadata=m.sqlite3_table_column_metadata)(e,t,n,r,s,o,p,g,P),i._sqlite3_extended_result_codes=(e,t)=>(i._sqlite3_extended_result_codes=m.sqlite3_extended_result_codes)(e,t),i._sqlite3_uri_key=(e,t)=>(i._sqlite3_uri_key=m.sqlite3_uri_key)(e,t),i._sqlite3_uri_int64=(e,t,n)=>(i._sqlite3_uri_int64=m.sqlite3_uri_int64)(e,t,n),i._sqlite3_db_name=(e,t)=>(i._sqlite3_db_name=m.sqlite3_db_name)(e,t),i._sqlite3_db_filename=(e,t)=>(i._sqlite3_db_filename=m.sqlite3_db_filename)(e,t),i._sqlite3_db_readonly=(e,t)=>(i._sqlite3_db_readonly=m.sqlite3_db_readonly)(e,t),i._sqlite3_compileoption_used=e=>(i._sqlite3_compileoption_used=m.sqlite3_compileoption_used)(e),i._sqlite3_compileoption_get=e=>(i._sqlite3_compileoption_get=m.sqlite3_compileoption_get)(e),i._sqlite3session_diff=(e,t,n,r)=>(i._sqlite3session_diff=m.sqlite3session_diff)(e,t,n,r),i._sqlite3session_attach=(e,t)=>(i._sqlite3session_attach=m.sqlite3session_attach)(e,t),i._sqlite3session_create=(e,t,n)=>(i._sqlite3session_create=m.sqlite3session_create)(e,t,n),i._sqlite3session_delete=e=>(i._sqlite3session_delete=m.sqlite3session_delete)(e),i._sqlite3session_table_filter=(e,t,n)=>(i._sqlite3session_table_filter=m.sqlite3session_table_filter)(e,t,n),i._sqlite3session_changeset=(e,t,n)=>(i._sqlite3session_changeset=m.sqlite3session_changeset)(e,t,n),i._sqlite3session_changeset_strm=(e,t,n)=>(i._sqlite3session_changeset_strm=m.sqlite3session_changeset_strm)(e,t,n),i._sqlite3session_patchset_strm=(e,t,n)=>(i._sqlite3session_patchset_strm=m.sqlite3session_patchset_strm)(e,t,n),i._sqlite3session_patchset=(e,t,n)=>(i._sqlite3session_patchset=m.sqlite3session_patchset)(e,t,n),i._sqlite3session_enable=(e,t)=>(i._sqlite3session_enable=m.sqlite3session_enable)(e,t),i._sqlite3session_indirect=(e,t)=>(i._sqlite3session_indirect=m.sqlite3session_indirect)(e,t),i._sqlite3session_isempty=e=>(i._sqlite3session_isempty=m.sqlite3session_isempty)(e),i._sqlite3session_memory_used=e=>(i._sqlite3session_memory_used=m.sqlite3session_memory_used)(e),i._sqlite3session_object_config=(e,t,n)=>(i._sqlite3session_object_config=m.sqlite3session_object_config)(e,t,n),i._sqlite3session_changeset_size=e=>(i._sqlite3session_changeset_size=m.sqlite3session_changeset_size)(e),i._sqlite3changeset_start=(e,t,n)=>(i._sqlite3changeset_start=m.sqlite3changeset_start)(e,t,n),i._sqlite3changeset_start_v2=(e,t,n,r)=>(i._sqlite3changeset_start_v2=m.sqlite3changeset_start_v2)(e,t,n,r),i._sqlite3changeset_start_strm=(e,t,n)=>(i._sqlite3changeset_start_strm=m.sqlite3changeset_start_strm)(e,t,n),i._sqlite3changeset_start_v2_strm=(e,t,n,r)=>(i._sqlite3changeset_start_v2_strm=m.sqlite3changeset_start_v2_strm)(e,t,n,r),i._sqlite3changeset_next=e=>(i._sqlite3changeset_next=m.sqlite3changeset_next)(e),i._sqlite3changeset_op=(e,t,n,r,s)=>(i._sqlite3changeset_op=m.sqlite3changeset_op)(e,t,n,r,s),i._sqlite3changeset_pk=(e,t,n)=>(i._sqlite3changeset_pk=m.sqlite3changeset_pk)(e,t,n),i._sqlite3changeset_old=(e,t,n)=>(i._sqlite3changeset_old=m.sqlite3changeset_old)(e,t,n),i._sqlite3changeset_new=(e,t,n)=>(i._sqlite3changeset_new=m.sqlite3changeset_new)(e,t,n),i._sqlite3changeset_conflict=(e,t,n)=>(i._sqlite3changeset_conflict=m.sqlite3changeset_conflict)(e,t,n),i._sqlite3changeset_fk_conflicts=(e,t)=>(i._sqlite3changeset_fk_conflicts=m.sqlite3changeset_fk_conflicts)(e,t),i._sqlite3changeset_finalize=e=>(i._sqlite3changeset_finalize=m.sqlite3changeset_finalize)(e),i._sqlite3changeset_invert=(e,t,n,r)=>(i._sqlite3changeset_invert=m.sqlite3changeset_invert)(e,t,n,r),i._sqlite3changeset_invert_strm=(e,t,n,r)=>(i._sqlite3changeset_invert_strm=m.sqlite3changeset_invert_strm)(e,t,n,r),i._sqlite3changeset_apply_v2=(e,t,n,r,s,o,p,g,P)=>(i._sqlite3changeset_apply_v2=m.sqlite3changeset_apply_v2)(e,t,n,r,s,o,p,g,P),i._sqlite3changeset_apply=(e,t,n,r,s,o)=>(i._sqlite3changeset_apply=m.sqlite3changeset_apply)(e,t,n,r,s,o),i._sqlite3changeset_apply_v2_strm=(e,t,n,r,s,o,p,g,P)=>(i._sqlite3changeset_apply_v2_strm=m.sqlite3changeset_apply_v2_strm)(e,t,n,r,s,o,p,g,P),i._sqlite3changeset_apply_strm=(e,t,n,r,s,o)=>(i._sqlite3changeset_apply_strm=m.sqlite3changeset_apply_strm)(e,t,n,r,s,o),i._sqlite3changegroup_new=e=>(i._sqlite3changegroup_new=m.sqlite3changegroup_new)(e),i._sqlite3changegroup_add=(e,t,n)=>(i._sqlite3changegroup_add=m.sqlite3changegroup_add)(e,t,n),i._sqlite3changegroup_output=(e,t,n)=>(i._sqlite3changegroup_output=m.sqlite3changegroup_output)(e,t,n),i._sqlite3changegroup_add_strm=(e,t,n)=>(i._sqlite3changegroup_add_strm=m.sqlite3changegroup_add_strm)(e,t,n),i._sqlite3changegroup_output_strm=(e,t,n)=>(i._sqlite3changegroup_output_strm=m.sqlite3changegroup_output_strm)(e,t,n),i._sqlite3changegroup_delete=e=>(i._sqlite3changegroup_delete=m.sqlite3changegroup_delete)(e),i._sqlite3changeset_concat=(e,t,n,r,s,o)=>(i._sqlite3changeset_concat=m.sqlite3changeset_concat)(e,t,n,r,s,o),i._sqlite3changeset_concat_strm=(e,t,n,r,s,o)=>(i._sqlite3changeset_concat_strm=m.sqlite3changeset_concat_strm)(e,t,n,r,s,o),i._sqlite3session_config=(e,t)=>(i._sqlite3session_config=m.sqlite3session_config)(e,t),i._sqlite3_sourceid=()=>(i._sqlite3_sourceid=m.sqlite3_sourceid)(),i._sqlite3__wasm_pstack_ptr=()=>(i._sqlite3__wasm_pstack_ptr=m.sqlite3__wasm_pstack_ptr)(),i._sqlite3__wasm_pstack_restore=e=>(i._sqlite3__wasm_pstack_restore=m.sqlite3__wasm_pstack_restore)(e),i._sqlite3__wasm_pstack_alloc=e=>(i._sqlite3__wasm_pstack_alloc=m.sqlite3__wasm_pstack_alloc)(e),i._sqlite3__wasm_pstack_remaining=()=>(i._sqlite3__wasm_pstack_remaining=m.sqlite3__wasm_pstack_remaining)(),i._sqlite3__wasm_pstack_quota=()=>(i._sqlite3__wasm_pstack_quota=m.sqlite3__wasm_pstack_quota)(),i._sqlite3__wasm_db_error=(e,t,n)=>(i._sqlite3__wasm_db_error=m.sqlite3__wasm_db_error)(e,t,n),i._sqlite3__wasm_test_struct=e=>(i._sqlite3__wasm_test_struct=m.sqlite3__wasm_test_struct)(e),i._sqlite3__wasm_enum_json=()=>(i._sqlite3__wasm_enum_json=m.sqlite3__wasm_enum_json)(),i._sqlite3__wasm_vfs_unlink=(e,t)=>(i._sqlite3__wasm_vfs_unlink=m.sqlite3__wasm_vfs_unlink)(e,t),i._sqlite3__wasm_db_vfs=(e,t)=>(i._sqlite3__wasm_db_vfs=m.sqlite3__wasm_db_vfs)(e,t),i._sqlite3__wasm_db_reset=e=>(i._sqlite3__wasm_db_reset=m.sqlite3__wasm_db_reset)(e),i._sqlite3__wasm_db_export_chunked=(e,t)=>(i._sqlite3__wasm_db_export_chunked=m.sqlite3__wasm_db_export_chunked)(e,t),i._sqlite3__wasm_db_serialize=(e,t,n,r,s)=>(i._sqlite3__wasm_db_serialize=m.sqlite3__wasm_db_serialize)(e,t,n,r,s),i._sqlite3__wasm_vfs_create_file=(e,t,n,r)=>(i._sqlite3__wasm_vfs_create_file=m.sqlite3__wasm_vfs_create_file)(e,t,n,r),i._sqlite3__wasm_posix_create_file=(e,t,n)=>(i._sqlite3__wasm_posix_create_file=m.sqlite3__wasm_posix_create_file)(e,t,n),i._sqlite3__wasm_kvvfsMakeKeyOnPstack=(e,t)=>(i._sqlite3__wasm_kvvfsMakeKeyOnPstack=m.sqlite3__wasm_kvvfsMakeKeyOnPstack)(e,t),i._sqlite3__wasm_kvvfs_methods=()=>(i._sqlite3__wasm_kvvfs_methods=m.sqlite3__wasm_kvvfs_methods)(),i._sqlite3__wasm_vtab_config=(e,t,n)=>(i._sqlite3__wasm_vtab_config=m.sqlite3__wasm_vtab_config)(e,t,n),i._sqlite3__wasm_db_config_ip=(e,t,n,r)=>(i._sqlite3__wasm_db_config_ip=m.sqlite3__wasm_db_config_ip)(e,t,n,r),i._sqlite3__wasm_db_config_pii=(e,t,n,r,s)=>(i._sqlite3__wasm_db_config_pii=m.sqlite3__wasm_db_config_pii)(e,t,n,r,s),i._sqlite3__wasm_db_config_s=(e,t,n)=>(i._sqlite3__wasm_db_config_s=m.sqlite3__wasm_db_config_s)(e,t,n),i._sqlite3__wasm_config_i=(e,t)=>(i._sqlite3__wasm_config_i=m.sqlite3__wasm_config_i)(e,t),i._sqlite3__wasm_config_ii=(e,t,n)=>(i._sqlite3__wasm_config_ii=m.sqlite3__wasm_config_ii)(e,t,n),i._sqlite3__wasm_config_j=(e,t)=>(i._sqlite3__wasm_config_j=m.sqlite3__wasm_config_j)(e,t),i._sqlite3__wasm_qfmt_token=(e,t)=>(i._sqlite3__wasm_qfmt_token=m.sqlite3__wasm_qfmt_token)(e,t),i._sqlite3__wasm_init_wasmfs=e=>(i._sqlite3__wasm_init_wasmfs=m.sqlite3__wasm_init_wasmfs)(e),i._sqlite3__wasm_test_intptr=e=>(i._sqlite3__wasm_test_intptr=m.sqlite3__wasm_test_intptr)(e),i._sqlite3__wasm_test_voidptr=e=>(i._sqlite3__wasm_test_voidptr=m.sqlite3__wasm_test_voidptr)(e),i._sqlite3__wasm_test_int64_max=()=>(i._sqlite3__wasm_test_int64_max=m.sqlite3__wasm_test_int64_max)(),i._sqlite3__wasm_test_int64_min=()=>(i._sqlite3__wasm_test_int64_min=m.sqlite3__wasm_test_int64_min)(),i._sqlite3__wasm_test_int64_times2=e=>(i._sqlite3__wasm_test_int64_times2=m.sqlite3__wasm_test_int64_times2)(e),i._sqlite3__wasm_test_int64_minmax=(e,t)=>(i._sqlite3__wasm_test_int64_minmax=m.sqlite3__wasm_test_int64_minmax)(e,t),i._sqlite3__wasm_test_int64ptr=e=>(i._sqlite3__wasm_test_int64ptr=m.sqlite3__wasm_test_int64ptr)(e),i._sqlite3__wasm_test_stack_overflow=e=>(i._sqlite3__wasm_test_stack_overflow=m.sqlite3__wasm_test_stack_overflow)(e),i._sqlite3__wasm_test_str_hello=e=>(i._sqlite3__wasm_test_str_hello=m.sqlite3__wasm_test_str_hello)(e),i._sqlite3__wasm_SQLTester_strglob=(e,t)=>(i._sqlite3__wasm_SQLTester_strglob=m.sqlite3__wasm_SQLTester_strglob)(e,t),i._malloc=e=>(i._malloc=m.malloc)(e),i._free=e=>(i._free=m.free)(e),i._realloc=(e,t)=>(i._realloc=m.realloc)(e,t);var At=(e,t)=>(At=m.emscripten_builtin_memalign)(e,t);i.wasmMemory=Ce;var tt,It;Ge=function e(){tt||kt(),tt||(Ge=e)};function kt(){if(De>0||!It&&(It=1,Ot(),De>0))return;function e(){tt||(tt=1,i.calledRun=1,!ut&&(Lt(),ye(i),i.onRuntimeInitialized?.(),Ct()))}i.setStatus?(i.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>i.setStatus(""),1),e()},1)):e()}if(i.preInit)for(typeof i.preInit=="function"&&(i.preInit=[i.preInit]);i.preInit.length>0;)i.preInit.pop()();return kt(),i.runSQLite3PostLoadInit=function(e){if(globalThis.sqlite3ApiBootstrap=function t(n=globalThis.sqlite3ApiConfig||t.defaultConfig){if(t.sqlite3)return(t.sqlite3.config||console).warn("sqlite3ApiBootstrap() called multiple times.","Config and external initializers are ignored on calls after the first."),t.sqlite3;const r=Object.assign(Object.create(null),{exports:void 0,memory:void 0,bigIntEnabled:typeof i<"u"&&i.HEAPU64?!0:!!globalThis.BigInt64Array,debug:console.debug.bind(console),warn:console.warn.bind(console),error:console.error.bind(console),log:console.log.bind(console),wasmfsOpfsDir:"/opfs",useStdAlloc:!1},n||{});Object.assign(r,{allocExportName:r.useStdAlloc?"malloc":"sqlite3_malloc",deallocExportName:r.useStdAlloc?"free":"sqlite3_free",reallocExportName:r.useStdAlloc?"realloc":"sqlite3_realloc"},r),["exports","memory","wasmfsOpfsDir"].forEach(l=>{typeof r[l]=="function"&&(r[l]=r[l]())}),delete globalThis.sqlite3ApiConfig,delete t.defaultConfig;const s=Object.create(null),o=Object.create(null),p=l=>s.sqlite3_js_rc_str&&s.sqlite3_js_rc_str(l)||"Unknown result code #"+l,g=l=>typeof l=="number"&&l===(l|0);class P extends Error{constructor(..._){let u;if(_.length)if(g(_[0]))if(u=_[0],_.length===1)super(p(_[0]));else{const I=p(u);typeof _[1]=="object"?super(I,_[1]):(_[0]=I+":",super(_.join(" ")))}else _.length===2&&typeof _[1]=="object"?super(..._):super(_.join(" "));this.resultCode=u||s.SQLITE_ERROR,this.name="SQLite3Error"}}P.toss=(...l)=>{throw new P(...l)};const R=P.toss;r.wasmfsOpfsDir&&!/^\/[^/]+$/.test(r.wasmfsOpfsDir)&&R("config.wasmfsOpfsDir must be falsy or in the form '/dir-name'.");const z=l=>typeof l!="bigint"&&l===(l|0)&&l<=2147483647&&l>=-2147483648,Q=function l(_){return l._max||(l._max=BigInt("0x7fffffffffffffff"),l._min=~l._max),_>=l._min&&_<=l._max},T=l=>l>=-0x7fffffffn-1n&&l<=0x7fffffffn,A=function l(_){return l._min||(l._min=Number.MIN_SAFE_INTEGER,l._max=Number.MAX_SAFE_INTEGER),_>=l._min&&_<=l._max},D=l=>l&&l.constructor&&z(l.constructor.BYTES_PER_ELEMENT)?l:!1,q=typeof SharedArrayBuffer>"u"?function(){}:SharedArrayBuffer,w=l=>l.buffer instanceof q,x=(l,_,u)=>w(l)?l.slice(_,u):l.subarray(_,u),N=l=>l&&(l instanceof Uint8Array||l instanceof Int8Array||l instanceof ArrayBuffer),O=l=>l&&(l instanceof Uint8Array||l instanceof Int8Array||l instanceof ArrayBuffer),S=l=>N(l)||R("Value is not of a supported TypedArray type."),L=new TextDecoder("utf-8"),$=function(l,_,u){return L.decode(x(l,_,u))},c=function(l){return O(l)?$(l instanceof ArrayBuffer?new Uint8Array(l):l):Array.isArray(l)?l.join(""):(o.isPtr(l)&&(l=o.cstrToJs(l)),l)};class d extends Error{constructor(..._){_.length===2&&typeof _[1]=="object"?super(..._):_.length?super(_.join(" ")):super("Allocation failed."),this.resultCode=s.SQLITE_NOMEM,this.name="WasmAllocError"}}d.toss=(...l)=>{throw new d(...l)},Object.assign(s,{sqlite3_bind_blob:void 0,sqlite3_bind_text:void 0,sqlite3_create_function_v2:(l,_,u,I,U,ee,ne,se,ie)=>{},sqlite3_create_function:(l,_,u,I,U,ee,ne,se)=>{},sqlite3_create_window_function:(l,_,u,I,U,ee,ne,se,ie,j)=>{},sqlite3_prepare_v3:(l,_,u,I,U,ee)=>{},sqlite3_prepare_v2:(l,_,u,I,U)=>{},sqlite3_exec:(l,_,u,I,U)=>{},sqlite3_randomness:(l,_)=>{}});const y={affirmBindableTypedArray:S,flexibleString:c,bigIntFits32:T,bigIntFits64:Q,bigIntFitsDouble:A,isBindableTypedArray:N,isInt32:z,isSQLableTypedArray:O,isTypedArray:D,typedArrayToString:$,isUIThread:()=>globalThis.window===globalThis&&!!globalThis.document,isSharedTypedArray:w,toss:function(...l){throw new Error(l.join(" "))},toss3:R,typedArrayPart:x,affirmDbHeader:function(l){l instanceof ArrayBuffer&&(l=new Uint8Array(l));const _="SQLite format 3";_.length>l.byteLength&&R("Input does not contain an SQLite3 database header.");for(let u=0;u<_.length;++u)_.charCodeAt(u)!==l[u]&&R("Input does not contain an SQLite3 database header.")},affirmIsDb:function(l){l instanceof ArrayBuffer&&(l=new Uint8Array(l));const _=l.byteLength;(_<512||_%512!==0)&&R("Byte array size",_,"is invalid for an SQLite3 db."),y.affirmDbHeader(l)}};Object.assign(o,{ptrSizeof:r.wasmPtrSizeof||4,ptrIR:r.wasmPtrIR||"i32",bigIntEnabled:!!r.bigIntEnabled,exports:r.exports||R("Missing API config.exports (WASM module exports)."),memory:r.memory||r.exports.memory||R("API config object requires a WebAssembly.Memory object","in either config.exports.memory (exported)","or config.memory (imported)."),alloc:void 0,realloc:void 0,dealloc:void 0}),o.allocFromTypedArray=function(l){l instanceof ArrayBuffer&&(l=new Uint8Array(l)),S(l);const _=o.alloc(l.byteLength||1);return o.heapForSize(l.constructor).set(l.byteLength?l:[0],_),_};{const l=r.allocExportName,_=r.deallocExportName,u=r.reallocExportName;for(const I of[l,_,u])o.exports[I]instanceof Function||R("Missing required exports[",I,"] function.");o.alloc=function I(U){return I.impl(U)||d.toss("Failed to allocate",U," bytes.")},o.alloc.impl=o.exports[l],o.realloc=function I(U,ee){const ne=I.impl(U,ee);return ee?ne||d.toss("Failed to reallocate",ee," bytes."):0},o.realloc.impl=o.exports[u],o.dealloc=o.exports[_]}o.compileOptionUsed=function l(_){if(arguments.length){if(Array.isArray(_)){const u={};return _.forEach(I=>{u[I]=s.sqlite3_compileoption_used(I)}),u}else if(typeof _=="object")return Object.keys(_).forEach(u=>{_[u]=s.sqlite3_compileoption_used(u)}),_}else{if(l._result)return l._result;l._opt||(l._rx=/^([^=]+)=(.+)/,l._rxInt=/^-?\d+$/,l._opt=function(ne,se){const ie=l._rx.exec(ne);se[0]=ie?ie[1]:ne,se[1]=ie?l._rxInt.test(ie[2])?+ie[2]:ie[2]:!0});const u={},I=[0,0];let U=0,ee;for(;ee=s.sqlite3_compileoption_get(U++);)l._opt(ee,I),u[I[0]]=I[1];return l._result=u}return typeof _=="string"?!!s.sqlite3_compileoption_used(_):!1},o.pstack=Object.assign(Object.create(null),{restore:o.exports.sqlite3__wasm_pstack_restore,alloc:function(l){return typeof l=="string"&&!(l=o.sizeofIR(l))&&d.toss("Invalid value for pstack.alloc(",arguments[0],")"),o.exports.sqlite3__wasm_pstack_alloc(l)||d.toss("Could not allocate",l,"bytes from the pstack.")},allocChunks:function(l,_){typeof _=="string"&&!(_=o.sizeofIR(_))&&d.toss("Invalid size value for allocChunks(",arguments[1],")");const u=o.pstack.alloc(l*_),I=[];let U=0,ee=0;for(;Ul===1?o.pstack.alloc(_?8:o.ptrSizeof):o.pstack.allocChunks(l,_?8:o.ptrSizeof),call:function(l){const _=o.pstack.pointer;try{return l(h)}finally{o.pstack.restore(_)}}}),Object.defineProperties(o.pstack,{pointer:{configurable:!1,iterable:!0,writeable:!1,get:o.exports.sqlite3__wasm_pstack_ptr},quota:{configurable:!1,iterable:!0,writeable:!1,get:o.exports.sqlite3__wasm_pstack_quota},remaining:{configurable:!1,iterable:!0,writeable:!1,get:o.exports.sqlite3__wasm_pstack_remaining}}),s.sqlite3_randomness=(...l)=>{if(l.length===1&&y.isTypedArray(l[0])&&l[0].BYTES_PER_ELEMENT===1){const _=l[0];if(_.byteLength===0)return o.exports.sqlite3_randomness(0,0),_;const u=o.pstack.pointer;try{let I=_.byteLength,U=0;const ee=o.exports.sqlite3_randomness,ne=o.heap8u(),se=I<512?I:512,ie=o.pstack.alloc(se);do{const j=I>se?se:I;ee(j,ie),_.set(x(ne,ie,ie+j),U),I-=j,U+=j}while(I>0)}catch(I){console.error("Highly unexpected (and ignored!) exception in sqlite3_randomness():",I)}finally{o.pstack.restore(u)}return _}o.exports.sqlite3_randomness(...l)};let B;if(s.sqlite3_wasmfs_opfs_dir=function(){if(B!==void 0)return B;const l=r.wasmfsOpfsDir;if(!l||!globalThis.FileSystemHandle||!globalThis.FileSystemDirectoryHandle||!globalThis.FileSystemFileHandle)return B="";try{return l&&o.xCallWrapped("sqlite3__wasm_init_wasmfs","i32",["string"],l)===0?B=l:B=""}catch{return B=""}},s.sqlite3_wasmfs_filename_is_persistent=function(l){const _=s.sqlite3_wasmfs_opfs_dir();return _&&l?l.startsWith(_+"/"):!1},s.sqlite3_js_db_uses_vfs=function(l,_,u=0){try{const I=s.sqlite3_vfs_find(_);return I?l?I===s.sqlite3_js_db_vfs(l,u)?I:!1:I===s.sqlite3_vfs_find(0)?I:!1:!1}catch{return!1}},s.sqlite3_js_vfs_list=function(){const l=[];let _=s.sqlite3_vfs_find(0);for(;_;){const u=new s.sqlite3_vfs(_);l.push(o.cstrToJs(u.$zName)),_=u.$pNext,u.dispose()}return l},s.sqlite3_js_db_export=function(l,_=0){l=o.xWrap.testConvertArg("sqlite3*",l),l||R("Invalid sqlite3* argument."),o.bigIntEnabled||R("BigInt64 support is not enabled.");const u=o.scopedAllocPush();let I;try{const U=o.scopedAlloc(8+o.ptrSizeof),ee=U+8,ne=_?o.isPtr(_)?_:o.scopedAllocCString(""+_):0;let se=o.exports.sqlite3__wasm_db_serialize(l,ne,ee,U,0);se&&R("Database serialization failed with code",h.capi.sqlite3_js_rc_str(se)),I=o.peekPtr(ee);const ie=o.peek(U,"i64");return se=ie?o.heap8u().slice(I,I+Number(ie)):new Uint8Array,se}finally{I&&o.exports.sqlite3_free(I),o.scopedAllocPop(u)}},s.sqlite3_js_db_vfs=(l,_=0)=>y.sqlite3__wasm_db_vfs(l,_),s.sqlite3_js_aggregate_context=(l,_)=>s.sqlite3_aggregate_context(l,_)||(_?d.toss("Cannot allocate",_,"bytes for sqlite3_aggregate_context()"):0),s.sqlite3_js_posix_create_file=function(l,_,u){let I;_&&o.isPtr(_)?I=_:_ instanceof ArrayBuffer||_ instanceof Uint8Array?(I=o.allocFromTypedArray(_),(arguments.length<3||!y.isInt32(u)||u<0)&&(u=_.byteLength)):P.toss("Invalid 2nd argument for sqlite3_js_posix_create_file().");try{(!y.isInt32(u)||u<0)&&P.toss("Invalid 3rd argument for sqlite3_js_posix_create_file().");const U=y.sqlite3__wasm_posix_create_file(l,I,u);U&&P.toss("Creation of file failed with sqlite3 result code",s.sqlite3_js_rc_str(U))}finally{o.dealloc(I)}},s.sqlite3_js_vfs_create_file=function(l,_,u,I){r.warn("sqlite3_js_vfs_create_file() is deprecated and","should be avoided because it can lead to C-level crashes.","See its documentation for alternative options.");let U;u?(o.isPtr(u)?U=u:u instanceof ArrayBuffer&&(u=new Uint8Array(u)),u instanceof Uint8Array?(U=o.allocFromTypedArray(u),(arguments.length<4||!y.isInt32(I)||I<0)&&(I=u.byteLength)):P.toss("Invalid 3rd argument type for sqlite3_js_vfs_create_file().")):U=0,(!y.isInt32(I)||I<0)&&(o.dealloc(U),P.toss("Invalid 4th argument for sqlite3_js_vfs_create_file()."));try{const ee=y.sqlite3__wasm_vfs_create_file(l,_,U,I);ee&&P.toss("Creation of file failed with sqlite3 result code",s.sqlite3_js_rc_str(ee))}finally{o.dealloc(U)}},s.sqlite3_js_sql_to_string=l=>{if(typeof l=="string")return l;const _=c(v);return _===v?void 0:_},y.isUIThread()){const l=function(_){const u=Object.create(null);return u.prefix="kvvfs-"+_,u.stores=[],(_==="session"||_==="")&&u.stores.push(globalThis.sessionStorage),(_==="local"||_==="")&&u.stores.push(globalThis.localStorage),u};s.sqlite3_js_kvvfs_clear=function(_=""){let u=0;const I=l(_);return I.stores.forEach(U=>{const ee=[];let ne;for(ne=0;neU.removeItem(se)),u+=ee.length}),u},s.sqlite3_js_kvvfs_size=function(_=""){let u=0;const I=l(_);return I.stores.forEach(U=>{let ee;for(ee=0;eef(l,_,"sqlite3_preupdate_new"),s.sqlite3_preupdate_old_js=(l,_)=>f(l,_,"sqlite3_preupdate_old"),s.sqlite3changeset_new_js=(l,_)=>f(l,_,"sqlite3changeset_new"),s.sqlite3changeset_old_js=(l,_)=>f(l,_,"sqlite3changeset_old");const h={WasmAllocError:d,SQLite3Error:P,capi:s,util:y,wasm:o,config:r,version:Object.create(null),client:void 0,asyncPostInit:async function l(){if(l.isReady instanceof Promise)return l.isReady;let _=t.initializersAsync;delete t.initializersAsync;const u=async()=>(h.__isUnderTest||(delete h.util,delete h.StructBinder),h),I=ee=>{throw r.error("an async sqlite3 initializer failed:",ee),ee};if(!_||!_.length)return l.isReady=u().catch(I);_=_.map(ee=>ee instanceof Function?async ne=>ee(h):ee),_.push(u);let U=Promise.resolve(h);for(;_.length;)U=U.then(_.shift());return l.isReady=U.catch(I)},scriptInfo:void 0};try{t.initializers.forEach(l=>{l(h)})}catch(l){throw console.error("sqlite3 bootstrap initializer threw:",l),l}return delete t.initializers,t.sqlite3=h,h},globalThis.sqlite3ApiBootstrap.initializers=[],globalThis.sqlite3ApiBootstrap.initializersAsync=[],globalThis.sqlite3ApiBootstrap.defaultConfig=Object.create(null),globalThis.sqlite3ApiBootstrap.sqlite3=void 0,globalThis.WhWasmUtilInstaller=function(t){t.bigIntEnabled===void 0&&(t.bigIntEnabled=!!globalThis.BigInt64Array);const n=(...c)=>{throw new Error(c.join(" "))};t.exports||Object.defineProperty(t,"exports",{enumerable:!0,configurable:!0,get:()=>t.instance&&t.instance.exports});const r=t.pointerIR||"i32",s=t.ptrSizeof=r==="i32"?4:r==="i64"?8:n("Unhandled ptrSizeof:",r),o=Object.create(null);o.heapSize=0,o.memory=null,o.freeFuncIndexes=[],o.scopedAlloc=[],o.utf8Decoder=new TextDecoder,o.utf8Encoder=new TextEncoder("utf-8"),t.sizeofIR=c=>{switch(c){case"i8":return 1;case"i16":return 2;case"i32":case"f32":case"float":return 4;case"i64":case"f64":case"double":return 8;case"*":return s;default:return(""+c).endsWith("*")?s:void 0}};const p=function(){if(!o.memory)o.memory=t.memory instanceof WebAssembly.Memory?t.memory:t.exports.memory;else if(o.heapSize===o.memory.buffer.byteLength)return o;const c=o.memory.buffer;return o.HEAP8=new Int8Array(c),o.HEAP8U=new Uint8Array(c),o.HEAP16=new Int16Array(c),o.HEAP16U=new Uint16Array(c),o.HEAP32=new Int32Array(c),o.HEAP32U=new Uint32Array(c),t.bigIntEnabled&&(o.HEAP64=new BigInt64Array(c),o.HEAP64U=new BigUint64Array(c)),o.HEAP32F=new Float32Array(c),o.HEAP64F=new Float64Array(c),o.heapSize=c.byteLength,o};t.heap8=()=>p().HEAP8,t.heap8u=()=>p().HEAP8U,t.heap16=()=>p().HEAP16,t.heap16u=()=>p().HEAP16U,t.heap32=()=>p().HEAP32,t.heap32u=()=>p().HEAP32U,t.heapForSize=function(c,d=!0){const y=o.memory&&o.heapSize===o.memory.buffer.byteLength?o:p();switch(c){case Int8Array:return y.HEAP8;case Uint8Array:return y.HEAP8U;case Int16Array:return y.HEAP16;case Uint16Array:return y.HEAP16U;case Int32Array:return y.HEAP32;case Uint32Array:return y.HEAP32U;case 8:return d?y.HEAP8U:y.HEAP8;case 16:return d?y.HEAP16U:y.HEAP16;case 32:return d?y.HEAP32U:y.HEAP32;case 64:if(y.HEAP64)return d?y.HEAP64U:y.HEAP64;break;default:if(t.bigIntEnabled){if(c===globalThis.BigUint64Array)return y.HEAP64U;if(c===globalThis.BigInt64Array)return y.HEAP64;break}}n("Invalid heapForSize() size: expecting 8, 16, 32,","or (if BigInt is enabled) 64.")},t.functionTable=function(){return t.exports.__indirect_function_table},t.functionEntry=function(c){const d=t.functionTable();return c>7)},rxJSig:/^(\w)\((\w*)\)$/,sigParams:function(h){const l=c._.rxJSig.exec(h);return l?l[2]:h.substr(1)},letterType:h=>c._.sigTypes[h]||n("Invalid signature letter:",h),pushSigType:(h,l)=>h.push(c._.typeCodes[c._.letterType(l)])}),typeof d=="string"){const h=y;y=d,d=h}const B=c._.sigParams(y),f=[1,96];c._.uleb128Encode(f,"push",B.length);for(const h of B)c._.pushSigType(f,h);return y[0]==="v"?f.push(0):(f.push(1),c._.pushSigType(f,y[0])),c._.uleb128Encode(f,"unshift",f.length),f.unshift(0,97,115,109,1,0,0,0,1),f.push(2,7,1,1,101,1,102,0,0,7,5,1,1,102,0,0),new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array(f)),{e:{f:d}}).exports.f};const g=function(d,y,B){if(B&&!o.scopedAlloc.length&&n("No scopedAllocPush() scope is active."),typeof d=="string"){const _=y;y=d,d=_}(typeof y!="string"||!(d instanceof Function))&&n("Invalid arguments: expecting (function,signature) or (signature,function).");const f=t.functionTable(),h=f.length;let l;for(;o.freeFuncIndexes.length&&(l=o.freeFuncIndexes.pop(),f.get(l));){l=null;continue}l||(l=h,f.grow(1));try{return f.set(l,d),B&&o.scopedAlloc[o.scopedAlloc.length-1].push(l),l}catch(_){if(!(_ instanceof TypeError))throw l===h&&o.freeFuncIndexes.push(h),_}try{const _=t.jsFuncToWasm(d,y);f.set(l,_),B&&o.scopedAlloc[o.scopedAlloc.length-1].push(l)}catch(_){throw l===h&&o.freeFuncIndexes.push(h),_}return l};t.installFunction=(c,d)=>g(c,d,!1),t.scopedInstallFunction=(c,d)=>g(c,d,!0),t.uninstallFunction=function(c){if(!c&&c!==0)return;const d=o.freeFuncIndexes,y=t.functionTable();d.push(c);const B=y.get(c);return y.set(c,null),B},t.peek=function(d,y="i8"){y.endsWith("*")&&(y=r);const B=o.memory&&o.heapSize===o.memory.buffer.byteLength?o:p(),f=Array.isArray(d)?[]:void 0;let h;do{switch(f&&(d=arguments[0].shift()),y){case"i1":case"i8":h=B.HEAP8[d>>0];break;case"i16":h=B.HEAP16[d>>1];break;case"i32":h=B.HEAP32[d>>2];break;case"float":case"f32":h=B.HEAP32F[d>>2];break;case"double":case"f64":h=Number(B.HEAP64F[d>>3]);break;case"i64":if(t.bigIntEnabled){h=BigInt(B.HEAP64[d>>3]);break}default:n("Invalid type for peek():",y)}f&&f.push(h)}while(f&&arguments[0].length);return f||h},t.poke=function(c,d,y="i8"){y.endsWith("*")&&(y=r);const B=o.memory&&o.heapSize===o.memory.buffer.byteLength?o:p();for(const f of Array.isArray(c)?c:[c])switch(y){case"i1":case"i8":B.HEAP8[f>>0]=d;continue;case"i16":B.HEAP16[f>>1]=d;continue;case"i32":B.HEAP32[f>>2]=d;continue;case"float":case"f32":B.HEAP32F[f>>2]=d;continue;case"double":case"f64":B.HEAP64F[f>>3]=d;continue;case"i64":if(B.HEAP64){B.HEAP64[f>>3]=BigInt(d);continue}default:n("Invalid type for poke(): "+y)}return this},t.peekPtr=(...c)=>t.peek(c.length===1?c[0]:c,r),t.pokePtr=(c,d=0)=>t.poke(c,d,r),t.peek8=(...c)=>t.peek(c.length===1?c[0]:c,"i8"),t.poke8=(c,d)=>t.poke(c,d,"i8"),t.peek16=(...c)=>t.peek(c.length===1?c[0]:c,"i16"),t.poke16=(c,d)=>t.poke(c,d,"i16"),t.peek32=(...c)=>t.peek(c.length===1?c[0]:c,"i32"),t.poke32=(c,d)=>t.poke(c,d,"i32"),t.peek64=(...c)=>t.peek(c.length===1?c[0]:c,"i64"),t.poke64=(c,d)=>t.poke(c,d,"i64"),t.peek32f=(...c)=>t.peek(c.length===1?c[0]:c,"f32"),t.poke32f=(c,d)=>t.poke(c,d,"f32"),t.peek64f=(...c)=>t.peek(c.length===1?c[0]:c,"f64"),t.poke64f=(c,d)=>t.poke(c,d,"f64"),t.getMemValue=t.peek,t.getPtrValue=t.peekPtr,t.setMemValue=t.poke,t.setPtrValue=t.pokePtr,t.isPtr32=c=>typeof c=="number"&&c===(c|0)&&c>=0,t.isPtr=t.isPtr32,t.cstrlen=function(c){if(!c||!t.isPtr(c))return null;const d=p().HEAP8U;let y=c;for(;d[y]!==0;++y);return y-c};const P=typeof SharedArrayBuffer>"u"?function(){}:SharedArrayBuffer,R=function(c,d,y){return o.utf8Decoder.decode(c.buffer instanceof P?c.slice(d,y):c.subarray(d,y))};t.cstrToJs=function(c){const d=t.cstrlen(c);return d?R(p().HEAP8U,c,c+d):d===null?d:""},t.jstrlen=function(c){if(typeof c!="string")return null;const d=c.length;let y=0;for(let B=0;B=55296&&f<=57343&&(f=65536+((f&1023)<<10)|c.charCodeAt(++B)&1023),f<=127?++y:f<=2047?y+=2:f<=65535?y+=3:y+=4}return y},t.jstrcpy=function(c,d,y=0,B=-1,f=!0){if((!d||!(d instanceof Int8Array)&&!(d instanceof Uint8Array))&&n("jstrcpy() target must be an Int8Array or Uint8Array."),B<0&&(B=d.length-y),!(B>0)||!(y>=0))return 0;let h=0,l=c.length;const _=y,u=y+B-(f?1:0);for(;h=55296&&I<=57343&&(I=65536+((I&1023)<<10)|c.charCodeAt(++h)&1023),I<=127){if(y>=u)break;d[y++]=I}else if(I<=2047){if(y+1>=u)break;d[y++]=192|I>>6,d[y++]=128|I&63}else if(I<=65535){if(y+2>=u)break;d[y++]=224|I>>12,d[y++]=128|I>>6&63,d[y++]=128|I&63}else{if(y+3>=u)break;d[y++]=240|I>>18,d[y++]=128|I>>12&63,d[y++]=128|I>>6&63,d[y++]=128|I&63}}return f&&(d[y++]=0),y-_},t.cstrncpy=function(c,d,y){if((!c||!d)&&n("cstrncpy() does not accept NULL strings."),y<0)y=t.cstrlen(strPtr)+1;else if(!(y>0))return 0;const B=t.heap8u();let f=0,h;for(;fo.utf8Encoder.encode(d?c+"\0":c);const z=(c,d)=>{(!(c.alloc instanceof Function)||!(c.dealloc instanceof Function))&&n("Object is missing alloc() and/or dealloc() function(s)","required by",d+"().")},Q=function(c,d,y,B){if(z(t,B),typeof c!="string")return null;{const f=o.utf8Encoder.encode(c),h=y(f.length+1),l=p().HEAP8U;return l.set(f,h),l[h+f.length]=0,d?[h,f.length]:h}};t.allocCString=(c,d=!1)=>Q(c,d,t.alloc,"allocCString()"),t.scopedAllocPush=function(){z(t,"scopedAllocPush");const c=[];return o.scopedAlloc.push(c),c},t.scopedAllocPop=function(c){z(t,"scopedAllocPop");const d=arguments.length?o.scopedAlloc.indexOf(c):o.scopedAlloc.length-1;d<0&&n("Invalid state object for scopedAllocPop()."),arguments.length===0&&(c=o.scopedAlloc[d]),o.scopedAlloc.splice(d,1);for(let y;y=c.pop();)t.functionEntry(y)?t.uninstallFunction(y):t.dealloc(y)},t.scopedAlloc=function(c){o.scopedAlloc.length||n("No scopedAllocPush() scope is active.");const d=t.alloc(c);return o.scopedAlloc[o.scopedAlloc.length-1].push(d),d},Object.defineProperty(t.scopedAlloc,"level",{configurable:!1,enumerable:!1,get:()=>o.scopedAlloc.length,set:()=>n("The 'active' property is read-only.")}),t.scopedAllocCString=(c,d=!1)=>Q(c,d,t.scopedAlloc,"scopedAllocCString()");const T=function(c,d){const y=t[c?"scopedAlloc":"alloc"]((d.length+1)*t.ptrSizeof);let B=0;return d.forEach(f=>{t.pokePtr(y+t.ptrSizeof*B++,t[c?"scopedAllocCString":"allocCString"](""+f))}),t.pokePtr(y+t.ptrSizeof*B,0),y};t.scopedAllocMainArgv=c=>T(!0,c),t.allocMainArgv=c=>T(!1,c),t.cArgvToJs=(c,d)=>{const y=[];for(let B=0;BA(c,d,"alloc"),t.scopedAllocPtr=(c=1,d=!0)=>A(c,d,"scopedAlloc"),t.xGet=function(c){return t.exports[c]||n("Cannot find exported symbol:",c)};const D=(c,d)=>n(c+"() requires",d,"argument(s).");t.xCall=function(c,...d){const y=c instanceof Function?c:t.xGet(c);return y instanceof Function||n("Exported symbol",c,"is not a function."),y.length!==d.length&&D(y===c?y.name:c,y.length),arguments.length===2&&Array.isArray(arguments[1])?y.apply(null,arguments[1]):y.apply(null,d)},o.xWrap=Object.create(null),o.xWrap.convert=Object.create(null),o.xWrap.convert.arg=new Map,o.xWrap.convert.result=new Map;const q=o.xWrap.convert.arg,w=o.xWrap.convert.result;t.bigIntEnabled&&q.set("i64",c=>BigInt(c));const x=r==="i32"?c=>c|0:c=>BigInt(c)|BigInt(0);q.set("i32",x).set("i16",c=>(c|0)&65535).set("i8",c=>(c|0)&255).set("f32",c=>Number(c).valueOf()).set("float",q.get("f32")).set("f64",q.get("f32")).set("double",q.get("f64")).set("int",q.get("i32")).set("null",c=>c).set(null,q.get("null")).set("**",x).set("*",x),w.set("*",x).set("pointer",x).set("number",c=>Number(c)).set("void",c=>{}).set("null",c=>c).set(null,w.get("null"));{const c=["i8","i16","i32","int","f32","float","f64","double"];t.bigIntEnabled&&c.push("i64");const d=q.get(r);for(const y of c)q.set(y+"*",d),w.set(y+"*",d),w.set(y,q.get(y)||n("Missing arg converter:",y))}const N=function(c){return typeof c=="string"?t.scopedAllocCString(c):c?x(c):null};q.set("string",N).set("utf8",N).set("pointer",N),w.set("string",c=>t.cstrToJs(c)).set("utf8",w.get("string")).set("string:dealloc",c=>{try{return c?t.cstrToJs(c):null}finally{t.dealloc(c)}}).set("utf8:dealloc",w.get("string:dealloc")).set("json",c=>JSON.parse(t.cstrToJs(c))).set("json:dealloc",c=>{try{return c?JSON.parse(t.cstrToJs(c)):null}finally{t.dealloc(c)}});const O=class{constructor(c){this.name=c.name||"unnamed adapter"}convertArg(c,d,y){n("AbstractArgAdapter must be subclassed.")}};q.FuncPtrAdapter=class Te extends O{constructor(d){super(d),q.FuncPtrAdapter.warnOnUse&&console.warn("xArg.FuncPtrAdapter is an internal-only API","and is not intended to be invoked from","client-level code. Invoked with:",d),this.name=d.name||"unnamed",this.signature=d.signature,d.contextKey instanceof Function&&(this.contextKey=d.contextKey,d.bindScope||(d.bindScope="context")),this.bindScope=d.bindScope||n("FuncPtrAdapter options requires a bindScope (explicit or implied)."),Te.bindScopes.indexOf(d.bindScope)<0&&n("Invalid options.bindScope ("+d.bindMod+") for FuncPtrAdapter. Expecting one of: ("+Te.bindScopes.join(", ")+")"),this.isTransient=this.bindScope==="transient",this.isContext=this.bindScope==="context",this.isPermanent=this.bindScope==="permanent",this.singleton=this.bindScope==="singleton"?[]:void 0,this.callProxy=d.callProxy instanceof Function?d.callProxy:void 0}contextKey(d,y){return this}contextMap(d){const y=this.__cmap||(this.__cmap=new Map);let B=y.get(d);return B===void 0&&y.set(d,B=[]),B}convertArg(d,y,B){let f=this.singleton;if(!f&&this.isContext&&(f=this.contextMap(this.contextKey(y,B))),f&&f[0]===d)return f[1];if(d instanceof Function){this.callProxy&&(d=this.callProxy(d));const h=g(d,this.signature,this.isTransient);if(Te.debugFuncInstall&&Te.debugOut("FuncPtrAdapter installed",this,this.contextKey(y,B),"@"+h,d),f){if(f[1]){Te.debugFuncInstall&&Te.debugOut("FuncPtrAdapter uninstalling",this,this.contextKey(y,B),"@"+f[1],d);try{o.scopedAlloc[o.scopedAlloc.length-1].push(f[1])}catch{}}f[0]=d,f[1]=h}return h}else if(t.isPtr(d)||d===null||d===void 0){if(f&&f[1]&&f[1]!==d){Te.debugFuncInstall&&Te.debugOut("FuncPtrAdapter uninstalling",this,this.contextKey(y,B),"@"+f[1],d);try{o.scopedAlloc[o.scopedAlloc.length-1].push(f[1])}catch{}f[0]=f[1]=d|0}return d||0}else throw new TypeError("Invalid FuncPtrAdapter argument type. Expecting a function pointer or a "+(this.name?this.name+" ":"")+"function matching signature "+this.signature+".")}},q.FuncPtrAdapter.warnOnUse=!1,q.FuncPtrAdapter.debugFuncInstall=!1,q.FuncPtrAdapter.debugOut=console.debug.bind(console),q.FuncPtrAdapter.bindScopes=["transient","context","singleton","permanent"];const S=c=>q.get(c)||n("Argument adapter not found:",c),L=c=>w.get(c)||n("Result adapter not found:",c);o.xWrap.convertArg=(c,...d)=>S(c)(...d),o.xWrap.convertArgNoCheck=(c,...d)=>q.get(c)(...d),o.xWrap.convertResult=(c,d)=>c===null?d:c?L(c)(d):void 0,o.xWrap.convertResultNoCheck=(c,d)=>c===null?d:c?w.get(c)(d):void 0,t.xWrap=function(c,d,...y){arguments.length===3&&Array.isArray(arguments[2])&&(y=arguments[2]),t.isPtr(c)&&(c=t.functionEntry(c)||n("Function pointer not found in WASM function table."));const B=c instanceof Function,f=B?c:t.xGet(c);if(B&&(c=f.name||"unnamed function"),y.length!==f.length&&D(c,f.length),d===null&&f.length===0)return f;d!=null&&L(d);for(const l of y)l instanceof O?q.set(l,(..._)=>l.convertArg(..._)):S(l);const h=o.xWrap;return f.length===0?(...l)=>l.length?D(c,f.length):h.convertResult(d,f.call(null)):function(...l){l.length!==f.length&&D(c,f.length);const _=t.scopedAllocPush();try{let u=0;for(;ufetch(t.uri,{credentials:"same-origin"}),r=this,s=function(p){if(t.wasmUtilTarget){const g=(...R)=>{throw new Error(R.join(" "))},P=t.wasmUtilTarget;if(P.module=p.module,P.instance=p.instance,P.instance.exports.memory||(P.memory=t.imports&&t.imports.env&&t.imports.env.memory||g("Missing 'memory' object!")),!P.alloc&&p.instance.exports.malloc){const R=p.instance.exports;P.alloc=function(z){return R.malloc(z)||g("Allocation of",z,"bytes failed.")},P.dealloc=function(z){R.free(z)}}r(P)}return t.onload&&t.onload(p,t),p};return WebAssembly.instantiateStreaming?function(){return WebAssembly.instantiateStreaming(n(),t.imports||{}).then(s)}:function(){return n().then(g=>g.arrayBuffer()).then(g=>WebAssembly.instantiate(g,t.imports||{})).then(s)}}).bind(globalThis.WhWasmUtilInstaller),globalThis.Jaccwabyt=function t(n){const r=(...F)=>{throw new Error(F.join(" "))};!(n.heap instanceof WebAssembly.Memory)&&!(n.heap instanceof Function)&&r("config.heap must be WebAssembly.Memory instance or a function."),["alloc","dealloc"].forEach(function(F){n[F]instanceof Function||r("Config option '"+F+"' must be a function.")});const s=t,o=n.heap instanceof Function?n.heap:()=>new Uint8Array(n.heap.buffer),p=n.alloc,g=n.dealloc,P=n.log||console.log.bind(console),R=n.memberPrefix||"",z=n.memberSuffix||"",Q=n.bigIntEnabled===void 0?!!globalThis.BigInt64Array:!!n.bigIntEnabled,T=globalThis.BigInt,A=globalThis.BigInt64Array,D=n.ptrSizeof||4,q=n.ptrIR||"i32";s.debugFlags||(s.__makeDebugFlags=function(F=null){F&&F.__flags&&(F=F.__flags);const V=function K(X){return arguments.length===0?K.__flags:(X<0?(delete K.__flags.getter,delete K.__flags.setter,delete K.__flags.alloc,delete K.__flags.dealloc):(K.__flags.getter=(1&X)!==0,K.__flags.setter=(2&X)!==0,K.__flags.alloc=(4&X)!==0,K.__flags.dealloc=(8&X)!==0),K._flags)};return Object.defineProperty(V,"__flags",{iterable:!1,writable:!1,value:Object.create(F)}),F||V(0),V},s.debugFlags=s.__makeDebugFlags());const w=(function(){const F=new ArrayBuffer(2);return new DataView(F).setInt16(0,256,!0),new Int16Array(F)[0]===256})(),x=F=>F[1]==="(",N=F=>F==="P",O=F=>x(F)?"p":F[0],S=function(F){switch(O(F)){case"c":case"C":return"i8";case"i":return"i32";case"p":case"P":case"s":return q;case"j":return"i64";case"f":return"float";case"d":return"double"}r("Unhandled signature IR:",F)},L=A?()=>!0:()=>r("BigInt64Array is not available."),$=function(F){switch(O(F)){case"p":case"P":case"s":{switch(D){case 4:return"getInt32";case 8:return L()&&"getBigInt64"}break}case"i":return"getInt32";case"c":return"getInt8";case"C":return"getUint8";case"j":return L()&&"getBigInt64";case"f":return"getFloat32";case"d":return"getFloat64"}r("Unhandled DataView getter for signature:",F)},c=function(F){switch(O(F)){case"p":case"P":case"s":{switch(D){case 4:return"setInt32";case 8:return L()&&"setBigInt64"}break}case"i":return"setInt32";case"c":return"setInt8";case"C":return"setUint8";case"j":return L()&&"setBigInt64";case"f":return"setFloat32";case"d":return"setFloat64"}r("Unhandled DataView setter for signature:",F)},d=function(F){switch(O(F)){case"i":case"f":case"c":case"C":case"d":return Number;case"j":return L()&&T;case"p":case"P":case"s":switch(D){case 4:return Number;case 8:return L()&&T}break}r("Unhandled DataView set wrapper for signature:",F)},y=(F,V)=>F+"::"+V,B=function(F,V){return()=>r(y(F,V),"is read-only.")},f=new WeakMap,h="(pointer-is-external)",l=function(F,V,K){if(K||(K=f.get(V)),K){if(f.delete(V),Array.isArray(V.ondispose)){let X;for(;X=V.ondispose.shift();)try{X instanceof Function?X.call(V):X instanceof te?X.dispose():typeof X=="number"&&g(X)}catch(_e){console.warn("ondispose() for",F.structName,"@",K,"threw. NOT propagating it.",_e)}}else if(V.ondispose instanceof Function)try{V.ondispose()}catch(X){console.warn("ondispose() for",F.structName,"@",K,"threw. NOT propagating it.",X)}delete V.ondispose,F.debugFlags.__flags.dealloc&&P("debug.dealloc:",V[h]?"EXTERNAL":"",F.structName,"instance:",F.structInfo.sizeof,"bytes @"+K),V[h]||g(K)}},_=F=>({configurable:!1,writable:!1,iterable:!1,value:F}),u=function(F,V,K){let X=!K;K?Object.defineProperty(V,h,_(K)):(K=p(F.structInfo.sizeof),K||r("Allocation of",F.structName,"structure failed."));try{F.debugFlags.__flags.alloc&&P("debug.alloc:",X?"":"EXTERNAL",F.structName,"instance:",F.structInfo.sizeof,"bytes @"+K),X&&o().fill(0,K,K+F.structInfo.sizeof),f.set(V,K)}catch(_e){throw l(F,V,K),_e}},I=function(){const F=this.pointer;return F?new Uint8Array(o().slice(F,F+this.structInfo.sizeof)):null},ee=_(F=>R+F+z),ne=function(F,V,K=!0){let X=F.members[V];if(!X&&(R||z)){for(const _e of Object.values(F.members))if(_e.key===V){X=_e;break}!X&&K&&r(y(F.name,V),"is not a mapped struct member.")}return X},se=function F(V,K,X=!1){F._||(F._=he=>he.replace(/[^vipPsjrdcC]/g,"").replace(/[pPscC]/g,"i"));const _e=ne(V.structInfo,K,!0);return X?F._(_e.signature):_e.signature},ie={configurable:!1,enumerable:!1,get:function(){return f.get(this)},set:()=>r("Cannot assign the 'pointer' property of a struct.")},j=_(function(){const F=[];for(const V of Object.keys(this.structInfo.members))F.push(this.memberKey(V));return F}),b=new TextDecoder("utf-8"),k=new TextEncoder,W=typeof SharedArrayBuffer>"u"?function(){}:SharedArrayBuffer,H=function(F,V,K){return b.decode(F.buffer instanceof W?F.slice(V,K):F.subarray(V,K))},Z=function(F,V,K=!1){const X=ne(F.structInfo,V,K);return X&&X.signature.length===1&&X.signature[0]==="s"?X:!1},E=function(F){F.signature!=="s"&&r("Invalid member type signature for C-string value:",JSON.stringify(F))},C=function(V,K){const X=ne(V.structInfo,K,!0);E(X);const _e=V[X.key];if(!_e)return null;let he=_e;const de=o();for(;de[he]!==0;++he);return _e===he?"":H(de,_e,he)},M=function(F,...V){F.ondispose?Array.isArray(F.ondispose)||(F.ondispose=[F.ondispose]):F.ondispose=[],F.ondispose.push(...V)},J=function(F){const V=k.encode(F),K=p(V.length+1);K||r("Allocation error while duplicating string:",F);const X=o();return X.set(V,K),X[K+V.length]=0,K},G=function(F,V,K){const X=ne(F.structInfo,V,!0);E(X);const _e=J(K);return F[X.key]=_e,M(F,_e),F},te=function(V,K){arguments[2]!==_&&r("Do not call the StructType constructor","from client-level code."),Object.defineProperties(this,{structName:_(V),structInfo:_(K)})};te.prototype=Object.create(null,{dispose:_(function(){l(this.constructor,this)}),lookupMember:_(function(F,V=!0){return ne(this.structInfo,F,V)}),memberToJsString:_(function(F){return C(this,F)}),memberIsString:_(function(F,V=!0){return Z(this,F,V)}),memberKey:ee,memberKeys:j,memberSignature:_(function(F,V=!1){return se(this,F,V)}),memoryDump:_(I),pointer:ie,setMemberCString:_(function(F,V){return G(this,F,V)})}),Object.assign(te.prototype,{addOnDispose:function(...F){return M(this,...F),this}}),Object.defineProperties(te,{allocCString:_(J),isA:_(F=>F instanceof te),hasExternalPointer:_(F=>F instanceof te&&!!F[h]),memberKey:ee});const le=F=>Number.isFinite(F)||F instanceof(T||Number),Y=function F(V,K,X){if(!F._){F._={getters:{},setters:{},sw:{}};const ve=["i","c","C","p","P","s","f","d","v()"];Q&&ve.push("j"),ve.forEach(function(Se){F._.getters[Se]=$(Se),F._.setters[Se]=c(Se),F._.sw[Se]=d(Se)});const $n=/^[ipPsjfdcC]$/,Kn=/^[vipPsjfdcC]\([ipPsjfdcC]*\)$/;F.sigCheck=function(Se,Jn,Tt,_t){Object.prototype.hasOwnProperty.call(Se,Tt)&&r(Se.structName,"already has a property named",Tt+"."),$n.test(_t)||Kn.test(_t)||r("Malformed signature for",y(Se.structName,Jn)+":",_t)}}const _e=V.memberKey(K);F.sigCheck(V.prototype,K,_e,X.signature),X.key=_e,X.name=K;const he=O(X.signature),de=y(V.prototype.structName,_e),pe=V.prototype.debugFlags.__flags,We=Object.create(null);We.configurable=!1,We.enumerable=!1,We.get=function(){pe.getter&&P("debug.getter:",F._.getters[he],"for",S(he),de,"@",this.pointer,"+",X.offset,"sz",X.sizeof);let ve=new DataView(o().buffer,this.pointer+X.offset,X.sizeof)[F._.getters[he]](0,w);return pe.getter&&P("debug.getter:",de,"result =",ve),ve},X.readOnly?We.set=B(V.prototype.structName,_e):We.set=function(ve){if(pe.setter&&P("debug.setter:",F._.setters[he],"for",S(he),de,"@",this.pointer,"+",X.offset,"sz",X.sizeof,ve),this.pointer||r("Cannot set struct property on disposed instance."),ve===null)ve=0;else for(;!le(ve);){if(N(X.signature)&&ve instanceof te){ve=ve.pointer||0,pe.setter&&P("debug.setter:",de,"resolved to",ve);break}r("Invalid value for pointer-type",de+".")}new DataView(o().buffer,this.pointer+X.offset,X.sizeof)[F._.setters[he]](0,F._.sw[he](ve),w)},Object.defineProperty(V.prototype,_e,We)},be=function F(V,K){arguments.length===1?(K=V,V=K.name):K.name||(K.name=V),V||r("Struct name is required.");let X=!1;Object.keys(K.members).forEach(de=>{const pe=K.members[de];pe.sizeof?pe.sizeof===1?pe.signature==="c"||pe.signature==="C"||r("Unexpected sizeof==1 member",y(K.name,de),"with signature",pe.signature):(pe.sizeof%4!==0&&(console.warn("Invalid struct member description =",pe,"from",K),r(V,"member",de,"sizeof is not aligned. sizeof="+pe.sizeof)),pe.offset%4!==0&&(console.warn("Invalid struct member description =",pe,"from",K),r(V,"member",de,"offset is not aligned. offset="+pe.offset))):r(V,"member",de,"is missing sizeof."),(!X||X.offsetde instanceof he),memberKey:ee,memberKeys:j,methodInfoForKey:_(function(de){}),structInfo:_(K),structName:_(V)}),he.prototype=new te(V,K,_),Object.defineProperties(he.prototype,{debugFlags:_e,constructor:_(he)}),Object.keys(K.members).forEach(de=>Y(he,de,K.members[de])),he};return be.StructType=te,be.config=n,be.allocCString=J,be.debugFlags||(be.debugFlags=s.__makeDebugFlags(s.debugFlags)),be},globalThis.sqlite3ApiBootstrap.initializers.push(function(t){const n=(...q)=>{throw new Error(q.join(" "))};t.SQLite3Error.toss;const r=t.capi,s=t.wasm,o=t.util;if(globalThis.WhWasmUtilInstaller(s),delete globalThis.WhWasmUtilInstaller,s.bindingSignatures=[["sqlite3_aggregate_context","void*","sqlite3_context*","int"],["sqlite3_bind_double","int","sqlite3_stmt*","int","f64"],["sqlite3_bind_int","int","sqlite3_stmt*","int","int"],["sqlite3_bind_null",void 0,"sqlite3_stmt*","int"],["sqlite3_bind_parameter_count","int","sqlite3_stmt*"],["sqlite3_bind_parameter_index","int","sqlite3_stmt*","string"],["sqlite3_bind_parameter_name","string","sqlite3_stmt*","int"],["sqlite3_bind_pointer","int","sqlite3_stmt*","int","*","string:static","*"],["sqlite3_busy_handler","int",["sqlite3*",new s.xWrap.FuncPtrAdapter({signature:"i(pi)",contextKey:(q,w)=>q[0]}),"*"]],["sqlite3_busy_timeout","int","sqlite3*","int"],["sqlite3_changes","int","sqlite3*"],["sqlite3_clear_bindings","int","sqlite3_stmt*"],["sqlite3_collation_needed","int","sqlite3*","*","*"],["sqlite3_column_blob","*","sqlite3_stmt*","int"],["sqlite3_column_bytes","int","sqlite3_stmt*","int"],["sqlite3_column_count","int","sqlite3_stmt*"],["sqlite3_column_decltype","string","sqlite3_stmt*","int"],["sqlite3_column_double","f64","sqlite3_stmt*","int"],["sqlite3_column_int","int","sqlite3_stmt*","int"],["sqlite3_column_name","string","sqlite3_stmt*","int"],["sqlite3_column_text","string","sqlite3_stmt*","int"],["sqlite3_column_type","int","sqlite3_stmt*","int"],["sqlite3_column_value","sqlite3_value*","sqlite3_stmt*","int"],["sqlite3_commit_hook","void*",["sqlite3*",new s.xWrap.FuncPtrAdapter({name:"sqlite3_commit_hook",signature:"i(p)",contextKey:q=>q[0]}),"*"]],["sqlite3_compileoption_get","string","int"],["sqlite3_compileoption_used","int","string"],["sqlite3_complete","int","string:flexible"],["sqlite3_context_db_handle","sqlite3*","sqlite3_context*"],["sqlite3_data_count","int","sqlite3_stmt*"],["sqlite3_db_filename","string","sqlite3*","string"],["sqlite3_db_handle","sqlite3*","sqlite3_stmt*"],["sqlite3_db_name","string","sqlite3*","int"],["sqlite3_db_readonly","int","sqlite3*","string"],["sqlite3_db_status","int","sqlite3*","int","*","*","int"],["sqlite3_errcode","int","sqlite3*"],["sqlite3_errmsg","string","sqlite3*"],["sqlite3_error_offset","int","sqlite3*"],["sqlite3_errstr","string","int"],["sqlite3_exec","int",["sqlite3*","string:flexible",new s.xWrap.FuncPtrAdapter({signature:"i(pipp)",bindScope:"transient",callProxy:q=>{let w;return(x,N,O,S)=>{try{const L=s.cArgvToJs(N,O);return w||(w=s.cArgvToJs(N,S)),q(L,w)|0}catch(L){return L.resultCode||r.SQLITE_ERROR}}}}),"*","**"]],["sqlite3_expanded_sql","string","sqlite3_stmt*"],["sqlite3_extended_errcode","int","sqlite3*"],["sqlite3_extended_result_codes","int","sqlite3*","int"],["sqlite3_file_control","int","sqlite3*","string","int","*"],["sqlite3_finalize","int","sqlite3_stmt*"],["sqlite3_free",void 0,"*"],["sqlite3_get_autocommit","int","sqlite3*"],["sqlite3_get_auxdata","*","sqlite3_context*","int"],["sqlite3_initialize",void 0],["sqlite3_interrupt",void 0,"sqlite3*"],["sqlite3_is_interrupted","int","sqlite3*"],["sqlite3_keyword_count","int"],["sqlite3_keyword_name","int",["int","**","*"]],["sqlite3_keyword_check","int",["string","int"]],["sqlite3_libversion","string"],["sqlite3_libversion_number","int"],["sqlite3_limit","int",["sqlite3*","int","int"]],["sqlite3_malloc","*","int"],["sqlite3_open","int","string","*"],["sqlite3_open_v2","int","string","*","int","string"],["sqlite3_realloc","*","*","int"],["sqlite3_reset","int","sqlite3_stmt*"],["sqlite3_result_blob",void 0,"sqlite3_context*","*","int","*"],["sqlite3_result_double",void 0,"sqlite3_context*","f64"],["sqlite3_result_error",void 0,"sqlite3_context*","string","int"],["sqlite3_result_error_code",void 0,"sqlite3_context*","int"],["sqlite3_result_error_nomem",void 0,"sqlite3_context*"],["sqlite3_result_error_toobig",void 0,"sqlite3_context*"],["sqlite3_result_int",void 0,"sqlite3_context*","int"],["sqlite3_result_null",void 0,"sqlite3_context*"],["sqlite3_result_pointer",void 0,"sqlite3_context*","*","string:static","*"],["sqlite3_result_subtype",void 0,"sqlite3_value*","int"],["sqlite3_result_text",void 0,"sqlite3_context*","string","int","*"],["sqlite3_result_zeroblob",void 0,"sqlite3_context*","int"],["sqlite3_rollback_hook","void*",["sqlite3*",new s.xWrap.FuncPtrAdapter({name:"sqlite3_rollback_hook",signature:"v(p)",contextKey:q=>q[0]}),"*"]],["sqlite3_set_auxdata",void 0,["sqlite3_context*","int","*","*"]],["sqlite3_shutdown",void 0],["sqlite3_sourceid","string"],["sqlite3_sql","string","sqlite3_stmt*"],["sqlite3_status","int","int","*","*","int"],["sqlite3_step","int","sqlite3_stmt*"],["sqlite3_stmt_busy","int","sqlite3_stmt*"],["sqlite3_stmt_readonly","int","sqlite3_stmt*"],["sqlite3_stmt_status","int","sqlite3_stmt*","int","int"],["sqlite3_strglob","int","string","string"],["sqlite3_stricmp","int","string","string"],["sqlite3_strlike","int","string","string","int"],["sqlite3_strnicmp","int","string","string","int"],["sqlite3_table_column_metadata","int","sqlite3*","string","string","string","**","**","*","*","*"],["sqlite3_total_changes","int","sqlite3*"],["sqlite3_trace_v2","int",["sqlite3*","int",new s.xWrap.FuncPtrAdapter({name:"sqlite3_trace_v2::callback",signature:"i(ippp)",contextKey:(q,w)=>q[0]}),"*"]],["sqlite3_txn_state","int",["sqlite3*","string"]],["sqlite3_uri_boolean","int","sqlite3_filename","string","int"],["sqlite3_uri_key","string","sqlite3_filename","int"],["sqlite3_uri_parameter","string","sqlite3_filename","string"],["sqlite3_user_data","void*","sqlite3_context*"],["sqlite3_value_blob","*","sqlite3_value*"],["sqlite3_value_bytes","int","sqlite3_value*"],["sqlite3_value_double","f64","sqlite3_value*"],["sqlite3_value_dup","sqlite3_value*","sqlite3_value*"],["sqlite3_value_free",void 0,"sqlite3_value*"],["sqlite3_value_frombind","int","sqlite3_value*"],["sqlite3_value_int","int","sqlite3_value*"],["sqlite3_value_nochange","int","sqlite3_value*"],["sqlite3_value_numeric_type","int","sqlite3_value*"],["sqlite3_value_pointer","*","sqlite3_value*","string:static"],["sqlite3_value_subtype","int","sqlite3_value*"],["sqlite3_value_text","string","sqlite3_value*"],["sqlite3_value_type","int","sqlite3_value*"],["sqlite3_vfs_find","*","string"],["sqlite3_vfs_register","int","sqlite3_vfs*","int"],["sqlite3_vfs_unregister","int","sqlite3_vfs*"]],s.exports.sqlite3_progress_handler&&s.bindingSignatures.push(["sqlite3_progress_handler",void 0,["sqlite3*","int",new s.xWrap.FuncPtrAdapter({name:"xProgressHandler",signature:"i(p)",bindScope:"context",contextKey:(q,w)=>q[0]}),"*"]]),s.exports.sqlite3_stmt_explain&&s.bindingSignatures.push(["sqlite3_stmt_explain","int","sqlite3_stmt*","int"],["sqlite3_stmt_isexplain","int","sqlite3_stmt*"]),s.exports.sqlite3_set_authorizer&&s.bindingSignatures.push(["sqlite3_set_authorizer","int",["sqlite3*",new s.xWrap.FuncPtrAdapter({name:"sqlite3_set_authorizer::xAuth",signature:"i(pissss)",contextKey:(q,w)=>q[0],callProxy:q=>(w,x,N,O,S,L)=>{try{return N=N&&s.cstrToJs(N),O=O&&s.cstrToJs(O),S=S&&s.cstrToJs(S),L=L&&s.cstrToJs(L),q(w,x,N,O,S,L)||0}catch($){return $.resultCode||r.SQLITE_ERROR}}}),"*"]]),s.bindingSignatures.int64=[["sqlite3_bind_int64","int",["sqlite3_stmt*","int","i64"]],["sqlite3_changes64","i64",["sqlite3*"]],["sqlite3_column_int64","i64",["sqlite3_stmt*","int"]],["sqlite3_deserialize","int","sqlite3*","string","*","i64","i64","int"],["sqlite3_last_insert_rowid","i64",["sqlite3*"]],["sqlite3_malloc64","*","i64"],["sqlite3_msize","i64","*"],["sqlite3_overload_function","int",["sqlite3*","string","int"]],["sqlite3_realloc64","*","*","i64"],["sqlite3_result_int64",void 0,"*","i64"],["sqlite3_result_zeroblob64","int","*","i64"],["sqlite3_serialize","*","sqlite3*","string","*","int"],["sqlite3_set_last_insert_rowid",void 0,["sqlite3*","i64"]],["sqlite3_status64","int","int","*","*","int"],["sqlite3_total_changes64","i64",["sqlite3*"]],["sqlite3_update_hook","*",["sqlite3*",new s.xWrap.FuncPtrAdapter({name:"sqlite3_update_hook",signature:"v(iippj)",contextKey:q=>q[0],callProxy:q=>(w,x,N,O,S)=>{q(w,x,s.cstrToJs(N),s.cstrToJs(O),S)}}),"*"]],["sqlite3_uri_int64","i64",["sqlite3_filename","string","i64"]],["sqlite3_value_int64","i64","sqlite3_value*"]],s.bigIntEnabled&&s.exports.sqlite3_declare_vtab&&s.bindingSignatures.int64.push(["sqlite3_create_module","int",["sqlite3*","string","sqlite3_module*","*"]],["sqlite3_create_module_v2","int",["sqlite3*","string","sqlite3_module*","*","*"]],["sqlite3_declare_vtab","int",["sqlite3*","string:flexible"]],["sqlite3_drop_modules","int",["sqlite3*","**"]],["sqlite3_vtab_collation","string","sqlite3_index_info*","int"],["sqlite3_vtab_distinct","int","sqlite3_index_info*"],["sqlite3_vtab_in","int","sqlite3_index_info*","int","int"],["sqlite3_vtab_in_first","int","sqlite3_value*","**"],["sqlite3_vtab_in_next","int","sqlite3_value*","**"],["sqlite3_vtab_nochange","int","sqlite3_context*"],["sqlite3_vtab_on_conflict","int","sqlite3*"],["sqlite3_vtab_rhs_value","int","sqlite3_index_info*","int","**"]),s.bigIntEnabled&&s.exports.sqlite3_preupdate_hook&&s.bindingSignatures.int64.push(["sqlite3_preupdate_blobwrite","int","sqlite3*"],["sqlite3_preupdate_count","int","sqlite3*"],["sqlite3_preupdate_depth","int","sqlite3*"],["sqlite3_preupdate_hook","*",["sqlite3*",new s.xWrap.FuncPtrAdapter({name:"sqlite3_preupdate_hook",signature:"v(ppippjj)",contextKey:q=>q[0],callProxy:q=>(w,x,N,O,S,L,$)=>{q(w,x,N,s.cstrToJs(O),s.cstrToJs(S),L,$)}}),"*"]],["sqlite3_preupdate_new","int",["sqlite3*","int","**"]],["sqlite3_preupdate_old","int",["sqlite3*","int","**"]]),s.bigIntEnabled&&s.exports.sqlite3changegroup_add&&s.exports.sqlite3session_create&&s.exports.sqlite3_preupdate_hook){const q={signature:"i(ps)",callProxy:w=>(x,N)=>{try{return w(x,s.cstrToJs(N))|0}catch(O){return O.resultCode||r.SQLITE_ERROR}}};s.bindingSignatures.int64.push(["sqlite3changegroup_add","int",["sqlite3_changegroup*","int","void*"]],["sqlite3changegroup_add_strm","int",["sqlite3_changegroup*",new s.xWrap.FuncPtrAdapter({name:"xInput",signature:"i(ppp)",bindScope:"transient"}),"void*"]],["sqlite3changegroup_delete",void 0,["sqlite3_changegroup*"]],["sqlite3changegroup_new","int",["**"]],["sqlite3changegroup_output","int",["sqlite3_changegroup*","int*","**"]],["sqlite3changegroup_output_strm","int",["sqlite3_changegroup*",new s.xWrap.FuncPtrAdapter({name:"xOutput",signature:"i(ppi)",bindScope:"transient"}),"void*"]],["sqlite3changeset_apply","int",["sqlite3*","int","void*",new s.xWrap.FuncPtrAdapter({name:"xFilter",bindScope:"transient",...q}),new s.xWrap.FuncPtrAdapter({name:"xConflict",signature:"i(pip)",bindScope:"transient"}),"void*"]],["sqlite3changeset_apply_strm","int",["sqlite3*",new s.xWrap.FuncPtrAdapter({name:"xInput",signature:"i(ppp)",bindScope:"transient"}),"void*",new s.xWrap.FuncPtrAdapter({name:"xFilter",bindScope:"transient",...q}),new s.xWrap.FuncPtrAdapter({name:"xConflict",signature:"i(pip)",bindScope:"transient"}),"void*"]],["sqlite3changeset_apply_v2","int",["sqlite3*","int","void*",new s.xWrap.FuncPtrAdapter({name:"xFilter",bindScope:"transient",...q}),new s.xWrap.FuncPtrAdapter({name:"xConflict",signature:"i(pip)",bindScope:"transient"}),"void*","**","int*","int"]],["sqlite3changeset_apply_v2_strm","int",["sqlite3*",new s.xWrap.FuncPtrAdapter({name:"xInput",signature:"i(ppp)",bindScope:"transient"}),"void*",new s.xWrap.FuncPtrAdapter({name:"xFilter",bindScope:"transient",...q}),new s.xWrap.FuncPtrAdapter({name:"xConflict",signature:"i(pip)",bindScope:"transient"}),"void*","**","int*","int"]],["sqlite3changeset_concat","int",["int","void*","int","void*","int*","**"]],["sqlite3changeset_concat_strm","int",[new s.xWrap.FuncPtrAdapter({name:"xInputA",signature:"i(ppp)",bindScope:"transient"}),"void*",new s.xWrap.FuncPtrAdapter({name:"xInputB",signature:"i(ppp)",bindScope:"transient"}),"void*",new s.xWrap.FuncPtrAdapter({name:"xOutput",signature:"i(ppi)",bindScope:"transient"}),"void*"]],["sqlite3changeset_conflict","int",["sqlite3_changeset_iter*","int","**"]],["sqlite3changeset_finalize","int",["sqlite3_changeset_iter*"]],["sqlite3changeset_fk_conflicts","int",["sqlite3_changeset_iter*","int*"]],["sqlite3changeset_invert","int",["int","void*","int*","**"]],["sqlite3changeset_invert_strm","int",[new s.xWrap.FuncPtrAdapter({name:"xInput",signature:"i(ppp)",bindScope:"transient"}),"void*",new s.xWrap.FuncPtrAdapter({name:"xOutput",signature:"i(ppi)",bindScope:"transient"}),"void*"]],["sqlite3changeset_new","int",["sqlite3_changeset_iter*","int","**"]],["sqlite3changeset_next","int",["sqlite3_changeset_iter*"]],["sqlite3changeset_old","int",["sqlite3_changeset_iter*","int","**"]],["sqlite3changeset_op","int",["sqlite3_changeset_iter*","**","int*","int*","int*"]],["sqlite3changeset_pk","int",["sqlite3_changeset_iter*","**","int*"]],["sqlite3changeset_start","int",["**","int","*"]],["sqlite3changeset_start_strm","int",["**",new s.xWrap.FuncPtrAdapter({name:"xInput",signature:"i(ppp)",bindScope:"transient"}),"void*"]],["sqlite3changeset_start_v2","int",["**","int","*","int"]],["sqlite3changeset_start_v2_strm","int",["**",new s.xWrap.FuncPtrAdapter({name:"xInput",signature:"i(ppp)",bindScope:"transient"}),"void*","int"]],["sqlite3session_attach","int",["sqlite3_session*","string"]],["sqlite3session_changeset","int",["sqlite3_session*","int*","**"]],["sqlite3session_changeset_size","i64",["sqlite3_session*"]],["sqlite3session_changeset_strm","int",["sqlite3_session*",new s.xWrap.FuncPtrAdapter({name:"xOutput",signature:"i(ppp)",bindScope:"transient"}),"void*"]],["sqlite3session_config","int",["int","void*"]],["sqlite3session_create","int",["sqlite3*","string","**"]],["sqlite3session_diff","int",["sqlite3_session*","string","string","**"]],["sqlite3session_enable","int",["sqlite3_session*","int"]],["sqlite3session_indirect","int",["sqlite3_session*","int"]],["sqlite3session_isempty","int",["sqlite3_session*"]],["sqlite3session_memory_used","i64",["sqlite3_session*"]],["sqlite3session_object_config","int",["sqlite3_session*","int","void*"]],["sqlite3session_patchset","int",["sqlite3_session*","*","**"]],["sqlite3session_patchset_strm","int",["sqlite3_session*",new s.xWrap.FuncPtrAdapter({name:"xOutput",signature:"i(ppp)",bindScope:"transient"}),"void*"]],["sqlite3session_table_filter",void 0,["sqlite3_session*",new s.xWrap.FuncPtrAdapter({name:"xFilter",...q,contextKey:(w,x)=>w[0]}),"*"]])}s.bindingSignatures.wasmInternal=[["sqlite3__wasm_db_reset","int","sqlite3*"],["sqlite3__wasm_db_vfs","sqlite3_vfs*","sqlite3*","string"],["sqlite3__wasm_vfs_create_file","int","sqlite3_vfs*","string","*","int"],["sqlite3__wasm_posix_create_file","int","string","*","int"],["sqlite3__wasm_vfs_unlink","int","sqlite3_vfs*","string"],["sqlite3__wasm_qfmt_token","string:dealloc","string","int"]],t.StructBinder=globalThis.Jaccwabyt({heap:s.heap8u,alloc:s.alloc,dealloc:s.dealloc,bigIntEnabled:s.bigIntEnabled,memberPrefix:"$"}),delete globalThis.Jaccwabyt;{const q=s.xWrap.argAdapter("string");s.xWrap.argAdapter("string:flexible",S=>q(o.flexibleString(S))),s.xWrap.argAdapter("string:static",(function(S){return s.isPtr(S)?S:(S=""+S,this[S]||(this[S]=s.allocCString(S)))}).bind(Object.create(null)));const w=s.xWrap.argAdapter("*"),x=function(){};s.xWrap.argAdapter("sqlite3_filename",w)("sqlite3_context*",w)("sqlite3_value*",w)("void*",w)("sqlite3_changegroup*",w)("sqlite3_changeset_iter*",w)("sqlite3_session*",w)("sqlite3_stmt*",S=>w(S instanceof(t?.oo1?.Stmt||x)?S.pointer:S))("sqlite3*",S=>w(S instanceof(t?.oo1?.DB||x)?S.pointer:S))("sqlite3_vfs*",S=>typeof S=="string"?r.sqlite3_vfs_find(S)||t.SQLite3Error.toss(r.SQLITE_NOTFOUND,"Unknown sqlite3_vfs name:",S):w(S instanceof(r.sqlite3_vfs||x)?S.pointer:S)),s.exports.sqlite3_declare_vtab&&s.xWrap.argAdapter("sqlite3_index_info*",S=>w(S instanceof(r.sqlite3_index_info||x)?S.pointer:S))("sqlite3_module*",S=>w(S instanceof(r.sqlite3_module||x)?S.pointer:S));const N=s.xWrap.resultAdapter("*");s.xWrap.resultAdapter("sqlite3*",N)("sqlite3_context*",N)("sqlite3_stmt*",N)("sqlite3_value*",N)("sqlite3_vfs*",N)("void*",N),s.exports.sqlite3_step.length===0&&(s.xWrap.doArgcCheck=!1,t.config.warn("Disabling sqlite3.wasm.xWrap.doArgcCheck due to environmental quirks."));for(const S of s.bindingSignatures)r[S[0]]=s.xWrap.apply(null,S);for(const S of s.bindingSignatures.wasmInternal)o[S[0]]=s.xWrap.apply(null,S);const O=function(S){return()=>n(S+"() is unavailable due to lack","of BigInt support in this build.")};for(const S of s.bindingSignatures.int64)r[S[0]]=s.bigIntEnabled?s.xWrap.apply(null,S):O(S[0]);if(delete s.bindingSignatures,s.exports.sqlite3__wasm_db_error){const S=s.xWrap("sqlite3__wasm_db_error","int","sqlite3*","int","string");o.sqlite3__wasm_db_error=function(L,$,c){return $ instanceof t.WasmAllocError?($=r.SQLITE_NOMEM,c=0):$ instanceof Error&&(c=c||""+$,$=$.resultCode||r.SQLITE_ERROR),L?S(L,$,c):$}}else o.sqlite3__wasm_db_error=function(S,L,$){return console.warn("sqlite3__wasm_db_error() is not exported.",arguments),L}}{const q=s.xCall("sqlite3__wasm_enum_json");q||n("Maintenance required: increase sqlite3__wasm_enum_json()'s","static buffer size!"),s.ctype=JSON.parse(s.cstrToJs(q));const w=["access","authorizer","blobFinalizers","changeset","config","dataTypes","dbConfig","dbStatus","encodings","fcntl","flock","ioCap","limits","openFlags","prepareFlags","resultCodes","sqlite3Status","stmtStatus","syncFlags","trace","txnState","udfFlags","version"];s.bigIntEnabled&&w.push("serialize","session","vtab");for(const O of w)for(const S of Object.entries(s.ctype[O]))r[S[0]]=S[1];s.functionEntry(r.SQLITE_WASM_DEALLOC)||n("Internal error: cannot resolve exported function","entry SQLITE_WASM_DEALLOC (=="+r.SQLITE_WASM_DEALLOC+").");const x=Object.create(null);for(const O of["resultCodes"])for(const S of Object.entries(s.ctype[O]))x[S[1]]=S[0];r.sqlite3_js_rc_str=O=>x[O];const N=Object.assign(Object.create(null),{WasmTestStruct:!0,sqlite3_kvvfs_methods:!o.isUIThread(),sqlite3_index_info:!s.bigIntEnabled,sqlite3_index_constraint:!s.bigIntEnabled,sqlite3_index_orderby:!s.bigIntEnabled,sqlite3_index_constraint_usage:!s.bigIntEnabled});for(const O of s.ctype.structs)N[O.name]||(r[O.name]=t.StructBinder(O));if(r.sqlite3_index_info){for(const O of["sqlite3_index_constraint","sqlite3_index_orderby","sqlite3_index_constraint_usage"])r.sqlite3_index_info[O]=r[O],delete r[O];r.sqlite3_vtab_config=s.xWrap("sqlite3__wasm_vtab_config","int",["sqlite3*","int","int"])}}const p=(q,w,x)=>o.sqlite3__wasm_db_error(q,r.SQLITE_MISUSE,w+"() requires "+x+" argument"+(x===1?"":"s")+"."),g=q=>o.sqlite3__wasm_db_error(q,r.SQLITE_FORMAT,"SQLITE_UTF8 is the only supported encoding."),P=q=>s.xWrap.argAdapter("sqlite3*")(q),R=q=>s.isPtr(q)?s.cstrToJs(q):q,z=(function(q,w){q=P(q);let x=this.dbMap.get(q);if(w)!x&&w>0&&this.dbMap.set(q,x=Object.create(null));else return this.dbMap.delete(q),x;return x}).bind(Object.assign(Object.create(null),{dbMap:new Map}));z.addCollation=function(q,w){const x=z(q,1);x.collation||(x.collation=new Set),x.collation.add(R(w).toLowerCase())},z._addUDF=function(q,w,x,N){w=R(w).toLowerCase();let O=N.get(w);O||N.set(w,O=new Set),O.add(x<0?-1:x)},z.addFunction=function(q,w,x){const N=z(q,1);N.udf||(N.udf=new Map),this._addUDF(q,w,x,N.udf)},s.exports.sqlite3_create_window_function&&(z.addWindowFunc=function(q,w,x){const N=z(q,1);N.wudf||(N.wudf=new Map),this._addUDF(q,w,x,N.wudf)}),z.cleanup=function(q){q=P(q);const w=[q];for(const O of["sqlite3_busy_handler","sqlite3_commit_hook","sqlite3_preupdate_hook","sqlite3_progress_handler","sqlite3_rollback_hook","sqlite3_set_authorizer","sqlite3_trace_v2","sqlite3_update_hook"]){const S=s.exports[O];if(S){w.length=S.length;try{r[O](...w)}catch(L){t.config.warn("close-time call of",O+"(",w,") threw:",L)}}}const x=z(q,0);if(!x)return;if(x.collation){for(const O of x.collation)try{r.sqlite3_create_collation_v2(q,O,r.SQLITE_UTF8,0,0,0)}catch{}delete x.collation}let N;for(N=0;N<2;++N){const O=N?x.wudf:x.udf;if(!O)continue;const S=N?r.sqlite3_create_window_function:r.sqlite3_create_function_v2;for(const L of O){const $=L[0],c=L[1],d=[q,$,0,r.SQLITE_UTF8,0,0,0,0,0];N&&d.push(0);for(const y of c)try{d[2]=y,S.apply(null,d)}catch{}c.clear()}O.clear()}delete x.udf,delete x.wudf};{const q=s.xWrap("sqlite3_close_v2","int","sqlite3*");r.sqlite3_close_v2=function(w){if(arguments.length!==1)return p(w,"sqlite3_close_v2",1);if(w)try{z.cleanup(w)}catch{}return q(w)}}if(r.sqlite3session_create){const q=s.xWrap("sqlite3session_delete",void 0,["sqlite3_session*"]);r.sqlite3session_delete=function(w){if(arguments.length!==1)return p(pDb,"sqlite3session_delete",1);w&&r.sqlite3session_table_filter(w,0,0),q(w)}}{const q=(x,N)=>"argv["+N+"]:"+x[0]+":"+s.cstrToJs(x[1]).toLowerCase(),w=s.xWrap("sqlite3_create_collation_v2","int",["sqlite3*","string","int","*",new s.xWrap.FuncPtrAdapter({name:"xCompare",signature:"i(pipip)",contextKey:q}),new s.xWrap.FuncPtrAdapter({name:"xDestroy",signature:"v(p)",contextKey:q})]);r.sqlite3_create_collation_v2=function(x,N,O,S,L,$){if(arguments.length!==6)return p(x,"sqlite3_create_collation_v2",6);if((O&15)===0)O|=r.SQLITE_UTF8;else if(r.SQLITE_UTF8!==(O&15))return g(x);try{const c=w(x,N,O,S,L,$);return c===0&&L instanceof Function&&z.addCollation(x,N),c}catch(c){return o.sqlite3__wasm_db_error(x,c)}},r.sqlite3_create_collation=(x,N,O,S,L)=>arguments.length===5?r.sqlite3_create_collation_v2(x,N,O,S,L,0):p(x,"sqlite3_create_collation",5)}{const q=function(O,S){return O[0]+":"+(O[2]<0?-1:O[2])+":"+S+":"+s.cstrToJs(O[1]).toLowerCase()},w=Object.assign(Object.create(null),{xInverseAndStep:{signature:"v(pip)",contextKey:q,callProxy:O=>(S,L,$)=>{try{O(S,...r.sqlite3_values_to_js(L,$))}catch(c){r.sqlite3_result_error_js(S,c)}}},xFinalAndValue:{signature:"v(p)",contextKey:q,callProxy:O=>S=>{try{r.sqlite3_result_js(S,O(S))}catch(L){r.sqlite3_result_error_js(S,L)}}},xFunc:{signature:"v(pip)",contextKey:q,callProxy:O=>(S,L,$)=>{try{r.sqlite3_result_js(S,O(S,...r.sqlite3_values_to_js(L,$)))}catch(c){r.sqlite3_result_error_js(S,c)}}},xDestroy:{signature:"v(p)",contextKey:q,callProxy:O=>S=>{try{O(S)}catch(L){console.error("UDF xDestroy method threw:",L)}}}}),x=s.xWrap("sqlite3_create_function_v2","int",["sqlite3*","string","int","int","*",new s.xWrap.FuncPtrAdapter({name:"xFunc",...w.xFunc}),new s.xWrap.FuncPtrAdapter({name:"xStep",...w.xInverseAndStep}),new s.xWrap.FuncPtrAdapter({name:"xFinal",...w.xFinalAndValue}),new s.xWrap.FuncPtrAdapter({name:"xDestroy",...w.xDestroy})]),N=s.exports.sqlite3_create_window_function?s.xWrap("sqlite3_create_window_function","int",["sqlite3*","string","int","int","*",new s.xWrap.FuncPtrAdapter({name:"xStep",...w.xInverseAndStep}),new s.xWrap.FuncPtrAdapter({name:"xFinal",...w.xFinalAndValue}),new s.xWrap.FuncPtrAdapter({name:"xValue",...w.xFinalAndValue}),new s.xWrap.FuncPtrAdapter({name:"xInverse",...w.xInverseAndStep}),new s.xWrap.FuncPtrAdapter({name:"xDestroy",...w.xDestroy})]):void 0;r.sqlite3_create_function_v2=function O(S,L,$,c,d,y,B,f,h){if(O.length!==arguments.length)return p(S,"sqlite3_create_function_v2",O.length);if((c&15)===0)c|=r.SQLITE_UTF8;else if(r.SQLITE_UTF8!==(c&15))return g(S);try{const l=x(S,L,$,c,d,y,B,f,h);return l===0&&(y instanceof Function||B instanceof Function||f instanceof Function||h instanceof Function)&&z.addFunction(S,L,$),l}catch(l){return console.error("sqlite3_create_function_v2() setup threw:",l),o.sqlite3__wasm_db_error(S,l,"Creation of UDF threw: "+l)}},r.sqlite3_create_function=function O(S,L,$,c,d,y,B,f){return O.length===arguments.length?r.sqlite3_create_function_v2(S,L,$,c,d,y,B,f,0):p(S,"sqlite3_create_function",O.length)},N?r.sqlite3_create_window_function=function O(S,L,$,c,d,y,B,f,h,l){if(O.length!==arguments.length)return p(S,"sqlite3_create_window_function",O.length);if((c&15)===0)c|=r.SQLITE_UTF8;else if(r.SQLITE_UTF8!==(c&15))return g(S);try{const _=N(S,L,$,c,d,y,B,f,h,l);return _===0&&(y instanceof Function||B instanceof Function||f instanceof Function||h instanceof Function||l instanceof Function)&&z.addWindowFunc(S,L,$),_}catch(_){return console.error("sqlite3_create_window_function() setup threw:",_),o.sqlite3__wasm_db_error(S,_,"Creation of UDF threw: "+_)}}:delete r.sqlite3_create_window_function,r.sqlite3_create_function_v2.udfSetResult=r.sqlite3_create_function.udfSetResult=r.sqlite3_result_js,r.sqlite3_create_window_function&&(r.sqlite3_create_window_function.udfSetResult=r.sqlite3_result_js),r.sqlite3_create_function_v2.udfConvertArgs=r.sqlite3_create_function.udfConvertArgs=r.sqlite3_values_to_js,r.sqlite3_create_window_function&&(r.sqlite3_create_window_function.udfConvertArgs=r.sqlite3_values_to_js),r.sqlite3_create_function_v2.udfSetError=r.sqlite3_create_function.udfSetError=r.sqlite3_result_error_js,r.sqlite3_create_window_function&&(r.sqlite3_create_window_function.udfSetError=r.sqlite3_result_error_js)}{const q=(x,N)=>(typeof x=="string"?N=-1:o.isSQLableTypedArray(x)?(N=x.byteLength,x=o.typedArrayToString(x instanceof ArrayBuffer?new Uint8Array(x):x)):Array.isArray(x)&&(x=x.join(""),N=-1),[x,N]),w={basic:s.xWrap("sqlite3_prepare_v3","int",["sqlite3*","string","int","int","**","**"]),full:s.xWrap("sqlite3_prepare_v3","int",["sqlite3*","*","int","int","**","**"])};r.sqlite3_prepare_v3=function x(N,O,S,L,$,c){if(x.length!==arguments.length)return p(N,"sqlite3_prepare_v3",x.length);const[d,y]=q(O,S);switch(typeof d){case"string":return w.basic(N,d,y,L,$,null);case"number":return w.full(N,d,y,L,$,c);default:return o.sqlite3__wasm_db_error(N,r.SQLITE_MISUSE,"Invalid SQL argument type for sqlite3_prepare_v2/v3().")}},r.sqlite3_prepare_v2=function x(N,O,S,L,$){return x.length===arguments.length?r.sqlite3_prepare_v3(N,O,S,0,L,$):p(N,"sqlite3_prepare_v2",x.length)}}{const q=s.xWrap("sqlite3_bind_text","int",["sqlite3_stmt*","int","string","int","*"]),w=s.xWrap("sqlite3_bind_blob","int",["sqlite3_stmt*","int","*","int","*"]);r.sqlite3_bind_text=function x(N,O,S,L,$){if(x.length!==arguments.length)return p(r.sqlite3_db_handle(N),"sqlite3_bind_text",x.length);if(s.isPtr(S)||S===null)return q(N,O,S,L,$);S instanceof ArrayBuffer?S=new Uint8Array(S):Array.isArray(pMem)&&(S=pMem.join(""));let c,d;try{if(o.isSQLableTypedArray(S))c=s.allocFromTypedArray(S),d=S.byteLength;else if(typeof S=="string")[c,d]=s.allocCString(S);else return o.sqlite3__wasm_db_error(r.sqlite3_db_handle(N),r.SQLITE_MISUSE,"Invalid 3rd argument type for sqlite3_bind_text().");return q(N,O,c,d,r.SQLITE_WASM_DEALLOC)}catch(y){return s.dealloc(c),o.sqlite3__wasm_db_error(r.sqlite3_db_handle(N),y)}},r.sqlite3_bind_blob=function x(N,O,S,L,$){if(x.length!==arguments.length)return p(r.sqlite3_db_handle(N),"sqlite3_bind_blob",x.length);if(s.isPtr(S)||S===null)return w(N,O,S,L,$);S instanceof ArrayBuffer?S=new Uint8Array(S):Array.isArray(S)&&(S=S.join(""));let c,d;try{if(o.isBindableTypedArray(S))c=s.allocFromTypedArray(S),d=L>=0?L:S.byteLength;else if(typeof S=="string")[c,d]=s.allocCString(S);else return o.sqlite3__wasm_db_error(r.sqlite3_db_handle(N),r.SQLITE_MISUSE,"Invalid 3rd argument type for sqlite3_bind_blob().");return w(N,O,c,d,r.SQLITE_WASM_DEALLOC)}catch(y){return s.dealloc(c),o.sqlite3__wasm_db_error(r.sqlite3_db_handle(N),y)}}}r.sqlite3_config=function(q,...w){if(arguments.length<2)return r.SQLITE_MISUSE;switch(q){case r.SQLITE_CONFIG_COVERING_INDEX_SCAN:case r.SQLITE_CONFIG_MEMSTATUS:case r.SQLITE_CONFIG_SMALL_MALLOC:case r.SQLITE_CONFIG_SORTERREF_SIZE:case r.SQLITE_CONFIG_STMTJRNL_SPILL:case r.SQLITE_CONFIG_URI:return s.exports.sqlite3__wasm_config_i(q,w[0]);case r.SQLITE_CONFIG_LOOKASIDE:return s.exports.sqlite3__wasm_config_ii(q,w[0],w[1]);case r.SQLITE_CONFIG_MEMDB_MAXSIZE:return s.exports.sqlite3__wasm_config_j(q,w[0]);case r.SQLITE_CONFIG_GETMALLOC:case r.SQLITE_CONFIG_GETMUTEX:case r.SQLITE_CONFIG_GETPCACHE2:case r.SQLITE_CONFIG_GETPCACHE:case r.SQLITE_CONFIG_HEAP:case r.SQLITE_CONFIG_LOG:case r.SQLITE_CONFIG_MALLOC:case r.SQLITE_CONFIG_MMAP_SIZE:case r.SQLITE_CONFIG_MULTITHREAD:case r.SQLITE_CONFIG_MUTEX:case r.SQLITE_CONFIG_PAGECACHE:case r.SQLITE_CONFIG_PCACHE2:case r.SQLITE_CONFIG_PCACHE:case r.SQLITE_CONFIG_PCACHE_HDRSZ:case r.SQLITE_CONFIG_PMASZ:case r.SQLITE_CONFIG_SERIALIZED:case r.SQLITE_CONFIG_SINGLETHREAD:case r.SQLITE_CONFIG_SQLLOG:case r.SQLITE_CONFIG_WIN32_HEAPSIZE:default:return r.SQLITE_NOTFOUND}};{const q=new Set;r.sqlite3_auto_extension=function(w){if(w instanceof Function)w=s.installFunction("i(ppp)",w);else if(arguments.length!==1||!s.isPtr(w))return r.SQLITE_MISUSE;const x=s.exports.sqlite3_auto_extension(w);return w!==arguments[0]&&(x===0?q.add(w):s.uninstallFunction(w)),x},r.sqlite3_cancel_auto_extension=function(w){return!w||arguments.length!==1||!s.isPtr(w)?0:s.exports.sqlite3_cancel_auto_extension(w)},r.sqlite3_reset_auto_extension=function(){s.exports.sqlite3_reset_auto_extension();for(const w of q)s.uninstallFunction(w);q.clear()}}const Q=r.sqlite3_vfs_find("kvvfs");if(Q)if(o.isUIThread()){const q=new r.sqlite3_kvvfs_methods(s.exports.sqlite3__wasm_kvvfs_methods());delete r.sqlite3_kvvfs_methods;const w=s.exports.sqlite3__wasm_kvvfsMakeKeyOnPstack,x=s.pstack,N=S=>s.peek(S)===115?sessionStorage:localStorage,O={xRead:(S,L,$,c)=>{const d=x.pointer,y=s.scopedAllocPush();try{const B=w(S,L);if(!B)return-3;const f=s.cstrToJs(B),h=N(S).getItem(f);if(!h)return-1;const l=h.length;if(c<=0)return l;if(c===1)return s.poke($,0),l;const _=s.scopedAllocCString(h);return c>l+1&&(c=l+1),s.heap8u().copyWithin($,_,_+c-1),s.poke($+c-1,0),c-1}catch(B){return console.error("kvstorageRead()",B),-2}finally{x.restore(d),s.scopedAllocPop(y)}},xWrite:(S,L,$)=>{const c=x.pointer;try{const d=w(S,L);if(!d)return 1;const y=s.cstrToJs(d);return N(S).setItem(y,s.cstrToJs($)),0}catch(d){return console.error("kvstorageWrite()",d),r.SQLITE_IOERR}finally{x.restore(c)}},xDelete:(S,L)=>{const $=x.pointer;try{const c=w(S,L);return c?(N(S).removeItem(s.cstrToJs(c)),0):1}catch(c){return console.error("kvstorageDelete()",c),r.SQLITE_IOERR}finally{x.restore($)}}};for(const S of Object.keys(O))q[q.memberKey(S)]=s.installFunction(q.memberSignature(S),O[S])}else r.sqlite3_vfs_unregister(Q);s.xWrap.FuncPtrAdapter.warnOnUse=!0;const T=t.StructBinder,A=function q(w,x,N,O=q.installMethodArgcCheck){if(w instanceof T.StructType?!(N instanceof Function)&&!s.isPtr(N)&&n("Usage error: expecting a Function or WASM pointer to one."):n("Usage error: target object is-not-a StructType."),arguments.length===1)return(c,d)=>q(w,c,d,O);q.argcProxy||(q.argcProxy=function(c,d,y,B){return function(...f){return y.length!==arguments.length&&n("Argument mismatch for",c.structInfo.name+"::"+d+": Native signature is:",B),y.apply(this,f)}},q.removeFuncList=function(){this.ondispose.__removeFuncList&&(this.ondispose.__removeFuncList.forEach((c,d)=>{if(typeof c=="number")try{s.uninstallFunction(c)}catch{}}),delete this.ondispose.__removeFuncList)});const S=w.memberSignature(x);S.length<2&&n("Member",x,"does not have a function pointer signature:",S);const L=w.memberKey(x),$=O&&!s.isPtr(N)?q.argcProxy(w,L,N,S):N;if(s.isPtr($))$&&!s.functionEntry($)&&n("Pointer",$,"is not a WASM function table entry."),w[L]=$;else{const c=s.installFunction($,w.memberSignature(x,!0));w[L]=c,(!w.ondispose||!w.ondispose.__removeFuncList)&&(w.addOnDispose("ondispose.__removeFuncList handler",q.removeFuncList),w.ondispose.__removeFuncList=[]),w.ondispose.__removeFuncList.push(L,c)}return(c,d)=>q(w,c,d,O)};A.installMethodArgcCheck=!1;const D=function(q,w,x=A.installMethodArgcCheck){const N=new Map;for(const O of Object.keys(w)){const S=w[O],L=N.get(S);if(L){const $=q.memberKey(O);q[$]=q[q.memberKey(L)]}else A(q,O,S,x),N.set(S,O)}return q};T.StructType.prototype.installMethod=function(w,x,N=A.installMethodArgcCheck){return arguments.length<3&&w&&typeof w=="object"?D(this,...arguments):A(this,...arguments)},T.StructType.prototype.installMethods=function(q,w=A.installMethodArgcCheck){return D(this,q,w)}}),globalThis.sqlite3ApiBootstrap.initializers.push(function(t){t.version={libVersion:"3.50.4",libVersionNumber:3050004,sourceId:"2025-07-30 19:33:53 4d8adfb30e03f9cf27f800a2c1ba3c48fb4ca1b08b0f5ed59a4d5ecbf45e20a3",downloadVersion:3500400}}),globalThis.sqlite3ApiBootstrap.initializers.push(function(t){const n=(...f)=>{throw new t.SQLite3Error(...f)},r=t.capi,s=t.wasm,o=t.util,p=new WeakMap,g=new WeakMap,P=(f,h,l)=>{const _=Object.getOwnPropertyDescriptor(f,h);return _?_.value:l},R=function(f,h){return h&&(f instanceof A&&(f=f.pointer),n(h,"sqlite3 result code",h+":",f?r.sqlite3_errmsg(f):r.sqlite3_errstr(h))),arguments[0]},z=s.installFunction("i(ippp)",(function(f,h,l,_){r.SQLITE_TRACE_STMT===f&&console.log("SQL TRACE #"+ ++this.counter+" via sqlite3@"+h+":",s.cstrToJs(_))}).bind({counter:0})),Q=Object.create(null),T=function f(...h){if(!f._name2vfs){f._name2vfs=Object.create(null);const j=typeof importScripts=="function"?b=>n("The VFS for",b,"is only available in the main window thread."):!1;f._name2vfs[":localStorage:"]={vfs:"kvvfs",filename:j||(()=>"local")},f._name2vfs[":sessionStorage:"]={vfs:"kvvfs",filename:j||(()=>"session")}}const l=f.normalizeArgs(...h);let _=l.filename,u=l.vfs,I=l.flags;(typeof _!="string"&&typeof _!="number"||typeof I!="string"||u&&typeof u!="string"&&typeof u!="number")&&(t.config.error("Invalid DB ctor args",l,arguments),n("Invalid arguments for DB constructor."));let U=typeof _=="number"?s.cstrToJs(_):_;const ee=f._name2vfs[U];ee&&(u=ee.vfs,_=U=ee.filename(U));let ne,se=0;I.indexOf("c")>=0&&(se|=r.SQLITE_OPEN_CREATE|r.SQLITE_OPEN_READWRITE),I.indexOf("w")>=0&&(se|=r.SQLITE_OPEN_READWRITE),se===0&&(se|=r.SQLITE_OPEN_READONLY),se|=r.SQLITE_OPEN_EXRESCODE;const ie=s.pstack.pointer;try{const j=s.pstack.allocPtr();let b=r.sqlite3_open_v2(_,j,se,u||0);ne=s.peekPtr(j),R(ne,b),r.sqlite3_extended_result_codes(ne,1),I.indexOf("t")>=0&&r.sqlite3_trace_v2(ne,r.SQLITE_TRACE_STMT,z,ne)}catch(j){throw ne&&r.sqlite3_close_v2(ne),j}finally{s.pstack.restore(ie)}this.filename=U,p.set(this,ne),g.set(this,Object.create(null));try{const j=r.sqlite3_js_db_vfs(ne)||n("Internal error: cannot get VFS for new db handle."),b=Q[j];b&&(b instanceof Function?b(this,t):R(ne,r.sqlite3_exec(ne,b,0,0,0)))}catch(j){throw this.close(),j}};T.setVfsPostOpenCallback=function(f,h){h instanceof Function||n("dbCtorHelper.setVfsPostOpenCallback() should not be used with a non-function argument.",arguments),Q[f]=h},T.normalizeArgs=function(f=":memory:",h="c",l=null){const _={};return arguments.length===1&&arguments[0]&&typeof arguments[0]=="object"?(Object.assign(_,arguments[0]),_.flags===void 0&&(_.flags="c"),_.vfs===void 0&&(_.vfs=null),_.filename===void 0&&(_.filename=":memory:")):(_.filename=f,_.flags=h,_.vfs=l),_};const A=function(...f){T.apply(this,f)};A.dbCtorHelper=T;const D={null:1,number:2,string:3,boolean:4,blob:5};D.undefined==D.null,s.bigIntEnabled&&(D.bigint=D.number);const q=function(){D!==arguments[2]&&n(r.SQLITE_MISUSE,"Do not call the Stmt constructor directly. Use DB.prepare()."),this.db=arguments[0],p.set(this,arguments[1]),this.parameterCount=r.sqlite3_bind_parameter_count(this.pointer)},w=function(f){return f.pointer||n("DB has been closed."),f},x=function(f,h){return(h!==(h|0)||h<0||h>=f.columnCount)&&n("Column index",h,"is out of range."),f},N=function(f,h){const l=Object.create(null);switch(l.opt=Object.create(null),h.length){case 1:typeof h[0]=="string"||o.isSQLableTypedArray(h[0])||Array.isArray(h[0])?l.sql=h[0]:h[0]&&typeof h[0]=="object"&&(l.opt=h[0],l.sql=l.opt.sql);break;case 2:l.sql=h[0],l.opt=h[1];break;default:n("Invalid argument count for exec().")}l.sql=o.flexibleString(l.sql),typeof l.sql!="string"&&n("Missing SQL argument or unsupported SQL value type.");const _=l.opt;switch(_.returnValue){case"resultRows":_.resultRows||(_.resultRows=[]),l.returnVal=()=>_.resultRows;break;case"saveSql":_.saveSql||(_.saveSql=[]),l.returnVal=()=>_.saveSql;break;case void 0:case"this":l.returnVal=()=>f;break;default:n("Invalid returnValue value:",_.returnValue)}if(!_.callback&&!_.returnValue&&_.rowMode!==void 0&&(_.resultRows||(_.resultRows=[]),l.returnVal=()=>_.resultRows),_.callback||_.resultRows)switch(_.rowMode===void 0?"array":_.rowMode){case"object":l.cbArg=(u,I)=>{I.columnNames||(I.columnNames=u.getColumnNames([]));const U=u.get([]),ee=Object.create(null);for(const ne in I.columnNames)ee[I.columnNames[ne]]=U[ne];return ee};break;case"array":l.cbArg=u=>u.get([]);break;case"stmt":Array.isArray(_.resultRows)&&n("exec(): invalid rowMode for a resultRows array: must","be one of 'array', 'object',","a result column number, or column name reference."),l.cbArg=u=>u;break;default:if(o.isInt32(_.rowMode)){l.cbArg=u=>u.get(_.rowMode);break}else if(typeof _.rowMode=="string"&&_.rowMode.length>1&&_.rowMode[0]==="$"){const u=_.rowMode.substr(1);l.cbArg=I=>{const U=I.get(Object.create(null))[u];return U===void 0?n(r.SQLITE_NOTFOUND,"exec(): unknown result column:",u):U};break}n("Invalid rowMode:",_.rowMode)}return l},O=(f,h,l,..._)=>{const u=f.prepare(h);try{const I=u.bind(l).step()?u.get(..._):void 0;return u.reset(),I}finally{u.finalize()}},S=(f,h,l,_)=>f.exec({sql:h,bind:l,rowMode:_,returnValue:"resultRows"});A.checkRc=(f,h)=>R(f,h),A.prototype={isOpen:function(){return!!this.pointer},affirmOpen:function(){return w(this)},close:function(){if(this.pointer){if(this.onclose&&this.onclose.before instanceof Function)try{this.onclose.before(this)}catch{}const f=this.pointer;if(Object.keys(g.get(this)).forEach((h,l)=>{if(l&&l.pointer)try{l.finalize()}catch{}}),p.delete(this),g.delete(this),r.sqlite3_close_v2(f),this.onclose&&this.onclose.after instanceof Function)try{this.onclose.after(this)}catch{}delete this.filename}},changes:function(f=!1,h=!1){const l=w(this).pointer;return f?h?r.sqlite3_total_changes64(l):r.sqlite3_total_changes(l):h?r.sqlite3_changes64(l):r.sqlite3_changes(l)},dbFilename:function(f="main"){return r.sqlite3_db_filename(w(this).pointer,f)},dbName:function(f=0){return r.sqlite3_db_name(w(this).pointer,f)},dbVfsName:function(f=0){let h;const l=r.sqlite3_js_db_vfs(w(this).pointer,f);if(l){const _=new r.sqlite3_vfs(l);try{h=s.cstrToJs(_.$zName)}finally{_.dispose()}}return h},prepare:function(f){w(this);const h=s.pstack.pointer;let l,_;try{l=s.pstack.alloc(8),A.checkRc(this,r.sqlite3_prepare_v2(this.pointer,f,-1,l,null)),_=s.peekPtr(l)}finally{s.pstack.restore(h)}_||n("Cannot prepare empty SQL.");const u=new q(this,_,D);return g.get(this)[_]=u,u},exec:function(){w(this);const f=N(this,arguments);if(!f.sql)return n("exec() requires an SQL string.");const h=f.opt,l=h.callback,_=Array.isArray(h.resultRows)?h.resultRows:void 0;let u,I=h.bind,U=!!(f.cbArg||h.columnNames||_);const ee=s.scopedAllocPush(),ne=Array.isArray(h.saveSql)?h.saveSql:void 0;try{const se=o.isSQLableTypedArray(f.sql);let ie=se?f.sql.byteLength:s.jstrlen(f.sql);const j=s.scopedAlloc(2*s.ptrSizeof+(ie+1)),b=j+s.ptrSizeof;let k=b+s.ptrSizeof;const W=k+ie;for(se?s.heap8().set(f.sql,k):s.jstrcpy(f.sql,s.heap8(),k,ie,!1),s.poke(k+ie,0);k&&s.peek(k,"i8");){s.pokePtr([j,b],0),A.checkRc(this,r.sqlite3_prepare_v3(this.pointer,k,ie,0,j,b));const H=s.peekPtr(j);if(k=s.peekPtr(b),ie=W-k,!!H){if(ne&&ne.push(r.sqlite3_sql(H).trim()),u=new q(this,H,D),I&&u.parameterCount&&(u.bind(I),I=null),U&&u.columnCount){let Z=Array.isArray(h.columnNames)?0:1;if(U=!1,f.cbArg||_){const E=Object.create(null);for(;u.step();u._lockedByExec=!1){Z++===0&&u.getColumnNames(E.columnNames=h.columnNames||[]),u._lockedByExec=!0;const C=f.cbArg(u,E);if(_&&_.push(C),l&&l.call(h,C,u)===!1)break}u._lockedByExec=!1}Z===0&&u.getColumnNames(h.columnNames)}else u.step();u.reset().finalize(),u=null}}}finally{s.scopedAllocPop(ee),u&&(delete u._lockedByExec,u.finalize())}return f.returnVal()},createFunction:function(h,l,_){const u=E=>E instanceof Function;switch(arguments.length){case 1:_=h,h=_.name,l=_.xFunc||0;break;case 2:u(l)||(_=l,l=_.xFunc||0);break}_||(_={}),typeof h!="string"&&n("Invalid arguments: missing function name.");let I=_.xStep||0,U=_.xFinal||0;const ee=_.xValue||0,ne=_.xInverse||0;let se;u(l)?(se=!1,(u(I)||u(U))&&n("Ambiguous arguments: scalar or aggregate?"),I=U=null):u(I)?(u(U)||n("Missing xFinal() callback for aggregate or window UDF."),l=null):u(U)?n("Missing xStep() callback for aggregate or window UDF."):n("Missing function-type properties."),se===!1?(u(ee)||u(ne))&&n("xValue and xInverse are not permitted for non-window UDFs."):u(ee)?(u(ne)||n("xInverse must be provided if xValue is."),se=!0):u(ne)&&n("xValue must be provided if xInverse is.");const ie=_.pApp;ie!=null&&(typeof ie!="number"||!o.isInt32(ie))&&n("Invalid value for pApp property. Must be a legal WASM pointer value.");const j=_.xDestroy||0;j&&!u(j)&&n("xDestroy property must be a function.");let b=0;P(_,"deterministic")&&(b|=r.SQLITE_DETERMINISTIC),P(_,"directOnly")&&(b|=r.SQLITE_DIRECTONLY),P(_,"innocuous")&&(b|=r.SQLITE_INNOCUOUS),h=h.toLowerCase();const k=l||I,W=P(_,"arity"),H=typeof W=="number"?W:k.length?k.length-1:0;let Z;return se?Z=r.sqlite3_create_window_function(this.pointer,h,H,r.SQLITE_UTF8|b,ie||0,I,U,ee,ne,j):Z=r.sqlite3_create_function_v2(this.pointer,h,H,r.SQLITE_UTF8|b,ie||0,l,I,U,j),A.checkRc(this,Z),this},selectValue:function(f,h,l){return O(this,f,h,0,l)},selectValues:function(f,h,l){const _=this.prepare(f),u=[];try{for(_.bind(h);_.step();)u.push(_.get(0,l));_.reset()}finally{_.finalize()}return u},selectArray:function(f,h){return O(this,f,h,[])},selectObject:function(f,h){return O(this,f,h,{})},selectArrays:function(f,h){return S(this,f,h,"array")},selectObjects:function(f,h){return S(this,f,h,"object")},openStatementCount:function(){return this.pointer?Object.keys(g.get(this)).length:0},transaction:function(f){let h="BEGIN";arguments.length>1&&(/[^a-zA-Z]/.test(arguments[0])&&n(r.SQLITE_MISUSE,"Invalid argument for BEGIN qualifier."),h+=" "+arguments[0],f=arguments[1]),w(this).exec(h);try{const l=f(this);return this.exec("COMMIT"),l}catch(l){throw this.exec("ROLLBACK"),l}},savepoint:function(f){w(this).exec("SAVEPOINT oo1");try{const h=f(this);return this.exec("RELEASE oo1"),h}catch(h){throw this.exec("ROLLBACK to SAVEPOINT oo1; RELEASE SAVEPOINT oo1"),h}},checkRc:function(f){return R(this,f)}};const L=function(f){return f.pointer||n("Stmt has been closed."),f},$=function(f){let h=D[f==null?"null":typeof f];switch(h){case D.boolean:case D.null:case D.number:case D.string:return h;case D.bigint:if(s.bigIntEnabled)return h;default:return o.isBindableTypedArray(f)?D.blob:void 0}},c=function(f){return $(f)||n("Unsupported bind() argument type:",typeof f)},d=function(f,h){const l=typeof h=="number"?h:r.sqlite3_bind_parameter_index(f.pointer,h);return l===0||!o.isInt32(l)?n("Invalid bind() parameter name: "+h):(l<1||l>f.parameterCount)&&n("Bind index",h,"is out of range."),l},y=function(f,h){return f._lockedByExec&&n("Operation is illegal when statement is locked:",h),f},B=function f(h,l,_,u){y(L(h),"bind()"),f._||(f._tooBigInt=U=>n("BigInt value is too big to store without precision loss:",U),f._={string:function(U,ee,ne,se){const[ie,j]=s.allocCString(ne,!0);return(se?r.sqlite3_bind_blob:r.sqlite3_bind_text)(U.pointer,ee,ie,j,r.SQLITE_WASM_DEALLOC)}}),c(u),l=d(h,l);let I=0;switch(u==null?D.null:_){case D.null:I=r.sqlite3_bind_null(h.pointer,l);break;case D.string:I=f._.string(h,l,u,!1);break;case D.number:{let U;o.isInt32(u)?U=r.sqlite3_bind_int:typeof u=="bigint"?o.bigIntFits64(u)?s.bigIntEnabled?U=r.sqlite3_bind_int64:o.bigIntFitsDouble(u)?(u=Number(u),U=r.sqlite3_bind_double):f._tooBigInt(u):f._tooBigInt(u):(u=Number(u),s.bigIntEnabled&&Number.isInteger(u)?U=r.sqlite3_bind_int64:U=r.sqlite3_bind_double),I=U(h.pointer,l,u);break}case D.boolean:I=r.sqlite3_bind_int(h.pointer,l,u?1:0);break;case D.blob:{if(typeof u=="string"){I=f._.string(h,l,u,!0);break}else u instanceof ArrayBuffer?u=new Uint8Array(u):o.isBindableTypedArray(u)||n("Binding a value as a blob requires","that it be a string, Uint8Array, Int8Array, or ArrayBuffer.");const U=s.alloc(u.byteLength||1);s.heap8().set(u.byteLength?u:[0],U),I=r.sqlite3_bind_blob(h.pointer,l,U,u.byteLength,r.SQLITE_WASM_DEALLOC);break}default:t.config.warn("Unsupported bind() argument type:",u),n("Unsupported bind() argument type: "+typeof u)}return I&&A.checkRc(h.db.pointer,I),h._mayGet=!1,h};q.prototype={finalize:function(){if(this.pointer){y(this,"finalize()");const f=r.sqlite3_finalize(this.pointer);return delete g.get(this.db)[this.pointer],p.delete(this),delete this._mayGet,delete this.parameterCount,delete this._lockedByExec,delete this.db,f}},clearBindings:function(){return y(L(this),"clearBindings()"),r.sqlite3_clear_bindings(this.pointer),this._mayGet=!1,this},reset:function(f){y(this,"reset()"),f&&this.clearBindings();const h=r.sqlite3_reset(L(this).pointer);return this._mayGet=!1,R(this.db,h),this},bind:function(){L(this);let f,h;switch(arguments.length){case 1:f=1,h=arguments[0];break;case 2:f=arguments[0],h=arguments[1];break;default:n("Invalid bind() arguments.")}return h===void 0?this:(this.parameterCount||n("This statement has no bindable parameters."),this._mayGet=!1,h===null?B(this,f,D.null,h):Array.isArray(h)?(arguments.length!==1&&n("When binding an array, an index argument is not permitted."),h.forEach((l,_)=>B(this,_+1,c(l),l)),this):(h instanceof ArrayBuffer&&(h=new Uint8Array(h)),typeof h=="object"&&!o.isBindableTypedArray(h)?(arguments.length!==1&&n("When binding an object, an index argument is not permitted."),Object.keys(h).forEach(l=>B(this,l,c(h[l]),h[l])),this):B(this,f,c(h),h)))},bindAsBlob:function(f,h){L(this),arguments.length===1&&(h=f,f=1);const l=c(h);return D.string!==l&&D.blob!==l&&D.null!==l&&n("Invalid value type for bindAsBlob()"),B(this,f,D.blob,h)},step:function(){y(this,"step()");const f=r.sqlite3_step(L(this).pointer);switch(f){case r.SQLITE_DONE:return this._mayGet=!1;case r.SQLITE_ROW:return this._mayGet=!0;default:this._mayGet=!1,t.config.warn("sqlite3_step() rc=",f,r.sqlite3_js_rc_str(f),"SQL =",r.sqlite3_sql(this.pointer)),A.checkRc(this.db.pointer,f)}},stepReset:function(){return this.step(),this.reset()},stepFinalize:function(){try{const f=this.step();return this.reset(),f}finally{try{this.finalize()}catch{}}},get:function(f,h){if(L(this)._mayGet||n("Stmt.step() has not (recently) returned true."),Array.isArray(f)){let l=0;const _=this.columnCount;for(;l<_;)f[l]=this.get(l++);return f}else if(f&&typeof f=="object"){let l=0;const _=this.columnCount;for(;l<_;)f[r.sqlite3_column_name(this.pointer,l)]=this.get(l++);return f}switch(x(this,f),h===void 0?r.sqlite3_column_type(this.pointer,f):h){case r.SQLITE_NULL:return null;case r.SQLITE_INTEGER:if(s.bigIntEnabled){const l=r.sqlite3_column_int64(this.pointer,f);return l>=Number.MIN_SAFE_INTEGER&&l<=Number.MAX_SAFE_INTEGER?Number(l).valueOf():l}else{const l=r.sqlite3_column_double(this.pointer,f);return(l>Number.MAX_SAFE_INTEGER||ln("The pointer property is read-only.")};Object.defineProperty(q.prototype,"pointer",f),Object.defineProperty(A.prototype,"pointer",f)}if(Object.defineProperty(q.prototype,"columnCount",{enumerable:!1,get:function(){return r.sqlite3_column_count(this.pointer)},set:()=>n("The columnCount property is read-only.")}),t.oo1={DB:A,Stmt:q},o.isUIThread()){t.oo1.JsStorageDb=function(h="session"){const l=T.normalizeArgs(...arguments);h=l.filename,h!=="session"&&h!=="local"&&n("JsStorageDb db name must be one of 'session' or 'local'."),l.vfs="kvvfs",T.call(this,l)};const f=t.oo1.JsStorageDb;f.prototype=Object.create(A.prototype),f.clearStorage=r.sqlite3_js_kvvfs_clear,f.prototype.clearStorage=function(){return f.clearStorage(w(this).filename)},f.storageSize=r.sqlite3_js_kvvfs_size,f.prototype.storageSize=function(){return f.storageSize(w(this).filename)}}}),globalThis.sqlite3ApiBootstrap.initializers.push(function(t){const n=t.util;t.initWorker1API=(function(){const r=(...T)=>{throw new Error(T.join(" "))};globalThis.WorkerGlobalScope instanceof Function||r("initWorker1API() must be run from a Worker thread.");const s=this.sqlite3||r("Missing this.sqlite3 object."),o=s.oo1.DB,p=function(T){let A=g.idMap.get(T);return A||(A="db#"+ ++g.idSeq+"@"+T.pointer,g.idMap.set(T,A),A)},g={dbList:[],idSeq:0,idMap:new WeakMap,xfer:[],open:function(T){const A=new o(T);return this.dbs[p(A)]=A,this.dbList.indexOf(A)<0&&this.dbList.push(A),A},close:function(T,A){if(T){delete this.dbs[p(T)];const D=T.filename,q=n.sqlite3__wasm_db_vfs(T.pointer,0);T.close();const w=this.dbList.indexOf(T);w>=0&&this.dbList.splice(w,1),A&&D&&q&&n.sqlite3__wasm_vfs_unlink(q,D)}},post:function(T,A){A&&A.length?(globalThis.postMessage(T,Array.from(A)),A.length=0):globalThis.postMessage(T)},dbs:Object.create(null),getDb:function(T,A=!0){return this.dbs[T]||(A?r("Unknown (or closed) DB ID:",T):void 0)}},P=function(T=g.dbList[0]){return T&&T.pointer?T:r("DB is not opened.")},R=function(T,A=!0){const D=g.getDb(T.dbId,!1)||g.dbList[0];return A?P(D):D},z=function(){return g.dbList[0]&&p(g.dbList[0])},Q={open:function(T){const A=Object.create(null),D=T.args||Object.create(null);D.simulateError&&r("Throwing because of simulateError flag.");const q=Object.create(null);A.vfs=D.vfs,A.filename=D.filename||"";const w=g.open(A);return q.filename=w.filename,q.persistent=!!s.capi.sqlite3_js_db_uses_vfs(w.pointer,"opfs"),q.dbId=p(w),q.vfs=w.dbVfsName(),q},close:function(T){const A=R(T,!1),D={filename:A&&A.filename};if(A){const q=T.args&&typeof T.args=="object"?!!T.args.unlink:!1;g.close(A,q)}return D},exec:function(T){const A=typeof T.args=="string"?{sql:T.args}:T.args||Object.create(null);A.rowMode==="stmt"?r("Invalid rowMode for 'exec': stmt mode","does not work in the Worker API."):A.sql||r("'exec' requires input SQL.");const D=R(T);(A.callback||Array.isArray(A.resultRows))&&(D._blobXfer=g.xfer);const q=A.callback;let w=0;const x=!!A.columnNames;typeof q=="string"&&(x||(A.columnNames=[]),A.callback=function(N,O){g.post({type:q,columnNames:A.columnNames,rowNumber:++w,row:N},g.xfer)});try{const N=A.countChanges?D.changes(!0,A.countChanges===64):void 0;D.exec(A),N!==void 0&&(A.changeCount=D.changes(!0,A.countChanges===64)-N);const O=A.lastInsertRowId?s.capi.sqlite3_last_insert_rowid(D):void 0;O!==void 0&&(A.lastInsertRowId=O),A.callback instanceof Function&&(A.callback=q,g.post({type:q,columnNames:A.columnNames,rowNumber:null,row:void 0}))}finally{delete D._blobXfer,A.callback&&(A.callback=q)}return A},"config-get":function(){const T=Object.create(null),A=s.config;return["bigIntEnabled"].forEach(function(D){Object.getOwnPropertyDescriptor(A,D)&&(T[D]=A[D])}),T.version=s.version,T.vfsList=s.capi.sqlite3_js_vfs_list(),T},export:function(T){const A=R(T),D={byteArray:s.capi.sqlite3_js_db_export(A.pointer),filename:A.filename,mimetype:"application/x-sqlite3"};return g.xfer.push(D.byteArray.buffer),D},toss:function(T){r("Testing worker exception")}};globalThis.onmessage=async function(T){T=T.data;let A,D=T.dbId,q=T.type;const w=performance.now();try{Q.hasOwnProperty(q)&&Q[q]instanceof Function?A=await Q[q](T):r("Unknown db worker message type:",T.type)}catch(x){q="error",A={operation:T.type,message:x.message,errorClass:x.name,input:T},x.stack&&(A.stack=typeof x.stack=="string"?x.stack.split(/\n\s*/):x.stack)}D||(D=A.dbId||z()),g.post({type:q,dbId:D,messageId:T.messageId,workerReceivedTime:w,workerRespondTime:performance.now(),departureTime:T.departureTime,result:A},g.xfer)},globalThis.postMessage({type:"sqlite3-api",result:"worker1-ready"})}).bind({sqlite3:t})}),globalThis.sqlite3ApiBootstrap.initializers.push(function(t){const n=t.wasm,r=t.capi,s=t.util.toss3,o=Object.create(null);t.vfs=o,r.sqlite3_vfs.prototype.registerVfs=function(p=!1){this instanceof t.capi.sqlite3_vfs||s("Expecting a sqlite3_vfs-type argument.");const g=r.sqlite3_vfs_register(this,p?1:0);return g&&s("sqlite3_vfs_register(",this,") failed with rc",g),this.pointer!==r.sqlite3_vfs_find(this.$zName)&&s("BUG: sqlite3_vfs_find(vfs.$zName) failed for just-installed VFS",this),this},o.installVfs=function(p){let g=0;const P=["io","vfs"];for(const R of P){const z=p[R];z&&(++g,z.struct.installMethods(z.methods,!!z.applyArgcCheck),R==="vfs"&&(!z.struct.$zName&&typeof z.name=="string"&&z.struct.addOnDispose(z.struct.$zName=n.allocCString(z.name)),z.struct.registerVfs(!!z.asDefault)))}return g||s("Misuse: installVfs() options object requires at least","one of:",P),this}}),globalThis.sqlite3ApiBootstrap.initializers.push(function(t){if(!t.wasm.exports.sqlite3_declare_vtab)return;const n=t.wasm,r=t.capi,s=t.util.toss3,o=Object.create(null);t.vtab=o;const p=r.sqlite3_index_info;p.prototype.nthConstraint=function(R,z=!1){if(R<0||R>=this.$nConstraint)return!1;const Q=this.$aConstraint+p.sqlite3_index_constraint.structInfo.sizeof*R;return z?Q:new p.sqlite3_index_constraint(Q)},p.prototype.nthConstraintUsage=function(R,z=!1){if(R<0||R>=this.$nConstraint)return!1;const Q=this.$aConstraintUsage+p.sqlite3_index_constraint_usage.structInfo.sizeof*R;return z?Q:new p.sqlite3_index_constraint_usage(Q)},p.prototype.nthOrderBy=function(R,z=!1){if(R<0||R>=this.$nOrderBy)return!1;const Q=this.$aOrderBy+p.sqlite3_index_orderby.structInfo.sizeof*R;return z?Q:new p.sqlite3_index_orderby(Q)};const g=function(R,z){return(function(Q,T=!1){if(arguments.length===0&&(Q=new z),Q instanceof z)return this.set(Q.pointer,Q),Q;n.isPtr(Q)||t.SQLite3Error.toss("Invalid argument to",R+"()");let A=this.get(Q);return T&&this.delete(Q),A}).bind(new Map)},P=function(R,z){const Q=g(R,z);return Object.assign(Object.create(null),{StructType:z,create:T=>{const A=Q();return n.pokePtr(T,A.pointer),A},get:T=>Q(T),unget:T=>Q(T,!0),dispose:T=>{const A=Q(T,!0);A&&A.dispose()}})};o.xVtab=P("xVtab",r.sqlite3_vtab),o.xCursor=P("xCursor",r.sqlite3_vtab_cursor),o.xIndexInfo=R=>new r.sqlite3_index_info(R),o.xError=function R(z,Q,T){if(R.errorReporter instanceof Function)try{R.errorReporter("sqlite3_module::"+z+"(): "+Q.message)}catch{}let A;return Q instanceof t.WasmAllocError?A=r.SQLITE_NOMEM:arguments.length>2?A=T:Q instanceof t.SQLite3Error&&(A=Q.resultCode),A||r.SQLITE_ERROR},o.xError.errorReporter=console.error.bind(console),o.xRowid=(R,z)=>n.poke(R,z,"i64"),o.setupModule=function(R){let z=!1;const Q=this instanceof r.sqlite3_module?this:R.struct||(z=new r.sqlite3_module);try{const T=R.methods||s("Missing 'methods' object.");for(const A of Object.entries({xConnect:"xCreate",xDisconnect:"xDestroy"})){const D=A[0],q=A[1];T[D]===!0?T[D]=T[q]:T[q]===!0&&(T[q]=T[D])}if(R.catchExceptions){const A=function(w,x){return["xConnect","xCreate"].indexOf(w)>=0?function(N,O,S,L,$,c){try{return x(...arguments)||0}catch(d){return d instanceof t.WasmAllocError||(n.dealloc(n.peekPtr(c)),n.pokePtr(c,n.allocCString(d.message))),o.xError(w,d)}}:function(...N){try{return x(...N)||0}catch(O){return o.xError(w,O)}}},D=["xCreate","xConnect","xBestIndex","xDisconnect","xDestroy","xOpen","xClose","xFilter","xNext","xEof","xColumn","xRowid","xUpdate","xBegin","xSync","xCommit","xRollback","xFindFunction","xRename","xSavepoint","xRelease","xRollbackTo","xShadowName"],q=Object.create(null);for(const w of D){const x=T[w];if(x instanceof Function)w==="xConnect"&&T.xCreate===x?q[w]=T.xCreate:w==="xCreate"&&T.xConnect===x?q[w]=T.xConnect:q[w]=A(w,x);else continue}Q.installMethods(q,!1)}else Q.installMethods(T,!!R.applyArgcCheck);if(Q.$iVersion===0){let A;typeof R.iVersion=="number"?A=R.iVersion:Q.$xShadowName?A=3:Q.$xSavePoint||Q.$xRelease||Q.$xRollbackTo?A=2:A=1,Q.$iVersion=A}}catch(T){throw z&&z.dispose(),T}return Q},r.sqlite3_module.prototype.setupModule=function(R){return o.setupModule.call(this,R)}}),globalThis.sqlite3ApiBootstrap.initializers.push(function(t){const n=function r(s){if(!globalThis.SharedArrayBuffer||!globalThis.Atomics)return Promise.reject(new Error("Cannot install OPFS: Missing SharedArrayBuffer and/or Atomics. The server must emit the COOP/COEP response headers to enable those. See https://sqlite.org/wasm/doc/trunk/persistence.md#coop-coep"));if(typeof WorkerGlobalScope>"u")return Promise.reject(new Error("The OPFS sqlite3_vfs cannot run in the main thread because it requires Atomics.wait()."));if(!globalThis.FileSystemHandle||!globalThis.FileSystemDirectoryHandle||!globalThis.FileSystemFileHandle||!globalThis.FileSystemFileHandle.prototype.createSyncAccessHandle||!navigator?.storage?.getDirectory)return Promise.reject(new Error("Missing required OPFS APIs."));(!s||typeof s!="object")&&(s=Object.create(null));const o=new URL(globalThis.location.href).searchParams;return o.has("opfs-disable")?Promise.resolve(t):(s.verbose===void 0&&(s.verbose=o.has("opfs-verbose")?+o.get("opfs-verbose")||2:1),s.sanityChecks===void 0&&(s.sanityChecks=o.has("opfs-sanity-check")),s.proxyUri===void 0&&(s.proxyUri=r.defaultProxyUri),typeof s.proxyUri=="function"&&(s.proxyUri=s.proxyUri()),new Promise(function(g,P){const R=[t.config.error,t.config.warn,t.config.log],z=(E,...C)=>{s.verbose>E&&R[E]("OPFS syncer:",...C)},Q=(...E)=>z(2,...E),T=(...E)=>z(1,...E),A=(...E)=>z(0,...E),D=t.util.toss,q=t.capi,w=t.util,x=t.wasm,N=q.sqlite3_vfs,O=q.sqlite3_file,S=q.sqlite3_io_methods,L=Object.create(null),$=()=>globalThis.FileSystemHandle&&globalThis.FileSystemDirectoryHandle&&globalThis.FileSystemFileHandle&&globalThis.FileSystemFileHandle.prototype.createSyncAccessHandle&&navigator?.storage?.getDirectory;L.metrics={dump:function(){let E,C=0,M=0,J=0;for(E in u.opIds){const G=I[E];C+=G.count,M+=G.time,J+=G.wait,G.avgTime=G.count&&G.time?G.time/G.count:0,G.avgWait=G.count&&G.wait?G.wait/G.count:0}t.config.log(globalThis.location.href,"metrics for",globalThis.location.href,":",I,` +Total of`,C,"op(s) for",M,"ms (incl. "+J+" ms of waiting on the async side)"),t.config.log("Serialization metrics:",I.s11n),h.postMessage({type:"opfs-async-metrics"})},reset:function(){let E;const C=J=>J.count=J.time=J.wait=0;for(E in u.opIds)C(I[E]=Object.create(null));let M=I.s11n=Object.create(null);M=M.serialize=Object.create(null),M.count=M.time=0,M=I.s11n.deserialize=Object.create(null),M.count=M.time=0}};const c=new S,d=new N().addOnDispose(()=>c.dispose());let y;const B=E=>(y=!0,d.dispose(),P(E)),f=()=>(y=!1,g(t)),h=new Worker(new URL(""+new URL("sqlite3-opfs-async-proxy-C_otN2ZJ.js",import.meta.url).href,import.meta.url));setTimeout(()=>{y===void 0&&B(new Error("Timeout while waiting for OPFS async proxy worker."))},4e3),h._originalOnError=h.onerror,h.onerror=function(E){A("Error initializing OPFS asyncer:",E),B(new Error("Loading OPFS async Worker failed for unknown reasons."))};const l=q.sqlite3_vfs_find(null),_=l?new N(l):null;c.$iVersion=1,d.$iVersion=2,d.$szOsFile=q.sqlite3_file.structInfo.sizeof,d.$mxPathname=1024,d.$zName=x.allocCString("opfs"),d.$xDlOpen=d.$xDlError=d.$xDlSym=d.$xDlClose=null,d.addOnDispose("$zName",d.$zName,"cleanup default VFS wrapper",()=>_?_.dispose():null);const u=Object.create(null);u.verbose=s.verbose,u.littleEndian=(()=>{const E=new ArrayBuffer(2);return new DataView(E).setInt16(0,256,!0),new Int16Array(E)[0]===256})(),u.asyncIdleWaitTime=150,u.asyncS11nExceptions=1,u.fileBufferSize=1024*64,u.sabS11nOffset=u.fileBufferSize,u.sabS11nSize=d.$mxPathname*2,u.sabIO=new SharedArrayBuffer(u.fileBufferSize+u.sabS11nSize),u.opIds=Object.create(null);const I=Object.create(null);{let E=0;u.opIds.whichOp=E++,u.opIds.rc=E++,u.opIds.xAccess=E++,u.opIds.xClose=E++,u.opIds.xDelete=E++,u.opIds.xDeleteNoWait=E++,u.opIds.xFileSize=E++,u.opIds.xLock=E++,u.opIds.xOpen=E++,u.opIds.xRead=E++,u.opIds.xSleep=E++,u.opIds.xSync=E++,u.opIds.xTruncate=E++,u.opIds.xUnlock=E++,u.opIds.xWrite=E++,u.opIds.mkdir=E++,u.opIds["opfs-async-metrics"]=E++,u.opIds["opfs-async-shutdown"]=E++,u.opIds.retry=E++,u.sabOP=new SharedArrayBuffer(E*4),L.metrics.reset()}u.sq3Codes=Object.create(null),["SQLITE_ACCESS_EXISTS","SQLITE_ACCESS_READWRITE","SQLITE_BUSY","SQLITE_CANTOPEN","SQLITE_ERROR","SQLITE_IOERR","SQLITE_IOERR_ACCESS","SQLITE_IOERR_CLOSE","SQLITE_IOERR_DELETE","SQLITE_IOERR_FSYNC","SQLITE_IOERR_LOCK","SQLITE_IOERR_READ","SQLITE_IOERR_SHORT_READ","SQLITE_IOERR_TRUNCATE","SQLITE_IOERR_UNLOCK","SQLITE_IOERR_WRITE","SQLITE_LOCK_EXCLUSIVE","SQLITE_LOCK_NONE","SQLITE_LOCK_PENDING","SQLITE_LOCK_RESERVED","SQLITE_LOCK_SHARED","SQLITE_LOCKED","SQLITE_MISUSE","SQLITE_NOTFOUND","SQLITE_OPEN_CREATE","SQLITE_OPEN_DELETEONCLOSE","SQLITE_OPEN_MAIN_DB","SQLITE_OPEN_READONLY"].forEach(E=>{(u.sq3Codes[E]=q[E])===void 0&&D("Maintenance required: not found:",E)}),u.opfsFlags=Object.assign(Object.create(null),{OPFS_UNLOCK_ASAP:1,OPFS_UNLINK_BEFORE_OPEN:2,defaultUnlockAsap:!1});const U=(E,...C)=>{const M=u.opIds[E]||D("Invalid op ID:",E);u.s11n.serialize(...C),Atomics.store(u.sabOPView,u.opIds.rc,-1),Atomics.store(u.sabOPView,u.opIds.whichOp,M),Atomics.notify(u.sabOPView,u.opIds.whichOp);const J=performance.now();for(;Atomics.wait(u.sabOPView,u.opIds.rc,-1)!=="not-equal";);const G=Atomics.load(u.sabOPView,u.opIds.rc);if(I[E].wait+=performance.now()-J,G&&u.asyncS11nExceptions){const te=u.s11n.deserialize();te&&A(E+"() async error:",...te)}return G};L.debug={asyncShutdown:()=>{T("Shutting down OPFS async listener. The OPFS VFS will no longer work."),U("opfs-async-shutdown")},asyncRestart:()=>{T("Attempting to restart OPFS VFS async listener. Might work, might not."),h.postMessage({type:"opfs-async-restart"})}};const ee=()=>{if(u.s11n)return u.s11n;const E=new TextDecoder,C=new TextEncoder("utf-8"),M=new Uint8Array(u.sabIO,u.sabS11nOffset,u.sabS11nSize),J=new DataView(u.sabIO,u.sabS11nOffset,u.sabS11nSize);u.s11n=Object.create(null);const G=Object.create(null);G.number={id:1,size:8,getter:"getFloat64",setter:"setFloat64"},G.bigint={id:2,size:8,getter:"getBigInt64",setter:"setBigInt64"},G.boolean={id:3,size:4,getter:"getInt32",setter:"setInt32"},G.string={id:4};const te=Y=>G[typeof Y]||D("Maintenance required: this value type cannot be serialized.",Y),le=Y=>{switch(Y){case G.number.id:return G.number;case G.bigint.id:return G.bigint;case G.boolean.id:return G.boolean;case G.string.id:return G.string;default:D("Invalid type ID:",Y)}};return u.s11n.deserialize=function(Y=!1){++I.s11n.deserialize.count;const be=performance.now(),F=M[0],V=F?[]:null;if(F){const K=[];let X=1,_e,he,de;for(_e=0;_e{ie.start=performance.now(),ie.op=E,++I[E].count},b=()=>I[ie.op].time+=performance.now()-ie.start,k={xCheckReservedLock:function(E,C){return x.poke(C,0,"i32"),0},xClose:function(E){j("xClose");let C=0;const M=se[E];return M&&(delete se[E],C=U("xClose",E),M.sq3File&&M.sq3File.dispose()),b(),C},xDeviceCharacteristics:function(E){return q.SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN},xFileControl:function(E,C,M){return q.SQLITE_NOTFOUND},xFileSize:function(E,C){j("xFileSize");let M=U("xFileSize",E);if(M==0)try{const J=u.s11n.deserialize()[0];x.poke(C,J,"i64")}catch(J){A("Unexpected error reading xFileSize() result:",J),M=u.sq3Codes.SQLITE_IOERR}return b(),M},xLock:function(E,C){j("xLock");const M=se[E];let J=0;return M.lockType?M.lockType=C:(J=U("xLock",E,C),J===0&&(M.lockType=C)),b(),J},xRead:function(E,C,M,J){j("xRead");const G=se[E];let te;try{te=U("xRead",E,M,Number(J)),(te===0||q.SQLITE_IOERR_SHORT_READ===te)&&x.heap8u().set(G.sabView.subarray(0,M),C)}catch(le){A("xRead(",arguments,") failed:",le,G),te=q.SQLITE_IOERR_READ}return b(),te},xSync:function(E,C){j("xSync"),++I.xSync.count;const M=U("xSync",E,C);return b(),M},xTruncate:function(E,C){j("xTruncate");const M=U("xTruncate",E,Number(C));return b(),M},xUnlock:function(E,C){j("xUnlock");const M=se[E];let J=0;return q.SQLITE_LOCK_NONE===C&&M.lockType&&(J=U("xUnlock",E,C)),J===0&&(M.lockType=C),b(),J},xWrite:function(E,C,M,J){j("xWrite");const G=se[E];let te;try{G.sabView.set(x.heap8u().subarray(C,C+M)),te=U("xWrite",E,M,Number(J))}catch(le){A("xWrite(",arguments,") failed:",le,G),te=q.SQLITE_IOERR_WRITE}return b(),te}},W={xAccess:function(E,C,M,J){j("xAccess");const G=U("xAccess",x.cstrToJs(C));return x.poke(J,G?0:1,"i32"),b(),0},xCurrentTime:function(E,C){return x.poke(C,24405875e-1+new Date().getTime()/864e5,"double"),0},xCurrentTimeInt64:function(E,C){return x.poke(C,24405875e-1*864e5+new Date().getTime(),"i64"),0},xDelete:function(E,C,M){j("xDelete");const J=U("xDelete",x.cstrToJs(C),M,!1);return b(),J},xFullPathname:function(E,C,M,J){return x.cstrncpy(J,C,M)!!J):M},L.getDirForFilename=async function(C,M=!1){const J=L.getResolvedPath(C,!0),G=J.pop();let te=L.rootDirectory;for(const le of J)le&&(te=await te.getDirectoryHandle(le,{create:!!M}));return[te,G]},L.mkdir=async function(E){try{return await L.getDirForFilename(E+"/filepart",!0),!0}catch{return!1}},L.entryExists=async function(E){try{const[C,M]=await L.getDirForFilename(E);return await C.getFileHandle(M),!0}catch{return!1}},L.randomFilename=ne,L.treeList=async function(){const E=async function M(J,G){G.name=J.name,G.dirs=[],G.files=[];for await(const te of J.values())if(te.kind==="directory"){const le=Object.create(null);G.dirs.push(le),await M(te,le)}else G.files.push(te.name)},C=Object.create(null);return await E(L.rootDirectory,C),C},L.rmfr=async function(){const E=L.rootDirectory,C={recurse:!0};for await(const M of E.values())E.removeEntry(M.name,C)},L.unlink=async function(E,C=!1,M=!1){try{const[J,G]=await L.getDirForFilename(E,!1);return await J.removeEntry(G,{recursive:C}),!0}catch(J){if(M)throw new Error("unlink(",arguments[0],") failed: "+J.message,{cause:J});return!1}},L.traverse=async function(E){const C={recursive:!0,directory:L.rootDirectory};typeof E=="function"&&(E={callback:E}),E=Object.assign(C,E||{}),async function J(G,te){for await(const le of G.values()){if(E.callback(le,G,te)===!1)return!1;if(E.recursive&&le.kind==="directory"&&await J(le,te+1)===!1)break}}(E.directory,0)};const H=async function(E,C){const[M,J]=await L.getDirForFilename(E,!0);let te=await(await M.getFileHandle(J,{create:!0})).createSyncAccessHandle(),le=0,Y,be=!1;try{for(te.truncate(0);(Y=await C())!==void 0;)Y instanceof ArrayBuffer&&(Y=new Uint8Array(Y)),le===0&&Y.byteLength>=15&&(w.affirmDbHeader(Y),be=!0),te.write(Y,{at:le}),le+=Y.byteLength;if((le<512||le%512!==0)&&D("Input size",le,"is not correct for an SQLite database."),!be){const F=new Uint8Array(20);te.read(F,{at:0}),w.affirmDbHeader(F)}return te.write(new Uint8Array([1,1]),{at:18}),le}catch(F){throw await te.close(),te=void 0,await M.removeEntry(J).catch(()=>{}),F}finally{te&&await te.close()}};if(L.importDb=async function(E,C){if(C instanceof Function)return H(E,C);C instanceof ArrayBuffer&&(C=new Uint8Array(C)),w.affirmIsDb(C);const M=C.byteLength,[J,G]=await L.getDirForFilename(E,!0);let te,le=0;try{return te=await(await J.getFileHandle(G,{create:!0})).createSyncAccessHandle(),te.truncate(0),le=te.write(C,{at:0}),le!=M&&D("Expected to write "+M+" bytes but wrote "+le+"."),te.write(new Uint8Array([1,1]),{at:18}),le}catch(Y){throw te&&(await te.close(),te=void 0),await J.removeEntry(G).catch(()=>{}),Y}finally{te&&await te.close()}},t.oo1){const E=function(...C){const M=t.oo1.DB.dbCtorHelper.normalizeArgs(...C);M.vfs=d.$zName,t.oo1.DB.dbCtorHelper.call(this,M)};E.prototype=Object.create(t.oo1.DB.prototype),t.oo1.OpfsDb=E,E.importDb=L.importDb,t.oo1.DB.dbCtorHelper.setVfsPostOpenCallback(d.pointer,function(C,M){M.capi.sqlite3_busy_timeout(C,1e4)})}const Z=function(){const E=x.scopedAllocPush(),C=new O;try{const M=C.pointer,J=q.SQLITE_OPEN_CREATE|q.SQLITE_OPEN_READWRITE|q.SQLITE_OPEN_MAIN_DB,G=x.scopedAlloc(8),te="/sanity/check/file"+ne(8),le=x.scopedAllocCString(te);let Y;if(u.s11n.serialize("This is ä string."),Y=u.s11n.deserialize(),Q("deserialize() says:",Y),Y[0]!=="This is ä string."&&D("String d13n error."),W.xAccess(d.pointer,le,0,G),Y=x.peek(G,"i32"),Q("xAccess(",te,") exists ?=",Y),Y=W.xOpen(d.pointer,le,M,J,G),Q("open rc =",Y,"state.sabOPView[xOpen] =",u.sabOPView[u.opIds.xOpen]),Y!==0){A("open failed with code",Y);return}W.xAccess(d.pointer,le,0,G),Y=x.peek(G,"i32"),Y||D("xAccess() failed to detect file."),Y=k.xSync(C.pointer,0),Y&&D("sync failed w/ rc",Y),Y=k.xTruncate(C.pointer,1024),Y&&D("truncate failed w/ rc",Y),x.poke(G,0,"i64"),Y=k.xFileSize(C.pointer,G),Y&&D("xFileSize failed w/ rc",Y),Q("xFileSize says:",x.peek(G,"i64")),Y=k.xWrite(C.pointer,le,10,1),Y&&D("xWrite() failed!");const be=x.scopedAlloc(16);Y=k.xRead(C.pointer,be,6,2),x.poke(be+6,0);let F=x.cstrToJs(be);Q("xRead() got:",F),F!=="sanity"&&D("Unexpected xRead() value."),W.xSleep&&(Q("xSleep()ing before close()ing..."),W.xSleep(d.pointer,2e3),Q("waking up from xSleep()")),Y=k.xClose(M),Q("xClose rc =",Y,"sabOPView =",u.sabOPView),Q("Deleting file:",te),W.xDelete(d.pointer,le,4660),W.xAccess(d.pointer,le,0,G),Y=x.peek(G,"i32"),Y&&D("Expecting 0 from xAccess(",te,") after xDelete()."),T("End of OPFS sanity checks.")}finally{C.dispose(),x.scopedAllocPop(E)}};h.onmessage=function({data:E}){switch(E.type){case"opfs-unavailable":B(new Error(E.payload.join(" ")));break;case"opfs-async-loaded":h.postMessage({type:"opfs-async-init",args:u});break;case"opfs-async-inited":{if(y===!0)break;try{t.vfs.installVfs({io:{struct:c,methods:k},vfs:{struct:d,methods:W}}),u.sabOPView=new Int32Array(u.sabOP),u.sabFileBufView=new Uint8Array(u.sabIO,0,u.fileBufferSize),u.sabS11nView=new Uint8Array(u.sabIO,u.sabS11nOffset,u.sabS11nSize),ee(),s.sanityChecks&&(T("Running sanity checks because of opfs-sanity-check URL arg..."),Z()),$()?navigator.storage.getDirectory().then(C=>{h.onerror=h._originalOnError,delete h._originalOnError,t.opfs=L,L.rootDirectory=C,Q("End of OPFS sqlite3_vfs setup.",d),f()}).catch(B):f()}catch(C){A(C),B(C)}break}default:{const C="Unexpected message from the OPFS async worker: "+JSON.stringify(E);A(C),B(new Error(C));break}}}}))};n.defaultProxyUri="sqlite3-opfs-async-proxy.js",globalThis.sqlite3ApiBootstrap.initializersAsync.push(async r=>{try{let s=n.defaultProxyUri;return r.scriptInfo.sqlite3Dir&&(n.defaultProxyUri=r.scriptInfo.sqlite3Dir+s),n().catch(o=>{r.config.warn("Ignoring inability to install OPFS sqlite3_vfs:",o.message)})}catch(s){return r.config.error("installOpfsVfs() exception:",s),Promise.reject(s)}})}),globalThis.sqlite3ApiBootstrap.initializers.push(function(t){const n=t.util.toss,r=t.util.toss3,s=Object.create(null),o=t.capi,p=t.util,g=t.wasm,P=4096,R=512,z=4,Q=8,T=R+z,A=R,D=T,q=P,w=o.SQLITE_OPEN_MAIN_DB|o.SQLITE_OPEN_MAIN_JOURNAL|o.SQLITE_OPEN_SUPER_JOURNAL|o.SQLITE_OPEN_WAL,x=o.SQLITE_OPEN_MEMORY,N=".opaque",O=()=>Math.random().toString(36).slice(2),S=new TextDecoder,L=new TextEncoder,$=Object.assign(Object.create(null),{name:"opfs-sahpool",directory:void 0,initialCapacity:6,clearOnInit:!1,verbosity:2,forceReinitIfPreviouslyFailed:!1}),c=[t.config.error,t.config.warn,t.config.log];t.config.log;const d=t.config.warn;t.config.error;const y=new Map,B=j=>y.get(j),f=(j,b)=>{b?y.set(j,b):y.delete(j)},h=new Map,l=j=>h.get(j),_=(j,b)=>{b?h.set(j,b):h.delete(j)},u={xCheckReservedLock:function(j,b){const k=l(j);return k.log("xCheckReservedLock"),k.storeErr(),g.poke32(b,1),0},xClose:function(j){const b=l(j);b.storeErr();const k=b.getOFileForS3File(j);if(k)try{b.log(`xClose ${k.path}`),b.mapS3FileToOFile(j,!1),k.sah.flush(),k.flags&o.SQLITE_OPEN_DELETEONCLOSE&&b.deletePath(k.path)}catch(W){return b.storeErr(W,o.SQLITE_IOERR)}return 0},xDeviceCharacteristics:function(j){return o.SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN},xFileControl:function(j,b,k){return o.SQLITE_NOTFOUND},xFileSize:function(j,b){const k=l(j);k.log("xFileSize");const H=k.getOFileForS3File(j).sah.getSize()-q;return g.poke64(b,BigInt(H)),0},xLock:function(j,b){const k=l(j);k.log(`xLock ${b}`),k.storeErr();const W=k.getOFileForS3File(j);return W.lockType=b,0},xRead:function(j,b,k,W){const H=l(j);H.storeErr();const Z=H.getOFileForS3File(j);H.log(`xRead ${Z.path} ${k} @ ${W}`);try{const E=Z.sah.read(g.heap8u().subarray(b,b+k),{at:q+Number(W)});return Eb&&g.poke8(k+b-1,0)}catch{return o.SQLITE_NOMEM}finally{g.scopedAllocPop(Z)}}return H?H.sqlite3Rc||o.SQLITE_IOERR:0},xOpen:function(b,k,W,H,Z){const E=B(b);try{H&=~x,E.log(`xOpen ${g.cstrToJs(k)} ${H}`);const C=k&&g.peek8(k)?E.getPath(k):O();let M=E.getSAHForPath(C);!M&&H&o.SQLITE_OPEN_CREATE&&(E.getFileCount()f(b.pointer,0)),W&&(b.$xRandomness=W.$xRandomness,b.$xSleep=W.$xSleep,W.dispose()),!b.$xRandomness&&!U.xRandomness&&(U.xRandomness=function(H,Z,E){const C=g.heap8u();let M=0;for(;M0),t.vfs.installVfs({vfs:{struct:b,methods:U}}),b};class ne{vfsDir;#e;#o;#a;#r=new Map;#t=new Map;#s=new Set;#l=new Map;#n=new Uint8Array(T);#c;#i;#u;constructor(b=Object.create(null)){this.#u=b.verbosity??$.verbosity,this.vfsName=b.name||$.name,this.#i=ee(this.vfsName),f(this.#i.pointer,this),this.vfsDir=b.directory||"."+this.vfsName,this.#c=new DataView(this.#n.buffer,this.#n.byteOffset),this.isReady=this.reset(!!(b.clearOnInit??$.clearOnInit)).then(()=>{if(this.$error)throw this.$error;return this.getCapacity()?Promise.resolve(void 0):this.addCapacity(b.initialCapacity||$.initialCapacity)})}#_(b,...k){this.#u>b&&c[b](this.vfsName+":",...k)}log(...b){this.#_(2,...b)}warn(...b){this.#_(1,...b)}error(...b){this.#_(0,...b)}getVfs(){return this.#i}getCapacity(){return this.#r.size}getFileCount(){return this.#t.size}getFileNames(){const b=[];for(const k of this.#t.keys())b.push(k);return b}async addCapacity(b){for(let k=0;k{try{const Z=await H.createSyncAccessHandle();if(this.#r.set(Z,W),b)Z.truncate(q),this.setAssociatedPath(Z,"",0);else{const E=this.getAssociatedPath(Z);E?this.#t.set(E,Z):this.#s.add(Z)}}catch(Z){throw this.storeErr(Z),this.releaseAccessHandles(),Z}}))}getAssociatedPath(b){b.read(this.#n,{at:0});const k=this.#c.getUint32(A);if(this.#n[0]&&(k&o.SQLITE_OPEN_DELETEONCLOSE||(k&w)===0))return d(`Removing file with unexpected flags ${k.toString(16)}`,this.#n),this.setAssociatedPath(b,"",0),"";const W=new Uint32Array(Q/4);b.read(W,{at:D});const H=this.computeDigest(this.#n,k);if(W.every((Z,E)=>Z===H[E])){const Z=this.#n.findIndex(E=>E===0);return Z===0&&b.truncate(q),Z?S.decode(this.#n.subarray(0,Z)):""}else return d("Disassociating file with bad digest."),this.setAssociatedPath(b,"",0),""}setAssociatedPath(b,k,W){const H=L.encodeInto(k,this.#n);R<=H.written+1&&n("Path too long:",k),k&&W&&(W|=x),this.#n.fill(0,H.written,R),this.#c.setUint32(A,W);const Z=this.computeDigest(this.#n,W);b.write(this.#n,{at:0}),b.write(Z,{at:D}),b.flush(),k?(this.#t.set(k,b),this.#s.delete(b)):(b.truncate(q),this.#s.add(b))}computeDigest(b,k){if(k&x){let W=3735928559,H=1103547991;for(const Z of b)W=Math.imul(W^Z,2654435761),H=Math.imul(H^Z,104729);return new Uint32Array([W>>>0,H>>>0])}else return new Uint32Array([0,0])}async reset(b){await this.isReady;let k=await navigator.storage.getDirectory(),W;for(const H of this.vfsDir.split("/"))H&&(W=k,k=await k.getDirectoryHandle(H,{create:!0}));return this.#e=k,this.#a=W,this.#o=await this.#e.getDirectoryHandle(N,{create:!0}),this.releaseAccessHandles(),this.acquireAccessHandles(b)}getPath(b){return g.isPtr(b)&&(b=g.cstrToJs(b)),(b instanceof URL?b:new URL(b,"file://localhost/")).pathname}deletePath(b){const k=this.#t.get(b);return k&&(this.#t.delete(b),this.setAssociatedPath(k,"",0)),!!k}storeErr(b,k){return b&&(b.sqlite3Rc=k||o.SQLITE_IOERR,this.error(b)),this.$error=b,k}popErr(){const b=this.$error;return this.$error=void 0,b}nextAvailableSAH(){const[b]=this.#s.keys();return b}getOFileForS3File(b){return this.#l.get(b)}mapS3FileToOFile(b,k){k?(this.#l.set(b,k),_(b,this)):(this.#l.delete(b),_(b,!1))}hasFilename(b){return this.#t.has(b)}getSAHForPath(b){return this.#t.get(b)}async removeVfs(){if(!this.#i.pointer||!this.#o)return!1;o.sqlite3_vfs_unregister(this.#i.pointer),this.#i.dispose(),delete s[this.vfsName];try{this.releaseAccessHandles(),await this.#e.removeEntry(N,{recursive:!0}),this.#o=void 0,await this.#a.removeEntry(this.#e.name,{recursive:!0}),this.#e=this.#a=void 0}catch(b){t.config.error(this.vfsName,"removeVfs() failed with no recovery strategy:",b)}return!0}pauseVfs(){return this.#l.size>0&&t.SQLite3Error.toss(o.SQLITE_MISUSE,"Cannot pause VFS",this.vfsName,"because it has opened files."),this.#r.size>0&&(o.sqlite3_vfs_unregister(this.vfsName),this.releaseAccessHandles()),this}isPaused(){return this.#r.size===0}async unpauseVfs(){return this.#r.size===0?this.acquireAccessHandles(!1).then(()=>o.sqlite3_vfs_register(this.#i,0),this):this}exportFile(b){const k=this.#t.get(b)||n("File not found:",b),W=k.getSize()-q,H=new Uint8Array(W>0?W:0);if(W>0){const Z=k.read(H,{at:q});Z!=W&&n("Expected to read "+W+" bytes but read "+Z+".")}return H}async importDbChunked(b,k){const W=this.#t.get(b)||this.nextAvailableSAH()||n("No available handles to import to.");W.truncate(0);let H=0,Z,E=!1;try{for(;(Z=await k())!==void 0;)Z instanceof ArrayBuffer&&(Z=new Uint8Array(Z)),H===0&&Z.byteLength>=15&&(p.affirmDbHeader(Z),E=!0),W.write(Z,{at:q+H}),H+=Z.byteLength;if((H<512||H%512!==0)&&n("Input size",H,"is not correct for an SQLite database."),!E){const C=new Uint8Array(20);W.read(C,{at:0}),p.affirmDbHeader(C)}W.write(new Uint8Array([1,1]),{at:q+18})}catch(C){throw this.setAssociatedPath(W,"",0),C}return this.setAssociatedPath(W,b,o.SQLITE_OPEN_MAIN_DB),H}importDb(b,k){if(k instanceof ArrayBuffer)k=new Uint8Array(k);else if(k instanceof Function)return this.importDbChunked(b,k);const W=this.#t.get(b)||this.nextAvailableSAH()||n("No available handles to import to."),H=k.byteLength;(H<512||H%512!=0)&&n("Byte array size is invalid for an SQLite db.");const Z="SQLite format 3";for(let C=0;Cthis)}isPaused(){return this.#e.isPaused()}}const ie=async()=>{const j=await navigator.storage.getDirectory(),b=".opfs-sahpool-sync-check-"+O(),H=(await(await j.getFileHandle(b,{create:!0})).createSyncAccessHandle()).close();return await H,await j.removeEntry(b),H?.then&&n("The local OPFS API is too old for opfs-sahpool:","it has an async FileSystemSyncAccessHandle.close() method."),!0};t.installOpfsSAHPoolVfs=async function(j=Object.create(null)){j=Object.assign(Object.create(null),$,j||{});const b=j.name;if(j.$testThrowPhase1)throw j.$testThrowPhase1;if(s[b])try{return await s[b]}catch(k){if(j.forceReinitIfPreviouslyFailed)delete s[b];else throw k}return!globalThis.FileSystemHandle||!globalThis.FileSystemDirectoryHandle||!globalThis.FileSystemFileHandle||!globalThis.FileSystemFileHandle.prototype.createSyncAccessHandle||!navigator?.storage?.getDirectory?s[b]=Promise.reject(new Error("Missing required OPFS APIs.")):s[b]=ie().then(async function(){if(j.$testThrowPhase2)throw j.$testThrowPhase2;const k=new ne(j);return k.isReady.then(async()=>{const W=new se(k);if(t.oo1){const H=t.oo1,Z=k.getVfs(),E=function(...C){const M=H.DB.dbCtorHelper.normalizeArgs(...C);M.vfs=Z.$zName,H.DB.dbCtorHelper.call(this,M)};E.prototype=Object.create(H.DB.prototype),W.OpfsSAHPoolDb=E}return k.log("VFS initialized."),W}).catch(async W=>{throw await k.removeVfs().catch(()=>{}),W})}).catch(k=>s[b]=Promise.reject(k))}}),typeof i<"u"){const t=Object.assign(Object.create(null),{exports:typeof m>"u"?i.asm:m,memory:i.wasmMemory},globalThis.sqlite3ApiConfig||{});globalThis.sqlite3ApiConfig=t;let n;try{n=globalThis.sqlite3ApiBootstrap()}catch(r){throw console.error("sqlite3ApiBootstrap() error:",r),r}finally{delete globalThis.sqlite3ApiBootstrap,delete globalThis.sqlite3ApiConfig}i.sqlite3=n}else console.warn("This is not running in an Emscripten module context, so","globalThis.sqlite3ApiBootstrap() is _not_ being called due to lack","of config info for the WASM environment.","It must be called manually.")},ge=Ne,ge}})();const Xn=(function(){const qe=Ft;if(!qe)throw new Error("Expecting globalThis.sqlite3InitModule to be defined by the Emscripten build.");const ce=globalThis.sqlite3InitModuleState=Object.assign(Object.create(null),{moduleScript:globalThis?.document?.currentScript,isWorker:typeof WorkerGlobalScope<"u",location:globalThis.location,urlParams:globalThis?.location?.href?new URL(globalThis.location.href).searchParams:new URLSearchParams});if(ce.debugModule=ce.urlParams.has("sqlite3.debugModule")?(...ge)=>console.warn("sqlite3.debugModule:",...ge):()=>{},ce.urlParams.has("sqlite3.dir"))ce.sqlite3Dir=ce.urlParams.get("sqlite3.dir")+"/";else if(ce.moduleScript){const ge=ce.moduleScript.src.split("/");ge.pop(),ce.sqlite3Dir=ge.join("/")+"/"}if(globalThis.sqlite3InitModule=function ge(...i){return qe(...i).then(ye=>{ye.runSQLite3PostLoadInit(ye);const Ee=ye.sqlite3;Ee.scriptInfo=ce,ge.__isUnderTest&&(Ee.__isUnderTest=!0);const Ne=Ee.asyncPostInit;return delete Ee.asyncPostInit,Ne()}).catch(ye=>{throw console.error("Exception loading sqlite3 module:",ye),ye})},globalThis.sqlite3InitModule.ready=qe.ready,globalThis.sqlite3InitModuleState.moduleScript){const ge=globalThis.sqlite3InitModuleState;let i=ge.moduleScript.src.split("/");i.pop(),ge.scriptDir=i.join("/")+"/"}return ce.debugModule("sqlite3InitModuleState =",ce),globalThis.sqlite3InitModule})();Ft=Xn;globalThis.sqlite3Worker1Promiser=function qe(ce=qe.defaultConfig){if(arguments.length===1&&typeof arguments[0]=="function"){const re=ce;ce=Object.assign(Object.create(null),qe.defaultConfig),ce.onready=re}else ce=Object.assign(Object.create(null),qe.defaultConfig,ce);const ge=Object.create(null),i=function(){},ye=ce.onerror||i,Ee=ce.debug||i,Ne=ce.generateMessageId?void 0:Object.create(null),Je=ce.generateMessageId||function(re){return re.type+"#"+(Ne[re.type]=(Ne[re.type]||0)+1)},Oe=(...re)=>{throw new Error(re.join(" "))};ce.worker||(ce.worker=qe.defaultConfig.worker),typeof ce.worker=="function"&&(ce.worker=ce.worker());let Fe,Qe;return ce.worker.onmessage=function(re){re=re.data,Ee("worker1.onmessage",re);let me=ge[re.messageId];if(!me){if(re&&re.type==="sqlite3-api"&&re.result==="worker1-ready"){ce.onready&&ce.onready(Qe);return}if(me=ge[re.type],me&&me.onrow){me.onrow(re);return}ce.onunhandled?ce.onunhandled(arguments[0]):ye("sqlite3Worker1Promiser() unhandled worker message:",re);return}switch(delete ge[re.messageId],re.type){case"error":me.reject(re);return;case"open":Fe||(Fe=re.dbId);break;case"close":re.dbId===Fe&&(Fe=void 0);break}try{me.resolve(re)}catch(Ae){me.reject(Ae)}},Qe=function(){let re;arguments.length===1?re=arguments[0]:arguments.length===2?(re=Object.create(null),re.type=arguments[0],re.args=arguments[1],re.dbId=re.args.dbId):Oe("Invalid arguments for sqlite3Worker1Promiser()-created factory."),!re.dbId&&re.type!=="open"&&(re.dbId=Fe),re.messageId=Je(re),re.departureTime=performance.now();const me=Object.create(null);me.message=re;let Ae;re.type==="exec"&&re.args&&(typeof re.args.callback=="function"?(Ae=re.messageId+":row",me.onrow=re.args.callback,re.args.callback=Ae,ge[Ae]=me):typeof re.args.callback=="string"&&Oe("exec callback may not be a string when using the Promise interface."));let Le=new Promise(function(Me,He){me.resolve=Me,me.reject=He,ge[re.messageId]=me,Ee("Posting",re.type,"message to Worker dbId="+(Fe||"default")+":",re),ce.worker.postMessage(re)});return Ae&&(Le=Le.finally(()=>delete ge[Ae])),Le}};globalThis.sqlite3Worker1Promiser.defaultConfig={worker:function(){return new Worker(new URL(""+new URL("sqlite3-worker1-bundler-friendly-Bv6ABw9v.js",import.meta.url).href,import.meta.url),{type:"module"})},onerror:(...qe)=>console.error("worker1 promiser error",...qe)};sqlite3Worker1Promiser.v2=(function(qe){let ce;typeof qe=="function"?(ce=qe,qe={}):typeof qe?.onready=="function"&&(ce=qe.onready,delete qe.onready);const ge=Object.create(null);qe=Object.assign(qe||Object.create(null),{onready:async function(ye){try{ce&&await ce(ye),ge.resolve(ye)}catch(Ee){ge.reject(Ee)}}});const i=new Promise(function(ye,Ee){ge.resolve=ye,ge.reject=Ee});try{this.original(qe)}catch(ye){ge.reject(ye)}return i}).bind({original:sqlite3Worker1Promiser});sqlite3Worker1Promiser.v2;const er=globalThis.sqlite3Worker1Promiser;export{Ft as default,er as sqlite3Worker1Promiser}; diff --git a/_nuxt/BJKytY5Q.js b/_nuxt/BJKytY5Q.js new file mode 100644 index 0000000..0e0a413 --- /dev/null +++ b/_nuxt/BJKytY5Q.js @@ -0,0 +1 @@ +import{_ as o,c as s,o as r,B as c}from"./DoyGpJzh.js";const n={};function t(e,a){return r(),s("code",null,[c(e.$slots,"default")])}const l=Object.assign(o(n,[["render",t]]),{__name:"ProseCode"});export{l as default}; diff --git a/_nuxt/BLzVsSvO.js b/_nuxt/BLzVsSvO.js new file mode 100644 index 0000000..f12971e --- /dev/null +++ b/_nuxt/BLzVsSvO.js @@ -0,0 +1 @@ +import{u as c,j as d,c as t,o as n,B as r,i as u}from"./DoyGpJzh.js";const p=["id"],f=["href"],k={__name:"ProseH2",props:{id:{type:String,required:!1}},setup(a){const e=a,{headings:o}=c().public.mdc,i=d(()=>e.id&&(typeof o?.anchorLinks=="boolean"&&o?.anchorLinks===!0||typeof o?.anchorLinks=="object"&&o?.anchorLinks?.h2));return(s,h)=>(n(),t("h2",{id:e.id},[e.id&&u(i)?(n(),t("a",{key:0,href:`#${e.id}`},[r(s.$slots,"default")],8,f)):r(s.$slots,"default",{key:1})],8,p))}};export{k as default}; diff --git a/_nuxt/BO5Pdb4H.js b/_nuxt/BO5Pdb4H.js new file mode 100644 index 0000000..65a733a --- /dev/null +++ b/_nuxt/BO5Pdb4H.js @@ -0,0 +1 @@ +import{_ as y}from"./BVb_6jXh.js";import{u as v,q as k}from"./DqAykS8P.js";import{f as w,u as b,c as _,g as j,i as h,a as T,o as p}from"./DoyGpJzh.js";import{a as f,u as C}from"./DDtx_1iE.js";const R={class:"prose"},x={key:1},E={__name:"projects",async setup(A){let c,u;const{data:t}=([c,u]=w(async()=>v("projects",async()=>{try{return await k("pages").path("/projects").first()}catch(s){return console.error("Error loading projects page:",s),null}})),c=await c,u(),c),m=t.value?.head||t.value?.meta?.head;if(m){const s=m,a=b(),l=a.public.baseURL||a.app?.baseURL||"https://mjkatgithub.github.io",g=s.meta||[],e={},r={},d=[];g.forEach(o=>{const n=o.property||o.name;if(n?.startsWith("og:")){const i=n.replace("og:","");e[i]=o.content}else if(n?.startsWith("twitter:")){const i=n.replace("twitter:","");r[i]=o.content}else if(n){const i=o.property?{property:o.property,content:o.content}:{name:o.name,content:o.content};d.push(i)}}),f({title:t.value.title||e.title||"",description:t.value.description||e.description||"",ogTitle:e.title||t.value.title||"",ogDescription:e.description||t.value.description||"",ogImage:e.image||"",ogUrl:e.url||`${l}/projects`,twitterTitle:r.title||e.title||t.value.title||"",twitterDescription:r.description||e.description||t.value.description||"",twitterImage:r.image||"",twitterCard:r.card||"summary"}),C({htmlAttrs:s.htmlAttrs||{},link:s.link||[],meta:d})}else t.value&&f({title:t.value.title||"",description:t.value.description||""});return(s,a)=>{const l=y;return p(),_("article",R,[h(t)?(p(),j(l,{key:0,value:h(t)},null,8,["value"])):(p(),_("div",x,[...a[0]||(a[0]=[T("p",null,"Loading...",-1)])]))])}}};export{E as default}; diff --git a/_nuxt/BVb_6jXh.js b/_nuxt/BVb_6jXh.js new file mode 100644 index 0000000..a8df26a --- /dev/null +++ b/_nuxt/BVb_6jXh.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./DmacKOF0.js","./DqAykS8P.js","./DoyGpJzh.js","./entry.C_X0rZFC.css","./link-list.xLCAbRz-.css","./BijgKetk.js"])))=>i.map(i=>d[i]); +import{m as xn,n as Y,j as O,p as Q,q as wn,s as On,v as _n,x as nn,y as F,T as j,C as Dn,z as Tn,A as $,u as Ln,g as Mn,B as Rn,o as An,i as Z,D as En}from"./DoyGpJzh.js";const jn=/\d/,Un=["-","_","/","."];function Bn(n=""){if(!jn.test(n))return n!==n.toLowerCase()}function en(n,l){const e=Un,o=[];if(!n||typeof n!="string")return o;let r="",a,c;for(const d of n){const f=e.includes(d);if(f===!0){o.push(r),r="",a=void 0;continue}const i=Bn(d);if(c===!1){if(a===!1&&i===!0){o.push(r),r=d,a=i;continue}if(a===!0&&i===!1&&r.length>1){const p=r.at(-1);o.push(r.slice(0,Math.max(0,r.length-1))),r=p+d,a=i;continue}}r+=d,a=i,c=f}return o.push(r),o}function In(n){return n?n[0].toUpperCase()+n.slice(1):""}function T(n,l){return n?(Array.isArray(n)?n:en(n)).map(e=>In(e)).join(""):""}function ln(n,l){return n?(Array.isArray(n)?n:en(n)).map(e=>e.toLowerCase()).join("-"):""}const A=["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","label","legend","li","link","main","map","mark","math","menu","menuitem","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rb","rp","rt","rtc","ruby","s","samp","script","section","select","slot","small","source","span","strong","style","sub","summary","sup","svg","table","tbody","td","template","textarea","tfoot","th","thead","time","title","tr","track","u","ul","var","video","wbr"];class E{constructor(l,e,o){this.normal=e,this.property=l,o&&(this.space=o)}}E.prototype.normal={};E.prototype.property={};E.prototype.space=void 0;function tn(n,l){const e={},o={};for(const r of n)Object.assign(e,r.property),Object.assign(o,r.normal);return new E(e,o,l)}function H(n){return n.toLowerCase()}class C{constructor(l,e){this.attribute=e,this.property=l}}C.prototype.attribute="";C.prototype.booleanish=!1;C.prototype.boolean=!1;C.prototype.commaOrSpaceSeparated=!1;C.prototype.commaSeparated=!1;C.prototype.defined=!1;C.prototype.mustUseProperty=!1;C.prototype.number=!1;C.prototype.overloadedBoolean=!1;C.prototype.property="";C.prototype.spaceSeparated=!1;C.prototype.space=void 0;let zn=0;const u=_(),h=_(),V=_(),t=_(),g=_(),L=_(),S=_();function _(){return 2**++zn}const N=Object.freeze(Object.defineProperty({__proto__:null,boolean:u,booleanish:h,commaOrSpaceSeparated:S,commaSeparated:L,number:t,overloadedBoolean:V,spaceSeparated:g},Symbol.toStringTag,{value:"Module"})),z=Object.keys(N);class K extends C{constructor(l,e,o,r){let a=-1;if(super(l,e),G(this,"space",r),typeof o=="number")for(;++a4&&e.slice(0,4)==="data"&&Nn.test(l)){if(l.charAt(4)==="-"){const a=l.slice(5).replace(J,$n);o="data"+a.charAt(0).toUpperCase()+a.slice(1)}else{const a=l.slice(4);if(!J.test(a)){let c=a.replace(Vn,Wn);c.charAt(0)!=="-"&&(c="-"+c),l="data"+c}}r=K}return new r(o,l)}function Wn(n){return"-"+n.toLowerCase()}function $n(n){return n.charAt(1).toUpperCase()}const Kn=tn([on,Fn,un,sn,cn],"html");tn([on,Hn,un,sn,cn],"svg");const Xn=["p","h1","h2","h3","h4","h5","h6","li"];function U(n,l){return n.type===l||typeof n.type=="object"&&n.type.tag===l||n.tag===l}function X(n){return U(n,"text")||U(n,Symbol.for("v-txt"))}function pn(n){return Array.isArray(n.children)||typeof n.children=="string"?n.children:typeof n.children?.default=="function"?n.children.default():[]}function B(n){if(!n)return"";if(Array.isArray(n))return n.map(B).join("");if(X(n))return n.value||n.children||"";const l=pn(n);return Array.isArray(l)?l.map(B).filter(Boolean).join(""):""}function dn(n,l=[]){if(Array.isArray(n))return n.flatMap(o=>dn(o,l));let e=n;return l.some(o=>o==="*"||U(n,o))&&(e=pn(n)||n,!Array.isArray(e)&&Xn.some(o=>U(n,o))&&(e=[e])),e}function fn(n,l=[]){return n=Array.isArray(n)?n:[n],l.length?n.flatMap(e=>fn(dn(e,[l[0]]),l.slice(1))).filter(e=>!(X(e)&&B(e).trim()==="")):n}function gn(n,l=[]){return typeof l=="string"&&(l=l.split(/[,\s]/).map(e=>e.trim()).filter(Boolean)),l.length?fn(n,l).reduce((e,o)=>(X(o)?typeof e[e.length-1]=="string"?e[e.length-1]+=o.children:e.push(o.children):e.push(o),e),[]):n}function Yn(n,l){return l.reduce((e,o)=>{const r=Zn(n,o);return r!==void 0&&(e[o]=r),e},{})}function Zn(n,l){return l.split(".").reduce((e,o)=>e&&e[o],n)}const q="default",mn=/^@|^v-on:/,hn=/^:|^v-bind:/,Gn=/^v-model/,Jn=["select","textarea","input"],Qn=["math","svg"],ne=Object.fromEntries(["p","a","blockquote","code","pre","code","em","h1","h2","h3","h4","h5","h6","hr","img","ul","ol","li","strong","table","thead","tbody","td","th","tr","script"].map(n=>[n,`prose-${n}`])),ee=["script","base"],le=xn({name:"MDCRenderer",props:{body:{type:Object,required:!0},data:{type:Object,default:()=>({})},class:{type:[String,Object],default:void 0},tag:{type:[String,Boolean],default:void 0},prose:{type:Boolean,default:void 0},components:{type:Object,default:()=>({})},unwrap:{type:[Boolean,String],default:!1}},async setup(n){const e=_n()?.appContext?.app?.$nuxt,o=e?.$route||e?._route,{mdc:r}=e?.$config?.public||{},a=O(()=>({...r?.components?.prose&&n.prose!==!1?ne:{},...r?.components?.map||{},...Q(n.data?.mdc?.components||{}),...n.components})),c=O(()=>{const i=(n.body?.children||[]).map(p=>p.tag||p.type).filter(p=>!A.includes(p));return Array.from(new Set(i)).sort().join(".")}),d=wn({...n.data});On(()=>n.data,i=>{Object.assign(d,i)}),await fe(n.body,{tags:a.value});function f(i,p){const y=i.split(".").length-1;return i.split(".").reduce((b,k,D)=>D==y&&b?(b[k]=p,b[k]):typeof b=="object"?b[k]:void 0,d)}return{tags:a,contentKey:c,route:o,runtimeData:d,updateRuntimeData:f}},render(n){const{tags:l,tag:e,body:o,data:r,contentKey:a,route:c,unwrap:d,runtimeData:f,updateRuntimeData:i}=n;if(!o)return null;const p={...r,tags:l,$route:c,runtimeData:f,updateRuntimeData:i},y=e!==!1?W(e||p.component?.name||p.component||"div"):void 0;return y?Y(y,{...p.component?.props,class:n.class,...this.$attrs,key:a},{default:b}):b?.();function b(){const k=yn(o,Y,{documentMeta:p,parentScope:p,resolveComponent:W});return k?.default?d?gn(k.default(),typeof d=="string"?d.split(" "):["*"]):k.default():null}}});function te(n,l,e,o){const{documentMeta:r,parentScope:a,resolveComponent:c}=e;if(n.type==="text")return l(j,n.value);if(n.type==="comment")return l(Dn,null,n.value);const d=n.tag,f=bn(n,r.tags);if(n.tag==="binding")return oe(n,l,r,a);const i=vn(f)?b=>b:c;if(ee.includes(f))return l("pre",{class:"mdc-renderer-dangerous-tag"},"<"+f+">"+B(n)+"");const p=i(f);typeof p=="object"&&(p.tag=d);const y=re(n,r);return o&&(y.key=o),l(p,y,yn(n,l,{documentMeta:r,parentScope:{...a,...y},resolveComponent:i}))}function yn(n,l,e){const{documentMeta:o,parentScope:r,resolveComponent:a}=e,d=(n.children||[]).reduce((i,p)=>{if(!pe(p))return i[q].children.push(p),i;const y=ce(p);return i[y]=i[y]||{props:{},children:[]},p.type==="element"&&(i[y].props=p.props,i[y].children.push(...p.children||[])),i},{[q]:{props:{},children:[]}});return Object.entries(d).reduce((i,[p,{props:y,children:b}])=>(b.length&&(i[p]=(k={})=>{const D=Yn(k,Object.keys(y||{}));let R=b.map((s,m)=>te(s,l,{documentMeta:o,parentScope:{...r,...D},resolveComponent:a},String(s.props?.key||m)));return y?.unwrap&&(R=gn(R,y.unwrap)),de(R)}),i),{})}function oe(n,l,e,o={}){const r={...e.runtimeData,...o,$document:e,$doc:e},a=/\.|\[(\d+)\]/,d=(n.props?.value.trim().split(a).filter(Boolean)).reduce((i,p)=>{if(i&&p in i)return typeof i[p]=="function"?i[p]():i[p]},r),f=n.props?.defaultValue;return l(j,d??f??"")}function re(n,l){const{tag:e="",props:o={}}=n;return Object.keys(o).reduce(function(r,a){if(a==="__ignoreMap")return r;const c=o[a];if(Gn.test(a))return ae(a,c,r,l,{native:Jn.includes(e)});if(a==="v-bind")return ue(a,c,r,l);if(mn.test(a))return ie(a,c,r,l);if(hn.test(a))return se(a,c,r,l);const{attribute:d}=qn(Kn,a);return Array.isArray(c)&&c.every(f=>typeof f=="string")?(r[d]=c.join(" "),r):(r[d]=c,r)},{})}function ae(n,l,e,o,{native:r}){const a=n.match(/^v-model:([^=]+)/)?.[1]||"modelValue",c=r?"value":a,d=r?"onInput":`onUpdate:${a}`;return e[c]=I(l,o.runtimeData),e[d]=f=>{o.updateRuntimeData(l,r?f.target?.value:f)},e}function ue(n,l,e,o){const r=I(l,o);return e=Object.assign(e,r),e}function ie(n,l,e,o){return n=n.replace(mn,""),e.on=e.on||{},e.on[n]=()=>I(l,o),e}function se(n,l,e,o){return n=n.replace(hn,""),e[n]=I(l,o),e}const W=n=>{if(typeof n=="string"){if(A.includes(n))return n;const l=nn(T(n),!1);return!n||l?.name==="AsyncComponentWrapper"||typeof l=="string"?l:"setup"in l?F(()=>new Promise(e=>e(l))):l}return n};function I(n,l){const e=n.split(".").reduce((o,r)=>typeof o=="object"?o[r]:void 0,l);return typeof e>"u"?Tn(n):e}function ce(n){let l="";for(const e of Object.keys(n.props||{}))if(!(!e.startsWith("#")&&!e.startsWith("v-slot:"))){l=e.split(/[:#]/,2)[1];break}return l||q}function pe(n){return n.tag==="template"}function vn(n){return Qn.includes(n)}function de(n){const l=[];for(const e of n){const o=l[l.length-1];e.type===j&&o?.type===j?o.children=o.children+e.children:l.push(e)}return l}async function fe(n,l){if(!n)return;const e=Array.from(new Set(o(n,l)));await Promise.all(e.map(async r=>{if(r?.render||r?.ssrRender||r?.__ssrInlineRender)return;const a=W(r);a?.__asyncLoader&&!a.__asyncResolved&&await a.__asyncLoader()}));function o(r,a){const c=r.tag;if(r.type==="text"||c==="binding"||r.type==="comment")return[];const d=bn(r,a.tags);if(vn(d))return[];const f=[];r.type!=="root"&&!A.includes(d)&&f.push(d);for(const i of r.children||[])f.push(...o(i,a));return f}}function bn(n,l){const e=n.tag;return!e||typeof n.props?.__ignoreMap<"u"?e:l[e]||l[T(e)]||l[ln(n.tag)]||e}const ge=Object.assign(le,{__name:"MDCRenderer"});function me(n){return{type:"root",children:n.value.map(Cn)}}function Cn(n){if(typeof n=="string")return{type:"text",value:n};const[l,e,...o]=n;return{type:"element",tag:l,props:e,children:o.map(Cn)}}const he=()=>$(()=>import("./DmacKOF0.js"),__vite__mapDeps([0,1,2,3,4]),import.meta.url),ye=()=>$(()=>import("./BijgKetk.js"),__vite__mapDeps([5,2,3,1]),import.meta.url),Sn=["ProseA","ProseBlockquote","ProseCode","ProseEm","ProseH1","ProseH2","ProseH3","ProseH4","ProseH5","ProseH6","ProseHr","ProseImg","ProseLi","ProseOl","ProseP","ProsePre","ProseScript","ProseStrong","ProseTable","ProseTbody","ProseTd","ProseTh","ProseThead","ProseTr","ProseUl"],kn=["LinkList","ProjectList"],ve=Object.freeze(Object.defineProperty({__proto__:null,LinkList:he,ProjectList:ye,globalComponents:Sn,localComponents:kn},Symbol.toStringTag,{value:"Module"})),be={__name:"ContentRenderer",props:{value:{type:Object,required:!0},excerpt:{type:Boolean,default:!1},tag:{type:String,default:"div"},components:{type:Object,default:()=>({})},data:{type:Object,default:()=>({})},prose:{type:Boolean,default:void 0},class:{type:[String,Object],default:void 0},unwrap:{type:[Boolean,String],default:!1}},setup(n){const l=["render","ssrRender","__ssrInlineRender"],e=n,o=import.meta.preview,r=O(()=>{let s=e.value.body||e.value;return e.excerpt&&e.value.excerpt&&(s=e.value.excerpt),s.type==="minimal"||s.type==="minimark"?me({value:s.value}):s}),a=O(()=>!r.value?.children?.length),c=O(()=>{const{body:s,excerpt:m,...v}=e.value;return{...v,...e.data}}),d=Object.fromEntries(["p","a","blockquote","code","pre","code","em","h1","h2","h3","h4","h5","h6","hr","img","ul","ol","li","strong","table","thead","tbody","td","th","tr","script"].map(s=>[s,`prose-${s}`])),{mdc:f}=Ln().public||{},i=O(()=>e.data.mdc),p=O(()=>({...f?.components?.prose&&e.prose!==!1?d:{},...f?.components?.map||{},...Q(i.value?.components||{}),...e.components})),y=O(()=>r.value?k(r.value,{tags:p.value}):{});function b(s){let m=s;if(typeof s=="string"){if(A.includes(s))return s;if(Sn.includes(T(s))?m=nn(s,!1):kn.includes(T(s))&&(m=F(()=>$(()=>Promise.resolve().then(()=>ve),void 0,import.meta.url).then(P=>{const x=P[T(s)];return x?x():void 0}))),typeof m=="string")return m}if(!m)return m;const v=m;return"__asyncLoader"in v?v:"setup"in v?F(()=>Promise.resolve(v)):v}function k(s,m){if(!s)return;const v=Array.from(new Set(D(s,m))),w={};for(const[P,x]of v)if(!w[P]){if(typeof x=="object"&&l.some(Pn=>Object.hasOwnProperty.call(x,Pn))){w[P]=x;continue}w[P]=b(x)}return w}function D(s,m){const v=s.tag;if(s.type==="text"||v==="binding"||s.type==="comment")return[];const w=R(s,m.tags),P=[];s.type!=="root"&&!A.includes(w)&&P.push([v,w]);for(const x of s.children||[])P.push(...D(x,m));return P}function R(s,m){const v=s.tag;return!v||typeof s.props?.__ignoreMap<"u"?v:m[v]||m[T(v)]||m[ln(s.tag)]||v}return(s,m)=>a.value?Rn(s.$slots,"empty",{key:1,body:r.value,data:c.value,dataContentId:Z(o)?n.value.id:void 0}):(An(),Mn(ge,{key:0,body:r.value,data:c.value,class:En(e.class),tag:e.tag,prose:e.prose,unwrap:e.unwrap,components:y.value,"data-content-id":Z(o)?n.value.id:void 0},null,8,["body","data","class","tag","prose","unwrap","components","data-content-id"]))}},Se=Object.assign(be,{__name:"ContentRenderer"});export{Se as _}; diff --git a/_nuxt/BbSeNqGj.js b/_nuxt/BbSeNqGj.js new file mode 100644 index 0000000..0d5b8fb --- /dev/null +++ b/_nuxt/BbSeNqGj.js @@ -0,0 +1 @@ +import{_ as o,c as s,o as r,B as n}from"./DoyGpJzh.js";const t={};function c(e,a){return r(),s("ol",null,[n(e.$slots,"default")])}const _=Object.assign(o(t,[["render",c]]),{__name:"ProseOl"});export{_ as default}; diff --git a/_nuxt/BijgKetk.js b/_nuxt/BijgKetk.js new file mode 100644 index 0000000..d0bc7f4 --- /dev/null +++ b/_nuxt/BijgKetk.js @@ -0,0 +1 @@ +import{j as D,I as d,q as C,a2 as M,a3 as R,f as E,c as g,o as _,i as j,t as z,a as m,F as L,r as T}from"./DoyGpJzh.js";import{u as q}from"./DqAykS8P.js";function N(o){return typeof o=="string"?`'${o}'`:new P().serialize(o)}const P=(function(){class o{#t=new Map;compare(t,e){const r=typeof t,i=typeof e;return r==="string"&&i==="string"?t.localeCompare(e):r==="number"&&i==="number"?t-e:String.prototype.localeCompare.call(this.serialize(t,!0),this.serialize(e,!0))}serialize(t,e){if(t===null)return"null";switch(typeof t){case"string":return e?t:`'${t}'`;case"bigint":return`${t}n`;case"object":return this.$object(t);case"function":return this.$function(t)}return String(t)}serializeObject(t){const e=Object.prototype.toString.call(t);if(e!=="[object Object]")return this.serializeBuiltInType(e.length<10?`unknown:${e}`:e.slice(8,-1),t);const r=t.constructor,i=r===Object||r===void 0?"":r.name;if(i!==""&&globalThis[i]===r)return this.serializeBuiltInType(i,t);if(typeof t.toJSON=="function"){const n=t.toJSON();return i+(n!==null&&typeof n=="object"?this.$object(n):`(${this.serialize(n)})`)}return this.serializeObjectEntries(i,Object.entries(t))}serializeBuiltInType(t,e){const r=this["$"+t];if(r)return r.call(this,e);if(typeof e?.entries=="function")return this.serializeObjectEntries(t,e.entries());throw new Error(`Cannot serialize ${t}`)}serializeObjectEntries(t,e){const r=Array.from(e).sort((n,c)=>this.compare(n[0],c[0]));let i=`${t}{`;for(let n=0;nthis.compare(e,r)))}`}$Map(t){return this.serializeObjectEntries("Map",t.entries())}}for(const s of["Error","RegExp","URL"])o.prototype["$"+s]=function(t){return`${s}(${t})`};for(const s of["Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array"])o.prototype["$"+s]=function(t){return`${s}[${t.join(",")}]`};for(const s of["BigInt64Array","BigUint64Array"])o.prototype["$"+s]=function(t){return`${s}[${t.join("n,")}${t.length>0?"n":""}]`};return o})(),J=[1779033703,-1150833019,1013904242,-1521486534,1359893119,-1694144372,528734635,1541459225],V=[1116352408,1899447441,-1245643825,-373957723,961987163,1508970993,-1841331548,-1424204075,-670586216,310598401,607225278,1426881987,1925078388,-2132889090,-1680079193,-1046744716,-459576895,-272742522,264347078,604807628,770255983,1249150122,1555081692,1996064986,-1740746414,-1473132947,-1341970488,-1084653625,-958395405,-710438585,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,-2117940946,-1838011259,-1564481375,-1474664885,-1035236496,-949202525,-778901479,-694614492,-200395387,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,-2067236844,-1933114872,-1866530822,-1538233109,-1090935817,-965641998],G="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",y=[];class K{_data=new $;_hash=new $([...J]);_nDataBytes=0;_minBufferSize=0;finalize(s){s&&this._append(s);const t=this._nDataBytes*8,e=this._data.sigBytes*8;return this._data.words[e>>>5]|=128<<24-e%32,this._data.words[(e+64>>>9<<4)+14]=Math.floor(t/4294967296),this._data.words[(e+64>>>9<<4)+15]=t,this._data.sigBytes=this._data.words.length*4,this._process(),this._hash}_doProcessBlock(s,t){const e=this._hash.words;let r=e[0],i=e[1],n=e[2],c=e[3],a=e[4],u=e[5],h=e[6],b=e[7];for(let l=0;l<64;l++){if(l<16)y[l]=s[t+l]|0;else{const f=y[l-15],U=(f<<25|f>>>7)^(f<<14|f>>>18)^f>>>3,p=y[l-2],x=(p<<15|p>>>17)^(p<<13|p>>>19)^p>>>10;y[l]=U+y[l-7]+x+y[l-16]}const v=a&u^~a&h,A=r&i^r&n^i&n,O=(r<<30|r>>>2)^(r<<19|r>>>13)^(r<<10|r>>>22),k=(a<<26|a>>>6)^(a<<21|a>>>11)^(a<<7|a>>>25),B=b+k+v+V[l]+y[l],S=O+A;b=h,h=u,u=a,a=c+B|0,c=n,n=i,i=r,r=B+S|0}e[0]=e[0]+r|0,e[1]=e[1]+i|0,e[2]=e[2]+n|0,e[3]=e[3]+c|0,e[4]=e[4]+a|0,e[5]=e[5]+u|0,e[6]=e[6]+h|0,e[7]=e[7]+b|0}_append(s){typeof s=="string"&&(s=$.fromUtf8(s)),this._data.concat(s),this._nDataBytes+=s.sigBytes}_process(s){let t,e=this._data.sigBytes/64;s?e=Math.ceil(e):e=Math.max((e|0)-this._minBufferSize,0);const r=e*16,i=Math.min(r*4,this._data.sigBytes);if(r){for(let n=0;n>>2]|=(t.charCodeAt(i)&255)<<24-i%4*8;return new $(r,e)}toBase64(){const s=[];for(let t=0;t>>2]>>>24-t%4*8&255,r=this.words[t+1>>>2]>>>24-(t+1)%4*8&255,i=this.words[t+2>>>2]>>>24-(t+2)%4*8&255,n=e<<16|r<<8|i;for(let c=0;c<4&&t*8+c*6>>6*(3-c)&63))}return s.join("")}concat(s){if(this.words[this.sigBytes>>>2]&=4294967295<<32-this.sigBytes%4*8,this.words.length=Math.ceil(this.sigBytes/4),this.sigBytes%4)for(let t=0;t>>2]>>>24-t%4*8&255;this.words[this.sigBytes+t>>>2]|=e<<24-(this.sigBytes+t)%4*8}else for(let t=0;t>>2]=s.words[t>>>2];this.sigBytes+=s.sigBytes}}function H(o){return new K().finalize(o).toBase64()}function w(o){return H(N(o))}function F(o,s,t){const[e={},r]=typeof s=="string"?[{},s]:[s,t],i=D(()=>d(o)),n=D(()=>d(e.key)||"$f"+w([r,typeof i.value=="string"?i.value:"",...Q(e)]));if(!e.baseURL&&typeof i.value=="string"&&i.value[0]==="/"&&i.value[1]==="/")throw new Error('[nuxt] [useFetch] the request URL must not start with "//".');const{server:c,lazy:a,default:u,transform:h,pick:b,watch:l,immediate:v,getCachedData:A,deep:O,dedupe:k,timeout:B,...S}=e,f=C({...M,...S,cache:typeof e.cache=="boolean"?void 0:e.cache}),U={server:c,lazy:a,default:u,transform:h,pick:b,immediate:v,getCachedData:A,deep:O,dedupe:k,timeout:B,watch:l===!1?[]:[...l||[],f]};return q(l===!1?n.value:n,(x,{signal:I})=>(e.$fetch||globalThis.$fetch)(i.value,{signal:I,...f}),U)}function Q(o){const s=[d(o.method)?.toUpperCase()||"GET",d(o.baseURL)];for(const t of[o.query||o.params]){const e=d(t);if(!e)continue;const r={};for(const[i,n]of Object.entries(e))r[d(i)]=d(n);s.push(r)}if(o.body){const t=d(o.body);if(!t)s.push(w(t));else if(t instanceof ArrayBuffer)s.push(w(Object.fromEntries([...new Uint8Array(t).entries()].map(([e,r])=>[e,r.toString()]))));else if(t instanceof FormData){const e={};for(const r of t.entries()){const[i,n]=r;e[i]=n instanceof File?n.name:n}s.push(w(e))}else if(R(t))s.push(w(C(t)));else try{s.push(w(t))}catch{console.warn("[useFetch] Failed to hash body",t)}}return s}const W={class:"not-prose"},X={key:0},Y={key:1},Z={key:2},tt={class:"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3"},et=["href"],st={class:"flex justify-between text-sm"},rt={class:"text-sm text-gray-700"},at={__name:"ProjectList",async setup(o){let s,t;const{data:e=[]}=([s,t]=E(()=>F("/api/projects-exclude","$hO2hC4kvad")),s=await s,t(),s),{error:r,pending:i,data:n}=([s,t]=E(()=>F("https://api.github.com/users/mjkatgithub/repos","$rNwb4ReuEe")),s=await s,t(),s),c=D(()=>n.value.filter(a=>a.description).filter(a=>!e.value.includes(a.name)).sort((a,u)=>u.stargazers_count-a.stargazers_count));return(a,u)=>(_(),g("div",W,[j(i)?(_(),g("section",X,"Loading ...")):j(r)?(_(),g("section",Y,z(j(r)),1)):(_(),g("section",Z,[m("ul",tt,[(_(!0),g(L,null,T(j(c),h=>(_(),g("li",{key:h.id,class:"border border-gray-600 rounded-sm p-4 hover:bg-gray-400 font-mono"},[m("a",{href:h.html_url,target:"_blank"},[m("div",st,[m("div",null,z(h.name),1),m("div",null,z(h.stargazers_count)+" ★",1)]),m("p",rt,z(h.description),1)],8,et)]))),128))])]))]))}};export{at as default}; diff --git a/_nuxt/BlHe8Whz.js b/_nuxt/BlHe8Whz.js new file mode 100644 index 0000000..aa0bbc1 --- /dev/null +++ b/_nuxt/BlHe8Whz.js @@ -0,0 +1 @@ +import{_ as s,c as o,o as r,B as t}from"./DoyGpJzh.js";const n={};function c(e,a){return r(),o("td",null,[t(e.$slots,"default")])}const l=Object.assign(s(n,[["render",c]]),{__name:"ProseTd"});export{l as default}; diff --git a/_nuxt/Blz32nLr.js b/_nuxt/Blz32nLr.js new file mode 100644 index 0000000..8c70515 --- /dev/null +++ b/_nuxt/Blz32nLr.js @@ -0,0 +1 @@ +import{_ as r,c as s,o,B as t}from"./DoyGpJzh.js";const n={};function c(e,a){return o(),s("tr",null,[t(e.$slots,"default")])}const l=Object.assign(r(n,[["render",c]]),{__name:"ProseTr"});export{l as default}; diff --git a/_nuxt/Bt5bm0NL.js b/_nuxt/Bt5bm0NL.js new file mode 100644 index 0000000..ad62921 --- /dev/null +++ b/_nuxt/Bt5bm0NL.js @@ -0,0 +1,5 @@ +import{f as B,j as R,c as m,a as A,F as _,r as k,i as O,o as p,h as v,t as d,b as T,w as N,d as E,e as I}from"./DoyGpJzh.js";import{a as V,u as M}from"./DDtx_1iE.js";import{u as q,q as H}from"./DqAykS8P.js";var U={};const X={key:0},L={key:0},z={key:0},G={key:1},J={key:2},Z={__name:"index",async setup(K){let j,w;V({title:"mjk @ web",description:"Blog posts about web development, programming, and other stuff",ogTitle:"mjk @ web",ogDescription:"Blog posts about web development, programming, and other stuff",ogImage:"/logo_518x270.png",ogUrl:"http://www.mjkweb.de",twitterTitle:"mjk @ web",twitterDescription:"Blog posts about web development, programming, and other stuff",twitterImage:"/logo_200x200.png",twitterCard:"summary"}),M({htmlAttrs:{lang:"en"},link:[{rel:"icon",type:"image/x-icon",href:"/favicon.ico"}]});const D=U.NITRO_PRESET==="static",{data:x}=([j,w]=B(async()=>q("blog-list",async()=>{const n=await H("blog").all();let l=n;return D&&(l=n.filter(s=>{const r=s.draft||s.meta?.draft,f=s.path?.includes("/drafts/");return!r&&!f})),[...l].sort((s,r)=>{const f=s.date?new Date(s.date):new Date(0),u=r.date?new Date(r.date):new Date(0);return isNaN(f.getTime())?1:isNaN(u.getTime())?-1:u.getTime()-f.getTime()})})),j=await j,w(),j),P=R(()=>x.value?x.value.map((n,l)=>{const o=n.excerpt;let s=[];if(n.body&&(s=S(n.body)),s.length===0&&o&&o!=="[object Object]"&&(s=C(o)),Array.isArray(s))if(s.every(u=>typeof u=="string"))s=s.filter(u=>{if(!u||typeof u!="string")return!1;const t=u.trim();return!(t.length===0||t==="[object Object]")});else{let u=function(a){Array.isArray(a)||(a=[a]);for(const e of a)if(Array.isArray(e))u(e);else if(typeof e=="string")e.trim().length>0&&e!=="[object Object]"&&t.push(e.trim());else if(typeof e=="object"&&e!==null)if(e.value&&typeof e.value=="string")t.push(e.value.trim());else if(e.type==="text"&&e.value)t.push(String(e.value).trim());else{const i=String(e);i!=="[object Object]"&&i.trim().length>0&&t.push(i.trim())}};const t=[];u(s),s=t.filter(a=>a&&typeof a=="string"&&a.trim().length>0)}else s=[];return{...n,date:F(n.date),paragraphs:s,tags:n.tags||[],categories:n.categories||[]}}):[]);function F(n){if(!n)return"";const l=new Date(n);return isNaN(l.getTime())?"":new Intl.DateTimeFormat("en-US",{month:"short",day:"2-digit",year:"numeric"}).format(l)}function S(n){if(!n)return[];const l=[];let o=!1;function s(t){return!t||typeof t!="object"?"":t.type==="text"&&typeof t.value=="string"?t.value:t.children&&Array.isArray(t.children)?t.children.map(e=>e&&typeof e=="object"?s(e):"").filter(e=>typeof e=="string"&&e.length>0).join(" "):""}function r(t){if(!t||o)return!1;if(Array.isArray(t)){const a=t[0],e=t[2];if(a==="comment"||a==="html"){let i="";if(typeof e=="string"?i=e:Array.isArray(e)&&e.length>0&&typeof e[0]=="string"&&(i=e[0]),i&&i.includes(""))return o=!0,!0}if(Array.isArray(e)){for(const i of e)if(r(i))return!0}}else if(typeof t=="object"&&t!==null){if(t.type==="html"&&typeof t.value=="string"&&t.value.includes(""))return o=!0,!0;if(t.children&&Array.isArray(t.children)){for(const a of t.children)if(r(a))return!0}}return!1}function f(t){if(!(!t||o)){if(Array.isArray(t)){const a=t[0],e=t[2];if(Array.isArray(e)&&!o)for(let i=0;i0&&typeof g[0]=="string"&&(h=g[0]),h&&h.includes("")){o=!0;break}}}if(r(y)){o=!0;break}}if(o)return;if(a==="p"&&!o){const i=u(t);if(i&&typeof i=="string"&&i.trim().length>0)if(i.includes("")){const y=i.split("");y[0]&&y[0].trim().length>0&&l.push(y[0].trim()),o=!0}else l.push(i.trim())}if(Array.isArray(e)&&!o)for(const i of e){if(o)break;f(i)}return}if(typeof t=="object"){if(t.type==="html"&&typeof t.value=="string"&&t.value.includes("")){o=!0;return}if(t.children&&Array.isArray(t.children)){for(const a of t.children)if(a&&typeof a=="object"&&a.type==="html"&&typeof a.value=="string"&&a.value.includes("")){o=!0;return}}if(t.type==="paragraph"){const a=s(t);a&&typeof a=="string"&&a.trim().length>0&&l.push(a.trim())}if(t.type==="element"&&t.tag==="p"){const a=s(t);a&&typeof a=="string"&&a.trim().length>0&&l.push(a.trim())}t.children&&Array.isArray(t.children)&&t.children.forEach(a=>{a&&typeof a=="object"&&!o&&f(a)})}}}function u(t){if(!t||!Array.isArray(t))return"";const a=t[2];if(!a)return"";if(typeof a=="string")return a;if(Array.isArray(a)){const e=[];for(const i of a)if(typeof i=="string")e.push(i);else if(Array.isArray(i)){const y=u(i);y&&e.push(y)}return e.filter(i=>typeof i=="string"&&i.length>0).join(" ")}return""}if(Array.isArray(n))n.forEach(t=>{t&&typeof t=="object"&&!o&&f(t)});else if(typeof n=="object"&&n!==null)if(n.value)if(Array.isArray(n.value)){const t=["","","EXCERPT_END","","/blog/2025/upgrade-nuxt-3-to-nuxt-4",{"title":6,"description":3936},"blog/2025/upgrade-nuxt-3-to-nuxt-4",[3934,3984,1707,105],"coding","d_I-rsq_sDaWYeqXtc2pbaG99BcGN33_KR38EWn9BhQ",{"id":3987,"title":3988,"body":3989,"categories":7508,"date":7509,"description":7510,"draft":3937,"excerpt":7511,"extension":3939,"head":7512,"meta":7529,"navigation":805,"path":7531,"seo":7532,"stem":7533,"tags":7534,"__hash__":7535},"blog/blog/2025/migrate-nuxt2-to-nuxt3.md","Upgrading a Nuxt 2 Project to Nuxt 3",{"type":8,"value":3990,"toc":7477},[3991,3994,3997,4000,4006,4009,4012,4014,4019,4022,4031,4034,4037,4046,4049,4051,4053,4056,4061,4074,4077,4105,4110,4118,4121,4124,4240,4242,4251,4276,4290,4299,4304,4308,4311,4320,4323,4327,4337,4352,4361,4896,4904,4916,4919,4932,4980,4991,5003,5315,5323,5380,5386,5390,5393,5407,5437,5441,5444,5456,5537,5541,5544,5559,5621,5625,5632,5652,5760,5764,5770,5775,5824,5828,5899,5904,5913,5917,5928,5936,5942,5945,5949,5978,5983,6049,6057,6061,6065,6074,6079,6124,6129,6159,6162,6166,6175,6181,6206,6210,6215,6220,6273,6276,6278,6281,6285,6299,6319,6323,6338,6358,6362,6380,6384,6404,6408,6415,6429,6433,6455,6459,6470,6478,6482,6485,6489,6499,6504,6510,6514,6526,6531,6556,6561,6572,6711,6716,6821,6830,6833,6836,6840,6843,6847,6857,6863,6867,6878,6958,6961,6966,6970,6979,6985,6989,6997,7096,7100,7107,7111,7116,7119,7160,7163,7199,7203,7213,7217,7222,7359,7363,7369,7383,7385,7387,7390,7392,7442,7444,7464,7471,7474],[11,3992,3988],{"id":3993},"upgrading-a-nuxt-2-project-to-nuxt-3",[15,3995,3996],{},"Web technologies never stand still. With each new version, frameworks bring improvements in performance, developer experience, and long-term maintainability. That’s why I’ve decided to upgrade an existing Nuxt 2 project of mine to Nuxt 3.",[15,3998,3999],{},"The project in question is a small, personal website—somewhere between an online gallery and a digital business card—created to showcase my father’s artwork. It’s a relatively simple Nuxt 2 application, but it still offers a great opportunity to explore what’s involved in bringing a real-world project up to date with the latest version of Nuxt.",[15,4001,4002,4003,4005],{},"Nuxt 3 is built on top of Vue 3 and introduces a modern architecture that includes first-class support for the Composition API, a new ",[50,4004,736],{}," directory for backend logic, and Vite as the default bundler for faster development builds. These changes not only modernize the development workflow but also make the codebase more modular and performant by default.",[15,4007,4008],{},"This upgrade isn’t just about staying current—it’s a chance to revisit old code, rethink the structure, and embrace best practices that have emerged since the original version was built.",[15,4010,4011],{},"In this blog post, I’ll document my migration process as it unfolds—step by step. The goal is to provide a transparent look at what’s involved in moving from Nuxt 2 to Nuxt 3, including the challenges I run into and how I solve them. Whether you're working on a personal project or maintaining something in production, I hope this will serve as a useful and honest guide.",[28,4013,31],{"id":30},[15,4015,4016,4017,38],{},"Before jumping into the actual upgrade, I wanted to make sure I had a safe environment to experiment in. Since my Nuxt 2 project is already hosted on GitHub, I didn’t need a separate backup—version control has that covered.",[36,4018],{},[15,4020,4021],{},"I created a new branch specifically for the migration:",[43,4023,4025],{"className":45,"code":4024,"language":47,"meta":48,"style":48},"git checkout -b migrate/nuxt3\n",[50,4026,4027],{"__ignoreMap":48},[53,4028,4029],{"class":55,"line":56},[53,4030,4024],{},[15,4032,4033],{},"This allows me to work on the Nuxt 3 upgrade without touching the production code. If anything goes wrong, I can always fall back to the main branch or review the commit history.",[15,4035,4036],{},"If you're using Git on Windows and don’t have access to a Bash shell, the command below should still work in PowerShell or your Git GUI. If you're not using Git at all, simply duplicate your project folder manually and work on the copy.",[15,4038,4039,4040,4045],{},"At this stage, I also started looking into the official ",[73,4041,4044],{"href":4042,"rel":4043,":target":78},"https://nuxt.com/docs/getting-started/upgrade#nuxt-2-to-nuxt-3",[77],"Nuxt 3 upgrade guide",". It gives a good overview of what has changed between Nuxt 2 and 3—from how routing works to how plugins, middleware, and API calls are structured.",[15,4047,4048],{},"Finally, I listed all major dependencies in the project and began checking whether they are compatible with Nuxt 3 or if replacements are needed.",[28,4050,94],{"id":93},[96,4052,99],{"id":98},[15,4054,4055],{},"The first step in the actual migration process is to update the project dependencies. Since Nuxt 3 is built on top of Vue 3 and introduces a modernized architecture, many packages from the Nuxt 2 ecosystem are either no longer compatible or have been replaced by new solutions. Before making any code changes, it’s important to ensure that your dependencies are up to date and compatible with Nuxt 3.",[15,4057,4058],{},[68,4059,4060],{},"How do you know which dependencies need to be updated or replaced?",[15,4062,114,4063,118,4065,122,4067,4069,4070,4073],{},[50,4064,117],{},[50,4066,121],{},[50,4068,125],{},". For each package, check the official documentation or GitHub repository to see if it supports Nuxt 3 (or Vue 3). The ",[73,4071,4044],{"href":4042,"rel":4072},[77]," is a great starting point, and many popular Nuxt modules have their own migration guides or compatibility tables.",[15,4075,4076],{},"Look out for these common patterns:",[658,4078,4079,4086,4102],{},[661,4080,4081,4082,4085],{},"Packages starting with ",[50,4083,4084],{},"@nuxtjs/"," may need to be updated or replaced.",[661,4087,4088,4089,4091,4092,4091,4095,4091,4098,4101],{},"Any direct Vue 2 dependencies (like ",[50,4090,1707],{},", ",[50,4093,4094],{},"vuex",[50,4096,4097],{},"vue-router",[50,4099,4100],{},"vue-template-compiler",") should be removed or replaced with their Vue 3 equivalents.",[661,4103,4104],{},"If you’re unsure about a package, search for “Nuxt 3 support” or “Vue 3 support” in its documentation or issues.",[15,4106,133,4107,139],{},[73,4108,138],{"href":136,"rel":4109},[77],[43,4111,4112],{"className":45,"code":142,"language":47,"meta":48,"style":48},[50,4113,4114],{"__ignoreMap":48},[53,4115,4116],{"class":55,"line":56},[53,4117,142],{},[15,4119,4120],{},"However, always double-check compatibility manually, as not every update is Nuxt 3-ready.",[15,4122,4123],{},"In my own project, I identified the following outdated or incompatible dependencies:",[156,4125,4126,4137],{},[159,4127,4128],{},[162,4129,4130,4132,4135],{},[165,4131,167],{},[165,4133,4134],{},"Status in Nuxt 3",[165,4136,173],{},[175,4138,4139,4151,4161,4171,4179,4190,4201,4211,4220,4230],{},[162,4140,4141,4143,4146],{},[180,4142,105],{},[180,4144,4145],{},"❌ Not compatible",[180,4147,187,4148],{},[50,4149,4150],{},"nuxt@latest",[162,4152,4153,4155,4158],{},[180,4154,1707],{},[180,4156,4157],{},"❌ Not required",[180,4159,4160],{},"Remove (Nuxt 3 includes Vue 3 internally)",[162,4162,4163,4166,4168],{},[180,4164,4165],{},"vue-server-renderer",[180,4167,4157],{},[180,4169,4170],{},"Remove",[162,4172,4173,4175,4177],{},[180,4174,4100],{},[180,4176,4157],{},[180,4178,4170],{},[162,4180,4181,4184,4187],{},[180,4182,4183],{},"@nuxtjs/vuetify",[180,4185,4186],{},"⚠️ Needs update",[180,4188,4189],{},"Replace with latest Vuetify for Vue 3",[162,4191,4192,4195,4198],{},[180,4193,4194],{},"core-js",[180,4196,4197],{},"✅ Compatible (optional)",[180,4199,4200],{},"Keep if polyfills are needed",[162,4202,4203,4206,4208],{},[180,4204,4205],{},"compass-mixins",[180,4207,212],{},[180,4209,4210],{},"Keep if used",[162,4212,4213,4216,4218],{},[180,4214,4215],{},"push-dir",[180,4217,212],{},[180,4219,4210],{},[162,4221,4222,4225,4227],{},[180,4223,4224],{},"sass",[180,4226,212],{},[180,4228,4229],{},"Keep",[162,4231,4232,4235,4237],{},[180,4233,4234],{},"sass-loader",[180,4236,4186],{},[180,4238,4239],{},"Update to version 12 or higher",[15,4241,257],{},[43,4243,4245],{"className":45,"code":4244,"language":47,"meta":48,"style":48},"npm uninstall vue vue-server-renderer vue-template-compiler @nuxtjs/vuetify nuxt\n",[50,4246,4247],{"__ignoreMap":48},[53,4248,4249],{"class":55,"line":56},[53,4250,4244],{},[4252,4253,4254,4264,4273],"blockquote",{},[15,4255,4256,4259,4260,4263],{},[68,4257,4258],{},"Note:"," At the time of writing, Nuxt 4 is already in beta. This means that running ",[50,4261,4262],{},"npm install nuxt@latest"," might soon install Nuxt 4 instead of Nuxt 3.\nTo make sure you’re installing Nuxt 3, use the explicit version tag:",[43,4265,4267],{"className":45,"code":4266,"language":47,"meta":48,"style":48},"npm install nuxt@3\n",[50,4268,4269],{"__ignoreMap":48},[53,4270,4271],{"class":55,"line":56},[53,4272,4266],{},[15,4274,4275],{},"This guarantees that you’re working with the stable Nuxt 3 release, which is what this migration guide is based on.",[43,4277,4279],{"className":45,"code":4278,"language":47,"meta":48,"style":48},"npm install nuxt@latest\nnpm install vuetify@latest\n",[50,4280,4281,4285],{"__ignoreMap":48},[53,4282,4283],{"class":55,"line":56},[53,4284,267],{},[53,4286,4287],{"class":55,"line":270},[53,4288,4289],{},"npm install vuetify@latest\n",[43,4291,4293],{"className":45,"code":4292,"language":47,"meta":48,"style":48},"npm install --save-dev sass-loader@^12\n",[50,4294,4295],{"__ignoreMap":48},[53,4296,4297],{"class":55,"line":56},[53,4298,4292],{},[15,4300,288,4301,4303],{},[50,4302,117],{}," was much cleaner and ready for the next steps in the migration.",[96,4305,4307],{"id":4306},"_22-adapting-the-codebase-and-directory-structure","2.2 Adapting the Codebase and Directory Structure",[15,4309,4310],{},"With the dependencies updated, the next step is to adapt your codebase and project structure to match the conventions and requirements of Nuxt 3. Nuxt 3 introduces several architectural changes, including new directories, file naming conventions, and the removal or replacement of some legacy features.",[15,4312,4313,4314,4319],{},"Start by reviewing the official ",[73,4315,4318],{"href":4316,"rel":4317},"https://nuxt.com/docs/guide/directory-structure/overview",[77],"Nuxt 3 directory structure documentation"," to get an overview of what’s new and what has changed.",[15,4321,4322],{},"Some of the most important changes include:",[300,4324,4326],{"id":4325},"_221-configuration-file","2.2.1 Configuration file",[15,4328,4329,4330,4333,4334,4336],{},"Rename ",[50,4331,4332],{},"nuxt.config.js"," to ",[50,4335,316],{}," and update its syntax to use TypeScript and the new Nuxt 3 options.",[43,4338,4340],{"className":45,"code":4339,"language":47,"meta":48,"style":48},"# Rename your Nuxt config file to use TypeScript\nmv nuxt.config.js nuxt.config.ts\n",[50,4341,4342,4347],{"__ignoreMap":48},[53,4343,4344],{"class":55,"line":56},[53,4345,4346],{},"# Rename your Nuxt config file to use TypeScript\n",[53,4348,4349],{"class":55,"line":270},[53,4350,4351],{},"mv nuxt.config.js nuxt.config.ts\n",[15,4353,4354,4355,4357,4358,4360],{},"and use ",[50,4356,633],{},". My ",[50,4359,316],{}," file now looks like this:",[43,4362,4364],{"className":320,"code":4363,"language":322,"meta":48,"style":48},"export default defineNuxtConfig({\n // Target: Only 'static' or 'server' in Nuxt 2, in Nuxt 3 use 'ssr: false' for static\n ssr: false, // Set to false if you want a static site\n app: {\n baseURL: '/kunstkanne/',\n head: {\n title: 'kunstkanne',\n htmlAttrs: {\n lang: 'en'\n },\n meta: [\n { charset: 'utf-8' },\n { name: 'viewport', content: 'width=device-width, initial-scale=1' },\n { name: 'description', content: '' },\n { name: 'format-detection', content: 'telephone=no' }\n ],\n link: [\n { rel: 'apple-touch-icon', sizes: '180x180', type: 'image/x-icon', href: '/apple-touch-icon.png' },\n { rel: 'icon', type: 'image/png', sizes: '32x32', href: '/favicon-32x32.png' },\n { rel: 'icon', type: 'image/png', sizes: '16x16', href: '/favicon-16x16.png' },\n { rel: 'manifest', href: '/site.webmanifest' }\n ]\n }\n },\n css: [\n '~/assets/css/main.scss'\n ],\n components: true,\n modules: [\n // Add Nuxt 3 compatible modules here\n ],\n build: {\n // Add custom build options if needed\n }\n}) \n",[50,4365,4366,4378,4383,4399,4408,4424,4433,4449,4458,4471,4475,4484,4504,4534,4558,4588,4595,4604,4664,4719,4773,4803,4808,4812,4816,4825,4834,4840,4852,4861,4866,4872,4881,4886,4890],{"__ignoreMap":48},[53,4367,4368,4370,4372,4374,4376],{"class":55,"line":56},[53,4369,330],{"class":329},[53,4371,333],{"class":329},[53,4373,337],{"class":336},[53,4375,341],{"class":340},[53,4377,345],{"class":344},[53,4379,4380],{"class":55,"line":270},[53,4381,4382],{"class":350}," // Target: Only 'static' or 'server' in Nuxt 2, in Nuxt 3 use 'ssr: false' for static\n",[53,4384,4385,4388,4390,4394,4396],{"class":55,"line":354},[53,4386,4387],{"class":387}," ssr",[53,4389,391],{"class":344},[53,4391,4393],{"class":4392},"sbqyR"," false",[53,4395,404],{"class":344},[53,4397,4398],{"class":350}," // Set to false if you want a static site\n",[53,4400,4401,4404,4406],{"class":55,"line":360},[53,4402,4403],{"class":387}," app",[53,4405,391],{"class":344},[53,4407,592],{"class":344},[53,4409,4410,4413,4415,4417,4420,4422],{"class":55,"line":366},[53,4411,4412],{"class":387}," baseURL",[53,4414,391],{"class":344},[53,4416,394],{"class":344},[53,4418,4419],{"class":397},"/kunstkanne/",[53,4421,401],{"class":344},[53,4423,870],{"class":344},[53,4425,4426,4429,4431],{"class":55,"line":372},[53,4427,4428],{"class":387}," head",[53,4430,391],{"class":344},[53,4432,592],{"class":344},[53,4434,4435,4438,4440,4442,4445,4447],{"class":55,"line":378},[53,4436,4437],{"class":387}," title",[53,4439,391],{"class":344},[53,4441,394],{"class":344},[53,4443,4444],{"class":397},"kunstkanne",[53,4446,401],{"class":344},[53,4448,870],{"class":344},[53,4450,4451,4454,4456],{"class":55,"line":384},[53,4452,4453],{"class":387}," htmlAttrs",[53,4455,391],{"class":344},[53,4457,592],{"class":344},[53,4459,4460,4463,4465,4467,4469],{"class":55,"line":410},[53,4461,4462],{"class":387}," lang",[53,4464,391],{"class":344},[53,4466,394],{"class":344},[53,4468,3942],{"class":397},[53,4470,934],{"class":344},[53,4472,4473],{"class":55,"line":416},[53,4474,3527],{"class":344},[53,4476,4477,4480,4482],{"class":55,"line":1882},[53,4478,4479],{"class":387}," meta",[53,4481,391],{"class":344},[53,4483,3399],{"class":340},[53,4485,4486,4489,4492,4494,4496,4499,4501],{"class":55,"line":1888},[53,4487,4488],{"class":344}," {",[53,4490,4491],{"class":387}," charset",[53,4493,391],{"class":344},[53,4495,394],{"class":344},[53,4497,4498],{"class":397},"utf-8",[53,4500,401],{"class":344},[53,4502,4503],{"class":344}," },\n",[53,4505,4506,4508,4510,4512,4514,4517,4519,4521,4523,4525,4527,4530,4532],{"class":55,"line":1909},[53,4507,4488],{"class":344},[53,4509,2676],{"class":387},[53,4511,391],{"class":344},[53,4513,394],{"class":344},[53,4515,4516],{"class":397},"viewport",[53,4518,401],{"class":344},[53,4520,404],{"class":344},[53,4522,2653],{"class":387},[53,4524,391],{"class":344},[53,4526,394],{"class":344},[53,4528,4529],{"class":397},"width=device-width, initial-scale=1",[53,4531,401],{"class":344},[53,4533,4503],{"class":344},[53,4535,4536,4538,4540,4542,4544,4546,4548,4550,4552,4554,4556],{"class":55,"line":1914},[53,4537,4488],{"class":344},[53,4539,2676],{"class":387},[53,4541,391],{"class":344},[53,4543,394],{"class":344},[53,4545,2803],{"class":397},[53,4547,401],{"class":344},[53,4549,404],{"class":344},[53,4551,2653],{"class":387},[53,4553,391],{"class":344},[53,4555,2488],{"class":344},[53,4557,4503],{"class":344},[53,4559,4560,4562,4564,4566,4568,4571,4573,4575,4577,4579,4581,4584,4586],{"class":55,"line":1919},[53,4561,4488],{"class":344},[53,4563,2676],{"class":387},[53,4565,391],{"class":344},[53,4567,394],{"class":344},[53,4569,4570],{"class":397},"format-detection",[53,4572,401],{"class":344},[53,4574,404],{"class":344},[53,4576,2653],{"class":387},[53,4578,391],{"class":344},[53,4580,394],{"class":344},[53,4582,4583],{"class":397},"telephone=no",[53,4585,401],{"class":344},[53,4587,2665],{"class":344},[53,4589,4590,4593],{"class":55,"line":1961},[53,4591,4592],{"class":340}," ]",[53,4594,870],{"class":344},[53,4596,4597,4600,4602],{"class":55,"line":2188},[53,4598,4599],{"class":387}," link",[53,4601,391],{"class":344},[53,4603,3399],{"class":340},[53,4605,4606,4608,4611,4613,4615,4618,4620,4622,4625,4627,4629,4632,4634,4636,4639,4641,4643,4646,4648,4650,4653,4655,4657,4660,4662],{"class":55,"line":2208},[53,4607,4488],{"class":344},[53,4609,4610],{"class":387}," rel",[53,4612,391],{"class":344},[53,4614,394],{"class":344},[53,4616,4617],{"class":397},"apple-touch-icon",[53,4619,401],{"class":344},[53,4621,404],{"class":344},[53,4623,4624],{"class":387}," sizes",[53,4626,391],{"class":344},[53,4628,394],{"class":344},[53,4630,4631],{"class":397},"180x180",[53,4633,401],{"class":344},[53,4635,404],{"class":344},[53,4637,4638],{"class":387}," type",[53,4640,391],{"class":344},[53,4642,394],{"class":344},[53,4644,4645],{"class":397},"image/x-icon",[53,4647,401],{"class":344},[53,4649,404],{"class":344},[53,4651,4652],{"class":387}," href",[53,4654,391],{"class":344},[53,4656,394],{"class":344},[53,4658,4659],{"class":397},"/apple-touch-icon.png",[53,4661,401],{"class":344},[53,4663,4503],{"class":344},[53,4665,4666,4668,4670,4672,4674,4676,4678,4680,4682,4684,4686,4689,4691,4693,4695,4697,4699,4702,4704,4706,4708,4710,4712,4715,4717],{"class":55,"line":2229},[53,4667,4488],{"class":344},[53,4669,4610],{"class":387},[53,4671,391],{"class":344},[53,4673,394],{"class":344},[53,4675,3945],{"class":397},[53,4677,401],{"class":344},[53,4679,404],{"class":344},[53,4681,4638],{"class":387},[53,4683,391],{"class":344},[53,4685,394],{"class":344},[53,4687,4688],{"class":397},"image/png",[53,4690,401],{"class":344},[53,4692,404],{"class":344},[53,4694,4624],{"class":387},[53,4696,391],{"class":344},[53,4698,394],{"class":344},[53,4700,4701],{"class":397},"32x32",[53,4703,401],{"class":344},[53,4705,404],{"class":344},[53,4707,4652],{"class":387},[53,4709,391],{"class":344},[53,4711,394],{"class":344},[53,4713,4714],{"class":397},"/favicon-32x32.png",[53,4716,401],{"class":344},[53,4718,4503],{"class":344},[53,4720,4721,4723,4725,4727,4729,4731,4733,4735,4737,4739,4741,4743,4745,4747,4749,4751,4753,4756,4758,4760,4762,4764,4766,4769,4771],{"class":55,"line":2244},[53,4722,4488],{"class":344},[53,4724,4610],{"class":387},[53,4726,391],{"class":344},[53,4728,394],{"class":344},[53,4730,3945],{"class":397},[53,4732,401],{"class":344},[53,4734,404],{"class":344},[53,4736,4638],{"class":387},[53,4738,391],{"class":344},[53,4740,394],{"class":344},[53,4742,4688],{"class":397},[53,4744,401],{"class":344},[53,4746,404],{"class":344},[53,4748,4624],{"class":387},[53,4750,391],{"class":344},[53,4752,394],{"class":344},[53,4754,4755],{"class":397},"16x16",[53,4757,401],{"class":344},[53,4759,404],{"class":344},[53,4761,4652],{"class":387},[53,4763,391],{"class":344},[53,4765,394],{"class":344},[53,4767,4768],{"class":397},"/favicon-16x16.png",[53,4770,401],{"class":344},[53,4772,4503],{"class":344},[53,4774,4775,4777,4779,4781,4783,4786,4788,4790,4792,4794,4796,4799,4801],{"class":55,"line":2269},[53,4776,4488],{"class":344},[53,4778,4610],{"class":387},[53,4780,391],{"class":344},[53,4782,394],{"class":344},[53,4784,4785],{"class":397},"manifest",[53,4787,401],{"class":344},[53,4789,404],{"class":344},[53,4791,4652],{"class":387},[53,4793,391],{"class":344},[53,4795,394],{"class":344},[53,4797,4798],{"class":397},"/site.webmanifest",[53,4800,401],{"class":344},[53,4802,2665],{"class":344},[53,4804,4805],{"class":55,"line":2287},[53,4806,4807],{"class":340}," ]\n",[53,4809,4810],{"class":55,"line":2298},[53,4811,1078],{"class":344},[53,4813,4814],{"class":55,"line":2303},[53,4815,3537],{"class":344},[53,4817,4818,4821,4823],{"class":55,"line":2309},[53,4819,4820],{"class":387}," css",[53,4822,391],{"class":344},[53,4824,3399],{"class":340},[53,4826,4827,4829,4832],{"class":55,"line":2331},[53,4828,3404],{"class":344},[53,4830,4831],{"class":397},"~/assets/css/main.scss",[53,4833,934],{"class":344},[53,4835,4836,4838],{"class":55,"line":2344},[53,4837,3427],{"class":340},[53,4839,870],{"class":344},[53,4841,4842,4845,4847,4850],{"class":55,"line":2356},[53,4843,4844],{"class":387}," components",[53,4846,391],{"class":344},[53,4848,4849],{"class":4392}," true",[53,4851,870],{"class":344},[53,4853,4854,4857,4859],{"class":55,"line":2368},[53,4855,4856],{"class":387}," modules",[53,4858,391],{"class":344},[53,4860,3399],{"class":340},[53,4862,4863],{"class":55,"line":2373},[53,4864,4865],{"class":350}," // Add Nuxt 3 compatible modules here\n",[53,4867,4868,4870],{"class":55,"line":2397},[53,4869,3427],{"class":340},[53,4871,870],{"class":344},[53,4873,4874,4877,4879],{"class":55,"line":2424},[53,4875,4876],{"class":387}," build",[53,4878,391],{"class":344},[53,4880,592],{"class":344},[53,4882,4883],{"class":55,"line":2430},[53,4884,4885],{"class":350}," // Add custom build options if needed\n",[53,4887,4888],{"class":55,"line":2461},[53,4889,622],{"class":344},[53,4891,4892,4894],{"class":55,"line":2493},[53,4893,419],{"class":344},[53,4895,422],{"class":340},[15,4897,4898,4899,666,4901,4903],{},"When migrating your Nuxt config from JavaScript to TypeScript (",[50,4900,4332],{},[50,4902,316],{},"), you might encounter some common TypeScript or linter errors. Here are two typical issues and how to resolve them:",[658,4905,4906],{},[661,4907,4908,4911,4913],{},[68,4909,4910],{},"Error:",[36,4912],{},[50,4914,4915],{},"Cannot find name 'defineNuxtConfig'.",[15,4917,4918],{},"This happens because TypeScript (and your linter) does not know about the special Nuxt 3 global types by default.",[15,4920,4921,4922,4925,4926,4928,4929,4931],{},"to fix this, add ",[50,4923,4924],{},"\"nuxt\""," to the ",[50,4927,601],{}," array in your ",[50,4930,565],{}," file.",[43,4933,4934],{"className":568,"code":569,"language":570,"meta":48,"style":48},[50,4935,4936,4940,4952,4972,4976],{"__ignoreMap":48},[53,4937,4938],{"class":55,"line":56},[53,4939,345],{"class":344},[53,4941,4942,4944,4946,4948,4950],{"class":55,"line":270},[53,4943,581],{"class":344},[53,4945,585],{"class":584},[53,4947,524],{"class":344},[53,4949,391],{"class":344},[53,4951,592],{"class":344},[53,4953,4954,4956,4958,4960,4962,4964,4966,4968,4970],{"class":55,"line":354},[53,4955,597],{"class":344},[53,4957,601],{"class":600},[53,4959,524],{"class":344},[53,4961,391],{"class":344},[53,4963,608],{"class":344},[53,4965,524],{"class":344},[53,4967,105],{"class":397},[53,4969,524],{"class":344},[53,4971,617],{"class":344},[53,4973,4974],{"class":55,"line":360},[53,4975,622],{"class":344},[53,4977,4978],{"class":55,"line":366},[53,4979,627],{"class":344},[658,4981,4982],{},[661,4983,4984,4986,4988],{},[68,4985,4910],{},[36,4987],{},[50,4989,4990],{},"Cannot read file './.nuxt/tsconfig.json'.",[15,4992,4993,4994,4996,4997,5000,5001,634],{},"This occurs if your ",[50,4995,565],{}," tries to extend a file that does not exist yet. The ",[50,4998,4999],{},".nuxt/tsconfig.json"," file is generated only after the first build, so it should not be referenced directly in your main ",[50,5002,565],{},[43,5004,5006],{"className":568,"code":5005,"language":570,"meta":48,"style":48},"{\n \"compilerOptions\": {\n \"target\": \"ESNext\",\n \"module\": \"ESNext\",\n \"moduleResolution\": \"Node\",\n \"strict\": true,\n \"jsx\": \"preserve\",\n \"esModuleInterop\": true,\n \"allowJs\": true,\n \"skipLibCheck\": true,\n \"types\": [\"nuxt\"],\n \"baseUrl\": \".\",\n \"paths\": {\n \"~/*\": [\"./*\"],\n \"@/*\": [\"./*\"]\n }\n },\n \"exclude\": [\"node_modules\", \".output\", \".nuxt\", \"dist\"]\n}\n",[50,5007,5008,5012,5024,5045,5064,5084,5098,5118,5131,5144,5157,5178,5197,5210,5233,5254,5258,5262,5311],{"__ignoreMap":48},[53,5009,5010],{"class":55,"line":56},[53,5011,345],{"class":344},[53,5013,5014,5016,5018,5020,5022],{"class":55,"line":270},[53,5015,581],{"class":344},[53,5017,585],{"class":584},[53,5019,524],{"class":344},[53,5021,391],{"class":344},[53,5023,592],{"class":344},[53,5025,5026,5028,5031,5033,5035,5038,5041,5043],{"class":55,"line":354},[53,5027,597],{"class":344},[53,5029,5030],{"class":600},"target",[53,5032,524],{"class":344},[53,5034,391],{"class":344},[53,5036,5037],{"class":344}," \"",[53,5039,5040],{"class":397},"ESNext",[53,5042,524],{"class":344},[53,5044,870],{"class":344},[53,5046,5047,5049,5052,5054,5056,5058,5060,5062],{"class":55,"line":360},[53,5048,597],{"class":344},[53,5050,5051],{"class":600},"module",[53,5053,524],{"class":344},[53,5055,391],{"class":344},[53,5057,5037],{"class":344},[53,5059,5040],{"class":397},[53,5061,524],{"class":344},[53,5063,870],{"class":344},[53,5065,5066,5068,5071,5073,5075,5077,5080,5082],{"class":55,"line":366},[53,5067,597],{"class":344},[53,5069,5070],{"class":600},"moduleResolution",[53,5072,524],{"class":344},[53,5074,391],{"class":344},[53,5076,5037],{"class":344},[53,5078,5079],{"class":397},"Node",[53,5081,524],{"class":344},[53,5083,870],{"class":344},[53,5085,5086,5088,5091,5093,5095],{"class":55,"line":372},[53,5087,597],{"class":344},[53,5089,5090],{"class":600},"strict",[53,5092,524],{"class":344},[53,5094,391],{"class":344},[53,5096,5097],{"class":344}," true,\n",[53,5099,5100,5102,5105,5107,5109,5111,5114,5116],{"class":55,"line":378},[53,5101,597],{"class":344},[53,5103,5104],{"class":600},"jsx",[53,5106,524],{"class":344},[53,5108,391],{"class":344},[53,5110,5037],{"class":344},[53,5112,5113],{"class":397},"preserve",[53,5115,524],{"class":344},[53,5117,870],{"class":344},[53,5119,5120,5122,5125,5127,5129],{"class":55,"line":384},[53,5121,597],{"class":344},[53,5123,5124],{"class":600},"esModuleInterop",[53,5126,524],{"class":344},[53,5128,391],{"class":344},[53,5130,5097],{"class":344},[53,5132,5133,5135,5138,5140,5142],{"class":55,"line":410},[53,5134,597],{"class":344},[53,5136,5137],{"class":600},"allowJs",[53,5139,524],{"class":344},[53,5141,391],{"class":344},[53,5143,5097],{"class":344},[53,5145,5146,5148,5151,5153,5155],{"class":55,"line":416},[53,5147,597],{"class":344},[53,5149,5150],{"class":600},"skipLibCheck",[53,5152,524],{"class":344},[53,5154,391],{"class":344},[53,5156,5097],{"class":344},[53,5158,5159,5161,5163,5165,5167,5169,5171,5173,5175],{"class":55,"line":1882},[53,5160,597],{"class":344},[53,5162,601],{"class":600},[53,5164,524],{"class":344},[53,5166,391],{"class":344},[53,5168,608],{"class":344},[53,5170,524],{"class":344},[53,5172,105],{"class":397},[53,5174,524],{"class":344},[53,5176,5177],{"class":344},"],\n",[53,5179,5180,5182,5185,5187,5189,5191,5193,5195],{"class":55,"line":1888},[53,5181,597],{"class":344},[53,5183,5184],{"class":600},"baseUrl",[53,5186,524],{"class":344},[53,5188,391],{"class":344},[53,5190,5037],{"class":344},[53,5192,634],{"class":397},[53,5194,524],{"class":344},[53,5196,870],{"class":344},[53,5198,5199,5201,5204,5206,5208],{"class":55,"line":1909},[53,5200,597],{"class":344},[53,5202,5203],{"class":600},"paths",[53,5205,524],{"class":344},[53,5207,391],{"class":344},[53,5209,592],{"class":344},[53,5211,5212,5215,5218,5220,5222,5224,5226,5229,5231],{"class":55,"line":1914},[53,5213,5214],{"class":344}," \"",[53,5216,5217],{"class":1903},"~/*",[53,5219,524],{"class":344},[53,5221,391],{"class":344},[53,5223,608],{"class":344},[53,5225,524],{"class":344},[53,5227,5228],{"class":397},"./*",[53,5230,524],{"class":344},[53,5232,5177],{"class":344},[53,5234,5235,5237,5240,5242,5244,5246,5248,5250,5252],{"class":55,"line":1919},[53,5236,5214],{"class":344},[53,5238,5239],{"class":1903},"@/*",[53,5241,524],{"class":344},[53,5243,391],{"class":344},[53,5245,608],{"class":344},[53,5247,524],{"class":344},[53,5249,5228],{"class":397},[53,5251,524],{"class":344},[53,5253,617],{"class":344},[53,5255,5256],{"class":55,"line":1961},[53,5257,1078],{"class":344},[53,5259,5260],{"class":55,"line":2188},[53,5261,3537],{"class":344},[53,5263,5264,5266,5269,5271,5273,5275,5277,5280,5282,5284,5286,5289,5291,5293,5295,5298,5300,5302,5304,5307,5309],{"class":55,"line":2208},[53,5265,581],{"class":344},[53,5267,5268],{"class":584},"exclude",[53,5270,524],{"class":344},[53,5272,391],{"class":344},[53,5274,608],{"class":344},[53,5276,524],{"class":344},[53,5278,5279],{"class":397},"node_modules",[53,5281,524],{"class":344},[53,5283,404],{"class":344},[53,5285,5037],{"class":344},[53,5287,5288],{"class":397},".output",[53,5290,524],{"class":344},[53,5292,404],{"class":344},[53,5294,5037],{"class":344},[53,5296,5297],{"class":397},".nuxt",[53,5299,524],{"class":344},[53,5301,404],{"class":344},[53,5303,5037],{"class":344},[53,5305,5306],{"class":397},"dist",[53,5308,524],{"class":344},[53,5310,617],{"class":344},[53,5312,5313],{"class":55,"line":2229},[53,5314,627],{"class":344},[15,5316,5317],{},[68,5318,5319,5320,5322],{},"What do these ",[50,5321,565],{}," options mean?",[658,5324,5325,5334,5339,5344,5353,5361,5375],{},[661,5326,5327,4091,5329,4091,5331,5333],{},[50,5328,5030],{},[50,5330,5051],{},[50,5332,5070],{},": Set the JavaScript version and module system for your project.",[661,5335,5336,5338],{},[50,5337,5090],{},": Enables strict type-checking for safer code.",[661,5340,5341,5343],{},[50,5342,5104],{},": Allows Vue’s JSX/TSX support if needed.",[661,5345,5346,4091,5348,4091,5350,5352],{},[50,5347,5124],{},[50,5349,5137],{},[50,5351,5150],{},": Improve compatibility with JavaScript and third-party libraries.",[661,5354,5355,5357,5358,5360],{},[50,5356,601],{},": Ensures Nuxt’s global types (like ",[50,5359,633],{},") are available everywhere.",[661,5362,5363,4091,5365,5367,5368,122,5371,5374],{},[50,5364,5184],{},[50,5366,5203],{},": Allow you to use ",[50,5369,5370],{},"~/",[50,5372,5373],{},"@/"," aliases in your imports.",[661,5376,5377,5379],{},[50,5378,5268],{},": Prevents TypeScript from checking build and output folders.",[15,5381,5382,5383,5385],{},"If you run into these errors, updating your ",[50,5384,565],{}," as shown above will resolve them and ensure a smooth TypeScript experience with Nuxt 3.",[300,5387,5389],{"id":5388},"_222-middleware-and-server-routes","2.2.2 Middleware and server routes",[15,5391,5392],{},"In my project, I did not have any custom server middleware or API routes, so there was nothing to migrate for this step.",[15,5394,5395,5396,5399,5400,5403,5404,5406],{},"If you do have custom middleware, you should move them from the old ",[50,5397,5398],{},"middleware/"," directory to the new ",[50,5401,5402],{},"server/middleware/"," directory in Nuxt 3.",[36,5405],{},"\nFor example:",[43,5408,5410],{"className":45,"code":5409,"language":47,"meta":48,"style":48},"# Move your custom server middleware or API routes into the new server/ directory\n# For example, move from:\n# /middleware/my-middleware.js\n# to:\n# /server/middleware/my-middleware.ts\n",[50,5411,5412,5417,5422,5427,5432],{"__ignoreMap":48},[53,5413,5414],{"class":55,"line":56},[53,5415,5416],{},"# Move your custom server middleware or API routes into the new server/ directory\n",[53,5418,5419],{"class":55,"line":270},[53,5420,5421],{},"# For example, move from:\n",[53,5423,5424],{"class":55,"line":354},[53,5425,5426],{},"# /middleware/my-middleware.js\n",[53,5428,5429],{"class":55,"line":360},[53,5430,5431],{},"# to:\n",[53,5433,5434],{"class":55,"line":366},[53,5435,5436],{},"# /server/middleware/my-middleware.ts\n",[300,5438,5440],{"id":5439},"_223-store","2.2.3 Store",[15,5442,5443],{},"In my project, I did not use Vuex or any other state management solution, so there was nothing to migrate for this step.",[15,5445,5446,5447,5452,5453,5455],{},"If your project uses Vuex, you should consider migrating to ",[73,5448,5451],{"href":5449,"rel":5450},"https://pinia.vuejs.org/",[77],"Pinia",", the new recommended state management solution for Nuxt 3.",[36,5454],{},"\nHere’s how you would do it:",[43,5457,5459],{"className":45,"code":5458,"language":47,"meta":48,"style":48},"# If you used Vuex, install Pinia and create a new store in the stores/ directory\nnpm install pinia\n\n# Example: stores/counter.ts\nimport { defineStore } from 'pinia'\n\nexport const useCounterStore = defineStore('counter', {\n state: () => ({\n count: 0\n }),\n actions: {\n increment() {\n this.count++\n }\n }\n})\n",[50,5460,5461,5466,5471,5475,5480,5485,5489,5494,5499,5504,5509,5514,5519,5524,5528,5532],{"__ignoreMap":48},[53,5462,5463],{"class":55,"line":56},[53,5464,5465],{},"# If you used Vuex, install Pinia and create a new store in the stores/ directory\n",[53,5467,5468],{"class":55,"line":270},[53,5469,5470],{},"npm install pinia\n",[53,5472,5473],{"class":55,"line":354},[53,5474,806],{"emptyLinePlaceholder":805},[53,5476,5477],{"class":55,"line":360},[53,5478,5479],{},"# Example: stores/counter.ts\n",[53,5481,5482],{"class":55,"line":366},[53,5483,5484],{},"import { defineStore } from 'pinia'\n",[53,5486,5487],{"class":55,"line":372},[53,5488,806],{"emptyLinePlaceholder":805},[53,5490,5491],{"class":55,"line":378},[53,5492,5493],{},"export const useCounterStore = defineStore('counter', {\n",[53,5495,5496],{"class":55,"line":384},[53,5497,5498],{}," state: () => ({\n",[53,5500,5501],{"class":55,"line":410},[53,5502,5503],{}," count: 0\n",[53,5505,5506],{"class":55,"line":416},[53,5507,5508],{}," }),\n",[53,5510,5511],{"class":55,"line":1882},[53,5512,5513],{}," actions: {\n",[53,5515,5516],{"class":55,"line":1888},[53,5517,5518],{}," increment() {\n",[53,5520,5521],{"class":55,"line":1909},[53,5522,5523],{}," this.count++\n",[53,5525,5526],{"class":55,"line":1914},[53,5527,1078],{},[53,5529,5530],{"class":55,"line":1919},[53,5531,622],{},[53,5533,5534],{"class":55,"line":1961},[53,5535,5536],{},"})\n",[300,5538,5540],{"id":5539},"_224-plugins-and-composables","2.2.4 Plugins and composables",[15,5542,5543],{},"In my project, I did not have any custom plugins or composables, so there was nothing to migrate for this step.",[15,5545,5546,5547,4091,5549,5552,5553,5555,5556,5558],{},"If your project uses plugins or reusable logic (e.g. from ",[50,5548,698],{},[50,5550,5551],{},"utils/",", or mixins), you should move them to the new ",[50,5554,690],{}," directory and update their syntax to use the Composition API.",[36,5557],{},"\nHere’s an example of a simple composable:",[43,5560,5562],{"className":320,"code":5561,"language":322,"meta":48,"style":48},"// Example: composables/useExample.ts\nexport function useExample() {\n const message = ref('Hello from a composable!')\n return { message }\n}\n",[50,5563,5564,5569,5584,5607,5617],{"__ignoreMap":48},[53,5565,5566],{"class":55,"line":56},[53,5567,5568],{"class":350},"// Example: composables/useExample.ts\n",[53,5570,5571,5573,5576,5579,5582],{"class":55,"line":270},[53,5572,330],{"class":329},[53,5574,5575],{"class":584}," function",[53,5577,5578],{"class":336}," useExample",[53,5580,5581],{"class":344},"()",[53,5583,592],{"class":344},[53,5585,5586,5588,5591,5593,5596,5598,5600,5603,5605],{"class":55,"line":354},[53,5587,1338],{"class":584},[53,5589,5590],{"class":340}," message",[53,5592,1200],{"class":344},[53,5594,5595],{"class":336}," ref",[53,5597,341],{"class":387},[53,5599,401],{"class":344},[53,5601,5602],{"class":397},"Hello from a composable!",[53,5604,401],{"class":344},[53,5606,422],{"class":387},[53,5608,5609,5611,5613,5615],{"class":55,"line":360},[53,5610,1233],{"class":329},[53,5612,917],{"class":344},[53,5614,5590],{"class":340},[53,5616,2665],{"class":344},[53,5618,5619],{"class":55,"line":366},[53,5620,627],{"class":344},[300,5622,5624],{"id":5623},"_225-api-requests","2.2.5 API requests",[15,5626,5627,5628,5631],{},"In my project, I did not use the ",[50,5629,5630],{},"$axios"," module or make any direct API requests, so there was nothing to migrate for this step.",[15,5633,5634,5635,5637,5638,5641,5642,5645,5646,634,5649,5651],{},"If your project uses ",[50,5636,5630],{}," (for example, ",[50,5639,5640],{},"this.$axios.get('/api/data')","), you should migrate to the new Nuxt 3 composables like ",[50,5643,5644],{},"useFetch"," or ",[50,5647,5648],{},"useAsyncData",[36,5650],{},"\nHere’s an example of how you would do this:",[43,5653,5657],{"className":5654,"code":5655,"language":5656,"meta":48,"style":48},"language-js shiki shiki-themes material-theme","// Old (Nuxt 2, Options API)\nexport default {\n asyncData({ $axios }) {\n return $axios.$get('/api/data')\n }\n}\n\n// New (Nuxt 3, Composition API)\n\u003Cscript setup>\nconst { data } = await useFetch('/api/data')\n\u003C/script>\n","js",[50,5658,5659,5664,5672,5688,5710,5714,5718,5722,5727,5737,5752],{"__ignoreMap":48},[53,5660,5661],{"class":55,"line":56},[53,5662,5663],{"class":350},"// Old (Nuxt 2, Options API)\n",[53,5665,5666,5668,5670],{"class":55,"line":270},[53,5667,330],{"class":329},[53,5669,333],{"class":329},[53,5671,592],{"class":344},[53,5673,5674,5677,5680,5683,5686],{"class":55,"line":354},[53,5675,5676],{"class":387}," asyncData",[53,5678,5679],{"class":344},"({",[53,5681,5682],{"class":1387}," $axios",[53,5684,5685],{"class":344}," })",[53,5687,592],{"class":344},[53,5689,5690,5692,5694,5696,5699,5701,5703,5706,5708],{"class":55,"line":360},[53,5691,1891],{"class":329},[53,5693,5682],{"class":340},[53,5695,634],{"class":344},[53,5697,5698],{"class":336},"$get",[53,5700,341],{"class":387},[53,5702,401],{"class":344},[53,5704,5705],{"class":397},"/api/data",[53,5707,401],{"class":344},[53,5709,422],{"class":387},[53,5711,5712],{"class":55,"line":366},[53,5713,622],{"class":344},[53,5715,5716],{"class":55,"line":372},[53,5717,627],{"class":344},[53,5719,5720],{"class":55,"line":378},[53,5721,806],{"emptyLinePlaceholder":805},[53,5723,5724],{"class":55,"line":384},[53,5725,5726],{"class":350},"// New (Nuxt 3, Composition API)\n",[53,5728,5729,5731,5733,5735],{"class":55,"line":410},[53,5730,510],{"class":344},[53,5732,1716],{"class":387},[53,5734,1719],{"class":584},[53,5736,1722],{"class":344},[53,5738,5739,5742,5745,5747,5749],{"class":55,"line":416},[53,5740,5741],{"class":340},"const ",[53,5743,5744],{"class":344},"{",[53,5746,1195],{"class":340},[53,5748,419],{"class":344},[53,5750,5751],{"class":340}," = await useFetch('/api/data')\n",[53,5753,5754,5756,5758],{"class":55,"line":1882},[53,5755,1964],{"class":344},[53,5757,1716],{"class":387},[53,5759,1722],{"class":344},[300,5761,5763],{"id":5762},"_226-other-breaking-changes","2.2.6 Other breaking changes",[15,5765,5766,5767,5769],{},"In my project, I did not encounter any additional breaking changes or deprecated features that required migration.",[36,5768],{},"\nHowever, depending on your project, you may need to address some of the following changes. Here’s how these aspects differ between Nuxt 2 and Nuxt 3:",[5771,5772,5774],"h5",{"id":5773},"directory-structure","Directory structure",[658,5776,5777,5804],{},[661,5778,5779,5782,5784,5785,4091,5787,4091,5790,4091,5792,4091,5795,4091,5798,4091,5800,4091,5802],{},[68,5780,5781],{},"Nuxt 2:",[36,5783],{},"\nSpecial folders like ",[50,5786,5398],{},[50,5788,5789],{},"store/",[50,5791,698],{},[50,5793,5794],{},"static/",[50,5796,5797],{},"assets/",[50,5799,665],{},[50,5801,674],{},[50,5803,682],{},[661,5805,5806,5809,5811,5812,5814,5815,5817,5818,5820,5821,5823],{},[68,5807,5808],{},"Nuxt 3:",[36,5810],{},"\nNew folders like ",[50,5813,736],{}," (for API routes and middleware), ",[50,5816,690],{}," (for reusable logic).",[36,5819],{},"\nSome folders (like ",[50,5822,5789],{},") are now optional.",[5771,5825,5827],{"id":5826},"global-css-and-assets","Global CSS and assets",[658,5829,5830,5866],{},[661,5831,5832,5834,5836,5837,5839,5840],{},[68,5833,5781],{},[36,5835],{},"\nAdd global CSS in ",[50,5838,4332],{},":\n",[43,5841,5843],{"className":5654,"code":5842,"language":5656,"meta":48,"style":48},"css: [\n '~/assets/css/main.scss'\n]\n",[50,5844,5845,5854,5862],{"__ignoreMap":48},[53,5846,5847,5850,5852],{"class":55,"line":56},[53,5848,5849],{"class":600},"css",[53,5851,391],{"class":344},[53,5853,3399],{"class":340},[53,5855,5856,5858,5860],{"class":55,"line":270},[53,5857,1752],{"class":344},[53,5859,4831],{"class":397},[53,5861,934],{"class":344},[53,5863,5864],{"class":55,"line":354},[53,5865,617],{"class":340},[661,5867,5868,5870,5872,5873,5839,5875],{},[68,5869,5808],{},[36,5871],{},"\nSame principle, but in ",[50,5874,316],{},[43,5876,5877],{"className":320,"code":5842,"language":322,"meta":48,"style":48},[50,5878,5879,5887,5895],{"__ignoreMap":48},[53,5880,5881,5883,5885],{"class":55,"line":56},[53,5882,5849],{"class":600},[53,5884,391],{"class":344},[53,5886,3399],{"class":340},[53,5888,5889,5891,5893],{"class":55,"line":270},[53,5890,1752],{"class":344},[53,5892,4831],{"class":397},[53,5894,934],{"class":344},[53,5896,5897],{"class":55,"line":354},[53,5898,617],{"class":340},[5900,5901,5903],"h6",{"id":5902},"migrating-static-assets-and-favicons","Migrating static assets and favicons",[15,5905,5906,5907,5909,5910,5912],{},"In Nuxt 2, static files such as favicons, robots.txt, and other assets were placed in the static directory.",[36,5908],{},"\nWith Nuxt 3 and Nuxt 4, the static directory has been replaced by public.",[36,5911],{},"\nAll files that should be directly accessible (e.g. /favicon.ico, /site.webmanifest, images for Open Graph, etc.) must now be placed in the public folder at the project root.",[15,5914,5915],{},[68,5916,763],{},[658,5918,5919,5922,5925],{},[661,5920,5921],{},"Move all files from static to public.",[661,5923,5924],{},"Update any references in your configuration or templates if needed.",[661,5926,5927],{},"You can safely delete the old static directory after migrating.",[15,5929,5930,5933,5935],{},[68,5931,5932],{},"Example structure:",[36,5934],{},"\nPLACEHOLDER_EXAMPLE_STRUCTURE",[43,5937,5940],{"className":5938,"code":5939,"language":1159},[1157],"public/\n favicon.ico\n favicon-32x32.png\n favicon-16x16.png\n site.webmanifest\n apple-touch-icon.png\n android-chrome-512x512.png\n android-chrome-192x192.png\n",[50,5941,5939],{"__ignoreMap":48},[15,5943,5944],{},"This ensures that favicons and other static assets are correctly served in Nuxt 3/4.",[5771,5946,5948],{"id":5947},"deprecated-featuresapis","Deprecated features/APIs",[658,5950,5951,5968],{},[661,5952,5953,5955,5957,5958,4091,5961,5964,5965,5967],{},[68,5954,5781],{},[36,5956],{},"\nFeatures like ",[50,5959,5960],{},"context.app",[50,5962,5963],{},"context.store",", automatic injection of ",[50,5966,5630],{},", etc.",[661,5969,5970,5972,5974,5975,5977],{},[68,5971,5808],{},[36,5973],{},"\nMany of these features are removed or replaced by composables (e.g. ",[50,5976,5644],{},", Pinia instead of Vuex, no automatic plugin injection).",[15,5979,5980],{},[68,5981,5982],{},"Import aliases",[658,5984,5985,5997],{},[661,5986,5987,5989,5991,5992,122,5994,5996],{},[68,5988,5781],{},[36,5990],{},"\nUsually ",[50,5993,5373],{},[50,5995,5370],{}," for imports, but sometimes not consistent.",[661,5998,5999,6001,6003,6004,122,6006,6008,6009],{},[68,6000,5808],{},[36,6002],{},"\nThe aliases ",[50,6005,5373],{},[50,6007,5370],{}," are still standard and should be used for all imports:\n",[43,6010,6012],{"className":5654,"code":6011,"language":5656,"meta":48,"style":48},"import MyComponent from '@/components/MyComponent.vue'\nimport { useExample } from '~/composables/useExample'\n",[50,6013,6014,6030],{"__ignoreMap":48},[53,6015,6016,6018,6021,6023,6025,6028],{"class":55,"line":56},[53,6017,914],{"class":329},[53,6019,6020],{"class":340}," MyComponent ",[53,6022,3362],{"class":329},[53,6024,394],{"class":344},[53,6026,6027],{"class":397},"@/components/MyComponent.vue",[53,6029,934],{"class":344},[53,6031,6032,6034,6036,6038,6040,6042,6044,6047],{"class":55,"line":270},[53,6033,914],{"class":329},[53,6035,917],{"class":344},[53,6037,5578],{"class":340},[53,6039,923],{"class":344},[53,6041,926],{"class":329},[53,6043,394],{"class":344},[53,6045,6046],{"class":397},"~/composables/useExample",[53,6048,934],{"class":344},[15,6050,6051,6052,6056],{},"If you do run into issues, consult the ",[73,6053,6055],{"href":4042,"rel":6054},[77],"Nuxt 3 migration guide"," and check the official documentation for any modules or features you use.",[96,6058,6060],{"id":6059},"_23-bonus-nuxt-34-features-folder-structure","2.3 Bonus: Nuxt 3/4 Features & Folder Structure",[300,6062,6064],{"id":6063},"automatic-component-imports","Automatic Component Imports",[15,6066,6067,6068,6070,6071,6073],{},"One of the best quality-of-life improvements in Nuxt 3 and Nuxt 4 is automatic component import.",[36,6069],{},"\nYou no longer need to manually import and register components from your ",[50,6072,674],{}," directory—they are available globally in your templates.",[15,6075,6076],{},[68,6077,6078],{},"Before (Nuxt 2):",[43,6080,6082],{"className":5654,"code":6081,"language":5656,"meta":48,"style":48},"import Header from '~/components/Header.vue'\nexport default {\n components: { Header }\n}\n",[50,6083,6084,6100,6108,6120],{"__ignoreMap":48},[53,6085,6086,6088,6091,6093,6095,6098],{"class":55,"line":56},[53,6087,914],{"class":329},[53,6089,6090],{"class":340}," Header ",[53,6092,3362],{"class":329},[53,6094,394],{"class":344},[53,6096,6097],{"class":397},"~/components/Header.vue",[53,6099,934],{"class":344},[53,6101,6102,6104,6106],{"class":55,"line":270},[53,6103,330],{"class":329},[53,6105,333],{"class":329},[53,6107,592],{"class":344},[53,6109,6110,6112,6114,6116,6118],{"class":55,"line":354},[53,6111,4844],{"class":387},[53,6113,391],{"class":344},[53,6115,917],{"class":344},[53,6117,6090],{"class":340},[53,6119,627],{"class":344},[53,6121,6122],{"class":55,"line":360},[53,6123,627],{"class":344},[15,6125,6126],{},[68,6127,6128],{},"Now (Nuxt 3/4):",[43,6130,6132],{"className":1705,"code":6131,"language":1707,"meta":48,"style":48},"\u003Ctemplate>\n \u003CHeader />\n\u003C/template>\n",[50,6133,6134,6142,6151],{"__ignoreMap":48},[53,6135,6136,6138,6140],{"class":55,"line":56},[53,6137,510],{"class":344},[53,6139,3236],{"class":387},[53,6141,1722],{"class":344},[53,6143,6144,6146,6149],{"class":55,"line":270},[53,6145,3243],{"class":344},[53,6147,6148],{"class":387},"Header",[53,6150,532],{"class":344},[53,6152,6153,6155,6157],{"class":55,"line":354},[53,6154,1964],{"class":344},[53,6156,3236],{"class":387},[53,6158,1722],{"class":344},[15,6160,6161],{},"This makes your code cleaner and easier to maintain!",[300,6163,6165],{"id":6164},"nuxt-4-ready-folder-structure","Nuxt 4-Ready: Folder Structure",[15,6167,6168,6169,6171,6172,6174],{},"With Nuxt 4, some directories are now expected to be inside the new ",[50,6170,644],{}," directory.",[36,6173],{},"\nHere’s how you should organize your project for Nuxt 4 compatibility:",[43,6176,6179],{"className":6177,"code":6178,"language":1159},[1157],"my-nuxt-project/\n│\n├─ app/\n│ ├─ components/\n│ ├─ layouts/\n│ └─ pages/\n│\n├─ assets/\n├─ public/\n├─ server/\n├─ nuxt.config.ts\n├─ package.json\n└─ ...\n",[50,6180,6178],{"__ignoreMap":48},[658,6182,6183,6196],{},[661,6184,6185,6186,4091,6188,6190,6191,6193,6194,6171],{},"Move your ",[50,6187,674],{},[50,6189,665],{},", and ",[50,6192,682],{}," folders into the new ",[50,6195,644],{},[661,6197,6198,6199,4091,6201,6190,6203,6205],{},"Your ",[50,6200,5797],{},[50,6202,742],{},[50,6204,736],{}," folders remain at the project root.",[300,6207,6209],{"id":6208},"nuxt-4-compatibility-option","Nuxt 4 Compatibility Option",[15,6211,6212,6213,391],{},"To make your project Nuxt 4 ready, add the following option to your ",[50,6214,316],{},[15,6216,6217],{},[53,6218,6219],{},"codeblock: nuxt4-future-option",[43,6221,6223],{"className":320,"code":6222,"language":322,"meta":48,"style":48},"export default defineNuxtConfig({\n // ...your other config options\n future: {\n compatibilityVersion: 4,\n },\n})\n",[50,6224,6225,6237,6242,6251,6263,6267],{"__ignoreMap":48},[53,6226,6227,6229,6231,6233,6235],{"class":55,"line":56},[53,6228,330],{"class":329},[53,6230,333],{"class":329},[53,6232,337],{"class":336},[53,6234,341],{"class":340},[53,6236,345],{"class":344},[53,6238,6239],{"class":55,"line":270},[53,6240,6241],{"class":350}," // ...your other config options\n",[53,6243,6244,6247,6249],{"class":55,"line":354},[53,6245,6246],{"class":387}," future",[53,6248,391],{"class":344},[53,6250,592],{"class":344},[53,6252,6253,6256,6258,6261],{"class":55,"line":360},[53,6254,6255],{"class":387}," compatibilityVersion",[53,6257,391],{"class":344},[53,6259,6260],{"class":1903}," 4",[53,6262,870],{"class":344},[53,6264,6265],{"class":55,"line":366},[53,6266,3537],{"class":344},[53,6268,6269,6271],{"class":55,"line":372},[53,6270,419],{"class":344},[53,6272,422],{"class":340},[15,6274,6275],{},"This ensures your project uses the latest conventions and is prepared for the next major version.",[28,6277,1460],{"id":1459},[15,6279,6280],{},"No migration is ever completely smooth, and moving from Nuxt 2 to Nuxt 3 was no exception. Here are some of the main challenges I encountered during the process—and how I solved them:",[96,6282,6284],{"id":6283},"_31-dependency-and-build-issues","3.1 Dependency and Build Issues",[15,6286,6287,6289,6291,6292,6295,6296,634],{},[68,6288,1472],{},[36,6290],{},"\nAfter updating dependencies and running the dev server, I encountered errors like ",[50,6293,6294],{},"Cannot find module 'bindings'"," and issues related to ",[50,6297,6298],{},"@vercel/nft",[15,6300,6301,6303,6305,6306,122,6308,6311,6312,6315,6316,6318],{},[68,6302,1489],{},[36,6304],{},"\nThese errors were caused by leftover or broken dependencies from the old setup. Deleting ",[50,6307,5279],{},[50,6309,6310],{},"package-lock.json"," and running a fresh ",[50,6313,6314],{},"npm install"," resolved the issue.",[36,6317],{},"\nIf you see similar errors, always try a clean install first.",[96,6320,6322],{"id":6321},"_32-typescript-and-linter-errors","3.2 TypeScript and Linter Errors",[15,6324,6325,6327,6329,6330,4333,6332,6334,6335,6337],{},[68,6326,1472],{},[36,6328],{},"\nAfter converting ",[50,6331,4332],{},[50,6333,316],{},", TypeScript complained about ",[50,6336,633],{}," not being found.",[15,6339,6340,6342,6344,6345,562,6347,6349,6350,6352,6353,6355,6356,634],{},[68,6341,1489],{},[36,6343],{},"\nAdd ",[50,6346,561],{},[50,6348,565],{}," to make Nuxt 3’s global types available.",[36,6351],{},"\nIf you see errors about missing or unreadable ",[50,6354,565],{}," files, use a standalone config and do not extend from ",[50,6357,4999],{},[96,6359,6361],{"id":6360},"_33-scsssass-import-and-mixin-problems","3.3 SCSS/Sass Import and Mixin Problems",[15,6363,6364,6366,6368,6369,6372,6373,6375,6376,6379],{},[68,6365,1472],{},[36,6367],{},"\nSass ",[50,6370,6371],{},"@import"," rules are deprecated, and Compass-Mixins are not compatible with Nuxt 3/Vite.",[36,6374],{},"\nI also got errors like ",[50,6377,6378],{},"Undefined mixin"," and warnings about deprecated imports.",[15,6381,6382],{},[68,6383,1489],{},[658,6385,6386,6389,6399],{},[661,6387,6388],{},"Remove all Compass-Mixins and replace them with native CSS.",[661,6390,6391,6392,6394,6395,6398],{},"Switch from ",[50,6393,6371],{}," to the new ",[50,6396,6397],{},"@use"," syntax for SCSS files.",[661,6400,6401,6402,634],{},"If you rely on variables or mixins across files, use the namespace provided by ",[50,6403,6397],{},[96,6405,6407],{"id":6406},"_34-layout-and-styling-differences","3.4 Layout and Styling Differences",[15,6409,6410,6412,6414],{},[68,6411,1472],{},[36,6413],{},"\nAfter migration, the layout looked different:",[658,6416,6417,6420,6423,6426],{},[661,6418,6419],{},"The page had unwanted white margins.",[661,6421,6422],{},"Navigation links were stuck together.",[661,6424,6425],{},"The font was not loading.",[661,6427,6428],{},"The mobile navigation did not behave as expected.",[15,6430,6431],{},[68,6432,1489],{},[658,6434,6435,6442,6445,6452],{},[661,6436,6437,6438,6441],{},"Add ",[50,6439,6440],{},"body { margin: 0; padding: 0; }"," to your global CSS to remove default browser margins.",[661,6443,6444],{},"Add or adjust CSS for the navigation to provide spacing between links.",[661,6446,6447,6448,6451],{},"Update font paths in SCSS to use the new Vite-compatible syntax (e.g. ",[50,6449,6450],{},"@/assets/fonts/vivaldi.ttf",").",[661,6453,6454],{},"For the mobile navigation, implement a burger menu that closes when a link is clicked.",[96,6456,6458],{"id":6457},"_35-general-advice","3.5 General Advice",[658,6460,6461,6464,6467],{},[661,6462,6463],{},"Test your app after every major migration step.",[661,6465,6466],{},"Use browser DevTools to debug layout and CSS issues.",[661,6468,6469],{},"Don’t be afraid to remove legacy code or dependencies that are no longer needed.",[15,6471,6472,6473,6477],{},"Every migration is unique, but most issues can be solved with a bit of patience and by consulting the ",[73,6474,6476],{"href":4042,"rel":6475},[77],"Nuxt 3 documentation"," and community resources.",[28,6479,6481],{"id":6480},"_3x-font-handling-and-modern-scss-in-nuxt-3","3.x Font Handling and Modern SCSS in Nuxt 3",[15,6483,6484],{},"One of the trickier parts of the migration was handling custom fonts and global styles in a way that works reliably with Nuxt 3 and Vite.",[96,6486,6488],{"id":6487},"font-file-location","Font file location",[15,6490,6491,6492,6495,6496,6498],{},"In Nuxt 2, font files could often be placed in the ",[50,6493,6494],{},"assets"," directory and would be processed by Webpack. With Nuxt 3 (and Vite), static assets like fonts and images that are referenced directly in HTML or CSS must be moved to the ",[50,6497,2258],{}," directory. Only then will they be available at the expected path in the final build.",[15,6500,6501],{},[68,6502,6503],{},"Example:",[43,6505,6508],{"className":6506,"code":6507,"language":1159},[1157],"public/fonts/vivaldi.ttf\n",[50,6509,6507],{"__ignoreMap":48},[96,6511,6513],{"id":6512},"global-font-and-style-inclusion","Global font and style inclusion",[15,6515,6516,6517,6519,6520,6522,6523,6525],{},"Previously, it was common to use ",[50,6518,6371],{}," in SCSS to include global styles and fonts. With Nuxt 3 and Dart Sass, ",[50,6521,6371],{}," is deprecated and should be replaced by the new module system using ",[50,6524,6397],{}," and direct inclusion in the Nuxt config.",[15,6527,6528],{},[68,6529,6530],{},"Old approach (deprecated):",[43,6532,6536],{"className":6533,"code":6534,"language":6535,"meta":48,"style":48},"language-scss shiki shiki-themes material-theme","// Old (deprecated)\n@import './fonts.scss';\n","scss",[50,6537,6538,6543],{"__ignoreMap":48},[53,6539,6540],{"class":55,"line":56},[53,6541,6542],{"class":350},"// Old (deprecated)\n",[53,6544,6545,6547,6549,6552,6554],{"class":55,"line":270},[53,6546,6371],{"class":329},[53,6548,394],{"class":344},[53,6550,6551],{"class":397},"./fonts.scss",[53,6553,401],{"class":344},[53,6555,3352],{"class":344},[15,6557,6558],{},[68,6559,6560],{},"Modern approach:",[658,6562,6563,6569],{},[661,6564,6565,6566,634],{},"The global font definition and h1 styling are placed in a dedicated file, e.g. ",[50,6567,6568],{},"assets/css/fonts.scss",[661,6570,6571],{},"This file is included as a global CSS file in the Nuxt configuration.",[43,6573,6575],{"className":6533,"code":6574,"language":6535,"meta":48,"style":48},"@font-face {\n font-family: 'Vivaldi-Regular';\n src: url('/fonts/vivaldi.ttf') format('truetype');\n font-weight: 400;\n font-style: normal;\n}\n\nh1 {\n font-family: 'Vivaldi-Regular', 'Segoe Script', 'sans-serif';\n}\n",[50,6576,6577,6584,6601,6637,6649,6661,6665,6669,6675,6707],{"__ignoreMap":48},[53,6578,6579,6582],{"class":55,"line":56},[53,6580,6581],{"class":329},"@font-face",[53,6583,592],{"class":344},[53,6585,6586,6590,6592,6594,6597,6599],{"class":55,"line":270},[53,6587,6589],{"class":6588},"s6YsC"," font-family",[53,6591,391],{"class":344},[53,6593,394],{"class":344},[53,6595,6596],{"class":397},"Vivaldi-Regular",[53,6598,401],{"class":344},[53,6600,3352],{"class":344},[53,6602,6603,6606,6608,6611,6613,6615,6618,6620,6622,6625,6627,6629,6632,6634],{"class":55,"line":354},[53,6604,6605],{"class":6588}," src",[53,6607,391],{"class":344},[53,6609,6610],{"class":336}," url",[53,6612,341],{"class":344},[53,6614,401],{"class":344},[53,6616,6617],{"class":397},"/fonts/vivaldi.ttf",[53,6619,401],{"class":344},[53,6621,1041],{"class":344},[53,6623,6624],{"class":336}," format",[53,6626,341],{"class":344},[53,6628,401],{"class":344},[53,6630,6631],{"class":397},"truetype",[53,6633,401],{"class":344},[53,6635,6636],{"class":344},");\n",[53,6638,6639,6642,6644,6647],{"class":55,"line":360},[53,6640,6641],{"class":6588}," font-weight",[53,6643,391],{"class":344},[53,6645,6646],{"class":1903}," 400",[53,6648,3352],{"class":344},[53,6650,6651,6654,6656,6659],{"class":55,"line":366},[53,6652,6653],{"class":6588}," font-style",[53,6655,391],{"class":344},[53,6657,6658],{"class":340}," normal",[53,6660,3352],{"class":344},[53,6662,6663],{"class":55,"line":372},[53,6664,627],{"class":344},[53,6666,6667],{"class":55,"line":378},[53,6668,806],{"emptyLinePlaceholder":805},[53,6670,6671,6673],{"class":55,"line":384},[53,6672,11],{"class":600},[53,6674,592],{"class":344},[53,6676,6677,6679,6681,6683,6685,6687,6689,6691,6694,6696,6698,6700,6703,6705],{"class":55,"line":410},[53,6678,6589],{"class":6588},[53,6680,391],{"class":344},[53,6682,394],{"class":344},[53,6684,6596],{"class":397},[53,6686,401],{"class":344},[53,6688,4091],{"class":340},[53,6690,401],{"class":344},[53,6692,6693],{"class":397},"Segoe Script",[53,6695,401],{"class":344},[53,6697,4091],{"class":340},[53,6699,401],{"class":344},[53,6701,6702],{"class":397},"sans-serif",[53,6704,401],{"class":344},[53,6706,3352],{"class":344},[53,6708,6709],{"class":55,"line":416},[53,6710,627],{"class":344},[15,6712,6713],{},[68,6714,6715],{},"Nuxt configuration:",[43,6717,6719],{"className":320,"code":6718,"language":322,"meta":48,"style":48},"import { join } from 'path';\n\nexport default defineNuxtConfig({\n css: [\n join(__dirname, 'assets/css/fonts.scss'),\n join(__dirname, 'assets/css/main.scss')\n ],\n // ... other options ...\n});\n",[50,6720,6721,6742,6746,6758,6766,6785,6802,6808,6813],{"__ignoreMap":48},[53,6722,6723,6725,6727,6730,6732,6734,6736,6738,6740],{"class":55,"line":56},[53,6724,914],{"class":329},[53,6726,917],{"class":344},[53,6728,6729],{"class":340}," join",[53,6731,923],{"class":344},[53,6733,926],{"class":329},[53,6735,394],{"class":344},[53,6737,1257],{"class":397},[53,6739,401],{"class":344},[53,6741,3352],{"class":344},[53,6743,6744],{"class":55,"line":270},[53,6745,806],{"emptyLinePlaceholder":805},[53,6747,6748,6750,6752,6754,6756],{"class":55,"line":354},[53,6749,330],{"class":329},[53,6751,333],{"class":329},[53,6753,337],{"class":336},[53,6755,341],{"class":340},[53,6757,345],{"class":344},[53,6759,6760,6762,6764],{"class":55,"line":360},[53,6761,4820],{"class":387},[53,6763,391],{"class":344},[53,6765,3399],{"class":340},[53,6767,6768,6771,6773,6775,6777,6779,6781,6783],{"class":55,"line":366},[53,6769,6770],{"class":336}," join",[53,6772,1029],{"class":340},[53,6774,404],{"class":344},[53,6776,394],{"class":344},[53,6778,6568],{"class":397},[53,6780,401],{"class":344},[53,6782,1041],{"class":340},[53,6784,870],{"class":344},[53,6786,6787,6789,6791,6793,6795,6798,6800],{"class":55,"line":372},[53,6788,6770],{"class":336},[53,6790,1029],{"class":340},[53,6792,404],{"class":344},[53,6794,394],{"class":344},[53,6796,6797],{"class":397},"assets/css/main.scss",[53,6799,401],{"class":344},[53,6801,422],{"class":340},[53,6803,6804,6806],{"class":55,"line":378},[53,6805,3427],{"class":340},[53,6807,870],{"class":344},[53,6809,6810],{"class":55,"line":384},[53,6811,6812],{"class":350}," // ... other options ...\n",[53,6814,6815,6817,6819],{"class":55,"line":410},[53,6816,419],{"class":344},[53,6818,1041],{"class":340},[53,6820,3352],{"class":344},[15,6822,6823,6825,6826,6829],{},[68,6824,4258],{},"\nUsing ",[50,6827,6828],{},"join(__dirname, ...)"," ensures that the stylesheets are found reliably across different operating systems.",[6831,6832],"hr",{},[15,6834,6835],{},"This approach keeps your font and global style handling future-proof and compatible with the latest Nuxt and Sass best practices.",[28,6837,6839],{"id":6838},"_36-additional-issues-after-removing-old-config-and-enabling-nuxt-4-compatibility","3.6 Additional Issues After Removing Old Config and Enabling Nuxt 4 Compatibility",[15,6841,6842],{},"After removing legacy configuration files and updating the project for Nuxt 4 compatibility, several common migration issues may arise. Here are some general patterns and solutions that apply to most Nuxt 3/4 migrations:",[96,6844,6846],{"id":6845},"_361-scsscss-not-found","3.6.1 SCSS/CSS Not Found",[15,6848,6849,6851,6853,6854,6856],{},[68,6850,1472],{},[36,6852],{},"\nAfter updating the configuration, global SCSS or CSS files may no longer be found.",[36,6855],{},"\nTypical error message:",[43,6858,6861],{"className":6859,"code":6860,"language":1159},[1157],"Pre-transform error: Failed to resolve import \"assets/css/main.scss\"\n",[50,6862,6860],{"__ignoreMap":48},[15,6864,6865],{},[68,6866,1489],{},[658,6868,6869,6872,6875],{},[661,6870,6871],{},"Ensure the path in the css option of your Nuxt config is correct.",[661,6873,6874],{},"Do not use a tilde or leading slash.",[661,6876,6877],{},"In some cases, using an absolute path with a path join helper can help.",[43,6879,6881],{"className":5654,"code":6880,"language":5656,"meta":48,"style":48},"import { join } from 'path'\n\nexport default defineNuxtConfig({\n css: [\n join(__dirname, 'assets/css/main.scss')\n ],\n // ...other config options\n})\n",[50,6882,6883,6901,6905,6917,6925,6941,6947,6952],{"__ignoreMap":48},[53,6884,6885,6887,6889,6891,6893,6895,6897,6899],{"class":55,"line":56},[53,6886,914],{"class":329},[53,6888,917],{"class":344},[53,6890,6729],{"class":340},[53,6892,923],{"class":344},[53,6894,926],{"class":329},[53,6896,394],{"class":344},[53,6898,1257],{"class":397},[53,6900,934],{"class":344},[53,6902,6903],{"class":55,"line":270},[53,6904,806],{"emptyLinePlaceholder":805},[53,6906,6907,6909,6911,6913,6915],{"class":55,"line":354},[53,6908,330],{"class":329},[53,6910,333],{"class":329},[53,6912,337],{"class":336},[53,6914,341],{"class":340},[53,6916,345],{"class":344},[53,6918,6919,6921,6923],{"class":55,"line":360},[53,6920,4820],{"class":387},[53,6922,391],{"class":344},[53,6924,3399],{"class":340},[53,6926,6927,6929,6931,6933,6935,6937,6939],{"class":55,"line":366},[53,6928,6770],{"class":336},[53,6930,1029],{"class":340},[53,6932,404],{"class":344},[53,6934,394],{"class":344},[53,6936,6797],{"class":397},[53,6938,401],{"class":344},[53,6940,422],{"class":340},[53,6942,6943,6945],{"class":55,"line":372},[53,6944,3427],{"class":340},[53,6946,870],{"class":344},[53,6948,6949],{"class":55,"line":378},[53,6950,6951],{"class":350}," // ...other config options\n",[53,6953,6954,6956],{"class":55,"line":384},[53,6955,419],{"class":344},[53,6957,422],{"class":340},[15,6959,6960],{},"Always clear the cache after such changes:",[658,6962,6963],{},[661,6964,6965],{},"Delete node_modules, .nuxt, and your lock file, then reinstall dependencies and restart the dev server.",[96,6967,6969],{"id":6968},"_362-images-not-found","3.6.2 Images Not Found",[15,6971,6972,6974,6976,6977,6856],{},[68,6973,1472],{},[36,6975],{},"\nAfter switching to Nuxt 3/4 and Vite, images previously loaded from the assets folder may no longer be found in templates.",[36,6978],{},[43,6980,6983],{"className":6981,"code":6982,"language":1159},[1157],"Failed to resolve import \"/img/kanne.jpg\"\n",[50,6984,6982],{"__ignoreMap":48},[15,6986,6987],{},[68,6988,1489],{},[658,6990,6991,6994],{},[661,6992,6993],{},"Images used in templates (e.g. img src) must be moved to the public folder.",[661,6995,6996],{},"Update the paths in your templates to point to the correct location.",[43,6998,7002],{"className":6999,"code":7000,"language":7001,"meta":48,"style":48},"language-html shiki shiki-themes material-theme","\u003Cimg src=\"/img/example.jpg\" alt=\"Example\">\n\u003Cimg src=\"/img/gallery/picture.png\" alt=\"Gallery Picture\">\n\u003Cimg src=\"/img/layout/header.jpg\" alt=\"Header\">\n","html",[50,7003,7004,7037,7067],{"__ignoreMap":48},[53,7005,7006,7008,7011,7014,7016,7018,7021,7023,7026,7028,7030,7033,7035],{"class":55,"line":56},[53,7007,510],{"class":344},[53,7009,7010],{"class":387},"img",[53,7012,7013],{"class":584}," src",[53,7015,521],{"class":344},[53,7017,524],{"class":344},[53,7019,7020],{"class":397},"/img/example.jpg",[53,7022,524],{"class":344},[53,7024,7025],{"class":584}," alt",[53,7027,521],{"class":344},[53,7029,524],{"class":344},[53,7031,7032],{"class":397},"Example",[53,7034,524],{"class":344},[53,7036,1722],{"class":344},[53,7038,7039,7041,7043,7045,7047,7049,7052,7054,7056,7058,7060,7063,7065],{"class":55,"line":270},[53,7040,510],{"class":344},[53,7042,7010],{"class":387},[53,7044,7013],{"class":584},[53,7046,521],{"class":344},[53,7048,524],{"class":344},[53,7050,7051],{"class":397},"/img/gallery/picture.png",[53,7053,524],{"class":344},[53,7055,7025],{"class":584},[53,7057,521],{"class":344},[53,7059,524],{"class":344},[53,7061,7062],{"class":397},"Gallery Picture",[53,7064,524],{"class":344},[53,7066,1722],{"class":344},[53,7068,7069,7071,7073,7075,7077,7079,7082,7084,7086,7088,7090,7092,7094],{"class":55,"line":354},[53,7070,510],{"class":344},[53,7072,7010],{"class":387},[53,7074,7013],{"class":584},[53,7076,521],{"class":344},[53,7078,524],{"class":344},[53,7080,7081],{"class":397},"/img/layout/header.jpg",[53,7083,524],{"class":344},[53,7085,7025],{"class":584},[53,7087,521],{"class":344},[53,7089,524],{"class":344},[53,7091,6148],{"class":397},[53,7093,524],{"class":344},[53,7095,1722],{"class":344},[96,7097,7099],{"id":7098},"_363-powershell-copying-images","3.6.3 PowerShell: Copying Images",[15,7101,7102,7104,7106],{},[68,7103,1472],{},[36,7105],{},"\nWhen copying images on Windows PowerShell, Unix commands like && or cp do not work.",[15,7108,7109],{},[68,7110,1489],{},[658,7112,7113],{},[661,7114,7115],{},"Create the folder structure with mkdir and use Copy-Item to move the images.",[15,7117,7118],{},"for windows users",[43,7120,7124],{"className":7121,"code":7122,"language":7123,"meta":48,"style":48},"language-PowerShell shiki shiki-themes material-theme","mkdir public\\img\nmkdir public\\img\\gallery\nmkdir public\\img\\layout\n\nCopy-Item assets\\img\\example.jpg public\\img\\\nCopy-Item assets\\img\\gallery\\* public\\img\\gallery\\\nCopy-Item assets\\img\\layout\\* public\\img\\layout\\\n","PowerShell",[50,7125,7126,7131,7136,7141,7145,7150,7155],{"__ignoreMap":48},[53,7127,7128],{"class":55,"line":56},[53,7129,7130],{},"mkdir public\\img\n",[53,7132,7133],{"class":55,"line":270},[53,7134,7135],{},"mkdir public\\img\\gallery\n",[53,7137,7138],{"class":55,"line":354},[53,7139,7140],{},"mkdir public\\img\\layout\n",[53,7142,7143],{"class":55,"line":360},[53,7144,806],{"emptyLinePlaceholder":805},[53,7146,7147],{"class":55,"line":366},[53,7148,7149],{},"Copy-Item assets\\img\\example.jpg public\\img\\\n",[53,7151,7152],{"class":55,"line":372},[53,7153,7154],{},"Copy-Item assets\\img\\gallery\\* public\\img\\gallery\\\n",[53,7156,7157],{"class":55,"line":378},[53,7158,7159],{},"Copy-Item assets\\img\\layout\\* public\\img\\layout\\\n",[15,7161,7162],{},"for linux macos users",[43,7164,7168],{"className":7165,"code":7166,"language":7167,"meta":48,"style":48},"language-Bash shiki shiki-themes material-theme","mkdir -p public/img/gallery\nmkdir -p public/img/layout\n\ncp assets/img/example.jpg public/img/\ncp assets/img/gallery/* public/img/gallery/\ncp assets/img/layout/* public/img/layout/\n","Bash",[50,7169,7170,7175,7180,7184,7189,7194],{"__ignoreMap":48},[53,7171,7172],{"class":55,"line":56},[53,7173,7174],{},"mkdir -p public/img/gallery\n",[53,7176,7177],{"class":55,"line":270},[53,7178,7179],{},"mkdir -p public/img/layout\n",[53,7181,7182],{"class":55,"line":354},[53,7183,806],{"emptyLinePlaceholder":805},[53,7185,7186],{"class":55,"line":360},[53,7187,7188],{},"cp assets/img/example.jpg public/img/\n",[53,7190,7191],{"class":55,"line":366},[53,7192,7193],{},"cp assets/img/gallery/* public/img/gallery/\n",[53,7195,7196],{"class":55,"line":372},[53,7197,7198],{},"cp assets/img/layout/* public/img/layout/\n",[96,7200,7202],{"id":7201},"_364-scss-font-face-must-be-top-level","3.6.4 SCSS: @font-face Must Be Top-Level",[15,7204,7205,7207,7209,7210,7212],{},[68,7206,1472],{},[36,7208],{},"\nA SCSS error may occur if the @font-face rule is nested inside a selector.",[36,7211],{},"\nThis causes the entire SCSS file to fail processing.",[15,7214,7215],{},[68,7216,1489],{},[658,7218,7219],{},[661,7220,7221],{},"The @font-face rule must be at the top level, not nested.",[43,7223,7225],{"className":6533,"code":7224,"language":6535,"meta":48,"style":48},"@font-face {\n font-family: 'custom-font';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url('@/assets/fonts/custom-font.ttf') format('truetype');\n}\n\nh1 {\n font-family: 'custom-font', 'Segoe Script', 'sans-serif';\n}\n",[50,7226,7227,7233,7248,7258,7268,7280,7311,7315,7319,7325,7355],{"__ignoreMap":48},[53,7228,7229,7231],{"class":55,"line":56},[53,7230,6581],{"class":329},[53,7232,592],{"class":344},[53,7234,7235,7237,7239,7241,7244,7246],{"class":55,"line":270},[53,7236,6589],{"class":6588},[53,7238,391],{"class":344},[53,7240,394],{"class":344},[53,7242,7243],{"class":397},"custom-font",[53,7245,401],{"class":344},[53,7247,3352],{"class":344},[53,7249,7250,7252,7254,7256],{"class":55,"line":354},[53,7251,6653],{"class":6588},[53,7253,391],{"class":344},[53,7255,6658],{"class":340},[53,7257,3352],{"class":344},[53,7259,7260,7262,7264,7266],{"class":55,"line":360},[53,7261,6641],{"class":6588},[53,7263,391],{"class":344},[53,7265,6646],{"class":1903},[53,7267,3352],{"class":344},[53,7269,7270,7273,7275,7278],{"class":55,"line":366},[53,7271,7272],{"class":6588}," font-display",[53,7274,391],{"class":344},[53,7276,7277],{"class":340}," swap",[53,7279,3352],{"class":344},[53,7281,7282,7284,7286,7288,7290,7292,7295,7297,7299,7301,7303,7305,7307,7309],{"class":55,"line":372},[53,7283,6605],{"class":6588},[53,7285,391],{"class":344},[53,7287,6610],{"class":336},[53,7289,341],{"class":344},[53,7291,401],{"class":344},[53,7293,7294],{"class":397},"@/assets/fonts/custom-font.ttf",[53,7296,401],{"class":344},[53,7298,1041],{"class":344},[53,7300,6624],{"class":336},[53,7302,341],{"class":344},[53,7304,401],{"class":344},[53,7306,6631],{"class":397},[53,7308,401],{"class":344},[53,7310,6636],{"class":344},[53,7312,7313],{"class":55,"line":378},[53,7314,627],{"class":344},[53,7316,7317],{"class":55,"line":384},[53,7318,806],{"emptyLinePlaceholder":805},[53,7320,7321,7323],{"class":55,"line":410},[53,7322,11],{"class":600},[53,7324,592],{"class":344},[53,7326,7327,7329,7331,7333,7335,7337,7339,7341,7343,7345,7347,7349,7351,7353],{"class":55,"line":416},[53,7328,6589],{"class":6588},[53,7330,391],{"class":344},[53,7332,394],{"class":344},[53,7334,7243],{"class":397},[53,7336,401],{"class":344},[53,7338,4091],{"class":340},[53,7340,401],{"class":344},[53,7342,6693],{"class":397},[53,7344,401],{"class":344},[53,7346,4091],{"class":340},[53,7348,401],{"class":344},[53,7350,6702],{"class":397},[53,7352,401],{"class":344},[53,7354,3352],{"class":344},[53,7356,7357],{"class":55,"line":1882},[53,7358,627],{"class":344},[96,7360,7362],{"id":7361},"_365-lessons-learned","3.6.5 Lessons Learned",[15,7364,7365,7366,7368],{},"Especially after removing old config files and switching to Nuxt 4 standards, many legacy issues become visible.",[36,7367],{},"\nKey takeaways:",[658,7370,7371,7374,7377,7380],{},[661,7372,7373],{},"Paths and imports must be exact.",[661,7375,7376],{},"Assets and static files must be strictly separated.",[661,7378,7379],{},"Clear caches regularly.",[661,7381,7382],{},"Pay attention to SCSS syntax.",[28,7384,3800],{"id":3799},[96,7386,3804],{"id":3803},[15,7388,7389],{},"Migrating from Nuxt 2 to Nuxt 3 was both a challenge and a great learning experience. While the process required a deep dive into the new architecture, updated conventions, and breaking changes, the end result is a more modern, maintainable, and performant codebase. The new features of Nuxt 3—like the Composition API, Vite integration, and the new directory structure—make development more enjoyable and future-proof.",[96,7391,3843],{"id":3842},[658,7393,7394,7400,7406,7412,7418,7424,7430,7436],{},[661,7395,7396,7399],{},[68,7397,7398],{},"Read the official migration guide"," before you start. It will save you a lot of time and confusion.",[661,7401,7402,7405],{},[68,7403,7404],{},"Take it step by step:"," Update dependencies, migrate config and structure, then tackle code and styling issues.",[661,7407,7408,7411],{},[68,7409,7410],{},"Expect to break things:"," Don’t be discouraged by errors—most are solvable with a bit of research and patience.",[661,7413,7414,7417],{},[68,7415,7416],{},"Test early and often:"," Run your app after every major change to catch issues before they pile up.",[661,7419,7420,7423],{},[68,7421,7422],{},"Clean up your codebase:"," Use the migration as an opportunity to remove unused dependencies, legacy code, and outdated patterns.",[661,7425,7426,7429],{},[68,7427,7428],{},"Leverage the community:"," If you get stuck, search GitHub issues, Discord, or the Nuxt forums—chances are, someone else had the same problem.",[661,7431,7432,7435],{},[68,7433,7434],{},"Work in a dedicated migration branch:"," This keeps your production code safe and lets you experiment freely.",[661,7437,7438,7441],{},[68,7439,7440],{},"Document your process:"," Writing down each step (or blogging about it) is invaluable for yourself and others.",[96,7443,3881],{"id":3880},[658,7445,7446,7452,7458],{},[661,7447,7448,7451],{},[68,7449,7450],{},"Plan more time for CSS and layout adjustments:"," Small differences in how styles are handled can have a big impact.",[661,7453,7454,7457],{},[68,7455,7456],{},"Be prepared for subtle differences in tooling:"," Especially with Vite and modern Sass, some things work differently than in the old Webpack world.",[661,7459,7460,7463],{},[68,7461,7462],{},"Consider a full rewrite for very old projects:"," Sometimes, starting from scratch with Nuxt 3 and porting over only the essentials is faster and cleaner.",[15,7465,7466,7468,7470],{},[68,7467,3900],{},[36,7469],{},"\nThe migration to Nuxt 3 is absolutely worth it for most projects. The ecosystem is moving forward, and the new features and performance improvements are significant. With a bit of patience and a systematic approach, you’ll end up with a codebase that’s ready for the future.",[15,7472,7473],{},"Good luck with your own migration!",[3908,7475,7476],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .s6cf3, html code.shiki .s6cf3{--shiki-default:#89DDFF;--shiki-default-font-style:italic}html pre.shiki code .sdLwU, html code.shiki .sdLwU{--shiki-default:#82AAFF}html pre.shiki code .svy0-, html code.shiki .svy0-{--shiki-default:#EEFFFF}html pre.shiki code .sAklC, html code.shiki .sAklC{--shiki-default:#89DDFF}html pre.shiki code .s0_hs, html code.shiki .s0_hs{--shiki-default:#546E7A;--shiki-default-font-style:italic}html pre.shiki code .s-wAU, html code.shiki .s-wAU{--shiki-default:#F07178}html pre.shiki code .sbqyR, html code.shiki .sbqyR{--shiki-default:#FF9CAC}html pre.shiki code .sfyAc, html code.shiki .sfyAc{--shiki-default:#C3E88D}html pre.shiki code .sJ14y, html code.shiki .sJ14y{--shiki-default:#C792EA}html pre.shiki code .s5Dmg, html code.shiki .s5Dmg{--shiki-default:#FFCB6B}html pre.shiki code .sx098, html code.shiki .sx098{--shiki-default:#F78C6C}html pre.shiki code .sLFUT, html code.shiki .sLFUT{--shiki-default:#EEFFFF;--shiki-default-font-style:italic}html pre.shiki code .s6YsC, html code.shiki .s6YsC{--shiki-default:#B2CCD6}",{"title":48,"searchDepth":270,"depth":270,"links":7478},[7479,7480,7485,7492,7496,7503],{"id":30,"depth":270,"text":31},{"id":93,"depth":270,"text":94,"children":7481},[7482,7483,7484],{"id":98,"depth":354,"text":99},{"id":4306,"depth":354,"text":4307},{"id":6059,"depth":354,"text":6060},{"id":1459,"depth":270,"text":1460,"children":7486},[7487,7488,7489,7490,7491],{"id":6283,"depth":354,"text":6284},{"id":6321,"depth":354,"text":6322},{"id":6360,"depth":354,"text":6361},{"id":6406,"depth":354,"text":6407},{"id":6457,"depth":354,"text":6458},{"id":6480,"depth":270,"text":6481,"children":7493},[7494,7495],{"id":6487,"depth":354,"text":6488},{"id":6512,"depth":354,"text":6513},{"id":6838,"depth":270,"text":6839,"children":7497},[7498,7499,7500,7501,7502],{"id":6845,"depth":354,"text":6846},{"id":6968,"depth":354,"text":6969},{"id":7098,"depth":354,"text":7099},{"id":7201,"depth":354,"text":7202},{"id":7361,"depth":354,"text":7362},{"id":3799,"depth":270,"text":3800,"children":7504},[7505,7506,7507],{"id":3803,"depth":354,"text":3804},{"id":3842,"depth":354,"text":3843},{"id":3880,"depth":354,"text":3881},[3934],"2025-07-11","A Real-World Migration",null,{"htmlAttrs":7513,"link":7514,"meta":7516},{"lang":3942},[7515],{"rel":3945,"type":3946,"href":3947},[7517,7519,7520,7521,7522,7523,7524,7525,7526,7527,7528],{"name":3950,"content":7518},"programming, coding, vue, nuxt, jekyll",{"name":3953,"content":3954},{"name":3956,"content":3957},{"name":3959,"content":3988},{"name":3962,"content":7510},{"name":3964,"content":3965},{"name":3967,"content":3968},{"name":3970,"content":3988},{"name":3972,"content":7510},{"name":3974,"content":3975},{"name":3977,"content":3095},{"excerpt_separator":7530},"\u003C!-- EXCERPT_END -->","/blog/2025/migrate-nuxt2-to-nuxt3",{"title":3988,"description":7510},"blog/2025/migrate-nuxt2-to-nuxt3",[3934,3984,1707,105],"E_bOK4X6bmdhhdB-4l3A52UBTC3xRhbaVg8dYo-bVPQ",{"id":7537,"title":7538,"body":7539,"categories":15396,"date":15397,"description":15398,"draft":3937,"excerpt":7511,"extension":3939,"head":15399,"meta":15416,"navigation":805,"path":15417,"seo":15418,"stem":15419,"tags":15420,"__hash__":15422},"blog/blog/2024/switch-from-jekyll-to-nuxt.md","Switch from Jekyll to Nuxt",{"type":8,"value":7540,"toc":15382},[7541,7544,7547,7550,7553,7557,7560,7563,7574,7577,7581,7584,7589,7774,7779,7821,7826,7868,7873,7915,7920,7962,7968,10589,10592,10598,10608,10612,10629,10633,11098,11102,12687,12691,13111,13115,13118,13121,13130,13133,13178,13191,13202,13210,13256,13260,13263,13272,13275,13334,13337,13340,13349,13356,13401,13417,13421,13424,13434,13438,13503,13518,13522,13525,13565,13568,13578,13581,13618,13621,13856,13859,14450,14453,14939,14942,14951,14955,14958,14961,14964,14969,14972,14975,14991,14994,15004,15356,15359,15363,15379],[11,7542,7538],{"id":7543},"switch-from-jekyll-to-nuxt",[15,7545,7546],{},"I haven't use ruby for a while but more and more js/ts (especially vue) so i decided to switch from jekyll to nuxt, as I also like the benefits of autoloading components and server-side rendering with Nuxt.",[15,7548,7549],{},"Also, in Nuxt, using NuxtContent, like in jekyll, I can save my content as markdown, which is then converted to html.",[15,7551,7552],{},"so the journey begins",[28,7554,7556],{"id":7555},"initializing-a-new-nuxt-project","initializing a new nuxt project",[15,7558,7559],{},"initializing a new nuxt project is very easy.",[15,7561,7562],{},"just run",[43,7564,7568],{"className":7565,"code":7566,"language":7567,"meta":48,"style":48},"language-console shiki shiki-themes material-theme","npx nuxi@latest init \u003Cproject-name>\n","console",[50,7569,7570],{"__ignoreMap":48},[53,7571,7572],{"class":55,"line":56},[53,7573,7566],{},[15,7575,7576],{},"Then you will be asked on the console to select a package manager (I use npm) and you will be asked whether you want to initialize a git repo right away. That's it.",[28,7578,7580],{"id":7579},"dummy-content-layout","Dummy Content & Layout",[15,7582,7583],{},"I created the pages folder and saved some files with dummy content there. It should only help to adopt the design. Later we will use NuxtContent. Then we just need to copy the Markdown files from the Jekyll project. I also already replaced Nuxt's favicon with my own.",[658,7585,7586],{},[661,7587,7588],{},"about.vue",[43,7590,7592],{"className":1705,"code":7591,"language":1707,"meta":48,"style":48},"\u003Ctemplate>\n \u003Carticle class=\"post\">\n \u003Cheader class=\"post-header\">\n \u003Ch1 class=\"post-title\">About\u003C/h1>\n \u003C/header>\n\n \u003Cdiv class=\"post-content\">\n \u003Ch1 id=\"about-this-blog\">About this blog\u003C/h1>\n \u003Cp>Hello, my name is Melchior. In the past I posted various things on this blog, but decided to focus more on technical post. However, this does not mean that there is not something else to read here. I have also decided to write my posts in English in the future. Have fun reading my posts. They may also be useful for one or the other, even if I am now primarily writing them for myself in order to deepen topics.\u003C/p>\n \u003C/div>\n \u003C/article>\n\u003C/template>\n",[50,7593,7594,7602,7621,7641,7671,7680,7684,7704,7733,7750,7758,7766],{"__ignoreMap":48},[53,7595,7596,7598,7600],{"class":55,"line":56},[53,7597,510],{"class":344},[53,7599,3236],{"class":387},[53,7601,1722],{"class":344},[53,7603,7604,7606,7608,7610,7612,7614,7617,7619],{"class":55,"line":270},[53,7605,3243],{"class":344},[53,7607,3246],{"class":387},[53,7609,3249],{"class":584},[53,7611,521],{"class":344},[53,7613,524],{"class":344},[53,7615,7616],{"class":397},"post",[53,7618,524],{"class":344},[53,7620,1722],{"class":344},[53,7622,7623,7625,7628,7630,7632,7634,7637,7639],{"class":55,"line":354},[53,7624,3265],{"class":344},[53,7626,7627],{"class":387},"header",[53,7629,3249],{"class":584},[53,7631,521],{"class":344},[53,7633,524],{"class":344},[53,7635,7636],{"class":397},"post-header",[53,7638,524],{"class":344},[53,7640,1722],{"class":344},[53,7642,7643,7646,7648,7650,7652,7654,7657,7659,7662,7665,7667,7669],{"class":55,"line":360},[53,7644,7645],{"class":344}," \u003C",[53,7647,11],{"class":387},[53,7649,3249],{"class":584},[53,7651,521],{"class":344},[53,7653,524],{"class":344},[53,7655,7656],{"class":397},"post-title",[53,7658,524],{"class":344},[53,7660,7661],{"class":344},">",[53,7663,7664],{"class":340},"About",[53,7666,1964],{"class":344},[53,7668,11],{"class":387},[53,7670,1722],{"class":344},[53,7672,7673,7676,7678],{"class":55,"line":366},[53,7674,7675],{"class":344}," \u003C/",[53,7677,7627],{"class":387},[53,7679,1722],{"class":344},[53,7681,7682],{"class":55,"line":372},[53,7683,806],{"emptyLinePlaceholder":805},[53,7685,7686,7688,7691,7693,7695,7697,7700,7702],{"class":55,"line":378},[53,7687,3265],{"class":344},[53,7689,7690],{"class":387},"div",[53,7692,3249],{"class":584},[53,7694,521],{"class":344},[53,7696,524],{"class":344},[53,7698,7699],{"class":397},"post-content",[53,7701,524],{"class":344},[53,7703,1722],{"class":344},[53,7705,7706,7708,7710,7713,7715,7717,7720,7722,7724,7727,7729,7731],{"class":55,"line":384},[53,7707,7645],{"class":344},[53,7709,11],{"class":387},[53,7711,7712],{"class":584}," id",[53,7714,521],{"class":344},[53,7716,524],{"class":344},[53,7718,7719],{"class":397},"about-this-blog",[53,7721,524],{"class":344},[53,7723,7661],{"class":344},[53,7725,7726],{"class":340},"About this blog",[53,7728,1964],{"class":344},[53,7730,11],{"class":387},[53,7732,1722],{"class":344},[53,7734,7735,7737,7739,7741,7744,7746,7748],{"class":55,"line":410},[53,7736,7645],{"class":344},[53,7738,15],{"class":387},[53,7740,7661],{"class":344},[53,7742,7743],{"class":340},"Hello, my name is Melchior. In the past I posted various things on this blog, but decided to focus more on technical post. However, this does not mean that there is not something else to read here. I have also decided to write my posts in English in the future. Have fun reading my posts. They may also be useful for one or the other, even if I am now primarily writing them for myself in order to deepen topics.",[53,7745,1964],{"class":344},[53,7747,15],{"class":387},[53,7749,1722],{"class":344},[53,7751,7752,7754,7756],{"class":55,"line":416},[53,7753,7675],{"class":344},[53,7755,7690],{"class":387},[53,7757,1722],{"class":344},[53,7759,7760,7762,7764],{"class":55,"line":1882},[53,7761,3300],{"class":344},[53,7763,3246],{"class":387},[53,7765,1722],{"class":344},[53,7767,7768,7770,7772],{"class":55,"line":1888},[53,7769,1964],{"class":344},[53,7771,3236],{"class":387},[53,7773,1722],{"class":344},[658,7775,7776],{},[661,7777,7778],{},"datenschutzerklaerung.vue",[43,7780,7782],{"className":1705,"code":7781,"language":1707,"meta":48,"style":48},"\u003Ctemplate>\n \u003Cdiv>\n datenschutzerklaerung\n \u003C/div>\n\u003C/template>\n",[50,7783,7784,7792,7800,7805,7813],{"__ignoreMap":48},[53,7785,7786,7788,7790],{"class":55,"line":56},[53,7787,510],{"class":344},[53,7789,3236],{"class":387},[53,7791,1722],{"class":344},[53,7793,7794,7796,7798],{"class":55,"line":270},[53,7795,3243],{"class":344},[53,7797,7690],{"class":387},[53,7799,1722],{"class":344},[53,7801,7802],{"class":55,"line":354},[53,7803,7804],{"class":340}," datenschutzerklaerung\n",[53,7806,7807,7809,7811],{"class":55,"line":360},[53,7808,3300],{"class":344},[53,7810,7690],{"class":387},[53,7812,1722],{"class":344},[53,7814,7815,7817,7819],{"class":55,"line":366},[53,7816,1964],{"class":344},[53,7818,3236],{"class":387},[53,7820,1722],{"class":344},[658,7822,7823],{},[661,7824,7825],{},"impressum.vue",[43,7827,7829],{"className":1705,"code":7828,"language":1707,"meta":48,"style":48},"\u003Ctemplate>\n \u003Cdiv>\n impressum\n \u003C/div>\n\u003C/template>\n",[50,7830,7831,7839,7847,7852,7860],{"__ignoreMap":48},[53,7832,7833,7835,7837],{"class":55,"line":56},[53,7834,510],{"class":344},[53,7836,3236],{"class":387},[53,7838,1722],{"class":344},[53,7840,7841,7843,7845],{"class":55,"line":270},[53,7842,3243],{"class":344},[53,7844,7690],{"class":387},[53,7846,1722],{"class":344},[53,7848,7849],{"class":55,"line":354},[53,7850,7851],{"class":340}," impressum\n",[53,7853,7854,7856,7858],{"class":55,"line":360},[53,7855,3300],{"class":344},[53,7857,7690],{"class":387},[53,7859,1722],{"class":344},[53,7861,7862,7864,7866],{"class":55,"line":366},[53,7863,1964],{"class":344},[53,7865,3236],{"class":387},[53,7867,1722],{"class":344},[658,7869,7870],{},[661,7871,7872],{},"index.vue",[43,7874,7876],{"className":1705,"code":7875,"language":1707,"meta":48,"style":48},"\u003Ctemplate>\n \u003Cdiv>\n home\n \u003C/div>\n\u003C/template>\n",[50,7877,7878,7886,7894,7899,7907],{"__ignoreMap":48},[53,7879,7880,7882,7884],{"class":55,"line":56},[53,7881,510],{"class":344},[53,7883,3236],{"class":387},[53,7885,1722],{"class":344},[53,7887,7888,7890,7892],{"class":55,"line":270},[53,7889,3243],{"class":344},[53,7891,7690],{"class":387},[53,7893,1722],{"class":344},[53,7895,7896],{"class":55,"line":354},[53,7897,7898],{"class":340}," home\n",[53,7900,7901,7903,7905],{"class":55,"line":360},[53,7902,3300],{"class":344},[53,7904,7690],{"class":387},[53,7906,1722],{"class":344},[53,7908,7909,7911,7913],{"class":55,"line":366},[53,7910,1964],{"class":344},[53,7912,3236],{"class":387},[53,7914,1722],{"class":344},[658,7916,7917],{},[661,7918,7919],{},"links.vue",[43,7921,7923],{"className":1705,"code":7922,"language":1707,"meta":48,"style":48},"\u003Ctemplate>\n \u003Cdiv>\n links\n \u003C/div>\n\u003C/template>\n",[50,7924,7925,7933,7941,7946,7954],{"__ignoreMap":48},[53,7926,7927,7929,7931],{"class":55,"line":56},[53,7928,510],{"class":344},[53,7930,3236],{"class":387},[53,7932,1722],{"class":344},[53,7934,7935,7937,7939],{"class":55,"line":270},[53,7936,3243],{"class":344},[53,7938,7690],{"class":387},[53,7940,1722],{"class":344},[53,7942,7943],{"class":55,"line":354},[53,7944,7945],{"class":340}," links\n",[53,7947,7948,7950,7952],{"class":55,"line":360},[53,7949,3300],{"class":344},[53,7951,7690],{"class":387},[53,7953,1722],{"class":344},[53,7955,7956,7958,7960],{"class":55,"line":366},[53,7957,1964],{"class":344},[53,7959,3236],{"class":387},[53,7961,1722],{"class":344},[15,7963,7964,7965,7967],{},"then I created the layout in the ",[50,7966,714],{},"-file and transferred the design with a few small changes. What I changed, for example, is that this time I wanted to have a mobile-first design, which can also serve as a fallback for larger screens if things aren't supported there.",[43,7969,7971],{"className":1705,"code":7970,"language":1707,"meta":48,"style":48},"\u003Ctemplate>\n \u003Cdiv class=\"pageWrapper\">\n \u003Cheader class=\"pageHeader\">\n \u003Cdiv class=\"branding\">\n \u003CNuxtLink to=\"/\" class=\"logo\">mjk @ web\u003C/NuxtLink>\n \u003C/div>\n \u003C!-- Navigation -->\n \u003Cnav :class=\"{ active: isMenuOpen }\">\n \u003Cul class=\"mainNav\">\n \u003Cli>\u003CNuxtLink to=\"/about\" @click=\"hideMenu\">About\u003C/NuxtLink>\u003C/li>\n \u003Cli>\u003CNuxtLink to=\"/links\" @click=\"hideMenu\">Links\u003C/NuxtLink>\u003C/li>\n \u003Cli>\u003CNuxtLink to=\"/datenschutzerklaerung\" @click=\"hideMenu\">Datenschutz-Erklärung\u003C/NuxtLink>\u003C/li>\n \u003Cli>\u003CNuxtLink to=\"/impressum\" @click=\"hideMenu\">Impressum\u003C/NuxtLink>\u003C/li>\n \u003C/ul>\n \u003C/nav>\n \u003C!-- Hamburger Menu -->\n \u003Cdiv class=\"hamburgerMenu\" @click=\"toggleMenu\">\n \u003Cspan>\u003C/span>\n \u003Cspan>\u003C/span>\n \u003Cspan>\u003C/span>\n \u003C/div>\n \u003C/header>\n \u003Cdiv class=\"pageContent\">\n \u003CNuxtPage />\n \u003C/div>\n \u003Cfooter>footer\u003C/footer>\n \u003C/div>\n\u003C/template>\n\n\u003Cscript>\nexport default {\n data() {\n return {\n isMenuOpen: false,\n };\n },\n methods: {\n toggleMenu() {\n this.isMenuOpen = !this.isMenuOpen;\n },\n\n hideMenu() {\n this.isMenuOpen = false;\n },\n },\n};\n\u003C/script>\n\n\u003Cstyle>\n/* Mobile-First Design */\n\n/* Basic-Styling for mobile Devices */\nbody {\n background-color: #213c5b;\n margin: 0;\n font-family: Arial, sans-serif;\n}\n.pageWrapper {\n display: flex;\n flex-direction: column;\n min-height: 100vh;\n max-width: 1024px;\n margin-right: auto;\n margin-left: auto;\n}\n.pageHeader {\n color: black;\n min-height: 56px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding-left: 1rem;\n padding-right: 1rem;\n background: #1e6695;\n background: -moz-linear-gradient(top, #1e6695 0%, #74aacc 33%, #79aecb 66%, #2f4a66 100%);\n background: -webkit-linear-gradient(top, #1e6695 0%, #74aacc 33%, #79aecb 66%, #2f4a66 100%);\n background: linear-gradient(to bottom, #1e6695 0%, #74aacc 33%, #79aecb 66%, #2f4a66 100%);\n filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#1e6695', endColorstr='#2f4a66',GradientType=0 );\n}\n\n/* Branding */\n.branding .logo {\n font-size: 1.5rem;\n text-decoration: none;\n color: black;\n}\n\n/* Navigation */\nnav {\n display: none;\n}\n.mainNav {\n display: flex;\n flex-direction: column;\n gap: 1rem;\n list-style: none;\n margin: 0;\n padding: 1rem;\n background-color: #819cbb;\n border-radius: 0.5rem;\n box-shadow: 0 4px 6px rgba(0, 0, 0, 0.3);\n}\n.mainNav li a {\n text-decoration: none;\n color: black;\n transition: color 0.3s;\n}\n\n/* Hamburger Menu */\n.hamburgerMenu {\n display: flex;\n flex-direction: column;\n gap: 0.3rem;\n cursor: pointer;\n}\n.hamburgerMenu span {\n width: 25px;\n height: 3px;\n background-color: black;\n}\n\n/* Aktives Menü (für Mobile) */\nnav.active {\n display: block;\n}\n\n.pageContent {\n background-color: #415c7b;\n padding: 15px;\n}\n\n.pageContent article {\n border: 1px solid #000;\n border-radius: 10px;\n background-color: #819cbb;\n padding: 15px;\n}\n\nfooter {\n height: 38px;\n line-height: 38px;\n text-align: center;\n background: #415c7b;\n background: -moz-linear-gradient(top, #415c7b 0%, #273749 100%);\n background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #415c7b), color-stop(100%, #273749));\n background: -webkit-linear-gradient(top, #415c7b 0%, #273749 100%);\n background: -o-linear-gradient(top, #415c7b 0%, #273749 100%);\n background: -ms-linear-gradient(top, #415c7b 0%, #273749 100%);\n background: linear-gradient(to bottom, #415c7b 0%, #273749 100%);\n filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#415c7b', endColorstr='#273749',GradientType=0 );\n border-bottom: 1px solid black;\n}\n\n@media (max-width: 599px) {\n .mainNav li:hover {\n background-color: #7E99B8;\n }\n nav.active {\n position: absolute;\n top: 46px; /* Direkt unter der Header-Höhe */\n right: 16px;\n width: 200px;\n z-index: 10;\n }\n}\n\n/* Media Queries für größere Bildschirme */\n@media (min-width: 600px) {\n .mainNav {\n flex-direction: row;\n justify-content: center;\n background: none;\n padding: 0;\n box-shadow: none;\n }\n nav {\n display: flex;\n }\n .hamburgerMenu {\n display: none;\n }\n}\n\n@media (min-width: 1024px) {\n .pageHeader {\n margin-top: 10px;\n -webkit-border-radius: 20px 20px 0 0;\n border-radius: 20px 20px 0 0;\n border: 1px solid black;\n border-bottom: 0px;\n }\n .pageContent {\n border-left: solid 1px black;\n border-right: solid 1px black;\n }\n footer {\n -webkit-border-radius: 0 0 20px 20px;\n border-radius: 0 0 20px 20px;\n border: 1px solid black;\n border-top: 0px;\n }\n}\n\u003C/style>\n",[50,7972,7973,7981,8000,8019,8038,8080,8089,8094,8115,8134,8184,8230,8276,8322,8331,8339,8344,8374,8386,8398,8410,8418,8426,8445,8454,8462,8479,8487,8495,8499,8507,8515,8524,8530,8541,8546,8550,8559,8568,8585,8589,8593,8602,8614,8618,8622,8626,8634,8638,8646,8651,8655,8660,8667,8682,8694,8710,8714,8722,8734,8746,8758,8770,8782,8793,8797,8805,8817,8828,8838,8850,8862,8874,8885,8899,8956,9004,9054,9096,9101,9106,9112,9126,9139,9152,9163,9168,9173,9179,9186,9197,9202,9211,9222,9233,9245,9257,9268,9280,9294,9307,9345,9350,9365,9376,9387,9403,9408,9413,9419,9428,9439,9450,9462,9475,9480,9492,9505,9518,9529,9534,9539,9545,9557,9569,9574,9579,9588,9602,9614,9619,9624,9635,9657,9669,9682,9693,9698,9703,9710,9722,9734,9746,9759,9792,9851,9882,9914,9944,9975,10012,10027,10032,10037,10057,10074,10089,10094,10106,10119,10136,10149,10162,10175,10180,10185,10190,10196,10215,10224,10237,10249,10261,10273,10285,10290,10297,10309,10314,10323,10334,10339,10344,10349,10366,10375,10387,10406,10424,10438,10451,10456,10465,10482,10498,10503,10511,10528,10545,10558,10570,10575,10580],{"__ignoreMap":48},[53,7974,7975,7977,7979],{"class":55,"line":56},[53,7976,510],{"class":344},[53,7978,3236],{"class":387},[53,7980,1722],{"class":344},[53,7982,7983,7985,7987,7989,7991,7993,7996,7998],{"class":55,"line":270},[53,7984,3243],{"class":344},[53,7986,7690],{"class":387},[53,7988,3249],{"class":584},[53,7990,521],{"class":344},[53,7992,524],{"class":344},[53,7994,7995],{"class":397},"pageWrapper",[53,7997,524],{"class":344},[53,7999,1722],{"class":344},[53,8001,8002,8004,8006,8008,8010,8012,8015,8017],{"class":55,"line":354},[53,8003,3265],{"class":344},[53,8005,7627],{"class":387},[53,8007,3249],{"class":584},[53,8009,521],{"class":344},[53,8011,524],{"class":344},[53,8013,8014],{"class":397},"pageHeader",[53,8016,524],{"class":344},[53,8018,1722],{"class":344},[53,8020,8021,8023,8025,8027,8029,8031,8034,8036],{"class":55,"line":360},[53,8022,7645],{"class":344},[53,8024,7690],{"class":387},[53,8026,3249],{"class":584},[53,8028,521],{"class":344},[53,8030,524],{"class":344},[53,8032,8033],{"class":397},"branding",[53,8035,524],{"class":344},[53,8037,1722],{"class":344},[53,8039,8040,8043,8046,8049,8051,8053,8056,8058,8060,8062,8064,8067,8069,8071,8074,8076,8078],{"class":55,"line":366},[53,8041,8042],{"class":344}," \u003C",[53,8044,8045],{"class":387},"NuxtLink",[53,8047,8048],{"class":584}," to",[53,8050,521],{"class":344},[53,8052,524],{"class":344},[53,8054,8055],{"class":397},"/",[53,8057,524],{"class":344},[53,8059,3249],{"class":584},[53,8061,521],{"class":344},[53,8063,524],{"class":344},[53,8065,8066],{"class":397},"logo",[53,8068,524],{"class":344},[53,8070,7661],{"class":344},[53,8072,8073],{"class":340},"mjk @ web",[53,8075,1964],{"class":344},[53,8077,8045],{"class":387},[53,8079,1722],{"class":344},[53,8081,8082,8085,8087],{"class":55,"line":372},[53,8083,8084],{"class":344}," \u003C/",[53,8086,7690],{"class":387},[53,8088,1722],{"class":344},[53,8090,8091],{"class":55,"line":378},[53,8092,8093],{"class":350}," \u003C!-- Navigation -->\n",[53,8095,8096,8098,8101,8104,8106,8108,8111,8113],{"class":55,"line":384},[53,8097,7645],{"class":344},[53,8099,8100],{"class":387},"nav",[53,8102,8103],{"class":584}," :class",[53,8105,521],{"class":344},[53,8107,524],{"class":344},[53,8109,8110],{"class":397},"{ active: isMenuOpen }",[53,8112,524],{"class":344},[53,8114,1722],{"class":344},[53,8116,8117,8119,8121,8123,8125,8127,8130,8132],{"class":55,"line":410},[53,8118,8042],{"class":344},[53,8120,658],{"class":387},[53,8122,3249],{"class":584},[53,8124,521],{"class":344},[53,8126,524],{"class":344},[53,8128,8129],{"class":397},"mainNav",[53,8131,524],{"class":344},[53,8133,1722],{"class":344},[53,8135,8136,8139,8141,8144,8146,8148,8150,8152,8155,8157,8160,8162,8164,8167,8169,8171,8173,8175,8177,8180,8182],{"class":55,"line":416},[53,8137,8138],{"class":344}," \u003C",[53,8140,661],{"class":387},[53,8142,8143],{"class":344},">\u003C",[53,8145,8045],{"class":387},[53,8147,8048],{"class":584},[53,8149,521],{"class":344},[53,8151,524],{"class":344},[53,8153,8154],{"class":397},"/about",[53,8156,524],{"class":344},[53,8158,8159],{"class":584}," @click",[53,8161,521],{"class":344},[53,8163,524],{"class":344},[53,8165,8166],{"class":397},"hideMenu",[53,8168,524],{"class":344},[53,8170,7661],{"class":344},[53,8172,7664],{"class":340},[53,8174,1964],{"class":344},[53,8176,8045],{"class":387},[53,8178,8179],{"class":344},">\u003C/",[53,8181,661],{"class":387},[53,8183,1722],{"class":344},[53,8185,8186,8188,8190,8192,8194,8196,8198,8200,8203,8205,8207,8209,8211,8213,8215,8217,8220,8222,8224,8226,8228],{"class":55,"line":1882},[53,8187,8138],{"class":344},[53,8189,661],{"class":387},[53,8191,8143],{"class":344},[53,8193,8045],{"class":387},[53,8195,8048],{"class":584},[53,8197,521],{"class":344},[53,8199,524],{"class":344},[53,8201,8202],{"class":397},"/links",[53,8204,524],{"class":344},[53,8206,8159],{"class":584},[53,8208,521],{"class":344},[53,8210,524],{"class":344},[53,8212,8166],{"class":397},[53,8214,524],{"class":344},[53,8216,7661],{"class":344},[53,8218,8219],{"class":340},"Links",[53,8221,1964],{"class":344},[53,8223,8045],{"class":387},[53,8225,8179],{"class":344},[53,8227,661],{"class":387},[53,8229,1722],{"class":344},[53,8231,8232,8234,8236,8238,8240,8242,8244,8246,8249,8251,8253,8255,8257,8259,8261,8263,8266,8268,8270,8272,8274],{"class":55,"line":1888},[53,8233,8138],{"class":344},[53,8235,661],{"class":387},[53,8237,8143],{"class":344},[53,8239,8045],{"class":387},[53,8241,8048],{"class":584},[53,8243,521],{"class":344},[53,8245,524],{"class":344},[53,8247,8248],{"class":397},"/datenschutzerklaerung",[53,8250,524],{"class":344},[53,8252,8159],{"class":584},[53,8254,521],{"class":344},[53,8256,524],{"class":344},[53,8258,8166],{"class":397},[53,8260,524],{"class":344},[53,8262,7661],{"class":344},[53,8264,8265],{"class":340},"Datenschutz-Erklärung",[53,8267,1964],{"class":344},[53,8269,8045],{"class":387},[53,8271,8179],{"class":344},[53,8273,661],{"class":387},[53,8275,1722],{"class":344},[53,8277,8278,8280,8282,8284,8286,8288,8290,8292,8295,8297,8299,8301,8303,8305,8307,8309,8312,8314,8316,8318,8320],{"class":55,"line":1909},[53,8279,8138],{"class":344},[53,8281,661],{"class":387},[53,8283,8143],{"class":344},[53,8285,8045],{"class":387},[53,8287,8048],{"class":584},[53,8289,521],{"class":344},[53,8291,524],{"class":344},[53,8293,8294],{"class":397},"/impressum",[53,8296,524],{"class":344},[53,8298,8159],{"class":584},[53,8300,521],{"class":344},[53,8302,524],{"class":344},[53,8304,8166],{"class":397},[53,8306,524],{"class":344},[53,8308,7661],{"class":344},[53,8310,8311],{"class":340},"Impressum",[53,8313,1964],{"class":344},[53,8315,8045],{"class":387},[53,8317,8179],{"class":344},[53,8319,661],{"class":387},[53,8321,1722],{"class":344},[53,8323,8324,8327,8329],{"class":55,"line":1914},[53,8325,8326],{"class":344}," \u003C/",[53,8328,658],{"class":387},[53,8330,1722],{"class":344},[53,8332,8333,8335,8337],{"class":55,"line":1919},[53,8334,8084],{"class":344},[53,8336,8100],{"class":387},[53,8338,1722],{"class":344},[53,8340,8341],{"class":55,"line":1961},[53,8342,8343],{"class":350}," \u003C!-- Hamburger Menu -->\n",[53,8345,8346,8348,8350,8352,8354,8356,8359,8361,8363,8365,8367,8370,8372],{"class":55,"line":2188},[53,8347,7645],{"class":344},[53,8349,7690],{"class":387},[53,8351,3249],{"class":584},[53,8353,521],{"class":344},[53,8355,524],{"class":344},[53,8357,8358],{"class":397},"hamburgerMenu",[53,8360,524],{"class":344},[53,8362,8159],{"class":584},[53,8364,521],{"class":344},[53,8366,524],{"class":344},[53,8368,8369],{"class":397},"toggleMenu",[53,8371,524],{"class":344},[53,8373,1722],{"class":344},[53,8375,8376,8378,8380,8382,8384],{"class":55,"line":2208},[53,8377,8042],{"class":344},[53,8379,53],{"class":387},[53,8381,8179],{"class":344},[53,8383,53],{"class":387},[53,8385,1722],{"class":344},[53,8387,8388,8390,8392,8394,8396],{"class":55,"line":2229},[53,8389,8042],{"class":344},[53,8391,53],{"class":387},[53,8393,8179],{"class":344},[53,8395,53],{"class":387},[53,8397,1722],{"class":344},[53,8399,8400,8402,8404,8406,8408],{"class":55,"line":2244},[53,8401,8042],{"class":344},[53,8403,53],{"class":387},[53,8405,8179],{"class":344},[53,8407,53],{"class":387},[53,8409,1722],{"class":344},[53,8411,8412,8414,8416],{"class":55,"line":2269},[53,8413,8084],{"class":344},[53,8415,7690],{"class":387},[53,8417,1722],{"class":344},[53,8419,8420,8422,8424],{"class":55,"line":2287},[53,8421,7675],{"class":344},[53,8423,7627],{"class":387},[53,8425,1722],{"class":344},[53,8427,8428,8430,8432,8434,8436,8438,8441,8443],{"class":55,"line":2298},[53,8429,3265],{"class":344},[53,8431,7690],{"class":387},[53,8433,3249],{"class":584},[53,8435,521],{"class":344},[53,8437,524],{"class":344},[53,8439,8440],{"class":397},"pageContent",[53,8442,524],{"class":344},[53,8444,1722],{"class":344},[53,8446,8447,8449,8452],{"class":55,"line":2303},[53,8448,7645],{"class":344},[53,8450,8451],{"class":387},"NuxtPage",[53,8453,532],{"class":344},[53,8455,8456,8458,8460],{"class":55,"line":2309},[53,8457,7675],{"class":344},[53,8459,7690],{"class":387},[53,8461,1722],{"class":344},[53,8463,8464,8466,8469,8471,8473,8475,8477],{"class":55,"line":2331},[53,8465,3265],{"class":344},[53,8467,8468],{"class":387},"footer",[53,8470,7661],{"class":344},[53,8472,8468],{"class":340},[53,8474,1964],{"class":344},[53,8476,8468],{"class":387},[53,8478,1722],{"class":344},[53,8480,8481,8483,8485],{"class":55,"line":2344},[53,8482,3300],{"class":344},[53,8484,7690],{"class":387},[53,8486,1722],{"class":344},[53,8488,8489,8491,8493],{"class":55,"line":2356},[53,8490,1964],{"class":344},[53,8492,3236],{"class":387},[53,8494,1722],{"class":344},[53,8496,8497],{"class":55,"line":2368},[53,8498,806],{"emptyLinePlaceholder":805},[53,8500,8501,8503,8505],{"class":55,"line":2373},[53,8502,510],{"class":344},[53,8504,1716],{"class":387},[53,8506,1722],{"class":344},[53,8508,8509,8511,8513],{"class":55,"line":2397},[53,8510,330],{"class":329},[53,8512,333],{"class":329},[53,8514,592],{"class":344},[53,8516,8517,8520,8522],{"class":55,"line":2424},[53,8518,8519],{"class":387}," data",[53,8521,5581],{"class":344},[53,8523,592],{"class":344},[53,8525,8526,8528],{"class":55,"line":2430},[53,8527,1891],{"class":329},[53,8529,592],{"class":344},[53,8531,8532,8535,8537,8539],{"class":55,"line":2461},[53,8533,8534],{"class":387}," isMenuOpen",[53,8536,391],{"class":344},[53,8538,4393],{"class":4392},[53,8540,870],{"class":344},[53,8542,8543],{"class":55,"line":2493},[53,8544,8545],{"class":344}," };\n",[53,8547,8548],{"class":55,"line":2515},[53,8549,3537],{"class":344},[53,8551,8552,8555,8557],{"class":55,"line":2547},[53,8553,8554],{"class":387}," methods",[53,8556,391],{"class":344},[53,8558,592],{"class":344},[53,8560,8561,8564,8566],{"class":55,"line":2576},[53,8562,8563],{"class":387}," toggleMenu",[53,8565,5581],{"class":344},[53,8567,592],{"class":344},[53,8569,8570,8573,8576,8578,8581,8583],{"class":55,"line":2596},[53,8571,8572],{"class":344}," this.",[53,8574,8575],{"class":340},"isMenuOpen",[53,8577,1200],{"class":344},[53,8579,8580],{"class":344}," !this.",[53,8582,8575],{"class":340},[53,8584,3352],{"class":344},[53,8586,8587],{"class":55,"line":2614},[53,8588,3532],{"class":344},[53,8590,8591],{"class":55,"line":2632},[53,8592,806],{"emptyLinePlaceholder":805},[53,8594,8595,8598,8600],{"class":55,"line":2668},[53,8596,8597],{"class":387}," hideMenu",[53,8599,5581],{"class":344},[53,8601,592],{"class":344},[53,8603,8604,8606,8608,8610,8612],{"class":55,"line":2702},[53,8605,8572],{"class":344},[53,8607,8575],{"class":340},[53,8609,1200],{"class":344},[53,8611,4393],{"class":4392},[53,8613,3352],{"class":344},[53,8615,8616],{"class":55,"line":2720},[53,8617,3532],{"class":344},[53,8619,8620],{"class":55,"line":2725},[53,8621,3537],{"class":344},[53,8623,8624],{"class":55,"line":2733},[53,8625,3542],{"class":344},[53,8627,8628,8630,8632],{"class":55,"line":2738},[53,8629,1964],{"class":344},[53,8631,1716],{"class":387},[53,8633,1722],{"class":344},[53,8635,8636],{"class":55,"line":2744},[53,8637,806],{"emptyLinePlaceholder":805},[53,8639,8640,8642,8644],{"class":55,"line":2754},[53,8641,510],{"class":344},[53,8643,3908],{"class":387},[53,8645,1722],{"class":344},[53,8647,8648],{"class":55,"line":2787},[53,8649,8650],{"class":350},"/* Mobile-First Design */\n",[53,8652,8653],{"class":55,"line":2810},[53,8654,806],{"emptyLinePlaceholder":805},[53,8656,8657],{"class":55,"line":2826},[53,8658,8659],{"class":350},"/* Basic-Styling for mobile Devices */\n",[53,8661,8662,8665],{"class":55,"line":2858},[53,8663,8664],{"class":600},"body",[53,8666,592],{"class":344},[53,8668,8669,8672,8674,8677,8680],{"class":55,"line":2876},[53,8670,8671],{"class":6588}," background-color",[53,8673,391],{"class":344},[53,8675,8676],{"class":344}," #",[53,8678,8679],{"class":340},"213c5b",[53,8681,3352],{"class":344},[53,8683,8684,8687,8689,8692],{"class":55,"line":2896},[53,8685,8686],{"class":6588}," margin",[53,8688,391],{"class":344},[53,8690,8691],{"class":1903}," 0",[53,8693,3352],{"class":344},[53,8695,8696,8698,8700,8703,8705,8708],{"class":55,"line":2917},[53,8697,6589],{"class":6588},[53,8699,391],{"class":344},[53,8701,8702],{"class":340}," Arial",[53,8704,404],{"class":344},[53,8706,8707],{"class":340}," sans-serif",[53,8709,3352],{"class":344},[53,8711,8712],{"class":55,"line":2952},[53,8713,627],{"class":344},[53,8715,8716,8718,8720],{"class":55,"line":2970},[53,8717,634],{"class":344},[53,8719,7995],{"class":600},[53,8721,592],{"class":344},[53,8723,8724,8727,8729,8732],{"class":55,"line":2984},[53,8725,8726],{"class":6588}," display",[53,8728,391],{"class":344},[53,8730,8731],{"class":340}," flex",[53,8733,3352],{"class":344},[53,8735,8736,8739,8741,8744],{"class":55,"line":3004},[53,8737,8738],{"class":6588}," flex-direction",[53,8740,391],{"class":344},[53,8742,8743],{"class":340}," column",[53,8745,3352],{"class":344},[53,8747,8748,8751,8753,8756],{"class":55,"line":3022},[53,8749,8750],{"class":6588}," min-height",[53,8752,391],{"class":344},[53,8754,8755],{"class":1903}," 100vh",[53,8757,3352],{"class":344},[53,8759,8760,8763,8765,8768],{"class":55,"line":3036},[53,8761,8762],{"class":6588}," max-width",[53,8764,391],{"class":344},[53,8766,8767],{"class":1903}," 1024px",[53,8769,3352],{"class":344},[53,8771,8772,8775,8777,8780],{"class":55,"line":3056},[53,8773,8774],{"class":6588}," margin-right",[53,8776,391],{"class":344},[53,8778,8779],{"class":340}," auto",[53,8781,3352],{"class":344},[53,8783,8784,8787,8789,8791],{"class":55,"line":3076},[53,8785,8786],{"class":6588}," margin-left",[53,8788,391],{"class":344},[53,8790,8779],{"class":340},[53,8792,3352],{"class":344},[53,8794,8795],{"class":55,"line":3100},[53,8796,627],{"class":344},[53,8798,8799,8801,8803],{"class":55,"line":3107},[53,8800,634],{"class":344},[53,8802,8014],{"class":600},[53,8804,592],{"class":344},[53,8806,8807,8810,8812,8815],{"class":55,"line":3112},[53,8808,8809],{"class":6588}," color",[53,8811,391],{"class":344},[53,8813,8814],{"class":340}," black",[53,8816,3352],{"class":344},[53,8818,8819,8821,8823,8826],{"class":55,"line":3118},[53,8820,8750],{"class":6588},[53,8822,391],{"class":344},[53,8824,8825],{"class":1903}," 56px",[53,8827,3352],{"class":344},[53,8829,8830,8832,8834,8836],{"class":55,"line":3128},[53,8831,8726],{"class":6588},[53,8833,391],{"class":344},[53,8835,8731],{"class":340},[53,8837,3352],{"class":344},[53,8839,8840,8843,8845,8848],{"class":55,"line":3148},[53,8841,8842],{"class":6588}," justify-content",[53,8844,391],{"class":344},[53,8846,8847],{"class":340}," space-between",[53,8849,3352],{"class":344},[53,8851,8852,8855,8857,8860],{"class":55,"line":3170},[53,8853,8854],{"class":6588}," align-items",[53,8856,391],{"class":344},[53,8858,8859],{"class":340}," center",[53,8861,3352],{"class":344},[53,8863,8864,8867,8869,8872],{"class":55,"line":3181},[53,8865,8866],{"class":6588}," padding-left",[53,8868,391],{"class":344},[53,8870,8871],{"class":1903}," 1rem",[53,8873,3352],{"class":344},[53,8875,8876,8879,8881,8883],{"class":55,"line":3188},[53,8877,8878],{"class":6588}," padding-right",[53,8880,391],{"class":344},[53,8882,8871],{"class":1903},[53,8884,3352],{"class":344},[53,8886,8887,8890,8892,8894,8897],{"class":55,"line":3193},[53,8888,8889],{"class":6588}," background",[53,8891,391],{"class":344},[53,8893,8676],{"class":344},[53,8895,8896],{"class":340},"1e6695",[53,8898,3352],{"class":344},[53,8900,8902,8904,8906,8909,8911,8914,8916,8918,8921,8924,8926,8928,8931,8934,8936,8938,8941,8944,8946,8948,8951,8954],{"class":55,"line":8901},75,[53,8903,8889],{"class":6588},[53,8905,391],{"class":344},[53,8907,8908],{"class":336}," -moz-linear-gradient",[53,8910,341],{"class":344},[53,8912,8913],{"class":340},"top",[53,8915,404],{"class":344},[53,8917,8676],{"class":344},[53,8919,8920],{"class":340},"1e6695 ",[53,8922,8923],{"class":1903},"0%",[53,8925,404],{"class":344},[53,8927,8676],{"class":344},[53,8929,8930],{"class":340},"74aacc ",[53,8932,8933],{"class":1903},"33%",[53,8935,404],{"class":344},[53,8937,8676],{"class":344},[53,8939,8940],{"class":340},"79aecb ",[53,8942,8943],{"class":1903},"66%",[53,8945,404],{"class":344},[53,8947,8676],{"class":344},[53,8949,8950],{"class":340},"2f4a66 ",[53,8952,8953],{"class":1903},"100%",[53,8955,6636],{"class":344},[53,8957,8959,8961,8963,8966,8968,8970,8972,8974,8976,8978,8980,8982,8984,8986,8988,8990,8992,8994,8996,8998,9000,9002],{"class":55,"line":8958},76,[53,8960,8889],{"class":6588},[53,8962,391],{"class":344},[53,8964,8965],{"class":336}," -webkit-linear-gradient",[53,8967,341],{"class":344},[53,8969,8913],{"class":340},[53,8971,404],{"class":344},[53,8973,8676],{"class":344},[53,8975,8920],{"class":340},[53,8977,8923],{"class":1903},[53,8979,404],{"class":344},[53,8981,8676],{"class":344},[53,8983,8930],{"class":340},[53,8985,8933],{"class":1903},[53,8987,404],{"class":344},[53,8989,8676],{"class":344},[53,8991,8940],{"class":340},[53,8993,8943],{"class":1903},[53,8995,404],{"class":344},[53,8997,8676],{"class":344},[53,8999,8950],{"class":340},[53,9001,8953],{"class":1903},[53,9003,6636],{"class":344},[53,9005,9007,9009,9011,9014,9017,9020,9022,9024,9026,9028,9030,9032,9034,9036,9038,9040,9042,9044,9046,9048,9050,9052],{"class":55,"line":9006},77,[53,9008,8889],{"class":6588},[53,9010,391],{"class":344},[53,9012,9013],{"class":336}," linear-gradient",[53,9015,9016],{"class":344},"(to",[53,9018,9019],{"class":340}," bottom",[53,9021,404],{"class":344},[53,9023,8676],{"class":344},[53,9025,8920],{"class":340},[53,9027,8923],{"class":1903},[53,9029,404],{"class":344},[53,9031,8676],{"class":344},[53,9033,8930],{"class":340},[53,9035,8933],{"class":1903},[53,9037,404],{"class":344},[53,9039,8676],{"class":344},[53,9041,8940],{"class":340},[53,9043,8943],{"class":1903},[53,9045,404],{"class":344},[53,9047,8676],{"class":344},[53,9049,8950],{"class":340},[53,9051,8953],{"class":1903},[53,9053,6636],{"class":344},[53,9055,9057,9060,9062,9065,9067,9070,9072,9074,9077,9079,9082,9084,9086,9089,9091,9094],{"class":55,"line":9056},78,[53,9058,9059],{"class":6588}," filter",[53,9061,391],{"class":344},[53,9063,9064],{"class":340}," progid:DXImageTransform.Microsoft.gradient( startColorstr=",[53,9066,401],{"class":344},[53,9068,9069],{"class":397},"#1e6695",[53,9071,401],{"class":344},[53,9073,404],{"class":344},[53,9075,9076],{"class":340}," endColorstr=",[53,9078,401],{"class":344},[53,9080,9081],{"class":397},"#2f4a66",[53,9083,401],{"class":344},[53,9085,404],{"class":344},[53,9087,9088],{"class":340},"GradientType=",[53,9090,1904],{"class":1903},[53,9092,9093],{"class":340}," )",[53,9095,3352],{"class":344},[53,9097,9099],{"class":55,"line":9098},79,[53,9100,627],{"class":344},[53,9102,9104],{"class":55,"line":9103},80,[53,9105,806],{"emptyLinePlaceholder":805},[53,9107,9109],{"class":55,"line":9108},81,[53,9110,9111],{"class":350},"/* Branding */\n",[53,9113,9115,9117,9119,9122,9124],{"class":55,"line":9114},82,[53,9116,634],{"class":344},[53,9118,8033],{"class":600},[53,9120,9121],{"class":344}," .",[53,9123,8066],{"class":600},[53,9125,592],{"class":344},[53,9127,9129,9132,9134,9137],{"class":55,"line":9128},83,[53,9130,9131],{"class":6588}," font-size",[53,9133,391],{"class":344},[53,9135,9136],{"class":1903}," 1.5rem",[53,9138,3352],{"class":344},[53,9140,9142,9145,9147,9150],{"class":55,"line":9141},84,[53,9143,9144],{"class":6588}," text-decoration",[53,9146,391],{"class":344},[53,9148,9149],{"class":340}," none",[53,9151,3352],{"class":344},[53,9153,9155,9157,9159,9161],{"class":55,"line":9154},85,[53,9156,8809],{"class":6588},[53,9158,391],{"class":344},[53,9160,8814],{"class":340},[53,9162,3352],{"class":344},[53,9164,9166],{"class":55,"line":9165},86,[53,9167,627],{"class":344},[53,9169,9171],{"class":55,"line":9170},87,[53,9172,806],{"emptyLinePlaceholder":805},[53,9174,9176],{"class":55,"line":9175},88,[53,9177,9178],{"class":350},"/* Navigation */\n",[53,9180,9182,9184],{"class":55,"line":9181},89,[53,9183,8100],{"class":600},[53,9185,592],{"class":344},[53,9187,9189,9191,9193,9195],{"class":55,"line":9188},90,[53,9190,8726],{"class":6588},[53,9192,391],{"class":344},[53,9194,9149],{"class":340},[53,9196,3352],{"class":344},[53,9198,9200],{"class":55,"line":9199},91,[53,9201,627],{"class":344},[53,9203,9205,9207,9209],{"class":55,"line":9204},92,[53,9206,634],{"class":344},[53,9208,8129],{"class":600},[53,9210,592],{"class":344},[53,9212,9214,9216,9218,9220],{"class":55,"line":9213},93,[53,9215,8726],{"class":6588},[53,9217,391],{"class":344},[53,9219,8731],{"class":340},[53,9221,3352],{"class":344},[53,9223,9225,9227,9229,9231],{"class":55,"line":9224},94,[53,9226,8738],{"class":6588},[53,9228,391],{"class":344},[53,9230,8743],{"class":340},[53,9232,3352],{"class":344},[53,9234,9236,9239,9241,9243],{"class":55,"line":9235},95,[53,9237,9238],{"class":6588}," gap",[53,9240,391],{"class":344},[53,9242,8871],{"class":1903},[53,9244,3352],{"class":344},[53,9246,9248,9251,9253,9255],{"class":55,"line":9247},96,[53,9249,9250],{"class":6588}," list-style",[53,9252,391],{"class":344},[53,9254,9149],{"class":340},[53,9256,3352],{"class":344},[53,9258,9260,9262,9264,9266],{"class":55,"line":9259},97,[53,9261,8686],{"class":6588},[53,9263,391],{"class":344},[53,9265,8691],{"class":1903},[53,9267,3352],{"class":344},[53,9269,9271,9274,9276,9278],{"class":55,"line":9270},98,[53,9272,9273],{"class":6588}," padding",[53,9275,391],{"class":344},[53,9277,8871],{"class":1903},[53,9279,3352],{"class":344},[53,9281,9283,9285,9287,9289,9292],{"class":55,"line":9282},99,[53,9284,8671],{"class":6588},[53,9286,391],{"class":344},[53,9288,8676],{"class":344},[53,9290,9291],{"class":340},"819cbb",[53,9293,3352],{"class":344},[53,9295,9297,9300,9302,9305],{"class":55,"line":9296},100,[53,9298,9299],{"class":6588}," border-radius",[53,9301,391],{"class":344},[53,9303,9304],{"class":1903}," 0.5rem",[53,9306,3352],{"class":344},[53,9308,9310,9313,9315,9317,9320,9323,9326,9328,9330,9332,9334,9336,9338,9340,9343],{"class":55,"line":9309},101,[53,9311,9312],{"class":6588}," box-shadow",[53,9314,391],{"class":344},[53,9316,8691],{"class":1903},[53,9318,9319],{"class":1903}," 4px",[53,9321,9322],{"class":1903}," 6px",[53,9324,9325],{"class":336}," rgba",[53,9327,341],{"class":344},[53,9329,1904],{"class":1903},[53,9331,404],{"class":344},[53,9333,8691],{"class":1903},[53,9335,404],{"class":344},[53,9337,8691],{"class":1903},[53,9339,404],{"class":344},[53,9341,9342],{"class":1903}," 0.3",[53,9344,6636],{"class":344},[53,9346,9348],{"class":55,"line":9347},102,[53,9349,627],{"class":344},[53,9351,9353,9355,9357,9360,9363],{"class":55,"line":9352},103,[53,9354,634],{"class":344},[53,9356,8129],{"class":600},[53,9358,9359],{"class":600}," li",[53,9361,9362],{"class":600}," a",[53,9364,592],{"class":344},[53,9366,9368,9370,9372,9374],{"class":55,"line":9367},104,[53,9369,9144],{"class":6588},[53,9371,391],{"class":344},[53,9373,9149],{"class":340},[53,9375,3352],{"class":344},[53,9377,9379,9381,9383,9385],{"class":55,"line":9378},105,[53,9380,8809],{"class":6588},[53,9382,391],{"class":344},[53,9384,8814],{"class":340},[53,9386,3352],{"class":344},[53,9388,9390,9393,9395,9398,9401],{"class":55,"line":9389},106,[53,9391,9392],{"class":6588}," transition",[53,9394,391],{"class":344},[53,9396,9397],{"class":340}," color ",[53,9399,9400],{"class":1903},"0.3s",[53,9402,3352],{"class":344},[53,9404,9406],{"class":55,"line":9405},107,[53,9407,627],{"class":344},[53,9409,9411],{"class":55,"line":9410},108,[53,9412,806],{"emptyLinePlaceholder":805},[53,9414,9416],{"class":55,"line":9415},109,[53,9417,9418],{"class":350},"/* Hamburger Menu */\n",[53,9420,9422,9424,9426],{"class":55,"line":9421},110,[53,9423,634],{"class":344},[53,9425,8358],{"class":600},[53,9427,592],{"class":344},[53,9429,9431,9433,9435,9437],{"class":55,"line":9430},111,[53,9432,8726],{"class":6588},[53,9434,391],{"class":344},[53,9436,8731],{"class":340},[53,9438,3352],{"class":344},[53,9440,9442,9444,9446,9448],{"class":55,"line":9441},112,[53,9443,8738],{"class":6588},[53,9445,391],{"class":344},[53,9447,8743],{"class":340},[53,9449,3352],{"class":344},[53,9451,9453,9455,9457,9460],{"class":55,"line":9452},113,[53,9454,9238],{"class":6588},[53,9456,391],{"class":344},[53,9458,9459],{"class":1903}," 0.3rem",[53,9461,3352],{"class":344},[53,9463,9465,9468,9470,9473],{"class":55,"line":9464},114,[53,9466,9467],{"class":6588}," cursor",[53,9469,391],{"class":344},[53,9471,9472],{"class":340}," pointer",[53,9474,3352],{"class":344},[53,9476,9478],{"class":55,"line":9477},115,[53,9479,627],{"class":344},[53,9481,9483,9485,9487,9490],{"class":55,"line":9482},116,[53,9484,634],{"class":344},[53,9486,8358],{"class":600},[53,9488,9489],{"class":600}," span",[53,9491,592],{"class":344},[53,9493,9495,9498,9500,9503],{"class":55,"line":9494},117,[53,9496,9497],{"class":6588}," width",[53,9499,391],{"class":344},[53,9501,9502],{"class":1903}," 25px",[53,9504,3352],{"class":344},[53,9506,9508,9511,9513,9516],{"class":55,"line":9507},118,[53,9509,9510],{"class":6588}," height",[53,9512,391],{"class":344},[53,9514,9515],{"class":1903}," 3px",[53,9517,3352],{"class":344},[53,9519,9521,9523,9525,9527],{"class":55,"line":9520},119,[53,9522,8671],{"class":6588},[53,9524,391],{"class":344},[53,9526,8814],{"class":340},[53,9528,3352],{"class":344},[53,9530,9532],{"class":55,"line":9531},120,[53,9533,627],{"class":344},[53,9535,9537],{"class":55,"line":9536},121,[53,9538,806],{"emptyLinePlaceholder":805},[53,9540,9542],{"class":55,"line":9541},122,[53,9543,9544],{"class":350},"/* Aktives Menü (für Mobile) */\n",[53,9546,9548,9550,9552,9555],{"class":55,"line":9547},123,[53,9549,8100],{"class":600},[53,9551,634],{"class":344},[53,9553,9554],{"class":600},"active",[53,9556,592],{"class":344},[53,9558,9560,9562,9564,9567],{"class":55,"line":9559},124,[53,9561,8726],{"class":6588},[53,9563,391],{"class":344},[53,9565,9566],{"class":340}," block",[53,9568,3352],{"class":344},[53,9570,9572],{"class":55,"line":9571},125,[53,9573,627],{"class":344},[53,9575,9577],{"class":55,"line":9576},126,[53,9578,806],{"emptyLinePlaceholder":805},[53,9580,9582,9584,9586],{"class":55,"line":9581},127,[53,9583,634],{"class":344},[53,9585,8440],{"class":600},[53,9587,592],{"class":344},[53,9589,9591,9593,9595,9597,9600],{"class":55,"line":9590},128,[53,9592,8671],{"class":6588},[53,9594,391],{"class":344},[53,9596,8676],{"class":344},[53,9598,9599],{"class":340},"415c7b",[53,9601,3352],{"class":344},[53,9603,9605,9607,9609,9612],{"class":55,"line":9604},129,[53,9606,9273],{"class":6588},[53,9608,391],{"class":344},[53,9610,9611],{"class":1903}," 15px",[53,9613,3352],{"class":344},[53,9615,9617],{"class":55,"line":9616},130,[53,9618,627],{"class":344},[53,9620,9622],{"class":55,"line":9621},131,[53,9623,806],{"emptyLinePlaceholder":805},[53,9625,9627,9629,9631,9633],{"class":55,"line":9626},132,[53,9628,634],{"class":344},[53,9630,8440],{"class":600},[53,9632,2102],{"class":600},[53,9634,592],{"class":344},[53,9636,9638,9641,9643,9646,9649,9652,9655],{"class":55,"line":9637},133,[53,9639,9640],{"class":6588}," border",[53,9642,391],{"class":344},[53,9644,9645],{"class":1903}," 1px",[53,9647,9648],{"class":340}," solid ",[53,9650,9651],{"class":344},"#",[53,9653,9654],{"class":340},"000",[53,9656,3352],{"class":344},[53,9658,9660,9662,9664,9667],{"class":55,"line":9659},134,[53,9661,9299],{"class":6588},[53,9663,391],{"class":344},[53,9665,9666],{"class":1903}," 10px",[53,9668,3352],{"class":344},[53,9670,9672,9674,9676,9678,9680],{"class":55,"line":9671},135,[53,9673,8671],{"class":6588},[53,9675,391],{"class":344},[53,9677,8676],{"class":344},[53,9679,9291],{"class":340},[53,9681,3352],{"class":344},[53,9683,9685,9687,9689,9691],{"class":55,"line":9684},136,[53,9686,9273],{"class":6588},[53,9688,391],{"class":344},[53,9690,9611],{"class":1903},[53,9692,3352],{"class":344},[53,9694,9696],{"class":55,"line":9695},137,[53,9697,627],{"class":344},[53,9699,9701],{"class":55,"line":9700},138,[53,9702,806],{"emptyLinePlaceholder":805},[53,9704,9706,9708],{"class":55,"line":9705},139,[53,9707,8468],{"class":600},[53,9709,592],{"class":344},[53,9711,9713,9715,9717,9720],{"class":55,"line":9712},140,[53,9714,9510],{"class":6588},[53,9716,391],{"class":344},[53,9718,9719],{"class":1903}," 38px",[53,9721,3352],{"class":344},[53,9723,9725,9728,9730,9732],{"class":55,"line":9724},141,[53,9726,9727],{"class":6588}," line-height",[53,9729,391],{"class":344},[53,9731,9719],{"class":1903},[53,9733,3352],{"class":344},[53,9735,9737,9740,9742,9744],{"class":55,"line":9736},142,[53,9738,9739],{"class":6588}," text-align",[53,9741,391],{"class":344},[53,9743,8859],{"class":340},[53,9745,3352],{"class":344},[53,9747,9749,9751,9753,9755,9757],{"class":55,"line":9748},143,[53,9750,8889],{"class":6588},[53,9752,391],{"class":344},[53,9754,8676],{"class":344},[53,9756,9599],{"class":340},[53,9758,3352],{"class":344},[53,9760,9762,9764,9766,9768,9770,9772,9774,9776,9779,9781,9783,9785,9788,9790],{"class":55,"line":9761},144,[53,9763,8889],{"class":6588},[53,9765,391],{"class":344},[53,9767,8908],{"class":336},[53,9769,341],{"class":344},[53,9771,8913],{"class":340},[53,9773,404],{"class":344},[53,9775,8676],{"class":344},[53,9777,9778],{"class":340},"415c7b ",[53,9780,8923],{"class":1903},[53,9782,404],{"class":344},[53,9784,8676],{"class":344},[53,9786,9787],{"class":340},"273749 ",[53,9789,8953],{"class":1903},[53,9791,6636],{"class":344},[53,9793,9795,9797,9799,9802,9804,9807,9809,9812,9814,9817,9819,9822,9824,9826,9828,9830,9832,9835,9837,9839,9841,9843,9845,9848],{"class":55,"line":9794},145,[53,9796,8889],{"class":6588},[53,9798,391],{"class":344},[53,9800,9801],{"class":340}," -webkit-gradient",[53,9803,341],{"class":344},[53,9805,9806],{"class":340},"linear",[53,9808,404],{"class":344},[53,9810,9811],{"class":340}," left top",[53,9813,404],{"class":344},[53,9815,9816],{"class":340}," left bottom",[53,9818,404],{"class":344},[53,9820,9821],{"class":340}," color-stop",[53,9823,341],{"class":344},[53,9825,8923],{"class":1903},[53,9827,404],{"class":344},[53,9829,8676],{"class":344},[53,9831,9599],{"class":340},[53,9833,9834],{"class":344},"),",[53,9836,9821],{"class":340},[53,9838,341],{"class":344},[53,9840,8953],{"class":1903},[53,9842,404],{"class":344},[53,9844,8676],{"class":344},[53,9846,9847],{"class":340},"273749",[53,9849,9850],{"class":344},"));\n",[53,9852,9854,9856,9858,9860,9862,9864,9866,9868,9870,9872,9874,9876,9878,9880],{"class":55,"line":9853},146,[53,9855,8889],{"class":6588},[53,9857,391],{"class":344},[53,9859,8965],{"class":336},[53,9861,341],{"class":344},[53,9863,8913],{"class":340},[53,9865,404],{"class":344},[53,9867,8676],{"class":344},[53,9869,9778],{"class":340},[53,9871,8923],{"class":1903},[53,9873,404],{"class":344},[53,9875,8676],{"class":344},[53,9877,9787],{"class":340},[53,9879,8953],{"class":1903},[53,9881,6636],{"class":344},[53,9883,9885,9887,9889,9892,9894,9896,9898,9900,9902,9904,9906,9908,9910,9912],{"class":55,"line":9884},147,[53,9886,8889],{"class":6588},[53,9888,391],{"class":344},[53,9890,9891],{"class":336}," -o-linear-gradient",[53,9893,341],{"class":344},[53,9895,8913],{"class":340},[53,9897,404],{"class":344},[53,9899,8676],{"class":344},[53,9901,9778],{"class":340},[53,9903,8923],{"class":1903},[53,9905,404],{"class":344},[53,9907,8676],{"class":344},[53,9909,9787],{"class":340},[53,9911,8953],{"class":1903},[53,9913,6636],{"class":344},[53,9915,9917,9919,9921,9924,9926,9928,9930,9932,9934,9936,9938,9940,9942],{"class":55,"line":9916},148,[53,9918,8889],{"class":6588},[53,9920,391],{"class":344},[53,9922,9923],{"class":340}," -ms-linear-gradient(top",[53,9925,404],{"class":344},[53,9927,8676],{"class":344},[53,9929,9778],{"class":340},[53,9931,8923],{"class":1903},[53,9933,404],{"class":344},[53,9935,8676],{"class":344},[53,9937,9787],{"class":340},[53,9939,8953],{"class":1903},[53,9941,1041],{"class":340},[53,9943,3352],{"class":344},[53,9945,9947,9949,9951,9953,9955,9957,9959,9961,9963,9965,9967,9969,9971,9973],{"class":55,"line":9946},149,[53,9948,8889],{"class":6588},[53,9950,391],{"class":344},[53,9952,9013],{"class":336},[53,9954,9016],{"class":344},[53,9956,9019],{"class":340},[53,9958,404],{"class":344},[53,9960,8676],{"class":344},[53,9962,9778],{"class":340},[53,9964,8923],{"class":1903},[53,9966,404],{"class":344},[53,9968,8676],{"class":344},[53,9970,9787],{"class":340},[53,9972,8953],{"class":1903},[53,9974,6636],{"class":344},[53,9976,9978,9980,9982,9984,9986,9989,9991,9993,9995,9997,10000,10002,10004,10006,10008,10010],{"class":55,"line":9977},150,[53,9979,9059],{"class":6588},[53,9981,391],{"class":344},[53,9983,9064],{"class":340},[53,9985,401],{"class":344},[53,9987,9988],{"class":397},"#415c7b",[53,9990,401],{"class":344},[53,9992,404],{"class":344},[53,9994,9076],{"class":340},[53,9996,401],{"class":344},[53,9998,9999],{"class":397},"#273749",[53,10001,401],{"class":344},[53,10003,404],{"class":344},[53,10005,9088],{"class":340},[53,10007,1904],{"class":1903},[53,10009,9093],{"class":340},[53,10011,3352],{"class":344},[53,10013,10015,10018,10020,10022,10025],{"class":55,"line":10014},151,[53,10016,10017],{"class":6588}," border-bottom",[53,10019,391],{"class":344},[53,10021,9645],{"class":1903},[53,10023,10024],{"class":340}," solid black",[53,10026,3352],{"class":344},[53,10028,10030],{"class":55,"line":10029},152,[53,10031,627],{"class":344},[53,10033,10035],{"class":55,"line":10034},153,[53,10036,806],{"emptyLinePlaceholder":805},[53,10038,10040,10043,10045,10048,10050,10053,10055],{"class":55,"line":10039},154,[53,10041,10042],{"class":329},"@media",[53,10044,2436],{"class":344},[53,10046,10047],{"class":600},"max-width",[53,10049,391],{"class":344},[53,10051,10052],{"class":1903}," 599px",[53,10054,1041],{"class":344},[53,10056,592],{"class":344},[53,10058,10060,10063,10065,10067,10069,10072],{"class":55,"line":10059},155,[53,10061,10062],{"class":344}," .",[53,10064,8129],{"class":600},[53,10066,9359],{"class":600},[53,10068,391],{"class":344},[53,10070,10071],{"class":584},"hover",[53,10073,592],{"class":344},[53,10075,10077,10080,10082,10084,10087],{"class":55,"line":10076},156,[53,10078,10079],{"class":6588}," background-color",[53,10081,391],{"class":344},[53,10083,8676],{"class":344},[53,10085,10086],{"class":340},"7E99B8",[53,10088,3352],{"class":344},[53,10090,10092],{"class":55,"line":10091},157,[53,10093,622],{"class":344},[53,10095,10097,10100,10102,10104],{"class":55,"line":10096},158,[53,10098,10099],{"class":600}," nav",[53,10101,634],{"class":344},[53,10103,9554],{"class":600},[53,10105,592],{"class":344},[53,10107,10109,10112,10114,10117],{"class":55,"line":10108},159,[53,10110,10111],{"class":6588}," position",[53,10113,391],{"class":344},[53,10115,10116],{"class":340}," absolute",[53,10118,3352],{"class":344},[53,10120,10122,10125,10127,10130,10133],{"class":55,"line":10121},160,[53,10123,10124],{"class":6588}," top",[53,10126,391],{"class":344},[53,10128,10129],{"class":1903}," 46px",[53,10131,10132],{"class":344},";",[53,10134,10135],{"class":350}," /* Direkt unter der Header-Höhe */\n",[53,10137,10139,10142,10144,10147],{"class":55,"line":10138},161,[53,10140,10141],{"class":6588}," right",[53,10143,391],{"class":344},[53,10145,10146],{"class":1903}," 16px",[53,10148,3352],{"class":344},[53,10150,10152,10155,10157,10160],{"class":55,"line":10151},162,[53,10153,10154],{"class":6588}," width",[53,10156,391],{"class":344},[53,10158,10159],{"class":1903}," 200px",[53,10161,3352],{"class":344},[53,10163,10165,10168,10170,10173],{"class":55,"line":10164},163,[53,10166,10167],{"class":6588}," z-index",[53,10169,391],{"class":344},[53,10171,10172],{"class":1903}," 10",[53,10174,3352],{"class":344},[53,10176,10178],{"class":55,"line":10177},164,[53,10179,622],{"class":344},[53,10181,10183],{"class":55,"line":10182},165,[53,10184,627],{"class":344},[53,10186,10188],{"class":55,"line":10187},166,[53,10189,806],{"emptyLinePlaceholder":805},[53,10191,10193],{"class":55,"line":10192},167,[53,10194,10195],{"class":350},"/* Media Queries für größere Bildschirme */\n",[53,10197,10199,10201,10203,10206,10208,10211,10213],{"class":55,"line":10198},168,[53,10200,10042],{"class":329},[53,10202,2436],{"class":344},[53,10204,10205],{"class":600},"min-width",[53,10207,391],{"class":344},[53,10209,10210],{"class":1903}," 600px",[53,10212,1041],{"class":344},[53,10214,592],{"class":344},[53,10216,10218,10220,10222],{"class":55,"line":10217},169,[53,10219,10062],{"class":344},[53,10221,8129],{"class":600},[53,10223,592],{"class":344},[53,10225,10227,10230,10232,10235],{"class":55,"line":10226},170,[53,10228,10229],{"class":6588}," flex-direction",[53,10231,391],{"class":344},[53,10233,10234],{"class":340}," row",[53,10236,3352],{"class":344},[53,10238,10240,10243,10245,10247],{"class":55,"line":10239},171,[53,10241,10242],{"class":6588}," justify-content",[53,10244,391],{"class":344},[53,10246,8859],{"class":340},[53,10248,3352],{"class":344},[53,10250,10252,10255,10257,10259],{"class":55,"line":10251},172,[53,10253,10254],{"class":6588}," background",[53,10256,391],{"class":344},[53,10258,9149],{"class":340},[53,10260,3352],{"class":344},[53,10262,10264,10267,10269,10271],{"class":55,"line":10263},173,[53,10265,10266],{"class":6588}," padding",[53,10268,391],{"class":344},[53,10270,8691],{"class":1903},[53,10272,3352],{"class":344},[53,10274,10276,10279,10281,10283],{"class":55,"line":10275},174,[53,10277,10278],{"class":6588}," box-shadow",[53,10280,391],{"class":344},[53,10282,9149],{"class":340},[53,10284,3352],{"class":344},[53,10286,10288],{"class":55,"line":10287},175,[53,10289,622],{"class":344},[53,10291,10293,10295],{"class":55,"line":10292},176,[53,10294,10099],{"class":600},[53,10296,592],{"class":344},[53,10298,10300,10303,10305,10307],{"class":55,"line":10299},177,[53,10301,10302],{"class":6588}," display",[53,10304,391],{"class":344},[53,10306,8731],{"class":340},[53,10308,3352],{"class":344},[53,10310,10312],{"class":55,"line":10311},178,[53,10313,622],{"class":344},[53,10315,10317,10319,10321],{"class":55,"line":10316},179,[53,10318,10062],{"class":344},[53,10320,8358],{"class":600},[53,10322,592],{"class":344},[53,10324,10326,10328,10330,10332],{"class":55,"line":10325},180,[53,10327,10302],{"class":6588},[53,10329,391],{"class":344},[53,10331,9149],{"class":340},[53,10333,3352],{"class":344},[53,10335,10337],{"class":55,"line":10336},181,[53,10338,622],{"class":344},[53,10340,10342],{"class":55,"line":10341},182,[53,10343,627],{"class":344},[53,10345,10347],{"class":55,"line":10346},183,[53,10348,806],{"emptyLinePlaceholder":805},[53,10350,10352,10354,10356,10358,10360,10362,10364],{"class":55,"line":10351},184,[53,10353,10042],{"class":329},[53,10355,2436],{"class":344},[53,10357,10205],{"class":600},[53,10359,391],{"class":344},[53,10361,8767],{"class":1903},[53,10363,1041],{"class":344},[53,10365,592],{"class":344},[53,10367,10369,10371,10373],{"class":55,"line":10368},185,[53,10370,10062],{"class":344},[53,10372,8014],{"class":600},[53,10374,592],{"class":344},[53,10376,10378,10381,10383,10385],{"class":55,"line":10377},186,[53,10379,10380],{"class":6588}," margin-top",[53,10382,391],{"class":344},[53,10384,9666],{"class":1903},[53,10386,3352],{"class":344},[53,10388,10390,10393,10395,10398,10400,10402,10404],{"class":55,"line":10389},187,[53,10391,10392],{"class":600}," -webkit-border-radius",[53,10394,391],{"class":344},[53,10396,10397],{"class":1903}," 20px",[53,10399,10397],{"class":1903},[53,10401,8691],{"class":1903},[53,10403,8691],{"class":1903},[53,10405,3352],{"class":344},[53,10407,10409,10412,10414,10416,10418,10420,10422],{"class":55,"line":10408},188,[53,10410,10411],{"class":6588}," border-radius",[53,10413,391],{"class":344},[53,10415,10397],{"class":1903},[53,10417,10397],{"class":1903},[53,10419,8691],{"class":1903},[53,10421,8691],{"class":1903},[53,10423,3352],{"class":344},[53,10425,10427,10430,10432,10434,10436],{"class":55,"line":10426},189,[53,10428,10429],{"class":6588}," border",[53,10431,391],{"class":344},[53,10433,9645],{"class":1903},[53,10435,10024],{"class":340},[53,10437,3352],{"class":344},[53,10439,10441,10444,10446,10449],{"class":55,"line":10440},190,[53,10442,10443],{"class":6588}," border-bottom",[53,10445,391],{"class":344},[53,10447,10448],{"class":1903}," 0px",[53,10450,3352],{"class":344},[53,10452,10454],{"class":55,"line":10453},191,[53,10455,622],{"class":344},[53,10457,10459,10461,10463],{"class":55,"line":10458},192,[53,10460,10062],{"class":344},[53,10462,8440],{"class":600},[53,10464,592],{"class":344},[53,10466,10468,10471,10473,10475,10478,10480],{"class":55,"line":10467},193,[53,10469,10470],{"class":6588}," border-left",[53,10472,391],{"class":344},[53,10474,9648],{"class":340},[53,10476,10477],{"class":1903},"1px",[53,10479,8814],{"class":340},[53,10481,3352],{"class":344},[53,10483,10485,10488,10490,10492,10494,10496],{"class":55,"line":10484},194,[53,10486,10487],{"class":6588}," border-right",[53,10489,391],{"class":344},[53,10491,9648],{"class":340},[53,10493,10477],{"class":1903},[53,10495,8814],{"class":340},[53,10497,3352],{"class":344},[53,10499,10501],{"class":55,"line":10500},195,[53,10502,622],{"class":344},[53,10504,10506,10509],{"class":55,"line":10505},196,[53,10507,10508],{"class":600}," footer",[53,10510,592],{"class":344},[53,10512,10514,10516,10518,10520,10522,10524,10526],{"class":55,"line":10513},197,[53,10515,10392],{"class":600},[53,10517,391],{"class":344},[53,10519,8691],{"class":1903},[53,10521,8691],{"class":1903},[53,10523,10397],{"class":1903},[53,10525,10397],{"class":1903},[53,10527,3352],{"class":344},[53,10529,10531,10533,10535,10537,10539,10541,10543],{"class":55,"line":10530},198,[53,10532,10411],{"class":6588},[53,10534,391],{"class":344},[53,10536,8691],{"class":1903},[53,10538,8691],{"class":1903},[53,10540,10397],{"class":1903},[53,10542,10397],{"class":1903},[53,10544,3352],{"class":344},[53,10546,10548,10550,10552,10554,10556],{"class":55,"line":10547},199,[53,10549,10429],{"class":6588},[53,10551,391],{"class":344},[53,10553,9645],{"class":1903},[53,10555,10024],{"class":340},[53,10557,3352],{"class":344},[53,10559,10561,10564,10566,10568],{"class":55,"line":10560},200,[53,10562,10563],{"class":6588}," border-top",[53,10565,391],{"class":344},[53,10567,10448],{"class":1903},[53,10569,3352],{"class":344},[53,10571,10573],{"class":55,"line":10572},201,[53,10574,622],{"class":344},[53,10576,10578],{"class":55,"line":10577},202,[53,10579,627],{"class":344},[53,10581,10583,10585,10587],{"class":55,"line":10582},203,[53,10584,1964],{"class":344},[53,10586,3908],{"class":387},[53,10588,1722],{"class":344},[15,10590,10591],{},"The directory structure now looks like this.",[43,10593,10596],{"className":10594,"code":10595,"language":1159,"meta":48},[1157],".\n├── .nuxt\n│ ├── ...\n│ └── ...\n├── .output\n│ ├── ...\n│ └── ...\n├── node_modules\n│ ├── ...\n│ └── ...\n├── pages\n│ ├── about.vue\n│ ├── datenschutzerklaerung.vue\n│ ├── impressum.vue\n│ ├── index.vue\n│ └── links.vue\n├── public\n│ ├── favicon.ico\n│ └── robots.txt\n├── server\n│ └── tsconfig.json\n├── .gitignore\n├── app.vue\n├── nuxt.config.ts\n├── package-lock.json\n├── package.json\n├── README.md\n└── tsconfig.json\n",[50,10597,10595],{"__ignoreMap":48},[15,10599,10600,10601,4091,10603,122,10605,10607],{},"I have left out the contents of the folders ",[50,10602,5297],{},[50,10604,5288],{},[50,10606,5279],{}," because the contents are generated by nuxt or npm and we should not edit or save anything here.",[28,10609,10611],{"id":10610},"extract-components","Extract components",[15,10613,10614,10615,10618,10619,122,10622,10625,10626,10628],{},"Vue and therefore Nuxt is a component-based framework. So I created the folder ",[50,10616,10617],{},"components"," in the root directory and extracted the components ",[50,10620,10621],{},"pageFooter.vue",[50,10623,10624],{},"pageHeader.vue"," from the ",[50,10627,714],{},", which makes it much clearer.",[658,10630,10631],{},[661,10632,10621],{},[43,10634,10636],{"className":1705,"code":10635,"language":1707,"meta":48,"style":48},"\u003Ctemplate>\n \u003Cfooter>\n \u003Cspan>© by Melchior Jascha Kannengießer\u003C/span>\n \u003C/footer>\n\u003C/template>\n\n\u003Cstyle scoped>\nfooter {\n height: 38px;\n line-height: 38px;\n text-align: center;\n background: #415c7b;\n background: -moz-linear-gradient(top, #415c7b 0%, #273749 100%);\n background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #415c7b), color-stop(100%, #273749));\n background: -webkit-linear-gradient(top, #415c7b 0%, #273749 100%);\n background: -o-linear-gradient(top, #415c7b 0%, #273749 100%);\n background: -ms-linear-gradient(top, #415c7b 0%, #273749 100%);\n background: linear-gradient(to bottom, #415c7b 0%, #273749 100%);\n filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#415c7b', endColorstr='#273749',GradientType=0 );\n border-bottom: 1px solid black;\n}\n\n@media (min-width: 1024px) {\n footer {\n -webkit-border-radius: 0 0 20px 20px;\n border-radius: 0 0 20px 20px;\n border: 1px solid black;\n border-top: 0px;\n }\n}\n\n\u003C/style>\n",[50,10637,10638,10646,10654,10671,10679,10687,10691,10702,10708,10718,10728,10738,10750,10780,10830,10860,10890,10918,10948,10982,10994,10998,11002,11018,11024,11040,11056,11068,11078,11082,11086,11090],{"__ignoreMap":48},[53,10639,10640,10642,10644],{"class":55,"line":56},[53,10641,510],{"class":344},[53,10643,3236],{"class":387},[53,10645,1722],{"class":344},[53,10647,10648,10650,10652],{"class":55,"line":270},[53,10649,3243],{"class":344},[53,10651,8468],{"class":387},[53,10653,1722],{"class":344},[53,10655,10656,10658,10660,10662,10665,10667,10669],{"class":55,"line":354},[53,10657,3265],{"class":344},[53,10659,53],{"class":387},[53,10661,7661],{"class":344},[53,10663,10664],{"class":340},"© by Melchior Jascha Kannengießer",[53,10666,1964],{"class":344},[53,10668,53],{"class":387},[53,10670,1722],{"class":344},[53,10672,10673,10675,10677],{"class":55,"line":360},[53,10674,3300],{"class":344},[53,10676,8468],{"class":387},[53,10678,1722],{"class":344},[53,10680,10681,10683,10685],{"class":55,"line":366},[53,10682,1964],{"class":344},[53,10684,3236],{"class":387},[53,10686,1722],{"class":344},[53,10688,10689],{"class":55,"line":372},[53,10690,806],{"emptyLinePlaceholder":805},[53,10692,10693,10695,10697,10700],{"class":55,"line":378},[53,10694,510],{"class":344},[53,10696,3908],{"class":387},[53,10698,10699],{"class":584}," scoped",[53,10701,1722],{"class":344},[53,10703,10704,10706],{"class":55,"line":384},[53,10705,8468],{"class":600},[53,10707,592],{"class":344},[53,10709,10710,10712,10714,10716],{"class":55,"line":410},[53,10711,9510],{"class":6588},[53,10713,391],{"class":344},[53,10715,9719],{"class":1903},[53,10717,3352],{"class":344},[53,10719,10720,10722,10724,10726],{"class":55,"line":416},[53,10721,9727],{"class":6588},[53,10723,391],{"class":344},[53,10725,9719],{"class":1903},[53,10727,3352],{"class":344},[53,10729,10730,10732,10734,10736],{"class":55,"line":1882},[53,10731,9739],{"class":6588},[53,10733,391],{"class":344},[53,10735,8859],{"class":340},[53,10737,3352],{"class":344},[53,10739,10740,10742,10744,10746,10748],{"class":55,"line":1888},[53,10741,8889],{"class":6588},[53,10743,391],{"class":344},[53,10745,8676],{"class":344},[53,10747,9599],{"class":340},[53,10749,3352],{"class":344},[53,10751,10752,10754,10756,10758,10760,10762,10764,10766,10768,10770,10772,10774,10776,10778],{"class":55,"line":1909},[53,10753,8889],{"class":6588},[53,10755,391],{"class":344},[53,10757,8908],{"class":336},[53,10759,341],{"class":344},[53,10761,8913],{"class":340},[53,10763,404],{"class":344},[53,10765,8676],{"class":344},[53,10767,9778],{"class":340},[53,10769,8923],{"class":1903},[53,10771,404],{"class":344},[53,10773,8676],{"class":344},[53,10775,9787],{"class":340},[53,10777,8953],{"class":1903},[53,10779,6636],{"class":344},[53,10781,10782,10784,10786,10788,10790,10792,10794,10796,10798,10800,10802,10804,10806,10808,10810,10812,10814,10816,10818,10820,10822,10824,10826,10828],{"class":55,"line":1914},[53,10783,8889],{"class":6588},[53,10785,391],{"class":344},[53,10787,9801],{"class":340},[53,10789,341],{"class":344},[53,10791,9806],{"class":340},[53,10793,404],{"class":344},[53,10795,9811],{"class":340},[53,10797,404],{"class":344},[53,10799,9816],{"class":340},[53,10801,404],{"class":344},[53,10803,9821],{"class":340},[53,10805,341],{"class":344},[53,10807,8923],{"class":1903},[53,10809,404],{"class":344},[53,10811,8676],{"class":344},[53,10813,9599],{"class":340},[53,10815,9834],{"class":344},[53,10817,9821],{"class":340},[53,10819,341],{"class":344},[53,10821,8953],{"class":1903},[53,10823,404],{"class":344},[53,10825,8676],{"class":344},[53,10827,9847],{"class":340},[53,10829,9850],{"class":344},[53,10831,10832,10834,10836,10838,10840,10842,10844,10846,10848,10850,10852,10854,10856,10858],{"class":55,"line":1919},[53,10833,8889],{"class":6588},[53,10835,391],{"class":344},[53,10837,8965],{"class":336},[53,10839,341],{"class":344},[53,10841,8913],{"class":340},[53,10843,404],{"class":344},[53,10845,8676],{"class":344},[53,10847,9778],{"class":340},[53,10849,8923],{"class":1903},[53,10851,404],{"class":344},[53,10853,8676],{"class":344},[53,10855,9787],{"class":340},[53,10857,8953],{"class":1903},[53,10859,6636],{"class":344},[53,10861,10862,10864,10866,10868,10870,10872,10874,10876,10878,10880,10882,10884,10886,10888],{"class":55,"line":1961},[53,10863,8889],{"class":6588},[53,10865,391],{"class":344},[53,10867,9891],{"class":336},[53,10869,341],{"class":344},[53,10871,8913],{"class":340},[53,10873,404],{"class":344},[53,10875,8676],{"class":344},[53,10877,9778],{"class":340},[53,10879,8923],{"class":1903},[53,10881,404],{"class":344},[53,10883,8676],{"class":344},[53,10885,9787],{"class":340},[53,10887,8953],{"class":1903},[53,10889,6636],{"class":344},[53,10891,10892,10894,10896,10898,10900,10902,10904,10906,10908,10910,10912,10914,10916],{"class":55,"line":2188},[53,10893,8889],{"class":6588},[53,10895,391],{"class":344},[53,10897,9923],{"class":340},[53,10899,404],{"class":344},[53,10901,8676],{"class":344},[53,10903,9778],{"class":340},[53,10905,8923],{"class":1903},[53,10907,404],{"class":344},[53,10909,8676],{"class":344},[53,10911,9787],{"class":340},[53,10913,8953],{"class":1903},[53,10915,1041],{"class":340},[53,10917,3352],{"class":344},[53,10919,10920,10922,10924,10926,10928,10930,10932,10934,10936,10938,10940,10942,10944,10946],{"class":55,"line":2208},[53,10921,8889],{"class":6588},[53,10923,391],{"class":344},[53,10925,9013],{"class":336},[53,10927,9016],{"class":344},[53,10929,9019],{"class":340},[53,10931,404],{"class":344},[53,10933,8676],{"class":344},[53,10935,9778],{"class":340},[53,10937,8923],{"class":1903},[53,10939,404],{"class":344},[53,10941,8676],{"class":344},[53,10943,9787],{"class":340},[53,10945,8953],{"class":1903},[53,10947,6636],{"class":344},[53,10949,10950,10952,10954,10956,10958,10960,10962,10964,10966,10968,10970,10972,10974,10976,10978,10980],{"class":55,"line":2229},[53,10951,9059],{"class":6588},[53,10953,391],{"class":344},[53,10955,9064],{"class":340},[53,10957,401],{"class":344},[53,10959,9988],{"class":397},[53,10961,401],{"class":344},[53,10963,404],{"class":344},[53,10965,9076],{"class":340},[53,10967,401],{"class":344},[53,10969,9999],{"class":397},[53,10971,401],{"class":344},[53,10973,404],{"class":344},[53,10975,9088],{"class":340},[53,10977,1904],{"class":1903},[53,10979,9093],{"class":340},[53,10981,3352],{"class":344},[53,10983,10984,10986,10988,10990,10992],{"class":55,"line":2244},[53,10985,10017],{"class":6588},[53,10987,391],{"class":344},[53,10989,9645],{"class":1903},[53,10991,10024],{"class":340},[53,10993,3352],{"class":344},[53,10995,10996],{"class":55,"line":2269},[53,10997,627],{"class":344},[53,10999,11000],{"class":55,"line":2287},[53,11001,806],{"emptyLinePlaceholder":805},[53,11003,11004,11006,11008,11010,11012,11014,11016],{"class":55,"line":2298},[53,11005,10042],{"class":329},[53,11007,2436],{"class":344},[53,11009,10205],{"class":600},[53,11011,391],{"class":344},[53,11013,8767],{"class":1903},[53,11015,1041],{"class":344},[53,11017,592],{"class":344},[53,11019,11020,11022],{"class":55,"line":2303},[53,11021,10508],{"class":600},[53,11023,592],{"class":344},[53,11025,11026,11028,11030,11032,11034,11036,11038],{"class":55,"line":2309},[53,11027,10392],{"class":600},[53,11029,391],{"class":344},[53,11031,8691],{"class":1903},[53,11033,8691],{"class":1903},[53,11035,10397],{"class":1903},[53,11037,10397],{"class":1903},[53,11039,3352],{"class":344},[53,11041,11042,11044,11046,11048,11050,11052,11054],{"class":55,"line":2331},[53,11043,10411],{"class":6588},[53,11045,391],{"class":344},[53,11047,8691],{"class":1903},[53,11049,8691],{"class":1903},[53,11051,10397],{"class":1903},[53,11053,10397],{"class":1903},[53,11055,3352],{"class":344},[53,11057,11058,11060,11062,11064,11066],{"class":55,"line":2344},[53,11059,10429],{"class":6588},[53,11061,391],{"class":344},[53,11063,9645],{"class":1903},[53,11065,10024],{"class":340},[53,11067,3352],{"class":344},[53,11069,11070,11072,11074,11076],{"class":55,"line":2356},[53,11071,10563],{"class":6588},[53,11073,391],{"class":344},[53,11075,10448],{"class":1903},[53,11077,3352],{"class":344},[53,11079,11080],{"class":55,"line":2368},[53,11081,622],{"class":344},[53,11083,11084],{"class":55,"line":2373},[53,11085,627],{"class":344},[53,11087,11088],{"class":55,"line":2397},[53,11089,806],{"emptyLinePlaceholder":805},[53,11091,11092,11094,11096],{"class":55,"line":2424},[53,11093,1964],{"class":344},[53,11095,3908],{"class":387},[53,11097,1722],{"class":344},[658,11099,11100],{},[661,11101,10624],{},[43,11103,11105],{"className":1705,"code":11104,"language":1707,"meta":48,"style":48},"\u003Ctemplate>\n \u003Cheader class=\"pageHeader\">\n \u003Cdiv class=\"branding\">\n \u003CNuxtLink to=\"/\" class=\"logo\">mjk @ web\u003C/NuxtLink>\n \u003C/div>\n \u003C!-- Navigation -->\n \u003Cnav :class=\"{ active: isMenuOpen }\">\n \u003Cul class=\"mainNav\">\n \u003Cli>\u003CNuxtLink to=\"/about\" @click=\"hideMenu\">About\u003C/NuxtLink>\u003C/li>\n \u003Cli>\u003CNuxtLink to=\"/links\" @click=\"hideMenu\">Links\u003C/NuxtLink>\u003C/li>\n \u003Cli>\u003CNuxtLink to=\"/datenschutzerklaerung\" @click=\"hideMenu\">Datenschutz-Erklärung\u003C/NuxtLink>\u003C/li>\n \u003Cli>\u003CNuxtLink to=\"/impressum\" @click=\"hideMenu\">Impressum\u003C/NuxtLink>\u003C/li>\n \u003C/ul>\n \u003C/nav>\n \u003C!-- Hamburger Menu -->\n \u003Cdiv class=\"hamburgerMenu\" @click=\"toggleMenu\">\n \u003Cspan>\u003C/span>\n \u003Cspan>\u003C/span>\n \u003Cspan>\u003C/span>\n \u003C/div>\n \u003C/header>\n\u003C/template>\n\n\u003Cscript>\nexport default {\n data() {\n return {\n isMenuOpen: false,\n };\n },\n methods: {\n toggleMenu() {\n this.isMenuOpen = !this.isMenuOpen;\n },\n\n hideMenu() {\n this.isMenuOpen = false;\n },\n },\n};\n\u003C/script>\n\n\u003Cstyle scoped>\n.pageHeader {\n color: black;\n min-height: 56px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding-left: 1rem;\n padding-right: 1rem;\n background: #1e6695;\n background: -moz-linear-gradient(top, #1e6695 0%, #74aacc 33%, #79aecb 66%, #2f4a66 100%);\n background: -webkit-linear-gradient(top, #1e6695 0%, #74aacc 33%, #79aecb 66%, #2f4a66 100%);\n background: linear-gradient(to bottom, #1e6695 0%, #74aacc 33%, #79aecb 66%, #2f4a66 100%);\n filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#1e6695', endColorstr='#2f4a66',GradientType=0 );\n}\n\n/* Branding */\n.branding .logo {\n font-size: 1.5rem;\n text-decoration: none;\n color: black;\n}\n\n/* Navigation */\nnav {\n display: none;\n}\n.mainNav {\n display: flex;\n flex-direction: column;\n gap: 1rem;\n list-style: none;\n margin: 0;\n padding: 1rem;\n background-color: #819cbb;\n border-radius: 0.5rem;\n box-shadow: 0 4px 6px rgba(0, 0, 0, 0.3);\n}\n.mainNav li a {\n text-decoration: none;\n color: black;\n transition: color 0.3s;\n}\n\n/* Hamburger Menu */\n.hamburgerMenu {\n display: flex;\n flex-direction: column;\n gap: 0.3rem;\n cursor: pointer;\n}\n.hamburgerMenu span {\n width: 25px;\n height: 3px;\n background-color: black;\n}\n\n/* Aktives Menü (für Mobile) */\nnav.active {\n display: block;\n}\n\n@media (max-width: 599px) {\n .mainNav li:hover {\n background-color: #7E99B8;\n }\n nav.active {\n position: absolute;\n top: 46px; /* Direkt unter der Header-Höhe */\n right: 16px;\n width: 200px;\n z-index: 10;\n }\n}\n\n/* Media Queries für größere Bildschirme */\n@media (min-width: 600px) {\n .mainNav {\n flex-direction: row;\n justify-content: center;\n background: none;\n padding: 0;\n box-shadow: none;\n }\n nav {\n display: flex;\n }\n .hamburgerMenu {\n display: none;\n }\n}\n\n@media (min-width: 1024px) {\n .pageHeader {\n margin-top: 10px;\n -webkit-border-radius: 20px 20px 0 0;\n border-radius: 20px 20px 0 0;\n border: 1px solid black;\n border-bottom: 0px;\n }\n}\n\n\u003C/style>\n",[50,11106,11107,11115,11133,11151,11187,11195,11200,11218,11236,11280,11324,11368,11412,11420,11428,11433,11461,11473,11485,11497,11505,11513,11521,11525,11533,11541,11549,11555,11565,11569,11573,11581,11589,11603,11607,11611,11619,11631,11635,11639,11643,11651,11655,11665,11673,11683,11693,11703,11713,11723,11733,11743,11755,11801,11847,11893,11927,11931,11935,11939,11951,11961,11971,11981,11985,11989,11993,11999,12009,12013,12021,12031,12041,12051,12061,12071,12081,12093,12103,12135,12139,12151,12161,12171,12183,12187,12191,12195,12203,12213,12223,12233,12243,12247,12257,12267,12277,12287,12291,12295,12299,12309,12319,12323,12327,12343,12357,12369,12373,12383,12393,12405,12415,12425,12435,12439,12443,12447,12451,12467,12475,12485,12495,12505,12515,12525,12529,12535,12545,12549,12557,12567,12571,12575,12579,12595,12603,12613,12629,12645,12657,12667,12671,12675,12679],{"__ignoreMap":48},[53,11108,11109,11111,11113],{"class":55,"line":56},[53,11110,510],{"class":344},[53,11112,3236],{"class":387},[53,11114,1722],{"class":344},[53,11116,11117,11119,11121,11123,11125,11127,11129,11131],{"class":55,"line":270},[53,11118,3243],{"class":344},[53,11120,7627],{"class":387},[53,11122,3249],{"class":584},[53,11124,521],{"class":344},[53,11126,524],{"class":344},[53,11128,8014],{"class":397},[53,11130,524],{"class":344},[53,11132,1722],{"class":344},[53,11134,11135,11137,11139,11141,11143,11145,11147,11149],{"class":55,"line":354},[53,11136,3265],{"class":344},[53,11138,7690],{"class":387},[53,11140,3249],{"class":584},[53,11142,521],{"class":344},[53,11144,524],{"class":344},[53,11146,8033],{"class":397},[53,11148,524],{"class":344},[53,11150,1722],{"class":344},[53,11152,11153,11155,11157,11159,11161,11163,11165,11167,11169,11171,11173,11175,11177,11179,11181,11183,11185],{"class":55,"line":360},[53,11154,7645],{"class":344},[53,11156,8045],{"class":387},[53,11158,8048],{"class":584},[53,11160,521],{"class":344},[53,11162,524],{"class":344},[53,11164,8055],{"class":397},[53,11166,524],{"class":344},[53,11168,3249],{"class":584},[53,11170,521],{"class":344},[53,11172,524],{"class":344},[53,11174,8066],{"class":397},[53,11176,524],{"class":344},[53,11178,7661],{"class":344},[53,11180,8073],{"class":340},[53,11182,1964],{"class":344},[53,11184,8045],{"class":387},[53,11186,1722],{"class":344},[53,11188,11189,11191,11193],{"class":55,"line":366},[53,11190,7675],{"class":344},[53,11192,7690],{"class":387},[53,11194,1722],{"class":344},[53,11196,11197],{"class":55,"line":372},[53,11198,11199],{"class":350}," \u003C!-- Navigation -->\n",[53,11201,11202,11204,11206,11208,11210,11212,11214,11216],{"class":55,"line":378},[53,11203,3265],{"class":344},[53,11205,8100],{"class":387},[53,11207,8103],{"class":584},[53,11209,521],{"class":344},[53,11211,524],{"class":344},[53,11213,8110],{"class":397},[53,11215,524],{"class":344},[53,11217,1722],{"class":344},[53,11219,11220,11222,11224,11226,11228,11230,11232,11234],{"class":55,"line":384},[53,11221,7645],{"class":344},[53,11223,658],{"class":387},[53,11225,3249],{"class":584},[53,11227,521],{"class":344},[53,11229,524],{"class":344},[53,11231,8129],{"class":397},[53,11233,524],{"class":344},[53,11235,1722],{"class":344},[53,11237,11238,11240,11242,11244,11246,11248,11250,11252,11254,11256,11258,11260,11262,11264,11266,11268,11270,11272,11274,11276,11278],{"class":55,"line":410},[53,11239,8042],{"class":344},[53,11241,661],{"class":387},[53,11243,8143],{"class":344},[53,11245,8045],{"class":387},[53,11247,8048],{"class":584},[53,11249,521],{"class":344},[53,11251,524],{"class":344},[53,11253,8154],{"class":397},[53,11255,524],{"class":344},[53,11257,8159],{"class":584},[53,11259,521],{"class":344},[53,11261,524],{"class":344},[53,11263,8166],{"class":397},[53,11265,524],{"class":344},[53,11267,7661],{"class":344},[53,11269,7664],{"class":340},[53,11271,1964],{"class":344},[53,11273,8045],{"class":387},[53,11275,8179],{"class":344},[53,11277,661],{"class":387},[53,11279,1722],{"class":344},[53,11281,11282,11284,11286,11288,11290,11292,11294,11296,11298,11300,11302,11304,11306,11308,11310,11312,11314,11316,11318,11320,11322],{"class":55,"line":416},[53,11283,8042],{"class":344},[53,11285,661],{"class":387},[53,11287,8143],{"class":344},[53,11289,8045],{"class":387},[53,11291,8048],{"class":584},[53,11293,521],{"class":344},[53,11295,524],{"class":344},[53,11297,8202],{"class":397},[53,11299,524],{"class":344},[53,11301,8159],{"class":584},[53,11303,521],{"class":344},[53,11305,524],{"class":344},[53,11307,8166],{"class":397},[53,11309,524],{"class":344},[53,11311,7661],{"class":344},[53,11313,8219],{"class":340},[53,11315,1964],{"class":344},[53,11317,8045],{"class":387},[53,11319,8179],{"class":344},[53,11321,661],{"class":387},[53,11323,1722],{"class":344},[53,11325,11326,11328,11330,11332,11334,11336,11338,11340,11342,11344,11346,11348,11350,11352,11354,11356,11358,11360,11362,11364,11366],{"class":55,"line":1882},[53,11327,8042],{"class":344},[53,11329,661],{"class":387},[53,11331,8143],{"class":344},[53,11333,8045],{"class":387},[53,11335,8048],{"class":584},[53,11337,521],{"class":344},[53,11339,524],{"class":344},[53,11341,8248],{"class":397},[53,11343,524],{"class":344},[53,11345,8159],{"class":584},[53,11347,521],{"class":344},[53,11349,524],{"class":344},[53,11351,8166],{"class":397},[53,11353,524],{"class":344},[53,11355,7661],{"class":344},[53,11357,8265],{"class":340},[53,11359,1964],{"class":344},[53,11361,8045],{"class":387},[53,11363,8179],{"class":344},[53,11365,661],{"class":387},[53,11367,1722],{"class":344},[53,11369,11370,11372,11374,11376,11378,11380,11382,11384,11386,11388,11390,11392,11394,11396,11398,11400,11402,11404,11406,11408,11410],{"class":55,"line":1888},[53,11371,8042],{"class":344},[53,11373,661],{"class":387},[53,11375,8143],{"class":344},[53,11377,8045],{"class":387},[53,11379,8048],{"class":584},[53,11381,521],{"class":344},[53,11383,524],{"class":344},[53,11385,8294],{"class":397},[53,11387,524],{"class":344},[53,11389,8159],{"class":584},[53,11391,521],{"class":344},[53,11393,524],{"class":344},[53,11395,8166],{"class":397},[53,11397,524],{"class":344},[53,11399,7661],{"class":344},[53,11401,8311],{"class":340},[53,11403,1964],{"class":344},[53,11405,8045],{"class":387},[53,11407,8179],{"class":344},[53,11409,661],{"class":387},[53,11411,1722],{"class":344},[53,11413,11414,11416,11418],{"class":55,"line":1909},[53,11415,8084],{"class":344},[53,11417,658],{"class":387},[53,11419,1722],{"class":344},[53,11421,11422,11424,11426],{"class":55,"line":1914},[53,11423,7675],{"class":344},[53,11425,8100],{"class":387},[53,11427,1722],{"class":344},[53,11429,11430],{"class":55,"line":1919},[53,11431,11432],{"class":350}," \u003C!-- Hamburger Menu -->\n",[53,11434,11435,11437,11439,11441,11443,11445,11447,11449,11451,11453,11455,11457,11459],{"class":55,"line":1961},[53,11436,3265],{"class":344},[53,11438,7690],{"class":387},[53,11440,3249],{"class":584},[53,11442,521],{"class":344},[53,11444,524],{"class":344},[53,11446,8358],{"class":397},[53,11448,524],{"class":344},[53,11450,8159],{"class":584},[53,11452,521],{"class":344},[53,11454,524],{"class":344},[53,11456,8369],{"class":397},[53,11458,524],{"class":344},[53,11460,1722],{"class":344},[53,11462,11463,11465,11467,11469,11471],{"class":55,"line":2188},[53,11464,7645],{"class":344},[53,11466,53],{"class":387},[53,11468,8179],{"class":344},[53,11470,53],{"class":387},[53,11472,1722],{"class":344},[53,11474,11475,11477,11479,11481,11483],{"class":55,"line":2208},[53,11476,7645],{"class":344},[53,11478,53],{"class":387},[53,11480,8179],{"class":344},[53,11482,53],{"class":387},[53,11484,1722],{"class":344},[53,11486,11487,11489,11491,11493,11495],{"class":55,"line":2229},[53,11488,7645],{"class":344},[53,11490,53],{"class":387},[53,11492,8179],{"class":344},[53,11494,53],{"class":387},[53,11496,1722],{"class":344},[53,11498,11499,11501,11503],{"class":55,"line":2244},[53,11500,7675],{"class":344},[53,11502,7690],{"class":387},[53,11504,1722],{"class":344},[53,11506,11507,11509,11511],{"class":55,"line":2269},[53,11508,3300],{"class":344},[53,11510,7627],{"class":387},[53,11512,1722],{"class":344},[53,11514,11515,11517,11519],{"class":55,"line":2287},[53,11516,1964],{"class":344},[53,11518,3236],{"class":387},[53,11520,1722],{"class":344},[53,11522,11523],{"class":55,"line":2298},[53,11524,806],{"emptyLinePlaceholder":805},[53,11526,11527,11529,11531],{"class":55,"line":2303},[53,11528,510],{"class":344},[53,11530,1716],{"class":387},[53,11532,1722],{"class":344},[53,11534,11535,11537,11539],{"class":55,"line":2309},[53,11536,330],{"class":329},[53,11538,333],{"class":329},[53,11540,592],{"class":344},[53,11542,11543,11545,11547],{"class":55,"line":2331},[53,11544,8519],{"class":387},[53,11546,5581],{"class":344},[53,11548,592],{"class":344},[53,11550,11551,11553],{"class":55,"line":2344},[53,11552,1891],{"class":329},[53,11554,592],{"class":344},[53,11556,11557,11559,11561,11563],{"class":55,"line":2356},[53,11558,8534],{"class":387},[53,11560,391],{"class":344},[53,11562,4393],{"class":4392},[53,11564,870],{"class":344},[53,11566,11567],{"class":55,"line":2368},[53,11568,8545],{"class":344},[53,11570,11571],{"class":55,"line":2373},[53,11572,3537],{"class":344},[53,11574,11575,11577,11579],{"class":55,"line":2397},[53,11576,8554],{"class":387},[53,11578,391],{"class":344},[53,11580,592],{"class":344},[53,11582,11583,11585,11587],{"class":55,"line":2424},[53,11584,8563],{"class":387},[53,11586,5581],{"class":344},[53,11588,592],{"class":344},[53,11590,11591,11593,11595,11597,11599,11601],{"class":55,"line":2430},[53,11592,8572],{"class":344},[53,11594,8575],{"class":340},[53,11596,1200],{"class":344},[53,11598,8580],{"class":344},[53,11600,8575],{"class":340},[53,11602,3352],{"class":344},[53,11604,11605],{"class":55,"line":2461},[53,11606,3532],{"class":344},[53,11608,11609],{"class":55,"line":2493},[53,11610,806],{"emptyLinePlaceholder":805},[53,11612,11613,11615,11617],{"class":55,"line":2515},[53,11614,8597],{"class":387},[53,11616,5581],{"class":344},[53,11618,592],{"class":344},[53,11620,11621,11623,11625,11627,11629],{"class":55,"line":2547},[53,11622,8572],{"class":344},[53,11624,8575],{"class":340},[53,11626,1200],{"class":344},[53,11628,4393],{"class":4392},[53,11630,3352],{"class":344},[53,11632,11633],{"class":55,"line":2576},[53,11634,3532],{"class":344},[53,11636,11637],{"class":55,"line":2596},[53,11638,3537],{"class":344},[53,11640,11641],{"class":55,"line":2614},[53,11642,3542],{"class":344},[53,11644,11645,11647,11649],{"class":55,"line":2632},[53,11646,1964],{"class":344},[53,11648,1716],{"class":387},[53,11650,1722],{"class":344},[53,11652,11653],{"class":55,"line":2668},[53,11654,806],{"emptyLinePlaceholder":805},[53,11656,11657,11659,11661,11663],{"class":55,"line":2702},[53,11658,510],{"class":344},[53,11660,3908],{"class":387},[53,11662,10699],{"class":584},[53,11664,1722],{"class":344},[53,11666,11667,11669,11671],{"class":55,"line":2720},[53,11668,634],{"class":344},[53,11670,8014],{"class":600},[53,11672,592],{"class":344},[53,11674,11675,11677,11679,11681],{"class":55,"line":2725},[53,11676,8809],{"class":6588},[53,11678,391],{"class":344},[53,11680,8814],{"class":340},[53,11682,3352],{"class":344},[53,11684,11685,11687,11689,11691],{"class":55,"line":2733},[53,11686,8750],{"class":6588},[53,11688,391],{"class":344},[53,11690,8825],{"class":1903},[53,11692,3352],{"class":344},[53,11694,11695,11697,11699,11701],{"class":55,"line":2738},[53,11696,8726],{"class":6588},[53,11698,391],{"class":344},[53,11700,8731],{"class":340},[53,11702,3352],{"class":344},[53,11704,11705,11707,11709,11711],{"class":55,"line":2744},[53,11706,8842],{"class":6588},[53,11708,391],{"class":344},[53,11710,8847],{"class":340},[53,11712,3352],{"class":344},[53,11714,11715,11717,11719,11721],{"class":55,"line":2754},[53,11716,8854],{"class":6588},[53,11718,391],{"class":344},[53,11720,8859],{"class":340},[53,11722,3352],{"class":344},[53,11724,11725,11727,11729,11731],{"class":55,"line":2787},[53,11726,8866],{"class":6588},[53,11728,391],{"class":344},[53,11730,8871],{"class":1903},[53,11732,3352],{"class":344},[53,11734,11735,11737,11739,11741],{"class":55,"line":2810},[53,11736,8878],{"class":6588},[53,11738,391],{"class":344},[53,11740,8871],{"class":1903},[53,11742,3352],{"class":344},[53,11744,11745,11747,11749,11751,11753],{"class":55,"line":2826},[53,11746,8889],{"class":6588},[53,11748,391],{"class":344},[53,11750,8676],{"class":344},[53,11752,8896],{"class":340},[53,11754,3352],{"class":344},[53,11756,11757,11759,11761,11763,11765,11767,11769,11771,11773,11775,11777,11779,11781,11783,11785,11787,11789,11791,11793,11795,11797,11799],{"class":55,"line":2858},[53,11758,8889],{"class":6588},[53,11760,391],{"class":344},[53,11762,8908],{"class":336},[53,11764,341],{"class":344},[53,11766,8913],{"class":340},[53,11768,404],{"class":344},[53,11770,8676],{"class":344},[53,11772,8920],{"class":340},[53,11774,8923],{"class":1903},[53,11776,404],{"class":344},[53,11778,8676],{"class":344},[53,11780,8930],{"class":340},[53,11782,8933],{"class":1903},[53,11784,404],{"class":344},[53,11786,8676],{"class":344},[53,11788,8940],{"class":340},[53,11790,8943],{"class":1903},[53,11792,404],{"class":344},[53,11794,8676],{"class":344},[53,11796,8950],{"class":340},[53,11798,8953],{"class":1903},[53,11800,6636],{"class":344},[53,11802,11803,11805,11807,11809,11811,11813,11815,11817,11819,11821,11823,11825,11827,11829,11831,11833,11835,11837,11839,11841,11843,11845],{"class":55,"line":2876},[53,11804,8889],{"class":6588},[53,11806,391],{"class":344},[53,11808,8965],{"class":336},[53,11810,341],{"class":344},[53,11812,8913],{"class":340},[53,11814,404],{"class":344},[53,11816,8676],{"class":344},[53,11818,8920],{"class":340},[53,11820,8923],{"class":1903},[53,11822,404],{"class":344},[53,11824,8676],{"class":344},[53,11826,8930],{"class":340},[53,11828,8933],{"class":1903},[53,11830,404],{"class":344},[53,11832,8676],{"class":344},[53,11834,8940],{"class":340},[53,11836,8943],{"class":1903},[53,11838,404],{"class":344},[53,11840,8676],{"class":344},[53,11842,8950],{"class":340},[53,11844,8953],{"class":1903},[53,11846,6636],{"class":344},[53,11848,11849,11851,11853,11855,11857,11859,11861,11863,11865,11867,11869,11871,11873,11875,11877,11879,11881,11883,11885,11887,11889,11891],{"class":55,"line":2896},[53,11850,8889],{"class":6588},[53,11852,391],{"class":344},[53,11854,9013],{"class":336},[53,11856,9016],{"class":344},[53,11858,9019],{"class":340},[53,11860,404],{"class":344},[53,11862,8676],{"class":344},[53,11864,8920],{"class":340},[53,11866,8923],{"class":1903},[53,11868,404],{"class":344},[53,11870,8676],{"class":344},[53,11872,8930],{"class":340},[53,11874,8933],{"class":1903},[53,11876,404],{"class":344},[53,11878,8676],{"class":344},[53,11880,8940],{"class":340},[53,11882,8943],{"class":1903},[53,11884,404],{"class":344},[53,11886,8676],{"class":344},[53,11888,8950],{"class":340},[53,11890,8953],{"class":1903},[53,11892,6636],{"class":344},[53,11894,11895,11897,11899,11901,11903,11905,11907,11909,11911,11913,11915,11917,11919,11921,11923,11925],{"class":55,"line":2917},[53,11896,9059],{"class":6588},[53,11898,391],{"class":344},[53,11900,9064],{"class":340},[53,11902,401],{"class":344},[53,11904,9069],{"class":397},[53,11906,401],{"class":344},[53,11908,404],{"class":344},[53,11910,9076],{"class":340},[53,11912,401],{"class":344},[53,11914,9081],{"class":397},[53,11916,401],{"class":344},[53,11918,404],{"class":344},[53,11920,9088],{"class":340},[53,11922,1904],{"class":1903},[53,11924,9093],{"class":340},[53,11926,3352],{"class":344},[53,11928,11929],{"class":55,"line":2952},[53,11930,627],{"class":344},[53,11932,11933],{"class":55,"line":2970},[53,11934,806],{"emptyLinePlaceholder":805},[53,11936,11937],{"class":55,"line":2984},[53,11938,9111],{"class":350},[53,11940,11941,11943,11945,11947,11949],{"class":55,"line":3004},[53,11942,634],{"class":344},[53,11944,8033],{"class":600},[53,11946,9121],{"class":344},[53,11948,8066],{"class":600},[53,11950,592],{"class":344},[53,11952,11953,11955,11957,11959],{"class":55,"line":3022},[53,11954,9131],{"class":6588},[53,11956,391],{"class":344},[53,11958,9136],{"class":1903},[53,11960,3352],{"class":344},[53,11962,11963,11965,11967,11969],{"class":55,"line":3036},[53,11964,9144],{"class":6588},[53,11966,391],{"class":344},[53,11968,9149],{"class":340},[53,11970,3352],{"class":344},[53,11972,11973,11975,11977,11979],{"class":55,"line":3056},[53,11974,8809],{"class":6588},[53,11976,391],{"class":344},[53,11978,8814],{"class":340},[53,11980,3352],{"class":344},[53,11982,11983],{"class":55,"line":3076},[53,11984,627],{"class":344},[53,11986,11987],{"class":55,"line":3100},[53,11988,806],{"emptyLinePlaceholder":805},[53,11990,11991],{"class":55,"line":3107},[53,11992,9178],{"class":350},[53,11994,11995,11997],{"class":55,"line":3112},[53,11996,8100],{"class":600},[53,11998,592],{"class":344},[53,12000,12001,12003,12005,12007],{"class":55,"line":3118},[53,12002,8726],{"class":6588},[53,12004,391],{"class":344},[53,12006,9149],{"class":340},[53,12008,3352],{"class":344},[53,12010,12011],{"class":55,"line":3128},[53,12012,627],{"class":344},[53,12014,12015,12017,12019],{"class":55,"line":3148},[53,12016,634],{"class":344},[53,12018,8129],{"class":600},[53,12020,592],{"class":344},[53,12022,12023,12025,12027,12029],{"class":55,"line":3170},[53,12024,8726],{"class":6588},[53,12026,391],{"class":344},[53,12028,8731],{"class":340},[53,12030,3352],{"class":344},[53,12032,12033,12035,12037,12039],{"class":55,"line":3181},[53,12034,8738],{"class":6588},[53,12036,391],{"class":344},[53,12038,8743],{"class":340},[53,12040,3352],{"class":344},[53,12042,12043,12045,12047,12049],{"class":55,"line":3188},[53,12044,9238],{"class":6588},[53,12046,391],{"class":344},[53,12048,8871],{"class":1903},[53,12050,3352],{"class":344},[53,12052,12053,12055,12057,12059],{"class":55,"line":3193},[53,12054,9250],{"class":6588},[53,12056,391],{"class":344},[53,12058,9149],{"class":340},[53,12060,3352],{"class":344},[53,12062,12063,12065,12067,12069],{"class":55,"line":8901},[53,12064,8686],{"class":6588},[53,12066,391],{"class":344},[53,12068,8691],{"class":1903},[53,12070,3352],{"class":344},[53,12072,12073,12075,12077,12079],{"class":55,"line":8958},[53,12074,9273],{"class":6588},[53,12076,391],{"class":344},[53,12078,8871],{"class":1903},[53,12080,3352],{"class":344},[53,12082,12083,12085,12087,12089,12091],{"class":55,"line":9006},[53,12084,8671],{"class":6588},[53,12086,391],{"class":344},[53,12088,8676],{"class":344},[53,12090,9291],{"class":340},[53,12092,3352],{"class":344},[53,12094,12095,12097,12099,12101],{"class":55,"line":9056},[53,12096,9299],{"class":6588},[53,12098,391],{"class":344},[53,12100,9304],{"class":1903},[53,12102,3352],{"class":344},[53,12104,12105,12107,12109,12111,12113,12115,12117,12119,12121,12123,12125,12127,12129,12131,12133],{"class":55,"line":9098},[53,12106,9312],{"class":6588},[53,12108,391],{"class":344},[53,12110,8691],{"class":1903},[53,12112,9319],{"class":1903},[53,12114,9322],{"class":1903},[53,12116,9325],{"class":336},[53,12118,341],{"class":344},[53,12120,1904],{"class":1903},[53,12122,404],{"class":344},[53,12124,8691],{"class":1903},[53,12126,404],{"class":344},[53,12128,8691],{"class":1903},[53,12130,404],{"class":344},[53,12132,9342],{"class":1903},[53,12134,6636],{"class":344},[53,12136,12137],{"class":55,"line":9103},[53,12138,627],{"class":344},[53,12140,12141,12143,12145,12147,12149],{"class":55,"line":9108},[53,12142,634],{"class":344},[53,12144,8129],{"class":600},[53,12146,9359],{"class":600},[53,12148,9362],{"class":600},[53,12150,592],{"class":344},[53,12152,12153,12155,12157,12159],{"class":55,"line":9114},[53,12154,9144],{"class":6588},[53,12156,391],{"class":344},[53,12158,9149],{"class":340},[53,12160,3352],{"class":344},[53,12162,12163,12165,12167,12169],{"class":55,"line":9128},[53,12164,8809],{"class":6588},[53,12166,391],{"class":344},[53,12168,8814],{"class":340},[53,12170,3352],{"class":344},[53,12172,12173,12175,12177,12179,12181],{"class":55,"line":9141},[53,12174,9392],{"class":6588},[53,12176,391],{"class":344},[53,12178,9397],{"class":340},[53,12180,9400],{"class":1903},[53,12182,3352],{"class":344},[53,12184,12185],{"class":55,"line":9154},[53,12186,627],{"class":344},[53,12188,12189],{"class":55,"line":9165},[53,12190,806],{"emptyLinePlaceholder":805},[53,12192,12193],{"class":55,"line":9170},[53,12194,9418],{"class":350},[53,12196,12197,12199,12201],{"class":55,"line":9175},[53,12198,634],{"class":344},[53,12200,8358],{"class":600},[53,12202,592],{"class":344},[53,12204,12205,12207,12209,12211],{"class":55,"line":9181},[53,12206,8726],{"class":6588},[53,12208,391],{"class":344},[53,12210,8731],{"class":340},[53,12212,3352],{"class":344},[53,12214,12215,12217,12219,12221],{"class":55,"line":9188},[53,12216,8738],{"class":6588},[53,12218,391],{"class":344},[53,12220,8743],{"class":340},[53,12222,3352],{"class":344},[53,12224,12225,12227,12229,12231],{"class":55,"line":9199},[53,12226,9238],{"class":6588},[53,12228,391],{"class":344},[53,12230,9459],{"class":1903},[53,12232,3352],{"class":344},[53,12234,12235,12237,12239,12241],{"class":55,"line":9204},[53,12236,9467],{"class":6588},[53,12238,391],{"class":344},[53,12240,9472],{"class":340},[53,12242,3352],{"class":344},[53,12244,12245],{"class":55,"line":9213},[53,12246,627],{"class":344},[53,12248,12249,12251,12253,12255],{"class":55,"line":9224},[53,12250,634],{"class":344},[53,12252,8358],{"class":600},[53,12254,9489],{"class":600},[53,12256,592],{"class":344},[53,12258,12259,12261,12263,12265],{"class":55,"line":9235},[53,12260,9497],{"class":6588},[53,12262,391],{"class":344},[53,12264,9502],{"class":1903},[53,12266,3352],{"class":344},[53,12268,12269,12271,12273,12275],{"class":55,"line":9247},[53,12270,9510],{"class":6588},[53,12272,391],{"class":344},[53,12274,9515],{"class":1903},[53,12276,3352],{"class":344},[53,12278,12279,12281,12283,12285],{"class":55,"line":9259},[53,12280,8671],{"class":6588},[53,12282,391],{"class":344},[53,12284,8814],{"class":340},[53,12286,3352],{"class":344},[53,12288,12289],{"class":55,"line":9270},[53,12290,627],{"class":344},[53,12292,12293],{"class":55,"line":9282},[53,12294,806],{"emptyLinePlaceholder":805},[53,12296,12297],{"class":55,"line":9296},[53,12298,9544],{"class":350},[53,12300,12301,12303,12305,12307],{"class":55,"line":9309},[53,12302,8100],{"class":600},[53,12304,634],{"class":344},[53,12306,9554],{"class":600},[53,12308,592],{"class":344},[53,12310,12311,12313,12315,12317],{"class":55,"line":9347},[53,12312,8726],{"class":6588},[53,12314,391],{"class":344},[53,12316,9566],{"class":340},[53,12318,3352],{"class":344},[53,12320,12321],{"class":55,"line":9352},[53,12322,627],{"class":344},[53,12324,12325],{"class":55,"line":9367},[53,12326,806],{"emptyLinePlaceholder":805},[53,12328,12329,12331,12333,12335,12337,12339,12341],{"class":55,"line":9378},[53,12330,10042],{"class":329},[53,12332,2436],{"class":344},[53,12334,10047],{"class":600},[53,12336,391],{"class":344},[53,12338,10052],{"class":1903},[53,12340,1041],{"class":344},[53,12342,592],{"class":344},[53,12344,12345,12347,12349,12351,12353,12355],{"class":55,"line":9389},[53,12346,10062],{"class":344},[53,12348,8129],{"class":600},[53,12350,9359],{"class":600},[53,12352,391],{"class":344},[53,12354,10071],{"class":584},[53,12356,592],{"class":344},[53,12358,12359,12361,12363,12365,12367],{"class":55,"line":9405},[53,12360,10079],{"class":6588},[53,12362,391],{"class":344},[53,12364,8676],{"class":344},[53,12366,10086],{"class":340},[53,12368,3352],{"class":344},[53,12370,12371],{"class":55,"line":9410},[53,12372,622],{"class":344},[53,12374,12375,12377,12379,12381],{"class":55,"line":9415},[53,12376,10099],{"class":600},[53,12378,634],{"class":344},[53,12380,9554],{"class":600},[53,12382,592],{"class":344},[53,12384,12385,12387,12389,12391],{"class":55,"line":9421},[53,12386,10111],{"class":6588},[53,12388,391],{"class":344},[53,12390,10116],{"class":340},[53,12392,3352],{"class":344},[53,12394,12395,12397,12399,12401,12403],{"class":55,"line":9430},[53,12396,10124],{"class":6588},[53,12398,391],{"class":344},[53,12400,10129],{"class":1903},[53,12402,10132],{"class":344},[53,12404,10135],{"class":350},[53,12406,12407,12409,12411,12413],{"class":55,"line":9441},[53,12408,10141],{"class":6588},[53,12410,391],{"class":344},[53,12412,10146],{"class":1903},[53,12414,3352],{"class":344},[53,12416,12417,12419,12421,12423],{"class":55,"line":9452},[53,12418,10154],{"class":6588},[53,12420,391],{"class":344},[53,12422,10159],{"class":1903},[53,12424,3352],{"class":344},[53,12426,12427,12429,12431,12433],{"class":55,"line":9464},[53,12428,10167],{"class":6588},[53,12430,391],{"class":344},[53,12432,10172],{"class":1903},[53,12434,3352],{"class":344},[53,12436,12437],{"class":55,"line":9477},[53,12438,622],{"class":344},[53,12440,12441],{"class":55,"line":9482},[53,12442,627],{"class":344},[53,12444,12445],{"class":55,"line":9494},[53,12446,806],{"emptyLinePlaceholder":805},[53,12448,12449],{"class":55,"line":9507},[53,12450,10195],{"class":350},[53,12452,12453,12455,12457,12459,12461,12463,12465],{"class":55,"line":9520},[53,12454,10042],{"class":329},[53,12456,2436],{"class":344},[53,12458,10205],{"class":600},[53,12460,391],{"class":344},[53,12462,10210],{"class":1903},[53,12464,1041],{"class":344},[53,12466,592],{"class":344},[53,12468,12469,12471,12473],{"class":55,"line":9531},[53,12470,10062],{"class":344},[53,12472,8129],{"class":600},[53,12474,592],{"class":344},[53,12476,12477,12479,12481,12483],{"class":55,"line":9536},[53,12478,10229],{"class":6588},[53,12480,391],{"class":344},[53,12482,10234],{"class":340},[53,12484,3352],{"class":344},[53,12486,12487,12489,12491,12493],{"class":55,"line":9541},[53,12488,10242],{"class":6588},[53,12490,391],{"class":344},[53,12492,8859],{"class":340},[53,12494,3352],{"class":344},[53,12496,12497,12499,12501,12503],{"class":55,"line":9547},[53,12498,10254],{"class":6588},[53,12500,391],{"class":344},[53,12502,9149],{"class":340},[53,12504,3352],{"class":344},[53,12506,12507,12509,12511,12513],{"class":55,"line":9559},[53,12508,10266],{"class":6588},[53,12510,391],{"class":344},[53,12512,8691],{"class":1903},[53,12514,3352],{"class":344},[53,12516,12517,12519,12521,12523],{"class":55,"line":9571},[53,12518,10278],{"class":6588},[53,12520,391],{"class":344},[53,12522,9149],{"class":340},[53,12524,3352],{"class":344},[53,12526,12527],{"class":55,"line":9576},[53,12528,622],{"class":344},[53,12530,12531,12533],{"class":55,"line":9581},[53,12532,10099],{"class":600},[53,12534,592],{"class":344},[53,12536,12537,12539,12541,12543],{"class":55,"line":9590},[53,12538,10302],{"class":6588},[53,12540,391],{"class":344},[53,12542,8731],{"class":340},[53,12544,3352],{"class":344},[53,12546,12547],{"class":55,"line":9604},[53,12548,622],{"class":344},[53,12550,12551,12553,12555],{"class":55,"line":9616},[53,12552,10062],{"class":344},[53,12554,8358],{"class":600},[53,12556,592],{"class":344},[53,12558,12559,12561,12563,12565],{"class":55,"line":9621},[53,12560,10302],{"class":6588},[53,12562,391],{"class":344},[53,12564,9149],{"class":340},[53,12566,3352],{"class":344},[53,12568,12569],{"class":55,"line":9626},[53,12570,622],{"class":344},[53,12572,12573],{"class":55,"line":9637},[53,12574,627],{"class":344},[53,12576,12577],{"class":55,"line":9659},[53,12578,806],{"emptyLinePlaceholder":805},[53,12580,12581,12583,12585,12587,12589,12591,12593],{"class":55,"line":9671},[53,12582,10042],{"class":329},[53,12584,2436],{"class":344},[53,12586,10205],{"class":600},[53,12588,391],{"class":344},[53,12590,8767],{"class":1903},[53,12592,1041],{"class":344},[53,12594,592],{"class":344},[53,12596,12597,12599,12601],{"class":55,"line":9684},[53,12598,10062],{"class":344},[53,12600,8014],{"class":600},[53,12602,592],{"class":344},[53,12604,12605,12607,12609,12611],{"class":55,"line":9695},[53,12606,10380],{"class":6588},[53,12608,391],{"class":344},[53,12610,9666],{"class":1903},[53,12612,3352],{"class":344},[53,12614,12615,12617,12619,12621,12623,12625,12627],{"class":55,"line":9700},[53,12616,10392],{"class":600},[53,12618,391],{"class":344},[53,12620,10397],{"class":1903},[53,12622,10397],{"class":1903},[53,12624,8691],{"class":1903},[53,12626,8691],{"class":1903},[53,12628,3352],{"class":344},[53,12630,12631,12633,12635,12637,12639,12641,12643],{"class":55,"line":9705},[53,12632,10411],{"class":6588},[53,12634,391],{"class":344},[53,12636,10397],{"class":1903},[53,12638,10397],{"class":1903},[53,12640,8691],{"class":1903},[53,12642,8691],{"class":1903},[53,12644,3352],{"class":344},[53,12646,12647,12649,12651,12653,12655],{"class":55,"line":9712},[53,12648,10429],{"class":6588},[53,12650,391],{"class":344},[53,12652,9645],{"class":1903},[53,12654,10024],{"class":340},[53,12656,3352],{"class":344},[53,12658,12659,12661,12663,12665],{"class":55,"line":9724},[53,12660,10443],{"class":6588},[53,12662,391],{"class":344},[53,12664,10448],{"class":1903},[53,12666,3352],{"class":344},[53,12668,12669],{"class":55,"line":9736},[53,12670,622],{"class":344},[53,12672,12673],{"class":55,"line":9748},[53,12674,627],{"class":344},[53,12676,12677],{"class":55,"line":9761},[53,12678,806],{"emptyLinePlaceholder":805},[53,12680,12681,12683,12685],{"class":55,"line":9794},[53,12682,1964],{"class":344},[53,12684,3908],{"class":387},[53,12686,1722],{"class":344},[658,12688,12689],{},[661,12690,714],{},[43,12692,12694],{"className":1705,"code":12693,"language":1707,"meta":48,"style":48},"\u003Ctemplate>\n \u003Cdiv class=\"pageWrapper\">\n \u003CpageHeader />\n \u003Cdiv class=\"pageContent\">\n \u003CNuxtPage />\n \u003C/div>\n \u003CpageFooter />\n \u003C/div>\n\u003C/template>\n\n\u003Cstyle>\n/* Mobile-First Design */\n\n/* Basic-Styling for mobile Devices */\nbody {\n background-color: #213c5b;\n margin: 0;\n font-family: Arial, sans-serif;\n}\n.pageWrapper {\n display: flex;\n flex-direction: column;\n min-height: 100vh;\n max-width: 1024px;\n margin-right: auto;\n margin-left: auto;\n}\n\n.pageContent {\n background-color: #415c7b;\n padding: 15px;\n}\n\n.pageContent article {\n border: 1px solid #000;\n border-radius: 10px;\n background-color: #819cbb;\n padding: 15px;\n}\n\n/* Media Queries für größere Bildschirme */\n@media (min-width: 1024px) {\n .pageContent {\n border-left: solid 1px black;\n border-right: solid 1px black;\n }\n}\n\u003C/style>\n",[50,12695,12696,12704,12722,12730,12748,12756,12764,12773,12781,12789,12793,12801,12805,12809,12813,12819,12831,12841,12855,12859,12867,12877,12887,12897,12907,12917,12927,12931,12935,12943,12955,12965,12969,12973,12983,12999,13009,13021,13031,13035,13039,13043,13059,13067,13081,13095,13099,13103],{"__ignoreMap":48},[53,12697,12698,12700,12702],{"class":55,"line":56},[53,12699,510],{"class":344},[53,12701,3236],{"class":387},[53,12703,1722],{"class":344},[53,12705,12706,12708,12710,12712,12714,12716,12718,12720],{"class":55,"line":270},[53,12707,3243],{"class":344},[53,12709,7690],{"class":387},[53,12711,3249],{"class":584},[53,12713,521],{"class":344},[53,12715,524],{"class":344},[53,12717,7995],{"class":397},[53,12719,524],{"class":344},[53,12721,1722],{"class":344},[53,12723,12724,12726,12728],{"class":55,"line":354},[53,12725,3265],{"class":344},[53,12727,8014],{"class":387},[53,12729,532],{"class":344},[53,12731,12732,12734,12736,12738,12740,12742,12744,12746],{"class":55,"line":360},[53,12733,3265],{"class":344},[53,12735,7690],{"class":387},[53,12737,3249],{"class":584},[53,12739,521],{"class":344},[53,12741,524],{"class":344},[53,12743,8440],{"class":397},[53,12745,524],{"class":344},[53,12747,1722],{"class":344},[53,12749,12750,12752,12754],{"class":55,"line":366},[53,12751,7645],{"class":344},[53,12753,8451],{"class":387},[53,12755,532],{"class":344},[53,12757,12758,12760,12762],{"class":55,"line":372},[53,12759,7675],{"class":344},[53,12761,7690],{"class":387},[53,12763,1722],{"class":344},[53,12765,12766,12768,12771],{"class":55,"line":378},[53,12767,3265],{"class":344},[53,12769,12770],{"class":387},"pageFooter",[53,12772,532],{"class":344},[53,12774,12775,12777,12779],{"class":55,"line":384},[53,12776,3300],{"class":344},[53,12778,7690],{"class":387},[53,12780,1722],{"class":344},[53,12782,12783,12785,12787],{"class":55,"line":410},[53,12784,1964],{"class":344},[53,12786,3236],{"class":387},[53,12788,1722],{"class":344},[53,12790,12791],{"class":55,"line":416},[53,12792,806],{"emptyLinePlaceholder":805},[53,12794,12795,12797,12799],{"class":55,"line":1882},[53,12796,510],{"class":344},[53,12798,3908],{"class":387},[53,12800,1722],{"class":344},[53,12802,12803],{"class":55,"line":1888},[53,12804,8650],{"class":350},[53,12806,12807],{"class":55,"line":1909},[53,12808,806],{"emptyLinePlaceholder":805},[53,12810,12811],{"class":55,"line":1914},[53,12812,8659],{"class":350},[53,12814,12815,12817],{"class":55,"line":1919},[53,12816,8664],{"class":600},[53,12818,592],{"class":344},[53,12820,12821,12823,12825,12827,12829],{"class":55,"line":1961},[53,12822,8671],{"class":6588},[53,12824,391],{"class":344},[53,12826,8676],{"class":344},[53,12828,8679],{"class":340},[53,12830,3352],{"class":344},[53,12832,12833,12835,12837,12839],{"class":55,"line":2188},[53,12834,8686],{"class":6588},[53,12836,391],{"class":344},[53,12838,8691],{"class":1903},[53,12840,3352],{"class":344},[53,12842,12843,12845,12847,12849,12851,12853],{"class":55,"line":2208},[53,12844,6589],{"class":6588},[53,12846,391],{"class":344},[53,12848,8702],{"class":340},[53,12850,404],{"class":344},[53,12852,8707],{"class":340},[53,12854,3352],{"class":344},[53,12856,12857],{"class":55,"line":2229},[53,12858,627],{"class":344},[53,12860,12861,12863,12865],{"class":55,"line":2244},[53,12862,634],{"class":344},[53,12864,7995],{"class":600},[53,12866,592],{"class":344},[53,12868,12869,12871,12873,12875],{"class":55,"line":2269},[53,12870,8726],{"class":6588},[53,12872,391],{"class":344},[53,12874,8731],{"class":340},[53,12876,3352],{"class":344},[53,12878,12879,12881,12883,12885],{"class":55,"line":2287},[53,12880,8738],{"class":6588},[53,12882,391],{"class":344},[53,12884,8743],{"class":340},[53,12886,3352],{"class":344},[53,12888,12889,12891,12893,12895],{"class":55,"line":2298},[53,12890,8750],{"class":6588},[53,12892,391],{"class":344},[53,12894,8755],{"class":1903},[53,12896,3352],{"class":344},[53,12898,12899,12901,12903,12905],{"class":55,"line":2303},[53,12900,8762],{"class":6588},[53,12902,391],{"class":344},[53,12904,8767],{"class":1903},[53,12906,3352],{"class":344},[53,12908,12909,12911,12913,12915],{"class":55,"line":2309},[53,12910,8774],{"class":6588},[53,12912,391],{"class":344},[53,12914,8779],{"class":340},[53,12916,3352],{"class":344},[53,12918,12919,12921,12923,12925],{"class":55,"line":2331},[53,12920,8786],{"class":6588},[53,12922,391],{"class":344},[53,12924,8779],{"class":340},[53,12926,3352],{"class":344},[53,12928,12929],{"class":55,"line":2344},[53,12930,627],{"class":344},[53,12932,12933],{"class":55,"line":2356},[53,12934,806],{"emptyLinePlaceholder":805},[53,12936,12937,12939,12941],{"class":55,"line":2368},[53,12938,634],{"class":344},[53,12940,8440],{"class":600},[53,12942,592],{"class":344},[53,12944,12945,12947,12949,12951,12953],{"class":55,"line":2373},[53,12946,8671],{"class":6588},[53,12948,391],{"class":344},[53,12950,8676],{"class":344},[53,12952,9599],{"class":340},[53,12954,3352],{"class":344},[53,12956,12957,12959,12961,12963],{"class":55,"line":2397},[53,12958,9273],{"class":6588},[53,12960,391],{"class":344},[53,12962,9611],{"class":1903},[53,12964,3352],{"class":344},[53,12966,12967],{"class":55,"line":2424},[53,12968,627],{"class":344},[53,12970,12971],{"class":55,"line":2430},[53,12972,806],{"emptyLinePlaceholder":805},[53,12974,12975,12977,12979,12981],{"class":55,"line":2461},[53,12976,634],{"class":344},[53,12978,8440],{"class":600},[53,12980,2102],{"class":600},[53,12982,592],{"class":344},[53,12984,12985,12987,12989,12991,12993,12995,12997],{"class":55,"line":2493},[53,12986,9640],{"class":6588},[53,12988,391],{"class":344},[53,12990,9645],{"class":1903},[53,12992,9648],{"class":340},[53,12994,9651],{"class":344},[53,12996,9654],{"class":340},[53,12998,3352],{"class":344},[53,13000,13001,13003,13005,13007],{"class":55,"line":2515},[53,13002,9299],{"class":6588},[53,13004,391],{"class":344},[53,13006,9666],{"class":1903},[53,13008,3352],{"class":344},[53,13010,13011,13013,13015,13017,13019],{"class":55,"line":2547},[53,13012,8671],{"class":6588},[53,13014,391],{"class":344},[53,13016,8676],{"class":344},[53,13018,9291],{"class":340},[53,13020,3352],{"class":344},[53,13022,13023,13025,13027,13029],{"class":55,"line":2576},[53,13024,9273],{"class":6588},[53,13026,391],{"class":344},[53,13028,9611],{"class":1903},[53,13030,3352],{"class":344},[53,13032,13033],{"class":55,"line":2596},[53,13034,627],{"class":344},[53,13036,13037],{"class":55,"line":2614},[53,13038,806],{"emptyLinePlaceholder":805},[53,13040,13041],{"class":55,"line":2632},[53,13042,10195],{"class":350},[53,13044,13045,13047,13049,13051,13053,13055,13057],{"class":55,"line":2668},[53,13046,10042],{"class":329},[53,13048,2436],{"class":344},[53,13050,10205],{"class":600},[53,13052,391],{"class":344},[53,13054,8767],{"class":1903},[53,13056,1041],{"class":344},[53,13058,592],{"class":344},[53,13060,13061,13063,13065],{"class":55,"line":2702},[53,13062,10062],{"class":344},[53,13064,8440],{"class":600},[53,13066,592],{"class":344},[53,13068,13069,13071,13073,13075,13077,13079],{"class":55,"line":2720},[53,13070,10470],{"class":6588},[53,13072,391],{"class":344},[53,13074,9648],{"class":340},[53,13076,10477],{"class":1903},[53,13078,8814],{"class":340},[53,13080,3352],{"class":344},[53,13082,13083,13085,13087,13089,13091,13093],{"class":55,"line":2725},[53,13084,10487],{"class":6588},[53,13086,391],{"class":344},[53,13088,9648],{"class":340},[53,13090,10477],{"class":1903},[53,13092,8814],{"class":340},[53,13094,3352],{"class":344},[53,13096,13097],{"class":55,"line":2733},[53,13098,622],{"class":344},[53,13100,13101],{"class":55,"line":2738},[53,13102,627],{"class":344},[53,13104,13105,13107,13109],{"class":55,"line":2744},[53,13106,1964],{"class":344},[53,13108,3908],{"class":387},[53,13110,1722],{"class":344},[28,13112,13114],{"id":13113},"nuxt-content","Nuxt-Content",[15,13116,13117],{},"Nuxt Content is a Nuxt module that enables us to render our Markdown posts from the Jekyll project.",[15,13119,13120],{},"First I had to install the module",[43,13122,13124],{"className":7565,"code":13123,"language":7567,"meta":48,"style":48},"npm install --save-dev @nuxt/content\n",[50,13125,13126],{"__ignoreMap":48},[53,13127,13128],{"class":55,"line":56},[53,13129,13123],{},[15,13131,13132],{},"and add it to the Modules array in nuxt.config.ts in the root directory",[43,13134,13136],{"className":320,"code":13135,"language":322,"meta":48,"style":48},"export default defineNuxtConfig({\n ...\n modules: ['@nuxt/content']\n ...\n})\n",[50,13137,13138,13150,13155,13168,13172],{"__ignoreMap":48},[53,13139,13140,13142,13144,13146,13148],{"class":55,"line":56},[53,13141,330],{"class":329},[53,13143,333],{"class":329},[53,13145,337],{"class":336},[53,13147,341],{"class":340},[53,13149,345],{"class":344},[53,13151,13152],{"class":55,"line":270},[53,13153,13154],{"class":344}," ...\n",[53,13156,13157,13160,13162,13164,13166],{"class":55,"line":354},[53,13158,13159],{"class":340}," modules: [",[53,13161,401],{"class":344},[53,13163,195],{"class":397},[53,13165,401],{"class":344},[53,13167,617],{"class":340},[53,13169,13170],{"class":55,"line":360},[53,13171,13154],{"class":344},[53,13173,13174,13176],{"class":55,"line":366},[53,13175,419],{"class":344},[53,13177,422],{"class":340},[15,13179,13180,13181,13183,13184,13186,13187,13190],{},"Then I created a directory called ",[50,13182,2662],{}," in the root directory of my project and inside it a directory called ",[50,13185,2115],{},". All files from the ",[50,13188,13189],{},"_posts"," directory of the Jekyll project now go into this directory.",[15,13192,13193,13194,13197,13198,13201],{},"In order to render the posts, however, a \"catchAllRoute\" is required, i.e. a file with the name ",[50,13195,13196],{},"[...slug].vue"," in the Pages directory (more precisely in the blog subdirectory) which only contains the template with ",[50,13199,13200],{},"\u003CContentDoc />"," which loads and renders the content of the Markdown files.",[658,13203,13204],{},[661,13205,13206,13209],{},[53,13207,13208],{},"...slug",".vue",[43,13211,13213],{"className":1705,"code":13212,"language":1707,"meta":48,"style":48},"\u003Ctemplate>\n \u003Carticle>\n \u003CContentDoc />\n \u003C/article>\n\u003C/template>\n",[50,13214,13215,13223,13231,13240,13248],{"__ignoreMap":48},[53,13216,13217,13219,13221],{"class":55,"line":56},[53,13218,510],{"class":344},[53,13220,3236],{"class":387},[53,13222,1722],{"class":344},[53,13224,13225,13227,13229],{"class":55,"line":270},[53,13226,3243],{"class":344},[53,13228,3246],{"class":387},[53,13230,1722],{"class":344},[53,13232,13233,13235,13238],{"class":55,"line":354},[53,13234,3265],{"class":344},[53,13236,13237],{"class":387},"ContentDoc",[53,13239,532],{"class":344},[53,13241,13242,13244,13246],{"class":55,"line":360},[53,13243,3300],{"class":344},[53,13245,3246],{"class":387},[53,13247,1722],{"class":344},[53,13249,13250,13252,13254],{"class":55,"line":366},[53,13251,1964],{"class":344},[53,13253,3236],{"class":387},[53,13255,1722],{"class":344},[28,13257,13259],{"id":13258},"tailwind","Tailwind",[15,13261,13262],{},"the next step was to install the tailwind module",[43,13264,13266],{"className":7565,"code":13265,"language":7567,"meta":48,"style":48},"npm install --save-dev @nuxtjs/tailwindcss\n",[50,13267,13268],{"__ignoreMap":48},[53,13269,13270],{"class":55,"line":56},[53,13271,13265],{},[15,13273,13274],{},"and add it to the nuxtConfig",[43,13276,13278],{"className":320,"code":13277,"language":322,"meta":48,"style":48},"export default defineNuxtConfig({\n ...\n modules: [\n '@nuxt/content',\n '@nuxtjs/tailwindcss'\n ]\n ...\n})\n",[50,13279,13280,13292,13296,13301,13311,13319,13324,13328],{"__ignoreMap":48},[53,13281,13282,13284,13286,13288,13290],{"class":55,"line":56},[53,13283,330],{"class":329},[53,13285,333],{"class":329},[53,13287,337],{"class":336},[53,13289,341],{"class":340},[53,13291,345],{"class":344},[53,13293,13294],{"class":55,"line":270},[53,13295,13154],{"class":344},[53,13297,13298],{"class":55,"line":354},[53,13299,13300],{"class":340}," modules: [\n",[53,13302,13303,13305,13307,13309],{"class":55,"line":360},[53,13304,3404],{"class":344},[53,13306,195],{"class":397},[53,13308,401],{"class":344},[53,13310,870],{"class":344},[53,13312,13313,13315,13317],{"class":55,"line":366},[53,13314,3404],{"class":344},[53,13316,229],{"class":397},[53,13318,934],{"class":344},[53,13320,13321],{"class":55,"line":372},[53,13322,13323],{"class":340}," ]\n",[53,13325,13326],{"class":55,"line":378},[53,13327,13154],{"class":344},[53,13329,13330,13332],{"class":55,"line":384},[53,13331,419],{"class":344},[53,13333,422],{"class":340},[15,13335,13336],{},"In order for the markdown to be rendered correctly, tailwindcss-typography was required.",[15,13338,13339],{},"I istalled it by",[43,13341,13343],{"className":7565,"code":13342,"language":7567,"meta":48,"style":48},"npm install -D @tailwindcss/typography\n",[50,13344,13345],{"__ignoreMap":48},[53,13346,13347],{"class":55,"line":56},[53,13348,13342],{},[15,13350,13351,13352,13355],{},"to enable it i added a ",[50,13353,13354],{},"tailwind.config.ts"," to the root directory and added the typography-plugin.",[43,13357,13359],{"className":320,"code":13358,"language":322,"meta":48,"style":48},"module.exports = {\n plugins: [\n require('@tailwindcss/typography')\n ]\n}\n",[50,13360,13361,13370,13378,13393,13397],{"__ignoreMap":48},[53,13362,13363,13366,13368],{"class":55,"line":56},[53,13364,13365],{"class":344},"module.exports",[53,13367,1200],{"class":344},[53,13369,592],{"class":344},[53,13371,13372,13374,13376],{"class":55,"line":270},[53,13373,3434],{"class":387},[53,13375,391],{"class":344},[53,13377,3399],{"class":340},[53,13379,13380,13383,13385,13387,13389,13391],{"class":55,"line":354},[53,13381,13382],{"class":336}," require",[53,13384,341],{"class":340},[53,13386,401],{"class":344},[53,13388,3367],{"class":397},[53,13390,401],{"class":344},[53,13392,422],{"class":340},[53,13394,13395],{"class":55,"line":360},[53,13396,13323],{"class":340},[53,13398,13399],{"class":55,"line":366},[53,13400,627],{"class":344},[15,13402,13403,13404,13406,13407,13409,13410,13413,13414,13416],{},"and in the catchAllRoute for the blog-posts I added the ",[50,13405,3256],{}," class to ",[50,13408,3246],{}," and added a ",[50,13411,13412],{},"max-width: 992px!important;"," to override the one from the ",[50,13415,3256],{}," class of tailwind-typography for now.",[28,13418,13420],{"id":13419},"copy-and-adjust-content","Copy and adjust content",[15,13422,13423],{},"Finally, I was able to copy the remaining Markdown files from the Jekyll project into the content directory. Some of the Markdown files still contained HTML, so I quickly converted them into pure Markdown.",[15,13425,13426,13427,13430,13431,13433],{},"In order to be able to render everything, I then had to create the corresponding Vue files in the pages directory and read in and render the Markdown files with ",[50,13428,13429],{},"\u003CContentDoc>",". I'm just using ",[50,13432,7588],{}," as an example here, since the other files basically look exactly the same.",[658,13435,13436],{},[661,13437,7588],{},[43,13439,13441],{"className":1705,"code":13440,"language":1707,"meta":48,"style":48},"\u003Ctemplate>\n \u003Carticle class=\"prose\">\n \u003CContentDoc path=\"/about\" />\n \u003C/article>\n\u003C/template>\n",[50,13442,13443,13451,13469,13487,13495],{"__ignoreMap":48},[53,13444,13445,13447,13449],{"class":55,"line":56},[53,13446,510],{"class":344},[53,13448,3236],{"class":387},[53,13450,1722],{"class":344},[53,13452,13453,13455,13457,13459,13461,13463,13465,13467],{"class":55,"line":270},[53,13454,3243],{"class":344},[53,13456,3246],{"class":387},[53,13458,3249],{"class":584},[53,13460,521],{"class":344},[53,13462,524],{"class":344},[53,13464,3256],{"class":397},[53,13466,524],{"class":344},[53,13468,1722],{"class":344},[53,13470,13471,13473,13475,13477,13479,13481,13483,13485],{"class":55,"line":354},[53,13472,3265],{"class":344},[53,13474,13237],{"class":387},[53,13476,1021],{"class":584},[53,13478,521],{"class":344},[53,13480,524],{"class":344},[53,13482,8154],{"class":397},[53,13484,524],{"class":344},[53,13486,532],{"class":344},[53,13488,13489,13491,13493],{"class":55,"line":360},[53,13490,3300],{"class":344},[53,13492,3246],{"class":387},[53,13494,1722],{"class":344},[53,13496,13497,13499,13501],{"class":55,"line":366},[53,13498,1964],{"class":344},[53,13500,3236],{"class":387},[53,13502,1722],{"class":344},[15,13504,13505,13506,13509,13510,13513,13514,13517],{},"I then copied the directory ",[50,13507,13508],{},"icons"," from the directory ",[50,13511,13512],{},"_assets"," in the Jekyll project to ",[50,13515,13516],{},"public/assets/"," in the Nuxt project so that the social media icons are also displayed.",[28,13519,13521],{"id":13520},"query-and-render-blog-posts","Query and Render Blog-Posts",[15,13523,13524],{},"On the homepage, which until now was just a dummy with the template",[43,13526,13527],{"className":1705,"code":7875,"language":1707,"meta":48,"style":48},[50,13528,13529,13537,13545,13549,13557],{"__ignoreMap":48},[53,13530,13531,13533,13535],{"class":55,"line":56},[53,13532,510],{"class":344},[53,13534,3236],{"class":387},[53,13536,1722],{"class":344},[53,13538,13539,13541,13543],{"class":55,"line":270},[53,13540,3243],{"class":344},[53,13542,7690],{"class":387},[53,13544,1722],{"class":344},[53,13546,13547],{"class":55,"line":354},[53,13548,7898],{"class":340},[53,13550,13551,13553,13555],{"class":55,"line":360},[53,13552,3300],{"class":344},[53,13554,7690],{"class":387},[53,13556,1722],{"class":344},[53,13558,13559,13561,13563],{"class":55,"line":366},[53,13560,1964],{"class":344},[53,13562,3236],{"class":387},[53,13564,1722],{"class":344},[15,13566,13567],{},", I wanted to list the blog posts. However, only those that are not drafts.",[15,13569,13570,13571,13574,13575,634],{},"In Jekyll, the drafts were recognized because they were in the ",[50,13572,13573],{},"_drafts"," directory, which as far as I know doesn't exist in Nuxt, but since all the Markdown files have a front matter section anyway and there are usually only one or two drafts anyway, I can specify that there with ",[50,13576,13577],{},"draft: true",[15,13579,13580],{},"In order not to exclude the designs during development, I first had to check whether the code was executed in a development environment.",[43,13582,13584],{"className":5654,"code":13583,"language":5656,"meta":48,"style":48},"const isDev = process.env.NODE_ENV === 'development'\n",[50,13585,13586],{"__ignoreMap":48},[53,13587,13588,13590,13593,13595,13598,13600,13603,13605,13608,13611,13613,13616],{"class":55,"line":56},[53,13589,1190],{"class":584},[53,13591,13592],{"class":340}," isDev ",[53,13594,521],{"class":344},[53,13596,13597],{"class":340}," process",[53,13599,634],{"class":344},[53,13601,13602],{"class":340},"env",[53,13604,634],{"class":344},[53,13606,13607],{"class":340},"NODE_ENV ",[53,13609,13610],{"class":344},"===",[53,13612,394],{"class":344},[53,13614,13615],{"class":397},"development",[53,13617,934],{"class":344},[15,13619,13620],{},"With this information I could then query the contents of the blog posts.",[43,13622,13624],{"className":5654,"code":13623,"language":5656,"meta":48,"style":48},"const { data } = await useAsyncData(\n 'blog-list',\n () => {\n const query = queryContent('/blog')\n .only(['_path', 'title', 'date', 'excerpt', 'tags', 'categories'])\n .sort({ date: -1 })\n if (!isDev) {\n query.where({ draft: { $ne: true } })\n }\n return query.find()\n }\n)\n",[50,13625,13626,13644,13655,13664,13688,13752,13778,13795,13829,13834,13847,13852],{"__ignoreMap":48},[53,13627,13628,13630,13632,13634,13636,13638,13640,13642],{"class":55,"line":56},[53,13629,1190],{"class":584},[53,13631,917],{"class":344},[53,13633,1195],{"class":340},[53,13635,419],{"class":344},[53,13637,1200],{"class":344},[53,13639,1203],{"class":329},[53,13641,1206],{"class":336},[53,13643,1747],{"class":340},[53,13645,13646,13648,13651,13653],{"class":55,"line":270},[53,13647,1752],{"class":344},[53,13649,13650],{"class":397},"blog-list",[53,13652,401],{"class":344},[53,13654,870],{"class":344},[53,13656,13657,13660,13662],{"class":55,"line":354},[53,13658,13659],{"class":344}," ()",[53,13661,1226],{"class":584},[53,13663,592],{"class":344},[53,13665,13666,13669,13672,13674,13677,13679,13681,13684,13686],{"class":55,"line":360},[53,13667,13668],{"class":584}," const",[53,13670,13671],{"class":340}," query",[53,13673,1200],{"class":344},[53,13675,13676],{"class":336}," queryContent",[53,13678,341],{"class":387},[53,13680,401],{"class":344},[53,13682,13683],{"class":397},"/blog",[53,13685,401],{"class":344},[53,13687,422],{"class":387},[53,13689,13690,13693,13696,13699,13701,13703,13705,13707,13709,13711,13713,13715,13717,13720,13722,13724,13726,13729,13731,13733,13735,13738,13740,13742,13744,13747,13749],{"class":55,"line":366},[53,13691,13692],{"class":344}," .",[53,13694,13695],{"class":336},"only",[53,13697,13698],{"class":387},"([",[53,13700,401],{"class":344},[53,13702,1403],{"class":397},[53,13704,401],{"class":344},[53,13706,404],{"class":344},[53,13708,394],{"class":344},[53,13710,2770],{"class":397},[53,13712,401],{"class":344},[53,13714,404],{"class":344},[53,13716,394],{"class":344},[53,13718,13719],{"class":397},"date",[53,13721,401],{"class":344},[53,13723,404],{"class":344},[53,13725,394],{"class":344},[53,13727,13728],{"class":397},"excerpt",[53,13730,401],{"class":344},[53,13732,404],{"class":344},[53,13734,394],{"class":344},[53,13736,13737],{"class":397},"tags",[53,13739,401],{"class":344},[53,13741,404],{"class":344},[53,13743,394],{"class":344},[53,13745,13746],{"class":397},"categories",[53,13748,401],{"class":344},[53,13750,13751],{"class":387},"])\n",[53,13753,13754,13756,13759,13761,13763,13766,13768,13771,13774,13776],{"class":55,"line":372},[53,13755,13692],{"class":344},[53,13757,13758],{"class":336},"sort",[53,13760,341],{"class":387},[53,13762,5744],{"class":344},[53,13764,13765],{"class":387}," date",[53,13767,391],{"class":344},[53,13769,13770],{"class":344}," -",[53,13772,13773],{"class":1903},"1",[53,13775,923],{"class":344},[53,13777,422],{"class":387},[53,13779,13780,13783,13785,13788,13791,13793],{"class":55,"line":378},[53,13781,13782],{"class":329}," if",[53,13784,2436],{"class":387},[53,13786,13787],{"class":344},"!",[53,13789,13790],{"class":340},"isDev",[53,13792,2609],{"class":387},[53,13794,345],{"class":344},[53,13796,13797,13800,13802,13805,13807,13809,13812,13814,13816,13819,13821,13823,13825,13827],{"class":55,"line":384},[53,13798,13799],{"class":340}," query",[53,13801,634],{"class":344},[53,13803,13804],{"class":336},"where",[53,13806,341],{"class":387},[53,13808,5744],{"class":344},[53,13810,13811],{"class":387}," draft",[53,13813,391],{"class":344},[53,13815,917],{"class":344},[53,13817,13818],{"class":387}," $ne",[53,13820,391],{"class":344},[53,13822,4849],{"class":4392},[53,13824,923],{"class":344},[53,13826,923],{"class":344},[53,13828,422],{"class":387},[53,13830,13831],{"class":55,"line":410},[53,13832,13833],{"class":344}," }\n",[53,13835,13836,13839,13841,13843,13845],{"class":55,"line":416},[53,13837,13838],{"class":329}," return",[53,13840,13671],{"class":340},[53,13842,634],{"class":344},[53,13844,1382],{"class":336},[53,13846,1278],{"class":387},[53,13848,13849],{"class":55,"line":1882},[53,13850,13851],{"class":344}," }\n",[53,13853,13854],{"class":55,"line":1888},[53,13855,422],{"class":340},[15,13857,13858],{},"Since only the title as a link to the full article, the introduction as well as tags and categories should be displayed on the homepage, I used computed properties to extract the relevant data from the posts.",[43,13860,13862],{"className":5654,"code":13861,"language":5656,"meta":48,"style":48},"const posts = computed(() => {\n if (!data.value) {\n return []\n }\n return data.value.map(post => {\n const preview = {\n ...post,\n date: formatDate(post.date),\n paragraphs: extractParagraphs(post.excerpt)\n }\n return preview\n })\n})\n\nfunction formatDate(dateString) {\n const date = new Date(dateString)\n return new Intl.DateTimeFormat('en-US', { month: 'short', day: '2-digit', year: 'numeric' }).format(date)\n}\n\nfunction extractParagraphs(excerpt) {\n const paragraphs = [];\n function extractText(node) {\n if (!node) return;\n if (node.type === 'element' && node.tag === 'p') {\n const paragraphText = node.children\n .filter(child => child.type === 'text')\n .map(child => child.value)\n .join('');\n paragraphs.push(paragraphText);\n } else if (Array.isArray(node.children)) {\n node.children.forEach(child => extractText(child));\n }\n }\n extractText(excerpt);\n return paragraphs;\n}\n",[50,13863,13864,13884,13903,13909,13913,13936,13947,13956,13978,13998,14002,14009,14015,14021,14025,14041,14061,14143,14147,14151,14165,14178,14195,14212,14256,14272,14303,14323,14339,14356,14387,14417,14421,14425,14438,14446],{"__ignoreMap":48},[53,13865,13866,13868,13871,13873,13876,13878,13880,13882],{"class":55,"line":56},[53,13867,1190],{"class":584},[53,13869,13870],{"class":340}," posts ",[53,13872,521],{"class":344},[53,13874,13875],{"class":336}," computed",[53,13877,341],{"class":340},[53,13879,5581],{"class":344},[53,13881,1226],{"class":584},[53,13883,592],{"class":344},[53,13885,13886,13889,13891,13893,13895,13897,13899,13901],{"class":55,"line":270},[53,13887,13888],{"class":329}," if",[53,13890,2436],{"class":387},[53,13892,13787],{"class":344},[53,13894,1245],{"class":340},[53,13896,634],{"class":344},[53,13898,1934],{"class":340},[53,13900,2609],{"class":387},[53,13902,345],{"class":344},[53,13904,13905,13907],{"class":55,"line":354},[53,13906,1891],{"class":329},[53,13908,2328],{"class":387},[53,13910,13911],{"class":55,"line":360},[53,13912,622],{"class":344},[53,13914,13915,13917,13919,13921,13923,13925,13928,13930,13932,13934],{"class":55,"line":366},[53,13916,1233],{"class":329},[53,13918,1731],{"class":340},[53,13920,634],{"class":344},[53,13922,1934],{"class":340},[53,13924,634],{"class":344},[53,13926,13927],{"class":336},"map",[53,13929,341],{"class":387},[53,13931,7616],{"class":1387},[53,13933,1226],{"class":584},[53,13935,592],{"class":344},[53,13937,13938,13940,13943,13945],{"class":55,"line":372},[53,13939,1774],{"class":584},[53,13941,13942],{"class":340}," preview",[53,13944,1200],{"class":344},[53,13946,592],{"class":344},[53,13948,13949,13952,13954],{"class":55,"line":378},[53,13950,13951],{"class":344}," ...",[53,13953,7616],{"class":340},[53,13955,870],{"class":344},[53,13957,13958,13961,13963,13966,13968,13970,13972,13974,13976],{"class":55,"line":384},[53,13959,13960],{"class":387}," date",[53,13962,391],{"class":344},[53,13964,13965],{"class":336}," formatDate",[53,13967,341],{"class":387},[53,13969,7616],{"class":340},[53,13971,634],{"class":344},[53,13973,13719],{"class":340},[53,13975,1041],{"class":387},[53,13977,870],{"class":344},[53,13979,13980,13983,13985,13988,13990,13992,13994,13996],{"class":55,"line":410},[53,13981,13982],{"class":387}," paragraphs",[53,13984,391],{"class":344},[53,13986,13987],{"class":336}," extractParagraphs",[53,13989,341],{"class":387},[53,13991,7616],{"class":340},[53,13993,634],{"class":344},[53,13995,13728],{"class":340},[53,13997,422],{"class":387},[53,13999,14000],{"class":55,"line":416},[53,14001,1078],{"class":344},[53,14003,14004,14006],{"class":55,"line":1882},[53,14005,1891],{"class":329},[53,14007,14008],{"class":340}," preview\n",[53,14010,14011,14013],{"class":55,"line":1888},[53,14012,2728],{"class":344},[53,14014,422],{"class":387},[53,14016,14017,14019],{"class":55,"line":1909},[53,14018,419],{"class":344},[53,14020,422],{"class":340},[53,14022,14023],{"class":55,"line":1914},[53,14024,806],{"emptyLinePlaceholder":805},[53,14026,14027,14030,14032,14034,14037,14039],{"class":55,"line":1919},[53,14028,14029],{"class":584},"function",[53,14031,13965],{"class":336},[53,14033,341],{"class":344},[53,14035,14036],{"class":1387},"dateString",[53,14038,1041],{"class":344},[53,14040,592],{"class":344},[53,14042,14043,14045,14047,14049,14052,14055,14057,14059],{"class":55,"line":1961},[53,14044,1338],{"class":584},[53,14046,13765],{"class":340},[53,14048,1200],{"class":344},[53,14050,14051],{"class":344}," new",[53,14053,14054],{"class":336}," Date",[53,14056,341],{"class":387},[53,14058,14036],{"class":340},[53,14060,422],{"class":387},[53,14062,14063,14065,14067,14070,14072,14075,14077,14079,14082,14084,14086,14088,14091,14093,14095,14098,14100,14102,14105,14107,14109,14112,14114,14116,14119,14121,14123,14126,14128,14130,14132,14134,14137,14139,14141],{"class":55,"line":2188},[53,14064,1233],{"class":329},[53,14066,14051],{"class":344},[53,14068,14069],{"class":340}," Intl",[53,14071,634],{"class":344},[53,14073,14074],{"class":336},"DateTimeFormat",[53,14076,341],{"class":387},[53,14078,401],{"class":344},[53,14080,14081],{"class":397},"en-US",[53,14083,401],{"class":344},[53,14085,404],{"class":344},[53,14087,917],{"class":344},[53,14089,14090],{"class":387}," month",[53,14092,391],{"class":344},[53,14094,394],{"class":344},[53,14096,14097],{"class":397},"short",[53,14099,401],{"class":344},[53,14101,404],{"class":344},[53,14103,14104],{"class":387}," day",[53,14106,391],{"class":344},[53,14108,394],{"class":344},[53,14110,14111],{"class":397},"2-digit",[53,14113,401],{"class":344},[53,14115,404],{"class":344},[53,14117,14118],{"class":387}," year",[53,14120,391],{"class":344},[53,14122,394],{"class":344},[53,14124,14125],{"class":397},"numeric",[53,14127,401],{"class":344},[53,14129,923],{"class":344},[53,14131,1041],{"class":387},[53,14133,634],{"class":344},[53,14135,14136],{"class":336},"format",[53,14138,341],{"class":387},[53,14140,13719],{"class":340},[53,14142,422],{"class":387},[53,14144,14145],{"class":55,"line":2208},[53,14146,627],{"class":344},[53,14148,14149],{"class":55,"line":2229},[53,14150,806],{"emptyLinePlaceholder":805},[53,14152,14153,14155,14157,14159,14161,14163],{"class":55,"line":2244},[53,14154,14029],{"class":584},[53,14156,13987],{"class":336},[53,14158,341],{"class":344},[53,14160,13728],{"class":1387},[53,14162,1041],{"class":344},[53,14164,592],{"class":344},[53,14166,14167,14169,14172,14174,14176],{"class":55,"line":2269},[53,14168,1338],{"class":584},[53,14170,14171],{"class":340}," paragraphs",[53,14173,1200],{"class":344},[53,14175,3165],{"class":387},[53,14177,3352],{"class":344},[53,14179,14180,14183,14186,14188,14191,14193],{"class":55,"line":2287},[53,14181,14182],{"class":584}," function",[53,14184,14185],{"class":336}," extractText",[53,14187,341],{"class":344},[53,14189,14190],{"class":1387},"node",[53,14192,1041],{"class":344},[53,14194,592],{"class":344},[53,14196,14197,14199,14201,14203,14205,14207,14210],{"class":55,"line":2298},[53,14198,2433],{"class":329},[53,14200,2436],{"class":387},[53,14202,13787],{"class":344},[53,14204,14190],{"class":340},[53,14206,2609],{"class":387},[53,14208,14209],{"class":329},"return",[53,14211,3352],{"class":344},[53,14213,14214,14216,14218,14220,14222,14225,14227,14229,14232,14234,14237,14240,14242,14244,14246,14248,14250,14252,14254],{"class":55,"line":2303},[53,14215,2433],{"class":329},[53,14217,2436],{"class":387},[53,14219,14190],{"class":340},[53,14221,634],{"class":344},[53,14223,14224],{"class":340},"type",[53,14226,1406],{"class":344},[53,14228,394],{"class":344},[53,14230,14231],{"class":397},"element",[53,14233,401],{"class":344},[53,14235,14236],{"class":344}," &&",[53,14238,14239],{"class":340}," node",[53,14241,634],{"class":344},[53,14243,2388],{"class":340},[53,14245,1406],{"class":344},[53,14247,394],{"class":344},[53,14249,15],{"class":397},[53,14251,401],{"class":344},[53,14253,2609],{"class":387},[53,14255,345],{"class":344},[53,14257,14258,14260,14263,14265,14267,14269],{"class":55,"line":2309},[53,14259,2099],{"class":584},[53,14261,14262],{"class":340}," paragraphText",[53,14264,1200],{"class":344},[53,14266,14239],{"class":340},[53,14268,634],{"class":344},[53,14270,14271],{"class":340},"children\n",[53,14273,14274,14276,14279,14281,14284,14286,14289,14291,14293,14295,14297,14299,14301],{"class":55,"line":2331},[53,14275,2124],{"class":344},[53,14277,14278],{"class":336},"filter",[53,14280,341],{"class":387},[53,14282,14283],{"class":1387},"child",[53,14285,1226],{"class":584},[53,14287,14288],{"class":340}," child",[53,14290,634],{"class":344},[53,14292,14224],{"class":340},[53,14294,1406],{"class":344},[53,14296,394],{"class":344},[53,14298,1159],{"class":397},[53,14300,401],{"class":344},[53,14302,422],{"class":387},[53,14304,14305,14307,14309,14311,14313,14315,14317,14319,14321],{"class":55,"line":2344},[53,14306,2124],{"class":344},[53,14308,13927],{"class":336},[53,14310,341],{"class":387},[53,14312,14283],{"class":1387},[53,14314,1226],{"class":584},[53,14316,14288],{"class":340},[53,14318,634],{"class":344},[53,14320,1934],{"class":340},[53,14322,422],{"class":387},[53,14324,14325,14327,14330,14332,14335,14337],{"class":55,"line":2356},[53,14326,2124],{"class":344},[53,14328,14329],{"class":336},"join",[53,14331,341],{"class":387},[53,14333,14334],{"class":344},"''",[53,14336,1041],{"class":387},[53,14338,3352],{"class":344},[53,14340,14341,14343,14345,14347,14349,14352,14354],{"class":55,"line":2368},[53,14342,13982],{"class":340},[53,14344,634],{"class":344},[53,14346,2710],{"class":336},[53,14348,341],{"class":387},[53,14350,14351],{"class":340},"paragraphText",[53,14353,1041],{"class":387},[53,14355,3352],{"class":344},[53,14357,14358,14360,14362,14364,14366,14369,14371,14374,14376,14378,14380,14383,14385],{"class":55,"line":2373},[53,14359,2157],{"class":344},[53,14361,2520],{"class":329},[53,14363,2523],{"class":329},[53,14365,2436],{"class":387},[53,14367,14368],{"class":340},"Array",[53,14370,634],{"class":344},[53,14372,14373],{"class":336},"isArray",[53,14375,341],{"class":387},[53,14377,14190],{"class":340},[53,14379,634],{"class":344},[53,14381,14382],{"class":340},"children",[53,14384,2456],{"class":387},[53,14386,345],{"class":344},[53,14388,14389,14392,14394,14396,14398,14400,14402,14404,14406,14408,14410,14412,14415],{"class":55,"line":2397},[53,14390,14391],{"class":340}," node",[53,14393,634],{"class":344},[53,14395,14382],{"class":340},[53,14397,634],{"class":344},[53,14399,2381],{"class":336},[53,14401,341],{"class":387},[53,14403,14283],{"class":1387},[53,14405,1226],{"class":584},[53,14407,14185],{"class":336},[53,14409,341],{"class":387},[53,14411,14283],{"class":340},[53,14413,14414],{"class":387},"))",[53,14416,3352],{"class":344},[53,14418,14419],{"class":55,"line":2424},[53,14420,1078],{"class":344},[53,14422,14423],{"class":55,"line":2430},[53,14424,622],{"class":344},[53,14426,14427,14430,14432,14434,14436],{"class":55,"line":2461},[53,14428,14429],{"class":336}," extractText",[53,14431,341],{"class":387},[53,14433,13728],{"class":340},[53,14435,1041],{"class":387},[53,14437,3352],{"class":344},[53,14439,14440,14442,14444],{"class":55,"line":2493},[53,14441,1233],{"class":329},[53,14443,14171],{"class":340},[53,14445,3352],{"class":344},[53,14447,14448],{"class":55,"line":2515},[53,14449,627],{"class":344},[15,14451,14452],{},"With this data I was finally able to render the content.",[43,14454,14456],{"className":1705,"code":14455,"language":1707,"meta":48,"style":48},"\u003Ctemplate>\n \u003Csection>\n \u003Carticle class=\"prose\" style=\"margin-bottom: 1rem;\">\n \u003Ch1>Blog Posts\u003C/h1>\n \u003Cp>This are my recent blog posts\u003C/p>\n \u003C/article>\n \u003Carticle v-for=\"post in posts\" :key=\"post._path\" class=\"prose\" style=\"margin-bottom: 1rem;\">\n \u003Cheader>\n \u003Cdiv>{{ post.date }}\u003C/div>\n \u003Ch2>\u003Cnuxt-link :to=\"post._path\">{{ post.title }}\u003C/nuxt-link>\u003C/h2>\n \u003C/header>\n \u003Cmain v-if=\"'paragraphs' in post\">\n \u003Cp v-for=\"paragraph in post.paragraphs\" :key=\"paragraph\">\n {{ paragraph }}\n \u003C/p>\n \u003C/main>\n \u003Cfooter>\n \u003Cspan>\u003Cb>Categories: \u003C/b>\u003C/span>\n \u003Cspan v-for=\"category in post.categories\" :key=\"category\">{{ category }}, \u003C/span>\n \u003Cspan>\u003Cb>Tags: \u003C/b>\u003C/span>\n \u003Cspan v-for=\"tag in post.tags\" :key=\"tag\">{{ tag }}, \u003C/span>\u003Cbr />\n \u003Cnuxt-link :to=\"post._path\">read more\u003C/nuxt-link>\n \u003C/footer>\n \u003C/article>\n \u003C/section>\n\u003C/template>\n",[50,14457,14458,14466,14475,14505,14522,14539,14547,14599,14607,14624,14661,14669,14689,14719,14724,14732,14740,14748,14774,14813,14838,14880,14907,14915,14923,14931],{"__ignoreMap":48},[53,14459,14460,14462,14464],{"class":55,"line":56},[53,14461,510],{"class":344},[53,14463,3236],{"class":387},[53,14465,1722],{"class":344},[53,14467,14468,14470,14473],{"class":55,"line":270},[53,14469,3243],{"class":344},[53,14471,14472],{"class":387},"section",[53,14474,1722],{"class":344},[53,14476,14477,14479,14481,14483,14485,14487,14489,14491,14494,14496,14498,14501,14503],{"class":55,"line":354},[53,14478,3265],{"class":344},[53,14480,3246],{"class":387},[53,14482,3249],{"class":584},[53,14484,521],{"class":344},[53,14486,524],{"class":344},[53,14488,3256],{"class":397},[53,14490,524],{"class":344},[53,14492,14493],{"class":584}," style",[53,14495,521],{"class":344},[53,14497,524],{"class":344},[53,14499,14500],{"class":397},"margin-bottom: 1rem;",[53,14502,524],{"class":344},[53,14504,1722],{"class":344},[53,14506,14507,14509,14511,14513,14516,14518,14520],{"class":55,"line":360},[53,14508,7645],{"class":344},[53,14510,11],{"class":387},[53,14512,7661],{"class":344},[53,14514,14515],{"class":340},"Blog Posts",[53,14517,1964],{"class":344},[53,14519,11],{"class":387},[53,14521,1722],{"class":344},[53,14523,14524,14526,14528,14530,14533,14535,14537],{"class":55,"line":366},[53,14525,7645],{"class":344},[53,14527,15],{"class":387},[53,14529,7661],{"class":344},[53,14531,14532],{"class":340},"This are my recent blog posts",[53,14534,1964],{"class":344},[53,14536,15],{"class":387},[53,14538,1722],{"class":344},[53,14540,14541,14543,14545],{"class":55,"line":372},[53,14542,7675],{"class":344},[53,14544,3246],{"class":387},[53,14546,1722],{"class":344},[53,14548,14549,14551,14553,14556,14558,14560,14563,14565,14568,14570,14572,14575,14577,14579,14581,14583,14585,14587,14589,14591,14593,14595,14597],{"class":55,"line":378},[53,14550,3265],{"class":344},[53,14552,3246],{"class":387},[53,14554,14555],{"class":584}," v-for",[53,14557,521],{"class":344},[53,14559,524],{"class":344},[53,14561,14562],{"class":397},"post in posts",[53,14564,524],{"class":344},[53,14566,14567],{"class":584}," :key",[53,14569,521],{"class":344},[53,14571,524],{"class":344},[53,14573,14574],{"class":397},"post._path",[53,14576,524],{"class":344},[53,14578,3249],{"class":584},[53,14580,521],{"class":344},[53,14582,524],{"class":344},[53,14584,3256],{"class":397},[53,14586,524],{"class":344},[53,14588,14493],{"class":584},[53,14590,521],{"class":344},[53,14592,524],{"class":344},[53,14594,14500],{"class":397},[53,14596,524],{"class":344},[53,14598,1722],{"class":344},[53,14600,14601,14603,14605],{"class":55,"line":384},[53,14602,7645],{"class":344},[53,14604,7627],{"class":387},[53,14606,1722],{"class":344},[53,14608,14609,14611,14613,14615,14618,14620,14622],{"class":55,"line":410},[53,14610,8042],{"class":344},[53,14612,7690],{"class":387},[53,14614,7661],{"class":344},[53,14616,14617],{"class":340},"{{ post.date }}",[53,14619,1964],{"class":344},[53,14621,7690],{"class":387},[53,14623,1722],{"class":344},[53,14625,14626,14628,14630,14632,14635,14638,14640,14642,14644,14646,14648,14651,14653,14655,14657,14659],{"class":55,"line":416},[53,14627,8042],{"class":344},[53,14629,28],{"class":387},[53,14631,8143],{"class":344},[53,14633,14634],{"class":387},"nuxt-link",[53,14636,14637],{"class":584}," :to",[53,14639,521],{"class":344},[53,14641,524],{"class":344},[53,14643,14574],{"class":397},[53,14645,524],{"class":344},[53,14647,7661],{"class":344},[53,14649,14650],{"class":340},"{{ post.title }}",[53,14652,1964],{"class":344},[53,14654,14634],{"class":387},[53,14656,8179],{"class":344},[53,14658,28],{"class":387},[53,14660,1722],{"class":344},[53,14662,14663,14665,14667],{"class":55,"line":1882},[53,14664,8084],{"class":344},[53,14666,7627],{"class":387},[53,14668,1722],{"class":344},[53,14670,14671,14673,14676,14678,14680,14682,14685,14687],{"class":55,"line":1888},[53,14672,7645],{"class":344},[53,14674,14675],{"class":387},"main",[53,14677,3271],{"class":584},[53,14679,521],{"class":344},[53,14681,524],{"class":344},[53,14683,14684],{"class":397},"'paragraphs' in post",[53,14686,524],{"class":344},[53,14688,1722],{"class":344},[53,14690,14691,14693,14695,14697,14699,14701,14704,14706,14708,14710,14712,14715,14717],{"class":55,"line":1909},[53,14692,8042],{"class":344},[53,14694,15],{"class":387},[53,14696,14555],{"class":584},[53,14698,521],{"class":344},[53,14700,524],{"class":344},[53,14702,14703],{"class":397},"paragraph in post.paragraphs",[53,14705,524],{"class":344},[53,14707,14567],{"class":584},[53,14709,521],{"class":344},[53,14711,524],{"class":344},[53,14713,14714],{"class":397},"paragraph",[53,14716,524],{"class":344},[53,14718,1722],{"class":344},[53,14720,14721],{"class":55,"line":1914},[53,14722,14723],{"class":340}," {{ paragraph }}\n",[53,14725,14726,14728,14730],{"class":55,"line":1919},[53,14727,8326],{"class":344},[53,14729,15],{"class":387},[53,14731,1722],{"class":344},[53,14733,14734,14736,14738],{"class":55,"line":1961},[53,14735,8084],{"class":344},[53,14737,14675],{"class":387},[53,14739,1722],{"class":344},[53,14741,14742,14744,14746],{"class":55,"line":2188},[53,14743,7645],{"class":344},[53,14745,8468],{"class":387},[53,14747,1722],{"class":344},[53,14749,14750,14752,14754,14756,14759,14761,14764,14766,14768,14770,14772],{"class":55,"line":2208},[53,14751,8042],{"class":344},[53,14753,53],{"class":387},[53,14755,8143],{"class":344},[53,14757,14758],{"class":387},"b",[53,14760,7661],{"class":344},[53,14762,14763],{"class":340},"Categories: ",[53,14765,1964],{"class":344},[53,14767,14758],{"class":387},[53,14769,8179],{"class":344},[53,14771,53],{"class":387},[53,14773,1722],{"class":344},[53,14775,14776,14778,14780,14782,14784,14786,14789,14791,14793,14795,14797,14800,14802,14804,14807,14809,14811],{"class":55,"line":2229},[53,14777,8042],{"class":344},[53,14779,53],{"class":387},[53,14781,14555],{"class":584},[53,14783,521],{"class":344},[53,14785,524],{"class":344},[53,14787,14788],{"class":397},"category in post.categories",[53,14790,524],{"class":344},[53,14792,14567],{"class":584},[53,14794,521],{"class":344},[53,14796,524],{"class":344},[53,14798,14799],{"class":397},"category",[53,14801,524],{"class":344},[53,14803,7661],{"class":344},[53,14805,14806],{"class":340},"{{ category }}, ",[53,14808,1964],{"class":344},[53,14810,53],{"class":387},[53,14812,1722],{"class":344},[53,14814,14815,14817,14819,14821,14823,14825,14828,14830,14832,14834,14836],{"class":55,"line":2244},[53,14816,8042],{"class":344},[53,14818,53],{"class":387},[53,14820,8143],{"class":344},[53,14822,14758],{"class":387},[53,14824,7661],{"class":344},[53,14826,14827],{"class":340},"Tags: ",[53,14829,1964],{"class":344},[53,14831,14758],{"class":387},[53,14833,8179],{"class":344},[53,14835,53],{"class":387},[53,14837,1722],{"class":344},[53,14839,14840,14842,14844,14846,14848,14850,14853,14855,14857,14859,14861,14863,14865,14867,14870,14872,14874,14876,14878],{"class":55,"line":2269},[53,14841,8042],{"class":344},[53,14843,53],{"class":387},[53,14845,14555],{"class":584},[53,14847,521],{"class":344},[53,14849,524],{"class":344},[53,14851,14852],{"class":397},"tag in post.tags",[53,14854,524],{"class":344},[53,14856,14567],{"class":584},[53,14858,521],{"class":344},[53,14860,524],{"class":344},[53,14862,2388],{"class":397},[53,14864,524],{"class":344},[53,14866,7661],{"class":344},[53,14868,14869],{"class":340},"{{ tag }}, ",[53,14871,1964],{"class":344},[53,14873,53],{"class":387},[53,14875,8143],{"class":344},[53,14877,36],{"class":387},[53,14879,532],{"class":344},[53,14881,14882,14884,14886,14888,14890,14892,14894,14896,14898,14901,14903,14905],{"class":55,"line":2287},[53,14883,8042],{"class":344},[53,14885,14634],{"class":387},[53,14887,14637],{"class":584},[53,14889,521],{"class":344},[53,14891,524],{"class":344},[53,14893,14574],{"class":397},[53,14895,524],{"class":344},[53,14897,7661],{"class":344},[53,14899,14900],{"class":340},"read more",[53,14902,1964],{"class":344},[53,14904,14634],{"class":387},[53,14906,1722],{"class":344},[53,14908,14909,14911,14913],{"class":55,"line":2298},[53,14910,8084],{"class":344},[53,14912,8468],{"class":387},[53,14914,1722],{"class":344},[53,14916,14917,14919,14921],{"class":55,"line":2303},[53,14918,7675],{"class":344},[53,14920,3246],{"class":387},[53,14922,1722],{"class":344},[53,14924,14925,14927,14929],{"class":55,"line":2309},[53,14926,3300],{"class":344},[53,14928,14472],{"class":387},[53,14930,1722],{"class":344},[53,14932,14933,14935,14937],{"class":55,"line":2331},[53,14934,1964],{"class":344},[53,14936,3236],{"class":387},[53,14938,1722],{"class":344},[28,14940,14941],{"id":14941},"cleanup",[15,14943,14944,14945,14950],{},"I originally started the blog with wordpress and many of the old blog posts were basically just one-liners with a couple of links. Some of the posts I didn't even convert to Markdown but just took the HTML from wordpress. I think I used some tool to export everything from wordpress so I could integrate it into my new jekyll site. Anyway. I deleted most of the old blog posts. If you still want to see them there is always the ",[73,14946,14949],{"href":14947,"rel":14948},"http://web.archive.org/",[77],"Wayback Machine"," ;-).",[28,14952,14954],{"id":14953},"replace-jekyll-blog","replace jekyll blog",[96,14956,14957],{"id":14957},"deploment",[15,14959,14960],{},"I published the Jekyll blog on GitHub pages. Of course, I wanted to do the same with the Nuxt blog. The only thing that was supposed to change was the underlying technology from Jekyll to Nuxt.",[15,14962,14963],{},"github-pages is intended for static websites. which means that no server code runs there. The Nuxt project must therefore generate static HTML. In the Nuxt documentation I have a section on GitHub-Pages which says right at the beginning:",[4252,14965,14966],{},[15,14967,14968],{},"GitHub Pages only support static sites, Nuxt will pre-render your application to static HTML files.",[15,14970,14971],{},"which I have just described",[15,14973,14974],{},"and",[4252,14976,14977],{},[15,14978,14979,14980],{},"If you are not using a custom domain, you need to set NUXT_APP_BASE_URL to your repository-slug for your build step.Example: https://",[14981,14982,14983,14984],"user",{},".github.io/",[14985,14986,14987,14988],"repository",{},"/: NUXT_APP_BASE_URL=/",[14985,14989,14990],{},"/ npx nuxt build --preset github_pages",[15,14992,14993],{},"followed by an example GitHub Actions workflow.",[15,14995,14996,14997,15000,15001,391],{},"So I adjusted my nuxt.config.ts and configured the base URL, since I had created a new repo for the nuxt project and created a ",[50,14998,14999],{},"deploy.yml"," in ",[50,15002,15003],{},".github/workflows/",[43,15005,15009],{"className":15006,"code":15007,"language":15008,"meta":48,"style":48},"language-yml shiki shiki-themes material-theme","# https://github.com/actions/deploy-pages#usage\nname: Deploy to GitHub Pages\non:\n workflow_dispatch:\n push:\n branches:\n - main\njobs:\n build:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v4\n - run: corepack enable\n - uses: actions/setup-node@v4\n with:\n node-version: \"20\"\n # Pick your own package manager and build script\n - run: npm install\n - run: npx nuxt build --preset github_pages\n - name: Upload artifact\n uses: actions/upload-pages-artifact@v3\n with:\n path: ./.output/public\n # Deployment job\n deploy:\n # Add a dependency to the build job\n needs: build\n # Grant GITHUB_TOKEN the permissions required to make a Pages deployment\n permissions:\n pages: write # to deploy to Pages\n id-token: write # to verify the deployment originates from an appropriate source\n # Deploy to the github_pages environment\n environment:\n name: github_pages\n url: ${{ steps.deployment.outputs.page_url }}\n # Specify runner + deployment step\n runs-on: ubuntu-latest\n steps:\n - name: Deploy to GitHub Pages\n id: deployment\n uses: actions/deploy-pages@v4\n","yml",[50,15010,15011,15016,15025,15032,15039,15046,15053,15061,15068,15074,15084,15091,15103,15115,15126,15133,15148,15153,15164,15175,15186,15196,15202,15212,15217,15224,15229,15239,15244,15251,15264,15276,15281,15288,15298,15308,15313,15321,15327,15337,15347],{"__ignoreMap":48},[53,15012,15013],{"class":55,"line":56},[53,15014,15015],{"class":350},"# https://github.com/actions/deploy-pages#usage\n",[53,15017,15018,15020,15022],{"class":55,"line":270},[53,15019,2685],{"class":387},[53,15021,391],{"class":344},[53,15023,15024],{"class":397}," Deploy to GitHub Pages\n",[53,15026,15027,15030],{"class":55,"line":354},[53,15028,15029],{"class":4392},"on",[53,15031,5839],{"class":344},[53,15033,15034,15037],{"class":55,"line":360},[53,15035,15036],{"class":387}," workflow_dispatch",[53,15038,5839],{"class":344},[53,15040,15041,15044],{"class":55,"line":366},[53,15042,15043],{"class":387}," push",[53,15045,5839],{"class":344},[53,15047,15048,15051],{"class":55,"line":372},[53,15049,15050],{"class":387}," branches",[53,15052,5839],{"class":344},[53,15054,15055,15058],{"class":55,"line":378},[53,15056,15057],{"class":344}," -",[53,15059,15060],{"class":397}," main\n",[53,15062,15063,15066],{"class":55,"line":384},[53,15064,15065],{"class":387},"jobs",[53,15067,5839],{"class":344},[53,15069,15070,15072],{"class":55,"line":410},[53,15071,4876],{"class":387},[53,15073,5839],{"class":344},[53,15075,15076,15079,15081],{"class":55,"line":416},[53,15077,15078],{"class":387}," runs-on",[53,15080,391],{"class":344},[53,15082,15083],{"class":397}," ubuntu-latest\n",[53,15085,15086,15089],{"class":55,"line":1882},[53,15087,15088],{"class":387}," steps",[53,15090,5839],{"class":344},[53,15092,15093,15095,15098,15100],{"class":55,"line":1888},[53,15094,15057],{"class":344},[53,15096,15097],{"class":387}," uses",[53,15099,391],{"class":344},[53,15101,15102],{"class":397}," actions/checkout@v4\n",[53,15104,15105,15107,15110,15112],{"class":55,"line":1909},[53,15106,15057],{"class":344},[53,15108,15109],{"class":387}," run",[53,15111,391],{"class":344},[53,15113,15114],{"class":397}," corepack enable\n",[53,15116,15117,15119,15121,15123],{"class":55,"line":1914},[53,15118,15057],{"class":344},[53,15120,15097],{"class":387},[53,15122,391],{"class":344},[53,15124,15125],{"class":397}," actions/setup-node@v4\n",[53,15127,15128,15131],{"class":55,"line":1919},[53,15129,15130],{"class":387}," with",[53,15132,5839],{"class":344},[53,15134,15135,15138,15140,15142,15145],{"class":55,"line":1961},[53,15136,15137],{"class":387}," node-version",[53,15139,391],{"class":344},[53,15141,5037],{"class":344},[53,15143,15144],{"class":397},"20",[53,15146,15147],{"class":344},"\"\n",[53,15149,15150],{"class":55,"line":2188},[53,15151,15152],{"class":350}," # Pick your own package manager and build script\n",[53,15154,15155,15157,15159,15161],{"class":55,"line":2208},[53,15156,15057],{"class":344},[53,15158,15109],{"class":387},[53,15160,391],{"class":344},[53,15162,15163],{"class":397}," npm install\n",[53,15165,15166,15168,15170,15172],{"class":55,"line":2229},[53,15167,15057],{"class":344},[53,15169,15109],{"class":387},[53,15171,391],{"class":344},[53,15173,15174],{"class":397}," npx nuxt build --preset github_pages\n",[53,15176,15177,15179,15181,15183],{"class":55,"line":2244},[53,15178,15057],{"class":344},[53,15180,2676],{"class":387},[53,15182,391],{"class":344},[53,15184,15185],{"class":397}," Upload artifact\n",[53,15187,15188,15191,15193],{"class":55,"line":2269},[53,15189,15190],{"class":387}," uses",[53,15192,391],{"class":344},[53,15194,15195],{"class":397}," actions/upload-pages-artifact@v3\n",[53,15197,15198,15200],{"class":55,"line":2287},[53,15199,15130],{"class":387},[53,15201,5839],{"class":344},[53,15203,15204,15207,15209],{"class":55,"line":2298},[53,15205,15206],{"class":387}," path",[53,15208,391],{"class":344},[53,15210,15211],{"class":397}," ./.output/public\n",[53,15213,15214],{"class":55,"line":2303},[53,15215,15216],{"class":350}," # Deployment job\n",[53,15218,15219,15222],{"class":55,"line":2309},[53,15220,15221],{"class":387}," deploy",[53,15223,5839],{"class":344},[53,15225,15226],{"class":55,"line":2331},[53,15227,15228],{"class":350}," # Add a dependency to the build job\n",[53,15230,15231,15234,15236],{"class":55,"line":2344},[53,15232,15233],{"class":387}," needs",[53,15235,391],{"class":344},[53,15237,15238],{"class":397}," build\n",[53,15240,15241],{"class":55,"line":2356},[53,15242,15243],{"class":350}," # Grant GITHUB_TOKEN the permissions required to make a Pages deployment\n",[53,15245,15246,15249],{"class":55,"line":2368},[53,15247,15248],{"class":387}," permissions",[53,15250,5839],{"class":344},[53,15252,15253,15256,15258,15261],{"class":55,"line":2373},[53,15254,15255],{"class":387}," pages",[53,15257,391],{"class":344},[53,15259,15260],{"class":397}," write",[53,15262,15263],{"class":350}," # to deploy to Pages\n",[53,15265,15266,15269,15271,15273],{"class":55,"line":2397},[53,15267,15268],{"class":387}," id-token",[53,15270,391],{"class":344},[53,15272,15260],{"class":397},[53,15274,15275],{"class":350}," # to verify the deployment originates from an appropriate source\n",[53,15277,15278],{"class":55,"line":2424},[53,15279,15280],{"class":350}," # Deploy to the github_pages environment\n",[53,15282,15283,15286],{"class":55,"line":2430},[53,15284,15285],{"class":387}," environment",[53,15287,5839],{"class":344},[53,15289,15290,15293,15295],{"class":55,"line":2461},[53,15291,15292],{"class":387}," name",[53,15294,391],{"class":344},[53,15296,15297],{"class":397}," github_pages\n",[53,15299,15300,15303,15305],{"class":55,"line":2493},[53,15301,15302],{"class":387}," url",[53,15304,391],{"class":344},[53,15306,15307],{"class":397}," ${{ steps.deployment.outputs.page_url }}\n",[53,15309,15310],{"class":55,"line":2515},[53,15311,15312],{"class":350}," # Specify runner + deployment step\n",[53,15314,15315,15317,15319],{"class":55,"line":2547},[53,15316,15078],{"class":387},[53,15318,391],{"class":344},[53,15320,15083],{"class":397},[53,15322,15323,15325],{"class":55,"line":2576},[53,15324,15088],{"class":387},[53,15326,5839],{"class":344},[53,15328,15329,15331,15333,15335],{"class":55,"line":2596},[53,15330,15057],{"class":344},[53,15332,2676],{"class":387},[53,15334,391],{"class":344},[53,15336,15024],{"class":397},[53,15338,15339,15342,15344],{"class":55,"line":2614},[53,15340,15341],{"class":387}," id",[53,15343,391],{"class":344},[53,15345,15346],{"class":397}," deployment\n",[53,15348,15349,15351,15353],{"class":55,"line":2632},[53,15350,15190],{"class":387},[53,15352,391],{"class":344},[53,15354,15355],{"class":397}," actions/deploy-pages@v4\n",[15,15357,15358],{},"I then adapted this to my needs and wanted to deploy the new blog for the first time. But it didn't work.",[96,15360,15362],{"id":15361},"replace-the-old-repository","replace the old repository",[15,15364,15365,15366,122,15369,15372,15373,15375,15376,15378],{},"unfortunately, something was often missing during prerendering. The yml file with the gitHub actions consists of 2 areas: ",[50,15367,15368],{},"build",[50,15370,15371],{},"deploy",". ",[50,15374,15368],{}," eventually worked, but assets were always missing during ",[50,15377,15371],{},". At some point I remembered the gh-pages npm package. I then installed it without further ado and it \"worked\" straight away. Except for the baseURL. But since I only wanted to have one blog anyway and only wanted to switch from jekyll to nuxt, I quickly deleted the jekyll repo and renamed the nuxt repo.",[3908,15380,15381],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sAklC, html code.shiki .sAklC{--shiki-default:#89DDFF}html pre.shiki code .s-wAU, html code.shiki .s-wAU{--shiki-default:#F07178}html pre.shiki code .sJ14y, html code.shiki .sJ14y{--shiki-default:#C792EA}html pre.shiki code .sfyAc, html code.shiki .sfyAc{--shiki-default:#C3E88D}html pre.shiki code .svy0-, html code.shiki .svy0-{--shiki-default:#EEFFFF}html pre.shiki code .s0_hs, html code.shiki .s0_hs{--shiki-default:#546E7A;--shiki-default-font-style:italic}html pre.shiki code .s6cf3, html code.shiki .s6cf3{--shiki-default:#89DDFF;--shiki-default-font-style:italic}html pre.shiki code .sbqyR, html code.shiki .sbqyR{--shiki-default:#FF9CAC}html pre.shiki code .s5Dmg, html code.shiki .s5Dmg{--shiki-default:#FFCB6B}html pre.shiki code .s6YsC, html code.shiki .s6YsC{--shiki-default:#B2CCD6}html pre.shiki code .sx098, html code.shiki .sx098{--shiki-default:#F78C6C}html pre.shiki code .sdLwU, html code.shiki .sdLwU{--shiki-default:#82AAFF}html pre.shiki code .sLFUT, html code.shiki .sLFUT{--shiki-default:#EEFFFF;--shiki-default-font-style:italic}",{"title":48,"searchDepth":270,"depth":270,"links":15383},[15384,15385,15386,15387,15388,15389,15390,15391,15392],{"id":7555,"depth":270,"text":7556},{"id":7579,"depth":270,"text":7580},{"id":10610,"depth":270,"text":10611},{"id":13113,"depth":270,"text":13114},{"id":13258,"depth":270,"text":13259},{"id":13419,"depth":270,"text":13420},{"id":13520,"depth":270,"text":13521},{"id":14941,"depth":270,"text":14941},{"id":14953,"depth":270,"text":14954,"children":15393},[15394,15395],{"id":14957,"depth":354,"text":14957},{"id":15361,"depth":354,"text":15362},[3934],"2024-12-28","i decided to switch from jekyll to nuxt",{"htmlAttrs":15400,"link":15401,"meta":15403},{"lang":3942},[15402],{"rel":3945,"type":3946,"href":3947},[15404,15405,15406,15407,15409,15410,15411,15412,15413,15414,15415],{"name":3950,"content":7518},{"name":3953,"content":3954},{"name":3956,"content":3957},{"name":3959,"content":15408},"mjk @ web - Jekyll to Nuxt",{"name":3962,"content":15398},{"name":3964,"content":3965},{"name":3967,"content":3968},{"name":3970,"content":15408},{"name":3972,"content":15398},{"name":3974,"content":3975},{"name":3977,"content":3095},{"excerpt_separator":7530},"/blog/2024/switch-from-jekyll-to-nuxt",{"title":7538,"description":15398},"blog/2024/switch-from-jekyll-to-nuxt",[3934,3984,1707,105,15421],"jekyll","3zujA2JeDoSueXjq5Y-kGw7fulSqkAxjDqrB5Et5FzA",{"id":15424,"title":15425,"body":15426,"categories":15657,"date":15658,"description":15659,"draft":3937,"excerpt":7511,"extension":3939,"head":15660,"meta":15678,"navigation":805,"path":15679,"seo":15680,"stem":15681,"tags":15682,"__hash__":15684},"blog/blog/2023/react-navbar.md","react-navbar",{"type":8,"value":15427,"toc":15648},[15428,15430,15436,15439,15442,15446,15449,15452,15455,15458,15461,15470,15473,15502,15505,15508,15511,15517,15519,15522,15525,15528,15530,15533,15536,15539,15543,15546,15549,15552,15554,15561,15564,15573,15582,15585,15594,15598,15601,15610,15614,15617,15622,15631,15645],[11,15429,15425],{"id":15425},[15,15431,15432,15433,15435],{},"Well, I know it's been a wile that i write something.",[36,15434],{},"\nI want to change that and I think this is the perfect topic to write an post about.",[15,15437,15438],{},"I actually intended to program a react-native app. Then I thought it wouldn't hurt to refresh my knowledge about react-js before I get into react-native.",[15,15440,15441],{},"And this is where the story begins.",[28,15443,15445],{"id":15444},"practice-reactjs","practice reactjs",[15,15447,15448],{},"First of all I had to decide what I want to do. I didn't want to code a todo list for the umpteenth time, but something useful. Some time ago I discovered GatsbyJS and played around with it. I realy like Jekyll but I also like the concept behind ReactJS. So I decided to code a reactjs-component which I can reuse in other projects.",[15,15450,15451],{},"Speaking of Jekyll I really love the header. I love that it's \"really\" responsive and the fact the links disappear if its on a screen with under a given value an the burger icon/button appears where I can toggle the navigation. Except for a minor issue. But I'll come to this later. I want to rebuild this Navbar/header thing as an reactjs-component, make it generic and dynamical as hell and distribute it to npm later on.",[15,15453,15454],{},"I started a new React-Project and added some dummy contend. The I added a new Component, named it Navbar but i still had no idea how to isolate them and deploy them to npm. how can i get rid of this dummy-code? How can I get rid of the install and configuration overhead? Well, there is a solution called create-react-library.",[96,15456,15457],{"id":15457},"create-react-library",[15,15459,15460],{},"create-react-library is an awesome cli to create an react component library from scratch without anny configuration. If your npm version is up to date, you can even use it without installing it by simply running it with npx like this.:",[43,15462,15464],{"className":7565,"code":15463,"language":7567,"meta":48,"style":48},"npx create-react-library myAwesomeLibraryName\n",[50,15465,15466],{"__ignoreMap":48},[53,15467,15468],{"class":55,"line":56},[53,15469,15463],{},[15,15471,15472],{},"Then we get some instructions to bring our component to life.",[43,15474,15476],{"className":7565,"code":15475,"language":7567,"meta":48,"style":48},"To get started, in one tab, run:\n$ cd myAwesomeLibraryName && npm start\n\nAnd in another tab, run the create-react-app dev server:\n$ cd myAwesomeLibraryName/example && npm start\n",[50,15477,15478,15483,15488,15492,15497],{"__ignoreMap":48},[53,15479,15480],{"class":55,"line":56},[53,15481,15482],{},"To get started, in one tab, run:\n",[53,15484,15485],{"class":55,"line":270},[53,15486,15487],{},"$ cd myAwesomeLibraryName && npm start\n",[53,15489,15490],{"class":55,"line":354},[53,15491,806],{"emptyLinePlaceholder":805},[53,15493,15494],{"class":55,"line":360},[53,15495,15496],{},"And in another tab, run the create-react-app dev server:\n",[53,15498,15499],{"class":55,"line":366},[53,15500,15501],{},"$ cd myAwesomeLibraryName/example && npm start\n",[15,15503,15504],{},"This is awesome!!! We already have an existing component which is even used in an create-react-app example.",[300,15506,15507],{"id":5773},"directory structure",[15,15509,15510],{},"Now let's have a quick look on the generated files.",[43,15512,15515],{"className":15513,"code":15514,"language":1159,"meta":48},[1157],".\n├── dist\n│ ├── index.css\n│ ├── index.js\n│ ├── index.js.map\n│ ├── index.modern.js\n│ └── index.modern.js.map\n├── example\n│ ├── node_modules\n│ | ├── ...\n| │ └── ...\n│ ├── public\n│ | ├── favicon.ico\n│ | ├── index.html\n| │ └── manifest.json\n│ ├── src\n│ | ├── App.js\n│ | ├── App.test.js\n│ | ├── index.css\n| │ └── index.js\n│ ├── package.json\n│ ├── package-lock.json\n│ └── README.md\n├── node_modules\n│ ├── ...\n│ └── ...\n├── src\n│ ├── .eslintrc\n│ ├── index.js\n│ ├── index.test.js\n│ └── styles.module.css\n├── .editorconfig\n├── .eslintignore\n├── .eslintrc\n├── .gitignore\n├── .prettierrc\n├── .travis.yml\n├── package.json\n├── package-lock.json\n└── README.md\n",[50,15516,15514],{"__ignoreMap":48},[300,15518,5306],{"id":5306},[15,15520,15521],{},"This is where the magic happens. Our library will be built into this directory.",[300,15523,15524],{"id":15524},"example",[15,15526,15527],{},"In this directory lives the sample app that uses our component.",[300,15529,5279],{"id":5279},[15,15531,15532],{},"this is the Directory where npm stores the dependencies of our component",[300,15534,15535],{"id":15535},"src",[15,15537,15538],{},"This is where the fun happened. Here we code our component library which will be built later in dist.",[96,15540,15542],{"id":15541},"keep-it-simple","keep it simple",[15,15544,15545],{},"I have many ideas of features I could implement in to this library but I think in the end this is realy timeconsuming and I shoud keep it simple. At leased for now. The goal is to just refresh my react skills, lern how to create and shere a npm package and then move on to the next project.",[15,15547,15548],{},"Sure, I want to rebuild this jekyll Navbar/header thing width the burger icon/button as an reactjs-component but for now let's keep it simple and add this stuff later on.",[15,15550,15551],{},"So I add a simple horizontal Navbar.",[96,15553,3160],{"id":3160},[15,15555,15556,15557,15560],{},"We have this example ",[50,15558,15559],{},"create-react-app"," app in the example directory where we can check out our new component. But if we would like to us it in an other project, before we publish it to npm, we have to link it, so we can use it there.",[15,15562,15563],{},"insight myAwesomeLibraryName",[43,15565,15567],{"className":7565,"code":15566,"language":7567,"meta":48,"style":48},"npm link\n",[50,15568,15569],{"__ignoreMap":48},[53,15570,15571],{"class":55,"line":56},[53,15572,15566],{},[43,15574,15576],{"className":7565,"code":15575,"language":7567,"meta":48,"style":48},"npm unlink\n",[50,15577,15578],{"__ignoreMap":48},[53,15579,15580],{"class":55,"line":56},[53,15581,15575],{},[15,15583,15584],{},"insight another project",[43,15586,15588],{"className":7565,"code":15587,"language":7567,"meta":48,"style":48},"npm link myAwesomeLibraryName\n",[50,15589,15590],{"__ignoreMap":48},[53,15591,15592],{"class":55,"line":56},[53,15593,15587],{},[28,15595,15597],{"id":15596},"distribute-to-npm","distribute to npm",[15,15599,15600],{},"first create npm account and werifi email\nthen",[43,15602,15604],{"className":7565,"code":15603,"language":7567,"meta":48,"style":48},"npm adduser\n",[50,15605,15606],{"__ignoreMap":48},[53,15607,15608],{"class":55,"line":56},[53,15609,15603],{},[28,15611,15613],{"id":15612},"next-steps","next steps",[15,15615,15616],{},"this are just some notes to complete this post lateron",[658,15618,15619],{},[661,15620,15621],{},"use prop-types",[43,15623,15625],{"className":7565,"code":15624,"language":7567,"meta":48,"style":48},"npm install --save prop-types\n",[50,15626,15627],{"__ignoreMap":48},[53,15628,15629],{"class":55,"line":56},[53,15630,15624],{},[658,15632,15633,15636,15639,15642],{},[661,15634,15635],{},"use link",[661,15637,15638],{},"use sass",[661,15640,15641],{},"add the burger icon/button stuff",[661,15643,15644],{},"calculate the width of the lins to prevent uggly design issues",[3908,15646,15647],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":48,"searchDepth":270,"depth":270,"links":15649},[15650,15655,15656],{"id":15444,"depth":270,"text":15445,"children":15651},[15652,15653,15654],{"id":15457,"depth":354,"text":15457},{"id":15541,"depth":354,"text":15542},{"id":3160,"depth":354,"text":3160},{"id":15596,"depth":270,"text":15597},{"id":15612,"depth":270,"text":15613},[3934],"2023-02-12","creating a react-navbar npm package",{"htmlAttrs":15661,"link":15662,"meta":15664},{"lang":3942},[15663],{"rel":3945,"type":3946,"href":3947},[15665,15667,15668,15669,15671,15672,15673,15674,15675,15676,15677],{"name":3950,"content":15666},"coding, programming, react",{"name":3953,"content":3954},{"name":3956,"content":3957},{"name":3959,"content":15670},"mjk @ web - x",{"name":3962,"content":15659},{"name":3964,"content":3965},{"name":3967,"content":3968},{"name":3970,"content":15670},{"name":3972,"content":15659},{"name":3974,"content":3975},{"name":3977,"content":3095},{"excerpt_separator":7530},"/blog/2023/react-navbar",{"title":15425,"description":15659},"blog/2023/react-navbar",[3984,3934,15683],"react","0k6LifMFMCtdA3AUr4UnLGyR0LUe04vx-NN-PStyA7s",{"id":15686,"title":15687,"body":15688,"categories":15716,"date":15718,"description":15687,"draft":3937,"excerpt":7511,"extension":3939,"head":15719,"meta":15737,"navigation":805,"path":15738,"seo":15739,"stem":15740,"tags":15741,"__hash__":15748},"blog/blog/2018/peace-dc-at-ujz-korn.md","PeaceDC @ UJZ Korn",{"type":8,"value":15689,"toc":15714},[15690,15693,15696,15704,15707],[11,15691,15687],{"id":15692},"peacedc-ujz-korn",[15,15694,15695],{},"Peace Development Crew // S.P. Music - Live Konzert + Party",[15,15697,15698,15699],{},"concerts mixed by ",[73,15700,15703],{"href":15701,"rel":15702},"http://www.ras-or.com",[77],"ras 'or",[15,15705,15706],{},"Friday, March 23 21:00 - 6:00",[15,15708,15709],{},[73,15710,15713],{"href":15711,"rel":15712},"https://www.facebook.com/events/420536301711136/",[77],"more info",{"title":48,"searchDepth":270,"depth":270,"links":15715},[],[15717],"concerts","2018-03-11",{"htmlAttrs":15720,"link":15721,"meta":15723},{"lang":3942},[15722],{"rel":3945,"type":3946,"href":3947},[15724,15726,15727,15728,15730,15731,15732,15733,15734,15735,15736],{"name":3950,"content":15725},"concert, Peace DC, peacedevelopmentcrew, ras-or, Live, UJZ Korn",{"name":3953,"content":3954},{"name":3956,"content":3957},{"name":3959,"content":15729},"mjk @ web - Peace DC Concert",{"name":3962,"content":15687},{"name":3964,"content":3965},{"name":3967,"content":3968},{"name":3970,"content":15729},{"name":3972,"content":15687},{"name":3974,"content":3975},{"name":3977,"content":3095},{"excerpt_separator":3979},"/blog/2018/peace-dc-at-ujz-korn",{"title":15687,"description":15687},"blog/2018/peace-dc-at-ujz-korn",[15742,15743,15744,15745,15746,15747],"PeaceDC","peacedevelopmentcrew","ras-or","Live","concert","UJZ Korn","gyosAv53jgtekUoG1unNyNfJG1NbktpZ_ldtUgWLQGw",{"id":15750,"title":15751,"body":15752,"categories":15785,"date":15787,"description":15788,"draft":3937,"excerpt":7511,"extension":3939,"head":15789,"meta":15806,"navigation":805,"path":15807,"seo":15808,"stem":15809,"tags":15810,"__hash__":15811},"blog/blog/2017/update.md","update",{"type":8,"value":15753,"toc":15780},[15754,15756,15759,15763,15766,15770,15773,15777],[11,15755,15751],{"id":15751},[15,15757,15758],{},"It's been a long time since I posted anything here. Nothing happened since 2014! That should change now. I'll integrate tags in the near future and continue to post this and that, but focus on some highlights. Well, and hopefully I'll add the social media links soon. ;-)",[28,15760,15762],{"id":15761},"webdevelopment","Webdevelopment",[15,15764,15765],{},"Speaking about several technologies, some Ideas I have for awesome projects in the future and Web Development in general. For more fun I’ll also add some basic syntax highlighting.",[28,15767,15769],{"id":15768},"bushcraft-survival-prepping","Bushcraft / Survival / Prepping",[15,15771,15772],{},"I think I'll share some Survival / Bushcraft skills with you and maybe make some tutorials. Maybe I'll also show some pictures of my equipment an speak about my experience with it.",[28,15774,15776],{"id":15775},"making-music","Making Music",[15,15778,15779],{},"You know / or you don't, I'm a musician so of corse I planed to write about making music.",{"title":48,"searchDepth":270,"depth":270,"links":15781},[15782,15783,15784],{"id":15761,"depth":270,"text":15762},{"id":15768,"depth":270,"text":15769},{"id":15775,"depth":270,"text":15776},[15786],"general","2017-12-12 23:15:00 +0200","I'm back",{"htmlAttrs":15790,"link":15791,"meta":15793},{"lang":3942},[15792],{"rel":3945,"type":3946,"href":3947},[15794,15795,15796,15797,15799,15800,15801,15802,15803,15804,15805],{"name":3950,"content":15751},{"name":3953,"content":3954},{"name":3956,"content":3957},{"name":3959,"content":15798},"mjk @ web - update",{"name":3962,"content":15788},{"name":3964,"content":3965},{"name":3967,"content":3968},{"name":3970,"content":15798},{"name":3972,"content":15788},{"name":3974,"content":3975},{"name":3977,"content":3095},{"excerpt_separator":7530},"/blog/2017/update",{"title":15751,"description":15788},"blog/2017/update",[15751],"YfQo62wQFk9UpdcS74YNTALmoYljpyzpzgiwzSgVa24",{"id":15813,"title":15814,"body":15815,"categories":15831,"date":15833,"description":15814,"draft":3937,"excerpt":7511,"extension":3939,"head":15834,"meta":15852,"navigation":805,"path":15853,"seo":15854,"stem":15855,"tags":15856,"__hash__":15857},"blog/blog/2014/gd-map-a-tool-to-visualize-disk-space.md","GD Map - A tool to visualize disk space",{"type":8,"value":15816,"toc":15829},[15817,15820],[11,15818,15814],{"id":15819},"gd-map-a-tool-to-visualize-disk-space",[15,15821,15822,15823,15825,634],{},"GdMap is a tool which allows to visualize disk space. Ever wondered why your hard disk is full or what directory and files take up most of the space? With GdMap these questions can be answered quickly.",[36,15824],{},[73,15826,15814],{"href":15827,"rel":15828},"http://gdmap.sourceforge.net/",[77],{"title":48,"searchDepth":270,"depth":270,"links":15830},[],[15832],"tools","2014-06-21 23:21:02 +0200",{"htmlAttrs":15835,"link":15836,"meta":15838},{"lang":3942},[15837],{"rel":3945,"type":3946,"href":3947},[15839,15841,15842,15843,15845,15846,15847,15848,15849,15850,15851],{"name":3950,"content":15840},"gd-map",{"name":3953,"content":3954},{"name":3956,"content":3957},{"name":3959,"content":15844},"mjk @ web - GD Map",{"name":3962,"content":15814},{"name":3964,"content":3965},{"name":3967,"content":3968},{"name":3970,"content":15844},{"name":3972,"content":15814},{"name":3974,"content":3975},{"name":3977,"content":3095},{},"/blog/2014/gd-map-a-tool-to-visualize-disk-space",{"title":15814,"description":15814},"blog/2014/gd-map-a-tool-to-visualize-disk-space",[15840],"mwn86p8GxLQQnlNVCAMjMYS2-jVn1qrrYzJv63g7y6k",{"id":15859,"title":15860,"body":15861,"categories":15883,"date":15884,"description":15860,"draft":3937,"excerpt":7511,"extension":3939,"head":15885,"meta":15902,"navigation":805,"path":15903,"seo":15904,"stem":15905,"tags":15906,"__hash__":15909},"blog/blog/2014/peace-dc-lux-club-hannover.md","28.02.14 Peace DC @ Lux Club Hannover",{"type":8,"value":15862,"toc":15881},[15863,15866,15869,15875],[11,15864,15860],{"id":15865},"_280214-peace-dc-lux-club-hannover",[15,15867,15868],{},"Peace DC zurück auf der Bühne. Mit neuen Songs und einigen neuen Gesichtern zeigt sich die Band wieder. Der Bassist und Rapper Koro Boni aus der Elfenbeinküste präsentiert sich mit 2 Stücken am Mikrofon. An der Gitarre ist Cjah, der auch als Sänger und Produzent in der hannoverschen Reggaeszene bekannt ist.",[15,15870,15871,15872,15874],{},"Christina Korn wird mit ihrer souligen Stimme den Backgroundchor unterstützen.",[36,15873],{},"\nAm Schlagzeug ist der Flo Schlögl mit saftigem Groove.",[15,15876,15877,15878,15880],{},"Von Reggae zu Dancehall, Latin, Hip Hop und Soca wirds heiss auf der Bühne.",[36,15879],{},"\nParty Vibes und Musik vom Feinsten.",{"title":48,"searchDepth":270,"depth":270,"links":15882},[],[15717],"2014-02-20 01:39:45 +0100",{"htmlAttrs":15886,"link":15887,"meta":15889},{"lang":3942},[15888],{"rel":3945,"type":3946,"href":3947},[15890,15892,15893,15894,15895,15896,15897,15898,15899,15900,15901],{"name":3950,"content":15891},"concerts, Peace DC, Lux Club",{"name":3953,"content":3954},{"name":3956,"content":3957},{"name":3959,"content":15729},{"name":3962,"content":15860},{"name":3964,"content":3965},{"name":3967,"content":3968},{"name":3970,"content":15729},{"name":3972,"content":15860},{"name":3974,"content":3975},{"name":3977,"content":3095},{},"/blog/2014/peace-dc-lux-club-hannover",{"title":15860,"description":15860},"blog/2014/peace-dc-lux-club-hannover",[15717,15907,15908],"Peace DC","Lux Club","hNA7F58TwSRqn7Ay7scqJBgD3m_aVbHL3zx2djdidsk",1775492952854] \ No newline at end of file diff --git a/about/_payload.json b/about/_payload.json new file mode 100644 index 0000000..fe1db08 --- /dev/null +++ b/about/_payload.json @@ -0,0 +1 @@ +[{"data":1,"prerenderedAt":160},["ShallowReactive",2],{"about":3},{"id":4,"title":5,"body":6,"description":115,"extension":116,"head":117,"meta":155,"navigation":156,"path":157,"seo":158,"stem":12,"__hash__":159},"pages/about.md","About",{"type":7,"value":8,"toc":107},"minimark",[9,13,18,22,39,48,51,55,58,62,77,85,89],[10,11,5],"h1",{"id":12},"about",[14,15,17],"h2",{"id":16},"about-me","About me",[19,20,21],"p",{},"Hello, I'm Melchior. I was born in Hamburg and currently live in Hanover. I'm a full stack developer and very grateful that I was able to turn my hobby into a career.",[19,23,24,25,33,34],{},"Furthermore, I am a passionate musician. For example, I play in the reggae band ",[26,27,32],"a",{":target":28,"href":29,"rel":30},"_blank","http://www.peacedevelopmentcrew.de",[31],"nofollow","peace development crew"," or make electronic music both on the computer and with hardware like Electribe by Korg. My artist name is ",[26,35,38],{":target":28,"href":36,"rel":37},"http://www.ras-or.com",[31],"ras 'or",[19,40,41,42,47],{},"I also like cycling (I have recorded some tours and uploaded them to ",[26,43,46],{":target":28,"href":44,"rel":45},"https://www.youtube.com/@MelchiorKannengieer",[31],"youtube",") and am interested in all kinds of outdoor activities such as hiking, climbing, but also survival and bushcraft.",[19,49,50],{},"Oh... and I like video games... maybe I'll record that at some point and upload it to YouTube.",[14,52,54],{"id":53},"about-this-blog","About this blog",[19,56,57],{},"In the past I posted various things on this blog, but decided to focus more on technical post. However, this does not mean that there is not something else to read here. I have also decided to write my posts in English in the future. Have fun reading my posts. They may also be useful for one or the other, even if I am now primarily writing them for myself in order to deepen topics.",[14,59,61],{"id":60},"contact","Contact",[19,63,64,65,70,71,76],{},"The easiest way to get in touch with me is via ",[26,66,69],{":target":28,"href":67,"rel":68},"https://matrix.to/#/@mkaatmtrx:matrix.org",[31],"matrix"," or my ",[26,72,75],{":target":28,"href":73,"rel":74},"https://discord.gg/ZsKEmD22gt",[31],"discord server",".",[19,78,79,80],{},"if you want to send me something old-fashioned like an email, first of all you should know that it can easily get lost in my mailbox and secondly please use my ",[26,81,84],{":target":28,"href":82,"rel":83},"http://downloads.mjkatweb.de/Melchior%20Kannengiesser@gmx.de%20melchior.kannengiesser@gmx.de%20%280x9DA550DE%29%20pub.asc",[31],"pgp key",[14,86,88],{"id":87},"donations-gifts","donations / gifts",[19,90,91,92,70,97,102,103],{},"Well, at the moment there isn't really a way to donate, but if you want to support me you can buy me something from my ",[26,93,96],{":target":28,"href":94,"rel":95},"http://www.discogs.com/wantlist?user=ras-or",[31],"discogs",[26,98,101],{":target":28,"href":99,"rel":100},"https://www.amazon.de/hz/wishlist/ls/27M80R0N4QZP1?ref_=list_d_wl_lfu_nav_1",[31],"amazon"," wishlist or give the amazing Brave browser a try. ",[26,104,105],{":target":28,"href":105,"rel":106},"https://brave.com/mjk716",[31],{"title":108,"searchDepth":109,"depth":109,"links":110},"",2,[111,112,113,114],{"id":16,"depth":109,"text":17},{"id":53,"depth":109,"text":54},{"id":60,"depth":109,"text":61},{"id":87,"depth":109,"text":88},"some infos about me and my blog","md",{"htmlAttrs":118,"link":120,"meta":125},{"lang":119},"en",[121],{"rel":122,"type":123,"href":124},"icon","mange/x-icon","/favicon.ico",[126,128,131,134,137,139,142,145,147,149,152],{"name":127,"content":12},"keywords",{"name":129,"content":130},"robots","index, follow",{"name":132,"content":133},"author","Melchior Kannengießer",{"name":135,"content":136},"og:title","mjk @ web - about me",{"name":138,"content":115},"og:description",{"name":140,"content":141},"og:image","/logo_518x270.png",{"name":143,"content":144},"og:url","https://mjkatgithub.github.io/about",{"name":146,"content":136},"twitter:title",{"name":148,"content":115},"twitter:description",{"name":150,"content":151},"twitter:image","/logo_200x200.png",{"name":153,"content":154},"twitter:card","summary",{},true,"/about",{"title":5,"description":115},"aHNVDzolZub4Hqpszp9-mkNIZzN5PVaXrwVkL6N8Aa4",1775492953060] \ No newline at end of file diff --git a/about/index.html b/about/index.html new file mode 100644 index 0000000..bb03b75 --- /dev/null +++ b/about/index.html @@ -0,0 +1 @@ +About

About

About me

Hello, I'm Melchior. I was born in Hamburg and currently live in Hanover. I'm a full stack developer and very grateful that I was able to turn my hobby into a career.

Furthermore, I am a passionate musician. For example, I play in the reggae band peace development crew or make electronic music both on the computer and with hardware like Electribe by Korg. My artist name is ras 'or

I also like cycling (I have recorded some tours and uploaded them to youtube) and am interested in all kinds of outdoor activities such as hiking, climbing, but also survival and bushcraft.

Oh... and I like video games... maybe I'll record that at some point and upload it to YouTube.

About this blog

In the past I posted various things on this blog, but decided to focus more on technical post. However, this does not mean that there is not something else to read here. I have also decided to write my posts in English in the future. Have fun reading my posts. They may also be useful for one or the other, even if I am now primarily writing them for myself in order to deepen topics.

Contact

The easiest way to get in touch with me is via matrix or my discord server.

if you want to send me something old-fashioned like an email, first of all you should know that it can easily get lost in my mailbox and secondly please use my pgp key

donations / gifts

Well, at the moment there isn't really a way to donate, but if you want to support me you can buy me something from my discogs or my amazon wishlist or give the amazing Brave browser a try. https://brave.com/mjk716

© by Melchior Jascha Kannengießer
\ No newline at end of file diff --git a/assets/icons/buy-me-something-nice.png b/assets/icons/buy-me-something-nice.png new file mode 100644 index 0000000..36c8500 Binary files /dev/null and b/assets/icons/buy-me-something-nice.png differ diff --git a/assets/icons/di.day.png b/assets/icons/di.day.png new file mode 100644 index 0000000..f8dbb40 Binary files /dev/null and b/assets/icons/di.day.png differ diff --git a/assets/icons/facebook48.png b/assets/icons/facebook48.png new file mode 100644 index 0000000..d45b6a5 Binary files /dev/null and b/assets/icons/facebook48.png differ diff --git a/assets/icons/fediverse.info.png b/assets/icons/fediverse.info.png new file mode 100644 index 0000000..f106609 Binary files /dev/null and b/assets/icons/fediverse.info.png differ diff --git a/assets/icons/fuk.png b/assets/icons/fuk.png new file mode 100644 index 0000000..e2fb93c Binary files /dev/null and b/assets/icons/fuk.png differ diff --git a/assets/icons/github48.png b/assets/icons/github48.png new file mode 100644 index 0000000..70646f9 Binary files /dev/null and b/assets/icons/github48.png differ diff --git a/assets/icons/instagram48.png b/assets/icons/instagram48.png new file mode 100644 index 0000000..76ab192 Binary files /dev/null and b/assets/icons/instagram48.png differ diff --git a/assets/icons/kunst-kanne.png b/assets/icons/kunst-kanne.png new file mode 100644 index 0000000..1835146 Binary files /dev/null and b/assets/icons/kunst-kanne.png differ diff --git a/assets/icons/linktree.png b/assets/icons/linktree.png new file mode 100644 index 0000000..e053bff Binary files /dev/null and b/assets/icons/linktree.png differ diff --git a/assets/icons/mastodon.png b/assets/icons/mastodon.png new file mode 100644 index 0000000..1e1a328 Binary files /dev/null and b/assets/icons/mastodon.png differ diff --git a/assets/icons/matrix.png b/assets/icons/matrix.png new file mode 100644 index 0000000..7a642a9 Binary files /dev/null and b/assets/icons/matrix.png differ diff --git a/assets/icons/nine.png b/assets/icons/nine.png new file mode 100644 index 0000000..3dc93bc Binary files /dev/null and b/assets/icons/nine.png differ diff --git a/assets/icons/pdc.png b/assets/icons/pdc.png new file mode 100644 index 0000000..fa953c1 Binary files /dev/null and b/assets/icons/pdc.png differ diff --git a/assets/icons/reddit48.png b/assets/icons/reddit48.png new file mode 100644 index 0000000..0d7baff Binary files /dev/null and b/assets/icons/reddit48.png differ diff --git a/assets/icons/steemit.png b/assets/icons/steemit.png new file mode 100644 index 0000000..0f81482 Binary files /dev/null and b/assets/icons/steemit.png differ diff --git a/assets/icons/twitch.png b/assets/icons/twitch.png new file mode 100644 index 0000000..af4bd02 Binary files /dev/null and b/assets/icons/twitch.png differ diff --git a/assets/icons/x.com.png b/assets/icons/x.com.png new file mode 100644 index 0000000..a4fc42b Binary files /dev/null and b/assets/icons/x.com.png differ diff --git a/assets/icons/youtube48.png b/assets/icons/youtube48.png new file mode 100644 index 0000000..78fb3cd Binary files /dev/null and b/assets/icons/youtube48.png differ diff --git a/blog/2014/gd-map-a-tool-to-visualize-disk-space/_payload.json b/blog/2014/gd-map-a-tool-to-visualize-disk-space/_payload.json new file mode 100644 index 0000000..57a3ab2 --- /dev/null +++ b/blog/2014/gd-map-a-tool-to-visualize-disk-space/_payload.json @@ -0,0 +1 @@ +[{"data":1,"prerenderedAt":83},["ShallowReactive",2],{"blog-/blog/2014/gd-map-a-tool-to-visualize-disk-space":3},{"id":4,"title":5,"body":6,"categories":31,"date":33,"description":5,"draft":34,"excerpt":35,"extension":36,"head":37,"meta":76,"navigation":77,"path":78,"seo":79,"stem":80,"tags":81,"__hash__":82},"blog/blog/2014/gd-map-a-tool-to-visualize-disk-space.md","GD Map - A tool to visualize disk space",{"type":7,"value":8,"toc":27},"minimark",[9,13],[10,11,5],"h1",{"id":12},"gd-map-a-tool-to-visualize-disk-space",[14,15,16,17,20,26],"p",{},"GdMap is a tool which allows to visualize disk space. Ever wondered why your hard disk is full or what directory and files take up most of the space? With GdMap these questions can be answered quickly.",[18,19],"br",{},[21,22,5],"a",{"href":23,"rel":24},"http://gdmap.sourceforge.net/",[25],"nofollow",".",{"title":28,"searchDepth":29,"depth":29,"links":30},"",2,[],[32],"tools","2014-06-21 23:21:02 +0200",false,null,"md",{"htmlAttrs":38,"link":40,"meta":45},{"lang":39},"en",[41],{"rel":42,"type":43,"href":44},"icon","mange/x-icon","/favicon.ico",[46,49,52,55,58,60,63,66,68,70,73],{"name":47,"content":48},"keywords","gd-map",{"name":50,"content":51},"robots","index, follow",{"name":53,"content":54},"author","Melchior Kannengießer",{"name":56,"content":57},"og:title","mjk @ web - GD Map",{"name":59,"content":5},"og:description",{"name":61,"content":62},"og:image","/logo_518x270.png",{"name":64,"content":65},"og:url","http://www.mjkweb.de",{"name":67,"content":57},"twitter:title",{"name":69,"content":5},"twitter:description",{"name":71,"content":72},"twitter:image","/logo_200x200.png",{"name":74,"content":75},"twitter:card","summary",{},true,"/blog/2014/gd-map-a-tool-to-visualize-disk-space",{"title":5,"description":5},"blog/2014/gd-map-a-tool-to-visualize-disk-space",[48],"mwn86p8GxLQQnlNVCAMjMYS2-jVn1qrrYzJv63g7y6k",1775492953065] \ No newline at end of file diff --git a/blog/2014/gd-map-a-tool-to-visualize-disk-space/index.html b/blog/2014/gd-map-a-tool-to-visualize-disk-space/index.html new file mode 100644 index 0000000..f83b2b3 --- /dev/null +++ b/blog/2014/gd-map-a-tool-to-visualize-disk-space/index.html @@ -0,0 +1 @@ +GD Map - A tool to visualize disk space

GD Map - A tool to visualize disk space

GdMap is a tool which allows to visualize disk space. Ever wondered why your hard disk is full or what directory and files take up most of the space? With GdMap these questions can be answered quickly.
GD Map - A tool to visualize disk space.

© by Melchior Jascha Kannengießer
\ No newline at end of file diff --git a/blog/2014/peace-dc-lux-club-hannover/_payload.json b/blog/2014/peace-dc-lux-club-hannover/_payload.json new file mode 100644 index 0000000..0221437 --- /dev/null +++ b/blog/2014/peace-dc-lux-club-hannover/_payload.json @@ -0,0 +1 @@ +[{"data":1,"prerenderedAt":88},["ShallowReactive",2],{"blog-/blog/2014/peace-dc-lux-club-hannover":3},{"id":4,"title":5,"body":6,"categories":34,"date":36,"description":5,"draft":37,"excerpt":38,"extension":39,"head":40,"meta":79,"navigation":80,"path":81,"seo":82,"stem":83,"tags":84,"__hash__":87},"blog/blog/2014/peace-dc-lux-club-hannover.md","28.02.14 Peace DC @ Lux Club Hannover",{"type":7,"value":8,"toc":30},"minimark",[9,13,17,24],[10,11,5],"h1",{"id":12},"_280214-peace-dc-lux-club-hannover",[14,15,16],"p",{},"Peace DC zurück auf der Bühne. Mit neuen Songs und einigen neuen Gesichtern zeigt sich die Band wieder. Der Bassist und Rapper Koro Boni aus der Elfenbeinküste präsentiert sich mit 2 Stücken am Mikrofon. An der Gitarre ist Cjah, der auch als Sänger und Produzent in der hannoverschen Reggaeszene bekannt ist.",[14,18,19,20,23],{},"Christina Korn wird mit ihrer souligen Stimme den Backgroundchor unterstützen.",[21,22],"br",{},"\nAm Schlagzeug ist der Flo Schlögl mit saftigem Groove.",[14,25,26,27,29],{},"Von Reggae zu Dancehall, Latin, Hip Hop und Soca wirds heiss auf der Bühne.",[21,28],{},"\nParty Vibes und Musik vom Feinsten.",{"title":31,"searchDepth":32,"depth":32,"links":33},"",2,[],[35],"concerts","2014-02-20 01:39:45 +0100",false,null,"md",{"htmlAttrs":41,"link":43,"meta":48},{"lang":42},"en",[44],{"rel":45,"type":46,"href":47},"icon","mange/x-icon","/favicon.ico",[49,52,55,58,61,63,66,69,71,73,76],{"name":50,"content":51},"keywords","concerts, Peace DC, Lux Club",{"name":53,"content":54},"robots","index, follow",{"name":56,"content":57},"author","Melchior Kannengießer",{"name":59,"content":60},"og:title","mjk @ web - Peace DC Concert",{"name":62,"content":5},"og:description",{"name":64,"content":65},"og:image","/logo_518x270.png",{"name":67,"content":68},"og:url","http://www.mjkweb.de",{"name":70,"content":60},"twitter:title",{"name":72,"content":5},"twitter:description",{"name":74,"content":75},"twitter:image","/logo_200x200.png",{"name":77,"content":78},"twitter:card","summary",{},true,"/blog/2014/peace-dc-lux-club-hannover",{"title":5,"description":5},"blog/2014/peace-dc-lux-club-hannover",[35,85,86],"Peace DC","Lux Club","hNA7F58TwSRqn7Ay7scqJBgD3m_aVbHL3zx2djdidsk",1775492953066] \ No newline at end of file diff --git a/blog/2014/peace-dc-lux-club-hannover/index.html b/blog/2014/peace-dc-lux-club-hannover/index.html new file mode 100644 index 0000000..4d4055b --- /dev/null +++ b/blog/2014/peace-dc-lux-club-hannover/index.html @@ -0,0 +1,3 @@ +28.02.14 Peace DC @ Lux Club Hannover

28.02.14 Peace DC @ Lux Club Hannover

Peace DC zurück auf der Bühne. Mit neuen Songs und einigen neuen Gesichtern zeigt sich die Band wieder. Der Bassist und Rapper Koro Boni aus der Elfenbeinküste präsentiert sich mit 2 Stücken am Mikrofon. An der Gitarre ist Cjah, der auch als Sänger und Produzent in der hannoverschen Reggaeszene bekannt ist.

Christina Korn wird mit ihrer souligen Stimme den Backgroundchor unterstützen.
+Am Schlagzeug ist der Flo Schlögl mit saftigem Groove.

Von Reggae zu Dancehall, Latin, Hip Hop und Soca wirds heiss auf der Bühne.
+Party Vibes und Musik vom Feinsten.

© by Melchior Jascha Kannengießer
\ No newline at end of file diff --git a/blog/2017/update/_payload.json b/blog/2017/update/_payload.json new file mode 100644 index 0000000..0fb3091 --- /dev/null +++ b/blog/2017/update/_payload.json @@ -0,0 +1 @@ +[{"data":1,"prerenderedAt":98},["ShallowReactive",2],{"blog-/blog/2017/update":3},{"id":4,"title":5,"body":6,"categories":45,"date":47,"description":48,"draft":49,"excerpt":50,"extension":51,"head":52,"meta":90,"navigation":92,"path":93,"seo":94,"stem":95,"tags":96,"__hash__":97},"blog/blog/2017/update.md","update",{"type":7,"value":8,"toc":38},"minimark",[9,12,16,21,24,28,31,35],[10,11,5],"h1",{"id":5},[13,14,15],"p",{},"It's been a long time since I posted anything here. Nothing happened since 2014! That should change now. I'll integrate tags in the near future and continue to post this and that, but focus on some highlights. Well, and hopefully I'll add the social media links soon. ;-)",[17,18,20],"h2",{"id":19},"webdevelopment","Webdevelopment",[13,22,23],{},"Speaking about several technologies, some Ideas I have for awesome projects in the future and Web Development in general. For more fun I’ll also add some basic syntax highlighting.",[17,25,27],{"id":26},"bushcraft-survival-prepping","Bushcraft / Survival / Prepping",[13,29,30],{},"I think I'll share some Survival / Bushcraft skills with you and maybe make some tutorials. Maybe I'll also show some pictures of my equipment an speak about my experience with it.",[17,32,34],{"id":33},"making-music","Making Music",[13,36,37],{},"You know / or you don't, I'm a musician so of corse I planed to write about making music.",{"title":39,"searchDepth":40,"depth":40,"links":41},"",2,[42,43,44],{"id":19,"depth":40,"text":20},{"id":26,"depth":40,"text":27},{"id":33,"depth":40,"text":34},[46],"general","2017-12-12 23:15:00 +0200","I'm back",false,null,"md",{"htmlAttrs":53,"link":55,"meta":60},{"lang":54},"en",[56],{"rel":57,"type":58,"href":59},"icon","mange/x-icon","/favicon.ico",[61,63,66,69,72,74,77,80,82,84,87],{"name":62,"content":5},"keywords",{"name":64,"content":65},"robots","index, follow",{"name":67,"content":68},"author","Melchior Kannengießer",{"name":70,"content":71},"og:title","mjk @ web - update",{"name":73,"content":48},"og:description",{"name":75,"content":76},"og:image","/logo_518x270.png",{"name":78,"content":79},"og:url","http://www.mjkweb.de",{"name":81,"content":71},"twitter:title",{"name":83,"content":48},"twitter:description",{"name":85,"content":86},"twitter:image","/logo_200x200.png",{"name":88,"content":89},"twitter:card","summary",{"excerpt_separator":91},"\u003C!-- EXCERPT_END -->",true,"/blog/2017/update",{"title":5,"description":48},"blog/2017/update",[5],"YfQo62wQFk9UpdcS74YNTALmoYljpyzpzgiwzSgVa24",1775492953065] \ No newline at end of file diff --git a/blog/2017/update/index.html b/blog/2017/update/index.html new file mode 100644 index 0000000..f8d8679 --- /dev/null +++ b/blog/2017/update/index.html @@ -0,0 +1 @@ +update

update

It's been a long time since I posted anything here. Nothing happened since 2014! That should change now. I'll integrate tags in the near future and continue to post this and that, but focus on some highlights. Well, and hopefully I'll add the social media links soon. ;-)

Webdevelopment

Speaking about several technologies, some Ideas I have for awesome projects in the future and Web Development in general. For more fun I’ll also add some basic syntax highlighting.

Bushcraft / Survival / Prepping

I think I'll share some Survival / Bushcraft skills with you and maybe make some tutorials. Maybe I'll also show some pictures of my equipment an speak about my experience with it.

Making Music

You know / or you don't, I'm a musician so of corse I planed to write about making music.

© by Melchior Jascha Kannengießer
\ No newline at end of file diff --git a/blog/2018/peace-dc-at-ujz-korn/_payload.json b/blog/2018/peace-dc-at-ujz-korn/_payload.json new file mode 100644 index 0000000..9497310 --- /dev/null +++ b/blog/2018/peace-dc-at-ujz-korn/_payload.json @@ -0,0 +1 @@ +[{"data":1,"prerenderedAt":100},["ShallowReactive",2],{"blog-/blog/2018/peace-dc-at-ujz-korn":3},{"id":4,"title":5,"body":6,"categories":41,"date":43,"description":5,"draft":44,"excerpt":45,"extension":46,"head":47,"meta":86,"navigation":88,"path":89,"seo":90,"stem":91,"tags":92,"__hash__":99},"blog/blog/2018/peace-dc-at-ujz-korn.md","PeaceDC @ UJZ Korn",{"type":7,"value":8,"toc":37},"minimark",[9,13,17,27,30],[10,11,5],"h1",{"id":12},"peacedc-ujz-korn",[14,15,16],"p",{},"Peace Development Crew // S.P. Music - Live Konzert + Party",[14,18,19,20],{},"concerts mixed by ",[21,22,26],"a",{"href":23,"rel":24},"http://www.ras-or.com",[25],"nofollow","ras 'or",[14,28,29],{},"Friday, March 23 21:00 - 6:00",[14,31,32],{},[21,33,36],{"href":34,"rel":35},"https://www.facebook.com/events/420536301711136/",[25],"more info",{"title":38,"searchDepth":39,"depth":39,"links":40},"",2,[],[42],"concerts","2018-03-11",false,null,"md",{"htmlAttrs":48,"link":50,"meta":55},{"lang":49},"en",[51],{"rel":52,"type":53,"href":54},"icon","mange/x-icon","/favicon.ico",[56,59,62,65,68,70,73,76,78,80,83],{"name":57,"content":58},"keywords","concert, Peace DC, peacedevelopmentcrew, ras-or, Live, UJZ Korn",{"name":60,"content":61},"robots","index, follow",{"name":63,"content":64},"author","Melchior Kannengießer",{"name":66,"content":67},"og:title","mjk @ web - Peace DC Concert",{"name":69,"content":5},"og:description",{"name":71,"content":72},"og:image","/logo_518x270.png",{"name":74,"content":75},"og:url","http://www.mjkweb.de",{"name":77,"content":67},"twitter:title",{"name":79,"content":5},"twitter:description",{"name":81,"content":82},"twitter:image","/logo_200x200.png",{"name":84,"content":85},"twitter:card","summary",{"excerpt_separator":87},"\u003C!--more-->",true,"/blog/2018/peace-dc-at-ujz-korn",{"title":5,"description":5},"blog/2018/peace-dc-at-ujz-korn",[93,94,95,96,97,98],"PeaceDC","peacedevelopmentcrew","ras-or","Live","concert","UJZ Korn","gyosAv53jgtekUoG1unNyNfJG1NbktpZ_ldtUgWLQGw",1775492953064] \ No newline at end of file diff --git a/blog/2018/peace-dc-at-ujz-korn/index.html b/blog/2018/peace-dc-at-ujz-korn/index.html new file mode 100644 index 0000000..e54f251 --- /dev/null +++ b/blog/2018/peace-dc-at-ujz-korn/index.html @@ -0,0 +1 @@ +PeaceDC @ UJZ Korn

PeaceDC @ UJZ Korn

Peace Development Crew // S.P. Music - Live Konzert + Party

concerts mixed by ras 'or

Friday, March 23 21:00 - 6:00

more info

© by Melchior Jascha Kannengießer
\ No newline at end of file diff --git a/blog/2023/react-navbar/_payload.json b/blog/2023/react-navbar/_payload.json new file mode 100644 index 0000000..769523f --- /dev/null +++ b/blog/2023/react-navbar/_payload.json @@ -0,0 +1 @@ +[{"data":1,"prerenderedAt":322},["ShallowReactive",2],{"blog-/blog/2023/react-navbar":3},{"id":4,"title":5,"body":6,"categories":267,"date":269,"description":270,"draft":271,"excerpt":272,"extension":273,"head":274,"meta":313,"navigation":88,"path":315,"seo":316,"stem":317,"tags":318,"__hash__":321},"blog/blog/2023/react-navbar.md","react-navbar",{"type":7,"value":8,"toc":258},"minimark",[9,12,20,23,26,31,34,37,40,44,47,64,67,102,105,110,113,121,124,127,130,133,136,139,142,145,149,152,155,158,161,168,171,180,189,192,201,205,208,217,221,224,231,240,254],[10,11,5],"h1",{"id":5},[13,14,15,16,19],"p",{},"Well, I know it's been a wile that i write something.",[17,18],"br",{},"\nI want to change that and I think this is the perfect topic to write an post about.",[13,21,22],{},"I actually intended to program a react-native app. Then I thought it wouldn't hurt to refresh my knowledge about react-js before I get into react-native.",[13,24,25],{},"And this is where the story begins.",[27,28,30],"h2",{"id":29},"practice-reactjs","practice reactjs",[13,32,33],{},"First of all I had to decide what I want to do. I didn't want to code a todo list for the umpteenth time, but something useful. Some time ago I discovered GatsbyJS and played around with it. I realy like Jekyll but I also like the concept behind ReactJS. So I decided to code a reactjs-component which I can reuse in other projects.",[13,35,36],{},"Speaking of Jekyll I really love the header. I love that it's \"really\" responsive and the fact the links disappear if its on a screen with under a given value an the burger icon/button appears where I can toggle the navigation. Except for a minor issue. But I'll come to this later. I want to rebuild this Navbar/header thing as an reactjs-component, make it generic and dynamical as hell and distribute it to npm later on.",[13,38,39],{},"I started a new React-Project and added some dummy contend. The I added a new Component, named it Navbar but i still had no idea how to isolate them and deploy them to npm. how can i get rid of this dummy-code? How can I get rid of the install and configuration overhead? Well, there is a solution called create-react-library.",[41,42,43],"h3",{"id":43},"create-react-library",[13,45,46],{},"create-react-library is an awesome cli to create an react component library from scratch without anny configuration. If your npm version is up to date, you can even use it without installing it by simply running it with npx like this.:",[48,49,54],"pre",{"className":50,"code":51,"language":52,"meta":53,"style":53},"language-console shiki shiki-themes material-theme","npx create-react-library myAwesomeLibraryName\n","console","",[55,56,57],"code",{"__ignoreMap":53},[58,59,62],"span",{"class":60,"line":61},"line",1,[58,63,51],{},[13,65,66],{},"Then we get some instructions to bring our component to life.",[48,68,70],{"className":50,"code":69,"language":52,"meta":53,"style":53},"To get started, in one tab, run:\n$ cd myAwesomeLibraryName && npm start\n\nAnd in another tab, run the create-react-app dev server:\n$ cd myAwesomeLibraryName/example && npm start\n",[55,71,72,77,83,90,96],{"__ignoreMap":53},[58,73,74],{"class":60,"line":61},[58,75,76],{},"To get started, in one tab, run:\n",[58,78,80],{"class":60,"line":79},2,[58,81,82],{},"$ cd myAwesomeLibraryName && npm start\n",[58,84,86],{"class":60,"line":85},3,[58,87,89],{"emptyLinePlaceholder":88},true,"\n",[58,91,93],{"class":60,"line":92},4,[58,94,95],{},"And in another tab, run the create-react-app dev server:\n",[58,97,99],{"class":60,"line":98},5,[58,100,101],{},"$ cd myAwesomeLibraryName/example && npm start\n",[13,103,104],{},"This is awesome!!! We already have an existing component which is even used in an create-react-app example.",[106,107,109],"h4",{"id":108},"directory-structure","directory structure",[13,111,112],{},"Now let's have a quick look on the generated files.",[48,114,119],{"className":115,"code":117,"language":118,"meta":53},[116],"language-text",".\n├── dist\n│ ├── index.css\n│ ├── index.js\n│ ├── index.js.map\n│ ├── index.modern.js\n│ └── index.modern.js.map\n├── example\n│ ├── node_modules\n│ | ├── ...\n| │ └── ...\n│ ├── public\n│ | ├── favicon.ico\n│ | ├── index.html\n| │ └── manifest.json\n│ ├── src\n│ | ├── App.js\n│ | ├── App.test.js\n│ | ├── index.css\n| │ └── index.js\n│ ├── package.json\n│ ├── package-lock.json\n│ └── README.md\n├── node_modules\n│ ├── ...\n│ └── ...\n├── src\n│ ├── .eslintrc\n│ ├── index.js\n│ ├── index.test.js\n│ └── styles.module.css\n├── .editorconfig\n├── .eslintignore\n├── .eslintrc\n├── .gitignore\n├── .prettierrc\n├── .travis.yml\n├── package.json\n├── package-lock.json\n└── README.md\n","text",[55,120,117],{"__ignoreMap":53},[106,122,123],{"id":123},"dist",[13,125,126],{},"This is where the magic happens. Our library will be built into this directory.",[106,128,129],{"id":129},"example",[13,131,132],{},"In this directory lives the sample app that uses our component.",[106,134,135],{"id":135},"node_modules",[13,137,138],{},"this is the Directory where npm stores the dependencies of our component",[106,140,141],{"id":141},"src",[13,143,144],{},"This is where the fun happened. Here we code our component library which will be built later in dist.",[41,146,148],{"id":147},"keep-it-simple","keep it simple",[13,150,151],{},"I have many ideas of features I could implement in to this library but I think in the end this is realy timeconsuming and I shoud keep it simple. At leased for now. The goal is to just refresh my react skills, lern how to create and shere a npm package and then move on to the next project.",[13,153,154],{},"Sure, I want to rebuild this jekyll Navbar/header thing width the burger icon/button as an reactjs-component but for now let's keep it simple and add this stuff later on.",[13,156,157],{},"So I add a simple horizontal Navbar.",[41,159,160],{"id":160},"link",[13,162,163,164,167],{},"We have this example ",[55,165,166],{},"create-react-app"," app in the example directory where we can check out our new component. But if we would like to us it in an other project, before we publish it to npm, we have to link it, so we can use it there.",[13,169,170],{},"insight myAwesomeLibraryName",[48,172,174],{"className":50,"code":173,"language":52,"meta":53,"style":53},"npm link\n",[55,175,176],{"__ignoreMap":53},[58,177,178],{"class":60,"line":61},[58,179,173],{},[48,181,183],{"className":50,"code":182,"language":52,"meta":53,"style":53},"npm unlink\n",[55,184,185],{"__ignoreMap":53},[58,186,187],{"class":60,"line":61},[58,188,182],{},[13,190,191],{},"insight another project",[48,193,195],{"className":50,"code":194,"language":52,"meta":53,"style":53},"npm link myAwesomeLibraryName\n",[55,196,197],{"__ignoreMap":53},[58,198,199],{"class":60,"line":61},[58,200,194],{},[27,202,204],{"id":203},"distribute-to-npm","distribute to npm",[13,206,207],{},"first create npm account and werifi email\nthen",[48,209,211],{"className":50,"code":210,"language":52,"meta":53,"style":53},"npm adduser\n",[55,212,213],{"__ignoreMap":53},[58,214,215],{"class":60,"line":61},[58,216,210],{},[27,218,220],{"id":219},"next-steps","next steps",[13,222,223],{},"this are just some notes to complete this post lateron",[225,226,227],"ul",{},[228,229,230],"li",{},"use prop-types",[48,232,234],{"className":50,"code":233,"language":52,"meta":53,"style":53},"npm install --save prop-types\n",[55,235,236],{"__ignoreMap":53},[58,237,238],{"class":60,"line":61},[58,239,233],{},[225,241,242,245,248,251],{},[228,243,244],{},"use link",[228,246,247],{},"use sass",[228,249,250],{},"add the burger icon/button stuff",[228,252,253],{},"calculate the width of the lins to prevent uggly design issues",[255,256,257],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":53,"searchDepth":79,"depth":79,"links":259},[260,265,266],{"id":29,"depth":79,"text":30,"children":261},[262,263,264],{"id":43,"depth":85,"text":43},{"id":147,"depth":85,"text":148},{"id":160,"depth":85,"text":160},{"id":203,"depth":79,"text":204},{"id":219,"depth":79,"text":220},[268],"programming","2023-02-12","creating a react-navbar npm package",false,null,"md",{"htmlAttrs":275,"link":277,"meta":282},{"lang":276},"en",[278],{"rel":279,"type":280,"href":281},"icon","mange/x-icon","/favicon.ico",[283,286,289,292,295,297,300,303,305,307,310],{"name":284,"content":285},"keywords","coding, programming, react",{"name":287,"content":288},"robots","index, follow",{"name":290,"content":291},"author","Melchior Kannengießer",{"name":293,"content":294},"og:title","mjk @ web - x",{"name":296,"content":270},"og:description",{"name":298,"content":299},"og:image","/logo_518x270.png",{"name":301,"content":302},"og:url","http://www.mjkweb.de",{"name":304,"content":294},"twitter:title",{"name":306,"content":270},"twitter:description",{"name":308,"content":309},"twitter:image","/logo_200x200.png",{"name":311,"content":312},"twitter:card","summary",{"excerpt_separator":314},"\u003C!-- EXCERPT_END -->","/blog/2023/react-navbar",{"title":5,"description":270},"blog/2023/react-navbar",[319,268,320],"coding","react","0k6LifMFMCtdA3AUr4UnLGyR0LUe04vx-NN-PStyA7s",1775492953064] \ No newline at end of file diff --git a/blog/2023/react-navbar/index.html b/blog/2023/react-navbar/index.html new file mode 100644 index 0000000..9c29232 --- /dev/null +++ b/blog/2023/react-navbar/index.html @@ -0,0 +1,54 @@ +react-navbar

react-navbar

Well, I know it's been a wile that i write something.
+I want to change that and I think this is the perfect topic to write an post about.

I actually intended to program a react-native app. Then I thought it wouldn't hurt to refresh my knowledge about react-js before I get into react-native.

And this is where the story begins.

practice reactjs

First of all I had to decide what I want to do. I didn't want to code a todo list for the umpteenth time, but something useful. Some time ago I discovered GatsbyJS and played around with it. I realy like Jekyll but I also like the concept behind ReactJS. So I decided to code a reactjs-component which I can reuse in other projects.

Speaking of Jekyll I really love the header. I love that it's "really" responsive and the fact the links disappear if its on a screen with under a given value an the burger icon/button appears where I can toggle the navigation. Except for a minor issue. But I'll come to this later. I want to rebuild this Navbar/header thing as an reactjs-component, make it generic and dynamical as hell and distribute it to npm later on.

I started a new React-Project and added some dummy contend. The I added a new Component, named it Navbar but i still had no idea how to isolate them and deploy them to npm. how can i get rid of this dummy-code? How can I get rid of the install and configuration overhead? Well, there is a solution called create-react-library.

create-react-library

create-react-library is an awesome cli to create an react component library from scratch without anny configuration. If your npm version is up to date, you can even use it without installing it by simply running it with npx like this.:

npx create-react-library myAwesomeLibraryName
+

Then we get some instructions to bring our component to life.

To get started, in one tab, run:
+$ cd myAwesomeLibraryName && npm start
+
+And in another tab, run the create-react-app dev server:
+$ cd myAwesomeLibraryName/example && npm start
+

This is awesome!!! We already have an existing component which is even used in an create-react-app example.

directory structure

Now let's have a quick look on the generated files.

.
+├── dist
+│   ├── index.css
+│   ├── index.js
+│   ├── index.js.map
+│   ├── index.modern.js
+│   └── index.modern.js.map
+├── example
+│   ├── node_modules
+│   |   ├── ...
+|   │   └── ...
+│   ├── public
+│   |   ├── favicon.ico
+│   |   ├── index.html
+|   │   └── manifest.json
+│   ├── src
+│   |   ├── App.js
+│   |   ├── App.test.js
+│   |   ├── index.css
+|   │   └── index.js
+│   ├── package.json
+│   ├── package-lock.json
+│   └── README.md
+├── node_modules
+│   ├── ...
+│   └── ...
+├── src
+│   ├── .eslintrc
+│   ├── index.js
+│   ├── index.test.js
+│   └── styles.module.css
+├── .editorconfig
+├── .eslintignore
+├── .eslintrc
+├── .gitignore
+├── .prettierrc
+├── .travis.yml
+├── package.json
+├── package-lock.json
+└── README.md
+

dist

This is where the magic happens. Our library will be built into this directory.

example

In this directory lives the sample app that uses our component.

node_modules

this is the Directory where npm stores the dependencies of our component

src

This is where the fun happened. Here we code our component library which will be built later in dist.

keep it simple

I have many ideas of features I could implement in to this library but I think in the end this is realy timeconsuming and I shoud keep it simple. At leased for now. The goal is to just refresh my react skills, lern how to create and shere a npm package and then move on to the next project.

Sure, I want to rebuild this jekyll Navbar/header thing width the burger icon/button as an reactjs-component but for now let's keep it simple and add this stuff later on.

So I add a simple horizontal Navbar.

We have this example create-react-app app in the example directory where we can check out our new component. But if we would like to us it in an other project, before we publish it to npm, we have to link it, so we can use it there.

insight myAwesomeLibraryName

npm link
+
npm unlink
+

insight another project

npm link myAwesomeLibraryName
+

distribute to npm

first create npm account and werifi email +then

npm adduser
+

next steps

this are just some notes to complete this post lateron

  • use prop-types
npm install --save prop-types
+
  • use link
  • use sass
  • add the burger icon/button stuff
  • calculate the width of the lins to prevent uggly design issues
© by Melchior Jascha Kannengießer
\ No newline at end of file diff --git a/blog/2024/switch-from-jekyll-to-nuxt/_payload.json b/blog/2024/switch-from-jekyll-to-nuxt/_payload.json new file mode 100644 index 0000000..3979da4 --- /dev/null +++ b/blog/2024/switch-from-jekyll-to-nuxt/_payload.json @@ -0,0 +1 @@ +[{"data":1,"prerenderedAt":8137},["ShallowReactive",2],{"blog-/blog/2024/switch-from-jekyll-to-nuxt":3},{"id":4,"title":5,"body":6,"categories":8081,"date":8083,"description":8084,"draft":8085,"excerpt":8086,"extension":8087,"head":8088,"meta":8127,"navigation":185,"path":8129,"seo":8130,"stem":8131,"tags":8132,"__hash__":8136},"blog/blog/2024/switch-from-jekyll-to-nuxt.md","Switch from Jekyll to Nuxt",{"type":7,"value":8,"toc":8067},"minimark",[9,13,17,20,23,28,31,34,51,54,58,61,68,284,289,331,336,378,383,425,430,472,479,3197,3200,3208,3223,3227,3244,3248,3713,3717,5302,5306,5726,5730,5733,5736,5745,5748,5801,5816,5827,5835,5881,5885,5888,5897,5900,5962,5965,5968,5977,5984,6032,6049,6053,6056,6066,6070,6136,6151,6155,6158,6198,6201,6211,6214,6255,6258,6508,6511,7124,7127,7615,7618,7629,7633,7637,7640,7643,7649,7652,7655,7671,7674,7684,8041,8044,8048,8064],[10,11,5],"h1",{"id":12},"switch-from-jekyll-to-nuxt",[14,15,16],"p",{},"I haven't use ruby for a while but more and more js/ts (especially vue) so i decided to switch from jekyll to nuxt, as I also like the benefits of autoloading components and server-side rendering with Nuxt.",[14,18,19],{},"Also, in Nuxt, using NuxtContent, like in jekyll, I can save my content as markdown, which is then converted to html.",[14,21,22],{},"so the journey begins",[24,25,27],"h2",{"id":26},"initializing-a-new-nuxt-project","initializing a new nuxt project",[14,29,30],{},"initializing a new nuxt project is very easy.",[14,32,33],{},"just run",[35,36,41],"pre",{"className":37,"code":38,"language":39,"meta":40,"style":40},"language-console shiki shiki-themes material-theme","npx nuxi@latest init \u003Cproject-name>\n","console","",[42,43,44],"code",{"__ignoreMap":40},[45,46,49],"span",{"class":47,"line":48},"line",1,[45,50,38],{},[14,52,53],{},"Then you will be asked on the console to select a package manager (I use npm) and you will be asked whether you want to initialize a git repo right away. That's it.",[24,55,57],{"id":56},"dummy-content-layout","Dummy Content & Layout",[14,59,60],{},"I created the pages folder and saved some files with dummy content there. It should only help to adopt the design. Later we will use NuxtContent. Then we just need to copy the Markdown files from the Jekyll project. I also already replaced Nuxt's favicon with my own.",[62,63,64],"ul",{},[65,66,67],"li",{},"about.vue",[35,69,73],{"className":70,"code":71,"language":72,"meta":40,"style":40},"language-vue shiki shiki-themes material-theme","\u003Ctemplate>\n \u003Carticle class=\"post\">\n \u003Cheader class=\"post-header\">\n \u003Ch1 class=\"post-title\">About\u003C/h1>\n \u003C/header>\n\n \u003Cdiv class=\"post-content\">\n \u003Ch1 id=\"about-this-blog\">About this blog\u003C/h1>\n \u003Cp>Hello, my name is Melchior. In the past I posted various things on this blog, but decided to focus more on technical post. However, this does not mean that there is not something else to read here. I have also decided to write my posts in English in the future. Have fun reading my posts. They may also be useful for one or the other, even if I am now primarily writing them for myself in order to deepen topics.\u003C/p>\n \u003C/div>\n \u003C/article>\n\u003C/template>\n","vue",[42,74,75,88,115,137,170,180,187,208,238,256,265,275],{"__ignoreMap":40},[45,76,77,81,85],{"class":47,"line":48},[45,78,80],{"class":79},"sAklC","\u003C",[45,82,84],{"class":83},"s-wAU","template",[45,86,87],{"class":79},">\n",[45,89,91,94,97,101,104,107,111,113],{"class":47,"line":90},2,[45,92,93],{"class":79}," \u003C",[45,95,96],{"class":83},"article",[45,98,100],{"class":99},"sJ14y"," class",[45,102,103],{"class":79},"=",[45,105,106],{"class":79},"\"",[45,108,110],{"class":109},"sfyAc","post",[45,112,106],{"class":79},[45,114,87],{"class":79},[45,116,118,121,124,126,128,130,133,135],{"class":47,"line":117},3,[45,119,120],{"class":79}," \u003C",[45,122,123],{"class":83},"header",[45,125,100],{"class":99},[45,127,103],{"class":79},[45,129,106],{"class":79},[45,131,132],{"class":109},"post-header",[45,134,106],{"class":79},[45,136,87],{"class":79},[45,138,140,143,145,147,149,151,154,156,159,163,166,168],{"class":47,"line":139},4,[45,141,142],{"class":79}," \u003C",[45,144,10],{"class":83},[45,146,100],{"class":99},[45,148,103],{"class":79},[45,150,106],{"class":79},[45,152,153],{"class":109},"post-title",[45,155,106],{"class":79},[45,157,158],{"class":79},">",[45,160,162],{"class":161},"svy0-","About",[45,164,165],{"class":79},"\u003C/",[45,167,10],{"class":83},[45,169,87],{"class":79},[45,171,173,176,178],{"class":47,"line":172},5,[45,174,175],{"class":79}," \u003C/",[45,177,123],{"class":83},[45,179,87],{"class":79},[45,181,183],{"class":47,"line":182},6,[45,184,186],{"emptyLinePlaceholder":185},true,"\n",[45,188,190,192,195,197,199,201,204,206],{"class":47,"line":189},7,[45,191,120],{"class":79},[45,193,194],{"class":83},"div",[45,196,100],{"class":99},[45,198,103],{"class":79},[45,200,106],{"class":79},[45,202,203],{"class":109},"post-content",[45,205,106],{"class":79},[45,207,87],{"class":79},[45,209,211,213,215,218,220,222,225,227,229,232,234,236],{"class":47,"line":210},8,[45,212,142],{"class":79},[45,214,10],{"class":83},[45,216,217],{"class":99}," id",[45,219,103],{"class":79},[45,221,106],{"class":79},[45,223,224],{"class":109},"about-this-blog",[45,226,106],{"class":79},[45,228,158],{"class":79},[45,230,231],{"class":161},"About this blog",[45,233,165],{"class":79},[45,235,10],{"class":83},[45,237,87],{"class":79},[45,239,241,243,245,247,250,252,254],{"class":47,"line":240},9,[45,242,142],{"class":79},[45,244,14],{"class":83},[45,246,158],{"class":79},[45,248,249],{"class":161},"Hello, my name is Melchior. In the past I posted various things on this blog, but decided to focus more on technical post. However, this does not mean that there is not something else to read here. I have also decided to write my posts in English in the future. Have fun reading my posts. They may also be useful for one or the other, even if I am now primarily writing them for myself in order to deepen topics.",[45,251,165],{"class":79},[45,253,14],{"class":83},[45,255,87],{"class":79},[45,257,259,261,263],{"class":47,"line":258},10,[45,260,175],{"class":79},[45,262,194],{"class":83},[45,264,87],{"class":79},[45,266,268,271,273],{"class":47,"line":267},11,[45,269,270],{"class":79}," \u003C/",[45,272,96],{"class":83},[45,274,87],{"class":79},[45,276,278,280,282],{"class":47,"line":277},12,[45,279,165],{"class":79},[45,281,84],{"class":83},[45,283,87],{"class":79},[62,285,286],{},[65,287,288],{},"datenschutzerklaerung.vue",[35,290,292],{"className":70,"code":291,"language":72,"meta":40,"style":40},"\u003Ctemplate>\n \u003Cdiv>\n datenschutzerklaerung\n \u003C/div>\n\u003C/template>\n",[42,293,294,302,310,315,323],{"__ignoreMap":40},[45,295,296,298,300],{"class":47,"line":48},[45,297,80],{"class":79},[45,299,84],{"class":83},[45,301,87],{"class":79},[45,303,304,306,308],{"class":47,"line":90},[45,305,93],{"class":79},[45,307,194],{"class":83},[45,309,87],{"class":79},[45,311,312],{"class":47,"line":117},[45,313,314],{"class":161}," datenschutzerklaerung\n",[45,316,317,319,321],{"class":47,"line":139},[45,318,270],{"class":79},[45,320,194],{"class":83},[45,322,87],{"class":79},[45,324,325,327,329],{"class":47,"line":172},[45,326,165],{"class":79},[45,328,84],{"class":83},[45,330,87],{"class":79},[62,332,333],{},[65,334,335],{},"impressum.vue",[35,337,339],{"className":70,"code":338,"language":72,"meta":40,"style":40},"\u003Ctemplate>\n \u003Cdiv>\n impressum\n \u003C/div>\n\u003C/template>\n",[42,340,341,349,357,362,370],{"__ignoreMap":40},[45,342,343,345,347],{"class":47,"line":48},[45,344,80],{"class":79},[45,346,84],{"class":83},[45,348,87],{"class":79},[45,350,351,353,355],{"class":47,"line":90},[45,352,93],{"class":79},[45,354,194],{"class":83},[45,356,87],{"class":79},[45,358,359],{"class":47,"line":117},[45,360,361],{"class":161}," impressum\n",[45,363,364,366,368],{"class":47,"line":139},[45,365,270],{"class":79},[45,367,194],{"class":83},[45,369,87],{"class":79},[45,371,372,374,376],{"class":47,"line":172},[45,373,165],{"class":79},[45,375,84],{"class":83},[45,377,87],{"class":79},[62,379,380],{},[65,381,382],{},"index.vue",[35,384,386],{"className":70,"code":385,"language":72,"meta":40,"style":40},"\u003Ctemplate>\n \u003Cdiv>\n home\n \u003C/div>\n\u003C/template>\n",[42,387,388,396,404,409,417],{"__ignoreMap":40},[45,389,390,392,394],{"class":47,"line":48},[45,391,80],{"class":79},[45,393,84],{"class":83},[45,395,87],{"class":79},[45,397,398,400,402],{"class":47,"line":90},[45,399,93],{"class":79},[45,401,194],{"class":83},[45,403,87],{"class":79},[45,405,406],{"class":47,"line":117},[45,407,408],{"class":161}," home\n",[45,410,411,413,415],{"class":47,"line":139},[45,412,270],{"class":79},[45,414,194],{"class":83},[45,416,87],{"class":79},[45,418,419,421,423],{"class":47,"line":172},[45,420,165],{"class":79},[45,422,84],{"class":83},[45,424,87],{"class":79},[62,426,427],{},[65,428,429],{},"links.vue",[35,431,433],{"className":70,"code":432,"language":72,"meta":40,"style":40},"\u003Ctemplate>\n \u003Cdiv>\n links\n \u003C/div>\n\u003C/template>\n",[42,434,435,443,451,456,464],{"__ignoreMap":40},[45,436,437,439,441],{"class":47,"line":48},[45,438,80],{"class":79},[45,440,84],{"class":83},[45,442,87],{"class":79},[45,444,445,447,449],{"class":47,"line":90},[45,446,93],{"class":79},[45,448,194],{"class":83},[45,450,87],{"class":79},[45,452,453],{"class":47,"line":117},[45,454,455],{"class":161}," links\n",[45,457,458,460,462],{"class":47,"line":139},[45,459,270],{"class":79},[45,461,194],{"class":83},[45,463,87],{"class":79},[45,465,466,468,470],{"class":47,"line":172},[45,467,165],{"class":79},[45,469,84],{"class":83},[45,471,87],{"class":79},[14,473,474,475,478],{},"then I created the layout in the ",[42,476,477],{},"app.vue","-file and transferred the design with a few small changes. What I changed, for example, is that this time I wanted to have a mobile-first design, which can also serve as a fallback for larger screens if things aren't supported there.",[35,480,482],{"className":70,"code":481,"language":72,"meta":40,"style":40},"\u003Ctemplate>\n \u003Cdiv class=\"pageWrapper\">\n \u003Cheader class=\"pageHeader\">\n \u003Cdiv class=\"branding\">\n \u003CNuxtLink to=\"/\" class=\"logo\">mjk @ web\u003C/NuxtLink>\n \u003C/div>\n \u003C!-- Navigation -->\n \u003Cnav :class=\"{ active: isMenuOpen }\">\n \u003Cul class=\"mainNav\">\n \u003Cli>\u003CNuxtLink to=\"/about\" @click=\"hideMenu\">About\u003C/NuxtLink>\u003C/li>\n \u003Cli>\u003CNuxtLink to=\"/links\" @click=\"hideMenu\">Links\u003C/NuxtLink>\u003C/li>\n \u003Cli>\u003CNuxtLink to=\"/datenschutzerklaerung\" @click=\"hideMenu\">Datenschutz-Erklärung\u003C/NuxtLink>\u003C/li>\n \u003Cli>\u003CNuxtLink to=\"/impressum\" @click=\"hideMenu\">Impressum\u003C/NuxtLink>\u003C/li>\n \u003C/ul>\n \u003C/nav>\n \u003C!-- Hamburger Menu -->\n \u003Cdiv class=\"hamburgerMenu\" @click=\"toggleMenu\">\n \u003Cspan>\u003C/span>\n \u003Cspan>\u003C/span>\n \u003Cspan>\u003C/span>\n \u003C/div>\n \u003C/header>\n \u003Cdiv class=\"pageContent\">\n \u003CNuxtPage />\n \u003C/div>\n \u003Cfooter>footer\u003C/footer>\n \u003C/div>\n\u003C/template>\n\n\u003Cscript>\nexport default {\n data() {\n return {\n isMenuOpen: false,\n };\n },\n methods: {\n toggleMenu() {\n this.isMenuOpen = !this.isMenuOpen;\n },\n\n hideMenu() {\n this.isMenuOpen = false;\n },\n },\n};\n\u003C/script>\n\n\u003Cstyle>\n/* Mobile-First Design */\n\n/* Basic-Styling for mobile Devices */\nbody {\n background-color: #213c5b;\n margin: 0;\n font-family: Arial, sans-serif;\n}\n.pageWrapper {\n display: flex;\n flex-direction: column;\n min-height: 100vh;\n max-width: 1024px;\n margin-right: auto;\n margin-left: auto;\n}\n.pageHeader {\n color: black;\n min-height: 56px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding-left: 1rem;\n padding-right: 1rem;\n background: #1e6695;\n background: -moz-linear-gradient(top, #1e6695 0%, #74aacc 33%, #79aecb 66%, #2f4a66 100%);\n background: -webkit-linear-gradient(top, #1e6695 0%, #74aacc 33%, #79aecb 66%, #2f4a66 100%);\n background: linear-gradient(to bottom, #1e6695 0%, #74aacc 33%, #79aecb 66%, #2f4a66 100%);\n filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#1e6695', endColorstr='#2f4a66',GradientType=0 );\n}\n\n/* Branding */\n.branding .logo {\n font-size: 1.5rem;\n text-decoration: none;\n color: black;\n}\n\n/* Navigation */\nnav {\n display: none;\n}\n.mainNav {\n display: flex;\n flex-direction: column;\n gap: 1rem;\n list-style: none;\n margin: 0;\n padding: 1rem;\n background-color: #819cbb;\n border-radius: 0.5rem;\n box-shadow: 0 4px 6px rgba(0, 0, 0, 0.3);\n}\n.mainNav li a {\n text-decoration: none;\n color: black;\n transition: color 0.3s;\n}\n\n/* Hamburger Menu */\n.hamburgerMenu {\n display: flex;\n flex-direction: column;\n gap: 0.3rem;\n cursor: pointer;\n}\n.hamburgerMenu span {\n width: 25px;\n height: 3px;\n background-color: black;\n}\n\n/* Aktives Menü (für Mobile) */\nnav.active {\n display: block;\n}\n\n.pageContent {\n background-color: #415c7b;\n padding: 15px;\n}\n\n.pageContent article {\n border: 1px solid #000;\n border-radius: 10px;\n background-color: #819cbb;\n padding: 15px;\n}\n\nfooter {\n height: 38px;\n line-height: 38px;\n text-align: center;\n background: #415c7b;\n background: -moz-linear-gradient(top, #415c7b 0%, #273749 100%);\n background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #415c7b), color-stop(100%, #273749));\n background: -webkit-linear-gradient(top, #415c7b 0%, #273749 100%);\n background: -o-linear-gradient(top, #415c7b 0%, #273749 100%);\n background: -ms-linear-gradient(top, #415c7b 0%, #273749 100%);\n background: linear-gradient(to bottom, #415c7b 0%, #273749 100%);\n filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#415c7b', endColorstr='#273749',GradientType=0 );\n border-bottom: 1px solid black;\n}\n\n@media (max-width: 599px) {\n .mainNav li:hover {\n background-color: #7E99B8;\n }\n nav.active {\n position: absolute;\n top: 46px; /* Direkt unter der Header-Höhe */\n right: 16px;\n width: 200px;\n z-index: 10;\n }\n}\n\n/* Media Queries für größere Bildschirme */\n@media (min-width: 600px) {\n .mainNav {\n flex-direction: row;\n justify-content: center;\n background: none;\n padding: 0;\n box-shadow: none;\n }\n nav {\n display: flex;\n }\n .hamburgerMenu {\n display: none;\n }\n}\n\n@media (min-width: 1024px) {\n .pageHeader {\n margin-top: 10px;\n -webkit-border-radius: 20px 20px 0 0;\n border-radius: 20px 20px 0 0;\n border: 1px solid black;\n border-bottom: 0px;\n }\n .pageContent {\n border-left: solid 1px black;\n border-right: solid 1px black;\n }\n footer {\n -webkit-border-radius: 0 0 20px 20px;\n border-radius: 0 0 20px 20px;\n border: 1px solid black;\n border-top: 0px;\n }\n}\n\u003C/style>\n",[42,483,484,492,511,530,549,591,600,606,627,646,696,742,788,835,845,854,860,891,904,917,930,939,948,968,979,988,1006,1015,1024,1029,1039,1052,1063,1071,1087,1093,1099,1109,1119,1139,1145,1150,1160,1173,1178,1183,1189,1198,1203,1213,1219,1224,1230,1239,1256,1270,1289,1295,1305,1318,1331,1344,1357,1370,1382,1387,1396,1409,1421,1432,1445,1458,1471,1483,1498,1558,1606,1656,1700,1705,1710,1716,1730,1743,1756,1767,1772,1777,1783,1790,1801,1806,1815,1826,1837,1849,1861,1872,1884,1898,1911,1949,1954,1969,1980,1991,2007,2012,2017,2023,2032,2043,2054,2066,2079,2084,2096,2109,2122,2133,2138,2143,2149,2161,2173,2178,2183,2192,2206,2218,2223,2228,2240,2262,2274,2287,2298,2303,2308,2315,2327,2339,2351,2364,2397,2456,2487,2519,2550,2581,2618,2633,2638,2643,2664,2681,2696,2702,2714,2727,2744,2757,2770,2783,2788,2793,2798,2804,2823,2832,2845,2857,2869,2881,2893,2898,2905,2917,2922,2931,2942,2947,2952,2957,2974,2983,2995,3014,3032,3046,3059,3064,3073,3090,3106,3111,3119,3136,3153,3166,3178,3183,3188],{"__ignoreMap":40},[45,485,486,488,490],{"class":47,"line":48},[45,487,80],{"class":79},[45,489,84],{"class":83},[45,491,87],{"class":79},[45,493,494,496,498,500,502,504,507,509],{"class":47,"line":90},[45,495,93],{"class":79},[45,497,194],{"class":83},[45,499,100],{"class":99},[45,501,103],{"class":79},[45,503,106],{"class":79},[45,505,506],{"class":109},"pageWrapper",[45,508,106],{"class":79},[45,510,87],{"class":79},[45,512,513,515,517,519,521,523,526,528],{"class":47,"line":117},[45,514,120],{"class":79},[45,516,123],{"class":83},[45,518,100],{"class":99},[45,520,103],{"class":79},[45,522,106],{"class":79},[45,524,525],{"class":109},"pageHeader",[45,527,106],{"class":79},[45,529,87],{"class":79},[45,531,532,534,536,538,540,542,545,547],{"class":47,"line":139},[45,533,142],{"class":79},[45,535,194],{"class":83},[45,537,100],{"class":99},[45,539,103],{"class":79},[45,541,106],{"class":79},[45,543,544],{"class":109},"branding",[45,546,106],{"class":79},[45,548,87],{"class":79},[45,550,551,554,557,560,562,564,567,569,571,573,575,578,580,582,585,587,589],{"class":47,"line":172},[45,552,553],{"class":79}," \u003C",[45,555,556],{"class":83},"NuxtLink",[45,558,559],{"class":99}," to",[45,561,103],{"class":79},[45,563,106],{"class":79},[45,565,566],{"class":109},"/",[45,568,106],{"class":79},[45,570,100],{"class":99},[45,572,103],{"class":79},[45,574,106],{"class":79},[45,576,577],{"class":109},"logo",[45,579,106],{"class":79},[45,581,158],{"class":79},[45,583,584],{"class":161},"mjk @ web",[45,586,165],{"class":79},[45,588,556],{"class":83},[45,590,87],{"class":79},[45,592,593,596,598],{"class":47,"line":182},[45,594,595],{"class":79}," \u003C/",[45,597,194],{"class":83},[45,599,87],{"class":79},[45,601,602],{"class":47,"line":189},[45,603,605],{"class":604},"s0_hs"," \u003C!-- Navigation -->\n",[45,607,608,610,613,616,618,620,623,625],{"class":47,"line":210},[45,609,142],{"class":79},[45,611,612],{"class":83},"nav",[45,614,615],{"class":99}," :class",[45,617,103],{"class":79},[45,619,106],{"class":79},[45,621,622],{"class":109},"{ active: isMenuOpen }",[45,624,106],{"class":79},[45,626,87],{"class":79},[45,628,629,631,633,635,637,639,642,644],{"class":47,"line":240},[45,630,553],{"class":79},[45,632,62],{"class":83},[45,634,100],{"class":99},[45,636,103],{"class":79},[45,638,106],{"class":79},[45,640,641],{"class":109},"mainNav",[45,643,106],{"class":79},[45,645,87],{"class":79},[45,647,648,651,653,656,658,660,662,664,667,669,672,674,676,679,681,683,685,687,689,692,694],{"class":47,"line":258},[45,649,650],{"class":79}," \u003C",[45,652,65],{"class":83},[45,654,655],{"class":79},">\u003C",[45,657,556],{"class":83},[45,659,559],{"class":99},[45,661,103],{"class":79},[45,663,106],{"class":79},[45,665,666],{"class":109},"/about",[45,668,106],{"class":79},[45,670,671],{"class":99}," @click",[45,673,103],{"class":79},[45,675,106],{"class":79},[45,677,678],{"class":109},"hideMenu",[45,680,106],{"class":79},[45,682,158],{"class":79},[45,684,162],{"class":161},[45,686,165],{"class":79},[45,688,556],{"class":83},[45,690,691],{"class":79},">\u003C/",[45,693,65],{"class":83},[45,695,87],{"class":79},[45,697,698,700,702,704,706,708,710,712,715,717,719,721,723,725,727,729,732,734,736,738,740],{"class":47,"line":267},[45,699,650],{"class":79},[45,701,65],{"class":83},[45,703,655],{"class":79},[45,705,556],{"class":83},[45,707,559],{"class":99},[45,709,103],{"class":79},[45,711,106],{"class":79},[45,713,714],{"class":109},"/links",[45,716,106],{"class":79},[45,718,671],{"class":99},[45,720,103],{"class":79},[45,722,106],{"class":79},[45,724,678],{"class":109},[45,726,106],{"class":79},[45,728,158],{"class":79},[45,730,731],{"class":161},"Links",[45,733,165],{"class":79},[45,735,556],{"class":83},[45,737,691],{"class":79},[45,739,65],{"class":83},[45,741,87],{"class":79},[45,743,744,746,748,750,752,754,756,758,761,763,765,767,769,771,773,775,778,780,782,784,786],{"class":47,"line":277},[45,745,650],{"class":79},[45,747,65],{"class":83},[45,749,655],{"class":79},[45,751,556],{"class":83},[45,753,559],{"class":99},[45,755,103],{"class":79},[45,757,106],{"class":79},[45,759,760],{"class":109},"/datenschutzerklaerung",[45,762,106],{"class":79},[45,764,671],{"class":99},[45,766,103],{"class":79},[45,768,106],{"class":79},[45,770,678],{"class":109},[45,772,106],{"class":79},[45,774,158],{"class":79},[45,776,777],{"class":161},"Datenschutz-Erklärung",[45,779,165],{"class":79},[45,781,556],{"class":83},[45,783,691],{"class":79},[45,785,65],{"class":83},[45,787,87],{"class":79},[45,789,791,793,795,797,799,801,803,805,808,810,812,814,816,818,820,822,825,827,829,831,833],{"class":47,"line":790},13,[45,792,650],{"class":79},[45,794,65],{"class":83},[45,796,655],{"class":79},[45,798,556],{"class":83},[45,800,559],{"class":99},[45,802,103],{"class":79},[45,804,106],{"class":79},[45,806,807],{"class":109},"/impressum",[45,809,106],{"class":79},[45,811,671],{"class":99},[45,813,103],{"class":79},[45,815,106],{"class":79},[45,817,678],{"class":109},[45,819,106],{"class":79},[45,821,158],{"class":79},[45,823,824],{"class":161},"Impressum",[45,826,165],{"class":79},[45,828,556],{"class":83},[45,830,691],{"class":79},[45,832,65],{"class":83},[45,834,87],{"class":79},[45,836,838,841,843],{"class":47,"line":837},14,[45,839,840],{"class":79}," \u003C/",[45,842,62],{"class":83},[45,844,87],{"class":79},[45,846,848,850,852],{"class":47,"line":847},15,[45,849,595],{"class":79},[45,851,612],{"class":83},[45,853,87],{"class":79},[45,855,857],{"class":47,"line":856},16,[45,858,859],{"class":604}," \u003C!-- Hamburger Menu -->\n",[45,861,863,865,867,869,871,873,876,878,880,882,884,887,889],{"class":47,"line":862},17,[45,864,142],{"class":79},[45,866,194],{"class":83},[45,868,100],{"class":99},[45,870,103],{"class":79},[45,872,106],{"class":79},[45,874,875],{"class":109},"hamburgerMenu",[45,877,106],{"class":79},[45,879,671],{"class":99},[45,881,103],{"class":79},[45,883,106],{"class":79},[45,885,886],{"class":109},"toggleMenu",[45,888,106],{"class":79},[45,890,87],{"class":79},[45,892,894,896,898,900,902],{"class":47,"line":893},18,[45,895,553],{"class":79},[45,897,45],{"class":83},[45,899,691],{"class":79},[45,901,45],{"class":83},[45,903,87],{"class":79},[45,905,907,909,911,913,915],{"class":47,"line":906},19,[45,908,553],{"class":79},[45,910,45],{"class":83},[45,912,691],{"class":79},[45,914,45],{"class":83},[45,916,87],{"class":79},[45,918,920,922,924,926,928],{"class":47,"line":919},20,[45,921,553],{"class":79},[45,923,45],{"class":83},[45,925,691],{"class":79},[45,927,45],{"class":83},[45,929,87],{"class":79},[45,931,933,935,937],{"class":47,"line":932},21,[45,934,595],{"class":79},[45,936,194],{"class":83},[45,938,87],{"class":79},[45,940,942,944,946],{"class":47,"line":941},22,[45,943,175],{"class":79},[45,945,123],{"class":83},[45,947,87],{"class":79},[45,949,951,953,955,957,959,961,964,966],{"class":47,"line":950},23,[45,952,120],{"class":79},[45,954,194],{"class":83},[45,956,100],{"class":99},[45,958,103],{"class":79},[45,960,106],{"class":79},[45,962,963],{"class":109},"pageContent",[45,965,106],{"class":79},[45,967,87],{"class":79},[45,969,971,973,976],{"class":47,"line":970},24,[45,972,142],{"class":79},[45,974,975],{"class":83},"NuxtPage",[45,977,978],{"class":79}," />\n",[45,980,982,984,986],{"class":47,"line":981},25,[45,983,175],{"class":79},[45,985,194],{"class":83},[45,987,87],{"class":79},[45,989,991,993,996,998,1000,1002,1004],{"class":47,"line":990},26,[45,992,120],{"class":79},[45,994,995],{"class":83},"footer",[45,997,158],{"class":79},[45,999,995],{"class":161},[45,1001,165],{"class":79},[45,1003,995],{"class":83},[45,1005,87],{"class":79},[45,1007,1009,1011,1013],{"class":47,"line":1008},27,[45,1010,270],{"class":79},[45,1012,194],{"class":83},[45,1014,87],{"class":79},[45,1016,1018,1020,1022],{"class":47,"line":1017},28,[45,1019,165],{"class":79},[45,1021,84],{"class":83},[45,1023,87],{"class":79},[45,1025,1027],{"class":47,"line":1026},29,[45,1028,186],{"emptyLinePlaceholder":185},[45,1030,1032,1034,1037],{"class":47,"line":1031},30,[45,1033,80],{"class":79},[45,1035,1036],{"class":83},"script",[45,1038,87],{"class":79},[45,1040,1042,1046,1049],{"class":47,"line":1041},31,[45,1043,1045],{"class":1044},"s6cf3","export",[45,1047,1048],{"class":1044}," default",[45,1050,1051],{"class":79}," {\n",[45,1053,1055,1058,1061],{"class":47,"line":1054},32,[45,1056,1057],{"class":83}," data",[45,1059,1060],{"class":79},"()",[45,1062,1051],{"class":79},[45,1064,1066,1069],{"class":47,"line":1065},33,[45,1067,1068],{"class":1044}," return",[45,1070,1051],{"class":79},[45,1072,1074,1077,1080,1084],{"class":47,"line":1073},34,[45,1075,1076],{"class":83}," isMenuOpen",[45,1078,1079],{"class":79},":",[45,1081,1083],{"class":1082},"sbqyR"," false",[45,1085,1086],{"class":79},",\n",[45,1088,1090],{"class":47,"line":1089},35,[45,1091,1092],{"class":79}," };\n",[45,1094,1096],{"class":47,"line":1095},36,[45,1097,1098],{"class":79}," },\n",[45,1100,1102,1105,1107],{"class":47,"line":1101},37,[45,1103,1104],{"class":83}," methods",[45,1106,1079],{"class":79},[45,1108,1051],{"class":79},[45,1110,1112,1115,1117],{"class":47,"line":1111},38,[45,1113,1114],{"class":83}," toggleMenu",[45,1116,1060],{"class":79},[45,1118,1051],{"class":79},[45,1120,1122,1125,1128,1131,1134,1136],{"class":47,"line":1121},39,[45,1123,1124],{"class":79}," this.",[45,1126,1127],{"class":161},"isMenuOpen",[45,1129,1130],{"class":79}," =",[45,1132,1133],{"class":79}," !this.",[45,1135,1127],{"class":161},[45,1137,1138],{"class":79},";\n",[45,1140,1142],{"class":47,"line":1141},40,[45,1143,1144],{"class":79}," },\n",[45,1146,1148],{"class":47,"line":1147},41,[45,1149,186],{"emptyLinePlaceholder":185},[45,1151,1153,1156,1158],{"class":47,"line":1152},42,[45,1154,1155],{"class":83}," hideMenu",[45,1157,1060],{"class":79},[45,1159,1051],{"class":79},[45,1161,1163,1165,1167,1169,1171],{"class":47,"line":1162},43,[45,1164,1124],{"class":79},[45,1166,1127],{"class":161},[45,1168,1130],{"class":79},[45,1170,1083],{"class":1082},[45,1172,1138],{"class":79},[45,1174,1176],{"class":47,"line":1175},44,[45,1177,1144],{"class":79},[45,1179,1181],{"class":47,"line":1180},45,[45,1182,1098],{"class":79},[45,1184,1186],{"class":47,"line":1185},46,[45,1187,1188],{"class":79},"};\n",[45,1190,1192,1194,1196],{"class":47,"line":1191},47,[45,1193,165],{"class":79},[45,1195,1036],{"class":83},[45,1197,87],{"class":79},[45,1199,1201],{"class":47,"line":1200},48,[45,1202,186],{"emptyLinePlaceholder":185},[45,1204,1206,1208,1211],{"class":47,"line":1205},49,[45,1207,80],{"class":79},[45,1209,1210],{"class":83},"style",[45,1212,87],{"class":79},[45,1214,1216],{"class":47,"line":1215},50,[45,1217,1218],{"class":604},"/* Mobile-First Design */\n",[45,1220,1222],{"class":47,"line":1221},51,[45,1223,186],{"emptyLinePlaceholder":185},[45,1225,1227],{"class":47,"line":1226},52,[45,1228,1229],{"class":604},"/* Basic-Styling for mobile Devices */\n",[45,1231,1233,1237],{"class":47,"line":1232},53,[45,1234,1236],{"class":1235},"s5Dmg","body",[45,1238,1051],{"class":79},[45,1240,1242,1246,1248,1251,1254],{"class":47,"line":1241},54,[45,1243,1245],{"class":1244},"s6YsC"," background-color",[45,1247,1079],{"class":79},[45,1249,1250],{"class":79}," #",[45,1252,1253],{"class":161},"213c5b",[45,1255,1138],{"class":79},[45,1257,1259,1262,1264,1268],{"class":47,"line":1258},55,[45,1260,1261],{"class":1244}," margin",[45,1263,1079],{"class":79},[45,1265,1267],{"class":1266},"sx098"," 0",[45,1269,1138],{"class":79},[45,1271,1273,1276,1278,1281,1284,1287],{"class":47,"line":1272},56,[45,1274,1275],{"class":1244}," font-family",[45,1277,1079],{"class":79},[45,1279,1280],{"class":161}," Arial",[45,1282,1283],{"class":79},",",[45,1285,1286],{"class":161}," sans-serif",[45,1288,1138],{"class":79},[45,1290,1292],{"class":47,"line":1291},57,[45,1293,1294],{"class":79},"}\n",[45,1296,1298,1301,1303],{"class":47,"line":1297},58,[45,1299,1300],{"class":79},".",[45,1302,506],{"class":1235},[45,1304,1051],{"class":79},[45,1306,1308,1311,1313,1316],{"class":47,"line":1307},59,[45,1309,1310],{"class":1244}," display",[45,1312,1079],{"class":79},[45,1314,1315],{"class":161}," flex",[45,1317,1138],{"class":79},[45,1319,1321,1324,1326,1329],{"class":47,"line":1320},60,[45,1322,1323],{"class":1244}," flex-direction",[45,1325,1079],{"class":79},[45,1327,1328],{"class":161}," column",[45,1330,1138],{"class":79},[45,1332,1334,1337,1339,1342],{"class":47,"line":1333},61,[45,1335,1336],{"class":1244}," min-height",[45,1338,1079],{"class":79},[45,1340,1341],{"class":1266}," 100vh",[45,1343,1138],{"class":79},[45,1345,1347,1350,1352,1355],{"class":47,"line":1346},62,[45,1348,1349],{"class":1244}," max-width",[45,1351,1079],{"class":79},[45,1353,1354],{"class":1266}," 1024px",[45,1356,1138],{"class":79},[45,1358,1360,1363,1365,1368],{"class":47,"line":1359},63,[45,1361,1362],{"class":1244}," margin-right",[45,1364,1079],{"class":79},[45,1366,1367],{"class":161}," auto",[45,1369,1138],{"class":79},[45,1371,1373,1376,1378,1380],{"class":47,"line":1372},64,[45,1374,1375],{"class":1244}," margin-left",[45,1377,1079],{"class":79},[45,1379,1367],{"class":161},[45,1381,1138],{"class":79},[45,1383,1385],{"class":47,"line":1384},65,[45,1386,1294],{"class":79},[45,1388,1390,1392,1394],{"class":47,"line":1389},66,[45,1391,1300],{"class":79},[45,1393,525],{"class":1235},[45,1395,1051],{"class":79},[45,1397,1399,1402,1404,1407],{"class":47,"line":1398},67,[45,1400,1401],{"class":1244}," color",[45,1403,1079],{"class":79},[45,1405,1406],{"class":161}," black",[45,1408,1138],{"class":79},[45,1410,1412,1414,1416,1419],{"class":47,"line":1411},68,[45,1413,1336],{"class":1244},[45,1415,1079],{"class":79},[45,1417,1418],{"class":1266}," 56px",[45,1420,1138],{"class":79},[45,1422,1424,1426,1428,1430],{"class":47,"line":1423},69,[45,1425,1310],{"class":1244},[45,1427,1079],{"class":79},[45,1429,1315],{"class":161},[45,1431,1138],{"class":79},[45,1433,1435,1438,1440,1443],{"class":47,"line":1434},70,[45,1436,1437],{"class":1244}," justify-content",[45,1439,1079],{"class":79},[45,1441,1442],{"class":161}," space-between",[45,1444,1138],{"class":79},[45,1446,1448,1451,1453,1456],{"class":47,"line":1447},71,[45,1449,1450],{"class":1244}," align-items",[45,1452,1079],{"class":79},[45,1454,1455],{"class":161}," center",[45,1457,1138],{"class":79},[45,1459,1461,1464,1466,1469],{"class":47,"line":1460},72,[45,1462,1463],{"class":1244}," padding-left",[45,1465,1079],{"class":79},[45,1467,1468],{"class":1266}," 1rem",[45,1470,1138],{"class":79},[45,1472,1474,1477,1479,1481],{"class":47,"line":1473},73,[45,1475,1476],{"class":1244}," padding-right",[45,1478,1079],{"class":79},[45,1480,1468],{"class":1266},[45,1482,1138],{"class":79},[45,1484,1486,1489,1491,1493,1496],{"class":47,"line":1485},74,[45,1487,1488],{"class":1244}," background",[45,1490,1079],{"class":79},[45,1492,1250],{"class":79},[45,1494,1495],{"class":161},"1e6695",[45,1497,1138],{"class":79},[45,1499,1501,1503,1505,1509,1512,1515,1517,1519,1522,1525,1527,1529,1532,1535,1537,1539,1542,1545,1547,1549,1552,1555],{"class":47,"line":1500},75,[45,1502,1488],{"class":1244},[45,1504,1079],{"class":79},[45,1506,1508],{"class":1507},"sdLwU"," -moz-linear-gradient",[45,1510,1511],{"class":79},"(",[45,1513,1514],{"class":161},"top",[45,1516,1283],{"class":79},[45,1518,1250],{"class":79},[45,1520,1521],{"class":161},"1e6695 ",[45,1523,1524],{"class":1266},"0%",[45,1526,1283],{"class":79},[45,1528,1250],{"class":79},[45,1530,1531],{"class":161},"74aacc ",[45,1533,1534],{"class":1266},"33%",[45,1536,1283],{"class":79},[45,1538,1250],{"class":79},[45,1540,1541],{"class":161},"79aecb ",[45,1543,1544],{"class":1266},"66%",[45,1546,1283],{"class":79},[45,1548,1250],{"class":79},[45,1550,1551],{"class":161},"2f4a66 ",[45,1553,1554],{"class":1266},"100%",[45,1556,1557],{"class":79},");\n",[45,1559,1561,1563,1565,1568,1570,1572,1574,1576,1578,1580,1582,1584,1586,1588,1590,1592,1594,1596,1598,1600,1602,1604],{"class":47,"line":1560},76,[45,1562,1488],{"class":1244},[45,1564,1079],{"class":79},[45,1566,1567],{"class":1507}," -webkit-linear-gradient",[45,1569,1511],{"class":79},[45,1571,1514],{"class":161},[45,1573,1283],{"class":79},[45,1575,1250],{"class":79},[45,1577,1521],{"class":161},[45,1579,1524],{"class":1266},[45,1581,1283],{"class":79},[45,1583,1250],{"class":79},[45,1585,1531],{"class":161},[45,1587,1534],{"class":1266},[45,1589,1283],{"class":79},[45,1591,1250],{"class":79},[45,1593,1541],{"class":161},[45,1595,1544],{"class":1266},[45,1597,1283],{"class":79},[45,1599,1250],{"class":79},[45,1601,1551],{"class":161},[45,1603,1554],{"class":1266},[45,1605,1557],{"class":79},[45,1607,1609,1611,1613,1616,1619,1622,1624,1626,1628,1630,1632,1634,1636,1638,1640,1642,1644,1646,1648,1650,1652,1654],{"class":47,"line":1608},77,[45,1610,1488],{"class":1244},[45,1612,1079],{"class":79},[45,1614,1615],{"class":1507}," linear-gradient",[45,1617,1618],{"class":79},"(to",[45,1620,1621],{"class":161}," bottom",[45,1623,1283],{"class":79},[45,1625,1250],{"class":79},[45,1627,1521],{"class":161},[45,1629,1524],{"class":1266},[45,1631,1283],{"class":79},[45,1633,1250],{"class":79},[45,1635,1531],{"class":161},[45,1637,1534],{"class":1266},[45,1639,1283],{"class":79},[45,1641,1250],{"class":79},[45,1643,1541],{"class":161},[45,1645,1544],{"class":1266},[45,1647,1283],{"class":79},[45,1649,1250],{"class":79},[45,1651,1551],{"class":161},[45,1653,1554],{"class":1266},[45,1655,1557],{"class":79},[45,1657,1659,1662,1664,1667,1670,1673,1675,1677,1680,1682,1685,1687,1689,1692,1695,1698],{"class":47,"line":1658},78,[45,1660,1661],{"class":1244}," filter",[45,1663,1079],{"class":79},[45,1665,1666],{"class":161}," progid:DXImageTransform.Microsoft.gradient( startColorstr=",[45,1668,1669],{"class":79},"'",[45,1671,1672],{"class":109},"#1e6695",[45,1674,1669],{"class":79},[45,1676,1283],{"class":79},[45,1678,1679],{"class":161}," endColorstr=",[45,1681,1669],{"class":79},[45,1683,1684],{"class":109},"#2f4a66",[45,1686,1669],{"class":79},[45,1688,1283],{"class":79},[45,1690,1691],{"class":161},"GradientType=",[45,1693,1694],{"class":1266},"0",[45,1696,1697],{"class":161}," )",[45,1699,1138],{"class":79},[45,1701,1703],{"class":47,"line":1702},79,[45,1704,1294],{"class":79},[45,1706,1708],{"class":47,"line":1707},80,[45,1709,186],{"emptyLinePlaceholder":185},[45,1711,1713],{"class":47,"line":1712},81,[45,1714,1715],{"class":604},"/* Branding */\n",[45,1717,1719,1721,1723,1726,1728],{"class":47,"line":1718},82,[45,1720,1300],{"class":79},[45,1722,544],{"class":1235},[45,1724,1725],{"class":79}," .",[45,1727,577],{"class":1235},[45,1729,1051],{"class":79},[45,1731,1733,1736,1738,1741],{"class":47,"line":1732},83,[45,1734,1735],{"class":1244}," font-size",[45,1737,1079],{"class":79},[45,1739,1740],{"class":1266}," 1.5rem",[45,1742,1138],{"class":79},[45,1744,1746,1749,1751,1754],{"class":47,"line":1745},84,[45,1747,1748],{"class":1244}," text-decoration",[45,1750,1079],{"class":79},[45,1752,1753],{"class":161}," none",[45,1755,1138],{"class":79},[45,1757,1759,1761,1763,1765],{"class":47,"line":1758},85,[45,1760,1401],{"class":1244},[45,1762,1079],{"class":79},[45,1764,1406],{"class":161},[45,1766,1138],{"class":79},[45,1768,1770],{"class":47,"line":1769},86,[45,1771,1294],{"class":79},[45,1773,1775],{"class":47,"line":1774},87,[45,1776,186],{"emptyLinePlaceholder":185},[45,1778,1780],{"class":47,"line":1779},88,[45,1781,1782],{"class":604},"/* Navigation */\n",[45,1784,1786,1788],{"class":47,"line":1785},89,[45,1787,612],{"class":1235},[45,1789,1051],{"class":79},[45,1791,1793,1795,1797,1799],{"class":47,"line":1792},90,[45,1794,1310],{"class":1244},[45,1796,1079],{"class":79},[45,1798,1753],{"class":161},[45,1800,1138],{"class":79},[45,1802,1804],{"class":47,"line":1803},91,[45,1805,1294],{"class":79},[45,1807,1809,1811,1813],{"class":47,"line":1808},92,[45,1810,1300],{"class":79},[45,1812,641],{"class":1235},[45,1814,1051],{"class":79},[45,1816,1818,1820,1822,1824],{"class":47,"line":1817},93,[45,1819,1310],{"class":1244},[45,1821,1079],{"class":79},[45,1823,1315],{"class":161},[45,1825,1138],{"class":79},[45,1827,1829,1831,1833,1835],{"class":47,"line":1828},94,[45,1830,1323],{"class":1244},[45,1832,1079],{"class":79},[45,1834,1328],{"class":161},[45,1836,1138],{"class":79},[45,1838,1840,1843,1845,1847],{"class":47,"line":1839},95,[45,1841,1842],{"class":1244}," gap",[45,1844,1079],{"class":79},[45,1846,1468],{"class":1266},[45,1848,1138],{"class":79},[45,1850,1852,1855,1857,1859],{"class":47,"line":1851},96,[45,1853,1854],{"class":1244}," list-style",[45,1856,1079],{"class":79},[45,1858,1753],{"class":161},[45,1860,1138],{"class":79},[45,1862,1864,1866,1868,1870],{"class":47,"line":1863},97,[45,1865,1261],{"class":1244},[45,1867,1079],{"class":79},[45,1869,1267],{"class":1266},[45,1871,1138],{"class":79},[45,1873,1875,1878,1880,1882],{"class":47,"line":1874},98,[45,1876,1877],{"class":1244}," padding",[45,1879,1079],{"class":79},[45,1881,1468],{"class":1266},[45,1883,1138],{"class":79},[45,1885,1887,1889,1891,1893,1896],{"class":47,"line":1886},99,[45,1888,1245],{"class":1244},[45,1890,1079],{"class":79},[45,1892,1250],{"class":79},[45,1894,1895],{"class":161},"819cbb",[45,1897,1138],{"class":79},[45,1899,1901,1904,1906,1909],{"class":47,"line":1900},100,[45,1902,1903],{"class":1244}," border-radius",[45,1905,1079],{"class":79},[45,1907,1908],{"class":1266}," 0.5rem",[45,1910,1138],{"class":79},[45,1912,1914,1917,1919,1921,1924,1927,1930,1932,1934,1936,1938,1940,1942,1944,1947],{"class":47,"line":1913},101,[45,1915,1916],{"class":1244}," box-shadow",[45,1918,1079],{"class":79},[45,1920,1267],{"class":1266},[45,1922,1923],{"class":1266}," 4px",[45,1925,1926],{"class":1266}," 6px",[45,1928,1929],{"class":1507}," rgba",[45,1931,1511],{"class":79},[45,1933,1694],{"class":1266},[45,1935,1283],{"class":79},[45,1937,1267],{"class":1266},[45,1939,1283],{"class":79},[45,1941,1267],{"class":1266},[45,1943,1283],{"class":79},[45,1945,1946],{"class":1266}," 0.3",[45,1948,1557],{"class":79},[45,1950,1952],{"class":47,"line":1951},102,[45,1953,1294],{"class":79},[45,1955,1957,1959,1961,1964,1967],{"class":47,"line":1956},103,[45,1958,1300],{"class":79},[45,1960,641],{"class":1235},[45,1962,1963],{"class":1235}," li",[45,1965,1966],{"class":1235}," a",[45,1968,1051],{"class":79},[45,1970,1972,1974,1976,1978],{"class":47,"line":1971},104,[45,1973,1748],{"class":1244},[45,1975,1079],{"class":79},[45,1977,1753],{"class":161},[45,1979,1138],{"class":79},[45,1981,1983,1985,1987,1989],{"class":47,"line":1982},105,[45,1984,1401],{"class":1244},[45,1986,1079],{"class":79},[45,1988,1406],{"class":161},[45,1990,1138],{"class":79},[45,1992,1994,1997,1999,2002,2005],{"class":47,"line":1993},106,[45,1995,1996],{"class":1244}," transition",[45,1998,1079],{"class":79},[45,2000,2001],{"class":161}," color ",[45,2003,2004],{"class":1266},"0.3s",[45,2006,1138],{"class":79},[45,2008,2010],{"class":47,"line":2009},107,[45,2011,1294],{"class":79},[45,2013,2015],{"class":47,"line":2014},108,[45,2016,186],{"emptyLinePlaceholder":185},[45,2018,2020],{"class":47,"line":2019},109,[45,2021,2022],{"class":604},"/* Hamburger Menu */\n",[45,2024,2026,2028,2030],{"class":47,"line":2025},110,[45,2027,1300],{"class":79},[45,2029,875],{"class":1235},[45,2031,1051],{"class":79},[45,2033,2035,2037,2039,2041],{"class":47,"line":2034},111,[45,2036,1310],{"class":1244},[45,2038,1079],{"class":79},[45,2040,1315],{"class":161},[45,2042,1138],{"class":79},[45,2044,2046,2048,2050,2052],{"class":47,"line":2045},112,[45,2047,1323],{"class":1244},[45,2049,1079],{"class":79},[45,2051,1328],{"class":161},[45,2053,1138],{"class":79},[45,2055,2057,2059,2061,2064],{"class":47,"line":2056},113,[45,2058,1842],{"class":1244},[45,2060,1079],{"class":79},[45,2062,2063],{"class":1266}," 0.3rem",[45,2065,1138],{"class":79},[45,2067,2069,2072,2074,2077],{"class":47,"line":2068},114,[45,2070,2071],{"class":1244}," cursor",[45,2073,1079],{"class":79},[45,2075,2076],{"class":161}," pointer",[45,2078,1138],{"class":79},[45,2080,2082],{"class":47,"line":2081},115,[45,2083,1294],{"class":79},[45,2085,2087,2089,2091,2094],{"class":47,"line":2086},116,[45,2088,1300],{"class":79},[45,2090,875],{"class":1235},[45,2092,2093],{"class":1235}," span",[45,2095,1051],{"class":79},[45,2097,2099,2102,2104,2107],{"class":47,"line":2098},117,[45,2100,2101],{"class":1244}," width",[45,2103,1079],{"class":79},[45,2105,2106],{"class":1266}," 25px",[45,2108,1138],{"class":79},[45,2110,2112,2115,2117,2120],{"class":47,"line":2111},118,[45,2113,2114],{"class":1244}," height",[45,2116,1079],{"class":79},[45,2118,2119],{"class":1266}," 3px",[45,2121,1138],{"class":79},[45,2123,2125,2127,2129,2131],{"class":47,"line":2124},119,[45,2126,1245],{"class":1244},[45,2128,1079],{"class":79},[45,2130,1406],{"class":161},[45,2132,1138],{"class":79},[45,2134,2136],{"class":47,"line":2135},120,[45,2137,1294],{"class":79},[45,2139,2141],{"class":47,"line":2140},121,[45,2142,186],{"emptyLinePlaceholder":185},[45,2144,2146],{"class":47,"line":2145},122,[45,2147,2148],{"class":604},"/* Aktives Menü (für Mobile) */\n",[45,2150,2152,2154,2156,2159],{"class":47,"line":2151},123,[45,2153,612],{"class":1235},[45,2155,1300],{"class":79},[45,2157,2158],{"class":1235},"active",[45,2160,1051],{"class":79},[45,2162,2164,2166,2168,2171],{"class":47,"line":2163},124,[45,2165,1310],{"class":1244},[45,2167,1079],{"class":79},[45,2169,2170],{"class":161}," block",[45,2172,1138],{"class":79},[45,2174,2176],{"class":47,"line":2175},125,[45,2177,1294],{"class":79},[45,2179,2181],{"class":47,"line":2180},126,[45,2182,186],{"emptyLinePlaceholder":185},[45,2184,2186,2188,2190],{"class":47,"line":2185},127,[45,2187,1300],{"class":79},[45,2189,963],{"class":1235},[45,2191,1051],{"class":79},[45,2193,2195,2197,2199,2201,2204],{"class":47,"line":2194},128,[45,2196,1245],{"class":1244},[45,2198,1079],{"class":79},[45,2200,1250],{"class":79},[45,2202,2203],{"class":161},"415c7b",[45,2205,1138],{"class":79},[45,2207,2209,2211,2213,2216],{"class":47,"line":2208},129,[45,2210,1877],{"class":1244},[45,2212,1079],{"class":79},[45,2214,2215],{"class":1266}," 15px",[45,2217,1138],{"class":79},[45,2219,2221],{"class":47,"line":2220},130,[45,2222,1294],{"class":79},[45,2224,2226],{"class":47,"line":2225},131,[45,2227,186],{"emptyLinePlaceholder":185},[45,2229,2231,2233,2235,2238],{"class":47,"line":2230},132,[45,2232,1300],{"class":79},[45,2234,963],{"class":1235},[45,2236,2237],{"class":1235}," article",[45,2239,1051],{"class":79},[45,2241,2243,2246,2248,2251,2254,2257,2260],{"class":47,"line":2242},133,[45,2244,2245],{"class":1244}," border",[45,2247,1079],{"class":79},[45,2249,2250],{"class":1266}," 1px",[45,2252,2253],{"class":161}," solid ",[45,2255,2256],{"class":79},"#",[45,2258,2259],{"class":161},"000",[45,2261,1138],{"class":79},[45,2263,2265,2267,2269,2272],{"class":47,"line":2264},134,[45,2266,1903],{"class":1244},[45,2268,1079],{"class":79},[45,2270,2271],{"class":1266}," 10px",[45,2273,1138],{"class":79},[45,2275,2277,2279,2281,2283,2285],{"class":47,"line":2276},135,[45,2278,1245],{"class":1244},[45,2280,1079],{"class":79},[45,2282,1250],{"class":79},[45,2284,1895],{"class":161},[45,2286,1138],{"class":79},[45,2288,2290,2292,2294,2296],{"class":47,"line":2289},136,[45,2291,1877],{"class":1244},[45,2293,1079],{"class":79},[45,2295,2215],{"class":1266},[45,2297,1138],{"class":79},[45,2299,2301],{"class":47,"line":2300},137,[45,2302,1294],{"class":79},[45,2304,2306],{"class":47,"line":2305},138,[45,2307,186],{"emptyLinePlaceholder":185},[45,2309,2311,2313],{"class":47,"line":2310},139,[45,2312,995],{"class":1235},[45,2314,1051],{"class":79},[45,2316,2318,2320,2322,2325],{"class":47,"line":2317},140,[45,2319,2114],{"class":1244},[45,2321,1079],{"class":79},[45,2323,2324],{"class":1266}," 38px",[45,2326,1138],{"class":79},[45,2328,2330,2333,2335,2337],{"class":47,"line":2329},141,[45,2331,2332],{"class":1244}," line-height",[45,2334,1079],{"class":79},[45,2336,2324],{"class":1266},[45,2338,1138],{"class":79},[45,2340,2342,2345,2347,2349],{"class":47,"line":2341},142,[45,2343,2344],{"class":1244}," text-align",[45,2346,1079],{"class":79},[45,2348,1455],{"class":161},[45,2350,1138],{"class":79},[45,2352,2354,2356,2358,2360,2362],{"class":47,"line":2353},143,[45,2355,1488],{"class":1244},[45,2357,1079],{"class":79},[45,2359,1250],{"class":79},[45,2361,2203],{"class":161},[45,2363,1138],{"class":79},[45,2365,2367,2369,2371,2373,2375,2377,2379,2381,2384,2386,2388,2390,2393,2395],{"class":47,"line":2366},144,[45,2368,1488],{"class":1244},[45,2370,1079],{"class":79},[45,2372,1508],{"class":1507},[45,2374,1511],{"class":79},[45,2376,1514],{"class":161},[45,2378,1283],{"class":79},[45,2380,1250],{"class":79},[45,2382,2383],{"class":161},"415c7b ",[45,2385,1524],{"class":1266},[45,2387,1283],{"class":79},[45,2389,1250],{"class":79},[45,2391,2392],{"class":161},"273749 ",[45,2394,1554],{"class":1266},[45,2396,1557],{"class":79},[45,2398,2400,2402,2404,2407,2409,2412,2414,2417,2419,2422,2424,2427,2429,2431,2433,2435,2437,2440,2442,2444,2446,2448,2450,2453],{"class":47,"line":2399},145,[45,2401,1488],{"class":1244},[45,2403,1079],{"class":79},[45,2405,2406],{"class":161}," -webkit-gradient",[45,2408,1511],{"class":79},[45,2410,2411],{"class":161},"linear",[45,2413,1283],{"class":79},[45,2415,2416],{"class":161}," left top",[45,2418,1283],{"class":79},[45,2420,2421],{"class":161}," left bottom",[45,2423,1283],{"class":79},[45,2425,2426],{"class":161}," color-stop",[45,2428,1511],{"class":79},[45,2430,1524],{"class":1266},[45,2432,1283],{"class":79},[45,2434,1250],{"class":79},[45,2436,2203],{"class":161},[45,2438,2439],{"class":79},"),",[45,2441,2426],{"class":161},[45,2443,1511],{"class":79},[45,2445,1554],{"class":1266},[45,2447,1283],{"class":79},[45,2449,1250],{"class":79},[45,2451,2452],{"class":161},"273749",[45,2454,2455],{"class":79},"));\n",[45,2457,2459,2461,2463,2465,2467,2469,2471,2473,2475,2477,2479,2481,2483,2485],{"class":47,"line":2458},146,[45,2460,1488],{"class":1244},[45,2462,1079],{"class":79},[45,2464,1567],{"class":1507},[45,2466,1511],{"class":79},[45,2468,1514],{"class":161},[45,2470,1283],{"class":79},[45,2472,1250],{"class":79},[45,2474,2383],{"class":161},[45,2476,1524],{"class":1266},[45,2478,1283],{"class":79},[45,2480,1250],{"class":79},[45,2482,2392],{"class":161},[45,2484,1554],{"class":1266},[45,2486,1557],{"class":79},[45,2488,2490,2492,2494,2497,2499,2501,2503,2505,2507,2509,2511,2513,2515,2517],{"class":47,"line":2489},147,[45,2491,1488],{"class":1244},[45,2493,1079],{"class":79},[45,2495,2496],{"class":1507}," -o-linear-gradient",[45,2498,1511],{"class":79},[45,2500,1514],{"class":161},[45,2502,1283],{"class":79},[45,2504,1250],{"class":79},[45,2506,2383],{"class":161},[45,2508,1524],{"class":1266},[45,2510,1283],{"class":79},[45,2512,1250],{"class":79},[45,2514,2392],{"class":161},[45,2516,1554],{"class":1266},[45,2518,1557],{"class":79},[45,2520,2522,2524,2526,2529,2531,2533,2535,2537,2539,2541,2543,2545,2548],{"class":47,"line":2521},148,[45,2523,1488],{"class":1244},[45,2525,1079],{"class":79},[45,2527,2528],{"class":161}," -ms-linear-gradient(top",[45,2530,1283],{"class":79},[45,2532,1250],{"class":79},[45,2534,2383],{"class":161},[45,2536,1524],{"class":1266},[45,2538,1283],{"class":79},[45,2540,1250],{"class":79},[45,2542,2392],{"class":161},[45,2544,1554],{"class":1266},[45,2546,2547],{"class":161},")",[45,2549,1138],{"class":79},[45,2551,2553,2555,2557,2559,2561,2563,2565,2567,2569,2571,2573,2575,2577,2579],{"class":47,"line":2552},149,[45,2554,1488],{"class":1244},[45,2556,1079],{"class":79},[45,2558,1615],{"class":1507},[45,2560,1618],{"class":79},[45,2562,1621],{"class":161},[45,2564,1283],{"class":79},[45,2566,1250],{"class":79},[45,2568,2383],{"class":161},[45,2570,1524],{"class":1266},[45,2572,1283],{"class":79},[45,2574,1250],{"class":79},[45,2576,2392],{"class":161},[45,2578,1554],{"class":1266},[45,2580,1557],{"class":79},[45,2582,2584,2586,2588,2590,2592,2595,2597,2599,2601,2603,2606,2608,2610,2612,2614,2616],{"class":47,"line":2583},150,[45,2585,1661],{"class":1244},[45,2587,1079],{"class":79},[45,2589,1666],{"class":161},[45,2591,1669],{"class":79},[45,2593,2594],{"class":109},"#415c7b",[45,2596,1669],{"class":79},[45,2598,1283],{"class":79},[45,2600,1679],{"class":161},[45,2602,1669],{"class":79},[45,2604,2605],{"class":109},"#273749",[45,2607,1669],{"class":79},[45,2609,1283],{"class":79},[45,2611,1691],{"class":161},[45,2613,1694],{"class":1266},[45,2615,1697],{"class":161},[45,2617,1138],{"class":79},[45,2619,2621,2624,2626,2628,2631],{"class":47,"line":2620},151,[45,2622,2623],{"class":1244}," border-bottom",[45,2625,1079],{"class":79},[45,2627,2250],{"class":1266},[45,2629,2630],{"class":161}," solid black",[45,2632,1138],{"class":79},[45,2634,2636],{"class":47,"line":2635},152,[45,2637,1294],{"class":79},[45,2639,2641],{"class":47,"line":2640},153,[45,2642,186],{"emptyLinePlaceholder":185},[45,2644,2646,2649,2652,2655,2657,2660,2662],{"class":47,"line":2645},154,[45,2647,2648],{"class":1044},"@media",[45,2650,2651],{"class":79}," (",[45,2653,2654],{"class":1235},"max-width",[45,2656,1079],{"class":79},[45,2658,2659],{"class":1266}," 599px",[45,2661,2547],{"class":79},[45,2663,1051],{"class":79},[45,2665,2667,2670,2672,2674,2676,2679],{"class":47,"line":2666},155,[45,2668,2669],{"class":79}," .",[45,2671,641],{"class":1235},[45,2673,1963],{"class":1235},[45,2675,1079],{"class":79},[45,2677,2678],{"class":99},"hover",[45,2680,1051],{"class":79},[45,2682,2684,2687,2689,2691,2694],{"class":47,"line":2683},156,[45,2685,2686],{"class":1244}," background-color",[45,2688,1079],{"class":79},[45,2690,1250],{"class":79},[45,2692,2693],{"class":161},"7E99B8",[45,2695,1138],{"class":79},[45,2697,2699],{"class":47,"line":2698},157,[45,2700,2701],{"class":79}," }\n",[45,2703,2705,2708,2710,2712],{"class":47,"line":2704},158,[45,2706,2707],{"class":1235}," nav",[45,2709,1300],{"class":79},[45,2711,2158],{"class":1235},[45,2713,1051],{"class":79},[45,2715,2717,2720,2722,2725],{"class":47,"line":2716},159,[45,2718,2719],{"class":1244}," position",[45,2721,1079],{"class":79},[45,2723,2724],{"class":161}," absolute",[45,2726,1138],{"class":79},[45,2728,2730,2733,2735,2738,2741],{"class":47,"line":2729},160,[45,2731,2732],{"class":1244}," top",[45,2734,1079],{"class":79},[45,2736,2737],{"class":1266}," 46px",[45,2739,2740],{"class":79},";",[45,2742,2743],{"class":604}," /* Direkt unter der Header-Höhe */\n",[45,2745,2747,2750,2752,2755],{"class":47,"line":2746},161,[45,2748,2749],{"class":1244}," right",[45,2751,1079],{"class":79},[45,2753,2754],{"class":1266}," 16px",[45,2756,1138],{"class":79},[45,2758,2760,2763,2765,2768],{"class":47,"line":2759},162,[45,2761,2762],{"class":1244}," width",[45,2764,1079],{"class":79},[45,2766,2767],{"class":1266}," 200px",[45,2769,1138],{"class":79},[45,2771,2773,2776,2778,2781],{"class":47,"line":2772},163,[45,2774,2775],{"class":1244}," z-index",[45,2777,1079],{"class":79},[45,2779,2780],{"class":1266}," 10",[45,2782,1138],{"class":79},[45,2784,2786],{"class":47,"line":2785},164,[45,2787,2701],{"class":79},[45,2789,2791],{"class":47,"line":2790},165,[45,2792,1294],{"class":79},[45,2794,2796],{"class":47,"line":2795},166,[45,2797,186],{"emptyLinePlaceholder":185},[45,2799,2801],{"class":47,"line":2800},167,[45,2802,2803],{"class":604},"/* Media Queries für größere Bildschirme */\n",[45,2805,2807,2809,2811,2814,2816,2819,2821],{"class":47,"line":2806},168,[45,2808,2648],{"class":1044},[45,2810,2651],{"class":79},[45,2812,2813],{"class":1235},"min-width",[45,2815,1079],{"class":79},[45,2817,2818],{"class":1266}," 600px",[45,2820,2547],{"class":79},[45,2822,1051],{"class":79},[45,2824,2826,2828,2830],{"class":47,"line":2825},169,[45,2827,2669],{"class":79},[45,2829,641],{"class":1235},[45,2831,1051],{"class":79},[45,2833,2835,2838,2840,2843],{"class":47,"line":2834},170,[45,2836,2837],{"class":1244}," flex-direction",[45,2839,1079],{"class":79},[45,2841,2842],{"class":161}," row",[45,2844,1138],{"class":79},[45,2846,2848,2851,2853,2855],{"class":47,"line":2847},171,[45,2849,2850],{"class":1244}," justify-content",[45,2852,1079],{"class":79},[45,2854,1455],{"class":161},[45,2856,1138],{"class":79},[45,2858,2860,2863,2865,2867],{"class":47,"line":2859},172,[45,2861,2862],{"class":1244}," background",[45,2864,1079],{"class":79},[45,2866,1753],{"class":161},[45,2868,1138],{"class":79},[45,2870,2872,2875,2877,2879],{"class":47,"line":2871},173,[45,2873,2874],{"class":1244}," padding",[45,2876,1079],{"class":79},[45,2878,1267],{"class":1266},[45,2880,1138],{"class":79},[45,2882,2884,2887,2889,2891],{"class":47,"line":2883},174,[45,2885,2886],{"class":1244}," box-shadow",[45,2888,1079],{"class":79},[45,2890,1753],{"class":161},[45,2892,1138],{"class":79},[45,2894,2896],{"class":47,"line":2895},175,[45,2897,2701],{"class":79},[45,2899,2901,2903],{"class":47,"line":2900},176,[45,2902,2707],{"class":1235},[45,2904,1051],{"class":79},[45,2906,2908,2911,2913,2915],{"class":47,"line":2907},177,[45,2909,2910],{"class":1244}," display",[45,2912,1079],{"class":79},[45,2914,1315],{"class":161},[45,2916,1138],{"class":79},[45,2918,2920],{"class":47,"line":2919},178,[45,2921,2701],{"class":79},[45,2923,2925,2927,2929],{"class":47,"line":2924},179,[45,2926,2669],{"class":79},[45,2928,875],{"class":1235},[45,2930,1051],{"class":79},[45,2932,2934,2936,2938,2940],{"class":47,"line":2933},180,[45,2935,2910],{"class":1244},[45,2937,1079],{"class":79},[45,2939,1753],{"class":161},[45,2941,1138],{"class":79},[45,2943,2945],{"class":47,"line":2944},181,[45,2946,2701],{"class":79},[45,2948,2950],{"class":47,"line":2949},182,[45,2951,1294],{"class":79},[45,2953,2955],{"class":47,"line":2954},183,[45,2956,186],{"emptyLinePlaceholder":185},[45,2958,2960,2962,2964,2966,2968,2970,2972],{"class":47,"line":2959},184,[45,2961,2648],{"class":1044},[45,2963,2651],{"class":79},[45,2965,2813],{"class":1235},[45,2967,1079],{"class":79},[45,2969,1354],{"class":1266},[45,2971,2547],{"class":79},[45,2973,1051],{"class":79},[45,2975,2977,2979,2981],{"class":47,"line":2976},185,[45,2978,2669],{"class":79},[45,2980,525],{"class":1235},[45,2982,1051],{"class":79},[45,2984,2986,2989,2991,2993],{"class":47,"line":2985},186,[45,2987,2988],{"class":1244}," margin-top",[45,2990,1079],{"class":79},[45,2992,2271],{"class":1266},[45,2994,1138],{"class":79},[45,2996,2998,3001,3003,3006,3008,3010,3012],{"class":47,"line":2997},187,[45,2999,3000],{"class":1235}," -webkit-border-radius",[45,3002,1079],{"class":79},[45,3004,3005],{"class":1266}," 20px",[45,3007,3005],{"class":1266},[45,3009,1267],{"class":1266},[45,3011,1267],{"class":1266},[45,3013,1138],{"class":79},[45,3015,3017,3020,3022,3024,3026,3028,3030],{"class":47,"line":3016},188,[45,3018,3019],{"class":1244}," border-radius",[45,3021,1079],{"class":79},[45,3023,3005],{"class":1266},[45,3025,3005],{"class":1266},[45,3027,1267],{"class":1266},[45,3029,1267],{"class":1266},[45,3031,1138],{"class":79},[45,3033,3035,3038,3040,3042,3044],{"class":47,"line":3034},189,[45,3036,3037],{"class":1244}," border",[45,3039,1079],{"class":79},[45,3041,2250],{"class":1266},[45,3043,2630],{"class":161},[45,3045,1138],{"class":79},[45,3047,3049,3052,3054,3057],{"class":47,"line":3048},190,[45,3050,3051],{"class":1244}," border-bottom",[45,3053,1079],{"class":79},[45,3055,3056],{"class":1266}," 0px",[45,3058,1138],{"class":79},[45,3060,3062],{"class":47,"line":3061},191,[45,3063,2701],{"class":79},[45,3065,3067,3069,3071],{"class":47,"line":3066},192,[45,3068,2669],{"class":79},[45,3070,963],{"class":1235},[45,3072,1051],{"class":79},[45,3074,3076,3079,3081,3083,3086,3088],{"class":47,"line":3075},193,[45,3077,3078],{"class":1244}," border-left",[45,3080,1079],{"class":79},[45,3082,2253],{"class":161},[45,3084,3085],{"class":1266},"1px",[45,3087,1406],{"class":161},[45,3089,1138],{"class":79},[45,3091,3093,3096,3098,3100,3102,3104],{"class":47,"line":3092},194,[45,3094,3095],{"class":1244}," border-right",[45,3097,1079],{"class":79},[45,3099,2253],{"class":161},[45,3101,3085],{"class":1266},[45,3103,1406],{"class":161},[45,3105,1138],{"class":79},[45,3107,3109],{"class":47,"line":3108},195,[45,3110,2701],{"class":79},[45,3112,3114,3117],{"class":47,"line":3113},196,[45,3115,3116],{"class":1235}," footer",[45,3118,1051],{"class":79},[45,3120,3122,3124,3126,3128,3130,3132,3134],{"class":47,"line":3121},197,[45,3123,3000],{"class":1235},[45,3125,1079],{"class":79},[45,3127,1267],{"class":1266},[45,3129,1267],{"class":1266},[45,3131,3005],{"class":1266},[45,3133,3005],{"class":1266},[45,3135,1138],{"class":79},[45,3137,3139,3141,3143,3145,3147,3149,3151],{"class":47,"line":3138},198,[45,3140,3019],{"class":1244},[45,3142,1079],{"class":79},[45,3144,1267],{"class":1266},[45,3146,1267],{"class":1266},[45,3148,3005],{"class":1266},[45,3150,3005],{"class":1266},[45,3152,1138],{"class":79},[45,3154,3156,3158,3160,3162,3164],{"class":47,"line":3155},199,[45,3157,3037],{"class":1244},[45,3159,1079],{"class":79},[45,3161,2250],{"class":1266},[45,3163,2630],{"class":161},[45,3165,1138],{"class":79},[45,3167,3169,3172,3174,3176],{"class":47,"line":3168},200,[45,3170,3171],{"class":1244}," border-top",[45,3173,1079],{"class":79},[45,3175,3056],{"class":1266},[45,3177,1138],{"class":79},[45,3179,3181],{"class":47,"line":3180},201,[45,3182,2701],{"class":79},[45,3184,3186],{"class":47,"line":3185},202,[45,3187,1294],{"class":79},[45,3189,3191,3193,3195],{"class":47,"line":3190},203,[45,3192,165],{"class":79},[45,3194,1210],{"class":83},[45,3196,87],{"class":79},[14,3198,3199],{},"The directory structure now looks like this.",[35,3201,3206],{"className":3202,"code":3204,"language":3205,"meta":40},[3203],"language-text",".\n├── .nuxt\n│ ├── ...\n│ └── ...\n├── .output\n│ ├── ...\n│ └── ...\n├── node_modules\n│ ├── ...\n│ └── ...\n├── pages\n│ ├── about.vue\n│ ├── datenschutzerklaerung.vue\n│ ├── impressum.vue\n│ ├── index.vue\n│ └── links.vue\n├── public\n│ ├── favicon.ico\n│ └── robots.txt\n├── server\n│ └── tsconfig.json\n├── .gitignore\n├── app.vue\n├── nuxt.config.ts\n├── package-lock.json\n├── package.json\n├── README.md\n└── tsconfig.json\n","text",[42,3207,3204],{"__ignoreMap":40},[14,3209,3210,3211,3214,3215,3218,3219,3222],{},"I have left out the contents of the folders ",[42,3212,3213],{},".nuxt",", ",[42,3216,3217],{},".output"," and ",[42,3220,3221],{},"node_modules"," because the contents are generated by nuxt or npm and we should not edit or save anything here.",[24,3224,3226],{"id":3225},"extract-components","Extract components",[14,3228,3229,3230,3233,3234,3218,3237,3240,3241,3243],{},"Vue and therefore Nuxt is a component-based framework. So I created the folder ",[42,3231,3232],{},"components"," in the root directory and extracted the components ",[42,3235,3236],{},"pageFooter.vue",[42,3238,3239],{},"pageHeader.vue"," from the ",[42,3242,477],{},", which makes it much clearer.",[62,3245,3246],{},[65,3247,3236],{},[35,3249,3251],{"className":70,"code":3250,"language":72,"meta":40,"style":40},"\u003Ctemplate>\n \u003Cfooter>\n \u003Cspan>© by Melchior Jascha Kannengießer\u003C/span>\n \u003C/footer>\n\u003C/template>\n\n\u003Cstyle scoped>\nfooter {\n height: 38px;\n line-height: 38px;\n text-align: center;\n background: #415c7b;\n background: -moz-linear-gradient(top, #415c7b 0%, #273749 100%);\n background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #415c7b), color-stop(100%, #273749));\n background: -webkit-linear-gradient(top, #415c7b 0%, #273749 100%);\n background: -o-linear-gradient(top, #415c7b 0%, #273749 100%);\n background: -ms-linear-gradient(top, #415c7b 0%, #273749 100%);\n background: linear-gradient(to bottom, #415c7b 0%, #273749 100%);\n filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#415c7b', endColorstr='#273749',GradientType=0 );\n border-bottom: 1px solid black;\n}\n\n@media (min-width: 1024px) {\n footer {\n -webkit-border-radius: 0 0 20px 20px;\n border-radius: 0 0 20px 20px;\n border: 1px solid black;\n border-top: 0px;\n }\n}\n\n\u003C/style>\n",[42,3252,3253,3261,3269,3286,3294,3302,3306,3317,3323,3333,3343,3353,3365,3395,3445,3475,3505,3533,3563,3597,3609,3613,3617,3633,3639,3655,3671,3683,3693,3697,3701,3705],{"__ignoreMap":40},[45,3254,3255,3257,3259],{"class":47,"line":48},[45,3256,80],{"class":79},[45,3258,84],{"class":83},[45,3260,87],{"class":79},[45,3262,3263,3265,3267],{"class":47,"line":90},[45,3264,93],{"class":79},[45,3266,995],{"class":83},[45,3268,87],{"class":79},[45,3270,3271,3273,3275,3277,3280,3282,3284],{"class":47,"line":117},[45,3272,120],{"class":79},[45,3274,45],{"class":83},[45,3276,158],{"class":79},[45,3278,3279],{"class":161},"© by Melchior Jascha Kannengießer",[45,3281,165],{"class":79},[45,3283,45],{"class":83},[45,3285,87],{"class":79},[45,3287,3288,3290,3292],{"class":47,"line":139},[45,3289,270],{"class":79},[45,3291,995],{"class":83},[45,3293,87],{"class":79},[45,3295,3296,3298,3300],{"class":47,"line":172},[45,3297,165],{"class":79},[45,3299,84],{"class":83},[45,3301,87],{"class":79},[45,3303,3304],{"class":47,"line":182},[45,3305,186],{"emptyLinePlaceholder":185},[45,3307,3308,3310,3312,3315],{"class":47,"line":189},[45,3309,80],{"class":79},[45,3311,1210],{"class":83},[45,3313,3314],{"class":99}," scoped",[45,3316,87],{"class":79},[45,3318,3319,3321],{"class":47,"line":210},[45,3320,995],{"class":1235},[45,3322,1051],{"class":79},[45,3324,3325,3327,3329,3331],{"class":47,"line":240},[45,3326,2114],{"class":1244},[45,3328,1079],{"class":79},[45,3330,2324],{"class":1266},[45,3332,1138],{"class":79},[45,3334,3335,3337,3339,3341],{"class":47,"line":258},[45,3336,2332],{"class":1244},[45,3338,1079],{"class":79},[45,3340,2324],{"class":1266},[45,3342,1138],{"class":79},[45,3344,3345,3347,3349,3351],{"class":47,"line":267},[45,3346,2344],{"class":1244},[45,3348,1079],{"class":79},[45,3350,1455],{"class":161},[45,3352,1138],{"class":79},[45,3354,3355,3357,3359,3361,3363],{"class":47,"line":277},[45,3356,1488],{"class":1244},[45,3358,1079],{"class":79},[45,3360,1250],{"class":79},[45,3362,2203],{"class":161},[45,3364,1138],{"class":79},[45,3366,3367,3369,3371,3373,3375,3377,3379,3381,3383,3385,3387,3389,3391,3393],{"class":47,"line":790},[45,3368,1488],{"class":1244},[45,3370,1079],{"class":79},[45,3372,1508],{"class":1507},[45,3374,1511],{"class":79},[45,3376,1514],{"class":161},[45,3378,1283],{"class":79},[45,3380,1250],{"class":79},[45,3382,2383],{"class":161},[45,3384,1524],{"class":1266},[45,3386,1283],{"class":79},[45,3388,1250],{"class":79},[45,3390,2392],{"class":161},[45,3392,1554],{"class":1266},[45,3394,1557],{"class":79},[45,3396,3397,3399,3401,3403,3405,3407,3409,3411,3413,3415,3417,3419,3421,3423,3425,3427,3429,3431,3433,3435,3437,3439,3441,3443],{"class":47,"line":837},[45,3398,1488],{"class":1244},[45,3400,1079],{"class":79},[45,3402,2406],{"class":161},[45,3404,1511],{"class":79},[45,3406,2411],{"class":161},[45,3408,1283],{"class":79},[45,3410,2416],{"class":161},[45,3412,1283],{"class":79},[45,3414,2421],{"class":161},[45,3416,1283],{"class":79},[45,3418,2426],{"class":161},[45,3420,1511],{"class":79},[45,3422,1524],{"class":1266},[45,3424,1283],{"class":79},[45,3426,1250],{"class":79},[45,3428,2203],{"class":161},[45,3430,2439],{"class":79},[45,3432,2426],{"class":161},[45,3434,1511],{"class":79},[45,3436,1554],{"class":1266},[45,3438,1283],{"class":79},[45,3440,1250],{"class":79},[45,3442,2452],{"class":161},[45,3444,2455],{"class":79},[45,3446,3447,3449,3451,3453,3455,3457,3459,3461,3463,3465,3467,3469,3471,3473],{"class":47,"line":847},[45,3448,1488],{"class":1244},[45,3450,1079],{"class":79},[45,3452,1567],{"class":1507},[45,3454,1511],{"class":79},[45,3456,1514],{"class":161},[45,3458,1283],{"class":79},[45,3460,1250],{"class":79},[45,3462,2383],{"class":161},[45,3464,1524],{"class":1266},[45,3466,1283],{"class":79},[45,3468,1250],{"class":79},[45,3470,2392],{"class":161},[45,3472,1554],{"class":1266},[45,3474,1557],{"class":79},[45,3476,3477,3479,3481,3483,3485,3487,3489,3491,3493,3495,3497,3499,3501,3503],{"class":47,"line":856},[45,3478,1488],{"class":1244},[45,3480,1079],{"class":79},[45,3482,2496],{"class":1507},[45,3484,1511],{"class":79},[45,3486,1514],{"class":161},[45,3488,1283],{"class":79},[45,3490,1250],{"class":79},[45,3492,2383],{"class":161},[45,3494,1524],{"class":1266},[45,3496,1283],{"class":79},[45,3498,1250],{"class":79},[45,3500,2392],{"class":161},[45,3502,1554],{"class":1266},[45,3504,1557],{"class":79},[45,3506,3507,3509,3511,3513,3515,3517,3519,3521,3523,3525,3527,3529,3531],{"class":47,"line":862},[45,3508,1488],{"class":1244},[45,3510,1079],{"class":79},[45,3512,2528],{"class":161},[45,3514,1283],{"class":79},[45,3516,1250],{"class":79},[45,3518,2383],{"class":161},[45,3520,1524],{"class":1266},[45,3522,1283],{"class":79},[45,3524,1250],{"class":79},[45,3526,2392],{"class":161},[45,3528,1554],{"class":1266},[45,3530,2547],{"class":161},[45,3532,1138],{"class":79},[45,3534,3535,3537,3539,3541,3543,3545,3547,3549,3551,3553,3555,3557,3559,3561],{"class":47,"line":893},[45,3536,1488],{"class":1244},[45,3538,1079],{"class":79},[45,3540,1615],{"class":1507},[45,3542,1618],{"class":79},[45,3544,1621],{"class":161},[45,3546,1283],{"class":79},[45,3548,1250],{"class":79},[45,3550,2383],{"class":161},[45,3552,1524],{"class":1266},[45,3554,1283],{"class":79},[45,3556,1250],{"class":79},[45,3558,2392],{"class":161},[45,3560,1554],{"class":1266},[45,3562,1557],{"class":79},[45,3564,3565,3567,3569,3571,3573,3575,3577,3579,3581,3583,3585,3587,3589,3591,3593,3595],{"class":47,"line":906},[45,3566,1661],{"class":1244},[45,3568,1079],{"class":79},[45,3570,1666],{"class":161},[45,3572,1669],{"class":79},[45,3574,2594],{"class":109},[45,3576,1669],{"class":79},[45,3578,1283],{"class":79},[45,3580,1679],{"class":161},[45,3582,1669],{"class":79},[45,3584,2605],{"class":109},[45,3586,1669],{"class":79},[45,3588,1283],{"class":79},[45,3590,1691],{"class":161},[45,3592,1694],{"class":1266},[45,3594,1697],{"class":161},[45,3596,1138],{"class":79},[45,3598,3599,3601,3603,3605,3607],{"class":47,"line":919},[45,3600,2623],{"class":1244},[45,3602,1079],{"class":79},[45,3604,2250],{"class":1266},[45,3606,2630],{"class":161},[45,3608,1138],{"class":79},[45,3610,3611],{"class":47,"line":932},[45,3612,1294],{"class":79},[45,3614,3615],{"class":47,"line":941},[45,3616,186],{"emptyLinePlaceholder":185},[45,3618,3619,3621,3623,3625,3627,3629,3631],{"class":47,"line":950},[45,3620,2648],{"class":1044},[45,3622,2651],{"class":79},[45,3624,2813],{"class":1235},[45,3626,1079],{"class":79},[45,3628,1354],{"class":1266},[45,3630,2547],{"class":79},[45,3632,1051],{"class":79},[45,3634,3635,3637],{"class":47,"line":970},[45,3636,3116],{"class":1235},[45,3638,1051],{"class":79},[45,3640,3641,3643,3645,3647,3649,3651,3653],{"class":47,"line":981},[45,3642,3000],{"class":1235},[45,3644,1079],{"class":79},[45,3646,1267],{"class":1266},[45,3648,1267],{"class":1266},[45,3650,3005],{"class":1266},[45,3652,3005],{"class":1266},[45,3654,1138],{"class":79},[45,3656,3657,3659,3661,3663,3665,3667,3669],{"class":47,"line":990},[45,3658,3019],{"class":1244},[45,3660,1079],{"class":79},[45,3662,1267],{"class":1266},[45,3664,1267],{"class":1266},[45,3666,3005],{"class":1266},[45,3668,3005],{"class":1266},[45,3670,1138],{"class":79},[45,3672,3673,3675,3677,3679,3681],{"class":47,"line":1008},[45,3674,3037],{"class":1244},[45,3676,1079],{"class":79},[45,3678,2250],{"class":1266},[45,3680,2630],{"class":161},[45,3682,1138],{"class":79},[45,3684,3685,3687,3689,3691],{"class":47,"line":1017},[45,3686,3171],{"class":1244},[45,3688,1079],{"class":79},[45,3690,3056],{"class":1266},[45,3692,1138],{"class":79},[45,3694,3695],{"class":47,"line":1026},[45,3696,2701],{"class":79},[45,3698,3699],{"class":47,"line":1031},[45,3700,1294],{"class":79},[45,3702,3703],{"class":47,"line":1041},[45,3704,186],{"emptyLinePlaceholder":185},[45,3706,3707,3709,3711],{"class":47,"line":1054},[45,3708,165],{"class":79},[45,3710,1210],{"class":83},[45,3712,87],{"class":79},[62,3714,3715],{},[65,3716,3239],{},[35,3718,3720],{"className":70,"code":3719,"language":72,"meta":40,"style":40},"\u003Ctemplate>\n \u003Cheader class=\"pageHeader\">\n \u003Cdiv class=\"branding\">\n \u003CNuxtLink to=\"/\" class=\"logo\">mjk @ web\u003C/NuxtLink>\n \u003C/div>\n \u003C!-- Navigation -->\n \u003Cnav :class=\"{ active: isMenuOpen }\">\n \u003Cul class=\"mainNav\">\n \u003Cli>\u003CNuxtLink to=\"/about\" @click=\"hideMenu\">About\u003C/NuxtLink>\u003C/li>\n \u003Cli>\u003CNuxtLink to=\"/links\" @click=\"hideMenu\">Links\u003C/NuxtLink>\u003C/li>\n \u003Cli>\u003CNuxtLink to=\"/datenschutzerklaerung\" @click=\"hideMenu\">Datenschutz-Erklärung\u003C/NuxtLink>\u003C/li>\n \u003Cli>\u003CNuxtLink to=\"/impressum\" @click=\"hideMenu\">Impressum\u003C/NuxtLink>\u003C/li>\n \u003C/ul>\n \u003C/nav>\n \u003C!-- Hamburger Menu -->\n \u003Cdiv class=\"hamburgerMenu\" @click=\"toggleMenu\">\n \u003Cspan>\u003C/span>\n \u003Cspan>\u003C/span>\n \u003Cspan>\u003C/span>\n \u003C/div>\n \u003C/header>\n\u003C/template>\n\n\u003Cscript>\nexport default {\n data() {\n return {\n isMenuOpen: false,\n };\n },\n methods: {\n toggleMenu() {\n this.isMenuOpen = !this.isMenuOpen;\n },\n\n hideMenu() {\n this.isMenuOpen = false;\n },\n },\n};\n\u003C/script>\n\n\u003Cstyle scoped>\n.pageHeader {\n color: black;\n min-height: 56px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding-left: 1rem;\n padding-right: 1rem;\n background: #1e6695;\n background: -moz-linear-gradient(top, #1e6695 0%, #74aacc 33%, #79aecb 66%, #2f4a66 100%);\n background: -webkit-linear-gradient(top, #1e6695 0%, #74aacc 33%, #79aecb 66%, #2f4a66 100%);\n background: linear-gradient(to bottom, #1e6695 0%, #74aacc 33%, #79aecb 66%, #2f4a66 100%);\n filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#1e6695', endColorstr='#2f4a66',GradientType=0 );\n}\n\n/* Branding */\n.branding .logo {\n font-size: 1.5rem;\n text-decoration: none;\n color: black;\n}\n\n/* Navigation */\nnav {\n display: none;\n}\n.mainNav {\n display: flex;\n flex-direction: column;\n gap: 1rem;\n list-style: none;\n margin: 0;\n padding: 1rem;\n background-color: #819cbb;\n border-radius: 0.5rem;\n box-shadow: 0 4px 6px rgba(0, 0, 0, 0.3);\n}\n.mainNav li a {\n text-decoration: none;\n color: black;\n transition: color 0.3s;\n}\n\n/* Hamburger Menu */\n.hamburgerMenu {\n display: flex;\n flex-direction: column;\n gap: 0.3rem;\n cursor: pointer;\n}\n.hamburgerMenu span {\n width: 25px;\n height: 3px;\n background-color: black;\n}\n\n/* Aktives Menü (für Mobile) */\nnav.active {\n display: block;\n}\n\n@media (max-width: 599px) {\n .mainNav li:hover {\n background-color: #7E99B8;\n }\n nav.active {\n position: absolute;\n top: 46px; /* Direkt unter der Header-Höhe */\n right: 16px;\n width: 200px;\n z-index: 10;\n }\n}\n\n/* Media Queries für größere Bildschirme */\n@media (min-width: 600px) {\n .mainNav {\n flex-direction: row;\n justify-content: center;\n background: none;\n padding: 0;\n box-shadow: none;\n }\n nav {\n display: flex;\n }\n .hamburgerMenu {\n display: none;\n }\n}\n\n@media (min-width: 1024px) {\n .pageHeader {\n margin-top: 10px;\n -webkit-border-radius: 20px 20px 0 0;\n border-radius: 20px 20px 0 0;\n border: 1px solid black;\n border-bottom: 0px;\n }\n}\n\n\u003C/style>\n",[42,3721,3722,3730,3748,3766,3802,3810,3815,3833,3851,3895,3939,3983,4027,4035,4043,4048,4076,4088,4100,4112,4120,4128,4136,4140,4148,4156,4164,4170,4180,4184,4188,4196,4204,4218,4222,4226,4234,4246,4250,4254,4258,4266,4270,4280,4288,4298,4308,4318,4328,4338,4348,4358,4370,4416,4462,4508,4542,4546,4550,4554,4566,4576,4586,4596,4600,4604,4608,4614,4624,4628,4636,4646,4656,4666,4676,4686,4696,4708,4718,4750,4754,4766,4776,4786,4798,4802,4806,4810,4818,4828,4838,4848,4858,4862,4872,4882,4892,4902,4906,4910,4914,4924,4934,4938,4942,4958,4972,4984,4988,4998,5008,5020,5030,5040,5050,5054,5058,5062,5066,5082,5090,5100,5110,5120,5130,5140,5144,5150,5160,5164,5172,5182,5186,5190,5194,5210,5218,5228,5244,5260,5272,5282,5286,5290,5294],{"__ignoreMap":40},[45,3723,3724,3726,3728],{"class":47,"line":48},[45,3725,80],{"class":79},[45,3727,84],{"class":83},[45,3729,87],{"class":79},[45,3731,3732,3734,3736,3738,3740,3742,3744,3746],{"class":47,"line":90},[45,3733,93],{"class":79},[45,3735,123],{"class":83},[45,3737,100],{"class":99},[45,3739,103],{"class":79},[45,3741,106],{"class":79},[45,3743,525],{"class":109},[45,3745,106],{"class":79},[45,3747,87],{"class":79},[45,3749,3750,3752,3754,3756,3758,3760,3762,3764],{"class":47,"line":117},[45,3751,120],{"class":79},[45,3753,194],{"class":83},[45,3755,100],{"class":99},[45,3757,103],{"class":79},[45,3759,106],{"class":79},[45,3761,544],{"class":109},[45,3763,106],{"class":79},[45,3765,87],{"class":79},[45,3767,3768,3770,3772,3774,3776,3778,3780,3782,3784,3786,3788,3790,3792,3794,3796,3798,3800],{"class":47,"line":139},[45,3769,142],{"class":79},[45,3771,556],{"class":83},[45,3773,559],{"class":99},[45,3775,103],{"class":79},[45,3777,106],{"class":79},[45,3779,566],{"class":109},[45,3781,106],{"class":79},[45,3783,100],{"class":99},[45,3785,103],{"class":79},[45,3787,106],{"class":79},[45,3789,577],{"class":109},[45,3791,106],{"class":79},[45,3793,158],{"class":79},[45,3795,584],{"class":161},[45,3797,165],{"class":79},[45,3799,556],{"class":83},[45,3801,87],{"class":79},[45,3803,3804,3806,3808],{"class":47,"line":172},[45,3805,175],{"class":79},[45,3807,194],{"class":83},[45,3809,87],{"class":79},[45,3811,3812],{"class":47,"line":182},[45,3813,3814],{"class":604}," \u003C!-- Navigation -->\n",[45,3816,3817,3819,3821,3823,3825,3827,3829,3831],{"class":47,"line":189},[45,3818,120],{"class":79},[45,3820,612],{"class":83},[45,3822,615],{"class":99},[45,3824,103],{"class":79},[45,3826,106],{"class":79},[45,3828,622],{"class":109},[45,3830,106],{"class":79},[45,3832,87],{"class":79},[45,3834,3835,3837,3839,3841,3843,3845,3847,3849],{"class":47,"line":210},[45,3836,142],{"class":79},[45,3838,62],{"class":83},[45,3840,100],{"class":99},[45,3842,103],{"class":79},[45,3844,106],{"class":79},[45,3846,641],{"class":109},[45,3848,106],{"class":79},[45,3850,87],{"class":79},[45,3852,3853,3855,3857,3859,3861,3863,3865,3867,3869,3871,3873,3875,3877,3879,3881,3883,3885,3887,3889,3891,3893],{"class":47,"line":240},[45,3854,553],{"class":79},[45,3856,65],{"class":83},[45,3858,655],{"class":79},[45,3860,556],{"class":83},[45,3862,559],{"class":99},[45,3864,103],{"class":79},[45,3866,106],{"class":79},[45,3868,666],{"class":109},[45,3870,106],{"class":79},[45,3872,671],{"class":99},[45,3874,103],{"class":79},[45,3876,106],{"class":79},[45,3878,678],{"class":109},[45,3880,106],{"class":79},[45,3882,158],{"class":79},[45,3884,162],{"class":161},[45,3886,165],{"class":79},[45,3888,556],{"class":83},[45,3890,691],{"class":79},[45,3892,65],{"class":83},[45,3894,87],{"class":79},[45,3896,3897,3899,3901,3903,3905,3907,3909,3911,3913,3915,3917,3919,3921,3923,3925,3927,3929,3931,3933,3935,3937],{"class":47,"line":258},[45,3898,553],{"class":79},[45,3900,65],{"class":83},[45,3902,655],{"class":79},[45,3904,556],{"class":83},[45,3906,559],{"class":99},[45,3908,103],{"class":79},[45,3910,106],{"class":79},[45,3912,714],{"class":109},[45,3914,106],{"class":79},[45,3916,671],{"class":99},[45,3918,103],{"class":79},[45,3920,106],{"class":79},[45,3922,678],{"class":109},[45,3924,106],{"class":79},[45,3926,158],{"class":79},[45,3928,731],{"class":161},[45,3930,165],{"class":79},[45,3932,556],{"class":83},[45,3934,691],{"class":79},[45,3936,65],{"class":83},[45,3938,87],{"class":79},[45,3940,3941,3943,3945,3947,3949,3951,3953,3955,3957,3959,3961,3963,3965,3967,3969,3971,3973,3975,3977,3979,3981],{"class":47,"line":267},[45,3942,553],{"class":79},[45,3944,65],{"class":83},[45,3946,655],{"class":79},[45,3948,556],{"class":83},[45,3950,559],{"class":99},[45,3952,103],{"class":79},[45,3954,106],{"class":79},[45,3956,760],{"class":109},[45,3958,106],{"class":79},[45,3960,671],{"class":99},[45,3962,103],{"class":79},[45,3964,106],{"class":79},[45,3966,678],{"class":109},[45,3968,106],{"class":79},[45,3970,158],{"class":79},[45,3972,777],{"class":161},[45,3974,165],{"class":79},[45,3976,556],{"class":83},[45,3978,691],{"class":79},[45,3980,65],{"class":83},[45,3982,87],{"class":79},[45,3984,3985,3987,3989,3991,3993,3995,3997,3999,4001,4003,4005,4007,4009,4011,4013,4015,4017,4019,4021,4023,4025],{"class":47,"line":277},[45,3986,553],{"class":79},[45,3988,65],{"class":83},[45,3990,655],{"class":79},[45,3992,556],{"class":83},[45,3994,559],{"class":99},[45,3996,103],{"class":79},[45,3998,106],{"class":79},[45,4000,807],{"class":109},[45,4002,106],{"class":79},[45,4004,671],{"class":99},[45,4006,103],{"class":79},[45,4008,106],{"class":79},[45,4010,678],{"class":109},[45,4012,106],{"class":79},[45,4014,158],{"class":79},[45,4016,824],{"class":161},[45,4018,165],{"class":79},[45,4020,556],{"class":83},[45,4022,691],{"class":79},[45,4024,65],{"class":83},[45,4026,87],{"class":79},[45,4028,4029,4031,4033],{"class":47,"line":790},[45,4030,595],{"class":79},[45,4032,62],{"class":83},[45,4034,87],{"class":79},[45,4036,4037,4039,4041],{"class":47,"line":837},[45,4038,175],{"class":79},[45,4040,612],{"class":83},[45,4042,87],{"class":79},[45,4044,4045],{"class":47,"line":847},[45,4046,4047],{"class":604}," \u003C!-- Hamburger Menu -->\n",[45,4049,4050,4052,4054,4056,4058,4060,4062,4064,4066,4068,4070,4072,4074],{"class":47,"line":856},[45,4051,120],{"class":79},[45,4053,194],{"class":83},[45,4055,100],{"class":99},[45,4057,103],{"class":79},[45,4059,106],{"class":79},[45,4061,875],{"class":109},[45,4063,106],{"class":79},[45,4065,671],{"class":99},[45,4067,103],{"class":79},[45,4069,106],{"class":79},[45,4071,886],{"class":109},[45,4073,106],{"class":79},[45,4075,87],{"class":79},[45,4077,4078,4080,4082,4084,4086],{"class":47,"line":862},[45,4079,142],{"class":79},[45,4081,45],{"class":83},[45,4083,691],{"class":79},[45,4085,45],{"class":83},[45,4087,87],{"class":79},[45,4089,4090,4092,4094,4096,4098],{"class":47,"line":893},[45,4091,142],{"class":79},[45,4093,45],{"class":83},[45,4095,691],{"class":79},[45,4097,45],{"class":83},[45,4099,87],{"class":79},[45,4101,4102,4104,4106,4108,4110],{"class":47,"line":906},[45,4103,142],{"class":79},[45,4105,45],{"class":83},[45,4107,691],{"class":79},[45,4109,45],{"class":83},[45,4111,87],{"class":79},[45,4113,4114,4116,4118],{"class":47,"line":919},[45,4115,175],{"class":79},[45,4117,194],{"class":83},[45,4119,87],{"class":79},[45,4121,4122,4124,4126],{"class":47,"line":932},[45,4123,270],{"class":79},[45,4125,123],{"class":83},[45,4127,87],{"class":79},[45,4129,4130,4132,4134],{"class":47,"line":941},[45,4131,165],{"class":79},[45,4133,84],{"class":83},[45,4135,87],{"class":79},[45,4137,4138],{"class":47,"line":950},[45,4139,186],{"emptyLinePlaceholder":185},[45,4141,4142,4144,4146],{"class":47,"line":970},[45,4143,80],{"class":79},[45,4145,1036],{"class":83},[45,4147,87],{"class":79},[45,4149,4150,4152,4154],{"class":47,"line":981},[45,4151,1045],{"class":1044},[45,4153,1048],{"class":1044},[45,4155,1051],{"class":79},[45,4157,4158,4160,4162],{"class":47,"line":990},[45,4159,1057],{"class":83},[45,4161,1060],{"class":79},[45,4163,1051],{"class":79},[45,4165,4166,4168],{"class":47,"line":1008},[45,4167,1068],{"class":1044},[45,4169,1051],{"class":79},[45,4171,4172,4174,4176,4178],{"class":47,"line":1017},[45,4173,1076],{"class":83},[45,4175,1079],{"class":79},[45,4177,1083],{"class":1082},[45,4179,1086],{"class":79},[45,4181,4182],{"class":47,"line":1026},[45,4183,1092],{"class":79},[45,4185,4186],{"class":47,"line":1031},[45,4187,1098],{"class":79},[45,4189,4190,4192,4194],{"class":47,"line":1041},[45,4191,1104],{"class":83},[45,4193,1079],{"class":79},[45,4195,1051],{"class":79},[45,4197,4198,4200,4202],{"class":47,"line":1054},[45,4199,1114],{"class":83},[45,4201,1060],{"class":79},[45,4203,1051],{"class":79},[45,4205,4206,4208,4210,4212,4214,4216],{"class":47,"line":1065},[45,4207,1124],{"class":79},[45,4209,1127],{"class":161},[45,4211,1130],{"class":79},[45,4213,1133],{"class":79},[45,4215,1127],{"class":161},[45,4217,1138],{"class":79},[45,4219,4220],{"class":47,"line":1073},[45,4221,1144],{"class":79},[45,4223,4224],{"class":47,"line":1089},[45,4225,186],{"emptyLinePlaceholder":185},[45,4227,4228,4230,4232],{"class":47,"line":1095},[45,4229,1155],{"class":83},[45,4231,1060],{"class":79},[45,4233,1051],{"class":79},[45,4235,4236,4238,4240,4242,4244],{"class":47,"line":1101},[45,4237,1124],{"class":79},[45,4239,1127],{"class":161},[45,4241,1130],{"class":79},[45,4243,1083],{"class":1082},[45,4245,1138],{"class":79},[45,4247,4248],{"class":47,"line":1111},[45,4249,1144],{"class":79},[45,4251,4252],{"class":47,"line":1121},[45,4253,1098],{"class":79},[45,4255,4256],{"class":47,"line":1141},[45,4257,1188],{"class":79},[45,4259,4260,4262,4264],{"class":47,"line":1147},[45,4261,165],{"class":79},[45,4263,1036],{"class":83},[45,4265,87],{"class":79},[45,4267,4268],{"class":47,"line":1152},[45,4269,186],{"emptyLinePlaceholder":185},[45,4271,4272,4274,4276,4278],{"class":47,"line":1162},[45,4273,80],{"class":79},[45,4275,1210],{"class":83},[45,4277,3314],{"class":99},[45,4279,87],{"class":79},[45,4281,4282,4284,4286],{"class":47,"line":1175},[45,4283,1300],{"class":79},[45,4285,525],{"class":1235},[45,4287,1051],{"class":79},[45,4289,4290,4292,4294,4296],{"class":47,"line":1180},[45,4291,1401],{"class":1244},[45,4293,1079],{"class":79},[45,4295,1406],{"class":161},[45,4297,1138],{"class":79},[45,4299,4300,4302,4304,4306],{"class":47,"line":1185},[45,4301,1336],{"class":1244},[45,4303,1079],{"class":79},[45,4305,1418],{"class":1266},[45,4307,1138],{"class":79},[45,4309,4310,4312,4314,4316],{"class":47,"line":1191},[45,4311,1310],{"class":1244},[45,4313,1079],{"class":79},[45,4315,1315],{"class":161},[45,4317,1138],{"class":79},[45,4319,4320,4322,4324,4326],{"class":47,"line":1200},[45,4321,1437],{"class":1244},[45,4323,1079],{"class":79},[45,4325,1442],{"class":161},[45,4327,1138],{"class":79},[45,4329,4330,4332,4334,4336],{"class":47,"line":1205},[45,4331,1450],{"class":1244},[45,4333,1079],{"class":79},[45,4335,1455],{"class":161},[45,4337,1138],{"class":79},[45,4339,4340,4342,4344,4346],{"class":47,"line":1215},[45,4341,1463],{"class":1244},[45,4343,1079],{"class":79},[45,4345,1468],{"class":1266},[45,4347,1138],{"class":79},[45,4349,4350,4352,4354,4356],{"class":47,"line":1221},[45,4351,1476],{"class":1244},[45,4353,1079],{"class":79},[45,4355,1468],{"class":1266},[45,4357,1138],{"class":79},[45,4359,4360,4362,4364,4366,4368],{"class":47,"line":1226},[45,4361,1488],{"class":1244},[45,4363,1079],{"class":79},[45,4365,1250],{"class":79},[45,4367,1495],{"class":161},[45,4369,1138],{"class":79},[45,4371,4372,4374,4376,4378,4380,4382,4384,4386,4388,4390,4392,4394,4396,4398,4400,4402,4404,4406,4408,4410,4412,4414],{"class":47,"line":1232},[45,4373,1488],{"class":1244},[45,4375,1079],{"class":79},[45,4377,1508],{"class":1507},[45,4379,1511],{"class":79},[45,4381,1514],{"class":161},[45,4383,1283],{"class":79},[45,4385,1250],{"class":79},[45,4387,1521],{"class":161},[45,4389,1524],{"class":1266},[45,4391,1283],{"class":79},[45,4393,1250],{"class":79},[45,4395,1531],{"class":161},[45,4397,1534],{"class":1266},[45,4399,1283],{"class":79},[45,4401,1250],{"class":79},[45,4403,1541],{"class":161},[45,4405,1544],{"class":1266},[45,4407,1283],{"class":79},[45,4409,1250],{"class":79},[45,4411,1551],{"class":161},[45,4413,1554],{"class":1266},[45,4415,1557],{"class":79},[45,4417,4418,4420,4422,4424,4426,4428,4430,4432,4434,4436,4438,4440,4442,4444,4446,4448,4450,4452,4454,4456,4458,4460],{"class":47,"line":1241},[45,4419,1488],{"class":1244},[45,4421,1079],{"class":79},[45,4423,1567],{"class":1507},[45,4425,1511],{"class":79},[45,4427,1514],{"class":161},[45,4429,1283],{"class":79},[45,4431,1250],{"class":79},[45,4433,1521],{"class":161},[45,4435,1524],{"class":1266},[45,4437,1283],{"class":79},[45,4439,1250],{"class":79},[45,4441,1531],{"class":161},[45,4443,1534],{"class":1266},[45,4445,1283],{"class":79},[45,4447,1250],{"class":79},[45,4449,1541],{"class":161},[45,4451,1544],{"class":1266},[45,4453,1283],{"class":79},[45,4455,1250],{"class":79},[45,4457,1551],{"class":161},[45,4459,1554],{"class":1266},[45,4461,1557],{"class":79},[45,4463,4464,4466,4468,4470,4472,4474,4476,4478,4480,4482,4484,4486,4488,4490,4492,4494,4496,4498,4500,4502,4504,4506],{"class":47,"line":1258},[45,4465,1488],{"class":1244},[45,4467,1079],{"class":79},[45,4469,1615],{"class":1507},[45,4471,1618],{"class":79},[45,4473,1621],{"class":161},[45,4475,1283],{"class":79},[45,4477,1250],{"class":79},[45,4479,1521],{"class":161},[45,4481,1524],{"class":1266},[45,4483,1283],{"class":79},[45,4485,1250],{"class":79},[45,4487,1531],{"class":161},[45,4489,1534],{"class":1266},[45,4491,1283],{"class":79},[45,4493,1250],{"class":79},[45,4495,1541],{"class":161},[45,4497,1544],{"class":1266},[45,4499,1283],{"class":79},[45,4501,1250],{"class":79},[45,4503,1551],{"class":161},[45,4505,1554],{"class":1266},[45,4507,1557],{"class":79},[45,4509,4510,4512,4514,4516,4518,4520,4522,4524,4526,4528,4530,4532,4534,4536,4538,4540],{"class":47,"line":1272},[45,4511,1661],{"class":1244},[45,4513,1079],{"class":79},[45,4515,1666],{"class":161},[45,4517,1669],{"class":79},[45,4519,1672],{"class":109},[45,4521,1669],{"class":79},[45,4523,1283],{"class":79},[45,4525,1679],{"class":161},[45,4527,1669],{"class":79},[45,4529,1684],{"class":109},[45,4531,1669],{"class":79},[45,4533,1283],{"class":79},[45,4535,1691],{"class":161},[45,4537,1694],{"class":1266},[45,4539,1697],{"class":161},[45,4541,1138],{"class":79},[45,4543,4544],{"class":47,"line":1291},[45,4545,1294],{"class":79},[45,4547,4548],{"class":47,"line":1297},[45,4549,186],{"emptyLinePlaceholder":185},[45,4551,4552],{"class":47,"line":1307},[45,4553,1715],{"class":604},[45,4555,4556,4558,4560,4562,4564],{"class":47,"line":1320},[45,4557,1300],{"class":79},[45,4559,544],{"class":1235},[45,4561,1725],{"class":79},[45,4563,577],{"class":1235},[45,4565,1051],{"class":79},[45,4567,4568,4570,4572,4574],{"class":47,"line":1333},[45,4569,1735],{"class":1244},[45,4571,1079],{"class":79},[45,4573,1740],{"class":1266},[45,4575,1138],{"class":79},[45,4577,4578,4580,4582,4584],{"class":47,"line":1346},[45,4579,1748],{"class":1244},[45,4581,1079],{"class":79},[45,4583,1753],{"class":161},[45,4585,1138],{"class":79},[45,4587,4588,4590,4592,4594],{"class":47,"line":1359},[45,4589,1401],{"class":1244},[45,4591,1079],{"class":79},[45,4593,1406],{"class":161},[45,4595,1138],{"class":79},[45,4597,4598],{"class":47,"line":1372},[45,4599,1294],{"class":79},[45,4601,4602],{"class":47,"line":1384},[45,4603,186],{"emptyLinePlaceholder":185},[45,4605,4606],{"class":47,"line":1389},[45,4607,1782],{"class":604},[45,4609,4610,4612],{"class":47,"line":1398},[45,4611,612],{"class":1235},[45,4613,1051],{"class":79},[45,4615,4616,4618,4620,4622],{"class":47,"line":1411},[45,4617,1310],{"class":1244},[45,4619,1079],{"class":79},[45,4621,1753],{"class":161},[45,4623,1138],{"class":79},[45,4625,4626],{"class":47,"line":1423},[45,4627,1294],{"class":79},[45,4629,4630,4632,4634],{"class":47,"line":1434},[45,4631,1300],{"class":79},[45,4633,641],{"class":1235},[45,4635,1051],{"class":79},[45,4637,4638,4640,4642,4644],{"class":47,"line":1447},[45,4639,1310],{"class":1244},[45,4641,1079],{"class":79},[45,4643,1315],{"class":161},[45,4645,1138],{"class":79},[45,4647,4648,4650,4652,4654],{"class":47,"line":1460},[45,4649,1323],{"class":1244},[45,4651,1079],{"class":79},[45,4653,1328],{"class":161},[45,4655,1138],{"class":79},[45,4657,4658,4660,4662,4664],{"class":47,"line":1473},[45,4659,1842],{"class":1244},[45,4661,1079],{"class":79},[45,4663,1468],{"class":1266},[45,4665,1138],{"class":79},[45,4667,4668,4670,4672,4674],{"class":47,"line":1485},[45,4669,1854],{"class":1244},[45,4671,1079],{"class":79},[45,4673,1753],{"class":161},[45,4675,1138],{"class":79},[45,4677,4678,4680,4682,4684],{"class":47,"line":1500},[45,4679,1261],{"class":1244},[45,4681,1079],{"class":79},[45,4683,1267],{"class":1266},[45,4685,1138],{"class":79},[45,4687,4688,4690,4692,4694],{"class":47,"line":1560},[45,4689,1877],{"class":1244},[45,4691,1079],{"class":79},[45,4693,1468],{"class":1266},[45,4695,1138],{"class":79},[45,4697,4698,4700,4702,4704,4706],{"class":47,"line":1608},[45,4699,1245],{"class":1244},[45,4701,1079],{"class":79},[45,4703,1250],{"class":79},[45,4705,1895],{"class":161},[45,4707,1138],{"class":79},[45,4709,4710,4712,4714,4716],{"class":47,"line":1658},[45,4711,1903],{"class":1244},[45,4713,1079],{"class":79},[45,4715,1908],{"class":1266},[45,4717,1138],{"class":79},[45,4719,4720,4722,4724,4726,4728,4730,4732,4734,4736,4738,4740,4742,4744,4746,4748],{"class":47,"line":1702},[45,4721,1916],{"class":1244},[45,4723,1079],{"class":79},[45,4725,1267],{"class":1266},[45,4727,1923],{"class":1266},[45,4729,1926],{"class":1266},[45,4731,1929],{"class":1507},[45,4733,1511],{"class":79},[45,4735,1694],{"class":1266},[45,4737,1283],{"class":79},[45,4739,1267],{"class":1266},[45,4741,1283],{"class":79},[45,4743,1267],{"class":1266},[45,4745,1283],{"class":79},[45,4747,1946],{"class":1266},[45,4749,1557],{"class":79},[45,4751,4752],{"class":47,"line":1707},[45,4753,1294],{"class":79},[45,4755,4756,4758,4760,4762,4764],{"class":47,"line":1712},[45,4757,1300],{"class":79},[45,4759,641],{"class":1235},[45,4761,1963],{"class":1235},[45,4763,1966],{"class":1235},[45,4765,1051],{"class":79},[45,4767,4768,4770,4772,4774],{"class":47,"line":1718},[45,4769,1748],{"class":1244},[45,4771,1079],{"class":79},[45,4773,1753],{"class":161},[45,4775,1138],{"class":79},[45,4777,4778,4780,4782,4784],{"class":47,"line":1732},[45,4779,1401],{"class":1244},[45,4781,1079],{"class":79},[45,4783,1406],{"class":161},[45,4785,1138],{"class":79},[45,4787,4788,4790,4792,4794,4796],{"class":47,"line":1745},[45,4789,1996],{"class":1244},[45,4791,1079],{"class":79},[45,4793,2001],{"class":161},[45,4795,2004],{"class":1266},[45,4797,1138],{"class":79},[45,4799,4800],{"class":47,"line":1758},[45,4801,1294],{"class":79},[45,4803,4804],{"class":47,"line":1769},[45,4805,186],{"emptyLinePlaceholder":185},[45,4807,4808],{"class":47,"line":1774},[45,4809,2022],{"class":604},[45,4811,4812,4814,4816],{"class":47,"line":1779},[45,4813,1300],{"class":79},[45,4815,875],{"class":1235},[45,4817,1051],{"class":79},[45,4819,4820,4822,4824,4826],{"class":47,"line":1785},[45,4821,1310],{"class":1244},[45,4823,1079],{"class":79},[45,4825,1315],{"class":161},[45,4827,1138],{"class":79},[45,4829,4830,4832,4834,4836],{"class":47,"line":1792},[45,4831,1323],{"class":1244},[45,4833,1079],{"class":79},[45,4835,1328],{"class":161},[45,4837,1138],{"class":79},[45,4839,4840,4842,4844,4846],{"class":47,"line":1803},[45,4841,1842],{"class":1244},[45,4843,1079],{"class":79},[45,4845,2063],{"class":1266},[45,4847,1138],{"class":79},[45,4849,4850,4852,4854,4856],{"class":47,"line":1808},[45,4851,2071],{"class":1244},[45,4853,1079],{"class":79},[45,4855,2076],{"class":161},[45,4857,1138],{"class":79},[45,4859,4860],{"class":47,"line":1817},[45,4861,1294],{"class":79},[45,4863,4864,4866,4868,4870],{"class":47,"line":1828},[45,4865,1300],{"class":79},[45,4867,875],{"class":1235},[45,4869,2093],{"class":1235},[45,4871,1051],{"class":79},[45,4873,4874,4876,4878,4880],{"class":47,"line":1839},[45,4875,2101],{"class":1244},[45,4877,1079],{"class":79},[45,4879,2106],{"class":1266},[45,4881,1138],{"class":79},[45,4883,4884,4886,4888,4890],{"class":47,"line":1851},[45,4885,2114],{"class":1244},[45,4887,1079],{"class":79},[45,4889,2119],{"class":1266},[45,4891,1138],{"class":79},[45,4893,4894,4896,4898,4900],{"class":47,"line":1863},[45,4895,1245],{"class":1244},[45,4897,1079],{"class":79},[45,4899,1406],{"class":161},[45,4901,1138],{"class":79},[45,4903,4904],{"class":47,"line":1874},[45,4905,1294],{"class":79},[45,4907,4908],{"class":47,"line":1886},[45,4909,186],{"emptyLinePlaceholder":185},[45,4911,4912],{"class":47,"line":1900},[45,4913,2148],{"class":604},[45,4915,4916,4918,4920,4922],{"class":47,"line":1913},[45,4917,612],{"class":1235},[45,4919,1300],{"class":79},[45,4921,2158],{"class":1235},[45,4923,1051],{"class":79},[45,4925,4926,4928,4930,4932],{"class":47,"line":1951},[45,4927,1310],{"class":1244},[45,4929,1079],{"class":79},[45,4931,2170],{"class":161},[45,4933,1138],{"class":79},[45,4935,4936],{"class":47,"line":1956},[45,4937,1294],{"class":79},[45,4939,4940],{"class":47,"line":1971},[45,4941,186],{"emptyLinePlaceholder":185},[45,4943,4944,4946,4948,4950,4952,4954,4956],{"class":47,"line":1982},[45,4945,2648],{"class":1044},[45,4947,2651],{"class":79},[45,4949,2654],{"class":1235},[45,4951,1079],{"class":79},[45,4953,2659],{"class":1266},[45,4955,2547],{"class":79},[45,4957,1051],{"class":79},[45,4959,4960,4962,4964,4966,4968,4970],{"class":47,"line":1993},[45,4961,2669],{"class":79},[45,4963,641],{"class":1235},[45,4965,1963],{"class":1235},[45,4967,1079],{"class":79},[45,4969,2678],{"class":99},[45,4971,1051],{"class":79},[45,4973,4974,4976,4978,4980,4982],{"class":47,"line":2009},[45,4975,2686],{"class":1244},[45,4977,1079],{"class":79},[45,4979,1250],{"class":79},[45,4981,2693],{"class":161},[45,4983,1138],{"class":79},[45,4985,4986],{"class":47,"line":2014},[45,4987,2701],{"class":79},[45,4989,4990,4992,4994,4996],{"class":47,"line":2019},[45,4991,2707],{"class":1235},[45,4993,1300],{"class":79},[45,4995,2158],{"class":1235},[45,4997,1051],{"class":79},[45,4999,5000,5002,5004,5006],{"class":47,"line":2025},[45,5001,2719],{"class":1244},[45,5003,1079],{"class":79},[45,5005,2724],{"class":161},[45,5007,1138],{"class":79},[45,5009,5010,5012,5014,5016,5018],{"class":47,"line":2034},[45,5011,2732],{"class":1244},[45,5013,1079],{"class":79},[45,5015,2737],{"class":1266},[45,5017,2740],{"class":79},[45,5019,2743],{"class":604},[45,5021,5022,5024,5026,5028],{"class":47,"line":2045},[45,5023,2749],{"class":1244},[45,5025,1079],{"class":79},[45,5027,2754],{"class":1266},[45,5029,1138],{"class":79},[45,5031,5032,5034,5036,5038],{"class":47,"line":2056},[45,5033,2762],{"class":1244},[45,5035,1079],{"class":79},[45,5037,2767],{"class":1266},[45,5039,1138],{"class":79},[45,5041,5042,5044,5046,5048],{"class":47,"line":2068},[45,5043,2775],{"class":1244},[45,5045,1079],{"class":79},[45,5047,2780],{"class":1266},[45,5049,1138],{"class":79},[45,5051,5052],{"class":47,"line":2081},[45,5053,2701],{"class":79},[45,5055,5056],{"class":47,"line":2086},[45,5057,1294],{"class":79},[45,5059,5060],{"class":47,"line":2098},[45,5061,186],{"emptyLinePlaceholder":185},[45,5063,5064],{"class":47,"line":2111},[45,5065,2803],{"class":604},[45,5067,5068,5070,5072,5074,5076,5078,5080],{"class":47,"line":2124},[45,5069,2648],{"class":1044},[45,5071,2651],{"class":79},[45,5073,2813],{"class":1235},[45,5075,1079],{"class":79},[45,5077,2818],{"class":1266},[45,5079,2547],{"class":79},[45,5081,1051],{"class":79},[45,5083,5084,5086,5088],{"class":47,"line":2135},[45,5085,2669],{"class":79},[45,5087,641],{"class":1235},[45,5089,1051],{"class":79},[45,5091,5092,5094,5096,5098],{"class":47,"line":2140},[45,5093,2837],{"class":1244},[45,5095,1079],{"class":79},[45,5097,2842],{"class":161},[45,5099,1138],{"class":79},[45,5101,5102,5104,5106,5108],{"class":47,"line":2145},[45,5103,2850],{"class":1244},[45,5105,1079],{"class":79},[45,5107,1455],{"class":161},[45,5109,1138],{"class":79},[45,5111,5112,5114,5116,5118],{"class":47,"line":2151},[45,5113,2862],{"class":1244},[45,5115,1079],{"class":79},[45,5117,1753],{"class":161},[45,5119,1138],{"class":79},[45,5121,5122,5124,5126,5128],{"class":47,"line":2163},[45,5123,2874],{"class":1244},[45,5125,1079],{"class":79},[45,5127,1267],{"class":1266},[45,5129,1138],{"class":79},[45,5131,5132,5134,5136,5138],{"class":47,"line":2175},[45,5133,2886],{"class":1244},[45,5135,1079],{"class":79},[45,5137,1753],{"class":161},[45,5139,1138],{"class":79},[45,5141,5142],{"class":47,"line":2180},[45,5143,2701],{"class":79},[45,5145,5146,5148],{"class":47,"line":2185},[45,5147,2707],{"class":1235},[45,5149,1051],{"class":79},[45,5151,5152,5154,5156,5158],{"class":47,"line":2194},[45,5153,2910],{"class":1244},[45,5155,1079],{"class":79},[45,5157,1315],{"class":161},[45,5159,1138],{"class":79},[45,5161,5162],{"class":47,"line":2208},[45,5163,2701],{"class":79},[45,5165,5166,5168,5170],{"class":47,"line":2220},[45,5167,2669],{"class":79},[45,5169,875],{"class":1235},[45,5171,1051],{"class":79},[45,5173,5174,5176,5178,5180],{"class":47,"line":2225},[45,5175,2910],{"class":1244},[45,5177,1079],{"class":79},[45,5179,1753],{"class":161},[45,5181,1138],{"class":79},[45,5183,5184],{"class":47,"line":2230},[45,5185,2701],{"class":79},[45,5187,5188],{"class":47,"line":2242},[45,5189,1294],{"class":79},[45,5191,5192],{"class":47,"line":2264},[45,5193,186],{"emptyLinePlaceholder":185},[45,5195,5196,5198,5200,5202,5204,5206,5208],{"class":47,"line":2276},[45,5197,2648],{"class":1044},[45,5199,2651],{"class":79},[45,5201,2813],{"class":1235},[45,5203,1079],{"class":79},[45,5205,1354],{"class":1266},[45,5207,2547],{"class":79},[45,5209,1051],{"class":79},[45,5211,5212,5214,5216],{"class":47,"line":2289},[45,5213,2669],{"class":79},[45,5215,525],{"class":1235},[45,5217,1051],{"class":79},[45,5219,5220,5222,5224,5226],{"class":47,"line":2300},[45,5221,2988],{"class":1244},[45,5223,1079],{"class":79},[45,5225,2271],{"class":1266},[45,5227,1138],{"class":79},[45,5229,5230,5232,5234,5236,5238,5240,5242],{"class":47,"line":2305},[45,5231,3000],{"class":1235},[45,5233,1079],{"class":79},[45,5235,3005],{"class":1266},[45,5237,3005],{"class":1266},[45,5239,1267],{"class":1266},[45,5241,1267],{"class":1266},[45,5243,1138],{"class":79},[45,5245,5246,5248,5250,5252,5254,5256,5258],{"class":47,"line":2310},[45,5247,3019],{"class":1244},[45,5249,1079],{"class":79},[45,5251,3005],{"class":1266},[45,5253,3005],{"class":1266},[45,5255,1267],{"class":1266},[45,5257,1267],{"class":1266},[45,5259,1138],{"class":79},[45,5261,5262,5264,5266,5268,5270],{"class":47,"line":2317},[45,5263,3037],{"class":1244},[45,5265,1079],{"class":79},[45,5267,2250],{"class":1266},[45,5269,2630],{"class":161},[45,5271,1138],{"class":79},[45,5273,5274,5276,5278,5280],{"class":47,"line":2329},[45,5275,3051],{"class":1244},[45,5277,1079],{"class":79},[45,5279,3056],{"class":1266},[45,5281,1138],{"class":79},[45,5283,5284],{"class":47,"line":2341},[45,5285,2701],{"class":79},[45,5287,5288],{"class":47,"line":2353},[45,5289,1294],{"class":79},[45,5291,5292],{"class":47,"line":2366},[45,5293,186],{"emptyLinePlaceholder":185},[45,5295,5296,5298,5300],{"class":47,"line":2399},[45,5297,165],{"class":79},[45,5299,1210],{"class":83},[45,5301,87],{"class":79},[62,5303,5304],{},[65,5305,477],{},[35,5307,5309],{"className":70,"code":5308,"language":72,"meta":40,"style":40},"\u003Ctemplate>\n \u003Cdiv class=\"pageWrapper\">\n \u003CpageHeader />\n \u003Cdiv class=\"pageContent\">\n \u003CNuxtPage />\n \u003C/div>\n \u003CpageFooter />\n \u003C/div>\n\u003C/template>\n\n\u003Cstyle>\n/* Mobile-First Design */\n\n/* Basic-Styling for mobile Devices */\nbody {\n background-color: #213c5b;\n margin: 0;\n font-family: Arial, sans-serif;\n}\n.pageWrapper {\n display: flex;\n flex-direction: column;\n min-height: 100vh;\n max-width: 1024px;\n margin-right: auto;\n margin-left: auto;\n}\n\n.pageContent {\n background-color: #415c7b;\n padding: 15px;\n}\n\n.pageContent article {\n border: 1px solid #000;\n border-radius: 10px;\n background-color: #819cbb;\n padding: 15px;\n}\n\n/* Media Queries für größere Bildschirme */\n@media (min-width: 1024px) {\n .pageContent {\n border-left: solid 1px black;\n border-right: solid 1px black;\n }\n}\n\u003C/style>\n",[42,5310,5311,5319,5337,5345,5363,5371,5379,5388,5396,5404,5408,5416,5420,5424,5428,5434,5446,5456,5470,5474,5482,5492,5502,5512,5522,5532,5542,5546,5550,5558,5570,5580,5584,5588,5598,5614,5624,5636,5646,5650,5654,5658,5674,5682,5696,5710,5714,5718],{"__ignoreMap":40},[45,5312,5313,5315,5317],{"class":47,"line":48},[45,5314,80],{"class":79},[45,5316,84],{"class":83},[45,5318,87],{"class":79},[45,5320,5321,5323,5325,5327,5329,5331,5333,5335],{"class":47,"line":90},[45,5322,93],{"class":79},[45,5324,194],{"class":83},[45,5326,100],{"class":99},[45,5328,103],{"class":79},[45,5330,106],{"class":79},[45,5332,506],{"class":109},[45,5334,106],{"class":79},[45,5336,87],{"class":79},[45,5338,5339,5341,5343],{"class":47,"line":117},[45,5340,120],{"class":79},[45,5342,525],{"class":83},[45,5344,978],{"class":79},[45,5346,5347,5349,5351,5353,5355,5357,5359,5361],{"class":47,"line":139},[45,5348,120],{"class":79},[45,5350,194],{"class":83},[45,5352,100],{"class":99},[45,5354,103],{"class":79},[45,5356,106],{"class":79},[45,5358,963],{"class":109},[45,5360,106],{"class":79},[45,5362,87],{"class":79},[45,5364,5365,5367,5369],{"class":47,"line":172},[45,5366,142],{"class":79},[45,5368,975],{"class":83},[45,5370,978],{"class":79},[45,5372,5373,5375,5377],{"class":47,"line":182},[45,5374,175],{"class":79},[45,5376,194],{"class":83},[45,5378,87],{"class":79},[45,5380,5381,5383,5386],{"class":47,"line":189},[45,5382,120],{"class":79},[45,5384,5385],{"class":83},"pageFooter",[45,5387,978],{"class":79},[45,5389,5390,5392,5394],{"class":47,"line":210},[45,5391,270],{"class":79},[45,5393,194],{"class":83},[45,5395,87],{"class":79},[45,5397,5398,5400,5402],{"class":47,"line":240},[45,5399,165],{"class":79},[45,5401,84],{"class":83},[45,5403,87],{"class":79},[45,5405,5406],{"class":47,"line":258},[45,5407,186],{"emptyLinePlaceholder":185},[45,5409,5410,5412,5414],{"class":47,"line":267},[45,5411,80],{"class":79},[45,5413,1210],{"class":83},[45,5415,87],{"class":79},[45,5417,5418],{"class":47,"line":277},[45,5419,1218],{"class":604},[45,5421,5422],{"class":47,"line":790},[45,5423,186],{"emptyLinePlaceholder":185},[45,5425,5426],{"class":47,"line":837},[45,5427,1229],{"class":604},[45,5429,5430,5432],{"class":47,"line":847},[45,5431,1236],{"class":1235},[45,5433,1051],{"class":79},[45,5435,5436,5438,5440,5442,5444],{"class":47,"line":856},[45,5437,1245],{"class":1244},[45,5439,1079],{"class":79},[45,5441,1250],{"class":79},[45,5443,1253],{"class":161},[45,5445,1138],{"class":79},[45,5447,5448,5450,5452,5454],{"class":47,"line":862},[45,5449,1261],{"class":1244},[45,5451,1079],{"class":79},[45,5453,1267],{"class":1266},[45,5455,1138],{"class":79},[45,5457,5458,5460,5462,5464,5466,5468],{"class":47,"line":893},[45,5459,1275],{"class":1244},[45,5461,1079],{"class":79},[45,5463,1280],{"class":161},[45,5465,1283],{"class":79},[45,5467,1286],{"class":161},[45,5469,1138],{"class":79},[45,5471,5472],{"class":47,"line":906},[45,5473,1294],{"class":79},[45,5475,5476,5478,5480],{"class":47,"line":919},[45,5477,1300],{"class":79},[45,5479,506],{"class":1235},[45,5481,1051],{"class":79},[45,5483,5484,5486,5488,5490],{"class":47,"line":932},[45,5485,1310],{"class":1244},[45,5487,1079],{"class":79},[45,5489,1315],{"class":161},[45,5491,1138],{"class":79},[45,5493,5494,5496,5498,5500],{"class":47,"line":941},[45,5495,1323],{"class":1244},[45,5497,1079],{"class":79},[45,5499,1328],{"class":161},[45,5501,1138],{"class":79},[45,5503,5504,5506,5508,5510],{"class":47,"line":950},[45,5505,1336],{"class":1244},[45,5507,1079],{"class":79},[45,5509,1341],{"class":1266},[45,5511,1138],{"class":79},[45,5513,5514,5516,5518,5520],{"class":47,"line":970},[45,5515,1349],{"class":1244},[45,5517,1079],{"class":79},[45,5519,1354],{"class":1266},[45,5521,1138],{"class":79},[45,5523,5524,5526,5528,5530],{"class":47,"line":981},[45,5525,1362],{"class":1244},[45,5527,1079],{"class":79},[45,5529,1367],{"class":161},[45,5531,1138],{"class":79},[45,5533,5534,5536,5538,5540],{"class":47,"line":990},[45,5535,1375],{"class":1244},[45,5537,1079],{"class":79},[45,5539,1367],{"class":161},[45,5541,1138],{"class":79},[45,5543,5544],{"class":47,"line":1008},[45,5545,1294],{"class":79},[45,5547,5548],{"class":47,"line":1017},[45,5549,186],{"emptyLinePlaceholder":185},[45,5551,5552,5554,5556],{"class":47,"line":1026},[45,5553,1300],{"class":79},[45,5555,963],{"class":1235},[45,5557,1051],{"class":79},[45,5559,5560,5562,5564,5566,5568],{"class":47,"line":1031},[45,5561,1245],{"class":1244},[45,5563,1079],{"class":79},[45,5565,1250],{"class":79},[45,5567,2203],{"class":161},[45,5569,1138],{"class":79},[45,5571,5572,5574,5576,5578],{"class":47,"line":1041},[45,5573,1877],{"class":1244},[45,5575,1079],{"class":79},[45,5577,2215],{"class":1266},[45,5579,1138],{"class":79},[45,5581,5582],{"class":47,"line":1054},[45,5583,1294],{"class":79},[45,5585,5586],{"class":47,"line":1065},[45,5587,186],{"emptyLinePlaceholder":185},[45,5589,5590,5592,5594,5596],{"class":47,"line":1073},[45,5591,1300],{"class":79},[45,5593,963],{"class":1235},[45,5595,2237],{"class":1235},[45,5597,1051],{"class":79},[45,5599,5600,5602,5604,5606,5608,5610,5612],{"class":47,"line":1089},[45,5601,2245],{"class":1244},[45,5603,1079],{"class":79},[45,5605,2250],{"class":1266},[45,5607,2253],{"class":161},[45,5609,2256],{"class":79},[45,5611,2259],{"class":161},[45,5613,1138],{"class":79},[45,5615,5616,5618,5620,5622],{"class":47,"line":1095},[45,5617,1903],{"class":1244},[45,5619,1079],{"class":79},[45,5621,2271],{"class":1266},[45,5623,1138],{"class":79},[45,5625,5626,5628,5630,5632,5634],{"class":47,"line":1101},[45,5627,1245],{"class":1244},[45,5629,1079],{"class":79},[45,5631,1250],{"class":79},[45,5633,1895],{"class":161},[45,5635,1138],{"class":79},[45,5637,5638,5640,5642,5644],{"class":47,"line":1111},[45,5639,1877],{"class":1244},[45,5641,1079],{"class":79},[45,5643,2215],{"class":1266},[45,5645,1138],{"class":79},[45,5647,5648],{"class":47,"line":1121},[45,5649,1294],{"class":79},[45,5651,5652],{"class":47,"line":1141},[45,5653,186],{"emptyLinePlaceholder":185},[45,5655,5656],{"class":47,"line":1147},[45,5657,2803],{"class":604},[45,5659,5660,5662,5664,5666,5668,5670,5672],{"class":47,"line":1152},[45,5661,2648],{"class":1044},[45,5663,2651],{"class":79},[45,5665,2813],{"class":1235},[45,5667,1079],{"class":79},[45,5669,1354],{"class":1266},[45,5671,2547],{"class":79},[45,5673,1051],{"class":79},[45,5675,5676,5678,5680],{"class":47,"line":1162},[45,5677,2669],{"class":79},[45,5679,963],{"class":1235},[45,5681,1051],{"class":79},[45,5683,5684,5686,5688,5690,5692,5694],{"class":47,"line":1175},[45,5685,3078],{"class":1244},[45,5687,1079],{"class":79},[45,5689,2253],{"class":161},[45,5691,3085],{"class":1266},[45,5693,1406],{"class":161},[45,5695,1138],{"class":79},[45,5697,5698,5700,5702,5704,5706,5708],{"class":47,"line":1180},[45,5699,3095],{"class":1244},[45,5701,1079],{"class":79},[45,5703,2253],{"class":161},[45,5705,3085],{"class":1266},[45,5707,1406],{"class":161},[45,5709,1138],{"class":79},[45,5711,5712],{"class":47,"line":1185},[45,5713,2701],{"class":79},[45,5715,5716],{"class":47,"line":1191},[45,5717,1294],{"class":79},[45,5719,5720,5722,5724],{"class":47,"line":1200},[45,5721,165],{"class":79},[45,5723,1210],{"class":83},[45,5725,87],{"class":79},[24,5727,5729],{"id":5728},"nuxt-content","Nuxt-Content",[14,5731,5732],{},"Nuxt Content is a Nuxt module that enables us to render our Markdown posts from the Jekyll project.",[14,5734,5735],{},"First I had to install the module",[35,5737,5739],{"className":37,"code":5738,"language":39,"meta":40,"style":40},"npm install --save-dev @nuxt/content\n",[42,5740,5741],{"__ignoreMap":40},[45,5742,5743],{"class":47,"line":48},[45,5744,5738],{},[14,5746,5747],{},"and add it to the Modules array in nuxt.config.ts in the root directory",[35,5749,5753],{"className":5750,"code":5751,"language":5752,"meta":40,"style":40},"language-ts shiki shiki-themes material-theme","export default defineNuxtConfig({\n ...\n modules: ['@nuxt/content']\n ...\n})\n","ts",[42,5754,5755,5769,5774,5789,5793],{"__ignoreMap":40},[45,5756,5757,5759,5761,5764,5766],{"class":47,"line":48},[45,5758,1045],{"class":1044},[45,5760,1048],{"class":1044},[45,5762,5763],{"class":1507}," defineNuxtConfig",[45,5765,1511],{"class":161},[45,5767,5768],{"class":79},"{\n",[45,5770,5771],{"class":47,"line":90},[45,5772,5773],{"class":79}," ...\n",[45,5775,5776,5779,5781,5784,5786],{"class":47,"line":117},[45,5777,5778],{"class":161}," modules: [",[45,5780,1669],{"class":79},[45,5782,5783],{"class":109},"@nuxt/content",[45,5785,1669],{"class":79},[45,5787,5788],{"class":161},"]\n",[45,5790,5791],{"class":47,"line":139},[45,5792,5773],{"class":79},[45,5794,5795,5798],{"class":47,"line":172},[45,5796,5797],{"class":79},"}",[45,5799,5800],{"class":161},")\n",[14,5802,5803,5804,5807,5808,5811,5812,5815],{},"Then I created a directory called ",[42,5805,5806],{},"content"," in the root directory of my project and inside it a directory called ",[42,5809,5810],{},"blog",". All files from the ",[42,5813,5814],{},"_posts"," directory of the Jekyll project now go into this directory.",[14,5817,5818,5819,5822,5823,5826],{},"In order to render the posts, however, a \"catchAllRoute\" is required, i.e. a file with the name ",[42,5820,5821],{},"[...slug].vue"," in the Pages directory (more precisely in the blog subdirectory) which only contains the template with ",[42,5824,5825],{},"\u003CContentDoc />"," which loads and renders the content of the Markdown files.",[62,5828,5829],{},[65,5830,5831,5834],{},[45,5832,5833],{},"...slug",".vue",[35,5836,5838],{"className":70,"code":5837,"language":72,"meta":40,"style":40},"\u003Ctemplate>\n \u003Carticle>\n \u003CContentDoc />\n \u003C/article>\n\u003C/template>\n",[42,5839,5840,5848,5856,5865,5873],{"__ignoreMap":40},[45,5841,5842,5844,5846],{"class":47,"line":48},[45,5843,80],{"class":79},[45,5845,84],{"class":83},[45,5847,87],{"class":79},[45,5849,5850,5852,5854],{"class":47,"line":90},[45,5851,93],{"class":79},[45,5853,96],{"class":83},[45,5855,87],{"class":79},[45,5857,5858,5860,5863],{"class":47,"line":117},[45,5859,120],{"class":79},[45,5861,5862],{"class":83},"ContentDoc",[45,5864,978],{"class":79},[45,5866,5867,5869,5871],{"class":47,"line":139},[45,5868,270],{"class":79},[45,5870,96],{"class":83},[45,5872,87],{"class":79},[45,5874,5875,5877,5879],{"class":47,"line":172},[45,5876,165],{"class":79},[45,5878,84],{"class":83},[45,5880,87],{"class":79},[24,5882,5884],{"id":5883},"tailwind","Tailwind",[14,5886,5887],{},"the next step was to install the tailwind module",[35,5889,5891],{"className":37,"code":5890,"language":39,"meta":40,"style":40},"npm install --save-dev @nuxtjs/tailwindcss\n",[42,5892,5893],{"__ignoreMap":40},[45,5894,5895],{"class":47,"line":48},[45,5896,5890],{},[14,5898,5899],{},"and add it to the nuxtConfig",[35,5901,5903],{"className":5750,"code":5902,"language":5752,"meta":40,"style":40},"export default defineNuxtConfig({\n ...\n modules: [\n '@nuxt/content',\n '@nuxtjs/tailwindcss'\n ]\n ...\n})\n",[42,5904,5905,5917,5921,5926,5937,5947,5952,5956],{"__ignoreMap":40},[45,5906,5907,5909,5911,5913,5915],{"class":47,"line":48},[45,5908,1045],{"class":1044},[45,5910,1048],{"class":1044},[45,5912,5763],{"class":1507},[45,5914,1511],{"class":161},[45,5916,5768],{"class":79},[45,5918,5919],{"class":47,"line":90},[45,5920,5773],{"class":79},[45,5922,5923],{"class":47,"line":117},[45,5924,5925],{"class":161}," modules: [\n",[45,5927,5928,5931,5933,5935],{"class":47,"line":139},[45,5929,5930],{"class":79}," '",[45,5932,5783],{"class":109},[45,5934,1669],{"class":79},[45,5936,1086],{"class":79},[45,5938,5939,5941,5944],{"class":47,"line":172},[45,5940,5930],{"class":79},[45,5942,5943],{"class":109},"@nuxtjs/tailwindcss",[45,5945,5946],{"class":79},"'\n",[45,5948,5949],{"class":47,"line":182},[45,5950,5951],{"class":161}," ]\n",[45,5953,5954],{"class":47,"line":189},[45,5955,5773],{"class":79},[45,5957,5958,5960],{"class":47,"line":210},[45,5959,5797],{"class":79},[45,5961,5800],{"class":161},[14,5963,5964],{},"In order for the markdown to be rendered correctly, tailwindcss-typography was required.",[14,5966,5967],{},"I istalled it by",[35,5969,5971],{"className":37,"code":5970,"language":39,"meta":40,"style":40},"npm install -D @tailwindcss/typography\n",[42,5972,5973],{"__ignoreMap":40},[45,5974,5975],{"class":47,"line":48},[45,5976,5970],{},[14,5978,5979,5980,5983],{},"to enable it i added a ",[42,5981,5982],{},"tailwind.config.ts"," to the root directory and added the typography-plugin.",[35,5985,5987],{"className":5750,"code":5986,"language":5752,"meta":40,"style":40},"module.exports = {\n plugins: [\n require('@tailwindcss/typography')\n ]\n}\n",[42,5988,5989,5998,6008,6024,6028],{"__ignoreMap":40},[45,5990,5991,5994,5996],{"class":47,"line":48},[45,5992,5993],{"class":79},"module.exports",[45,5995,1130],{"class":79},[45,5997,1051],{"class":79},[45,5999,6000,6003,6005],{"class":47,"line":90},[45,6001,6002],{"class":83}," plugins",[45,6004,1079],{"class":79},[45,6006,6007],{"class":161}," [\n",[45,6009,6010,6013,6015,6017,6020,6022],{"class":47,"line":117},[45,6011,6012],{"class":1507}," require",[45,6014,1511],{"class":161},[45,6016,1669],{"class":79},[45,6018,6019],{"class":109},"@tailwindcss/typography",[45,6021,1669],{"class":79},[45,6023,5800],{"class":161},[45,6025,6026],{"class":47,"line":139},[45,6027,5951],{"class":161},[45,6029,6030],{"class":47,"line":172},[45,6031,1294],{"class":79},[14,6033,6034,6035,6038,6039,6041,6042,6045,6046,6048],{},"and in the catchAllRoute for the blog-posts I added the ",[42,6036,6037],{},"prose"," class to ",[42,6040,96],{}," and added a ",[42,6043,6044],{},"max-width: 992px!important;"," to override the one from the ",[42,6047,6037],{}," class of tailwind-typography for now.",[24,6050,6052],{"id":6051},"copy-and-adjust-content","Copy and adjust content",[14,6054,6055],{},"Finally, I was able to copy the remaining Markdown files from the Jekyll project into the content directory. Some of the Markdown files still contained HTML, so I quickly converted them into pure Markdown.",[14,6057,6058,6059,6062,6063,6065],{},"In order to be able to render everything, I then had to create the corresponding Vue files in the pages directory and read in and render the Markdown files with ",[42,6060,6061],{},"\u003CContentDoc>",". I'm just using ",[42,6064,67],{}," as an example here, since the other files basically look exactly the same.",[62,6067,6068],{},[65,6069,67],{},[35,6071,6073],{"className":70,"code":6072,"language":72,"meta":40,"style":40},"\u003Ctemplate>\n \u003Carticle class=\"prose\">\n \u003CContentDoc path=\"/about\" />\n \u003C/article>\n\u003C/template>\n",[42,6074,6075,6083,6101,6120,6128],{"__ignoreMap":40},[45,6076,6077,6079,6081],{"class":47,"line":48},[45,6078,80],{"class":79},[45,6080,84],{"class":83},[45,6082,87],{"class":79},[45,6084,6085,6087,6089,6091,6093,6095,6097,6099],{"class":47,"line":90},[45,6086,93],{"class":79},[45,6088,96],{"class":83},[45,6090,100],{"class":99},[45,6092,103],{"class":79},[45,6094,106],{"class":79},[45,6096,6037],{"class":109},[45,6098,106],{"class":79},[45,6100,87],{"class":79},[45,6102,6103,6105,6107,6110,6112,6114,6116,6118],{"class":47,"line":117},[45,6104,120],{"class":79},[45,6106,5862],{"class":83},[45,6108,6109],{"class":99}," path",[45,6111,103],{"class":79},[45,6113,106],{"class":79},[45,6115,666],{"class":109},[45,6117,106],{"class":79},[45,6119,978],{"class":79},[45,6121,6122,6124,6126],{"class":47,"line":139},[45,6123,270],{"class":79},[45,6125,96],{"class":83},[45,6127,87],{"class":79},[45,6129,6130,6132,6134],{"class":47,"line":172},[45,6131,165],{"class":79},[45,6133,84],{"class":83},[45,6135,87],{"class":79},[14,6137,6138,6139,6142,6143,6146,6147,6150],{},"I then copied the directory ",[42,6140,6141],{},"icons"," from the directory ",[42,6144,6145],{},"_assets"," in the Jekyll project to ",[42,6148,6149],{},"public/assets/"," in the Nuxt project so that the social media icons are also displayed.",[24,6152,6154],{"id":6153},"query-and-render-blog-posts","Query and Render Blog-Posts",[14,6156,6157],{},"On the homepage, which until now was just a dummy with the template",[35,6159,6160],{"className":70,"code":385,"language":72,"meta":40,"style":40},[42,6161,6162,6170,6178,6182,6190],{"__ignoreMap":40},[45,6163,6164,6166,6168],{"class":47,"line":48},[45,6165,80],{"class":79},[45,6167,84],{"class":83},[45,6169,87],{"class":79},[45,6171,6172,6174,6176],{"class":47,"line":90},[45,6173,93],{"class":79},[45,6175,194],{"class":83},[45,6177,87],{"class":79},[45,6179,6180],{"class":47,"line":117},[45,6181,408],{"class":161},[45,6183,6184,6186,6188],{"class":47,"line":139},[45,6185,270],{"class":79},[45,6187,194],{"class":83},[45,6189,87],{"class":79},[45,6191,6192,6194,6196],{"class":47,"line":172},[45,6193,165],{"class":79},[45,6195,84],{"class":83},[45,6197,87],{"class":79},[14,6199,6200],{},", I wanted to list the blog posts. However, only those that are not drafts.",[14,6202,6203,6204,6207,6208,1300],{},"In Jekyll, the drafts were recognized because they were in the ",[42,6205,6206],{},"_drafts"," directory, which as far as I know doesn't exist in Nuxt, but since all the Markdown files have a front matter section anyway and there are usually only one or two drafts anyway, I can specify that there with ",[42,6209,6210],{},"draft: true",[14,6212,6213],{},"In order not to exclude the designs during development, I first had to check whether the code was executed in a development environment.",[35,6215,6219],{"className":6216,"code":6217,"language":6218,"meta":40,"style":40},"language-js shiki shiki-themes material-theme","const isDev = process.env.NODE_ENV === 'development'\n","js",[42,6220,6221],{"__ignoreMap":40},[45,6222,6223,6226,6229,6231,6234,6236,6239,6241,6244,6247,6250,6253],{"class":47,"line":48},[45,6224,6225],{"class":99},"const",[45,6227,6228],{"class":161}," isDev ",[45,6230,103],{"class":79},[45,6232,6233],{"class":161}," process",[45,6235,1300],{"class":79},[45,6237,6238],{"class":161},"env",[45,6240,1300],{"class":79},[45,6242,6243],{"class":161},"NODE_ENV ",[45,6245,6246],{"class":79},"===",[45,6248,6249],{"class":79}," '",[45,6251,6252],{"class":109},"development",[45,6254,5946],{"class":79},[14,6256,6257],{},"With this information I could then query the contents of the blog posts.",[35,6259,6261],{"className":6216,"code":6260,"language":6218,"meta":40,"style":40},"const { data } = await useAsyncData(\n 'blog-list',\n () => {\n const query = queryContent('/blog')\n .only(['_path', 'title', 'date', 'excerpt', 'tags', 'categories'])\n .sort({ date: -1 })\n if (!isDev) {\n query.where({ draft: { $ne: true } })\n }\n return query.find()\n }\n)\n",[42,6262,6263,6286,6298,6308,6332,6398,6426,6444,6479,6484,6499,6504],{"__ignoreMap":40},[45,6264,6265,6267,6270,6273,6275,6277,6280,6283],{"class":47,"line":48},[45,6266,6225],{"class":99},[45,6268,6269],{"class":79}," {",[45,6271,6272],{"class":161}," data ",[45,6274,5797],{"class":79},[45,6276,1130],{"class":79},[45,6278,6279],{"class":1044}," await",[45,6281,6282],{"class":1507}," useAsyncData",[45,6284,6285],{"class":161},"(\n",[45,6287,6288,6291,6294,6296],{"class":47,"line":90},[45,6289,6290],{"class":79}," '",[45,6292,6293],{"class":109},"blog-list",[45,6295,1669],{"class":79},[45,6297,1086],{"class":79},[45,6299,6300,6303,6306],{"class":47,"line":117},[45,6301,6302],{"class":79}," ()",[45,6304,6305],{"class":99}," =>",[45,6307,1051],{"class":79},[45,6309,6310,6313,6316,6318,6321,6323,6325,6328,6330],{"class":47,"line":139},[45,6311,6312],{"class":99}," const",[45,6314,6315],{"class":161}," query",[45,6317,1130],{"class":79},[45,6319,6320],{"class":1507}," queryContent",[45,6322,1511],{"class":83},[45,6324,1669],{"class":79},[45,6326,6327],{"class":109},"/blog",[45,6329,1669],{"class":79},[45,6331,5800],{"class":83},[45,6333,6334,6337,6340,6343,6345,6348,6350,6352,6354,6357,6359,6361,6363,6366,6368,6370,6372,6375,6377,6379,6381,6384,6386,6388,6390,6393,6395],{"class":47,"line":172},[45,6335,6336],{"class":79}," .",[45,6338,6339],{"class":1507},"only",[45,6341,6342],{"class":83},"([",[45,6344,1669],{"class":79},[45,6346,6347],{"class":109},"_path",[45,6349,1669],{"class":79},[45,6351,1283],{"class":79},[45,6353,6249],{"class":79},[45,6355,6356],{"class":109},"title",[45,6358,1669],{"class":79},[45,6360,1283],{"class":79},[45,6362,6249],{"class":79},[45,6364,6365],{"class":109},"date",[45,6367,1669],{"class":79},[45,6369,1283],{"class":79},[45,6371,6249],{"class":79},[45,6373,6374],{"class":109},"excerpt",[45,6376,1669],{"class":79},[45,6378,1283],{"class":79},[45,6380,6249],{"class":79},[45,6382,6383],{"class":109},"tags",[45,6385,1669],{"class":79},[45,6387,1283],{"class":79},[45,6389,6249],{"class":79},[45,6391,6392],{"class":109},"categories",[45,6394,1669],{"class":79},[45,6396,6397],{"class":83},"])\n",[45,6399,6400,6402,6405,6407,6410,6413,6415,6418,6421,6424],{"class":47,"line":182},[45,6401,6336],{"class":79},[45,6403,6404],{"class":1507},"sort",[45,6406,1511],{"class":83},[45,6408,6409],{"class":79},"{",[45,6411,6412],{"class":83}," date",[45,6414,1079],{"class":79},[45,6416,6417],{"class":79}," -",[45,6419,6420],{"class":1266},"1",[45,6422,6423],{"class":79}," }",[45,6425,5800],{"class":83},[45,6427,6428,6431,6433,6436,6439,6442],{"class":47,"line":189},[45,6429,6430],{"class":1044}," if",[45,6432,2651],{"class":83},[45,6434,6435],{"class":79},"!",[45,6437,6438],{"class":161},"isDev",[45,6440,6441],{"class":83},") ",[45,6443,5768],{"class":79},[45,6445,6446,6449,6451,6454,6456,6458,6461,6463,6465,6468,6470,6473,6475,6477],{"class":47,"line":210},[45,6447,6448],{"class":161}," query",[45,6450,1300],{"class":79},[45,6452,6453],{"class":1507},"where",[45,6455,1511],{"class":83},[45,6457,6409],{"class":79},[45,6459,6460],{"class":83}," draft",[45,6462,1079],{"class":79},[45,6464,6269],{"class":79},[45,6466,6467],{"class":83}," $ne",[45,6469,1079],{"class":79},[45,6471,6472],{"class":1082}," true",[45,6474,6423],{"class":79},[45,6476,6423],{"class":79},[45,6478,5800],{"class":83},[45,6480,6481],{"class":47,"line":240},[45,6482,6483],{"class":79}," }\n",[45,6485,6486,6489,6491,6493,6496],{"class":47,"line":258},[45,6487,6488],{"class":1044}," return",[45,6490,6315],{"class":161},[45,6492,1300],{"class":79},[45,6494,6495],{"class":1507},"find",[45,6497,6498],{"class":83},"()\n",[45,6500,6501],{"class":47,"line":267},[45,6502,6503],{"class":79}," }\n",[45,6505,6506],{"class":47,"line":277},[45,6507,5800],{"class":161},[14,6509,6510],{},"Since only the title as a link to the full article, the introduction as well as tags and categories should be displayed on the homepage, I used computed properties to extract the relevant data from the posts.",[35,6512,6514],{"className":6216,"code":6513,"language":6218,"meta":40,"style":40},"const posts = computed(() => {\n if (!data.value) {\n return []\n }\n return data.value.map(post => {\n const preview = {\n ...post,\n date: formatDate(post.date),\n paragraphs: extractParagraphs(post.excerpt)\n }\n return preview\n })\n})\n\nfunction formatDate(dateString) {\n const date = new Date(dateString)\n return new Intl.DateTimeFormat('en-US', { month: 'short', day: '2-digit', year: 'numeric' }).format(date)\n}\n\nfunction extractParagraphs(excerpt) {\n const paragraphs = [];\n function extractText(node) {\n if (!node) return;\n if (node.type === 'element' && node.tag === 'p') {\n const paragraphText = node.children\n .filter(child => child.type === 'text')\n .map(child => child.value)\n .join('');\n paragraphs.push(paragraphText);\n } else if (Array.isArray(node.children)) {\n node.children.forEach(child => extractText(child));\n }\n }\n extractText(excerpt);\n return paragraphs;\n}\n",[42,6515,6516,6536,6557,6564,6568,6594,6606,6615,6637,6657,6662,6669,6676,6682,6686,6702,6723,6805,6809,6813,6827,6841,6858,6876,6922,6939,6971,6991,7007,7025,7060,7091,7095,7099,7112,7120],{"__ignoreMap":40},[45,6517,6518,6520,6523,6525,6528,6530,6532,6534],{"class":47,"line":48},[45,6519,6225],{"class":99},[45,6521,6522],{"class":161}," posts ",[45,6524,103],{"class":79},[45,6526,6527],{"class":1507}," computed",[45,6529,1511],{"class":161},[45,6531,1060],{"class":79},[45,6533,6305],{"class":99},[45,6535,1051],{"class":79},[45,6537,6538,6541,6543,6545,6548,6550,6553,6555],{"class":47,"line":90},[45,6539,6540],{"class":1044}," if",[45,6542,2651],{"class":83},[45,6544,6435],{"class":79},[45,6546,6547],{"class":161},"data",[45,6549,1300],{"class":79},[45,6551,6552],{"class":161},"value",[45,6554,6441],{"class":83},[45,6556,5768],{"class":79},[45,6558,6559,6561],{"class":47,"line":117},[45,6560,1068],{"class":1044},[45,6562,6563],{"class":83}," []\n",[45,6565,6566],{"class":47,"line":139},[45,6567,2701],{"class":79},[45,6569,6570,6573,6576,6578,6580,6582,6585,6587,6590,6592],{"class":47,"line":172},[45,6571,6572],{"class":1044}," return",[45,6574,6575],{"class":161}," data",[45,6577,1300],{"class":79},[45,6579,6552],{"class":161},[45,6581,1300],{"class":79},[45,6583,6584],{"class":1507},"map",[45,6586,1511],{"class":83},[45,6588,110],{"class":6589},"sLFUT",[45,6591,6305],{"class":99},[45,6593,1051],{"class":79},[45,6595,6596,6599,6602,6604],{"class":47,"line":182},[45,6597,6598],{"class":99}," const",[45,6600,6601],{"class":161}," preview",[45,6603,1130],{"class":79},[45,6605,1051],{"class":79},[45,6607,6608,6611,6613],{"class":47,"line":189},[45,6609,6610],{"class":79}," ...",[45,6612,110],{"class":161},[45,6614,1086],{"class":79},[45,6616,6617,6620,6622,6625,6627,6629,6631,6633,6635],{"class":47,"line":210},[45,6618,6619],{"class":83}," date",[45,6621,1079],{"class":79},[45,6623,6624],{"class":1507}," formatDate",[45,6626,1511],{"class":83},[45,6628,110],{"class":161},[45,6630,1300],{"class":79},[45,6632,6365],{"class":161},[45,6634,2547],{"class":83},[45,6636,1086],{"class":79},[45,6638,6639,6642,6644,6647,6649,6651,6653,6655],{"class":47,"line":240},[45,6640,6641],{"class":83}," paragraphs",[45,6643,1079],{"class":79},[45,6645,6646],{"class":1507}," extractParagraphs",[45,6648,1511],{"class":83},[45,6650,110],{"class":161},[45,6652,1300],{"class":79},[45,6654,6374],{"class":161},[45,6656,5800],{"class":83},[45,6658,6659],{"class":47,"line":258},[45,6660,6661],{"class":79}," }\n",[45,6663,6664,6666],{"class":47,"line":267},[45,6665,1068],{"class":1044},[45,6667,6668],{"class":161}," preview\n",[45,6670,6671,6674],{"class":47,"line":277},[45,6672,6673],{"class":79}," }",[45,6675,5800],{"class":83},[45,6677,6678,6680],{"class":47,"line":790},[45,6679,5797],{"class":79},[45,6681,5800],{"class":161},[45,6683,6684],{"class":47,"line":837},[45,6685,186],{"emptyLinePlaceholder":185},[45,6687,6688,6691,6693,6695,6698,6700],{"class":47,"line":847},[45,6689,6690],{"class":99},"function",[45,6692,6624],{"class":1507},[45,6694,1511],{"class":79},[45,6696,6697],{"class":6589},"dateString",[45,6699,2547],{"class":79},[45,6701,1051],{"class":79},[45,6703,6704,6707,6709,6711,6714,6717,6719,6721],{"class":47,"line":856},[45,6705,6706],{"class":99}," const",[45,6708,6412],{"class":161},[45,6710,1130],{"class":79},[45,6712,6713],{"class":79}," new",[45,6715,6716],{"class":1507}," Date",[45,6718,1511],{"class":83},[45,6720,6697],{"class":161},[45,6722,5800],{"class":83},[45,6724,6725,6727,6729,6732,6734,6737,6739,6741,6744,6746,6748,6750,6753,6755,6757,6760,6762,6764,6767,6769,6771,6774,6776,6778,6781,6783,6785,6788,6790,6792,6794,6796,6799,6801,6803],{"class":47,"line":862},[45,6726,6572],{"class":1044},[45,6728,6713],{"class":79},[45,6730,6731],{"class":161}," Intl",[45,6733,1300],{"class":79},[45,6735,6736],{"class":1507},"DateTimeFormat",[45,6738,1511],{"class":83},[45,6740,1669],{"class":79},[45,6742,6743],{"class":109},"en-US",[45,6745,1669],{"class":79},[45,6747,1283],{"class":79},[45,6749,6269],{"class":79},[45,6751,6752],{"class":83}," month",[45,6754,1079],{"class":79},[45,6756,6249],{"class":79},[45,6758,6759],{"class":109},"short",[45,6761,1669],{"class":79},[45,6763,1283],{"class":79},[45,6765,6766],{"class":83}," day",[45,6768,1079],{"class":79},[45,6770,6249],{"class":79},[45,6772,6773],{"class":109},"2-digit",[45,6775,1669],{"class":79},[45,6777,1283],{"class":79},[45,6779,6780],{"class":83}," year",[45,6782,1079],{"class":79},[45,6784,6249],{"class":79},[45,6786,6787],{"class":109},"numeric",[45,6789,1669],{"class":79},[45,6791,6423],{"class":79},[45,6793,2547],{"class":83},[45,6795,1300],{"class":79},[45,6797,6798],{"class":1507},"format",[45,6800,1511],{"class":83},[45,6802,6365],{"class":161},[45,6804,5800],{"class":83},[45,6806,6807],{"class":47,"line":893},[45,6808,1294],{"class":79},[45,6810,6811],{"class":47,"line":906},[45,6812,186],{"emptyLinePlaceholder":185},[45,6814,6815,6817,6819,6821,6823,6825],{"class":47,"line":919},[45,6816,6690],{"class":99},[45,6818,6646],{"class":1507},[45,6820,1511],{"class":79},[45,6822,6374],{"class":6589},[45,6824,2547],{"class":79},[45,6826,1051],{"class":79},[45,6828,6829,6831,6834,6836,6839],{"class":47,"line":932},[45,6830,6706],{"class":99},[45,6832,6833],{"class":161}," paragraphs",[45,6835,1130],{"class":79},[45,6837,6838],{"class":83}," []",[45,6840,1138],{"class":79},[45,6842,6843,6846,6849,6851,6854,6856],{"class":47,"line":941},[45,6844,6845],{"class":99}," function",[45,6847,6848],{"class":1507}," extractText",[45,6850,1511],{"class":79},[45,6852,6853],{"class":6589},"node",[45,6855,2547],{"class":79},[45,6857,1051],{"class":79},[45,6859,6860,6863,6865,6867,6869,6871,6874],{"class":47,"line":950},[45,6861,6862],{"class":1044}," if",[45,6864,2651],{"class":83},[45,6866,6435],{"class":79},[45,6868,6853],{"class":161},[45,6870,6441],{"class":83},[45,6872,6873],{"class":1044},"return",[45,6875,1138],{"class":79},[45,6877,6878,6880,6882,6884,6886,6889,6892,6894,6897,6899,6902,6905,6907,6910,6912,6914,6916,6918,6920],{"class":47,"line":970},[45,6879,6862],{"class":1044},[45,6881,2651],{"class":83},[45,6883,6853],{"class":161},[45,6885,1300],{"class":79},[45,6887,6888],{"class":161},"type",[45,6890,6891],{"class":79}," ===",[45,6893,6249],{"class":79},[45,6895,6896],{"class":109},"element",[45,6898,1669],{"class":79},[45,6900,6901],{"class":79}," &&",[45,6903,6904],{"class":161}," node",[45,6906,1300],{"class":79},[45,6908,6909],{"class":161},"tag",[45,6911,6891],{"class":79},[45,6913,6249],{"class":79},[45,6915,14],{"class":109},[45,6917,1669],{"class":79},[45,6919,6441],{"class":83},[45,6921,5768],{"class":79},[45,6923,6924,6927,6930,6932,6934,6936],{"class":47,"line":981},[45,6925,6926],{"class":99}," const",[45,6928,6929],{"class":161}," paragraphText",[45,6931,1130],{"class":79},[45,6933,6904],{"class":161},[45,6935,1300],{"class":79},[45,6937,6938],{"class":161},"children\n",[45,6940,6941,6944,6947,6949,6952,6954,6957,6959,6961,6963,6965,6967,6969],{"class":47,"line":990},[45,6942,6943],{"class":79}," .",[45,6945,6946],{"class":1507},"filter",[45,6948,1511],{"class":83},[45,6950,6951],{"class":6589},"child",[45,6953,6305],{"class":99},[45,6955,6956],{"class":161}," child",[45,6958,1300],{"class":79},[45,6960,6888],{"class":161},[45,6962,6891],{"class":79},[45,6964,6249],{"class":79},[45,6966,3205],{"class":109},[45,6968,1669],{"class":79},[45,6970,5800],{"class":83},[45,6972,6973,6975,6977,6979,6981,6983,6985,6987,6989],{"class":47,"line":1008},[45,6974,6943],{"class":79},[45,6976,6584],{"class":1507},[45,6978,1511],{"class":83},[45,6980,6951],{"class":6589},[45,6982,6305],{"class":99},[45,6984,6956],{"class":161},[45,6986,1300],{"class":79},[45,6988,6552],{"class":161},[45,6990,5800],{"class":83},[45,6992,6993,6995,6998,7000,7003,7005],{"class":47,"line":1017},[45,6994,6943],{"class":79},[45,6996,6997],{"class":1507},"join",[45,6999,1511],{"class":83},[45,7001,7002],{"class":79},"''",[45,7004,2547],{"class":83},[45,7006,1138],{"class":79},[45,7008,7009,7011,7013,7016,7018,7021,7023],{"class":47,"line":1026},[45,7010,6641],{"class":161},[45,7012,1300],{"class":79},[45,7014,7015],{"class":1507},"push",[45,7017,1511],{"class":83},[45,7019,7020],{"class":161},"paragraphText",[45,7022,2547],{"class":83},[45,7024,1138],{"class":79},[45,7026,7027,7030,7033,7036,7038,7041,7043,7046,7048,7050,7052,7055,7058],{"class":47,"line":1031},[45,7028,7029],{"class":79}," }",[45,7031,7032],{"class":1044}," else",[45,7034,7035],{"class":1044}," if",[45,7037,2651],{"class":83},[45,7039,7040],{"class":161},"Array",[45,7042,1300],{"class":79},[45,7044,7045],{"class":1507},"isArray",[45,7047,1511],{"class":83},[45,7049,6853],{"class":161},[45,7051,1300],{"class":79},[45,7053,7054],{"class":161},"children",[45,7056,7057],{"class":83},")) ",[45,7059,5768],{"class":79},[45,7061,7062,7065,7067,7069,7071,7074,7076,7078,7080,7082,7084,7086,7089],{"class":47,"line":1041},[45,7063,7064],{"class":161}," node",[45,7066,1300],{"class":79},[45,7068,7054],{"class":161},[45,7070,1300],{"class":79},[45,7072,7073],{"class":1507},"forEach",[45,7075,1511],{"class":83},[45,7077,6951],{"class":6589},[45,7079,6305],{"class":99},[45,7081,6848],{"class":1507},[45,7083,1511],{"class":83},[45,7085,6951],{"class":161},[45,7087,7088],{"class":83},"))",[45,7090,1138],{"class":79},[45,7092,7093],{"class":47,"line":1054},[45,7094,6661],{"class":79},[45,7096,7097],{"class":47,"line":1065},[45,7098,2701],{"class":79},[45,7100,7101,7104,7106,7108,7110],{"class":47,"line":1073},[45,7102,7103],{"class":1507}," extractText",[45,7105,1511],{"class":83},[45,7107,6374],{"class":161},[45,7109,2547],{"class":83},[45,7111,1138],{"class":79},[45,7113,7114,7116,7118],{"class":47,"line":1089},[45,7115,6572],{"class":1044},[45,7117,6833],{"class":161},[45,7119,1138],{"class":79},[45,7121,7122],{"class":47,"line":1095},[45,7123,1294],{"class":79},[14,7125,7126],{},"With this data I was finally able to render the content.",[35,7128,7130],{"className":70,"code":7129,"language":72,"meta":40,"style":40},"\u003Ctemplate>\n \u003Csection>\n \u003Carticle class=\"prose\" style=\"margin-bottom: 1rem;\">\n \u003Ch1>Blog Posts\u003C/h1>\n \u003Cp>This are my recent blog posts\u003C/p>\n \u003C/article>\n \u003Carticle v-for=\"post in posts\" :key=\"post._path\" class=\"prose\" style=\"margin-bottom: 1rem;\">\n \u003Cheader>\n \u003Cdiv>{{ post.date }}\u003C/div>\n \u003Ch2>\u003Cnuxt-link :to=\"post._path\">{{ post.title }}\u003C/nuxt-link>\u003C/h2>\n \u003C/header>\n \u003Cmain v-if=\"'paragraphs' in post\">\n \u003Cp v-for=\"paragraph in post.paragraphs\" :key=\"paragraph\">\n {{ paragraph }}\n \u003C/p>\n \u003C/main>\n \u003Cfooter>\n \u003Cspan>\u003Cb>Categories: \u003C/b>\u003C/span>\n \u003Cspan v-for=\"category in post.categories\" :key=\"category\">{{ category }}, \u003C/span>\n \u003Cspan>\u003Cb>Tags: \u003C/b>\u003C/span>\n \u003Cspan v-for=\"tag in post.tags\" :key=\"tag\">{{ tag }}, \u003C/span>\u003Cbr />\n \u003Cnuxt-link :to=\"post._path\">read more\u003C/nuxt-link>\n \u003C/footer>\n \u003C/article>\n \u003C/section>\n\u003C/template>\n",[42,7131,7132,7140,7149,7179,7196,7213,7221,7273,7281,7298,7335,7343,7364,7394,7399,7407,7415,7423,7449,7488,7513,7556,7583,7591,7599,7607],{"__ignoreMap":40},[45,7133,7134,7136,7138],{"class":47,"line":48},[45,7135,80],{"class":79},[45,7137,84],{"class":83},[45,7139,87],{"class":79},[45,7141,7142,7144,7147],{"class":47,"line":90},[45,7143,93],{"class":79},[45,7145,7146],{"class":83},"section",[45,7148,87],{"class":79},[45,7150,7151,7153,7155,7157,7159,7161,7163,7165,7168,7170,7172,7175,7177],{"class":47,"line":117},[45,7152,120],{"class":79},[45,7154,96],{"class":83},[45,7156,100],{"class":99},[45,7158,103],{"class":79},[45,7160,106],{"class":79},[45,7162,6037],{"class":109},[45,7164,106],{"class":79},[45,7166,7167],{"class":99}," style",[45,7169,103],{"class":79},[45,7171,106],{"class":79},[45,7173,7174],{"class":109},"margin-bottom: 1rem;",[45,7176,106],{"class":79},[45,7178,87],{"class":79},[45,7180,7181,7183,7185,7187,7190,7192,7194],{"class":47,"line":139},[45,7182,142],{"class":79},[45,7184,10],{"class":83},[45,7186,158],{"class":79},[45,7188,7189],{"class":161},"Blog Posts",[45,7191,165],{"class":79},[45,7193,10],{"class":83},[45,7195,87],{"class":79},[45,7197,7198,7200,7202,7204,7207,7209,7211],{"class":47,"line":172},[45,7199,142],{"class":79},[45,7201,14],{"class":83},[45,7203,158],{"class":79},[45,7205,7206],{"class":161},"This are my recent blog posts",[45,7208,165],{"class":79},[45,7210,14],{"class":83},[45,7212,87],{"class":79},[45,7214,7215,7217,7219],{"class":47,"line":182},[45,7216,175],{"class":79},[45,7218,96],{"class":83},[45,7220,87],{"class":79},[45,7222,7223,7225,7227,7230,7232,7234,7237,7239,7242,7244,7246,7249,7251,7253,7255,7257,7259,7261,7263,7265,7267,7269,7271],{"class":47,"line":189},[45,7224,120],{"class":79},[45,7226,96],{"class":83},[45,7228,7229],{"class":99}," v-for",[45,7231,103],{"class":79},[45,7233,106],{"class":79},[45,7235,7236],{"class":109},"post in posts",[45,7238,106],{"class":79},[45,7240,7241],{"class":99}," :key",[45,7243,103],{"class":79},[45,7245,106],{"class":79},[45,7247,7248],{"class":109},"post._path",[45,7250,106],{"class":79},[45,7252,100],{"class":99},[45,7254,103],{"class":79},[45,7256,106],{"class":79},[45,7258,6037],{"class":109},[45,7260,106],{"class":79},[45,7262,7167],{"class":99},[45,7264,103],{"class":79},[45,7266,106],{"class":79},[45,7268,7174],{"class":109},[45,7270,106],{"class":79},[45,7272,87],{"class":79},[45,7274,7275,7277,7279],{"class":47,"line":210},[45,7276,142],{"class":79},[45,7278,123],{"class":83},[45,7280,87],{"class":79},[45,7282,7283,7285,7287,7289,7292,7294,7296],{"class":47,"line":240},[45,7284,553],{"class":79},[45,7286,194],{"class":83},[45,7288,158],{"class":79},[45,7290,7291],{"class":161},"{{ post.date }}",[45,7293,165],{"class":79},[45,7295,194],{"class":83},[45,7297,87],{"class":79},[45,7299,7300,7302,7304,7306,7309,7312,7314,7316,7318,7320,7322,7325,7327,7329,7331,7333],{"class":47,"line":258},[45,7301,553],{"class":79},[45,7303,24],{"class":83},[45,7305,655],{"class":79},[45,7307,7308],{"class":83},"nuxt-link",[45,7310,7311],{"class":99}," :to",[45,7313,103],{"class":79},[45,7315,106],{"class":79},[45,7317,7248],{"class":109},[45,7319,106],{"class":79},[45,7321,158],{"class":79},[45,7323,7324],{"class":161},"{{ post.title }}",[45,7326,165],{"class":79},[45,7328,7308],{"class":83},[45,7330,691],{"class":79},[45,7332,24],{"class":83},[45,7334,87],{"class":79},[45,7336,7337,7339,7341],{"class":47,"line":267},[45,7338,595],{"class":79},[45,7340,123],{"class":83},[45,7342,87],{"class":79},[45,7344,7345,7347,7350,7353,7355,7357,7360,7362],{"class":47,"line":277},[45,7346,142],{"class":79},[45,7348,7349],{"class":83},"main",[45,7351,7352],{"class":99}," v-if",[45,7354,103],{"class":79},[45,7356,106],{"class":79},[45,7358,7359],{"class":109},"'paragraphs' in post",[45,7361,106],{"class":79},[45,7363,87],{"class":79},[45,7365,7366,7368,7370,7372,7374,7376,7379,7381,7383,7385,7387,7390,7392],{"class":47,"line":790},[45,7367,553],{"class":79},[45,7369,14],{"class":83},[45,7371,7229],{"class":99},[45,7373,103],{"class":79},[45,7375,106],{"class":79},[45,7377,7378],{"class":109},"paragraph in post.paragraphs",[45,7380,106],{"class":79},[45,7382,7241],{"class":99},[45,7384,103],{"class":79},[45,7386,106],{"class":79},[45,7388,7389],{"class":109},"paragraph",[45,7391,106],{"class":79},[45,7393,87],{"class":79},[45,7395,7396],{"class":47,"line":837},[45,7397,7398],{"class":161}," {{ paragraph }}\n",[45,7400,7401,7403,7405],{"class":47,"line":847},[45,7402,840],{"class":79},[45,7404,14],{"class":83},[45,7406,87],{"class":79},[45,7408,7409,7411,7413],{"class":47,"line":856},[45,7410,595],{"class":79},[45,7412,7349],{"class":83},[45,7414,87],{"class":79},[45,7416,7417,7419,7421],{"class":47,"line":862},[45,7418,142],{"class":79},[45,7420,995],{"class":83},[45,7422,87],{"class":79},[45,7424,7425,7427,7429,7431,7434,7436,7439,7441,7443,7445,7447],{"class":47,"line":893},[45,7426,553],{"class":79},[45,7428,45],{"class":83},[45,7430,655],{"class":79},[45,7432,7433],{"class":83},"b",[45,7435,158],{"class":79},[45,7437,7438],{"class":161},"Categories: ",[45,7440,165],{"class":79},[45,7442,7433],{"class":83},[45,7444,691],{"class":79},[45,7446,45],{"class":83},[45,7448,87],{"class":79},[45,7450,7451,7453,7455,7457,7459,7461,7464,7466,7468,7470,7472,7475,7477,7479,7482,7484,7486],{"class":47,"line":906},[45,7452,553],{"class":79},[45,7454,45],{"class":83},[45,7456,7229],{"class":99},[45,7458,103],{"class":79},[45,7460,106],{"class":79},[45,7462,7463],{"class":109},"category in post.categories",[45,7465,106],{"class":79},[45,7467,7241],{"class":99},[45,7469,103],{"class":79},[45,7471,106],{"class":79},[45,7473,7474],{"class":109},"category",[45,7476,106],{"class":79},[45,7478,158],{"class":79},[45,7480,7481],{"class":161},"{{ category }}, ",[45,7483,165],{"class":79},[45,7485,45],{"class":83},[45,7487,87],{"class":79},[45,7489,7490,7492,7494,7496,7498,7500,7503,7505,7507,7509,7511],{"class":47,"line":919},[45,7491,553],{"class":79},[45,7493,45],{"class":83},[45,7495,655],{"class":79},[45,7497,7433],{"class":83},[45,7499,158],{"class":79},[45,7501,7502],{"class":161},"Tags: ",[45,7504,165],{"class":79},[45,7506,7433],{"class":83},[45,7508,691],{"class":79},[45,7510,45],{"class":83},[45,7512,87],{"class":79},[45,7514,7515,7517,7519,7521,7523,7525,7528,7530,7532,7534,7536,7538,7540,7542,7545,7547,7549,7551,7554],{"class":47,"line":932},[45,7516,553],{"class":79},[45,7518,45],{"class":83},[45,7520,7229],{"class":99},[45,7522,103],{"class":79},[45,7524,106],{"class":79},[45,7526,7527],{"class":109},"tag in post.tags",[45,7529,106],{"class":79},[45,7531,7241],{"class":99},[45,7533,103],{"class":79},[45,7535,106],{"class":79},[45,7537,6909],{"class":109},[45,7539,106],{"class":79},[45,7541,158],{"class":79},[45,7543,7544],{"class":161},"{{ tag }}, ",[45,7546,165],{"class":79},[45,7548,45],{"class":83},[45,7550,655],{"class":79},[45,7552,7553],{"class":83},"br",[45,7555,978],{"class":79},[45,7557,7558,7560,7562,7564,7566,7568,7570,7572,7574,7577,7579,7581],{"class":47,"line":941},[45,7559,553],{"class":79},[45,7561,7308],{"class":83},[45,7563,7311],{"class":99},[45,7565,103],{"class":79},[45,7567,106],{"class":79},[45,7569,7248],{"class":109},[45,7571,106],{"class":79},[45,7573,158],{"class":79},[45,7575,7576],{"class":161},"read more",[45,7578,165],{"class":79},[45,7580,7308],{"class":83},[45,7582,87],{"class":79},[45,7584,7585,7587,7589],{"class":47,"line":950},[45,7586,595],{"class":79},[45,7588,995],{"class":83},[45,7590,87],{"class":79},[45,7592,7593,7595,7597],{"class":47,"line":970},[45,7594,175],{"class":79},[45,7596,96],{"class":83},[45,7598,87],{"class":79},[45,7600,7601,7603,7605],{"class":47,"line":981},[45,7602,270],{"class":79},[45,7604,7146],{"class":83},[45,7606,87],{"class":79},[45,7608,7609,7611,7613],{"class":47,"line":990},[45,7610,165],{"class":79},[45,7612,84],{"class":83},[45,7614,87],{"class":79},[24,7616,7617],{"id":7617},"cleanup",[14,7619,7620,7621,7628],{},"I originally started the blog with wordpress and many of the old blog posts were basically just one-liners with a couple of links. Some of the posts I didn't even convert to Markdown but just took the HTML from wordpress. I think I used some tool to export everything from wordpress so I could integrate it into my new jekyll site. Anyway. I deleted most of the old blog posts. If you still want to see them there is always the ",[7622,7623,7627],"a",{"href":7624,"rel":7625},"http://web.archive.org/",[7626],"nofollow","Wayback Machine"," ;-).",[24,7630,7632],{"id":7631},"replace-jekyll-blog","replace jekyll blog",[7634,7635,7636],"h3",{"id":7636},"deploment",[14,7638,7639],{},"I published the Jekyll blog on GitHub pages. Of course, I wanted to do the same with the Nuxt blog. The only thing that was supposed to change was the underlying technology from Jekyll to Nuxt.",[14,7641,7642],{},"github-pages is intended for static websites. which means that no server code runs there. The Nuxt project must therefore generate static HTML. In the Nuxt documentation I have a section on GitHub-Pages which says right at the beginning:",[7644,7645,7646],"blockquote",{},[14,7647,7648],{},"GitHub Pages only support static sites, Nuxt will pre-render your application to static HTML files.",[14,7650,7651],{},"which I have just described",[14,7653,7654],{},"and",[7644,7656,7657],{},[14,7658,7659,7660],{},"If you are not using a custom domain, you need to set NUXT_APP_BASE_URL to your repository-slug for your build step.Example: https://",[7661,7662,7663,7664],"user",{},".github.io/",[7665,7666,7667,7668],"repository",{},"/: NUXT_APP_BASE_URL=/",[7665,7669,7670],{},"/ npx nuxt build --preset github_pages",[14,7672,7673],{},"followed by an example GitHub Actions workflow.",[14,7675,7676,7677,7680,7681,1079],{},"So I adjusted my nuxt.config.ts and configured the base URL, since I had created a new repo for the nuxt project and created a ",[42,7678,7679],{},"deploy.yml"," in ",[42,7682,7683],{},".github/workflows/",[35,7685,7689],{"className":7686,"code":7687,"language":7688,"meta":40,"style":40},"language-yml shiki shiki-themes material-theme","# https://github.com/actions/deploy-pages#usage\nname: Deploy to GitHub Pages\non:\n workflow_dispatch:\n push:\n branches:\n - main\njobs:\n build:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v4\n - run: corepack enable\n - uses: actions/setup-node@v4\n with:\n node-version: \"20\"\n # Pick your own package manager and build script\n - run: npm install\n - run: npx nuxt build --preset github_pages\n - name: Upload artifact\n uses: actions/upload-pages-artifact@v3\n with:\n path: ./.output/public\n # Deployment job\n deploy:\n # Add a dependency to the build job\n needs: build\n # Grant GITHUB_TOKEN the permissions required to make a Pages deployment\n permissions:\n pages: write # to deploy to Pages\n id-token: write # to verify the deployment originates from an appropriate source\n # Deploy to the github_pages environment\n environment:\n name: github_pages\n url: ${{ steps.deployment.outputs.page_url }}\n # Specify runner + deployment step\n runs-on: ubuntu-latest\n steps:\n - name: Deploy to GitHub Pages\n id: deployment\n uses: actions/deploy-pages@v4\n","yml",[42,7690,7691,7696,7706,7714,7721,7728,7735,7743,7750,7757,7767,7774,7786,7798,7809,7816,7832,7837,7848,7859,7871,7881,7887,7897,7902,7909,7914,7924,7929,7936,7949,7961,7966,7973,7983,7993,7998,8006,8012,8022,8032],{"__ignoreMap":40},[45,7692,7693],{"class":47,"line":48},[45,7694,7695],{"class":604},"# https://github.com/actions/deploy-pages#usage\n",[45,7697,7698,7701,7703],{"class":47,"line":90},[45,7699,7700],{"class":83},"name",[45,7702,1079],{"class":79},[45,7704,7705],{"class":109}," Deploy to GitHub Pages\n",[45,7707,7708,7711],{"class":47,"line":117},[45,7709,7710],{"class":1082},"on",[45,7712,7713],{"class":79},":\n",[45,7715,7716,7719],{"class":47,"line":139},[45,7717,7718],{"class":83}," workflow_dispatch",[45,7720,7713],{"class":79},[45,7722,7723,7726],{"class":47,"line":172},[45,7724,7725],{"class":83}," push",[45,7727,7713],{"class":79},[45,7729,7730,7733],{"class":47,"line":182},[45,7731,7732],{"class":83}," branches",[45,7734,7713],{"class":79},[45,7736,7737,7740],{"class":47,"line":189},[45,7738,7739],{"class":79}," -",[45,7741,7742],{"class":109}," main\n",[45,7744,7745,7748],{"class":47,"line":210},[45,7746,7747],{"class":83},"jobs",[45,7749,7713],{"class":79},[45,7751,7752,7755],{"class":47,"line":240},[45,7753,7754],{"class":83}," build",[45,7756,7713],{"class":79},[45,7758,7759,7762,7764],{"class":47,"line":258},[45,7760,7761],{"class":83}," runs-on",[45,7763,1079],{"class":79},[45,7765,7766],{"class":109}," ubuntu-latest\n",[45,7768,7769,7772],{"class":47,"line":267},[45,7770,7771],{"class":83}," steps",[45,7773,7713],{"class":79},[45,7775,7776,7778,7781,7783],{"class":47,"line":277},[45,7777,7739],{"class":79},[45,7779,7780],{"class":83}," uses",[45,7782,1079],{"class":79},[45,7784,7785],{"class":109}," actions/checkout@v4\n",[45,7787,7788,7790,7793,7795],{"class":47,"line":790},[45,7789,7739],{"class":79},[45,7791,7792],{"class":83}," run",[45,7794,1079],{"class":79},[45,7796,7797],{"class":109}," corepack enable\n",[45,7799,7800,7802,7804,7806],{"class":47,"line":837},[45,7801,7739],{"class":79},[45,7803,7780],{"class":83},[45,7805,1079],{"class":79},[45,7807,7808],{"class":109}," actions/setup-node@v4\n",[45,7810,7811,7814],{"class":47,"line":847},[45,7812,7813],{"class":83}," with",[45,7815,7713],{"class":79},[45,7817,7818,7821,7823,7826,7829],{"class":47,"line":856},[45,7819,7820],{"class":83}," node-version",[45,7822,1079],{"class":79},[45,7824,7825],{"class":79}," \"",[45,7827,7828],{"class":109},"20",[45,7830,7831],{"class":79},"\"\n",[45,7833,7834],{"class":47,"line":862},[45,7835,7836],{"class":604}," # Pick your own package manager and build script\n",[45,7838,7839,7841,7843,7845],{"class":47,"line":893},[45,7840,7739],{"class":79},[45,7842,7792],{"class":83},[45,7844,1079],{"class":79},[45,7846,7847],{"class":109}," npm install\n",[45,7849,7850,7852,7854,7856],{"class":47,"line":906},[45,7851,7739],{"class":79},[45,7853,7792],{"class":83},[45,7855,1079],{"class":79},[45,7857,7858],{"class":109}," npx nuxt build --preset github_pages\n",[45,7860,7861,7863,7866,7868],{"class":47,"line":919},[45,7862,7739],{"class":79},[45,7864,7865],{"class":83}," name",[45,7867,1079],{"class":79},[45,7869,7870],{"class":109}," Upload artifact\n",[45,7872,7873,7876,7878],{"class":47,"line":932},[45,7874,7875],{"class":83}," uses",[45,7877,1079],{"class":79},[45,7879,7880],{"class":109}," actions/upload-pages-artifact@v3\n",[45,7882,7883,7885],{"class":47,"line":941},[45,7884,7813],{"class":83},[45,7886,7713],{"class":79},[45,7888,7889,7892,7894],{"class":47,"line":950},[45,7890,7891],{"class":83}," path",[45,7893,1079],{"class":79},[45,7895,7896],{"class":109}," ./.output/public\n",[45,7898,7899],{"class":47,"line":970},[45,7900,7901],{"class":604}," # Deployment job\n",[45,7903,7904,7907],{"class":47,"line":981},[45,7905,7906],{"class":83}," deploy",[45,7908,7713],{"class":79},[45,7910,7911],{"class":47,"line":990},[45,7912,7913],{"class":604}," # Add a dependency to the build job\n",[45,7915,7916,7919,7921],{"class":47,"line":1008},[45,7917,7918],{"class":83}," needs",[45,7920,1079],{"class":79},[45,7922,7923],{"class":109}," build\n",[45,7925,7926],{"class":47,"line":1017},[45,7927,7928],{"class":604}," # Grant GITHUB_TOKEN the permissions required to make a Pages deployment\n",[45,7930,7931,7934],{"class":47,"line":1026},[45,7932,7933],{"class":83}," permissions",[45,7935,7713],{"class":79},[45,7937,7938,7941,7943,7946],{"class":47,"line":1031},[45,7939,7940],{"class":83}," pages",[45,7942,1079],{"class":79},[45,7944,7945],{"class":109}," write",[45,7947,7948],{"class":604}," # to deploy to Pages\n",[45,7950,7951,7954,7956,7958],{"class":47,"line":1041},[45,7952,7953],{"class":83}," id-token",[45,7955,1079],{"class":79},[45,7957,7945],{"class":109},[45,7959,7960],{"class":604}," # to verify the deployment originates from an appropriate source\n",[45,7962,7963],{"class":47,"line":1054},[45,7964,7965],{"class":604}," # Deploy to the github_pages environment\n",[45,7967,7968,7971],{"class":47,"line":1065},[45,7969,7970],{"class":83}," environment",[45,7972,7713],{"class":79},[45,7974,7975,7978,7980],{"class":47,"line":1073},[45,7976,7977],{"class":83}," name",[45,7979,1079],{"class":79},[45,7981,7982],{"class":109}," github_pages\n",[45,7984,7985,7988,7990],{"class":47,"line":1089},[45,7986,7987],{"class":83}," url",[45,7989,1079],{"class":79},[45,7991,7992],{"class":109}," ${{ steps.deployment.outputs.page_url }}\n",[45,7994,7995],{"class":47,"line":1095},[45,7996,7997],{"class":604}," # Specify runner + deployment step\n",[45,7999,8000,8002,8004],{"class":47,"line":1101},[45,8001,7761],{"class":83},[45,8003,1079],{"class":79},[45,8005,7766],{"class":109},[45,8007,8008,8010],{"class":47,"line":1111},[45,8009,7771],{"class":83},[45,8011,7713],{"class":79},[45,8013,8014,8016,8018,8020],{"class":47,"line":1121},[45,8015,7739],{"class":79},[45,8017,7865],{"class":83},[45,8019,1079],{"class":79},[45,8021,7705],{"class":109},[45,8023,8024,8027,8029],{"class":47,"line":1141},[45,8025,8026],{"class":83}," id",[45,8028,1079],{"class":79},[45,8030,8031],{"class":109}," deployment\n",[45,8033,8034,8036,8038],{"class":47,"line":1147},[45,8035,7875],{"class":83},[45,8037,1079],{"class":79},[45,8039,8040],{"class":109}," actions/deploy-pages@v4\n",[14,8042,8043],{},"I then adapted this to my needs and wanted to deploy the new blog for the first time. But it didn't work.",[7634,8045,8047],{"id":8046},"replace-the-old-repository","replace the old repository",[14,8049,8050,8051,3218,8054,8057,8058,8060,8061,8063],{},"unfortunately, something was often missing during prerendering. The yml file with the gitHub actions consists of 2 areas: ",[42,8052,8053],{},"build",[42,8055,8056],{},"deploy",". ",[42,8059,8053],{}," eventually worked, but assets were always missing during ",[42,8062,8056],{},". At some point I remembered the gh-pages npm package. I then installed it without further ado and it \"worked\" straight away. Except for the baseURL. But since I only wanted to have one blog anyway and only wanted to switch from jekyll to nuxt, I quickly deleted the jekyll repo and renamed the nuxt repo.",[1210,8065,8066],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sAklC, html code.shiki .sAklC{--shiki-default:#89DDFF}html pre.shiki code .s-wAU, html code.shiki .s-wAU{--shiki-default:#F07178}html pre.shiki code .sJ14y, html code.shiki .sJ14y{--shiki-default:#C792EA}html pre.shiki code .sfyAc, html code.shiki .sfyAc{--shiki-default:#C3E88D}html pre.shiki code .svy0-, html code.shiki .svy0-{--shiki-default:#EEFFFF}html pre.shiki code .s0_hs, html code.shiki .s0_hs{--shiki-default:#546E7A;--shiki-default-font-style:italic}html pre.shiki code .s6cf3, html code.shiki .s6cf3{--shiki-default:#89DDFF;--shiki-default-font-style:italic}html pre.shiki code .sbqyR, html code.shiki .sbqyR{--shiki-default:#FF9CAC}html pre.shiki code .s5Dmg, html code.shiki .s5Dmg{--shiki-default:#FFCB6B}html pre.shiki code .s6YsC, html code.shiki .s6YsC{--shiki-default:#B2CCD6}html pre.shiki code .sx098, html code.shiki .sx098{--shiki-default:#F78C6C}html pre.shiki code .sdLwU, html code.shiki .sdLwU{--shiki-default:#82AAFF}html pre.shiki code .sLFUT, html code.shiki .sLFUT{--shiki-default:#EEFFFF;--shiki-default-font-style:italic}",{"title":40,"searchDepth":90,"depth":90,"links":8068},[8069,8070,8071,8072,8073,8074,8075,8076,8077],{"id":26,"depth":90,"text":27},{"id":56,"depth":90,"text":57},{"id":3225,"depth":90,"text":3226},{"id":5728,"depth":90,"text":5729},{"id":5883,"depth":90,"text":5884},{"id":6051,"depth":90,"text":6052},{"id":6153,"depth":90,"text":6154},{"id":7617,"depth":90,"text":7617},{"id":7631,"depth":90,"text":7632,"children":8078},[8079,8080],{"id":7636,"depth":117,"text":7636},{"id":8046,"depth":117,"text":8047},[8082],"programming","2024-12-28","i decided to switch from jekyll to nuxt",false,null,"md",{"htmlAttrs":8089,"link":8091,"meta":8096},{"lang":8090},"en",[8092],{"rel":8093,"type":8094,"href":8095},"icon","mange/x-icon","/favicon.ico",[8097,8100,8103,8106,8109,8111,8114,8117,8119,8121,8124],{"name":8098,"content":8099},"keywords","programming, coding, vue, nuxt, jekyll",{"name":8101,"content":8102},"robots","index, follow",{"name":8104,"content":8105},"author","Melchior Kannengießer",{"name":8107,"content":8108},"og:title","mjk @ web - Jekyll to Nuxt",{"name":8110,"content":8084},"og:description",{"name":8112,"content":8113},"og:image","/logo_518x270.png",{"name":8115,"content":8116},"og:url","http://www.mjkweb.de",{"name":8118,"content":8108},"twitter:title",{"name":8120,"content":8084},"twitter:description",{"name":8122,"content":8123},"twitter:image","/logo_200x200.png",{"name":8125,"content":8126},"twitter:card","summary",{"excerpt_separator":8128},"\u003C!-- EXCERPT_END -->","/blog/2024/switch-from-jekyll-to-nuxt",{"title":5,"description":8084},"blog/2024/switch-from-jekyll-to-nuxt",[8082,8133,72,8134,8135],"coding","nuxt","jekyll","3zujA2JeDoSueXjq5Y-kGw7fulSqkAxjDqrB5Et5FzA",1775492953064] \ No newline at end of file diff --git a/blog/2024/switch-from-jekyll-to-nuxt/index.html b/blog/2024/switch-from-jekyll-to-nuxt/index.html new file mode 100644 index 0000000..03a60cd --- /dev/null +++ b/blog/2024/switch-from-jekyll-to-nuxt/index.html @@ -0,0 +1,642 @@ +Switch from Jekyll to Nuxt

Switch from Jekyll to Nuxt

I haven't use ruby for a while but more and more js/ts (especially vue) so i decided to switch from jekyll to nuxt, as I also like the benefits of autoloading components and server-side rendering with Nuxt.

Also, in Nuxt, using NuxtContent, like in jekyll, I can save my content as markdown, which is then converted to html.

so the journey begins

initializing a new nuxt project

initializing a new nuxt project is very easy.

just run

npx nuxi@latest init <project-name>
+

Then you will be asked on the console to select a package manager (I use npm) and you will be asked whether you want to initialize a git repo right away. That's it.

Dummy Content & Layout

I created the pages folder and saved some files with dummy content there. It should only help to adopt the design. Later we will use NuxtContent. Then we just need to copy the Markdown files from the Jekyll project. I also already replaced Nuxt's favicon with my own.

  • about.vue
<template>
+  <article class="post">
+    <header class="post-header">
+      <h1 class="post-title">About</h1>
+    </header>
+
+    <div class="post-content">
+      <h1 id="about-this-blog">About this blog</h1>
+      <p>Hello, my name is Melchior. In the past I posted various things on this blog, but decided to focus more on technical post. However, this does not mean that there is not something else to read here. I have also decided to write my posts in English in the future. Have fun reading my posts. They may also be useful for one or the other, even if I am now primarily writing them for myself in order to deepen topics.</p>
+    </div>
+  </article>
+</template>
+
  • datenschutzerklaerung.vue
<template>
+  <div>
+    datenschutzerklaerung
+  </div>
+</template>
+
  • impressum.vue
<template>
+  <div>
+    impressum
+  </div>
+</template>
+
  • index.vue
<template>
+  <div>
+    home
+  </div>
+</template>
+
  • links.vue
<template>
+  <div>
+    links
+  </div>
+</template>
+

then I created the layout in the app.vue-file and transferred the design with a few small changes. What I changed, for example, is that this time I wanted to have a mobile-first design, which can also serve as a fallback for larger screens if things aren't supported there.

<template>
+  <div class="pageWrapper">
+    <header class="pageHeader">
+      <div class="branding">
+        <NuxtLink to="/" class="logo">mjk @ web</NuxtLink>
+      </div>
+      <!-- Navigation -->
+      <nav :class="{ active: isMenuOpen }">
+        <ul class="mainNav">
+          <li><NuxtLink to="/about" @click="hideMenu">About</NuxtLink></li>
+          <li><NuxtLink to="/links" @click="hideMenu">Links</NuxtLink></li>
+          <li><NuxtLink to="/datenschutzerklaerung" @click="hideMenu">Datenschutz-Erklärung</NuxtLink></li>
+          <li><NuxtLink to="/impressum" @click="hideMenu">Impressum</NuxtLink></li>
+        </ul>
+      </nav>
+      <!-- Hamburger Menu -->
+      <div class="hamburgerMenu" @click="toggleMenu">
+        <span></span>
+        <span></span>
+        <span></span>
+      </div>
+    </header>
+    <div class="pageContent">
+      <NuxtPage />
+    </div>
+    <footer>footer</footer>
+  </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      isMenuOpen: false,
+    };
+  },
+  methods: {
+    toggleMenu() {
+      this.isMenuOpen = !this.isMenuOpen;
+    },
+
+    hideMenu() {
+      this.isMenuOpen = false;
+    },
+  },
+};
+</script>
+
+<style>
+/* Mobile-First Design */
+
+/* Basic-Styling for mobile Devices */
+body {
+  background-color: #213c5b;
+  margin: 0;
+  font-family: Arial, sans-serif;
+}
+.pageWrapper {
+  display: flex;
+  flex-direction: column;
+  min-height: 100vh;
+  max-width: 1024px;
+  margin-right: auto;
+  margin-left: auto;
+}
+.pageHeader {
+  color: black;
+  min-height: 56px;
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  padding-left: 1rem;
+  padding-right: 1rem;
+  background: #1e6695;
+  background: -moz-linear-gradient(top, #1e6695 0%, #74aacc 33%, #79aecb 66%, #2f4a66 100%);
+  background: -webkit-linear-gradient(top, #1e6695 0%, #74aacc 33%, #79aecb 66%, #2f4a66 100%);
+  background: linear-gradient(to bottom, #1e6695 0%, #74aacc 33%, #79aecb 66%, #2f4a66 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#1e6695', endColorstr='#2f4a66',GradientType=0 );
+}
+
+/* Branding */
+.branding .logo {
+  font-size: 1.5rem;
+  text-decoration: none;
+  color: black;
+}
+
+/* Navigation */
+nav {
+  display: none;
+}
+.mainNav {
+  display: flex;
+  flex-direction: column;
+  gap: 1rem;
+  list-style: none;
+  margin: 0;
+  padding: 1rem;
+  background-color: #819cbb;
+  border-radius: 0.5rem;
+  box-shadow: 0 4px 6px rgba(0, 0, 0, 0.3);
+}
+.mainNav li a {
+  text-decoration: none;
+  color: black;
+  transition: color 0.3s;
+}
+
+/* Hamburger Menu */
+.hamburgerMenu {
+  display: flex;
+  flex-direction: column;
+  gap: 0.3rem;
+  cursor: pointer;
+}
+.hamburgerMenu span {
+  width: 25px;
+  height: 3px;
+  background-color: black;
+}
+
+/* Aktives Menü (für Mobile) */
+nav.active {
+  display: block;
+}
+
+.pageContent {
+  background-color: #415c7b;
+  padding: 15px;
+}
+
+.pageContent article {
+  border: 1px solid #000;
+  border-radius: 10px;
+  background-color: #819cbb;
+  padding: 15px;
+}
+
+footer {
+  height: 38px;
+  line-height: 38px;
+  text-align: center;
+  background: #415c7b;
+  background: -moz-linear-gradient(top, #415c7b 0%, #273749 100%);
+  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #415c7b), color-stop(100%, #273749));
+  background: -webkit-linear-gradient(top, #415c7b 0%, #273749 100%);
+  background: -o-linear-gradient(top, #415c7b 0%, #273749 100%);
+  background: -ms-linear-gradient(top, #415c7b 0%, #273749 100%);
+  background: linear-gradient(to bottom, #415c7b 0%, #273749 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#415c7b', endColorstr='#273749',GradientType=0 );
+  border-bottom: 1px solid black;
+}
+
+@media (max-width: 599px) {
+  .mainNav li:hover {
+    background-color: #7E99B8;
+  }
+  nav.active {
+    position: absolute;
+    top: 46px; /* Direkt unter der Header-Höhe */
+    right: 16px;
+    width: 200px;
+    z-index: 10;
+  }
+}
+
+/* Media Queries für größere Bildschirme */
+@media (min-width: 600px) {
+  .mainNav {
+    flex-direction: row;
+    justify-content: center;
+    background: none;
+    padding: 0;
+    box-shadow: none;
+  }
+  nav {
+    display: flex;
+  }
+  .hamburgerMenu {
+    display: none;
+  }
+}
+
+@media (min-width: 1024px) {
+  .pageHeader {
+    margin-top: 10px;
+    -webkit-border-radius: 20px 20px 0 0;
+    border-radius: 20px 20px 0 0;
+    border: 1px solid black;
+    border-bottom: 0px;
+  }
+  .pageContent {
+    border-left: solid 1px black;
+    border-right: solid 1px black;
+  }
+  footer {
+    -webkit-border-radius: 0 0 20px 20px;
+    border-radius: 0 0 20px 20px;
+    border: 1px solid black;
+    border-top: 0px;
+  }
+}
+</style>
+

The directory structure now looks like this.

.
+├── .nuxt
+│   ├── ...
+│   └── ...
+├── .output
+│   ├── ...
+│   └── ...
+├── node_modules
+│   ├── ...
+│   └── ...
+├── pages
+│   ├── about.vue
+│   ├── datenschutzerklaerung.vue
+│   ├── impressum.vue
+│   ├── index.vue
+│   └── links.vue
+├── public
+│   ├── favicon.ico
+│   └── robots.txt
+├── server
+│   └── tsconfig.json
+├── .gitignore
+├── app.vue
+├── nuxt.config.ts
+├── package-lock.json
+├── package.json
+├── README.md
+└── tsconfig.json
+

I have left out the contents of the folders .nuxt, .output and node_modules because the contents are generated by nuxt or npm and we should not edit or save anything here.

Extract components

Vue and therefore Nuxt is a component-based framework. So I created the folder components in the root directory and extracted the components pageFooter.vue and pageHeader.vue from the app.vue, which makes it much clearer.

  • pageFooter.vue
<template>
+  <footer>
+    <span>&copy; by Melchior Jascha Kannengießer</span>
+  </footer>
+</template>
+
+<style scoped>
+footer {
+  height: 38px;
+  line-height: 38px;
+  text-align: center;
+  background: #415c7b;
+  background: -moz-linear-gradient(top, #415c7b 0%, #273749 100%);
+  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #415c7b), color-stop(100%, #273749));
+  background: -webkit-linear-gradient(top, #415c7b 0%, #273749 100%);
+  background: -o-linear-gradient(top, #415c7b 0%, #273749 100%);
+  background: -ms-linear-gradient(top, #415c7b 0%, #273749 100%);
+  background: linear-gradient(to bottom, #415c7b 0%, #273749 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#415c7b', endColorstr='#273749',GradientType=0 );
+  border-bottom: 1px solid black;
+}
+
+@media (min-width: 1024px) {
+  footer {
+    -webkit-border-radius: 0 0 20px 20px;
+    border-radius: 0 0 20px 20px;
+    border: 1px solid black;
+    border-top: 0px;
+  }
+}
+
+</style>
+
  • pageHeader.vue
<template>
+  <header class="pageHeader">
+    <div class="branding">
+      <NuxtLink to="/" class="logo">mjk @ web</NuxtLink>
+    </div>
+    <!-- Navigation -->
+    <nav :class="{ active: isMenuOpen }">
+      <ul class="mainNav">
+        <li><NuxtLink to="/about" @click="hideMenu">About</NuxtLink></li>
+        <li><NuxtLink to="/links" @click="hideMenu">Links</NuxtLink></li>
+        <li><NuxtLink to="/datenschutzerklaerung" @click="hideMenu">Datenschutz-Erklärung</NuxtLink></li>
+        <li><NuxtLink to="/impressum" @click="hideMenu">Impressum</NuxtLink></li>
+      </ul>
+    </nav>
+    <!-- Hamburger Menu -->
+    <div class="hamburgerMenu" @click="toggleMenu">
+      <span></span>
+      <span></span>
+      <span></span>
+    </div>
+  </header>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      isMenuOpen: false,
+    };
+  },
+  methods: {
+    toggleMenu() {
+      this.isMenuOpen = !this.isMenuOpen;
+    },
+
+    hideMenu() {
+      this.isMenuOpen = false;
+    },
+  },
+};
+</script>
+
+<style scoped>
+.pageHeader {
+  color: black;
+  min-height: 56px;
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  padding-left: 1rem;
+  padding-right: 1rem;
+  background: #1e6695;
+  background: -moz-linear-gradient(top, #1e6695 0%, #74aacc 33%, #79aecb 66%, #2f4a66 100%);
+  background: -webkit-linear-gradient(top, #1e6695 0%, #74aacc 33%, #79aecb 66%, #2f4a66 100%);
+  background: linear-gradient(to bottom, #1e6695 0%, #74aacc 33%, #79aecb 66%, #2f4a66 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#1e6695', endColorstr='#2f4a66',GradientType=0 );
+}
+
+/* Branding */
+.branding .logo {
+  font-size: 1.5rem;
+  text-decoration: none;
+  color: black;
+}
+
+/* Navigation */
+nav {
+  display: none;
+}
+.mainNav {
+  display: flex;
+  flex-direction: column;
+  gap: 1rem;
+  list-style: none;
+  margin: 0;
+  padding: 1rem;
+  background-color: #819cbb;
+  border-radius: 0.5rem;
+  box-shadow: 0 4px 6px rgba(0, 0, 0, 0.3);
+}
+.mainNav li a {
+  text-decoration: none;
+  color: black;
+  transition: color 0.3s;
+}
+
+/* Hamburger Menu */
+.hamburgerMenu {
+  display: flex;
+  flex-direction: column;
+  gap: 0.3rem;
+  cursor: pointer;
+}
+.hamburgerMenu span {
+  width: 25px;
+  height: 3px;
+  background-color: black;
+}
+
+/* Aktives Menü (für Mobile) */
+nav.active {
+  display: block;
+}
+
+@media (max-width: 599px) {
+  .mainNav li:hover {
+    background-color: #7E99B8;
+  }
+  nav.active {
+    position: absolute;
+    top: 46px; /* Direkt unter der Header-Höhe */
+    right: 16px;
+    width: 200px;
+    z-index: 10;
+  }
+}
+
+/* Media Queries für größere Bildschirme */
+@media (min-width: 600px) {
+  .mainNav {
+    flex-direction: row;
+    justify-content: center;
+    background: none;
+    padding: 0;
+    box-shadow: none;
+  }
+  nav {
+    display: flex;
+  }
+  .hamburgerMenu {
+    display: none;
+  }
+}
+
+@media (min-width: 1024px) {
+  .pageHeader {
+    margin-top: 10px;
+    -webkit-border-radius: 20px 20px 0 0;
+    border-radius: 20px 20px 0 0;
+    border: 1px solid black;
+    border-bottom: 0px;
+  }
+}
+
+</style>
+
  • app.vue
<template>
+  <div class="pageWrapper">
+    <pageHeader />
+    <div class="pageContent">
+      <NuxtPage />
+    </div>
+    <pageFooter />
+  </div>
+</template>
+
+<style>
+/* Mobile-First Design */
+
+/* Basic-Styling for mobile Devices */
+body {
+  background-color: #213c5b;
+  margin: 0;
+  font-family: Arial, sans-serif;
+}
+.pageWrapper {
+  display: flex;
+  flex-direction: column;
+  min-height: 100vh;
+  max-width: 1024px;
+  margin-right: auto;
+  margin-left: auto;
+}
+
+.pageContent {
+  background-color: #415c7b;
+  padding: 15px;
+}
+
+.pageContent article {
+  border: 1px solid #000;
+  border-radius: 10px;
+  background-color: #819cbb;
+  padding: 15px;
+}
+
+/* Media Queries für größere Bildschirme */
+@media (min-width: 1024px) {
+  .pageContent {
+    border-left: solid 1px black;
+    border-right: solid 1px black;
+  }
+}
+</style>
+

Nuxt-Content

Nuxt Content is a Nuxt module that enables us to render our Markdown posts from the Jekyll project.

First I had to install the module

npm install --save-dev @nuxt/content
+

and add it to the Modules array in nuxt.config.ts in the root directory

export default defineNuxtConfig({
+  ...
+  modules: ['@nuxt/content']
+  ...
+})
+

Then I created a directory called content in the root directory of my project and inside it a directory called blog. All files from the _posts directory of the Jekyll project now go into this directory.

In order to render the posts, however, a "catchAllRoute" is required, i.e. a file with the name [...slug].vue in the Pages directory (more precisely in the blog subdirectory) which only contains the template with <ContentDoc /> which loads and renders the content of the Markdown files.

  • ...slug.vue
<template>
+  <article>
+    <ContentDoc />
+  </article>
+</template>
+

Tailwind

the next step was to install the tailwind module

npm install --save-dev @nuxtjs/tailwindcss
+

and add it to the nuxtConfig

export default defineNuxtConfig({
+  ...
+  modules: [
+    '@nuxt/content',
+    '@nuxtjs/tailwindcss'
+  ]
+  ...
+})
+

In order for the markdown to be rendered correctly, tailwindcss-typography was required.

I istalled it by

npm install -D @tailwindcss/typography
+

to enable it i added a tailwind.config.ts to the root directory and added the typography-plugin.

module.exports = {
+  plugins: [
+    require('@tailwindcss/typography')
+  ]
+}
+

and in the catchAllRoute for the blog-posts I added the prose class to article and added a max-width: 992px!important; to override the one from the prose class of tailwind-typography for now.

Copy and adjust content

Finally, I was able to copy the remaining Markdown files from the Jekyll project into the content directory. Some of the Markdown files still contained HTML, so I quickly converted them into pure Markdown.

In order to be able to render everything, I then had to create the corresponding Vue files in the pages directory and read in and render the Markdown files with <ContentDoc>. I'm just using about.vue as an example here, since the other files basically look exactly the same.

  • about.vue
<template>
+  <article class="prose">
+    <ContentDoc path="/about" />
+  </article>
+</template>
+

I then copied the directory icons from the directory _assets in the Jekyll project to public/assets/ in the Nuxt project so that the social media icons are also displayed.

Query and Render Blog-Posts

On the homepage, which until now was just a dummy with the template

<template>
+  <div>
+    home
+  </div>
+</template>
+

, I wanted to list the blog posts. However, only those that are not drafts.

In Jekyll, the drafts were recognized because they were in the _drafts directory, which as far as I know doesn't exist in Nuxt, but since all the Markdown files have a front matter section anyway and there are usually only one or two drafts anyway, I can specify that there with draft: true.

In order not to exclude the designs during development, I first had to check whether the code was executed in a development environment.

const isDev = process.env.NODE_ENV === 'development'
+

With this information I could then query the contents of the blog posts.

const { data } = await useAsyncData(
+  'blog-list',
+   () => {
+     const query = queryContent('/blog')
+       .only(['_path', 'title', 'date', 'excerpt', 'tags', 'categories'])
+       .sort({ date: -1 })
+     if (!isDev) {
+       query.where({ draft: { $ne: true } })
+     }
+     return query.find()
+   }
+)
+

Since only the title as a link to the full article, the introduction as well as tags and categories should be displayed on the homepage, I used computed properties to extract the relevant data from the posts.

const posts = computed(() => {
+  if (!data.value) {
+    return []
+  }
+  return data.value.map(post => {
+    const preview = {
+      ...post,
+      date: formatDate(post.date),
+      paragraphs: extractParagraphs(post.excerpt)
+    }
+    return preview
+  })
+})
+
+function formatDate(dateString) {
+  const date = new Date(dateString)
+  return new Intl.DateTimeFormat('en-US', { month: 'short', day: '2-digit', year: 'numeric' }).format(date)
+}
+
+function extractParagraphs(excerpt) {
+  const paragraphs = [];
+  function extractText(node) {
+    if (!node) return;
+    if (node.type === 'element' && node.tag === 'p') {
+      const paragraphText = node.children
+        .filter(child => child.type === 'text')
+        .map(child => child.value)
+        .join('');
+      paragraphs.push(paragraphText);
+    } else if (Array.isArray(node.children)) {
+      node.children.forEach(child => extractText(child));
+    }
+  }
+  extractText(excerpt);
+  return paragraphs;
+}
+

With this data I was finally able to render the content.

<template>
+  <section>
+    <article class="prose" style="margin-bottom: 1rem;">
+      <h1>Blog Posts</h1>
+      <p>This are my recent blog posts</p>
+    </article>
+    <article v-for="post in posts" :key="post._path" class="prose" style="margin-bottom: 1rem;">
+      <header>
+        <div>{{ post.date }}</div>
+        <h2><nuxt-link :to="post._path">{{ post.title }}</nuxt-link></h2>
+      </header>
+      <main v-if="'paragraphs' in post">
+        <p v-for="paragraph in post.paragraphs" :key="paragraph">
+          {{ paragraph }}
+        </p>
+      </main>
+      <footer>
+        <span><b>Categories: </b></span>
+        <span v-for="category in post.categories" :key="category">{{ category }}, </span>
+        <span><b>Tags: </b></span>
+        <span v-for="tag in post.tags" :key="tag">{{ tag }}, </span><br />
+        <nuxt-link :to="post._path">read more</nuxt-link>
+      </footer>
+    </article>
+  </section>
+</template>
+

cleanup

I originally started the blog with wordpress and many of the old blog posts were basically just one-liners with a couple of links. Some of the posts I didn't even convert to Markdown but just took the HTML from wordpress. I think I used some tool to export everything from wordpress so I could integrate it into my new jekyll site. Anyway. I deleted most of the old blog posts. If you still want to see them there is always the Wayback Machine ;-).

replace jekyll blog

deploment

I published the Jekyll blog on GitHub pages. Of course, I wanted to do the same with the Nuxt blog. The only thing that was supposed to change was the underlying technology from Jekyll to Nuxt.

github-pages is intended for static websites. which means that no server code runs there. The Nuxt project must therefore generate static HTML. In the Nuxt documentation I have a section on GitHub-Pages which says right at the beginning:

GitHub Pages only support static sites, Nuxt will pre-render your application to static HTML files.

which I have just described

and

If you are not using a custom domain, you need to set NUXT_APP_BASE_URL to your repository-slug for your build step.Example: https://.github.io//: NUXT_APP_BASE_URL=// npx nuxt build --preset github_pages

followed by an example GitHub Actions workflow.

So I adjusted my nuxt.config.ts and configured the base URL, since I had created a new repo for the nuxt project and created a deploy.yml in .github/workflows/:

# https://github.com/actions/deploy-pages#usage
+name: Deploy to GitHub Pages
+on:
+  workflow_dispatch:
+  push:
+    branches:
+      - main
+jobs:
+  build:
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@v4
+      - run: corepack enable
+      - uses: actions/setup-node@v4
+        with:
+          node-version: "20"
+      # Pick your own package manager and build script
+      - run: npm install
+      - run: npx nuxt build --preset github_pages
+      - name: Upload artifact
+        uses: actions/upload-pages-artifact@v3
+        with:
+          path: ./.output/public
+  # Deployment job
+  deploy:
+    # Add a dependency to the build job
+    needs: build
+    # Grant GITHUB_TOKEN the permissions required to make a Pages deployment
+    permissions:
+      pages: write      # to deploy to Pages
+      id-token: write   # to verify the deployment originates from an appropriate source
+    # Deploy to the github_pages environment
+    environment:
+      name: github_pages
+      url: ${{ steps.deployment.outputs.page_url }}
+    # Specify runner + deployment step
+    runs-on: ubuntu-latest
+    steps:
+      - name: Deploy to GitHub Pages
+        id: deployment
+        uses: actions/deploy-pages@v4
+

I then adapted this to my needs and wanted to deploy the new blog for the first time. But it didn't work.

replace the old repository

unfortunately, something was often missing during prerendering. The yml file with the gitHub actions consists of 2 areas: build and deploy. build eventually worked, but assets were always missing during deploy. At some point I remembered the gh-pages npm package. I then installed it without further ado and it "worked" straight away. Except for the baseURL. But since I only wanted to have one blog anyway and only wanted to switch from jekyll to nuxt, I quickly deleted the jekyll repo and renamed the nuxt repo.

© by Melchior Jascha Kannengießer
\ No newline at end of file diff --git a/blog/2025/migrate-nuxt2-to-nuxt3/_payload.json b/blog/2025/migrate-nuxt2-to-nuxt3/_payload.json new file mode 100644 index 0000000..1232a21 --- /dev/null +++ b/blog/2025/migrate-nuxt2-to-nuxt3/_payload.json @@ -0,0 +1 @@ +[{"data":1,"prerenderedAt":3776},["ShallowReactive",2],{"blog-/blog/2025/migrate-nuxt2-to-nuxt3":3},{"id":4,"title":5,"body":6,"categories":3725,"date":3727,"description":3728,"draft":3729,"excerpt":3730,"extension":3731,"head":3732,"meta":3768,"navigation":1637,"path":3770,"seo":3771,"stem":3772,"tags":3773,"__hash__":3775},"blog/blog/2025/migrate-nuxt2-to-nuxt3.md","Upgrading a Nuxt 2 Project to Nuxt 3",{"type":7,"value":8,"toc":3694},"minimark",[9,13,17,20,28,31,34,39,46,49,65,68,71,83,86,90,95,98,104,123,126,157,166,175,178,181,308,311,320,345,361,370,376,380,383,392,395,400,411,426,436,1041,1050,1062,1065,1080,1140,1151,1164,1477,1485,1542,1548,1552,1555,1569,1599,1603,1606,1618,1701,1705,1708,1725,1791,1795,1802,1822,1938,1942,1948,1953,2005,2009,2081,2086,2095,2100,2111,2119,2127,2130,2134,2163,2168,2238,2246,2250,2254,2263,2268,2313,2318,2352,2355,2359,2369,2375,2401,2405,2410,2415,2468,2471,2475,2478,2482,2497,2518,2522,2537,2559,2563,2581,2585,2605,2609,2616,2630,2634,2656,2660,2671,2679,2683,2686,2690,2701,2706,2712,2716,2728,2733,2759,2764,2775,2915,2920,3027,3036,3039,3042,3046,3049,3053,3063,3069,3073,3084,3164,3167,3172,3176,3185,3191,3195,3203,3303,3307,3314,3318,3323,3326,3367,3370,3406,3410,3420,3424,3429,3566,3570,3576,3590,3594,3598,3601,3605,3655,3659,3679,3687,3690],[10,11,5],"h1",{"id":12},"upgrading-a-nuxt-2-project-to-nuxt-3",[14,15,16],"p",{},"Web technologies never stand still. With each new version, frameworks bring improvements in performance, developer experience, and long-term maintainability. That’s why I’ve decided to upgrade an existing Nuxt 2 project of mine to Nuxt 3.",[14,18,19],{},"The project in question is a small, personal website—somewhere between an online gallery and a digital business card—created to showcase my father’s artwork. It’s a relatively simple Nuxt 2 application, but it still offers a great opportunity to explore what’s involved in bringing a real-world project up to date with the latest version of Nuxt.",[14,21,22,23,27],{},"Nuxt 3 is built on top of Vue 3 and introduces a modern architecture that includes first-class support for the Composition API, a new ",[24,25,26],"code",{},"server/"," directory for backend logic, and Vite as the default bundler for faster development builds. These changes not only modernize the development workflow but also make the codebase more modular and performant by default.",[14,29,30],{},"This upgrade isn’t just about staying current—it’s a chance to revisit old code, rethink the structure, and embrace best practices that have emerged since the original version was built.",[14,32,33],{},"In this blog post, I’ll document my migration process as it unfolds—step by step. The goal is to provide a transparent look at what’s involved in moving from Nuxt 2 to Nuxt 3, including the challenges I run into and how I solve them. Whether you're working on a personal project or maintaining something in production, I hope this will serve as a useful and honest guide.",[35,36,38],"h2",{"id":37},"_1-preparation","1. Preparation",[14,40,41,42,45],{},"Before jumping into the actual upgrade, I wanted to make sure I had a safe environment to experiment in. Since my Nuxt 2 project is already hosted on GitHub, I didn’t need a separate backup—version control has that covered.",[43,44],"br",{},"\nIf you're not using Git, it's a good idea to create a manual backup of your project folder before starting, just to be safe.",[14,47,48],{},"I created a new branch specifically for the migration:",[50,51,56],"pre",{"className":52,"code":53,"language":54,"meta":55,"style":55},"language-sh shiki shiki-themes material-theme","git checkout -b migrate/nuxt3\n","sh","",[24,57,58],{"__ignoreMap":55},[59,60,63],"span",{"class":61,"line":62},"line",1,[59,64,53],{},[14,66,67],{},"This allows me to work on the Nuxt 3 upgrade without touching the production code. If anything goes wrong, I can always fall back to the main branch or review the commit history.",[14,69,70],{},"If you're using Git on Windows and don’t have access to a Bash shell, the command below should still work in PowerShell or your Git GUI. If you're not using Git at all, simply duplicate your project folder manually and work on the copy.",[14,72,73,74,82],{},"At this stage, I also started looking into the official ",[75,76,81],"a",{"href":77,"rel":78,":target":80},"https://nuxt.com/docs/getting-started/upgrade#nuxt-2-to-nuxt-3",[79],"nofollow","_blank","Nuxt 3 upgrade guide",". It gives a good overview of what has changed between Nuxt 2 and 3—from how routing works to how plugins, middleware, and API calls are structured.",[14,84,85],{},"Finally, I listed all major dependencies in the project and began checking whether they are compatible with Nuxt 3 or if replacements are needed.",[35,87,89],{"id":88},"_2-migration","2. Migration",[91,92,94],"h3",{"id":93},"_21-updating-dependencies","2.1 Updating Dependencies",[14,96,97],{},"The first step in the actual migration process is to update the project dependencies. Since Nuxt 3 is built on top of Vue 3 and introduces a modernized architecture, many packages from the Nuxt 2 ecosystem are either no longer compatible or have been replaced by new solutions. Before making any code changes, it’s important to ensure that your dependencies are up to date and compatible with Nuxt 3.",[14,99,100],{},[101,102,103],"strong",{},"How do you know which dependencies need to be updated or replaced?",[14,105,106,107,110,111,114,115,118,119,122],{},"Start by opening your ",[24,108,109],{},"package.json"," and making a list of all packages under ",[24,112,113],{},"dependencies"," and ",[24,116,117],{},"devDependencies",". For each package, check the official documentation or GitHub repository to see if it supports Nuxt 3 (or Vue 3). The ",[75,120,81],{"href":77,"rel":121},[79]," is a great starting point, and many popular Nuxt modules have their own migration guides or compatibility tables.",[14,124,125],{},"Look out for these common patterns:",[127,128,129,137,154],"ul",{},[130,131,132,133,136],"li",{},"Packages starting with ",[24,134,135],{},"@nuxtjs/"," may need to be updated or replaced.",[130,138,139,140,143,144,143,147,143,150,153],{},"Any direct Vue 2 dependencies (like ",[24,141,142],{},"vue",", ",[24,145,146],{},"vuex",[24,148,149],{},"vue-router",[24,151,152],{},"vue-template-compiler",") should be removed or replaced with their Vue 3 equivalents.",[130,155,156],{},"If you’re unsure about a package, search for “Nuxt 3 support” or “Vue 3 support” in its documentation or issues.",[14,158,159,160,165],{},"You can also use tools like ",[75,161,164],{"href":162,"rel":163},"https://www.npmjs.com/package/npm-check-updates",[79],"npm-check-updates"," to quickly see which of your dependencies have newer versions available:",[50,167,169],{"className":52,"code":168,"language":54,"meta":55,"style":55},"npx npm-check-updates\n",[24,170,171],{"__ignoreMap":55},[59,172,173],{"class":61,"line":62},[59,174,168],{},[14,176,177],{},"However, always double-check compatibility manually, as not every update is Nuxt 3-ready.",[14,179,180],{},"In my own project, I identified the following outdated or incompatible dependencies:",[182,183,184,200],"table",{},[185,186,187],"thead",{},[188,189,190,194,197],"tr",{},[191,192,193],"th",{},"Package",[191,195,196],{},"Status in Nuxt 3",[191,198,199],{},"Recommendation",[201,202,203,218,228,238,246,257,268,279,288,298],"tbody",{},[188,204,205,209,212],{},[206,207,208],"td",{},"nuxt",[206,210,211],{},"❌ Not compatible",[206,213,214,215],{},"Update to ",[24,216,217],{},"nuxt@latest",[188,219,220,222,225],{},[206,221,142],{},[206,223,224],{},"❌ Not required",[206,226,227],{},"Remove (Nuxt 3 includes Vue 3 internally)",[188,229,230,233,235],{},[206,231,232],{},"vue-server-renderer",[206,234,224],{},[206,236,237],{},"Remove",[188,239,240,242,244],{},[206,241,152],{},[206,243,224],{},[206,245,237],{},[188,247,248,251,254],{},[206,249,250],{},"@nuxtjs/vuetify",[206,252,253],{},"⚠️ Needs update",[206,255,256],{},"Replace with latest Vuetify for Vue 3",[188,258,259,262,265],{},[206,260,261],{},"core-js",[206,263,264],{},"✅ Compatible (optional)",[206,266,267],{},"Keep if polyfills are needed",[188,269,270,273,276],{},[206,271,272],{},"compass-mixins",[206,274,275],{},"✅ Compatible",[206,277,278],{},"Keep if used",[188,280,281,284,286],{},[206,282,283],{},"push-dir",[206,285,275],{},[206,287,278],{},[188,289,290,293,295],{},[206,291,292],{},"sass",[206,294,275],{},[206,296,297],{},"Keep",[188,299,300,303,305],{},[206,301,302],{},"sass-loader",[206,304,253],{},[206,306,307],{},"Update to version 12 or higher",[14,309,310],{},"To update the dependencies, I used the following commands:",[50,312,314],{"className":52,"code":313,"language":54,"meta":55,"style":55},"npm uninstall vue vue-server-renderer vue-template-compiler @nuxtjs/vuetify nuxt\n",[24,315,316],{"__ignoreMap":55},[59,317,318],{"class":61,"line":62},[59,319,313],{},[321,322,323,333,342],"blockquote",{},[14,324,325,328,329,332],{},[101,326,327],{},"Note:"," At the time of writing, Nuxt 4 is already in beta. This means that running ",[24,330,331],{},"npm install nuxt@latest"," might soon install Nuxt 4 instead of Nuxt 3.\nTo make sure you’re installing Nuxt 3, use the explicit version tag:",[50,334,336],{"className":52,"code":335,"language":54,"meta":55,"style":55},"npm install nuxt@3\n",[24,337,338],{"__ignoreMap":55},[59,339,340],{"class":61,"line":62},[59,341,335],{},[14,343,344],{},"This guarantees that you’re working with the stable Nuxt 3 release, which is what this migration guide is based on.",[50,346,348],{"className":52,"code":347,"language":54,"meta":55,"style":55},"npm install nuxt@latest\nnpm install vuetify@latest\n",[24,349,350,355],{"__ignoreMap":55},[59,351,352],{"class":61,"line":62},[59,353,354],{},"npm install nuxt@latest\n",[59,356,358],{"class":61,"line":357},2,[59,359,360],{},"npm install vuetify@latest\n",[50,362,364],{"className":52,"code":363,"language":54,"meta":55,"style":55},"npm install --save-dev sass-loader@^12\n",[24,365,366],{"__ignoreMap":55},[59,367,368],{"class":61,"line":62},[59,369,363],{},[14,371,372,373,375],{},"After running these commands, my ",[24,374,109],{}," was much cleaner and ready for the next steps in the migration.",[91,377,379],{"id":378},"_22-adapting-the-codebase-and-directory-structure","2.2 Adapting the Codebase and Directory Structure",[14,381,382],{},"With the dependencies updated, the next step is to adapt your codebase and project structure to match the conventions and requirements of Nuxt 3. Nuxt 3 introduces several architectural changes, including new directories, file naming conventions, and the removal or replacement of some legacy features.",[14,384,385,386,391],{},"Start by reviewing the official ",[75,387,390],{"href":388,"rel":389},"https://nuxt.com/docs/guide/directory-structure/overview",[79],"Nuxt 3 directory structure documentation"," to get an overview of what’s new and what has changed.",[14,393,394],{},"Some of the most important changes include:",[396,397,399],"h4",{"id":398},"_221-configuration-file","2.2.1 Configuration file",[14,401,402,403,406,407,410],{},"Rename ",[24,404,405],{},"nuxt.config.js"," to ",[24,408,409],{},"nuxt.config.ts"," and update its syntax to use TypeScript and the new Nuxt 3 options.",[50,412,414],{"className":52,"code":413,"language":54,"meta":55,"style":55},"# Rename your Nuxt config file to use TypeScript\nmv nuxt.config.js nuxt.config.ts\n",[24,415,416,421],{"__ignoreMap":55},[59,417,418],{"class":61,"line":62},[59,419,420],{},"# Rename your Nuxt config file to use TypeScript\n",[59,422,423],{"class":61,"line":357},[59,424,425],{},"mv nuxt.config.js nuxt.config.ts\n",[14,427,428,429,432,433,435],{},"and use ",[24,430,431],{},"defineNuxtConfig",". My ",[24,434,409],{}," file now looks like this:",[50,437,441],{"className":438,"code":439,"language":440,"meta":55,"style":55},"language-ts shiki shiki-themes material-theme","export default defineNuxtConfig({\n // Target: Only 'static' or 'server' in Nuxt 2, in Nuxt 3 use 'ssr: false' for static\n ssr: false, // Set to false if you want a static site\n app: {\n baseURL: '/kunstkanne/',\n head: {\n title: 'kunstkanne',\n htmlAttrs: {\n lang: 'en'\n },\n meta: [\n { charset: 'utf-8' },\n { name: 'viewport', content: 'width=device-width, initial-scale=1' },\n { name: 'description', content: '' },\n { name: 'format-detection', content: 'telephone=no' }\n ],\n link: [\n { rel: 'apple-touch-icon', sizes: '180x180', type: 'image/x-icon', href: '/apple-touch-icon.png' },\n { rel: 'icon', type: 'image/png', sizes: '32x32', href: '/favicon-32x32.png' },\n { rel: 'icon', type: 'image/png', sizes: '16x16', href: '/favicon-16x16.png' },\n { rel: 'manifest', href: '/site.webmanifest' }\n ]\n }\n },\n css: [\n '~/assets/css/main.scss'\n ],\n components: true,\n modules: [\n // Add Nuxt 3 compatible modules here\n ],\n build: {\n // Add custom build options if needed\n }\n}) \n","ts",[24,442,443,464,470,490,501,522,532,549,559,575,581,592,613,646,673,705,713,723,784,841,896,927,933,939,945,955,966,974,987,997,1003,1010,1020,1026,1032],{"__ignoreMap":55},[59,444,445,449,452,456,460],{"class":61,"line":62},[59,446,448],{"class":447},"s6cf3","export",[59,450,451],{"class":447}," default",[59,453,455],{"class":454},"sdLwU"," defineNuxtConfig",[59,457,459],{"class":458},"svy0-","(",[59,461,463],{"class":462},"sAklC","{\n",[59,465,466],{"class":61,"line":357},[59,467,469],{"class":468},"s0_hs"," // Target: Only 'static' or 'server' in Nuxt 2, in Nuxt 3 use 'ssr: false' for static\n",[59,471,473,477,480,484,487],{"class":61,"line":472},3,[59,474,476],{"class":475},"s-wAU"," ssr",[59,478,479],{"class":462},":",[59,481,483],{"class":482},"sbqyR"," false",[59,485,486],{"class":462},",",[59,488,489],{"class":468}," // Set to false if you want a static site\n",[59,491,493,496,498],{"class":61,"line":492},4,[59,494,495],{"class":475}," app",[59,497,479],{"class":462},[59,499,500],{"class":462}," {\n",[59,502,504,507,509,512,516,519],{"class":61,"line":503},5,[59,505,506],{"class":475}," baseURL",[59,508,479],{"class":462},[59,510,511],{"class":462}," '",[59,513,515],{"class":514},"sfyAc","/kunstkanne/",[59,517,518],{"class":462},"'",[59,520,521],{"class":462},",\n",[59,523,525,528,530],{"class":61,"line":524},6,[59,526,527],{"class":475}," head",[59,529,479],{"class":462},[59,531,500],{"class":462},[59,533,535,538,540,542,545,547],{"class":61,"line":534},7,[59,536,537],{"class":475}," title",[59,539,479],{"class":462},[59,541,511],{"class":462},[59,543,544],{"class":514},"kunstkanne",[59,546,518],{"class":462},[59,548,521],{"class":462},[59,550,552,555,557],{"class":61,"line":551},8,[59,553,554],{"class":475}," htmlAttrs",[59,556,479],{"class":462},[59,558,500],{"class":462},[59,560,562,565,567,569,572],{"class":61,"line":561},9,[59,563,564],{"class":475}," lang",[59,566,479],{"class":462},[59,568,511],{"class":462},[59,570,571],{"class":514},"en",[59,573,574],{"class":462},"'\n",[59,576,578],{"class":61,"line":577},10,[59,579,580],{"class":462}," },\n",[59,582,584,587,589],{"class":61,"line":583},11,[59,585,586],{"class":475}," meta",[59,588,479],{"class":462},[59,590,591],{"class":458}," [\n",[59,593,595,598,601,603,605,608,610],{"class":61,"line":594},12,[59,596,597],{"class":462}," {",[59,599,600],{"class":475}," charset",[59,602,479],{"class":462},[59,604,511],{"class":462},[59,606,607],{"class":514},"utf-8",[59,609,518],{"class":462},[59,611,612],{"class":462}," },\n",[59,614,616,618,621,623,625,628,630,632,635,637,639,642,644],{"class":61,"line":615},13,[59,617,597],{"class":462},[59,619,620],{"class":475}," name",[59,622,479],{"class":462},[59,624,511],{"class":462},[59,626,627],{"class":514},"viewport",[59,629,518],{"class":462},[59,631,486],{"class":462},[59,633,634],{"class":475}," content",[59,636,479],{"class":462},[59,638,511],{"class":462},[59,640,641],{"class":514},"width=device-width, initial-scale=1",[59,643,518],{"class":462},[59,645,612],{"class":462},[59,647,649,651,653,655,657,660,662,664,666,668,671],{"class":61,"line":648},14,[59,650,597],{"class":462},[59,652,620],{"class":475},[59,654,479],{"class":462},[59,656,511],{"class":462},[59,658,659],{"class":514},"description",[59,661,518],{"class":462},[59,663,486],{"class":462},[59,665,634],{"class":475},[59,667,479],{"class":462},[59,669,670],{"class":462}," ''",[59,672,612],{"class":462},[59,674,676,678,680,682,684,687,689,691,693,695,697,700,702],{"class":61,"line":675},15,[59,677,597],{"class":462},[59,679,620],{"class":475},[59,681,479],{"class":462},[59,683,511],{"class":462},[59,685,686],{"class":514},"format-detection",[59,688,518],{"class":462},[59,690,486],{"class":462},[59,692,634],{"class":475},[59,694,479],{"class":462},[59,696,511],{"class":462},[59,698,699],{"class":514},"telephone=no",[59,701,518],{"class":462},[59,703,704],{"class":462}," }\n",[59,706,708,711],{"class":61,"line":707},16,[59,709,710],{"class":458}," ]",[59,712,521],{"class":462},[59,714,716,719,721],{"class":61,"line":715},17,[59,717,718],{"class":475}," link",[59,720,479],{"class":462},[59,722,591],{"class":458},[59,724,726,728,731,733,735,738,740,742,745,747,749,752,754,756,759,761,763,766,768,770,773,775,777,780,782],{"class":61,"line":725},18,[59,727,597],{"class":462},[59,729,730],{"class":475}," rel",[59,732,479],{"class":462},[59,734,511],{"class":462},[59,736,737],{"class":514},"apple-touch-icon",[59,739,518],{"class":462},[59,741,486],{"class":462},[59,743,744],{"class":475}," sizes",[59,746,479],{"class":462},[59,748,511],{"class":462},[59,750,751],{"class":514},"180x180",[59,753,518],{"class":462},[59,755,486],{"class":462},[59,757,758],{"class":475}," type",[59,760,479],{"class":462},[59,762,511],{"class":462},[59,764,765],{"class":514},"image/x-icon",[59,767,518],{"class":462},[59,769,486],{"class":462},[59,771,772],{"class":475}," href",[59,774,479],{"class":462},[59,776,511],{"class":462},[59,778,779],{"class":514},"/apple-touch-icon.png",[59,781,518],{"class":462},[59,783,612],{"class":462},[59,785,787,789,791,793,795,798,800,802,804,806,808,811,813,815,817,819,821,824,826,828,830,832,834,837,839],{"class":61,"line":786},19,[59,788,597],{"class":462},[59,790,730],{"class":475},[59,792,479],{"class":462},[59,794,511],{"class":462},[59,796,797],{"class":514},"icon",[59,799,518],{"class":462},[59,801,486],{"class":462},[59,803,758],{"class":475},[59,805,479],{"class":462},[59,807,511],{"class":462},[59,809,810],{"class":514},"image/png",[59,812,518],{"class":462},[59,814,486],{"class":462},[59,816,744],{"class":475},[59,818,479],{"class":462},[59,820,511],{"class":462},[59,822,823],{"class":514},"32x32",[59,825,518],{"class":462},[59,827,486],{"class":462},[59,829,772],{"class":475},[59,831,479],{"class":462},[59,833,511],{"class":462},[59,835,836],{"class":514},"/favicon-32x32.png",[59,838,518],{"class":462},[59,840,612],{"class":462},[59,842,844,846,848,850,852,854,856,858,860,862,864,866,868,870,872,874,876,879,881,883,885,887,889,892,894],{"class":61,"line":843},20,[59,845,597],{"class":462},[59,847,730],{"class":475},[59,849,479],{"class":462},[59,851,511],{"class":462},[59,853,797],{"class":514},[59,855,518],{"class":462},[59,857,486],{"class":462},[59,859,758],{"class":475},[59,861,479],{"class":462},[59,863,511],{"class":462},[59,865,810],{"class":514},[59,867,518],{"class":462},[59,869,486],{"class":462},[59,871,744],{"class":475},[59,873,479],{"class":462},[59,875,511],{"class":462},[59,877,878],{"class":514},"16x16",[59,880,518],{"class":462},[59,882,486],{"class":462},[59,884,772],{"class":475},[59,886,479],{"class":462},[59,888,511],{"class":462},[59,890,891],{"class":514},"/favicon-16x16.png",[59,893,518],{"class":462},[59,895,612],{"class":462},[59,897,899,901,903,905,907,910,912,914,916,918,920,923,925],{"class":61,"line":898},21,[59,900,597],{"class":462},[59,902,730],{"class":475},[59,904,479],{"class":462},[59,906,511],{"class":462},[59,908,909],{"class":514},"manifest",[59,911,518],{"class":462},[59,913,486],{"class":462},[59,915,772],{"class":475},[59,917,479],{"class":462},[59,919,511],{"class":462},[59,921,922],{"class":514},"/site.webmanifest",[59,924,518],{"class":462},[59,926,704],{"class":462},[59,928,930],{"class":61,"line":929},22,[59,931,932],{"class":458}," ]\n",[59,934,936],{"class":61,"line":935},23,[59,937,938],{"class":462}," }\n",[59,940,942],{"class":61,"line":941},24,[59,943,944],{"class":462}," },\n",[59,946,948,951,953],{"class":61,"line":947},25,[59,949,950],{"class":475}," css",[59,952,479],{"class":462},[59,954,591],{"class":458},[59,956,958,961,964],{"class":61,"line":957},26,[59,959,960],{"class":462}," '",[59,962,963],{"class":514},"~/assets/css/main.scss",[59,965,574],{"class":462},[59,967,969,972],{"class":61,"line":968},27,[59,970,971],{"class":458}," ]",[59,973,521],{"class":462},[59,975,977,980,982,985],{"class":61,"line":976},28,[59,978,979],{"class":475}," components",[59,981,479],{"class":462},[59,983,984],{"class":482}," true",[59,986,521],{"class":462},[59,988,990,993,995],{"class":61,"line":989},29,[59,991,992],{"class":475}," modules",[59,994,479],{"class":462},[59,996,591],{"class":458},[59,998,1000],{"class":61,"line":999},30,[59,1001,1002],{"class":468}," // Add Nuxt 3 compatible modules here\n",[59,1004,1006,1008],{"class":61,"line":1005},31,[59,1007,971],{"class":458},[59,1009,521],{"class":462},[59,1011,1013,1016,1018],{"class":61,"line":1012},32,[59,1014,1015],{"class":475}," build",[59,1017,479],{"class":462},[59,1019,500],{"class":462},[59,1021,1023],{"class":61,"line":1022},33,[59,1024,1025],{"class":468}," // Add custom build options if needed\n",[59,1027,1029],{"class":61,"line":1028},34,[59,1030,1031],{"class":462}," }\n",[59,1033,1035,1038],{"class":61,"line":1034},35,[59,1036,1037],{"class":462},"}",[59,1039,1040],{"class":458},")\n",[14,1042,1043,1044,1046,1047,1049],{},"When migrating your Nuxt config from JavaScript to TypeScript (",[24,1045,405],{}," → ",[24,1048,409],{},"), you might encounter some common TypeScript or linter errors. Here are two typical issues and how to resolve them:",[127,1051,1052],{},[130,1053,1054,1057,1059],{},[101,1055,1056],{},"Error:",[43,1058],{},[24,1060,1061],{},"Cannot find name 'defineNuxtConfig'.",[14,1063,1064],{},"This happens because TypeScript (and your linter) does not know about the special Nuxt 3 global types by default.",[14,1066,1067,1068,1071,1072,1075,1076,1079],{},"to fix this, add ",[24,1069,1070],{},"\"nuxt\""," to the ",[24,1073,1074],{},"types"," array in your ",[24,1077,1078],{},"tsconfig.json"," file.",[50,1081,1085],{"className":1082,"code":1083,"language":1084,"meta":55,"style":55},"language-json shiki shiki-themes material-theme","{\n \"compilerOptions\": {\n \"types\": [\"nuxt\"]\n }\n}\n","json",[24,1086,1087,1091,1107,1131,1135],{"__ignoreMap":55},[59,1088,1089],{"class":61,"line":62},[59,1090,463],{"class":462},[59,1092,1093,1096,1100,1103,1105],{"class":61,"line":357},[59,1094,1095],{"class":462}," \"",[59,1097,1099],{"class":1098},"sJ14y","compilerOptions",[59,1101,1102],{"class":462},"\"",[59,1104,479],{"class":462},[59,1106,500],{"class":462},[59,1108,1109,1112,1115,1117,1119,1122,1124,1126,1128],{"class":61,"line":472},[59,1110,1111],{"class":462}," \"",[59,1113,1074],{"class":1114},"s5Dmg",[59,1116,1102],{"class":462},[59,1118,479],{"class":462},[59,1120,1121],{"class":462}," [",[59,1123,1102],{"class":462},[59,1125,208],{"class":514},[59,1127,1102],{"class":462},[59,1129,1130],{"class":462},"]\n",[59,1132,1133],{"class":61,"line":492},[59,1134,1031],{"class":462},[59,1136,1137],{"class":61,"line":503},[59,1138,1139],{"class":462},"}\n",[127,1141,1142],{},[130,1143,1144,1146,1148],{},[101,1145,1056],{},[43,1147],{},[24,1149,1150],{},"Cannot read file './.nuxt/tsconfig.json'.",[14,1152,1153,1154,1156,1157,1160,1161,1163],{},"This occurs if your ",[24,1155,1078],{}," tries to extend a file that does not exist yet. The ",[24,1158,1159],{},".nuxt/tsconfig.json"," file is generated only after the first build, so it should not be referenced directly in your main ",[24,1162,1078],{},".",[50,1165,1167],{"className":1082,"code":1166,"language":1084,"meta":55,"style":55},"{\n \"compilerOptions\": {\n \"target\": \"ESNext\",\n \"module\": \"ESNext\",\n \"moduleResolution\": \"Node\",\n \"strict\": true,\n \"jsx\": \"preserve\",\n \"esModuleInterop\": true,\n \"allowJs\": true,\n \"skipLibCheck\": true,\n \"types\": [\"nuxt\"],\n \"baseUrl\": \".\",\n \"paths\": {\n \"~/*\": [\"./*\"],\n \"@/*\": [\"./*\"]\n }\n },\n \"exclude\": [\"node_modules\", \".output\", \".nuxt\", \"dist\"]\n}\n",[24,1168,1169,1173,1185,1206,1225,1245,1259,1279,1292,1305,1318,1339,1358,1371,1395,1416,1420,1424,1473],{"__ignoreMap":55},[59,1170,1171],{"class":61,"line":62},[59,1172,463],{"class":462},[59,1174,1175,1177,1179,1181,1183],{"class":61,"line":357},[59,1176,1095],{"class":462},[59,1178,1099],{"class":1098},[59,1180,1102],{"class":462},[59,1182,479],{"class":462},[59,1184,500],{"class":462},[59,1186,1187,1189,1192,1194,1196,1199,1202,1204],{"class":61,"line":472},[59,1188,1111],{"class":462},[59,1190,1191],{"class":1114},"target",[59,1193,1102],{"class":462},[59,1195,479],{"class":462},[59,1197,1198],{"class":462}," \"",[59,1200,1201],{"class":514},"ESNext",[59,1203,1102],{"class":462},[59,1205,521],{"class":462},[59,1207,1208,1210,1213,1215,1217,1219,1221,1223],{"class":61,"line":492},[59,1209,1111],{"class":462},[59,1211,1212],{"class":1114},"module",[59,1214,1102],{"class":462},[59,1216,479],{"class":462},[59,1218,1198],{"class":462},[59,1220,1201],{"class":514},[59,1222,1102],{"class":462},[59,1224,521],{"class":462},[59,1226,1227,1229,1232,1234,1236,1238,1241,1243],{"class":61,"line":503},[59,1228,1111],{"class":462},[59,1230,1231],{"class":1114},"moduleResolution",[59,1233,1102],{"class":462},[59,1235,479],{"class":462},[59,1237,1198],{"class":462},[59,1239,1240],{"class":514},"Node",[59,1242,1102],{"class":462},[59,1244,521],{"class":462},[59,1246,1247,1249,1252,1254,1256],{"class":61,"line":524},[59,1248,1111],{"class":462},[59,1250,1251],{"class":1114},"strict",[59,1253,1102],{"class":462},[59,1255,479],{"class":462},[59,1257,1258],{"class":462}," true,\n",[59,1260,1261,1263,1266,1268,1270,1272,1275,1277],{"class":61,"line":534},[59,1262,1111],{"class":462},[59,1264,1265],{"class":1114},"jsx",[59,1267,1102],{"class":462},[59,1269,479],{"class":462},[59,1271,1198],{"class":462},[59,1273,1274],{"class":514},"preserve",[59,1276,1102],{"class":462},[59,1278,521],{"class":462},[59,1280,1281,1283,1286,1288,1290],{"class":61,"line":551},[59,1282,1111],{"class":462},[59,1284,1285],{"class":1114},"esModuleInterop",[59,1287,1102],{"class":462},[59,1289,479],{"class":462},[59,1291,1258],{"class":462},[59,1293,1294,1296,1299,1301,1303],{"class":61,"line":561},[59,1295,1111],{"class":462},[59,1297,1298],{"class":1114},"allowJs",[59,1300,1102],{"class":462},[59,1302,479],{"class":462},[59,1304,1258],{"class":462},[59,1306,1307,1309,1312,1314,1316],{"class":61,"line":577},[59,1308,1111],{"class":462},[59,1310,1311],{"class":1114},"skipLibCheck",[59,1313,1102],{"class":462},[59,1315,479],{"class":462},[59,1317,1258],{"class":462},[59,1319,1320,1322,1324,1326,1328,1330,1332,1334,1336],{"class":61,"line":583},[59,1321,1111],{"class":462},[59,1323,1074],{"class":1114},[59,1325,1102],{"class":462},[59,1327,479],{"class":462},[59,1329,1121],{"class":462},[59,1331,1102],{"class":462},[59,1333,208],{"class":514},[59,1335,1102],{"class":462},[59,1337,1338],{"class":462},"],\n",[59,1340,1341,1343,1346,1348,1350,1352,1354,1356],{"class":61,"line":594},[59,1342,1111],{"class":462},[59,1344,1345],{"class":1114},"baseUrl",[59,1347,1102],{"class":462},[59,1349,479],{"class":462},[59,1351,1198],{"class":462},[59,1353,1163],{"class":514},[59,1355,1102],{"class":462},[59,1357,521],{"class":462},[59,1359,1360,1362,1365,1367,1369],{"class":61,"line":615},[59,1361,1111],{"class":462},[59,1363,1364],{"class":1114},"paths",[59,1366,1102],{"class":462},[59,1368,479],{"class":462},[59,1370,500],{"class":462},[59,1372,1373,1376,1380,1382,1384,1386,1388,1391,1393],{"class":61,"line":648},[59,1374,1375],{"class":462}," \"",[59,1377,1379],{"class":1378},"sx098","~/*",[59,1381,1102],{"class":462},[59,1383,479],{"class":462},[59,1385,1121],{"class":462},[59,1387,1102],{"class":462},[59,1389,1390],{"class":514},"./*",[59,1392,1102],{"class":462},[59,1394,1338],{"class":462},[59,1396,1397,1399,1402,1404,1406,1408,1410,1412,1414],{"class":61,"line":675},[59,1398,1375],{"class":462},[59,1400,1401],{"class":1378},"@/*",[59,1403,1102],{"class":462},[59,1405,479],{"class":462},[59,1407,1121],{"class":462},[59,1409,1102],{"class":462},[59,1411,1390],{"class":514},[59,1413,1102],{"class":462},[59,1415,1130],{"class":462},[59,1417,1418],{"class":61,"line":707},[59,1419,938],{"class":462},[59,1421,1422],{"class":61,"line":715},[59,1423,944],{"class":462},[59,1425,1426,1428,1431,1433,1435,1437,1439,1442,1444,1446,1448,1451,1453,1455,1457,1460,1462,1464,1466,1469,1471],{"class":61,"line":725},[59,1427,1095],{"class":462},[59,1429,1430],{"class":1098},"exclude",[59,1432,1102],{"class":462},[59,1434,479],{"class":462},[59,1436,1121],{"class":462},[59,1438,1102],{"class":462},[59,1440,1441],{"class":514},"node_modules",[59,1443,1102],{"class":462},[59,1445,486],{"class":462},[59,1447,1198],{"class":462},[59,1449,1450],{"class":514},".output",[59,1452,1102],{"class":462},[59,1454,486],{"class":462},[59,1456,1198],{"class":462},[59,1458,1459],{"class":514},".nuxt",[59,1461,1102],{"class":462},[59,1463,486],{"class":462},[59,1465,1198],{"class":462},[59,1467,1468],{"class":514},"dist",[59,1470,1102],{"class":462},[59,1472,1130],{"class":462},[59,1474,1475],{"class":61,"line":786},[59,1476,1139],{"class":462},[14,1478,1479],{},[101,1480,1481,1482,1484],{},"What do these ",[24,1483,1078],{}," options mean?",[127,1486,1487,1496,1501,1506,1515,1523,1537],{},[130,1488,1489,143,1491,143,1493,1495],{},[24,1490,1191],{},[24,1492,1212],{},[24,1494,1231],{},": Set the JavaScript version and module system for your project.",[130,1497,1498,1500],{},[24,1499,1251],{},": Enables strict type-checking for safer code.",[130,1502,1503,1505],{},[24,1504,1265],{},": Allows Vue’s JSX/TSX support if needed.",[130,1507,1508,143,1510,143,1512,1514],{},[24,1509,1285],{},[24,1511,1298],{},[24,1513,1311],{},": Improve compatibility with JavaScript and third-party libraries.",[130,1516,1517,1519,1520,1522],{},[24,1518,1074],{},": Ensures Nuxt’s global types (like ",[24,1521,431],{},") are available everywhere.",[130,1524,1525,143,1527,1529,1530,114,1533,1536],{},[24,1526,1345],{},[24,1528,1364],{},": Allow you to use ",[24,1531,1532],{},"~/",[24,1534,1535],{},"@/"," aliases in your imports.",[130,1538,1539,1541],{},[24,1540,1430],{},": Prevents TypeScript from checking build and output folders.",[14,1543,1544,1545,1547],{},"If you run into these errors, updating your ",[24,1546,1078],{}," as shown above will resolve them and ensure a smooth TypeScript experience with Nuxt 3.",[396,1549,1551],{"id":1550},"_222-middleware-and-server-routes","2.2.2 Middleware and server routes",[14,1553,1554],{},"In my project, I did not have any custom server middleware or API routes, so there was nothing to migrate for this step.",[14,1556,1557,1558,1561,1562,1565,1566,1568],{},"If you do have custom middleware, you should move them from the old ",[24,1559,1560],{},"middleware/"," directory to the new ",[24,1563,1564],{},"server/middleware/"," directory in Nuxt 3.",[43,1567],{},"\nFor example:",[50,1570,1572],{"className":52,"code":1571,"language":54,"meta":55,"style":55},"# Move your custom server middleware or API routes into the new server/ directory\n# For example, move from:\n# /middleware/my-middleware.js\n# to:\n# /server/middleware/my-middleware.ts\n",[24,1573,1574,1579,1584,1589,1594],{"__ignoreMap":55},[59,1575,1576],{"class":61,"line":62},[59,1577,1578],{},"# Move your custom server middleware or API routes into the new server/ directory\n",[59,1580,1581],{"class":61,"line":357},[59,1582,1583],{},"# For example, move from:\n",[59,1585,1586],{"class":61,"line":472},[59,1587,1588],{},"# /middleware/my-middleware.js\n",[59,1590,1591],{"class":61,"line":492},[59,1592,1593],{},"# to:\n",[59,1595,1596],{"class":61,"line":503},[59,1597,1598],{},"# /server/middleware/my-middleware.ts\n",[396,1600,1602],{"id":1601},"_223-store","2.2.3 Store",[14,1604,1605],{},"In my project, I did not use Vuex or any other state management solution, so there was nothing to migrate for this step.",[14,1607,1608,1609,1614,1615,1617],{},"If your project uses Vuex, you should consider migrating to ",[75,1610,1613],{"href":1611,"rel":1612},"https://pinia.vuejs.org/",[79],"Pinia",", the new recommended state management solution for Nuxt 3.",[43,1616],{},"\nHere’s how you would do it:",[50,1619,1621],{"className":52,"code":1620,"language":54,"meta":55,"style":55},"# If you used Vuex, install Pinia and create a new store in the stores/ directory\nnpm install pinia\n\n# Example: stores/counter.ts\nimport { defineStore } from 'pinia'\n\nexport const useCounterStore = defineStore('counter', {\n state: () => ({\n count: 0\n }),\n actions: {\n increment() {\n this.count++\n }\n }\n})\n",[24,1622,1623,1628,1633,1639,1644,1649,1653,1658,1663,1668,1673,1678,1683,1688,1692,1696],{"__ignoreMap":55},[59,1624,1625],{"class":61,"line":62},[59,1626,1627],{},"# If you used Vuex, install Pinia and create a new store in the stores/ directory\n",[59,1629,1630],{"class":61,"line":357},[59,1631,1632],{},"npm install pinia\n",[59,1634,1635],{"class":61,"line":472},[59,1636,1638],{"emptyLinePlaceholder":1637},true,"\n",[59,1640,1641],{"class":61,"line":492},[59,1642,1643],{},"# Example: stores/counter.ts\n",[59,1645,1646],{"class":61,"line":503},[59,1647,1648],{},"import { defineStore } from 'pinia'\n",[59,1650,1651],{"class":61,"line":524},[59,1652,1638],{"emptyLinePlaceholder":1637},[59,1654,1655],{"class":61,"line":534},[59,1656,1657],{},"export const useCounterStore = defineStore('counter', {\n",[59,1659,1660],{"class":61,"line":551},[59,1661,1662],{}," state: () => ({\n",[59,1664,1665],{"class":61,"line":561},[59,1666,1667],{}," count: 0\n",[59,1669,1670],{"class":61,"line":577},[59,1671,1672],{}," }),\n",[59,1674,1675],{"class":61,"line":583},[59,1676,1677],{}," actions: {\n",[59,1679,1680],{"class":61,"line":594},[59,1681,1682],{}," increment() {\n",[59,1684,1685],{"class":61,"line":615},[59,1686,1687],{}," this.count++\n",[59,1689,1690],{"class":61,"line":648},[59,1691,938],{},[59,1693,1694],{"class":61,"line":675},[59,1695,1031],{},[59,1697,1698],{"class":61,"line":707},[59,1699,1700],{},"})\n",[396,1702,1704],{"id":1703},"_224-plugins-and-composables","2.2.4 Plugins and composables",[14,1706,1707],{},"In my project, I did not have any custom plugins or composables, so there was nothing to migrate for this step.",[14,1709,1710,1711,143,1714,1717,1718,1721,1722,1724],{},"If your project uses plugins or reusable logic (e.g. from ",[24,1712,1713],{},"plugins/",[24,1715,1716],{},"utils/",", or mixins), you should move them to the new ",[24,1719,1720],{},"composables/"," directory and update their syntax to use the Composition API.",[43,1723],{},"\nHere’s an example of a simple composable:",[50,1726,1728],{"className":438,"code":1727,"language":440,"meta":55,"style":55},"// Example: composables/useExample.ts\nexport function useExample() {\n const message = ref('Hello from a composable!')\n return { message }\n}\n",[24,1729,1730,1735,1750,1775,1787],{"__ignoreMap":55},[59,1731,1732],{"class":61,"line":62},[59,1733,1734],{"class":468},"// Example: composables/useExample.ts\n",[59,1736,1737,1739,1742,1745,1748],{"class":61,"line":357},[59,1738,448],{"class":447},[59,1740,1741],{"class":1098}," function",[59,1743,1744],{"class":454}," useExample",[59,1746,1747],{"class":462},"()",[59,1749,500],{"class":462},[59,1751,1752,1755,1758,1761,1764,1766,1768,1771,1773],{"class":61,"line":472},[59,1753,1754],{"class":1098}," const",[59,1756,1757],{"class":458}," message",[59,1759,1760],{"class":462}," =",[59,1762,1763],{"class":454}," ref",[59,1765,459],{"class":475},[59,1767,518],{"class":462},[59,1769,1770],{"class":514},"Hello from a composable!",[59,1772,518],{"class":462},[59,1774,1040],{"class":475},[59,1776,1777,1780,1783,1785],{"class":61,"line":492},[59,1778,1779],{"class":447}," return",[59,1781,1782],{"class":462}," {",[59,1784,1757],{"class":458},[59,1786,704],{"class":462},[59,1788,1789],{"class":61,"line":503},[59,1790,1139],{"class":462},[396,1792,1794],{"id":1793},"_225-api-requests","2.2.5 API requests",[14,1796,1797,1798,1801],{},"In my project, I did not use the ",[24,1799,1800],{},"$axios"," module or make any direct API requests, so there was nothing to migrate for this step.",[14,1803,1804,1805,1807,1808,1811,1812,1815,1816,1163,1819,1821],{},"If your project uses ",[24,1806,1800],{}," (for example, ",[24,1809,1810],{},"this.$axios.get('/api/data')","), you should migrate to the new Nuxt 3 composables like ",[24,1813,1814],{},"useFetch"," or ",[24,1817,1818],{},"useAsyncData",[43,1820],{},"\nHere’s an example of how you would do this:",[50,1823,1827],{"className":1824,"code":1825,"language":1826,"meta":55,"style":55},"language-js shiki shiki-themes material-theme","// Old (Nuxt 2, Options API)\nexport default {\n asyncData({ $axios }) {\n return $axios.$get('/api/data')\n }\n}\n\n// New (Nuxt 3, Composition API)\n\u003Cscript setup>\nconst { data } = await useFetch('/api/data')\n\u003C/script>\n","js",[24,1828,1829,1834,1842,1859,1882,1886,1890,1894,1899,1913,1929],{"__ignoreMap":55},[59,1830,1831],{"class":61,"line":62},[59,1832,1833],{"class":468},"// Old (Nuxt 2, Options API)\n",[59,1835,1836,1838,1840],{"class":61,"line":357},[59,1837,448],{"class":447},[59,1839,451],{"class":447},[59,1841,500],{"class":462},[59,1843,1844,1847,1850,1854,1857],{"class":61,"line":472},[59,1845,1846],{"class":475}," asyncData",[59,1848,1849],{"class":462},"({",[59,1851,1853],{"class":1852},"sLFUT"," $axios",[59,1855,1856],{"class":462}," })",[59,1858,500],{"class":462},[59,1860,1861,1864,1866,1868,1871,1873,1875,1878,1880],{"class":61,"line":492},[59,1862,1863],{"class":447}," return",[59,1865,1853],{"class":458},[59,1867,1163],{"class":462},[59,1869,1870],{"class":454},"$get",[59,1872,459],{"class":475},[59,1874,518],{"class":462},[59,1876,1877],{"class":514},"/api/data",[59,1879,518],{"class":462},[59,1881,1040],{"class":475},[59,1883,1884],{"class":61,"line":503},[59,1885,1031],{"class":462},[59,1887,1888],{"class":61,"line":524},[59,1889,1139],{"class":462},[59,1891,1892],{"class":61,"line":534},[59,1893,1638],{"emptyLinePlaceholder":1637},[59,1895,1896],{"class":61,"line":551},[59,1897,1898],{"class":468},"// New (Nuxt 3, Composition API)\n",[59,1900,1901,1904,1907,1910],{"class":61,"line":561},[59,1902,1903],{"class":462},"\u003C",[59,1905,1906],{"class":475},"script",[59,1908,1909],{"class":1098}," setup",[59,1911,1912],{"class":462},">\n",[59,1914,1915,1918,1921,1924,1926],{"class":61,"line":577},[59,1916,1917],{"class":458},"const ",[59,1919,1920],{"class":462},"{",[59,1922,1923],{"class":458}," data ",[59,1925,1037],{"class":462},[59,1927,1928],{"class":458}," = await useFetch('/api/data')\n",[59,1930,1931,1934,1936],{"class":61,"line":583},[59,1932,1933],{"class":462},"\u003C/",[59,1935,1906],{"class":475},[59,1937,1912],{"class":462},[396,1939,1941],{"id":1940},"_226-other-breaking-changes","2.2.6 Other breaking changes",[14,1943,1944,1945,1947],{},"In my project, I did not encounter any additional breaking changes or deprecated features that required migration.",[43,1946],{},"\nHowever, depending on your project, you may need to address some of the following changes. Here’s how these aspects differ between Nuxt 2 and Nuxt 3:",[1949,1950,1952],"h5",{"id":1951},"directory-structure","Directory structure",[127,1954,1955,1985],{},[130,1956,1957,1960,1962,1963,143,1965,143,1968,143,1970,143,1973,143,1976,143,1979,143,1982],{},[101,1958,1959],{},"Nuxt 2:",[43,1961],{},"\nSpecial folders like ",[24,1964,1560],{},[24,1966,1967],{},"store/",[24,1969,1713],{},[24,1971,1972],{},"static/",[24,1974,1975],{},"assets/",[24,1977,1978],{},"pages/",[24,1980,1981],{},"components/",[24,1983,1984],{},"layouts/",[130,1986,1987,1990,1992,1993,1995,1996,1998,1999,2001,2002,2004],{},[101,1988,1989],{},"Nuxt 3:",[43,1991],{},"\nNew folders like ",[24,1994,26],{}," (for API routes and middleware), ",[24,1997,1720],{}," (for reusable logic).",[43,2000],{},"\nSome folders (like ",[24,2003,1967],{},") are now optional.",[1949,2006,2008],{"id":2007},"global-css-and-assets","Global CSS and assets",[127,2010,2011,2048],{},[130,2012,2013,2015,2017,2018,2020,2021],{},[101,2014,1959],{},[43,2016],{},"\nAdd global CSS in ",[24,2019,405],{},":\n",[50,2022,2024],{"className":1824,"code":2023,"language":1826,"meta":55,"style":55},"css: [\n '~/assets/css/main.scss'\n]\n",[24,2025,2026,2035,2044],{"__ignoreMap":55},[59,2027,2028,2031,2033],{"class":61,"line":62},[59,2029,2030],{"class":1114},"css",[59,2032,479],{"class":462},[59,2034,591],{"class":458},[59,2036,2037,2040,2042],{"class":61,"line":357},[59,2038,2039],{"class":462}," '",[59,2041,963],{"class":514},[59,2043,574],{"class":462},[59,2045,2046],{"class":61,"line":472},[59,2047,1130],{"class":458},[130,2049,2050,2052,2054,2055,2020,2057],{},[101,2051,1989],{},[43,2053],{},"\nSame principle, but in ",[24,2056,409],{},[50,2058,2059],{"className":438,"code":2023,"language":440,"meta":55,"style":55},[24,2060,2061,2069,2077],{"__ignoreMap":55},[59,2062,2063,2065,2067],{"class":61,"line":62},[59,2064,2030],{"class":1114},[59,2066,479],{"class":462},[59,2068,591],{"class":458},[59,2070,2071,2073,2075],{"class":61,"line":357},[59,2072,2039],{"class":462},[59,2074,963],{"class":514},[59,2076,574],{"class":462},[59,2078,2079],{"class":61,"line":472},[59,2080,1130],{"class":458},[2082,2083,2085],"h6",{"id":2084},"migrating-static-assets-and-favicons","Migrating static assets and favicons",[14,2087,2088,2089,2091,2092,2094],{},"In Nuxt 2, static files such as favicons, robots.txt, and other assets were placed in the static directory.",[43,2090],{},"\nWith Nuxt 3 and Nuxt 4, the static directory has been replaced by public.",[43,2093],{},"\nAll files that should be directly accessible (e.g. /favicon.ico, /site.webmanifest, images for Open Graph, etc.) must now be placed in the public folder at the project root.",[14,2096,2097],{},[101,2098,2099],{},"Migration steps:",[127,2101,2102,2105,2108],{},[130,2103,2104],{},"Move all files from static to public.",[130,2106,2107],{},"Update any references in your configuration or templates if needed.",[130,2109,2110],{},"You can safely delete the old static directory after migrating.",[14,2112,2113,2116,2118],{},[101,2114,2115],{},"Example structure:",[43,2117],{},"\nPLACEHOLDER_EXAMPLE_STRUCTURE",[50,2120,2125],{"className":2121,"code":2123,"language":2124},[2122],"language-text","public/\n favicon.ico\n favicon-32x32.png\n favicon-16x16.png\n site.webmanifest\n apple-touch-icon.png\n android-chrome-512x512.png\n android-chrome-192x192.png\n","text",[24,2126,2123],{"__ignoreMap":55},[14,2128,2129],{},"This ensures that favicons and other static assets are correctly served in Nuxt 3/4.",[1949,2131,2133],{"id":2132},"deprecated-featuresapis","Deprecated features/APIs",[127,2135,2136,2153],{},[130,2137,2138,2140,2142,2143,143,2146,2149,2150,2152],{},[101,2139,1959],{},[43,2141],{},"\nFeatures like ",[24,2144,2145],{},"context.app",[24,2147,2148],{},"context.store",", automatic injection of ",[24,2151,1800],{},", etc.",[130,2154,2155,2157,2159,2160,2162],{},[101,2156,1989],{},[43,2158],{},"\nMany of these features are removed or replaced by composables (e.g. ",[24,2161,1814],{},", Pinia instead of Vuex, no automatic plugin injection).",[14,2164,2165],{},[101,2166,2167],{},"Import aliases",[127,2169,2170,2182],{},[130,2171,2172,2174,2176,2177,114,2179,2181],{},[101,2173,1959],{},[43,2175],{},"\nUsually ",[24,2178,1535],{},[24,2180,1532],{}," for imports, but sometimes not consistent.",[130,2183,2184,2186,2188,2189,114,2191,2193,2194],{},[101,2185,1989],{},[43,2187],{},"\nThe aliases ",[24,2190,1535],{},[24,2192,1532],{}," are still standard and should be used for all imports:\n",[50,2195,2197],{"className":1824,"code":2196,"language":1826,"meta":55,"style":55},"import MyComponent from '@/components/MyComponent.vue'\nimport { useExample } from '~/composables/useExample'\n",[24,2198,2199,2217],{"__ignoreMap":55},[59,2200,2201,2204,2207,2210,2212,2215],{"class":61,"line":62},[59,2202,2203],{"class":447},"import",[59,2205,2206],{"class":458}," MyComponent ",[59,2208,2209],{"class":447},"from",[59,2211,511],{"class":462},[59,2213,2214],{"class":514},"@/components/MyComponent.vue",[59,2216,574],{"class":462},[59,2218,2219,2221,2223,2225,2228,2231,2233,2236],{"class":61,"line":357},[59,2220,2203],{"class":447},[59,2222,1782],{"class":462},[59,2224,1744],{"class":458},[59,2226,2227],{"class":462}," }",[59,2229,2230],{"class":447}," from",[59,2232,511],{"class":462},[59,2234,2235],{"class":514},"~/composables/useExample",[59,2237,574],{"class":462},[14,2239,2240,2241,2245],{},"If you do run into issues, consult the ",[75,2242,2244],{"href":77,"rel":2243},[79],"Nuxt 3 migration guide"," and check the official documentation for any modules or features you use.",[91,2247,2249],{"id":2248},"_23-bonus-nuxt-34-features-folder-structure","2.3 Bonus: Nuxt 3/4 Features & Folder Structure",[396,2251,2253],{"id":2252},"automatic-component-imports","Automatic Component Imports",[14,2255,2256,2257,2259,2260,2262],{},"One of the best quality-of-life improvements in Nuxt 3 and Nuxt 4 is automatic component import.",[43,2258],{},"\nYou no longer need to manually import and register components from your ",[24,2261,1981],{}," directory—they are available globally in your templates.",[14,2264,2265],{},[101,2266,2267],{},"Before (Nuxt 2):",[50,2269,2271],{"className":1824,"code":2270,"language":1826,"meta":55,"style":55},"import Header from '~/components/Header.vue'\nexport default {\n components: { Header }\n}\n",[24,2272,2273,2289,2297,2309],{"__ignoreMap":55},[59,2274,2275,2277,2280,2282,2284,2287],{"class":61,"line":62},[59,2276,2203],{"class":447},[59,2278,2279],{"class":458}," Header ",[59,2281,2209],{"class":447},[59,2283,511],{"class":462},[59,2285,2286],{"class":514},"~/components/Header.vue",[59,2288,574],{"class":462},[59,2290,2291,2293,2295],{"class":61,"line":357},[59,2292,448],{"class":447},[59,2294,451],{"class":447},[59,2296,500],{"class":462},[59,2298,2299,2301,2303,2305,2307],{"class":61,"line":472},[59,2300,979],{"class":475},[59,2302,479],{"class":462},[59,2304,1782],{"class":462},[59,2306,2279],{"class":458},[59,2308,1139],{"class":462},[59,2310,2311],{"class":61,"line":492},[59,2312,1139],{"class":462},[14,2314,2315],{},[101,2316,2317],{},"Now (Nuxt 3/4):",[50,2319,2322],{"className":2320,"code":2321,"language":142,"meta":55,"style":55},"language-vue shiki shiki-themes material-theme","\u003Ctemplate>\n \u003CHeader />\n\u003C/template>\n",[24,2323,2324,2333,2344],{"__ignoreMap":55},[59,2325,2326,2328,2331],{"class":61,"line":62},[59,2327,1903],{"class":462},[59,2329,2330],{"class":475},"template",[59,2332,1912],{"class":462},[59,2334,2335,2338,2341],{"class":61,"line":357},[59,2336,2337],{"class":462}," \u003C",[59,2339,2340],{"class":475},"Header",[59,2342,2343],{"class":462}," />\n",[59,2345,2346,2348,2350],{"class":61,"line":472},[59,2347,1933],{"class":462},[59,2349,2330],{"class":475},[59,2351,1912],{"class":462},[14,2353,2354],{},"This makes your code cleaner and easier to maintain!",[396,2356,2358],{"id":2357},"nuxt-4-ready-folder-structure","Nuxt 4-Ready: Folder Structure",[14,2360,2361,2362,2365,2366,2368],{},"With Nuxt 4, some directories are now expected to be inside the new ",[24,2363,2364],{},"app/"," directory.",[43,2367],{},"\nHere’s how you should organize your project for Nuxt 4 compatibility:",[50,2370,2373],{"className":2371,"code":2372,"language":2124},[2122],"my-nuxt-project/\n│\n├─ app/\n│ ├─ components/\n│ ├─ layouts/\n│ └─ pages/\n│\n├─ assets/\n├─ public/\n├─ server/\n├─ nuxt.config.ts\n├─ package.json\n└─ ...\n",[24,2374,2372],{"__ignoreMap":55},[127,2376,2377,2390],{},[130,2378,2379,2380,143,2382,2384,2385,2387,2388,2365],{},"Move your ",[24,2381,1981],{},[24,2383,1978],{},", and ",[24,2386,1984],{}," folders into the new ",[24,2389,2364],{},[130,2391,2392,2393,143,2395,2384,2398,2400],{},"Your ",[24,2394,1975],{},[24,2396,2397],{},"public/",[24,2399,26],{}," folders remain at the project root.",[396,2402,2404],{"id":2403},"nuxt-4-compatibility-option","Nuxt 4 Compatibility Option",[14,2406,2407,2408,479],{},"To make your project Nuxt 4 ready, add the following option to your ",[24,2409,409],{},[14,2411,2412],{},[59,2413,2414],{},"codeblock: nuxt4-future-option",[50,2416,2418],{"className":438,"code":2417,"language":440,"meta":55,"style":55},"export default defineNuxtConfig({\n // ...your other config options\n future: {\n compatibilityVersion: 4,\n },\n})\n",[24,2419,2420,2432,2437,2446,2458,2462],{"__ignoreMap":55},[59,2421,2422,2424,2426,2428,2430],{"class":61,"line":62},[59,2423,448],{"class":447},[59,2425,451],{"class":447},[59,2427,455],{"class":454},[59,2429,459],{"class":458},[59,2431,463],{"class":462},[59,2433,2434],{"class":61,"line":357},[59,2435,2436],{"class":468}," // ...your other config options\n",[59,2438,2439,2442,2444],{"class":61,"line":472},[59,2440,2441],{"class":475}," future",[59,2443,479],{"class":462},[59,2445,500],{"class":462},[59,2447,2448,2451,2453,2456],{"class":61,"line":492},[59,2449,2450],{"class":475}," compatibilityVersion",[59,2452,479],{"class":462},[59,2454,2455],{"class":1378}," 4",[59,2457,521],{"class":462},[59,2459,2460],{"class":61,"line":503},[59,2461,944],{"class":462},[59,2463,2464,2466],{"class":61,"line":524},[59,2465,1037],{"class":462},[59,2467,1040],{"class":458},[14,2469,2470],{},"This ensures your project uses the latest conventions and is prepared for the next major version.",[35,2472,2474],{"id":2473},"_3-challenges-solutions","3. Challenges & Solutions",[14,2476,2477],{},"No migration is ever completely smooth, and moving from Nuxt 2 to Nuxt 3 was no exception. Here are some of the main challenges I encountered during the process—and how I solved them:",[91,2479,2481],{"id":2480},"_31-dependency-and-build-issues","3.1 Dependency and Build Issues",[14,2483,2484,2487,2489,2490,2493,2494,1163],{},[101,2485,2486],{},"Problem:",[43,2488],{},"\nAfter updating dependencies and running the dev server, I encountered errors like ",[24,2491,2492],{},"Cannot find module 'bindings'"," and issues related to ",[24,2495,2496],{},"@vercel/nft",[14,2498,2499,2502,2504,2505,114,2507,2510,2511,2514,2515,2517],{},[101,2500,2501],{},"Solution:",[43,2503],{},"\nThese errors were caused by leftover or broken dependencies from the old setup. Deleting ",[24,2506,1441],{},[24,2508,2509],{},"package-lock.json"," and running a fresh ",[24,2512,2513],{},"npm install"," resolved the issue.",[43,2516],{},"\nIf you see similar errors, always try a clean install first.",[91,2519,2521],{"id":2520},"_32-typescript-and-linter-errors","3.2 TypeScript and Linter Errors",[14,2523,2524,2526,2528,2529,406,2531,2533,2534,2536],{},[101,2525,2486],{},[43,2527],{},"\nAfter converting ",[24,2530,405],{},[24,2532,409],{},", TypeScript complained about ",[24,2535,431],{}," not being found.",[14,2538,2539,2541,2543,2544,2547,2548,2550,2551,2553,2554,2556,2557,1163],{},[101,2540,2501],{},[43,2542],{},"\nAdd ",[24,2545,2546],{},"\"types\": [\"nuxt\"]"," to your ",[24,2549,1078],{}," to make Nuxt 3’s global types available.",[43,2552],{},"\nIf you see errors about missing or unreadable ",[24,2555,1078],{}," files, use a standalone config and do not extend from ",[24,2558,1159],{},[91,2560,2562],{"id":2561},"_33-scsssass-import-and-mixin-problems","3.3 SCSS/Sass Import and Mixin Problems",[14,2564,2565,2567,2569,2570,2573,2574,2576,2577,2580],{},[101,2566,2486],{},[43,2568],{},"\nSass ",[24,2571,2572],{},"@import"," rules are deprecated, and Compass-Mixins are not compatible with Nuxt 3/Vite.",[43,2575],{},"\nI also got errors like ",[24,2578,2579],{},"Undefined mixin"," and warnings about deprecated imports.",[14,2582,2583],{},[101,2584,2501],{},[127,2586,2587,2590,2600],{},[130,2588,2589],{},"Remove all Compass-Mixins and replace them with native CSS.",[130,2591,2592,2593,2595,2596,2599],{},"Switch from ",[24,2594,2572],{}," to the new ",[24,2597,2598],{},"@use"," syntax for SCSS files.",[130,2601,2602,2603,1163],{},"If you rely on variables or mixins across files, use the namespace provided by ",[24,2604,2598],{},[91,2606,2608],{"id":2607},"_34-layout-and-styling-differences","3.4 Layout and Styling Differences",[14,2610,2611,2613,2615],{},[101,2612,2486],{},[43,2614],{},"\nAfter migration, the layout looked different:",[127,2617,2618,2621,2624,2627],{},[130,2619,2620],{},"The page had unwanted white margins.",[130,2622,2623],{},"Navigation links were stuck together.",[130,2625,2626],{},"The font was not loading.",[130,2628,2629],{},"The mobile navigation did not behave as expected.",[14,2631,2632],{},[101,2633,2501],{},[127,2635,2636,2643,2646,2653],{},[130,2637,2638,2639,2642],{},"Add ",[24,2640,2641],{},"body { margin: 0; padding: 0; }"," to your global CSS to remove default browser margins.",[130,2644,2645],{},"Add or adjust CSS for the navigation to provide spacing between links.",[130,2647,2648,2649,2652],{},"Update font paths in SCSS to use the new Vite-compatible syntax (e.g. ",[24,2650,2651],{},"@/assets/fonts/vivaldi.ttf",").",[130,2654,2655],{},"For the mobile navigation, implement a burger menu that closes when a link is clicked.",[91,2657,2659],{"id":2658},"_35-general-advice","3.5 General Advice",[127,2661,2662,2665,2668],{},[130,2663,2664],{},"Test your app after every major migration step.",[130,2666,2667],{},"Use browser DevTools to debug layout and CSS issues.",[130,2669,2670],{},"Don’t be afraid to remove legacy code or dependencies that are no longer needed.",[14,2672,2673,2674,2678],{},"Every migration is unique, but most issues can be solved with a bit of patience and by consulting the ",[75,2675,2677],{"href":77,"rel":2676},[79],"Nuxt 3 documentation"," and community resources.",[35,2680,2682],{"id":2681},"_3x-font-handling-and-modern-scss-in-nuxt-3","3.x Font Handling and Modern SCSS in Nuxt 3",[14,2684,2685],{},"One of the trickier parts of the migration was handling custom fonts and global styles in a way that works reliably with Nuxt 3 and Vite.",[91,2687,2689],{"id":2688},"font-file-location","Font file location",[14,2691,2692,2693,2696,2697,2700],{},"In Nuxt 2, font files could often be placed in the ",[24,2694,2695],{},"assets"," directory and would be processed by Webpack. With Nuxt 3 (and Vite), static assets like fonts and images that are referenced directly in HTML or CSS must be moved to the ",[24,2698,2699],{},"public"," directory. Only then will they be available at the expected path in the final build.",[14,2702,2703],{},[101,2704,2705],{},"Example:",[50,2707,2710],{"className":2708,"code":2709,"language":2124},[2122],"public/fonts/vivaldi.ttf\n",[24,2711,2709],{"__ignoreMap":55},[91,2713,2715],{"id":2714},"global-font-and-style-inclusion","Global font and style inclusion",[14,2717,2718,2719,2721,2722,2724,2725,2727],{},"Previously, it was common to use ",[24,2720,2572],{}," in SCSS to include global styles and fonts. With Nuxt 3 and Dart Sass, ",[24,2723,2572],{}," is deprecated and should be replaced by the new module system using ",[24,2726,2598],{}," and direct inclusion in the Nuxt config.",[14,2729,2730],{},[101,2731,2732],{},"Old approach (deprecated):",[50,2734,2738],{"className":2735,"code":2736,"language":2737,"meta":55,"style":55},"language-scss shiki shiki-themes material-theme","// Old (deprecated)\n@import './fonts.scss';\n","scss",[24,2739,2740,2745],{"__ignoreMap":55},[59,2741,2742],{"class":61,"line":62},[59,2743,2744],{"class":468},"// Old (deprecated)\n",[59,2746,2747,2749,2751,2754,2756],{"class":61,"line":357},[59,2748,2572],{"class":447},[59,2750,511],{"class":462},[59,2752,2753],{"class":514},"./fonts.scss",[59,2755,518],{"class":462},[59,2757,2758],{"class":462},";\n",[14,2760,2761],{},[101,2762,2763],{},"Modern approach:",[127,2765,2766,2772],{},[130,2767,2768,2769,1163],{},"The global font definition and h1 styling are placed in a dedicated file, e.g. ",[24,2770,2771],{},"assets/css/fonts.scss",[130,2773,2774],{},"This file is included as a global CSS file in the Nuxt configuration.",[50,2776,2778],{"className":2735,"code":2777,"language":2737,"meta":55,"style":55},"@font-face {\n font-family: 'Vivaldi-Regular';\n src: url('/fonts/vivaldi.ttf') format('truetype');\n font-weight: 400;\n font-style: normal;\n}\n\nh1 {\n font-family: 'Vivaldi-Regular', 'Segoe Script', 'sans-serif';\n}\n",[24,2779,2780,2787,2804,2841,2853,2865,2869,2873,2879,2911],{"__ignoreMap":55},[59,2781,2782,2785],{"class":61,"line":62},[59,2783,2784],{"class":447},"@font-face",[59,2786,500],{"class":462},[59,2788,2789,2793,2795,2797,2800,2802],{"class":61,"line":357},[59,2790,2792],{"class":2791},"s6YsC"," font-family",[59,2794,479],{"class":462},[59,2796,511],{"class":462},[59,2798,2799],{"class":514},"Vivaldi-Regular",[59,2801,518],{"class":462},[59,2803,2758],{"class":462},[59,2805,2806,2809,2811,2814,2816,2818,2821,2823,2826,2829,2831,2833,2836,2838],{"class":61,"line":472},[59,2807,2808],{"class":2791}," src",[59,2810,479],{"class":462},[59,2812,2813],{"class":454}," url",[59,2815,459],{"class":462},[59,2817,518],{"class":462},[59,2819,2820],{"class":514},"/fonts/vivaldi.ttf",[59,2822,518],{"class":462},[59,2824,2825],{"class":462},")",[59,2827,2828],{"class":454}," format",[59,2830,459],{"class":462},[59,2832,518],{"class":462},[59,2834,2835],{"class":514},"truetype",[59,2837,518],{"class":462},[59,2839,2840],{"class":462},");\n",[59,2842,2843,2846,2848,2851],{"class":61,"line":492},[59,2844,2845],{"class":2791}," font-weight",[59,2847,479],{"class":462},[59,2849,2850],{"class":1378}," 400",[59,2852,2758],{"class":462},[59,2854,2855,2858,2860,2863],{"class":61,"line":503},[59,2856,2857],{"class":2791}," font-style",[59,2859,479],{"class":462},[59,2861,2862],{"class":458}," normal",[59,2864,2758],{"class":462},[59,2866,2867],{"class":61,"line":524},[59,2868,1139],{"class":462},[59,2870,2871],{"class":61,"line":534},[59,2872,1638],{"emptyLinePlaceholder":1637},[59,2874,2875,2877],{"class":61,"line":551},[59,2876,10],{"class":1114},[59,2878,500],{"class":462},[59,2880,2881,2883,2885,2887,2889,2891,2893,2895,2898,2900,2902,2904,2907,2909],{"class":61,"line":561},[59,2882,2792],{"class":2791},[59,2884,479],{"class":462},[59,2886,511],{"class":462},[59,2888,2799],{"class":514},[59,2890,518],{"class":462},[59,2892,143],{"class":458},[59,2894,518],{"class":462},[59,2896,2897],{"class":514},"Segoe Script",[59,2899,518],{"class":462},[59,2901,143],{"class":458},[59,2903,518],{"class":462},[59,2905,2906],{"class":514},"sans-serif",[59,2908,518],{"class":462},[59,2910,2758],{"class":462},[59,2912,2913],{"class":61,"line":577},[59,2914,1139],{"class":462},[14,2916,2917],{},[101,2918,2919],{},"Nuxt configuration:",[50,2921,2923],{"className":438,"code":2922,"language":440,"meta":55,"style":55},"import { join } from 'path';\n\nexport default defineNuxtConfig({\n css: [\n join(__dirname, 'assets/css/fonts.scss'),\n join(__dirname, 'assets/css/main.scss')\n ],\n // ... other options ...\n});\n",[24,2924,2925,2947,2951,2963,2971,2991,3008,3014,3019],{"__ignoreMap":55},[59,2926,2927,2929,2931,2934,2936,2938,2940,2943,2945],{"class":61,"line":62},[59,2928,2203],{"class":447},[59,2930,1782],{"class":462},[59,2932,2933],{"class":458}," join",[59,2935,2227],{"class":462},[59,2937,2230],{"class":447},[59,2939,511],{"class":462},[59,2941,2942],{"class":514},"path",[59,2944,518],{"class":462},[59,2946,2758],{"class":462},[59,2948,2949],{"class":61,"line":357},[59,2950,1638],{"emptyLinePlaceholder":1637},[59,2952,2953,2955,2957,2959,2961],{"class":61,"line":472},[59,2954,448],{"class":447},[59,2956,451],{"class":447},[59,2958,455],{"class":454},[59,2960,459],{"class":458},[59,2962,463],{"class":462},[59,2964,2965,2967,2969],{"class":61,"line":492},[59,2966,950],{"class":475},[59,2968,479],{"class":462},[59,2970,591],{"class":458},[59,2972,2973,2976,2979,2981,2983,2985,2987,2989],{"class":61,"line":503},[59,2974,2975],{"class":454}," join",[59,2977,2978],{"class":458},"(__dirname",[59,2980,486],{"class":462},[59,2982,511],{"class":462},[59,2984,2771],{"class":514},[59,2986,518],{"class":462},[59,2988,2825],{"class":458},[59,2990,521],{"class":462},[59,2992,2993,2995,2997,2999,3001,3004,3006],{"class":61,"line":524},[59,2994,2975],{"class":454},[59,2996,2978],{"class":458},[59,2998,486],{"class":462},[59,3000,511],{"class":462},[59,3002,3003],{"class":514},"assets/css/main.scss",[59,3005,518],{"class":462},[59,3007,1040],{"class":458},[59,3009,3010,3012],{"class":61,"line":534},[59,3011,971],{"class":458},[59,3013,521],{"class":462},[59,3015,3016],{"class":61,"line":551},[59,3017,3018],{"class":468}," // ... other options ...\n",[59,3020,3021,3023,3025],{"class":61,"line":561},[59,3022,1037],{"class":462},[59,3024,2825],{"class":458},[59,3026,2758],{"class":462},[14,3028,3029,3031,3032,3035],{},[101,3030,327],{},"\nUsing ",[24,3033,3034],{},"join(__dirname, ...)"," ensures that the stylesheets are found reliably across different operating systems.",[3037,3038],"hr",{},[14,3040,3041],{},"This approach keeps your font and global style handling future-proof and compatible with the latest Nuxt and Sass best practices.",[35,3043,3045],{"id":3044},"_36-additional-issues-after-removing-old-config-and-enabling-nuxt-4-compatibility","3.6 Additional Issues After Removing Old Config and Enabling Nuxt 4 Compatibility",[14,3047,3048],{},"After removing legacy configuration files and updating the project for Nuxt 4 compatibility, several common migration issues may arise. Here are some general patterns and solutions that apply to most Nuxt 3/4 migrations:",[91,3050,3052],{"id":3051},"_361-scsscss-not-found","3.6.1 SCSS/CSS Not Found",[14,3054,3055,3057,3059,3060,3062],{},[101,3056,2486],{},[43,3058],{},"\nAfter updating the configuration, global SCSS or CSS files may no longer be found.",[43,3061],{},"\nTypical error message:",[50,3064,3067],{"className":3065,"code":3066,"language":2124},[2122],"Pre-transform error: Failed to resolve import \"assets/css/main.scss\"\n",[24,3068,3066],{"__ignoreMap":55},[14,3070,3071],{},[101,3072,2501],{},[127,3074,3075,3078,3081],{},[130,3076,3077],{},"Ensure the path in the css option of your Nuxt config is correct.",[130,3079,3080],{},"Do not use a tilde or leading slash.",[130,3082,3083],{},"In some cases, using an absolute path with a path join helper can help.",[50,3085,3087],{"className":1824,"code":3086,"language":1826,"meta":55,"style":55},"import { join } from 'path'\n\nexport default defineNuxtConfig({\n css: [\n join(__dirname, 'assets/css/main.scss')\n ],\n // ...other config options\n})\n",[24,3088,3089,3107,3111,3123,3131,3147,3153,3158],{"__ignoreMap":55},[59,3090,3091,3093,3095,3097,3099,3101,3103,3105],{"class":61,"line":62},[59,3092,2203],{"class":447},[59,3094,1782],{"class":462},[59,3096,2933],{"class":458},[59,3098,2227],{"class":462},[59,3100,2230],{"class":447},[59,3102,511],{"class":462},[59,3104,2942],{"class":514},[59,3106,574],{"class":462},[59,3108,3109],{"class":61,"line":357},[59,3110,1638],{"emptyLinePlaceholder":1637},[59,3112,3113,3115,3117,3119,3121],{"class":61,"line":472},[59,3114,448],{"class":447},[59,3116,451],{"class":447},[59,3118,455],{"class":454},[59,3120,459],{"class":458},[59,3122,463],{"class":462},[59,3124,3125,3127,3129],{"class":61,"line":492},[59,3126,950],{"class":475},[59,3128,479],{"class":462},[59,3130,591],{"class":458},[59,3132,3133,3135,3137,3139,3141,3143,3145],{"class":61,"line":503},[59,3134,2975],{"class":454},[59,3136,2978],{"class":458},[59,3138,486],{"class":462},[59,3140,511],{"class":462},[59,3142,3003],{"class":514},[59,3144,518],{"class":462},[59,3146,1040],{"class":458},[59,3148,3149,3151],{"class":61,"line":524},[59,3150,971],{"class":458},[59,3152,521],{"class":462},[59,3154,3155],{"class":61,"line":534},[59,3156,3157],{"class":468}," // ...other config options\n",[59,3159,3160,3162],{"class":61,"line":551},[59,3161,1037],{"class":462},[59,3163,1040],{"class":458},[14,3165,3166],{},"Always clear the cache after such changes:",[127,3168,3169],{},[130,3170,3171],{},"Delete node_modules, .nuxt, and your lock file, then reinstall dependencies and restart the dev server.",[91,3173,3175],{"id":3174},"_362-images-not-found","3.6.2 Images Not Found",[14,3177,3178,3180,3182,3183,3062],{},[101,3179,2486],{},[43,3181],{},"\nAfter switching to Nuxt 3/4 and Vite, images previously loaded from the assets folder may no longer be found in templates.",[43,3184],{},[50,3186,3189],{"className":3187,"code":3188,"language":2124},[2122],"Failed to resolve import \"/img/kanne.jpg\"\n",[24,3190,3188],{"__ignoreMap":55},[14,3192,3193],{},[101,3194,2501],{},[127,3196,3197,3200],{},[130,3198,3199],{},"Images used in templates (e.g. img src) must be moved to the public folder.",[130,3201,3202],{},"Update the paths in your templates to point to the correct location.",[50,3204,3208],{"className":3205,"code":3206,"language":3207,"meta":55,"style":55},"language-html shiki shiki-themes material-theme","\u003Cimg src=\"/img/example.jpg\" alt=\"Example\">\n\u003Cimg src=\"/img/gallery/picture.png\" alt=\"Gallery Picture\">\n\u003Cimg src=\"/img/layout/header.jpg\" alt=\"Header\">\n","html",[24,3209,3210,3244,3274],{"__ignoreMap":55},[59,3211,3212,3214,3217,3220,3223,3225,3228,3230,3233,3235,3237,3240,3242],{"class":61,"line":62},[59,3213,1903],{"class":462},[59,3215,3216],{"class":475},"img",[59,3218,3219],{"class":1098}," src",[59,3221,3222],{"class":462},"=",[59,3224,1102],{"class":462},[59,3226,3227],{"class":514},"/img/example.jpg",[59,3229,1102],{"class":462},[59,3231,3232],{"class":1098}," alt",[59,3234,3222],{"class":462},[59,3236,1102],{"class":462},[59,3238,3239],{"class":514},"Example",[59,3241,1102],{"class":462},[59,3243,1912],{"class":462},[59,3245,3246,3248,3250,3252,3254,3256,3259,3261,3263,3265,3267,3270,3272],{"class":61,"line":357},[59,3247,1903],{"class":462},[59,3249,3216],{"class":475},[59,3251,3219],{"class":1098},[59,3253,3222],{"class":462},[59,3255,1102],{"class":462},[59,3257,3258],{"class":514},"/img/gallery/picture.png",[59,3260,1102],{"class":462},[59,3262,3232],{"class":1098},[59,3264,3222],{"class":462},[59,3266,1102],{"class":462},[59,3268,3269],{"class":514},"Gallery Picture",[59,3271,1102],{"class":462},[59,3273,1912],{"class":462},[59,3275,3276,3278,3280,3282,3284,3286,3289,3291,3293,3295,3297,3299,3301],{"class":61,"line":472},[59,3277,1903],{"class":462},[59,3279,3216],{"class":475},[59,3281,3219],{"class":1098},[59,3283,3222],{"class":462},[59,3285,1102],{"class":462},[59,3287,3288],{"class":514},"/img/layout/header.jpg",[59,3290,1102],{"class":462},[59,3292,3232],{"class":1098},[59,3294,3222],{"class":462},[59,3296,1102],{"class":462},[59,3298,2340],{"class":514},[59,3300,1102],{"class":462},[59,3302,1912],{"class":462},[91,3304,3306],{"id":3305},"_363-powershell-copying-images","3.6.3 PowerShell: Copying Images",[14,3308,3309,3311,3313],{},[101,3310,2486],{},[43,3312],{},"\nWhen copying images on Windows PowerShell, Unix commands like && or cp do not work.",[14,3315,3316],{},[101,3317,2501],{},[127,3319,3320],{},[130,3321,3322],{},"Create the folder structure with mkdir and use Copy-Item to move the images.",[14,3324,3325],{},"for windows users",[50,3327,3331],{"className":3328,"code":3329,"language":3330,"meta":55,"style":55},"language-PowerShell shiki shiki-themes material-theme","mkdir public\\img\nmkdir public\\img\\gallery\nmkdir public\\img\\layout\n\nCopy-Item assets\\img\\example.jpg public\\img\\\nCopy-Item assets\\img\\gallery\\* public\\img\\gallery\\\nCopy-Item assets\\img\\layout\\* public\\img\\layout\\\n","PowerShell",[24,3332,3333,3338,3343,3348,3352,3357,3362],{"__ignoreMap":55},[59,3334,3335],{"class":61,"line":62},[59,3336,3337],{},"mkdir public\\img\n",[59,3339,3340],{"class":61,"line":357},[59,3341,3342],{},"mkdir public\\img\\gallery\n",[59,3344,3345],{"class":61,"line":472},[59,3346,3347],{},"mkdir public\\img\\layout\n",[59,3349,3350],{"class":61,"line":492},[59,3351,1638],{"emptyLinePlaceholder":1637},[59,3353,3354],{"class":61,"line":503},[59,3355,3356],{},"Copy-Item assets\\img\\example.jpg public\\img\\\n",[59,3358,3359],{"class":61,"line":524},[59,3360,3361],{},"Copy-Item assets\\img\\gallery\\* public\\img\\gallery\\\n",[59,3363,3364],{"class":61,"line":534},[59,3365,3366],{},"Copy-Item assets\\img\\layout\\* public\\img\\layout\\\n",[14,3368,3369],{},"for linux macos users",[50,3371,3375],{"className":3372,"code":3373,"language":3374,"meta":55,"style":55},"language-Bash shiki shiki-themes material-theme","mkdir -p public/img/gallery\nmkdir -p public/img/layout\n\ncp assets/img/example.jpg public/img/\ncp assets/img/gallery/* public/img/gallery/\ncp assets/img/layout/* public/img/layout/\n","Bash",[24,3376,3377,3382,3387,3391,3396,3401],{"__ignoreMap":55},[59,3378,3379],{"class":61,"line":62},[59,3380,3381],{},"mkdir -p public/img/gallery\n",[59,3383,3384],{"class":61,"line":357},[59,3385,3386],{},"mkdir -p public/img/layout\n",[59,3388,3389],{"class":61,"line":472},[59,3390,1638],{"emptyLinePlaceholder":1637},[59,3392,3393],{"class":61,"line":492},[59,3394,3395],{},"cp assets/img/example.jpg public/img/\n",[59,3397,3398],{"class":61,"line":503},[59,3399,3400],{},"cp assets/img/gallery/* public/img/gallery/\n",[59,3402,3403],{"class":61,"line":524},[59,3404,3405],{},"cp assets/img/layout/* public/img/layout/\n",[91,3407,3409],{"id":3408},"_364-scss-font-face-must-be-top-level","3.6.4 SCSS: @font-face Must Be Top-Level",[14,3411,3412,3414,3416,3417,3419],{},[101,3413,2486],{},[43,3415],{},"\nA SCSS error may occur if the @font-face rule is nested inside a selector.",[43,3418],{},"\nThis causes the entire SCSS file to fail processing.",[14,3421,3422],{},[101,3423,2501],{},[127,3425,3426],{},[130,3427,3428],{},"The @font-face rule must be at the top level, not nested.",[50,3430,3432],{"className":2735,"code":3431,"language":2737,"meta":55,"style":55},"@font-face {\n font-family: 'custom-font';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url('@/assets/fonts/custom-font.ttf') format('truetype');\n}\n\nh1 {\n font-family: 'custom-font', 'Segoe Script', 'sans-serif';\n}\n",[24,3433,3434,3440,3455,3465,3475,3487,3518,3522,3526,3532,3562],{"__ignoreMap":55},[59,3435,3436,3438],{"class":61,"line":62},[59,3437,2784],{"class":447},[59,3439,500],{"class":462},[59,3441,3442,3444,3446,3448,3451,3453],{"class":61,"line":357},[59,3443,2792],{"class":2791},[59,3445,479],{"class":462},[59,3447,511],{"class":462},[59,3449,3450],{"class":514},"custom-font",[59,3452,518],{"class":462},[59,3454,2758],{"class":462},[59,3456,3457,3459,3461,3463],{"class":61,"line":472},[59,3458,2857],{"class":2791},[59,3460,479],{"class":462},[59,3462,2862],{"class":458},[59,3464,2758],{"class":462},[59,3466,3467,3469,3471,3473],{"class":61,"line":492},[59,3468,2845],{"class":2791},[59,3470,479],{"class":462},[59,3472,2850],{"class":1378},[59,3474,2758],{"class":462},[59,3476,3477,3480,3482,3485],{"class":61,"line":503},[59,3478,3479],{"class":2791}," font-display",[59,3481,479],{"class":462},[59,3483,3484],{"class":458}," swap",[59,3486,2758],{"class":462},[59,3488,3489,3491,3493,3495,3497,3499,3502,3504,3506,3508,3510,3512,3514,3516],{"class":61,"line":524},[59,3490,2808],{"class":2791},[59,3492,479],{"class":462},[59,3494,2813],{"class":454},[59,3496,459],{"class":462},[59,3498,518],{"class":462},[59,3500,3501],{"class":514},"@/assets/fonts/custom-font.ttf",[59,3503,518],{"class":462},[59,3505,2825],{"class":462},[59,3507,2828],{"class":454},[59,3509,459],{"class":462},[59,3511,518],{"class":462},[59,3513,2835],{"class":514},[59,3515,518],{"class":462},[59,3517,2840],{"class":462},[59,3519,3520],{"class":61,"line":534},[59,3521,1139],{"class":462},[59,3523,3524],{"class":61,"line":551},[59,3525,1638],{"emptyLinePlaceholder":1637},[59,3527,3528,3530],{"class":61,"line":561},[59,3529,10],{"class":1114},[59,3531,500],{"class":462},[59,3533,3534,3536,3538,3540,3542,3544,3546,3548,3550,3552,3554,3556,3558,3560],{"class":61,"line":577},[59,3535,2792],{"class":2791},[59,3537,479],{"class":462},[59,3539,511],{"class":462},[59,3541,3450],{"class":514},[59,3543,518],{"class":462},[59,3545,143],{"class":458},[59,3547,518],{"class":462},[59,3549,2897],{"class":514},[59,3551,518],{"class":462},[59,3553,143],{"class":458},[59,3555,518],{"class":462},[59,3557,2906],{"class":514},[59,3559,518],{"class":462},[59,3561,2758],{"class":462},[59,3563,3564],{"class":61,"line":583},[59,3565,1139],{"class":462},[91,3567,3569],{"id":3568},"_365-lessons-learned","3.6.5 Lessons Learned",[14,3571,3572,3573,3575],{},"Especially after removing old config files and switching to Nuxt 4 standards, many legacy issues become visible.",[43,3574],{},"\nKey takeaways:",[127,3577,3578,3581,3584,3587],{},[130,3579,3580],{},"Paths and imports must be exact.",[130,3582,3583],{},"Assets and static files must be strictly separated.",[130,3585,3586],{},"Clear caches regularly.",[130,3588,3589],{},"Pay attention to SCSS syntax.",[35,3591,3593],{"id":3592},"_4-conclusion","4. Conclusion",[91,3595,3597],{"id":3596},"summary-of-my-experience","Summary of my experience",[14,3599,3600],{},"Migrating from Nuxt 2 to Nuxt 3 was both a challenge and a great learning experience. While the process required a deep dive into the new architecture, updated conventions, and breaking changes, the end result is a more modern, maintainable, and performant codebase. The new features of Nuxt 3—like the Composition API, Vite integration, and the new directory structure—make development more enjoyable and future-proof.",[91,3602,3604],{"id":3603},"recommendations-for-others","Recommendations for others",[127,3606,3607,3613,3619,3625,3631,3637,3643,3649],{},[130,3608,3609,3612],{},[101,3610,3611],{},"Read the official migration guide"," before you start. It will save you a lot of time and confusion.",[130,3614,3615,3618],{},[101,3616,3617],{},"Take it step by step:"," Update dependencies, migrate config and structure, then tackle code and styling issues.",[130,3620,3621,3624],{},[101,3622,3623],{},"Expect to break things:"," Don’t be discouraged by errors—most are solvable with a bit of research and patience.",[130,3626,3627,3630],{},[101,3628,3629],{},"Test early and often:"," Run your app after every major change to catch issues before they pile up.",[130,3632,3633,3636],{},[101,3634,3635],{},"Clean up your codebase:"," Use the migration as an opportunity to remove unused dependencies, legacy code, and outdated patterns.",[130,3638,3639,3642],{},[101,3640,3641],{},"Leverage the community:"," If you get stuck, search GitHub issues, Discord, or the Nuxt forums—chances are, someone else had the same problem.",[130,3644,3645,3648],{},[101,3646,3647],{},"Work in a dedicated migration branch:"," This keeps your production code safe and lets you experiment freely.",[130,3650,3651,3654],{},[101,3652,3653],{},"Document your process:"," Writing down each step (or blogging about it) is invaluable for yourself and others.",[91,3656,3658],{"id":3657},"what-i-would-do-differently-next-time","What I would do differently next time",[127,3660,3661,3667,3673],{},[130,3662,3663,3666],{},[101,3664,3665],{},"Plan more time for CSS and layout adjustments:"," Small differences in how styles are handled can have a big impact.",[130,3668,3669,3672],{},[101,3670,3671],{},"Be prepared for subtle differences in tooling:"," Especially with Vite and modern Sass, some things work differently than in the old Webpack world.",[130,3674,3675,3678],{},[101,3676,3677],{},"Consider a full rewrite for very old projects:"," Sometimes, starting from scratch with Nuxt 3 and porting over only the essentials is faster and cleaner.",[14,3680,3681,3684,3686],{},[101,3682,3683],{},"Final thoughts:",[43,3685],{},"\nThe migration to Nuxt 3 is absolutely worth it for most projects. The ecosystem is moving forward, and the new features and performance improvements are significant. With a bit of patience and a systematic approach, you’ll end up with a codebase that’s ready for the future.",[14,3688,3689],{},"Good luck with your own migration!",[3691,3692,3693],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .s6cf3, html code.shiki .s6cf3{--shiki-default:#89DDFF;--shiki-default-font-style:italic}html pre.shiki code .sdLwU, html code.shiki .sdLwU{--shiki-default:#82AAFF}html pre.shiki code .svy0-, html code.shiki .svy0-{--shiki-default:#EEFFFF}html pre.shiki code .sAklC, html code.shiki .sAklC{--shiki-default:#89DDFF}html pre.shiki code .s0_hs, html code.shiki .s0_hs{--shiki-default:#546E7A;--shiki-default-font-style:italic}html pre.shiki code .s-wAU, html code.shiki .s-wAU{--shiki-default:#F07178}html pre.shiki code .sbqyR, html code.shiki .sbqyR{--shiki-default:#FF9CAC}html pre.shiki code .sfyAc, html code.shiki .sfyAc{--shiki-default:#C3E88D}html pre.shiki code .sJ14y, html code.shiki .sJ14y{--shiki-default:#C792EA}html pre.shiki code .s5Dmg, html code.shiki .s5Dmg{--shiki-default:#FFCB6B}html pre.shiki code .sx098, html code.shiki .sx098{--shiki-default:#F78C6C}html pre.shiki code .sLFUT, html code.shiki .sLFUT{--shiki-default:#EEFFFF;--shiki-default-font-style:italic}html pre.shiki code .s6YsC, html code.shiki .s6YsC{--shiki-default:#B2CCD6}",{"title":55,"searchDepth":357,"depth":357,"links":3695},[3696,3697,3702,3709,3713,3720],{"id":37,"depth":357,"text":38},{"id":88,"depth":357,"text":89,"children":3698},[3699,3700,3701],{"id":93,"depth":472,"text":94},{"id":378,"depth":472,"text":379},{"id":2248,"depth":472,"text":2249},{"id":2473,"depth":357,"text":2474,"children":3703},[3704,3705,3706,3707,3708],{"id":2480,"depth":472,"text":2481},{"id":2520,"depth":472,"text":2521},{"id":2561,"depth":472,"text":2562},{"id":2607,"depth":472,"text":2608},{"id":2658,"depth":472,"text":2659},{"id":2681,"depth":357,"text":2682,"children":3710},[3711,3712],{"id":2688,"depth":472,"text":2689},{"id":2714,"depth":472,"text":2715},{"id":3044,"depth":357,"text":3045,"children":3714},[3715,3716,3717,3718,3719],{"id":3051,"depth":472,"text":3052},{"id":3174,"depth":472,"text":3175},{"id":3305,"depth":472,"text":3306},{"id":3408,"depth":472,"text":3409},{"id":3568,"depth":472,"text":3569},{"id":3592,"depth":357,"text":3593,"children":3721},[3722,3723,3724],{"id":3596,"depth":472,"text":3597},{"id":3603,"depth":472,"text":3604},{"id":3657,"depth":472,"text":3658},[3726],"programming","2025-07-11","A Real-World Migration",false,null,"md",{"htmlAttrs":3733,"link":3734,"meta":3738},{"lang":571},[3735],{"rel":797,"type":3736,"href":3737},"mange/x-icon","/favicon.ico",[3739,3742,3745,3748,3750,3752,3755,3758,3760,3762,3765],{"name":3740,"content":3741},"keywords","programming, coding, vue, nuxt, jekyll",{"name":3743,"content":3744},"robots","index, follow",{"name":3746,"content":3747},"author","Melchior Kannengießer",{"name":3749,"content":5},"og:title",{"name":3751,"content":3728},"og:description",{"name":3753,"content":3754},"og:image","/logo_518x270.png",{"name":3756,"content":3757},"og:url","http://www.mjkweb.de",{"name":3759,"content":5},"twitter:title",{"name":3761,"content":3728},"twitter:description",{"name":3763,"content":3764},"twitter:image","/logo_200x200.png",{"name":3766,"content":3767},"twitter:card","summary",{"excerpt_separator":3769},"\u003C!-- EXCERPT_END -->","/blog/2025/migrate-nuxt2-to-nuxt3",{"title":5,"description":3728},"blog/2025/migrate-nuxt2-to-nuxt3",[3726,3774,142,208],"coding","E_bOK4X6bmdhhdB-4l3A52UBTC3xRhbaVg8dYo-bVPQ",1775492953063] \ No newline at end of file diff --git a/blog/2025/migrate-nuxt2-to-nuxt3/index.html b/blog/2025/migrate-nuxt2-to-nuxt3/index.html new file mode 100644 index 0000000..da5819a --- /dev/null +++ b/blog/2025/migrate-nuxt2-to-nuxt3/index.html @@ -0,0 +1,250 @@ +Upgrading a Nuxt 2 Project to Nuxt 3

Upgrading a Nuxt 2 Project to Nuxt 3

Web technologies never stand still. With each new version, frameworks bring improvements in performance, developer experience, and long-term maintainability. That’s why I’ve decided to upgrade an existing Nuxt 2 project of mine to Nuxt 3.

The project in question is a small, personal website—somewhere between an online gallery and a digital business card—created to showcase my father’s artwork. It’s a relatively simple Nuxt 2 application, but it still offers a great opportunity to explore what’s involved in bringing a real-world project up to date with the latest version of Nuxt.

Nuxt 3 is built on top of Vue 3 and introduces a modern architecture that includes first-class support for the Composition API, a new server/ directory for backend logic, and Vite as the default bundler for faster development builds. These changes not only modernize the development workflow but also make the codebase more modular and performant by default.

This upgrade isn’t just about staying current—it’s a chance to revisit old code, rethink the structure, and embrace best practices that have emerged since the original version was built.

In this blog post, I’ll document my migration process as it unfolds—step by step. The goal is to provide a transparent look at what’s involved in moving from Nuxt 2 to Nuxt 3, including the challenges I run into and how I solve them. Whether you're working on a personal project or maintaining something in production, I hope this will serve as a useful and honest guide.

1. Preparation

Before jumping into the actual upgrade, I wanted to make sure I had a safe environment to experiment in. Since my Nuxt 2 project is already hosted on GitHub, I didn’t need a separate backup—version control has that covered.
+If you're not using Git, it's a good idea to create a manual backup of your project folder before starting, just to be safe.

I created a new branch specifically for the migration:

git checkout -b migrate/nuxt3
+

This allows me to work on the Nuxt 3 upgrade without touching the production code. If anything goes wrong, I can always fall back to the main branch or review the commit history.

If you're using Git on Windows and don’t have access to a Bash shell, the command below should still work in PowerShell or your Git GUI. If you're not using Git at all, simply duplicate your project folder manually and work on the copy.

At this stage, I also started looking into the official Nuxt 3 upgrade guide. It gives a good overview of what has changed between Nuxt 2 and 3—from how routing works to how plugins, middleware, and API calls are structured.

Finally, I listed all major dependencies in the project and began checking whether they are compatible with Nuxt 3 or if replacements are needed.

2. Migration

2.1 Updating Dependencies

The first step in the actual migration process is to update the project dependencies. Since Nuxt 3 is built on top of Vue 3 and introduces a modernized architecture, many packages from the Nuxt 2 ecosystem are either no longer compatible or have been replaced by new solutions. Before making any code changes, it’s important to ensure that your dependencies are up to date and compatible with Nuxt 3.

How do you know which dependencies need to be updated or replaced?

Start by opening your package.json and making a list of all packages under dependencies and devDependencies. For each package, check the official documentation or GitHub repository to see if it supports Nuxt 3 (or Vue 3). The Nuxt 3 upgrade guide is a great starting point, and many popular Nuxt modules have their own migration guides or compatibility tables.

Look out for these common patterns:

  • Packages starting with @nuxtjs/ may need to be updated or replaced.
  • Any direct Vue 2 dependencies (like vue, vuex, vue-router, vue-template-compiler) should be removed or replaced with their Vue 3 equivalents.
  • If you’re unsure about a package, search for “Nuxt 3 support” or “Vue 3 support” in its documentation or issues.

You can also use tools like npm-check-updates to quickly see which of your dependencies have newer versions available:

npx npm-check-updates
+

However, always double-check compatibility manually, as not every update is Nuxt 3-ready.

In my own project, I identified the following outdated or incompatible dependencies:

PackageStatus in Nuxt 3Recommendation
nuxt❌ Not compatibleUpdate to nuxt@latest
vue❌ Not requiredRemove (Nuxt 3 includes Vue 3 internally)
vue-server-renderer❌ Not requiredRemove
vue-template-compiler❌ Not requiredRemove
@nuxtjs/vuetify⚠️ Needs updateReplace with latest Vuetify for Vue 3
core-js✅ Compatible (optional)Keep if polyfills are needed
compass-mixins✅ CompatibleKeep if used
push-dir✅ CompatibleKeep if used
sass✅ CompatibleKeep
sass-loader⚠️ Needs updateUpdate to version 12 or higher

To update the dependencies, I used the following commands:

npm uninstall vue vue-server-renderer vue-template-compiler @nuxtjs/vuetify nuxt
+

Note: At the time of writing, Nuxt 4 is already in beta. This means that running npm install nuxt@latest might soon install Nuxt 4 instead of Nuxt 3. +To make sure you’re installing Nuxt 3, use the explicit version tag:

npm install nuxt@3
+

This guarantees that you’re working with the stable Nuxt 3 release, which is what this migration guide is based on.

npm install nuxt@latest
+npm install vuetify@latest
+
npm install --save-dev sass-loader@^12
+

After running these commands, my package.json was much cleaner and ready for the next steps in the migration.

2.2 Adapting the Codebase and Directory Structure

With the dependencies updated, the next step is to adapt your codebase and project structure to match the conventions and requirements of Nuxt 3. Nuxt 3 introduces several architectural changes, including new directories, file naming conventions, and the removal or replacement of some legacy features.

Start by reviewing the official Nuxt 3 directory structure documentation to get an overview of what’s new and what has changed.

Some of the most important changes include:

2.2.1 Configuration file

Rename nuxt.config.js to nuxt.config.ts and update its syntax to use TypeScript and the new Nuxt 3 options.

# Rename your Nuxt config file to use TypeScript
+mv nuxt.config.js nuxt.config.ts
+

and use defineNuxtConfig. My nuxt.config.ts file now looks like this:

export default defineNuxtConfig({
+  // Target: Only 'static' or 'server' in Nuxt 2, in Nuxt 3 use 'ssr: false' for static
+  ssr: false, // Set to false if you want a static site
+  app: {
+    baseURL: '/kunstkanne/',
+    head: {
+      title: 'kunstkanne',
+      htmlAttrs: {
+        lang: 'en'
+      },
+      meta: [
+        { charset: 'utf-8' },
+        { name: 'viewport', content: 'width=device-width, initial-scale=1' },
+        { name: 'description', content: '' },
+        { name: 'format-detection', content: 'telephone=no' }
+      ],
+      link: [
+        { rel: 'apple-touch-icon', sizes: '180x180', type: 'image/x-icon', href: '/apple-touch-icon.png' },
+        { rel: 'icon', type: 'image/png', sizes: '32x32', href: '/favicon-32x32.png' },
+        { rel: 'icon', type: 'image/png', sizes: '16x16', href: '/favicon-16x16.png' },
+        { rel: 'manifest', href: '/site.webmanifest' }
+      ]
+    }
+  },
+  css: [
+    '~/assets/css/main.scss'
+  ],
+  components: true,
+  modules: [
+    // Add Nuxt 3 compatible modules here
+  ],
+  build: {
+    // Add custom build options if needed
+  }
+})
+

When migrating your Nuxt config from JavaScript to TypeScript (nuxt.config.jsnuxt.config.ts), you might encounter some common TypeScript or linter errors. Here are two typical issues and how to resolve them:

  • Error:
    Cannot find name 'defineNuxtConfig'.

This happens because TypeScript (and your linter) does not know about the special Nuxt 3 global types by default.

to fix this, add "nuxt" to the types array in your tsconfig.json file.

{
+  "compilerOptions": {
+    "types": ["nuxt"]
+  }
+}
+
  • Error:
    Cannot read file './.nuxt/tsconfig.json'.

This occurs if your tsconfig.json tries to extend a file that does not exist yet. The .nuxt/tsconfig.json file is generated only after the first build, so it should not be referenced directly in your main tsconfig.json.

{
+  "compilerOptions": {
+    "target": "ESNext",
+    "module": "ESNext",
+    "moduleResolution": "Node",
+    "strict": true,
+    "jsx": "preserve",
+    "esModuleInterop": true,
+    "allowJs": true,
+    "skipLibCheck": true,
+    "types": ["nuxt"],
+    "baseUrl": ".",
+    "paths": {
+      "~/*": ["./*"],
+      "@/*": ["./*"]
+    }
+  },
+  "exclude": ["node_modules", ".output", ".nuxt", "dist"]
+}
+

What do these tsconfig.json options mean?

  • target, module, moduleResolution: Set the JavaScript version and module system for your project.
  • strict: Enables strict type-checking for safer code.
  • jsx: Allows Vue’s JSX/TSX support if needed.
  • esModuleInterop, allowJs, skipLibCheck: Improve compatibility with JavaScript and third-party libraries.
  • types: Ensures Nuxt’s global types (like defineNuxtConfig) are available everywhere.
  • baseUrl, paths: Allow you to use ~/ and @/ aliases in your imports.
  • exclude: Prevents TypeScript from checking build and output folders.

If you run into these errors, updating your tsconfig.json as shown above will resolve them and ensure a smooth TypeScript experience with Nuxt 3.

2.2.2 Middleware and server routes

In my project, I did not have any custom server middleware or API routes, so there was nothing to migrate for this step.

If you do have custom middleware, you should move them from the old middleware/ directory to the new server/middleware/ directory in Nuxt 3.
+For example:

# Move your custom server middleware or API routes into the new server/ directory
+# For example, move from:
+# /middleware/my-middleware.js
+# to:
+# /server/middleware/my-middleware.ts
+

2.2.3 Store

In my project, I did not use Vuex or any other state management solution, so there was nothing to migrate for this step.

If your project uses Vuex, you should consider migrating to Pinia, the new recommended state management solution for Nuxt 3.
+Here’s how you would do it:

# If you used Vuex, install Pinia and create a new store in the stores/ directory
+npm install pinia
+
+# Example: stores/counter.ts
+import { defineStore } from 'pinia'
+
+export const useCounterStore = defineStore('counter', {
+  state: () => ({
+    count: 0
+  }),
+  actions: {
+    increment() {
+      this.count++
+    }
+  }
+})
+

2.2.4 Plugins and composables

In my project, I did not have any custom plugins or composables, so there was nothing to migrate for this step.

If your project uses plugins or reusable logic (e.g. from plugins/, utils/, or mixins), you should move them to the new composables/ directory and update their syntax to use the Composition API.
+Here’s an example of a simple composable:

// Example: composables/useExample.ts
+export function useExample() {
+  const message = ref('Hello from a composable!')
+  return { message }
+}
+

2.2.5 API requests

In my project, I did not use the $axios module or make any direct API requests, so there was nothing to migrate for this step.

If your project uses $axios (for example, this.$axios.get('/api/data')), you should migrate to the new Nuxt 3 composables like useFetch or useAsyncData.
+Here’s an example of how you would do this:

// Old (Nuxt 2, Options API)
+export default {
+  asyncData({ $axios }) {
+    return $axios.$get('/api/data')
+  }
+}
+
+// New (Nuxt 3, Composition API)
+<script setup>
+const { data } = await useFetch('/api/data')
+</script>
+

2.2.6 Other breaking changes

In my project, I did not encounter any additional breaking changes or deprecated features that required migration.
+However, depending on your project, you may need to address some of the following changes. Here’s how these aspects differ between Nuxt 2 and Nuxt 3:

Directory structure
  • Nuxt 2:
    +Special folders like middleware/, store/, plugins/, static/, assets/, pages/, components/, layouts/
  • Nuxt 3:
    +New folders like server/ (for API routes and middleware), composables/ (for reusable logic).
    +Some folders (like store/) are now optional.
Global CSS and assets
  • Nuxt 2:
    +Add global CSS in nuxt.config.js: +
    css: [
    +  '~/assets/css/main.scss'
    +]
    +
  • Nuxt 3:
    +Same principle, but in nuxt.config.ts: +
    css: [
    +  '~/assets/css/main.scss'
    +]
    +
Migrating static assets and favicons

In Nuxt 2, static files such as favicons, robots.txt, and other assets were placed in the static directory.
+With Nuxt 3 and Nuxt 4, the static directory has been replaced by public.
+All files that should be directly accessible (e.g. /favicon.ico, /site.webmanifest, images for Open Graph, etc.) must now be placed in the public folder at the project root.

Migration steps:

  • Move all files from static to public.
  • Update any references in your configuration or templates if needed.
  • You can safely delete the old static directory after migrating.

Example structure:
+PLACEHOLDER_EXAMPLE_STRUCTURE

public/
+  favicon.ico
+  favicon-32x32.png
+  favicon-16x16.png
+  site.webmanifest
+  apple-touch-icon.png
+  android-chrome-512x512.png
+  android-chrome-192x192.png
+

This ensures that favicons and other static assets are correctly served in Nuxt 3/4.

Deprecated features/APIs
  • Nuxt 2:
    +Features like context.app, context.store, automatic injection of $axios, etc.
  • Nuxt 3:
    +Many of these features are removed or replaced by composables (e.g. useFetch, Pinia instead of Vuex, no automatic plugin injection).

Import aliases

  • Nuxt 2:
    +Usually @/ and ~/ for imports, but sometimes not consistent.
  • Nuxt 3:
    +The aliases @/ and ~/ are still standard and should be used for all imports: +
    import MyComponent from '@/components/MyComponent.vue'
    +import { useExample } from '~/composables/useExample'
    +

If you do run into issues, consult the Nuxt 3 migration guide and check the official documentation for any modules or features you use.

2.3 Bonus: Nuxt 3/4 Features & Folder Structure

Automatic Component Imports

One of the best quality-of-life improvements in Nuxt 3 and Nuxt 4 is automatic component import.
+You no longer need to manually import and register components from your components/ directory—they are available globally in your templates.

Before (Nuxt 2):

import Header from '~/components/Header.vue'
+export default {
+  components: { Header }
+}
+

Now (Nuxt 3/4):

<template>
+  <Header />
+</template>
+

This makes your code cleaner and easier to maintain!

Nuxt 4-Ready: Folder Structure

With Nuxt 4, some directories are now expected to be inside the new app/ directory.
+Here’s how you should organize your project for Nuxt 4 compatibility:

my-nuxt-project/
+│
+├─ app/
+│   ├─ components/
+│   ├─ layouts/
+│   └─ pages/
+│
+├─ assets/
+├─ public/
+├─ server/
+├─ nuxt.config.ts
+├─ package.json
+└─ ...
+
  • Move your components/, pages/, and layouts/ folders into the new app/ directory.
  • Your assets/, public/, and server/ folders remain at the project root.

Nuxt 4 Compatibility Option

To make your project Nuxt 4 ready, add the following option to your nuxt.config.ts:

codeblock: nuxt4-future-option

export default defineNuxtConfig({
+  // ...your other config options
+  future: {
+    compatibilityVersion: 4,
+  },
+})
+

This ensures your project uses the latest conventions and is prepared for the next major version.

3. Challenges & Solutions

No migration is ever completely smooth, and moving from Nuxt 2 to Nuxt 3 was no exception. Here are some of the main challenges I encountered during the process—and how I solved them:

3.1 Dependency and Build Issues

Problem:
+After updating dependencies and running the dev server, I encountered errors like Cannot find module 'bindings' and issues related to @vercel/nft.

Solution:
+These errors were caused by leftover or broken dependencies from the old setup. Deleting node_modules and package-lock.json and running a fresh npm install resolved the issue.
+If you see similar errors, always try a clean install first.

3.2 TypeScript and Linter Errors

Problem:
+After converting nuxt.config.js to nuxt.config.ts, TypeScript complained about defineNuxtConfig not being found.

Solution:
+Add "types": ["nuxt"] to your tsconfig.json to make Nuxt 3’s global types available.
+If you see errors about missing or unreadable tsconfig.json files, use a standalone config and do not extend from .nuxt/tsconfig.json.

3.3 SCSS/Sass Import and Mixin Problems

Problem:
+Sass @import rules are deprecated, and Compass-Mixins are not compatible with Nuxt 3/Vite.
+I also got errors like Undefined mixin and warnings about deprecated imports.

Solution:

  • Remove all Compass-Mixins and replace them with native CSS.
  • Switch from @import to the new @use syntax for SCSS files.
  • If you rely on variables or mixins across files, use the namespace provided by @use.

3.4 Layout and Styling Differences

Problem:
+After migration, the layout looked different:

  • The page had unwanted white margins.
  • Navigation links were stuck together.
  • The font was not loading.
  • The mobile navigation did not behave as expected.

Solution:

  • Add body { margin: 0; padding: 0; } to your global CSS to remove default browser margins.
  • Add or adjust CSS for the navigation to provide spacing between links.
  • Update font paths in SCSS to use the new Vite-compatible syntax (e.g. @/assets/fonts/vivaldi.ttf).
  • For the mobile navigation, implement a burger menu that closes when a link is clicked.

3.5 General Advice

  • Test your app after every major migration step.
  • Use browser DevTools to debug layout and CSS issues.
  • Don’t be afraid to remove legacy code or dependencies that are no longer needed.

Every migration is unique, but most issues can be solved with a bit of patience and by consulting the Nuxt 3 documentation and community resources.

3.x Font Handling and Modern SCSS in Nuxt 3

One of the trickier parts of the migration was handling custom fonts and global styles in a way that works reliably with Nuxt 3 and Vite.

Font file location

In Nuxt 2, font files could often be placed in the assets directory and would be processed by Webpack. With Nuxt 3 (and Vite), static assets like fonts and images that are referenced directly in HTML or CSS must be moved to the public directory. Only then will they be available at the expected path in the final build.

Example:

public/fonts/vivaldi.ttf
+

Global font and style inclusion

Previously, it was common to use @import in SCSS to include global styles and fonts. With Nuxt 3 and Dart Sass, @import is deprecated and should be replaced by the new module system using @use and direct inclusion in the Nuxt config.

Old approach (deprecated):

// Old (deprecated)
+@import './fonts.scss';
+

Modern approach:

  • The global font definition and h1 styling are placed in a dedicated file, e.g. assets/css/fonts.scss.
  • This file is included as a global CSS file in the Nuxt configuration.
@font-face {
+  font-family: 'Vivaldi-Regular';
+  src: url('/fonts/vivaldi.ttf') format('truetype');
+  font-weight: 400;
+  font-style: normal;
+}
+
+h1 {
+  font-family: 'Vivaldi-Regular', 'Segoe Script', 'sans-serif';
+}
+

Nuxt configuration:

import { join } from 'path';
+
+export default defineNuxtConfig({
+  css: [
+    join(__dirname, 'assets/css/fonts.scss'),
+    join(__dirname, 'assets/css/main.scss')
+  ],
+  // ... other options ...
+});
+

Note: +Using join(__dirname, ...) ensures that the stylesheets are found reliably across different operating systems.


This approach keeps your font and global style handling future-proof and compatible with the latest Nuxt and Sass best practices.

3.6 Additional Issues After Removing Old Config and Enabling Nuxt 4 Compatibility

After removing legacy configuration files and updating the project for Nuxt 4 compatibility, several common migration issues may arise. Here are some general patterns and solutions that apply to most Nuxt 3/4 migrations:

3.6.1 SCSS/CSS Not Found

Problem:
+After updating the configuration, global SCSS or CSS files may no longer be found.
+Typical error message:

Pre-transform error: Failed to resolve import "assets/css/main.scss"
+

Solution:

  • Ensure the path in the css option of your Nuxt config is correct.
  • Do not use a tilde or leading slash.
  • In some cases, using an absolute path with a path join helper can help.
import { join } from 'path'
+
+export default defineNuxtConfig({
+  css: [
+    join(__dirname, 'assets/css/main.scss')
+  ],
+  // ...other config options
+})
+

Always clear the cache after such changes:

  • Delete node_modules, .nuxt, and your lock file, then reinstall dependencies and restart the dev server.

3.6.2 Images Not Found

Problem:
+After switching to Nuxt 3/4 and Vite, images previously loaded from the assets folder may no longer be found in templates.
+Typical error message:

Failed to resolve import "/img/kanne.jpg"
+

Solution:

  • Images used in templates (e.g. img src) must be moved to the public folder.
  • Update the paths in your templates to point to the correct location.
<img src="/img/example.jpg" alt="Example">
+<img src="/img/gallery/picture.png" alt="Gallery Picture">
+<img src="/img/layout/header.jpg" alt="Header">
+

3.6.3 PowerShell: Copying Images

Problem:
+When copying images on Windows PowerShell, Unix commands like && or cp do not work.

Solution:

  • Create the folder structure with mkdir and use Copy-Item to move the images.

for windows users

mkdir public\img
+mkdir public\img\gallery
+mkdir public\img\layout
+
+Copy-Item assets\img\example.jpg public\img\
+Copy-Item assets\img\gallery\* public\img\gallery\
+Copy-Item assets\img\layout\* public\img\layout\
+

for linux macos users

mkdir -p public/img/gallery
+mkdir -p public/img/layout
+
+cp assets/img/example.jpg public/img/
+cp assets/img/gallery/* public/img/gallery/
+cp assets/img/layout/* public/img/layout/
+

3.6.4 SCSS: @font-face Must Be Top-Level

Problem:
+A SCSS error may occur if the @font-face rule is nested inside a selector.
+This causes the entire SCSS file to fail processing.

Solution:

  • The @font-face rule must be at the top level, not nested.
@font-face {
+  font-family: 'custom-font';
+  font-style: normal;
+  font-weight: 400;
+  font-display: swap;
+  src: url('@/assets/fonts/custom-font.ttf') format('truetype');
+}
+
+h1 {
+  font-family: 'custom-font', 'Segoe Script', 'sans-serif';
+}
+

3.6.5 Lessons Learned

Especially after removing old config files and switching to Nuxt 4 standards, many legacy issues become visible.
+Key takeaways:

  • Paths and imports must be exact.
  • Assets and static files must be strictly separated.
  • Clear caches regularly.
  • Pay attention to SCSS syntax.

4. Conclusion

Summary of my experience

Migrating from Nuxt 2 to Nuxt 3 was both a challenge and a great learning experience. While the process required a deep dive into the new architecture, updated conventions, and breaking changes, the end result is a more modern, maintainable, and performant codebase. The new features of Nuxt 3—like the Composition API, Vite integration, and the new directory structure—make development more enjoyable and future-proof.

Recommendations for others

  • Read the official migration guide before you start. It will save you a lot of time and confusion.
  • Take it step by step: Update dependencies, migrate config and structure, then tackle code and styling issues.
  • Expect to break things: Don’t be discouraged by errors—most are solvable with a bit of research and patience.
  • Test early and often: Run your app after every major change to catch issues before they pile up.
  • Clean up your codebase: Use the migration as an opportunity to remove unused dependencies, legacy code, and outdated patterns.
  • Leverage the community: If you get stuck, search GitHub issues, Discord, or the Nuxt forums—chances are, someone else had the same problem.
  • Work in a dedicated migration branch: This keeps your production code safe and lets you experiment freely.
  • Document your process: Writing down each step (or blogging about it) is invaluable for yourself and others.

What I would do differently next time

  • Plan more time for CSS and layout adjustments: Small differences in how styles are handled can have a big impact.
  • Be prepared for subtle differences in tooling: Especially with Vite and modern Sass, some things work differently than in the old Webpack world.
  • Consider a full rewrite for very old projects: Sometimes, starting from scratch with Nuxt 3 and porting over only the essentials is faster and cleaner.

Final thoughts:
+The migration to Nuxt 3 is absolutely worth it for most projects. The ecosystem is moving forward, and the new features and performance improvements are significant. With a bit of patience and a systematic approach, you’ll end up with a codebase that’s ready for the future.

Good luck with your own migration!

© by Melchior Jascha Kannengießer
\ No newline at end of file diff --git a/blog/2025/upgrade-nuxt-3-to-nuxt-4/_payload.json b/blog/2025/upgrade-nuxt-3-to-nuxt-4/_payload.json new file mode 100644 index 0000000..0c0aff3 --- /dev/null +++ b/blog/2025/upgrade-nuxt-3-to-nuxt-4/_payload.json @@ -0,0 +1 @@ +[{"data":1,"prerenderedAt":3985},["ShallowReactive",2],{"blog-/blog/2025/upgrade-nuxt-3-to-nuxt-4":3},{"id":4,"title":5,"body":6,"categories":3932,"date":3934,"description":3935,"draft":3936,"excerpt":3937,"extension":3938,"head":3939,"meta":3977,"navigation":804,"path":3979,"seo":3980,"stem":3981,"tags":3982,"__hash__":3984},"blog/blog/2025/upgrade-nuxt-3-to-nuxt-4.md","Upgrading from Nuxt 3 to Nuxt 4",{"type":7,"value":8,"toc":3910},"minimark",[9,13,17,20,23,26,31,38,41,58,61,64,80,87,90,94,99,106,111,130,139,148,151,154,251,254,257,273,276,285,291,295,298,306,317,422,429,435,479,483,492,555,565,627,634,638,645,650,656,726,729,758,763,775,825,836,880,899,962,971,1088,1095,1150,1153,1161,1165,1168,1177,1180,1284,1294,1453,1456,1460,1463,1467,1478,1484,1494,1541,1547,1595,1598,1602,1613,1628,1636,1639,1664,1667,1671,1678,1684,1690,1702,1968,1971,1975,1986,2002,3199,3202,3206,3217,3224,3312,3319,3556,3559,3563,3579,3591,3736,3741,3793,3796,3800,3804,3807,3810,3836,3839,3843,3877,3881,3895,3903,3906],[10,11,5],"h1",{"id":12},"upgrading-from-nuxt-3-to-nuxt-4",[14,15,16],"p",{},"It's Christmas time, so I have time to code. Nuxt 3 reaches its end of life in January 2026, and Nuxt 4 is the new kid on the block. So I decided to upgrade my projects to Nuxt 4. Since my blog is already configured to be Nuxt 4 ready and it's just a simple blog with some markdown files, it should be a no-brainer, right?",[14,18,19],{},"Well, as it turns out, even projects that are already \"Nuxt 4 ready\" can throw unexpected challenges at you. In this blog post, I'll document my experience upgrading three projects to Nuxt 4: my personal blog (already Nuxt 4 ready), a web business card/gallery project (also already Nuxt 4 ready), and Linxz—a more complex application that required a full migration.",[14,21,22],{},"The irony? Most of the issues I encountered were with the projects that were supposedly already ready for Nuxt 4. This upgrade wasn't just about updating dependencies—it involved dealing with breaking changes in Nuxt Content 3.x, fixing TypeScript configuration issues, and working around problems with dark mode templates and Open Graph metadata.",[14,24,25],{},"In this post, I'll walk you through the entire process, including the challenges I faced and how I solved them. Whether you're upgrading a single project or multiple projects like I did, I hope this honest account will help you avoid some of the pitfalls I encountered.",[27,28,30],"h2",{"id":29},"_1-preparation","1. Preparation",[14,32,33,34,37],{},"Before jumping into the actual upgrade, I wanted to make sure I had a safe environment to experiment in. Since all my projects are already hosted on GitHub, I didn't need a separate backup—version control has that covered.",[35,36],"br",{},"\nIf you're not using Git, it's a good idea to create a manual backup of your project folder before starting, just to be safe.",[14,39,40],{},"I created new branches specifically for the migration in each project:",[42,43,48],"pre",{"className":44,"code":45,"language":46,"meta":47,"style":47},"language-sh shiki shiki-themes material-theme","git checkout -b upgrade/nuxt4\n","sh","",[49,50,51],"code",{"__ignoreMap":47},[52,53,56],"span",{"class":54,"line":55},"line",1,[52,57,45],{},[14,59,60],{},"This allows me to work on the Nuxt 4 upgrade without touching the production code. If anything goes wrong, I can always fall back to the main branch or review the commit history.",[14,62,63],{},"If you're using Git on Windows and don't have access to a Bash shell, the command above should still work in PowerShell or your Git GUI. If you're not using Git at all, simply duplicate your project folder manually and work on the copy.",[14,65,66,70,71,79],{},[67,68,69],"strong",{},"A confession:"," At this stage, I should have started looking into the official ",[72,73,78],"a",{"href":74,"rel":75,":target":77},"https://nuxt.com/docs/getting-started/upgrade#nuxt-3-to-nuxt-4",[76],"nofollow","_blank","Nuxt 4 upgrade guide",". But I didn't. Why? Because I thought it would be a no-brainer—after all, two of my three projects were already configured to be Nuxt 4 ready. I figured I'd just update the dependencies and be done with it.",[14,81,82,83,86],{},"As you'll see, that assumption was wrong. Even projects that are \"Nuxt 4 ready\" can have issues when you actually upgrade to Nuxt 4. So my first piece of advice: ",[67,84,85],{},"Read the documentation first",", even if you think you don't need to.",[14,88,89],{},"Finally, I listed all major dependencies in each project and began checking whether they needed updates or if replacements were needed.",[27,91,93],{"id":92},"_2-migration","2. Migration",[95,96,98],"h3",{"id":97},"_21-updating-dependencies","2.1 Updating Dependencies",[14,100,101,102,105],{},"The first step in the actual upgrade process is to update the project dependencies. Since Nuxt 4 is the latest major version, the main change is updating the ",[49,103,104],{},"nuxt"," package itself. However, you may also need to update related modules and Nuxt Content if you're using it.",[14,107,108],{},[67,109,110],{},"How do you know which dependencies need to be updated?",[14,112,113,114,117,118,121,122,125,126,129],{},"Start by opening your ",[49,115,116],{},"package.json"," and making a list of all packages under ",[49,119,120],{},"dependencies"," and ",[49,123,124],{},"devDependencies",". For each package, check the official documentation or GitHub repository to see if it supports Nuxt 4. The ",[72,127,78],{"href":74,"rel":128},[76]," is a great starting point.",[14,131,132,133,138],{},"You can also use tools like ",[72,134,137],{"href":135,"rel":136},"https://www.npmjs.com/package/npm-check-updates",[76],"npm-check-updates"," to quickly see which of your dependencies have newer versions available:",[42,140,142],{"className":44,"code":141,"language":46,"meta":47,"style":47},"npx npm-check-updates\n",[49,143,144],{"__ignoreMap":47},[52,145,146],{"class":54,"line":55},[52,147,141],{},[14,149,150],{},"However, always double-check compatibility manually, as not every update is Nuxt 4-ready.",[14,152,153],{},"In my projects, I identified the following dependencies that needed updates:",[155,156,157,173],"table",{},[158,159,160],"thead",{},[161,162,163,167,170],"tr",{},[164,165,166],"th",{},"Package",[164,168,169],{},"Status in Nuxt 4",[164,171,172],{},"Recommendation",[174,175,176,190,204,215,224,233,242],"tbody",{},[161,177,178,181,184],{},[179,180,104],"td",{},[179,182,183],{},"❌ Needs update",[179,185,186,187],{},"Update to ",[49,188,189],{},"nuxt@^4.0.0",[161,191,192,195,198],{},[179,193,194],{},"@nuxt/content",[179,196,197],{},"⚠️ Major version change",[179,199,186,200,203],{},[49,201,202],{},"@nuxt/content@^3.0.0"," (breaking changes!)",[161,205,206,209,212],{},[179,207,208],{},"@pinia/nuxt",[179,210,211],{},"✅ Compatible",[179,213,214],{},"Update to latest version",[161,216,217,220,222],{},[179,218,219],{},"@prisma/nuxt",[179,221,211],{},[179,223,214],{},[161,225,226,229,231],{},[179,227,228],{},"@nuxtjs/tailwindcss",[179,230,211],{},[179,232,214],{},[161,234,235,238,240],{},[179,236,237],{},"@nuxt/eslint",[179,239,211],{},[179,241,214],{},[161,243,244,247,249],{},[179,245,246],{},"@nuxt/test-utils",[179,248,211],{},[179,250,214],{},[14,252,253],{},"The most significant change was Nuxt Content, which jumped from version 2.x to 3.x. This introduced breaking changes in the API that I'll discuss in more detail later.",[14,255,256],{},"To update the dependencies, I used the following commands:",[42,258,260],{"className":44,"code":259,"language":46,"meta":47,"style":47},"npm install nuxt@latest\nnpm install @nuxt/content@latest\n",[49,261,262,267],{"__ignoreMap":47},[52,263,264],{"class":54,"line":55},[52,265,266],{},"npm install nuxt@latest\n",[52,268,270],{"class":54,"line":269},2,[52,271,272],{},"npm install @nuxt/content@latest\n",[14,274,275],{},"For the other modules, I updated them to their latest versions as well:",[42,277,279],{"className":44,"code":278,"language":46,"meta":47,"style":47},"npm install @pinia/nuxt@latest @prisma/nuxt@latest @nuxtjs/tailwindcss@latest\n",[49,280,281],{"__ignoreMap":47},[52,282,283],{"class":54,"line":55},[52,284,278],{},[14,286,287,288,290],{},"After running these commands, my ",[49,289,116],{}," files were updated and ready for the next steps in the migration.",[95,292,294],{"id":293},"_22-adapting-the-configuration","2.2 Adapting the Configuration",[14,296,297],{},"With the dependencies updated, the next step is to adapt your Nuxt configuration to match Nuxt 4's requirements. The changes are relatively minor compared to the Nuxt 2→3 migration, but there are still some important updates to make.",[299,300,302,303],"h4",{"id":301},"_221-remove-futurecompatibilityversion","2.2.1 Remove ",[49,304,305],{},"future.compatibilityVersion",[14,307,308,309,312,313,316],{},"If you had set ",[49,310,311],{},"future.compatibilityVersion: 4"," in your ",[49,314,315],{},"nuxt.config.ts"," to prepare for Nuxt 4, you can now remove it. This option is no longer needed since you're actually using Nuxt 4:",[42,318,322],{"className":319,"code":320,"language":321,"meta":47,"style":47},"language-ts shiki shiki-themes material-theme","export default defineNuxtConfig({\n // Remove this:\n // future: {\n // compatibilityVersion: 4,\n // },\n \n // Keep this:\n compatibilityDate: '2024-11-01', // Update to current date\n // ... rest of your config\n})\n","ts",[49,323,324,345,351,357,363,369,375,381,407,413],{"__ignoreMap":47},[52,325,326,330,333,337,341],{"class":54,"line":55},[52,327,329],{"class":328},"s6cf3","export",[52,331,332],{"class":328}," default",[52,334,336],{"class":335},"sdLwU"," defineNuxtConfig",[52,338,340],{"class":339},"svy0-","(",[52,342,344],{"class":343},"sAklC","{\n",[52,346,347],{"class":54,"line":269},[52,348,350],{"class":349},"s0_hs"," // Remove this:\n",[52,352,354],{"class":54,"line":353},3,[52,355,356],{"class":349}," // future: {\n",[52,358,360],{"class":54,"line":359},4,[52,361,362],{"class":349}," // compatibilityVersion: 4,\n",[52,364,366],{"class":54,"line":365},5,[52,367,368],{"class":349}," // },\n",[52,370,372],{"class":54,"line":371},6,[52,373,374],{"class":339}," \n",[52,376,378],{"class":54,"line":377},7,[52,379,380],{"class":349}," // Keep this:\n",[52,382,384,388,391,394,398,401,404],{"class":54,"line":383},8,[52,385,387],{"class":386},"s-wAU"," compatibilityDate",[52,389,390],{"class":343},":",[52,392,393],{"class":343}," '",[52,395,397],{"class":396},"sfyAc","2024-11-01",[52,399,400],{"class":343},"'",[52,402,403],{"class":343},",",[52,405,406],{"class":349}," // Update to current date\n",[52,408,410],{"class":54,"line":409},9,[52,411,412],{"class":349}," // ... rest of your config\n",[52,414,416,419],{"class":54,"line":415},10,[52,417,418],{"class":343},"}",[52,420,421],{"class":339},")\n",[299,423,425,426],{"id":424},"_222-update-compatibilitydate","2.2.2 Update ",[49,427,428],{},"compatibilityDate",[14,430,431,432,434],{},"Update the ",[49,433,428],{}," to the current date. This ensures you're using the latest Nuxt 4 features and conventions:",[42,436,438],{"className":319,"code":437,"language":321,"meta":47,"style":47},"export default defineNuxtConfig({\n compatibilityDate: '2024-12-24', // Update to current date\n // ... rest of your config\n})\n",[49,439,440,452,469,473],{"__ignoreMap":47},[52,441,442,444,446,448,450],{"class":54,"line":55},[52,443,329],{"class":328},[52,445,332],{"class":328},[52,447,336],{"class":335},[52,449,340],{"class":339},[52,451,344],{"class":343},[52,453,454,456,458,460,463,465,467],{"class":54,"line":269},[52,455,387],{"class":386},[52,457,390],{"class":343},[52,459,393],{"class":343},[52,461,462],{"class":396},"2024-12-24",[52,464,400],{"class":343},[52,466,403],{"class":343},[52,468,406],{"class":349},[52,470,471],{"class":54,"line":353},[52,472,412],{"class":349},[52,474,475,477],{"class":54,"line":359},[52,476,418],{"class":343},[52,478,421],{"class":339},[299,480,482],{"id":481},"_223-typescript-reference","2.2.3 TypeScript Reference",[14,484,485,486,489,490,390],{},"When using TypeScript, you might encounter an error like ",[49,487,488],{},"Cannot find name 'defineNuxtConfig'",". To fix this, add a TypeScript reference directive at the top of your ",[49,491,315],{},[42,493,495],{"className":319,"code":494,"language":321,"meta":47,"style":47},"// https://nuxt.com/docs/api/configuration/nuxt-config\n/// \u003Creference types=\"nuxt\" />\nexport default defineNuxtConfig({\n // ... your config\n})\n",[49,496,497,502,532,544,549],{"__ignoreMap":47},[52,498,499],{"class":54,"line":55},[52,500,501],{"class":349},"// https://nuxt.com/docs/api/configuration/nuxt-config\n",[52,503,504,507,510,514,518,521,524,527,529],{"class":54,"line":269},[52,505,506],{"class":349},"/// ",[52,508,509],{"class":328},"\u003C",[52,511,513],{"class":512},"st21m","reference",[52,515,517],{"class":516},"sVyDW"," types",[52,519,520],{"class":328},"=",[52,522,523],{"class":328},"\"",[52,525,104],{"class":526},"swXnL",[52,528,523],{"class":328},[52,530,531],{"class":328}," />\n",[52,533,534,536,538,540,542],{"class":54,"line":353},[52,535,329],{"class":328},[52,537,332],{"class":328},[52,539,336],{"class":335},[52,541,340],{"class":339},[52,543,344],{"class":343},[52,545,546],{"class":54,"line":359},[52,547,548],{"class":349}," // ... your config\n",[52,550,551,553],{"class":54,"line":365},[52,552,418],{"class":343},[52,554,421],{"class":339},[14,556,557,558,561,562,390],{},"You may also need to add ",[49,559,560],{},"\"types\": [\"nuxt\"]"," to your ",[49,563,564],{},"tsconfig.json",[42,566,570],{"className":567,"code":568,"language":569,"meta":47,"style":47},"language-json shiki shiki-themes material-theme","{\n \"compilerOptions\": {\n \"types\": [\"nuxt\"]\n }\n}\n","json",[49,571,572,576,592,617,622],{"__ignoreMap":47},[52,573,574],{"class":54,"line":55},[52,575,344],{"class":343},[52,577,578,581,585,587,589],{"class":54,"line":269},[52,579,580],{"class":343}," \"",[52,582,584],{"class":583},"sJ14y","compilerOptions",[52,586,523],{"class":343},[52,588,390],{"class":343},[52,590,591],{"class":343}," {\n",[52,593,594,597,601,603,605,608,610,612,614],{"class":54,"line":353},[52,595,596],{"class":343}," \"",[52,598,600],{"class":599},"s5Dmg","types",[52,602,523],{"class":343},[52,604,390],{"class":343},[52,606,607],{"class":343}," [",[52,609,523],{"class":343},[52,611,104],{"class":396},[52,613,523],{"class":343},[52,615,616],{"class":343},"]\n",[52,618,619],{"class":54,"line":359},[52,620,621],{"class":343}," }\n",[52,623,624],{"class":54,"line":365},[52,625,626],{"class":343},"}\n",[14,628,629,630,633],{},"This ensures TypeScript recognizes Nuxt's global types, including ",[49,631,632],{},"defineNuxtConfig",".",[95,635,637],{"id":636},"_23-adapting-the-project-structure-linxz-only","2.3 Adapting the Project Structure (Linxz Only)",[14,639,640,641,644],{},"For my Linxz project, which wasn't already Nuxt 4 ready, I needed to restructure the project to follow Nuxt 4's new conventions. Nuxt 4 introduces a new ",[49,642,643],{},"app/"," directory structure that organizes your application code more clearly.",[14,646,647],{},[67,648,649],{},"What needs to be moved?",[14,651,652,653,655],{},"The following directories should be moved into a new ",[49,654,643],{}," directory:",[657,658,659,669,677,685,693,701,709,717],"ul",{},[660,661,662,665,666],"li",{},[49,663,664],{},"pages/"," → ",[49,667,668],{},"app/pages/",[660,670,671,665,674],{},[49,672,673],{},"components/",[49,675,676],{},"app/components/",[660,678,679,665,682],{},[49,680,681],{},"layouts/",[49,683,684],{},"app/layouts/",[660,686,687,665,690],{},[49,688,689],{},"composables/",[49,691,692],{},"app/composables/",[660,694,695,665,698],{},[49,696,697],{},"plugins/",[49,699,700],{},"app/plugins/",[660,702,703,665,706],{},[49,704,705],{},"stores/",[49,707,708],{},"app/stores/",[660,710,711,665,714],{},[49,712,713],{},"app.vue",[49,715,716],{},"app/app.vue",[660,718,719,665,722,725],{},[49,720,721],{},"lib/",[49,723,724],{},"app/lib/"," (if you have one)",[14,727,728],{},"Directories that remain in the root:",[657,730,731,737,742,747,753],{},[660,732,733,736],{},[49,734,735],{},"server/"," (stays at root)",[660,738,739,736],{},[49,740,741],{},"public/",[660,743,744,736],{},[49,745,746],{},"tests/",[660,748,749,752],{},[49,750,751],{},"config/"," (stays at root, if you have one)",[660,754,755,752],{},[49,756,757],{},"prisma/",[14,759,760],{},[67,761,762],{},"Migration steps:",[764,765,766,772],"ol",{},[660,767,768,769,771],{},"Create the ",[49,770,643],{}," directory in your project root.",[660,773,774],{},"Move the directories:",[42,776,778],{"className":44,"code":777,"language":46,"meta":47,"style":47},"# On Linux/macOS\nmkdir app\nmv pages components layouts composables plugins stores lib app/\nmv app.vue app/\n\n# On Windows PowerShell\nmkdir app\nMove-Item pages,components,layouts,composables,plugins,stores,lib app/\nMove-Item app.vue app/\n",[49,779,780,785,790,795,800,806,811,815,820],{"__ignoreMap":47},[52,781,782],{"class":54,"line":55},[52,783,784],{},"# On Linux/macOS\n",[52,786,787],{"class":54,"line":269},[52,788,789],{},"mkdir app\n",[52,791,792],{"class":54,"line":353},[52,793,794],{},"mv pages components layouts composables plugins stores lib app/\n",[52,796,797],{"class":54,"line":359},[52,798,799],{},"mv app.vue app/\n",[52,801,802],{"class":54,"line":365},[52,803,805],{"emptyLinePlaceholder":804},true,"\n",[52,807,808],{"class":54,"line":371},[52,809,810],{},"# On Windows PowerShell\n",[52,812,813],{"class":54,"line":377},[52,814,789],{},[52,816,817],{"class":54,"line":383},[52,818,819],{},"Move-Item pages,components,layouts,composables,plugins,stores,lib app/\n",[52,821,822],{"class":54,"line":409},[52,823,824],{},"Move-Item app.vue app/\n",[764,826,827],{"start":353},[660,828,829,830,832,833,390],{},"Update ",[49,831,315],{}," to set ",[49,834,835],{},"srcDir",[42,837,839],{"className":319,"code":838,"language":321,"meta":47,"style":47},"export default defineNuxtConfig({\n srcDir: 'app',\n // ... rest of your config\n})\n",[49,840,841,853,870,874],{"__ignoreMap":47},[52,842,843,845,847,849,851],{"class":54,"line":55},[52,844,329],{"class":328},[52,846,332],{"class":328},[52,848,336],{"class":335},[52,850,340],{"class":339},[52,852,344],{"class":343},[52,854,855,858,860,862,865,867],{"class":54,"line":269},[52,856,857],{"class":386}," srcDir",[52,859,390],{"class":343},[52,861,393],{"class":343},[52,863,864],{"class":396},"app",[52,866,400],{"class":343},[52,868,869],{"class":343},",\n",[52,871,872],{"class":54,"line":353},[52,873,412],{"class":349},[52,875,876,878],{"class":54,"line":359},[52,877,418],{"class":343},[52,879,421],{"class":339},[764,881,882],{"start":359},[660,883,884,885,121,888,891,892,894,895,898],{},"Update import paths for server-side code. Since ",[49,886,887],{},"~",[49,889,890],{},"@"," now point to ",[49,893,643],{},", you need to use ",[49,896,897],{},"~~"," for root-level imports:",[42,900,902],{"className":319,"code":901,"language":321,"meta":47,"style":47},"// Old (points to app/server, which doesn't exist)\nimport { something } from '~/server/utils'\n\n// New (points to root/server)\nimport { something } from '~~/server/utils'\n",[49,903,904,909,934,938,943],{"__ignoreMap":47},[52,905,906],{"class":54,"line":55},[52,907,908],{"class":349},"// Old (points to app/server, which doesn't exist)\n",[52,910,911,914,917,920,923,926,928,931],{"class":54,"line":269},[52,912,913],{"class":328},"import",[52,915,916],{"class":343}," {",[52,918,919],{"class":339}," something",[52,921,922],{"class":343}," }",[52,924,925],{"class":328}," from",[52,927,393],{"class":343},[52,929,930],{"class":396},"~/server/utils",[52,932,933],{"class":343},"'\n",[52,935,936],{"class":54,"line":353},[52,937,805],{"emptyLinePlaceholder":804},[52,939,940],{"class":54,"line":359},[52,941,942],{"class":349},"// New (points to root/server)\n",[52,944,945,947,949,951,953,955,957,960],{"class":54,"line":365},[52,946,913],{"class":328},[52,948,916],{"class":343},[52,950,919],{"class":339},[52,952,922],{"class":343},[52,954,925],{"class":328},[52,956,393],{"class":343},[52,958,959],{"class":396},"~~/server/utils",[52,961,933],{"class":343},[764,963,964],{"start":365},[660,965,966,967,970],{},"Update test configuration. If you're using Vitest, update your ",[49,968,969],{},"vitest.config.ts"," aliases:",[42,972,974],{"className":319,"code":973,"language":321,"meta":47,"style":47},"export default defineVitestConfig({\n resolve: {\n alias: {\n '~': path.resolve(__dirname, './app'),\n '@': path.resolve(__dirname, './app'),\n }\n }\n})\n",[49,975,976,989,998,1007,1043,1073,1078,1082],{"__ignoreMap":47},[52,977,978,980,982,985,987],{"class":54,"line":55},[52,979,329],{"class":328},[52,981,332],{"class":328},[52,983,984],{"class":335}," defineVitestConfig",[52,986,340],{"class":339},[52,988,344],{"class":343},[52,990,991,994,996],{"class":54,"line":269},[52,992,993],{"class":386}," resolve",[52,995,390],{"class":343},[52,997,591],{"class":343},[52,999,1000,1003,1005],{"class":54,"line":353},[52,1001,1002],{"class":386}," alias",[52,1004,390],{"class":343},[52,1006,591],{"class":343},[52,1008,1009,1012,1014,1016,1018,1021,1023,1026,1029,1031,1033,1036,1038,1041],{"class":54,"line":359},[52,1010,1011],{"class":343}," '",[52,1013,887],{"class":386},[52,1015,400],{"class":343},[52,1017,390],{"class":343},[52,1019,1020],{"class":339}," path",[52,1022,633],{"class":343},[52,1024,1025],{"class":335},"resolve",[52,1027,1028],{"class":339},"(__dirname",[52,1030,403],{"class":343},[52,1032,393],{"class":343},[52,1034,1035],{"class":396},"./app",[52,1037,400],{"class":343},[52,1039,1040],{"class":339},")",[52,1042,869],{"class":343},[52,1044,1045,1047,1049,1051,1053,1055,1057,1059,1061,1063,1065,1067,1069,1071],{"class":54,"line":365},[52,1046,1011],{"class":343},[52,1048,890],{"class":386},[52,1050,400],{"class":343},[52,1052,390],{"class":343},[52,1054,1020],{"class":339},[52,1056,633],{"class":343},[52,1058,1025],{"class":335},[52,1060,1028],{"class":339},[52,1062,403],{"class":343},[52,1064,393],{"class":343},[52,1066,1035],{"class":396},[52,1068,400],{"class":343},[52,1070,1040],{"class":339},[52,1072,869],{"class":343},[52,1074,1075],{"class":54,"line":371},[52,1076,1077],{"class":343}," }\n",[52,1079,1080],{"class":54,"line":377},[52,1081,621],{"class":343},[52,1083,1084,1086],{"class":54,"line":383},[52,1085,418],{"class":343},[52,1087,421],{"class":339},[14,1089,1090,1091,1094],{},"And update test files to use ",[49,1092,1093],{},"~~/server"," for server imports:",[42,1096,1098],{"className":319,"code":1097,"language":321,"meta":47,"style":47},"// Old\nimport { something } from '~/server/utils'\n\n// New\nimport { something } from '~~/server/utils'\n",[49,1099,1100,1105,1123,1127,1132],{"__ignoreMap":47},[52,1101,1102],{"class":54,"line":55},[52,1103,1104],{"class":349},"// Old\n",[52,1106,1107,1109,1111,1113,1115,1117,1119,1121],{"class":54,"line":269},[52,1108,913],{"class":328},[52,1110,916],{"class":343},[52,1112,919],{"class":339},[52,1114,922],{"class":343},[52,1116,925],{"class":328},[52,1118,393],{"class":343},[52,1120,930],{"class":396},[52,1122,933],{"class":343},[52,1124,1125],{"class":54,"line":353},[52,1126,805],{"emptyLinePlaceholder":804},[52,1128,1129],{"class":54,"line":359},[52,1130,1131],{"class":349},"// New\n",[52,1133,1134,1136,1138,1140,1142,1144,1146,1148],{"class":54,"line":365},[52,1135,913],{"class":328},[52,1137,916],{"class":343},[52,1139,919],{"class":339},[52,1141,922],{"class":343},[52,1143,925],{"class":328},[52,1145,393],{"class":343},[52,1147,959],{"class":396},[52,1149,933],{"class":343},[14,1151,1152],{},"After these changes, my Linxz project structure looked like this:",[42,1154,1159],{"className":1155,"code":1157,"language":1158},[1156],"language-text","linxz/\n├── app/\n│ ├── components/\n│ ├── layouts/\n│ ├── pages/\n│ ├── composables/\n│ ├── plugins/\n│ ├── stores/\n│ ├── lib/\n│ └── app.vue\n├── server/\n├── public/\n├── tests/\n├── config/\n├── prisma/\n├── nuxt.config.ts\n└── package.json\n","text",[49,1160,1157],{"__ignoreMap":47},[95,1162,1164],{"id":1163},"_24-nuxt-content-3x-migration","2.4 Nuxt Content 3.x Migration",[14,1166,1167],{},"One of the biggest changes in this upgrade was Nuxt Content jumping from version 2.x to 3.x. This introduced breaking changes in the API, particularly for data collections.",[14,1169,1170],{},[67,1171,1172,1173,1176],{},"The main breaking change: ",[49,1174,1175],{},".path()"," no longer works for data collections",[14,1178,1179],{},"In Nuxt Content 2.x, you could query data collections like this:",[42,1181,1183],{"className":319,"code":1182,"language":321,"meta":47,"style":47},"const { data } = await useAsyncData('links', async () => {\n return await queryCollection('data')\n .path('/link-sets')\n .first()\n})\n",[49,1184,1185,1228,1249,1268,1278],{"__ignoreMap":47},[52,1186,1187,1190,1192,1195,1197,1200,1203,1206,1208,1210,1213,1215,1217,1220,1223,1226],{"class":54,"line":55},[52,1188,1189],{"class":583},"const",[52,1191,916],{"class":343},[52,1193,1194],{"class":339}," data ",[52,1196,418],{"class":343},[52,1198,1199],{"class":343}," =",[52,1201,1202],{"class":328}," await",[52,1204,1205],{"class":335}," useAsyncData",[52,1207,340],{"class":339},[52,1209,400],{"class":343},[52,1211,1212],{"class":396},"links",[52,1214,400],{"class":343},[52,1216,403],{"class":343},[52,1218,1219],{"class":583}," async",[52,1221,1222],{"class":343}," ()",[52,1224,1225],{"class":583}," =>",[52,1227,591],{"class":343},[52,1229,1230,1233,1235,1238,1240,1242,1245,1247],{"class":54,"line":269},[52,1231,1232],{"class":328}," return",[52,1234,1202],{"class":328},[52,1236,1237],{"class":335}," queryCollection",[52,1239,340],{"class":386},[52,1241,400],{"class":343},[52,1243,1244],{"class":396},"data",[52,1246,400],{"class":343},[52,1248,421],{"class":386},[52,1250,1251,1254,1257,1259,1261,1264,1266],{"class":54,"line":353},[52,1252,1253],{"class":343}," .",[52,1255,1256],{"class":335},"path",[52,1258,340],{"class":386},[52,1260,400],{"class":343},[52,1262,1263],{"class":396},"/link-sets",[52,1265,400],{"class":343},[52,1267,421],{"class":386},[52,1269,1270,1272,1275],{"class":54,"line":359},[52,1271,1253],{"class":343},[52,1273,1274],{"class":335},"first",[52,1276,1277],{"class":386},"()\n",[52,1279,1280,1282],{"class":54,"line":365},[52,1281,418],{"class":343},[52,1283,421],{"class":339},[14,1285,1286,1287,1289,1290,1293],{},"In Nuxt Content 3.x, ",[49,1288,1175],{}," doesn't work for data collections anymore. Instead, you need to use ",[49,1291,1292],{},".all()"," and filter manually:",[42,1295,1297],{"className":319,"code":1296,"language":321,"meta":47,"style":47},"const { data } = await useAsyncData('links', async () => {\n const allData = await queryCollection('data')\n .all()\n const doc = allData.find(item => \n item._path === '/link-sets' || \n item._id === 'link-sets'\n )\n return doc\n})\n",[49,1298,1299,1333,1357,1366,1393,1417,1435,1440,1447],{"__ignoreMap":47},[52,1300,1301,1303,1305,1307,1309,1311,1313,1315,1317,1319,1321,1323,1325,1327,1329,1331],{"class":54,"line":55},[52,1302,1189],{"class":583},[52,1304,916],{"class":343},[52,1306,1194],{"class":339},[52,1308,418],{"class":343},[52,1310,1199],{"class":343},[52,1312,1202],{"class":328},[52,1314,1205],{"class":335},[52,1316,340],{"class":339},[52,1318,400],{"class":343},[52,1320,1212],{"class":396},[52,1322,400],{"class":343},[52,1324,403],{"class":343},[52,1326,1219],{"class":583},[52,1328,1222],{"class":343},[52,1330,1225],{"class":583},[52,1332,591],{"class":343},[52,1334,1335,1338,1341,1343,1345,1347,1349,1351,1353,1355],{"class":54,"line":269},[52,1336,1337],{"class":583}," const",[52,1339,1340],{"class":339}," allData",[52,1342,1199],{"class":343},[52,1344,1202],{"class":328},[52,1346,1237],{"class":335},[52,1348,340],{"class":386},[52,1350,400],{"class":343},[52,1352,1244],{"class":396},[52,1354,400],{"class":343},[52,1356,421],{"class":386},[52,1358,1359,1361,1364],{"class":54,"line":353},[52,1360,1253],{"class":343},[52,1362,1363],{"class":335},"all",[52,1365,1277],{"class":386},[52,1367,1368,1370,1373,1375,1377,1379,1382,1384,1388,1390],{"class":54,"line":359},[52,1369,1337],{"class":583},[52,1371,1372],{"class":339}," doc",[52,1374,1199],{"class":343},[52,1376,1340],{"class":339},[52,1378,633],{"class":343},[52,1380,1381],{"class":335},"find",[52,1383,340],{"class":386},[52,1385,1387],{"class":1386},"sLFUT","item",[52,1389,1225],{"class":583},[52,1391,1392],{"class":386}," \n",[52,1394,1395,1398,1400,1403,1406,1408,1410,1412,1415],{"class":54,"line":365},[52,1396,1397],{"class":339}," item",[52,1399,633],{"class":343},[52,1401,1402],{"class":339},"_path",[52,1404,1405],{"class":343}," ===",[52,1407,393],{"class":343},[52,1409,1263],{"class":396},[52,1411,400],{"class":343},[52,1413,1414],{"class":343}," ||",[52,1416,1392],{"class":386},[52,1418,1419,1421,1423,1426,1428,1430,1433],{"class":54,"line":371},[52,1420,1397],{"class":339},[52,1422,633],{"class":343},[52,1424,1425],{"class":339},"_id",[52,1427,1405],{"class":343},[52,1429,393],{"class":343},[52,1431,1432],{"class":396},"link-sets",[52,1434,933],{"class":343},[52,1436,1437],{"class":54,"line":377},[52,1438,1439],{"class":386}," )\n",[52,1441,1442,1444],{"class":54,"line":383},[52,1443,1232],{"class":328},[52,1445,1446],{"class":339}," doc\n",[52,1448,1449,1451],{"class":54,"line":409},[52,1450,418],{"class":343},[52,1452,421],{"class":339},[14,1454,1455],{},"This affected my Links and Projects pages, which I'll discuss in more detail in the Challenges section.",[27,1457,1459],{"id":1458},"_3-challenges-solutions","3. Challenges & Solutions",[14,1461,1462],{},"No upgrade is ever completely smooth, and moving from Nuxt 3 to Nuxt 4 was no exception. Here are the main challenges I encountered during the process—and how I solved them:",[95,1464,1466],{"id":1465},"_31-typescript-configuration-errors","3.1 TypeScript Configuration Errors",[14,1468,1469,1472,1474,1475,1477],{},[67,1470,1471],{},"Problem:",[35,1473],{},"\nAfter updating to Nuxt 4, TypeScript complained about ",[49,1476,632],{}," not being found:",[42,1479,1482],{"className":1480,"code":1481,"language":1158},[1156],"Cannot find name 'defineNuxtConfig'. Did you mean 'defineNitroConfig'?\n",[49,1483,1481],{"__ignoreMap":47},[14,1485,1486,1489,1491,1492,390],{},[67,1487,1488],{},"Solution:",[35,1490],{},"\nAdd a TypeScript reference directive at the top of your ",[49,1493,315],{},[42,1495,1497],{"className":319,"code":1496,"language":321,"meta":47,"style":47},"/// \u003Creference types=\"nuxt\" />\nexport default defineNuxtConfig({\n // ... your config\n})\n",[49,1498,1499,1519,1531,1535],{"__ignoreMap":47},[52,1500,1501,1503,1505,1507,1509,1511,1513,1515,1517],{"class":54,"line":55},[52,1502,506],{"class":349},[52,1504,509],{"class":328},[52,1506,513],{"class":512},[52,1508,517],{"class":516},[52,1510,520],{"class":328},[52,1512,523],{"class":328},[52,1514,104],{"class":526},[52,1516,523],{"class":328},[52,1518,531],{"class":328},[52,1520,1521,1523,1525,1527,1529],{"class":54,"line":269},[52,1522,329],{"class":328},[52,1524,332],{"class":328},[52,1526,336],{"class":335},[52,1528,340],{"class":339},[52,1530,344],{"class":343},[52,1532,1533],{"class":54,"line":353},[52,1534,548],{"class":349},[52,1536,1537,1539],{"class":54,"line":359},[52,1538,418],{"class":343},[52,1540,421],{"class":339},[14,1542,557,1543,561,1545,390],{},[49,1544,560],{},[49,1546,564],{},[42,1548,1549],{"className":567,"code":568,"language":569,"meta":47,"style":47},[49,1550,1551,1555,1567,1587,1591],{"__ignoreMap":47},[52,1552,1553],{"class":54,"line":55},[52,1554,344],{"class":343},[52,1556,1557,1559,1561,1563,1565],{"class":54,"line":269},[52,1558,580],{"class":343},[52,1560,584],{"class":583},[52,1562,523],{"class":343},[52,1564,390],{"class":343},[52,1566,591],{"class":343},[52,1568,1569,1571,1573,1575,1577,1579,1581,1583,1585],{"class":54,"line":353},[52,1570,596],{"class":343},[52,1572,600],{"class":599},[52,1574,523],{"class":343},[52,1576,390],{"class":343},[52,1578,607],{"class":343},[52,1580,523],{"class":343},[52,1582,104],{"class":396},[52,1584,523],{"class":343},[52,1586,616],{"class":343},[52,1588,1589],{"class":54,"line":359},[52,1590,621],{"class":343},[52,1592,1593],{"class":54,"line":365},[52,1594,626],{"class":343},[14,1596,1597],{},"This ensures TypeScript recognizes Nuxt's global types. The triple-slash directive is particularly important and should be placed at the very top of your config file.",[95,1599,1601],{"id":1600},"_32-baseurl-for-github-pages-windows","3.2 baseURL for GitHub Pages (Windows)",[14,1603,1604,1606,1608,1609,1612],{},[67,1605,1471],{},[35,1607],{},"\nFor the web business card project, I needed to set a ",[49,1610,1611],{},"baseURL"," for GitHub Pages deployment. The standard approach of setting environment variables doesn't work well on Windows PowerShell:",[42,1614,1616],{"className":44,"code":1615,"language":46,"meta":47,"style":47},"# This doesn't work on Windows PowerShell\nBASE_URL=/kunstkanne/ npm run generate\n",[49,1617,1618,1623],{"__ignoreMap":47},[52,1619,1620],{"class":54,"line":55},[52,1621,1622],{},"# This doesn't work on Windows PowerShell\n",[52,1624,1625],{"class":54,"line":269},[52,1626,1627],{},"BASE_URL=/kunstkanne/ npm run generate\n",[14,1629,1630,1633,1635],{},[67,1631,1632],{},"Solution (or rather, workaround):",[35,1634],{},"\nI ended up not deploying the web business card to GitHub Pages anymore. This is a workaround rather than a proper solution, but it was the path of least resistance for this particular project.",[14,1637,1638],{},"If you need to solve this properly, you could:",[764,1640,1641,1648,1657],{},[660,1642,1643,1644,1647],{},"Use ",[49,1645,1646],{},"cross-env"," to set environment variables cross-platform",[660,1649,1650,1651,1653,1654,1656],{},"Detect the npm script in ",[49,1652,315],{}," and set ",[49,1655,1611],{}," accordingly",[660,1658,1659,1660,1663],{},"Use a ",[49,1661,1662],{},".env"," file (though this affects local development too)",[14,1665,1666],{},"For now, I've documented this as an unresolved issue that I worked around rather than solved.",[95,1668,1670],{"id":1669},"_33-nuxt-content-3x-api-changes","3.3 Nuxt Content 3.x API Changes",[14,1672,1673,1675,1677],{},[67,1674,1471],{},[35,1676],{},"\nAfter upgrading to Nuxt Content 3.x, my Links and Projects pages stopped showing data. The error in the console was:",[42,1679,1682],{"className":1680,"code":1681,"language":1158},[1156],"no such column: \"path\"\n",[49,1683,1681],{"__ignoreMap":47},[14,1685,1686,1687,1689],{},"The issue was that ",[49,1688,1175],{}," no longer works for data collections in Nuxt Content 3.x.",[14,1691,1692,1694,1696,1697,1699,1700,1293],{},[67,1693,1488],{},[35,1695],{},"\nReplace ",[49,1698,1175],{}," with ",[49,1701,1292],{},[42,1703,1707],{"className":1704,"code":1705,"language":1706,"meta":47,"style":47},"language-vue shiki shiki-themes material-theme","\u003Cscript setup>\nconst { data: result } = await useAsyncData(\n 'link-sets',\n async () => {\n const allData = await queryCollection('data')\n .all()\n const doc = allData.find(item => \n item._path === '/link-sets' || \n item._id === 'link-sets' ||\n item.path === '/link-sets'\n )\n return doc || allData[0]\n }\n)\nconst linkSets = result.value?.['link-sets'] || result.value\n\u003C/script>\n","vue",[49,1708,1709,1722,1747,1758,1769,1792,1801,1823,1844,1863,1879,1885,1906,1911,1916,1958],{"__ignoreMap":47},[52,1710,1711,1713,1716,1719],{"class":54,"line":55},[52,1712,509],{"class":343},[52,1714,1715],{"class":386},"script",[52,1717,1718],{"class":583}," setup",[52,1720,1721],{"class":343},">\n",[52,1723,1724,1726,1728,1731,1733,1736,1738,1740,1742,1744],{"class":54,"line":269},[52,1725,1189],{"class":583},[52,1727,916],{"class":343},[52,1729,1730],{"class":386}," data",[52,1732,390],{"class":343},[52,1734,1735],{"class":339}," result ",[52,1737,418],{"class":343},[52,1739,1199],{"class":343},[52,1741,1202],{"class":328},[52,1743,1205],{"class":335},[52,1745,1746],{"class":339},"(\n",[52,1748,1749,1752,1754,1756],{"class":54,"line":353},[52,1750,1751],{"class":343}," '",[52,1753,1432],{"class":396},[52,1755,400],{"class":343},[52,1757,869],{"class":343},[52,1759,1760,1763,1765,1767],{"class":54,"line":359},[52,1761,1762],{"class":583}," async",[52,1764,1222],{"class":343},[52,1766,1225],{"class":583},[52,1768,591],{"class":343},[52,1770,1771,1774,1776,1778,1780,1782,1784,1786,1788,1790],{"class":54,"line":365},[52,1772,1773],{"class":583}," const",[52,1775,1340],{"class":339},[52,1777,1199],{"class":343},[52,1779,1202],{"class":328},[52,1781,1237],{"class":335},[52,1783,340],{"class":386},[52,1785,400],{"class":343},[52,1787,1244],{"class":396},[52,1789,400],{"class":343},[52,1791,421],{"class":386},[52,1793,1794,1797,1799],{"class":54,"line":371},[52,1795,1796],{"class":343}," .",[52,1798,1363],{"class":335},[52,1800,1277],{"class":386},[52,1802,1803,1805,1807,1809,1811,1813,1815,1817,1819,1821],{"class":54,"line":377},[52,1804,1773],{"class":583},[52,1806,1372],{"class":339},[52,1808,1199],{"class":343},[52,1810,1340],{"class":339},[52,1812,633],{"class":343},[52,1814,1381],{"class":335},[52,1816,340],{"class":386},[52,1818,1387],{"class":1386},[52,1820,1225],{"class":583},[52,1822,1392],{"class":386},[52,1824,1825,1828,1830,1832,1834,1836,1838,1840,1842],{"class":54,"line":383},[52,1826,1827],{"class":339}," item",[52,1829,633],{"class":343},[52,1831,1402],{"class":339},[52,1833,1405],{"class":343},[52,1835,393],{"class":343},[52,1837,1263],{"class":396},[52,1839,400],{"class":343},[52,1841,1414],{"class":343},[52,1843,1392],{"class":386},[52,1845,1846,1848,1850,1852,1854,1856,1858,1860],{"class":54,"line":409},[52,1847,1827],{"class":339},[52,1849,633],{"class":343},[52,1851,1425],{"class":339},[52,1853,1405],{"class":343},[52,1855,393],{"class":343},[52,1857,1432],{"class":396},[52,1859,400],{"class":343},[52,1861,1862],{"class":343}," ||\n",[52,1864,1865,1867,1869,1871,1873,1875,1877],{"class":54,"line":415},[52,1866,1827],{"class":339},[52,1868,633],{"class":343},[52,1870,1256],{"class":339},[52,1872,1405],{"class":343},[52,1874,393],{"class":343},[52,1876,1263],{"class":396},[52,1878,933],{"class":343},[52,1880,1882],{"class":54,"line":1881},11,[52,1883,1884],{"class":386}," )\n",[52,1886,1888,1891,1893,1895,1897,1900,1904],{"class":54,"line":1887},12,[52,1889,1890],{"class":328}," return",[52,1892,1372],{"class":339},[52,1894,1414],{"class":343},[52,1896,1340],{"class":339},[52,1898,1899],{"class":386},"[",[52,1901,1903],{"class":1902},"sx098","0",[52,1905,616],{"class":386},[52,1907,1909],{"class":54,"line":1908},13,[52,1910,621],{"class":343},[52,1912,1914],{"class":54,"line":1913},14,[52,1915,421],{"class":339},[52,1917,1919,1921,1924,1926,1929,1931,1934,1937,1939,1941,1943,1945,1948,1951,1953,1955],{"class":54,"line":1918},15,[52,1920,1189],{"class":583},[52,1922,1923],{"class":339}," linkSets ",[52,1925,520],{"class":343},[52,1927,1928],{"class":339}," result",[52,1930,633],{"class":343},[52,1932,1933],{"class":339},"value",[52,1935,1936],{"class":343},"?.",[52,1938,1899],{"class":339},[52,1940,400],{"class":343},[52,1942,1432],{"class":396},[52,1944,400],{"class":343},[52,1946,1947],{"class":339},"] ",[52,1949,1950],{"class":343},"||",[52,1952,1928],{"class":339},[52,1954,633],{"class":343},[52,1956,1957],{"class":339},"value\n",[52,1959,1961,1964,1966],{"class":54,"line":1960},16,[52,1962,1963],{"class":343},"\u003C/",[52,1965,1715],{"class":386},[52,1967,1721],{"class":343},[14,1969,1970],{},"This approach loads all data from the collection and then filters it in JavaScript, which is less efficient but works with the new API.",[95,1972,1974],{"id":1973},"_34-open-graph-meta-tags-from-frontmatter","3.4 Open Graph Meta Tags from Frontmatter",[14,1976,1977,1979,1981,1982,1985],{},[67,1978,1471],{},[35,1980],{},"\nAfter the upgrade, Open Graph meta tags from the frontmatter of blog posts were no longer being processed automatically. The ",[49,1983,1984],{},"head"," section in the frontmatter was being ignored.",[14,1987,1988,1990,1992,1993,1995,1996,121,1999,390],{},[67,1989,1488],{},[35,1991],{},"\nManually process the ",[49,1994,1984],{}," data from frontmatter and set meta tags using ",[49,1997,1998],{},"useSeoMeta()",[49,2000,2001],{},"useHead()",[42,2003,2005],{"className":1704,"code":2004,"language":1706,"meta":47,"style":47},"\u003Cscript setup>\nconst route = useRoute()\nconst { data: doc } = await useAsyncData(\n `blog-${route.path}`,\n async () => {\n try {\n const article = await queryCollection('blog')\n .path(route.path)\n .first()\n return article\n } catch {\n return null\n }\n }\n)\n\nif (doc.value?.head) {\n const head = doc.value.head\n const config = useRuntimeConfig()\n const baseURL = config.public.baseURL || \n config.app?.baseURL || \n 'https://mjkatgithub.github.io'\n\n // Extract meta tags\n const metaTags = head.meta || []\n const ogTags = {}\n const twitterTags = {}\n const otherMeta = []\n\n metaTags.forEach((tag) => {\n const tagName = tag.property || tag.name\n \n if (tagName?.startsWith('og:')) {\n const key = tagName.replace('og:', '')\n ogTags[key] = tag.content\n } else if (tagName?.startsWith('twitter:')) {\n const key = tagName.replace('twitter:', '')\n twitterTags[key] = tag.content\n } else if (tagName) {\n const metaTag = tag.property \n ? { property: tag.property, content: tag.content }\n : { name: tag.name, content: tag.content }\n otherMeta.push(metaTag)\n }\n })\n\n // Set SEO meta tags\n useSeoMeta({\n title: doc.value.title || ogTags.title || '',\n description: doc.value.description || \n ogTags.description || '',\n ogTitle: ogTags.title || doc.value.title || '',\n ogDescription: ogTags.description || \n doc.value.description || '',\n ogImage: ogTags.image || '',\n ogUrl: ogTags.url || `${baseURL}${route.path}`,\n twitterTitle: twitterTags.title || \n ogTags.title || \n doc.value.title || '',\n twitterDescription: twitterTags.description || \n ogTags.description || \n doc.value.description || '',\n twitterImage: twitterTags.image || '',\n twitterCard: twitterTags.card || 'summary'\n })\n\n // Set additional meta tags and HTML attributes\n useHead({\n htmlAttrs: head.htmlAttrs || {},\n link: head.link || [],\n meta: otherMeta\n })\n}\n\u003C/script>\n",[49,2006,2007,2017,2031,2054,2077,2087,2094,2119,2136,2144,2152,2162,2169,2173,2177,2181,2185,2205,2226,2241,2266,2284,2295,2300,2306,2328,2341,2353,2365,2370,2394,2421,2427,2458,2490,2512,2544,2573,2593,2611,2629,2665,2699,2717,2722,2730,2735,2741,2751,2784,2807,2823,2855,2873,2893,2914,2949,2967,2981,3001,3019,3033,3053,3073,3097,3104,3109,3115,3125,3145,3167,3178,3185,3190],{"__ignoreMap":47},[52,2008,2009,2011,2013,2015],{"class":54,"line":55},[52,2010,509],{"class":343},[52,2012,1715],{"class":386},[52,2014,1718],{"class":583},[52,2016,1721],{"class":343},[52,2018,2019,2021,2024,2026,2029],{"class":54,"line":269},[52,2020,1189],{"class":583},[52,2022,2023],{"class":339}," route ",[52,2025,520],{"class":343},[52,2027,2028],{"class":335}," useRoute",[52,2030,1277],{"class":339},[52,2032,2033,2035,2037,2039,2041,2044,2046,2048,2050,2052],{"class":54,"line":353},[52,2034,1189],{"class":583},[52,2036,916],{"class":343},[52,2038,1730],{"class":386},[52,2040,390],{"class":343},[52,2042,2043],{"class":339}," doc ",[52,2045,418],{"class":343},[52,2047,1199],{"class":343},[52,2049,1202],{"class":328},[52,2051,1205],{"class":335},[52,2053,1746],{"class":339},[52,2055,2056,2059,2062,2065,2068,2070,2072,2075],{"class":54,"line":359},[52,2057,2058],{"class":343}," `",[52,2060,2061],{"class":396},"blog-",[52,2063,2064],{"class":343},"${",[52,2066,2067],{"class":339},"route",[52,2069,633],{"class":343},[52,2071,1256],{"class":339},[52,2073,2074],{"class":343},"}`",[52,2076,869],{"class":343},[52,2078,2079,2081,2083,2085],{"class":54,"line":365},[52,2080,1762],{"class":583},[52,2082,1222],{"class":343},[52,2084,1225],{"class":583},[52,2086,591],{"class":343},[52,2088,2089,2092],{"class":54,"line":371},[52,2090,2091],{"class":328}," try",[52,2093,591],{"class":343},[52,2095,2096,2099,2102,2104,2106,2108,2110,2112,2115,2117],{"class":54,"line":377},[52,2097,2098],{"class":583}," const",[52,2100,2101],{"class":339}," article",[52,2103,1199],{"class":343},[52,2105,1202],{"class":328},[52,2107,1237],{"class":335},[52,2109,340],{"class":386},[52,2111,400],{"class":343},[52,2113,2114],{"class":396},"blog",[52,2116,400],{"class":343},[52,2118,421],{"class":386},[52,2120,2121,2124,2126,2128,2130,2132,2134],{"class":54,"line":383},[52,2122,2123],{"class":343}," .",[52,2125,1256],{"class":335},[52,2127,340],{"class":386},[52,2129,2067],{"class":339},[52,2131,633],{"class":343},[52,2133,1256],{"class":339},[52,2135,421],{"class":386},[52,2137,2138,2140,2142],{"class":54,"line":409},[52,2139,2123],{"class":343},[52,2141,1274],{"class":335},[52,2143,1277],{"class":386},[52,2145,2146,2149],{"class":54,"line":415},[52,2147,2148],{"class":328}," return",[52,2150,2151],{"class":339}," article\n",[52,2153,2154,2157,2160],{"class":54,"line":1881},[52,2155,2156],{"class":343}," }",[52,2158,2159],{"class":328}," catch",[52,2161,591],{"class":343},[52,2163,2164,2166],{"class":54,"line":1887},[52,2165,2148],{"class":328},[52,2167,2168],{"class":343}," null\n",[52,2170,2171],{"class":54,"line":1908},[52,2172,1077],{"class":343},[52,2174,2175],{"class":54,"line":1913},[52,2176,621],{"class":343},[52,2178,2179],{"class":54,"line":1918},[52,2180,421],{"class":339},[52,2182,2183],{"class":54,"line":1960},[52,2184,805],{"emptyLinePlaceholder":804},[52,2186,2188,2191,2194,2196,2198,2200,2203],{"class":54,"line":2187},17,[52,2189,2190],{"class":328},"if",[52,2192,2193],{"class":339}," (doc",[52,2195,633],{"class":343},[52,2197,1933],{"class":339},[52,2199,1936],{"class":343},[52,2201,2202],{"class":339},"head) ",[52,2204,344],{"class":343},[52,2206,2208,2210,2213,2215,2217,2219,2221,2223],{"class":54,"line":2207},18,[52,2209,1337],{"class":583},[52,2211,2212],{"class":339}," head",[52,2214,1199],{"class":343},[52,2216,1372],{"class":339},[52,2218,633],{"class":343},[52,2220,1933],{"class":339},[52,2222,633],{"class":343},[52,2224,2225],{"class":339},"head\n",[52,2227,2229,2231,2234,2236,2239],{"class":54,"line":2228},19,[52,2230,1337],{"class":583},[52,2232,2233],{"class":339}," config",[52,2235,1199],{"class":343},[52,2237,2238],{"class":335}," useRuntimeConfig",[52,2240,1277],{"class":386},[52,2242,2244,2246,2249,2251,2253,2255,2258,2260,2262,2264],{"class":54,"line":2243},20,[52,2245,1337],{"class":583},[52,2247,2248],{"class":339}," baseURL",[52,2250,1199],{"class":343},[52,2252,2233],{"class":339},[52,2254,633],{"class":343},[52,2256,2257],{"class":339},"public",[52,2259,633],{"class":343},[52,2261,1611],{"class":339},[52,2263,1414],{"class":343},[52,2265,1392],{"class":386},[52,2267,2269,2272,2274,2276,2278,2280,2282],{"class":54,"line":2268},21,[52,2270,2271],{"class":339}," config",[52,2273,633],{"class":343},[52,2275,864],{"class":339},[52,2277,1936],{"class":343},[52,2279,1611],{"class":339},[52,2281,1414],{"class":343},[52,2283,1392],{"class":386},[52,2285,2287,2290,2293],{"class":54,"line":2286},22,[52,2288,2289],{"class":343}," '",[52,2291,2292],{"class":396},"https://mjkatgithub.github.io",[52,2294,933],{"class":343},[52,2296,2298],{"class":54,"line":2297},23,[52,2299,805],{"emptyLinePlaceholder":804},[52,2301,2303],{"class":54,"line":2302},24,[52,2304,2305],{"class":349}," // Extract meta tags\n",[52,2307,2309,2311,2314,2316,2318,2320,2323,2325],{"class":54,"line":2308},25,[52,2310,1337],{"class":583},[52,2312,2313],{"class":339}," metaTags",[52,2315,1199],{"class":343},[52,2317,2212],{"class":339},[52,2319,633],{"class":343},[52,2321,2322],{"class":339},"meta",[52,2324,1414],{"class":343},[52,2326,2327],{"class":386}," []\n",[52,2329,2331,2333,2336,2338],{"class":54,"line":2330},26,[52,2332,1337],{"class":583},[52,2334,2335],{"class":339}," ogTags",[52,2337,1199],{"class":343},[52,2339,2340],{"class":343}," {}\n",[52,2342,2344,2346,2349,2351],{"class":54,"line":2343},27,[52,2345,1337],{"class":583},[52,2347,2348],{"class":339}," twitterTags",[52,2350,1199],{"class":343},[52,2352,2340],{"class":343},[52,2354,2356,2358,2361,2363],{"class":54,"line":2355},28,[52,2357,1337],{"class":583},[52,2359,2360],{"class":339}," otherMeta",[52,2362,1199],{"class":343},[52,2364,2327],{"class":386},[52,2366,2368],{"class":54,"line":2367},29,[52,2369,805],{"emptyLinePlaceholder":804},[52,2371,2373,2376,2378,2381,2383,2385,2388,2390,2392],{"class":54,"line":2372},30,[52,2374,2375],{"class":339}," metaTags",[52,2377,633],{"class":343},[52,2379,2380],{"class":335},"forEach",[52,2382,340],{"class":386},[52,2384,340],{"class":343},[52,2386,2387],{"class":1386},"tag",[52,2389,1040],{"class":343},[52,2391,1225],{"class":583},[52,2393,591],{"class":343},[52,2395,2397,2399,2402,2404,2407,2409,2412,2414,2416,2418],{"class":54,"line":2396},31,[52,2398,1773],{"class":583},[52,2400,2401],{"class":339}," tagName",[52,2403,1199],{"class":343},[52,2405,2406],{"class":339}," tag",[52,2408,633],{"class":343},[52,2410,2411],{"class":339},"property",[52,2413,1414],{"class":343},[52,2415,2406],{"class":339},[52,2417,633],{"class":343},[52,2419,2420],{"class":339},"name\n",[52,2422,2424],{"class":54,"line":2423},32,[52,2425,2426],{"class":386}," \n",[52,2428,2430,2433,2436,2439,2441,2444,2446,2448,2451,2453,2456],{"class":54,"line":2429},33,[52,2431,2432],{"class":328}," if",[52,2434,2435],{"class":386}," (",[52,2437,2438],{"class":339},"tagName",[52,2440,1936],{"class":343},[52,2442,2443],{"class":335},"startsWith",[52,2445,340],{"class":386},[52,2447,400],{"class":343},[52,2449,2450],{"class":396},"og:",[52,2452,400],{"class":343},[52,2454,2455],{"class":386},")) ",[52,2457,344],{"class":343},[52,2459,2461,2463,2466,2468,2470,2472,2475,2477,2479,2481,2483,2485,2488],{"class":54,"line":2460},34,[52,2462,2098],{"class":583},[52,2464,2465],{"class":339}," key",[52,2467,1199],{"class":343},[52,2469,2401],{"class":339},[52,2471,633],{"class":343},[52,2473,2474],{"class":335},"replace",[52,2476,340],{"class":386},[52,2478,400],{"class":343},[52,2480,2450],{"class":396},[52,2482,400],{"class":343},[52,2484,403],{"class":343},[52,2486,2487],{"class":343}," ''",[52,2489,421],{"class":386},[52,2491,2493,2496,2498,2501,2503,2505,2507,2509],{"class":54,"line":2492},35,[52,2494,2495],{"class":339}," ogTags",[52,2497,1899],{"class":386},[52,2499,2500],{"class":339},"key",[52,2502,1947],{"class":386},[52,2504,520],{"class":343},[52,2506,2406],{"class":339},[52,2508,633],{"class":343},[52,2510,2511],{"class":339},"content\n",[52,2513,2515,2517,2520,2523,2525,2527,2529,2531,2533,2535,2538,2540,2542],{"class":54,"line":2514},36,[52,2516,2156],{"class":343},[52,2518,2519],{"class":328}," else",[52,2521,2522],{"class":328}," if",[52,2524,2435],{"class":386},[52,2526,2438],{"class":339},[52,2528,1936],{"class":343},[52,2530,2443],{"class":335},[52,2532,340],{"class":386},[52,2534,400],{"class":343},[52,2536,2537],{"class":396},"twitter:",[52,2539,400],{"class":343},[52,2541,2455],{"class":386},[52,2543,344],{"class":343},[52,2545,2547,2549,2551,2553,2555,2557,2559,2561,2563,2565,2567,2569,2571],{"class":54,"line":2546},37,[52,2548,2098],{"class":583},[52,2550,2465],{"class":339},[52,2552,1199],{"class":343},[52,2554,2401],{"class":339},[52,2556,633],{"class":343},[52,2558,2474],{"class":335},[52,2560,340],{"class":386},[52,2562,400],{"class":343},[52,2564,2537],{"class":396},[52,2566,400],{"class":343},[52,2568,403],{"class":343},[52,2570,2487],{"class":343},[52,2572,421],{"class":386},[52,2574,2576,2579,2581,2583,2585,2587,2589,2591],{"class":54,"line":2575},38,[52,2577,2578],{"class":339}," twitterTags",[52,2580,1899],{"class":386},[52,2582,2500],{"class":339},[52,2584,1947],{"class":386},[52,2586,520],{"class":343},[52,2588,2406],{"class":339},[52,2590,633],{"class":343},[52,2592,2511],{"class":339},[52,2594,2596,2598,2600,2602,2604,2606,2609],{"class":54,"line":2595},39,[52,2597,2156],{"class":343},[52,2599,2519],{"class":328},[52,2601,2522],{"class":328},[52,2603,2435],{"class":386},[52,2605,2438],{"class":339},[52,2607,2608],{"class":386},") ",[52,2610,344],{"class":343},[52,2612,2614,2616,2619,2621,2623,2625,2627],{"class":54,"line":2613},40,[52,2615,2098],{"class":583},[52,2617,2618],{"class":339}," metaTag",[52,2620,1199],{"class":343},[52,2622,2406],{"class":339},[52,2624,633],{"class":343},[52,2626,2411],{"class":339},[52,2628,1392],{"class":386},[52,2630,2632,2635,2637,2640,2642,2644,2646,2648,2650,2653,2655,2657,2659,2662],{"class":54,"line":2631},41,[52,2633,2634],{"class":343}," ?",[52,2636,916],{"class":343},[52,2638,2639],{"class":386}," property",[52,2641,390],{"class":343},[52,2643,2406],{"class":339},[52,2645,633],{"class":343},[52,2647,2411],{"class":339},[52,2649,403],{"class":343},[52,2651,2652],{"class":386}," content",[52,2654,390],{"class":343},[52,2656,2406],{"class":339},[52,2658,633],{"class":343},[52,2660,2661],{"class":339},"content",[52,2663,2664],{"class":343}," }\n",[52,2666,2668,2671,2673,2676,2678,2680,2682,2685,2687,2689,2691,2693,2695,2697],{"class":54,"line":2667},42,[52,2669,2670],{"class":343}," :",[52,2672,916],{"class":343},[52,2674,2675],{"class":386}," name",[52,2677,390],{"class":343},[52,2679,2406],{"class":339},[52,2681,633],{"class":343},[52,2683,2684],{"class":339},"name",[52,2686,403],{"class":343},[52,2688,2652],{"class":386},[52,2690,390],{"class":343},[52,2692,2406],{"class":339},[52,2694,633],{"class":343},[52,2696,2661],{"class":339},[52,2698,2664],{"class":343},[52,2700,2702,2705,2707,2710,2712,2715],{"class":54,"line":2701},43,[52,2703,2704],{"class":339}," otherMeta",[52,2706,633],{"class":343},[52,2708,2709],{"class":335},"push",[52,2711,340],{"class":386},[52,2713,2714],{"class":339},"metaTag",[52,2716,421],{"class":386},[52,2718,2720],{"class":54,"line":2719},44,[52,2721,1077],{"class":343},[52,2723,2725,2728],{"class":54,"line":2724},45,[52,2726,2727],{"class":343}," }",[52,2729,421],{"class":386},[52,2731,2733],{"class":54,"line":2732},46,[52,2734,805],{"emptyLinePlaceholder":804},[52,2736,2738],{"class":54,"line":2737},47,[52,2739,2740],{"class":349}," // Set SEO meta tags\n",[52,2742,2744,2747,2749],{"class":54,"line":2743},48,[52,2745,2746],{"class":335}," useSeoMeta",[52,2748,340],{"class":386},[52,2750,344],{"class":343},[52,2752,2754,2757,2759,2761,2763,2765,2767,2770,2772,2774,2776,2778,2780,2782],{"class":54,"line":2753},49,[52,2755,2756],{"class":386}," title",[52,2758,390],{"class":343},[52,2760,1372],{"class":339},[52,2762,633],{"class":343},[52,2764,1933],{"class":339},[52,2766,633],{"class":343},[52,2768,2769],{"class":339},"title",[52,2771,1414],{"class":343},[52,2773,2335],{"class":339},[52,2775,633],{"class":343},[52,2777,2769],{"class":339},[52,2779,1414],{"class":343},[52,2781,2487],{"class":343},[52,2783,869],{"class":343},[52,2785,2787,2790,2792,2794,2796,2798,2800,2803,2805],{"class":54,"line":2786},50,[52,2788,2789],{"class":386}," description",[52,2791,390],{"class":343},[52,2793,1372],{"class":339},[52,2795,633],{"class":343},[52,2797,1933],{"class":339},[52,2799,633],{"class":343},[52,2801,2802],{"class":339},"description",[52,2804,1414],{"class":343},[52,2806,1392],{"class":386},[52,2808,2810,2813,2815,2817,2819,2821],{"class":54,"line":2809},51,[52,2811,2812],{"class":339}," ogTags",[52,2814,633],{"class":343},[52,2816,2802],{"class":339},[52,2818,1414],{"class":343},[52,2820,2487],{"class":343},[52,2822,869],{"class":343},[52,2824,2826,2829,2831,2833,2835,2837,2839,2841,2843,2845,2847,2849,2851,2853],{"class":54,"line":2825},52,[52,2827,2828],{"class":386}," ogTitle",[52,2830,390],{"class":343},[52,2832,2335],{"class":339},[52,2834,633],{"class":343},[52,2836,2769],{"class":339},[52,2838,1414],{"class":343},[52,2840,1372],{"class":339},[52,2842,633],{"class":343},[52,2844,1933],{"class":339},[52,2846,633],{"class":343},[52,2848,2769],{"class":339},[52,2850,1414],{"class":343},[52,2852,2487],{"class":343},[52,2854,869],{"class":343},[52,2856,2858,2861,2863,2865,2867,2869,2871],{"class":54,"line":2857},53,[52,2859,2860],{"class":386}," ogDescription",[52,2862,390],{"class":343},[52,2864,2335],{"class":339},[52,2866,633],{"class":343},[52,2868,2802],{"class":339},[52,2870,1414],{"class":343},[52,2872,1392],{"class":386},[52,2874,2876,2879,2881,2883,2885,2887,2889,2891],{"class":54,"line":2875},54,[52,2877,2878],{"class":339}," doc",[52,2880,633],{"class":343},[52,2882,1933],{"class":339},[52,2884,633],{"class":343},[52,2886,2802],{"class":339},[52,2888,1414],{"class":343},[52,2890,2487],{"class":343},[52,2892,869],{"class":343},[52,2894,2896,2899,2901,2903,2905,2908,2910,2912],{"class":54,"line":2895},55,[52,2897,2898],{"class":386}," ogImage",[52,2900,390],{"class":343},[52,2902,2335],{"class":339},[52,2904,633],{"class":343},[52,2906,2907],{"class":339},"image",[52,2909,1414],{"class":343},[52,2911,2487],{"class":343},[52,2913,869],{"class":343},[52,2915,2917,2920,2922,2924,2926,2929,2931,2934,2936,2939,2941,2943,2945,2947],{"class":54,"line":2916},56,[52,2918,2919],{"class":386}," ogUrl",[52,2921,390],{"class":343},[52,2923,2335],{"class":339},[52,2925,633],{"class":343},[52,2927,2928],{"class":339},"url",[52,2930,1414],{"class":343},[52,2932,2933],{"class":343}," `${",[52,2935,1611],{"class":339},[52,2937,2938],{"class":343},"}${",[52,2940,2067],{"class":339},[52,2942,633],{"class":343},[52,2944,1256],{"class":339},[52,2946,2074],{"class":343},[52,2948,869],{"class":343},[52,2950,2952,2955,2957,2959,2961,2963,2965],{"class":54,"line":2951},57,[52,2953,2954],{"class":386}," twitterTitle",[52,2956,390],{"class":343},[52,2958,2348],{"class":339},[52,2960,633],{"class":343},[52,2962,2769],{"class":339},[52,2964,1414],{"class":343},[52,2966,1392],{"class":386},[52,2968,2970,2973,2975,2977,2979],{"class":54,"line":2969},58,[52,2971,2972],{"class":339}," ogTags",[52,2974,633],{"class":343},[52,2976,2769],{"class":339},[52,2978,1414],{"class":343},[52,2980,1392],{"class":386},[52,2982,2984,2987,2989,2991,2993,2995,2997,2999],{"class":54,"line":2983},59,[52,2985,2986],{"class":339}," doc",[52,2988,633],{"class":343},[52,2990,1933],{"class":339},[52,2992,633],{"class":343},[52,2994,2769],{"class":339},[52,2996,1414],{"class":343},[52,2998,2487],{"class":343},[52,3000,869],{"class":343},[52,3002,3004,3007,3009,3011,3013,3015,3017],{"class":54,"line":3003},60,[52,3005,3006],{"class":386}," twitterDescription",[52,3008,390],{"class":343},[52,3010,2348],{"class":339},[52,3012,633],{"class":343},[52,3014,2802],{"class":339},[52,3016,1414],{"class":343},[52,3018,1392],{"class":386},[52,3020,3022,3025,3027,3029,3031],{"class":54,"line":3021},61,[52,3023,3024],{"class":339}," ogTags",[52,3026,633],{"class":343},[52,3028,2802],{"class":339},[52,3030,1414],{"class":343},[52,3032,1392],{"class":386},[52,3034,3036,3039,3041,3043,3045,3047,3049,3051],{"class":54,"line":3035},62,[52,3037,3038],{"class":339}," doc",[52,3040,633],{"class":343},[52,3042,1933],{"class":339},[52,3044,633],{"class":343},[52,3046,2802],{"class":339},[52,3048,1414],{"class":343},[52,3050,2487],{"class":343},[52,3052,869],{"class":343},[52,3054,3056,3059,3061,3063,3065,3067,3069,3071],{"class":54,"line":3055},63,[52,3057,3058],{"class":386}," twitterImage",[52,3060,390],{"class":343},[52,3062,2348],{"class":339},[52,3064,633],{"class":343},[52,3066,2907],{"class":339},[52,3068,1414],{"class":343},[52,3070,2487],{"class":343},[52,3072,869],{"class":343},[52,3074,3076,3079,3081,3083,3085,3088,3090,3092,3095],{"class":54,"line":3075},64,[52,3077,3078],{"class":386}," twitterCard",[52,3080,390],{"class":343},[52,3082,2348],{"class":339},[52,3084,633],{"class":343},[52,3086,3087],{"class":339},"card",[52,3089,1414],{"class":343},[52,3091,393],{"class":343},[52,3093,3094],{"class":396},"summary",[52,3096,933],{"class":343},[52,3098,3100,3102],{"class":54,"line":3099},65,[52,3101,2727],{"class":343},[52,3103,421],{"class":386},[52,3105,3107],{"class":54,"line":3106},66,[52,3108,805],{"emptyLinePlaceholder":804},[52,3110,3112],{"class":54,"line":3111},67,[52,3113,3114],{"class":349}," // Set additional meta tags and HTML attributes\n",[52,3116,3118,3121,3123],{"class":54,"line":3117},68,[52,3119,3120],{"class":335}," useHead",[52,3122,340],{"class":386},[52,3124,344],{"class":343},[52,3126,3128,3131,3133,3135,3137,3140,3142],{"class":54,"line":3127},69,[52,3129,3130],{"class":386}," htmlAttrs",[52,3132,390],{"class":343},[52,3134,2212],{"class":339},[52,3136,633],{"class":343},[52,3138,3139],{"class":339},"htmlAttrs",[52,3141,1414],{"class":343},[52,3143,3144],{"class":343}," {},\n",[52,3146,3148,3151,3153,3155,3157,3160,3162,3165],{"class":54,"line":3147},70,[52,3149,3150],{"class":386}," link",[52,3152,390],{"class":343},[52,3154,2212],{"class":339},[52,3156,633],{"class":343},[52,3158,3159],{"class":339},"link",[52,3161,1414],{"class":343},[52,3163,3164],{"class":386}," []",[52,3166,869],{"class":343},[52,3168,3170,3173,3175],{"class":54,"line":3169},71,[52,3171,3172],{"class":386}," meta",[52,3174,390],{"class":343},[52,3176,3177],{"class":339}," otherMeta\n",[52,3179,3181,3183],{"class":54,"line":3180},72,[52,3182,2727],{"class":343},[52,3184,421],{"class":386},[52,3186,3188],{"class":54,"line":3187},73,[52,3189,626],{"class":343},[52,3191,3193,3195,3197],{"class":54,"line":3192},74,[52,3194,1963],{"class":343},[52,3196,1715],{"class":386},[52,3198,1721],{"class":343},[14,3200,3201],{},"This manually extracts and processes all the meta tags from the frontmatter, ensuring they're properly set in the page head.",[95,3203,3205],{"id":3204},"_35-dark-mode-template-switching-issues","3.5 Dark Mode Template Switching Issues",[14,3207,3208,3210,3212,3213,3216],{},[67,3209,1471],{},[35,3211],{},"\nAfter the upgrade, code boxes in blog articles had poor contrast in dark mode. More importantly, the template wasn't switching between light and dark mode properly—the ",[49,3214,3215],{},"dark:prose-invert"," class wasn't being applied when the mode changed.",[14,3218,3219,3221,3223],{},[67,3220,1488],{},[35,3222],{},"\nI simplified the template by removing the dark mode variant entirely. Instead of trying to make the template switch between light and dark modes, I kept it at a single dark template:",[42,3225,3227],{"className":1704,"code":3226,"language":1706,"meta":47,"style":47},"\u003Ctemplate>\n \u003Carticle class=\"prose\">\n \u003CContentRenderer v-if=\"doc\" :value=\"doc\" />\n \u003C/article>\n\u003C/template>\n",[49,3228,3229,3238,3260,3295,3304],{"__ignoreMap":47},[52,3230,3231,3233,3236],{"class":54,"line":55},[52,3232,509],{"class":343},[52,3234,3235],{"class":386},"template",[52,3237,1721],{"class":343},[52,3239,3240,3243,3246,3249,3251,3253,3256,3258],{"class":54,"line":269},[52,3241,3242],{"class":343}," \u003C",[52,3244,3245],{"class":386},"article",[52,3247,3248],{"class":583}," class",[52,3250,520],{"class":343},[52,3252,523],{"class":343},[52,3254,3255],{"class":396},"prose",[52,3257,523],{"class":343},[52,3259,1721],{"class":343},[52,3261,3262,3265,3268,3271,3273,3275,3278,3280,3283,3285,3287,3289,3291,3293],{"class":54,"line":353},[52,3263,3264],{"class":343}," \u003C",[52,3266,3267],{"class":386},"ContentRenderer",[52,3269,3270],{"class":328}," v-if",[52,3272,520],{"class":343},[52,3274,523],{"class":343},[52,3276,3277],{"class":339},"doc",[52,3279,523],{"class":343},[52,3281,3282],{"class":343}," :",[52,3284,1933],{"class":583},[52,3286,520],{"class":343},[52,3288,523],{"class":343},[52,3290,3277],{"class":339},[52,3292,523],{"class":343},[52,3294,531],{"class":343},[52,3296,3297,3300,3302],{"class":54,"line":359},[52,3298,3299],{"class":343}," \u003C/",[52,3301,3245],{"class":386},[52,3303,1721],{"class":343},[52,3305,3306,3308,3310],{"class":54,"line":365},[52,3307,1963],{"class":343},[52,3309,3235],{"class":386},[52,3311,1721],{"class":343},[14,3313,3314,3315,3318],{},"I also simplified the Tailwind configuration by removing the ",[49,3316,3317],{},"invert"," variant:",[42,3320,3322],{"className":319,"code":3321,"language":321,"meta":47,"style":47},"// tailwind.config.ts\nimport { Config } from 'tailwindcss';\nimport typography from '@tailwindcss/typography';\n\nconst config: Config = {\n content: [\n './app/**/*.{vue,js,ts}',\n './content/**/*.{md,yaml,json}',\n ],\n plugins: [\n typography,\n ],\n theme: {\n extend: {\n typography: {\n DEFAULT: {\n css: {\n maxWidth: 'none',\n },\n },\n },\n },\n },\n};\n\nexport default config;\n",[49,3323,3324,3329,3352,3371,3375,3389,3399,3411,3422,3429,3438,3445,3451,3460,3469,3478,3487,3496,3512,3517,3522,3527,3532,3537,3542,3546],{"__ignoreMap":47},[52,3325,3326],{"class":54,"line":55},[52,3327,3328],{"class":349},"// tailwind.config.ts\n",[52,3330,3331,3333,3335,3338,3340,3342,3344,3347,3349],{"class":54,"line":269},[52,3332,913],{"class":328},[52,3334,916],{"class":343},[52,3336,3337],{"class":339}," Config",[52,3339,922],{"class":343},[52,3341,925],{"class":328},[52,3343,393],{"class":343},[52,3345,3346],{"class":396},"tailwindcss",[52,3348,400],{"class":343},[52,3350,3351],{"class":343},";\n",[52,3353,3354,3356,3359,3362,3364,3367,3369],{"class":54,"line":353},[52,3355,913],{"class":328},[52,3357,3358],{"class":339}," typography ",[52,3360,3361],{"class":328},"from",[52,3363,393],{"class":343},[52,3365,3366],{"class":396},"@tailwindcss/typography",[52,3368,400],{"class":343},[52,3370,3351],{"class":343},[52,3372,3373],{"class":54,"line":359},[52,3374,805],{"emptyLinePlaceholder":804},[52,3376,3377,3379,3381,3383,3385,3387],{"class":54,"line":365},[52,3378,1189],{"class":583},[52,3380,2233],{"class":339},[52,3382,390],{"class":343},[52,3384,3337],{"class":599},[52,3386,1199],{"class":343},[52,3388,591],{"class":343},[52,3390,3391,3394,3396],{"class":54,"line":371},[52,3392,3393],{"class":386}," content",[52,3395,390],{"class":343},[52,3397,3398],{"class":339}," [\n",[52,3400,3401,3404,3407,3409],{"class":54,"line":377},[52,3402,3403],{"class":343}," '",[52,3405,3406],{"class":396},"./app/**/*.{vue,js,ts}",[52,3408,400],{"class":343},[52,3410,869],{"class":343},[52,3412,3413,3415,3418,3420],{"class":54,"line":383},[52,3414,3403],{"class":343},[52,3416,3417],{"class":396},"./content/**/*.{md,yaml,json}",[52,3419,400],{"class":343},[52,3421,869],{"class":343},[52,3423,3424,3427],{"class":54,"line":409},[52,3425,3426],{"class":339}," ]",[52,3428,869],{"class":343},[52,3430,3431,3434,3436],{"class":54,"line":415},[52,3432,3433],{"class":386}," plugins",[52,3435,390],{"class":343},[52,3437,3398],{"class":339},[52,3439,3440,3443],{"class":54,"line":1881},[52,3441,3442],{"class":339}," typography",[52,3444,869],{"class":343},[52,3446,3447,3449],{"class":54,"line":1887},[52,3448,3426],{"class":339},[52,3450,869],{"class":343},[52,3452,3453,3456,3458],{"class":54,"line":1908},[52,3454,3455],{"class":386}," theme",[52,3457,390],{"class":343},[52,3459,591],{"class":343},[52,3461,3462,3465,3467],{"class":54,"line":1913},[52,3463,3464],{"class":386}," extend",[52,3466,390],{"class":343},[52,3468,591],{"class":343},[52,3470,3471,3474,3476],{"class":54,"line":1918},[52,3472,3473],{"class":386}," typography",[52,3475,390],{"class":343},[52,3477,591],{"class":343},[52,3479,3480,3483,3485],{"class":54,"line":1960},[52,3481,3482],{"class":386}," DEFAULT",[52,3484,390],{"class":343},[52,3486,591],{"class":343},[52,3488,3489,3492,3494],{"class":54,"line":2187},[52,3490,3491],{"class":386}," css",[52,3493,390],{"class":343},[52,3495,591],{"class":343},[52,3497,3498,3501,3503,3505,3508,3510],{"class":54,"line":2207},[52,3499,3500],{"class":386}," maxWidth",[52,3502,390],{"class":343},[52,3504,393],{"class":343},[52,3506,3507],{"class":396},"none",[52,3509,400],{"class":343},[52,3511,869],{"class":343},[52,3513,3514],{"class":54,"line":2228},[52,3515,3516],{"class":343}," },\n",[52,3518,3519],{"class":54,"line":2243},[52,3520,3521],{"class":343}," },\n",[52,3523,3524],{"class":54,"line":2268},[52,3525,3526],{"class":343}," },\n",[52,3528,3529],{"class":54,"line":2286},[52,3530,3531],{"class":343}," },\n",[52,3533,3534],{"class":54,"line":2297},[52,3535,3536],{"class":343}," },\n",[52,3538,3539],{"class":54,"line":2302},[52,3540,3541],{"class":343},"};\n",[52,3543,3544],{"class":54,"line":2308},[52,3545,805],{"emptyLinePlaceholder":804},[52,3547,3548,3550,3552,3554],{"class":54,"line":2330},[52,3549,329],{"class":328},[52,3551,332],{"class":328},[52,3553,2233],{"class":339},[52,3555,3351],{"class":343},[14,3557,3558],{},"This is a workaround rather than a proper fix, but it solved the immediate problem. The root cause was that the template switching mechanism wasn't working correctly after the upgrade, and rather than spending more time debugging it, I chose to simplify.",[95,3560,3562],{"id":3561},"_36-test-configuration-updates-linxz","3.6 Test Configuration Updates (Linxz)",[14,3564,3565,3567,3569,3570,3572,3573,3575,3576,633],{},[67,3566,1471],{},[35,3568],{},"\nAfter moving the project structure to the ",[49,3571,643],{}," directory, tests started failing because import paths were incorrect. The Vitest aliases needed to be updated, and server imports needed to use ",[49,3574,1093],{}," instead of ",[49,3577,3578],{},"~/server",[14,3580,3581,3583,3585,3586,3588,3589,655],{},[67,3582,1488],{},[35,3584],{},"\nUpdate ",[49,3587,969],{}," to point aliases to the ",[49,3590,643],{},[42,3592,3594],{"className":319,"code":3593,"language":321,"meta":47,"style":47},"import { defineVitestConfig } from '@nuxt/test-utils/config'\nimport path from 'path'\n\nexport default defineVitestConfig({\n resolve: {\n alias: {\n '~': path.resolve(__dirname, './app'),\n '@': path.resolve(__dirname, './app'),\n }\n }\n})\n",[49,3595,3596,3615,3630,3634,3646,3654,3662,3692,3722,3726,3730],{"__ignoreMap":47},[52,3597,3598,3600,3602,3604,3606,3608,3610,3613],{"class":54,"line":55},[52,3599,913],{"class":328},[52,3601,916],{"class":343},[52,3603,984],{"class":339},[52,3605,922],{"class":343},[52,3607,925],{"class":328},[52,3609,393],{"class":343},[52,3611,3612],{"class":396},"@nuxt/test-utils/config",[52,3614,933],{"class":343},[52,3616,3617,3619,3622,3624,3626,3628],{"class":54,"line":269},[52,3618,913],{"class":328},[52,3620,3621],{"class":339}," path ",[52,3623,3361],{"class":328},[52,3625,393],{"class":343},[52,3627,1256],{"class":396},[52,3629,933],{"class":343},[52,3631,3632],{"class":54,"line":353},[52,3633,805],{"emptyLinePlaceholder":804},[52,3635,3636,3638,3640,3642,3644],{"class":54,"line":359},[52,3637,329],{"class":328},[52,3639,332],{"class":328},[52,3641,984],{"class":335},[52,3643,340],{"class":339},[52,3645,344],{"class":343},[52,3647,3648,3650,3652],{"class":54,"line":365},[52,3649,993],{"class":386},[52,3651,390],{"class":343},[52,3653,591],{"class":343},[52,3655,3656,3658,3660],{"class":54,"line":371},[52,3657,1002],{"class":386},[52,3659,390],{"class":343},[52,3661,591],{"class":343},[52,3663,3664,3666,3668,3670,3672,3674,3676,3678,3680,3682,3684,3686,3688,3690],{"class":54,"line":377},[52,3665,1011],{"class":343},[52,3667,887],{"class":386},[52,3669,400],{"class":343},[52,3671,390],{"class":343},[52,3673,1020],{"class":339},[52,3675,633],{"class":343},[52,3677,1025],{"class":335},[52,3679,1028],{"class":339},[52,3681,403],{"class":343},[52,3683,393],{"class":343},[52,3685,1035],{"class":396},[52,3687,400],{"class":343},[52,3689,1040],{"class":339},[52,3691,869],{"class":343},[52,3693,3694,3696,3698,3700,3702,3704,3706,3708,3710,3712,3714,3716,3718,3720],{"class":54,"line":383},[52,3695,1011],{"class":343},[52,3697,890],{"class":386},[52,3699,400],{"class":343},[52,3701,390],{"class":343},[52,3703,1020],{"class":339},[52,3705,633],{"class":343},[52,3707,1025],{"class":335},[52,3709,1028],{"class":339},[52,3711,403],{"class":343},[52,3713,393],{"class":343},[52,3715,1035],{"class":396},[52,3717,400],{"class":343},[52,3719,1040],{"class":339},[52,3721,869],{"class":343},[52,3723,3724],{"class":54,"line":409},[52,3725,1077],{"class":343},[52,3727,3728],{"class":54,"line":415},[52,3729,621],{"class":343},[52,3731,3732,3734],{"class":54,"line":1881},[52,3733,418],{"class":343},[52,3735,421],{"class":339},[14,3737,3738,3739,1094],{},"Update test files to use ",[49,3740,1093],{},[42,3742,3743],{"className":319,"code":1097,"language":321,"meta":47,"style":47},[49,3744,3745,3749,3767,3771,3775],{"__ignoreMap":47},[52,3746,3747],{"class":54,"line":55},[52,3748,1104],{"class":349},[52,3750,3751,3753,3755,3757,3759,3761,3763,3765],{"class":54,"line":269},[52,3752,913],{"class":328},[52,3754,916],{"class":343},[52,3756,919],{"class":339},[52,3758,922],{"class":343},[52,3760,925],{"class":328},[52,3762,393],{"class":343},[52,3764,930],{"class":396},[52,3766,933],{"class":343},[52,3768,3769],{"class":54,"line":353},[52,3770,805],{"emptyLinePlaceholder":804},[52,3772,3773],{"class":54,"line":359},[52,3774,1131],{"class":349},[52,3776,3777,3779,3781,3783,3785,3787,3789,3791],{"class":54,"line":365},[52,3778,913],{"class":328},[52,3780,916],{"class":343},[52,3782,919],{"class":339},[52,3784,922],{"class":343},[52,3786,925],{"class":328},[52,3788,393],{"class":343},[52,3790,959],{"class":396},[52,3792,933],{"class":343},[14,3794,3795],{},"After these changes, all 313 tests in the Linxz project passed successfully.",[27,3797,3799],{"id":3798},"_4-conclusion","4. Conclusion",[95,3801,3803],{"id":3802},"summary-of-my-experience","Summary of my experience",[14,3805,3806],{},"Upgrading from Nuxt 3 to Nuxt 4 was more challenging than I initially expected. Even though two of my three projects were already configured to be \"Nuxt 4 ready,\" I still encountered several issues that required fixes and workarounds.",[14,3808,3809],{},"The most significant challenges came from:",[764,3811,3812,3818,3824,3830],{},[660,3813,3814,3817],{},[67,3815,3816],{},"Nuxt Content 3.x breaking changes"," - The API changes required refactoring data collection queries",[660,3819,3820,3823],{},[67,3821,3822],{},"Open Graph metadata"," - Manual processing of frontmatter head data became necessary",[660,3825,3826,3829],{},[67,3827,3828],{},"Dark mode template switching"," - Simplified to a single template as a workaround",[660,3831,3832,3835],{},[67,3833,3834],{},"TypeScript configuration"," - Required explicit type references",[14,3837,3838],{},"The Linxz project, which required a full structural migration, was actually the smoothest part of the upgrade. The folder structure changes were straightforward, and all tests passed after updating the import paths.",[95,3840,3842],{"id":3841},"recommendations-for-others","Recommendations for others",[657,3844,3845,3850,3856,3862,3871],{},[660,3846,3847,3849],{},[67,3848,85],{}," - Even if your project is \"Nuxt 4 ready,\" read the upgrade guide. You might encounter issues you didn't expect.",[660,3851,3852,3855],{},[67,3853,3854],{},"Test thoroughly after each change"," - Don't assume everything will work just because dependencies updated successfully.",[660,3857,3858,3861],{},[67,3859,3860],{},"Be prepared for Nuxt Content 3.x changes"," - If you're using Nuxt Content, the API changes are significant and will require code updates.",[660,3863,3864,3867,3868,3870],{},[67,3865,3866],{},"Check your TypeScript configuration"," - The ",[49,3869,632],{}," error is common and easily fixed, but it's worth knowing about upfront.",[660,3872,3873,3876],{},[67,3874,3875],{},"Consider workarounds vs. proper fixes"," - Sometimes a workaround (like simplifying the dark mode template) is acceptable if it solves the problem and doesn't impact functionality significantly.",[95,3878,3880],{"id":3879},"what-i-would-do-differently-next-time","What I would do differently next time",[657,3882,3883,3889],{},[660,3884,3885,3888],{},[67,3886,3887],{},"Read the documentation before starting"," - I should have consulted the Nuxt 4 upgrade guide first, even though I thought I didn't need to. This would have prepared me better for the Nuxt Content 3.x API changes.",[660,3890,3891,3894],{},[67,3892,3893],{},"Investigate the root cause of dark mode issues"," - Rather than simplifying to a workaround, I could have spent more time debugging why the template switching wasn't working. However, the workaround works fine for now.",[14,3896,3897,3900,3902],{},[67,3898,3899],{},"Final thoughts:",[35,3901],{},"\nThe upgrade to Nuxt 4 is not just worth it—it's necessary. With Nuxt 3 reaching end of life in January 2026, staying on Nuxt 3 means missing out on security updates and long-term support. The migration path is generally smoother than the Nuxt 2→3 migration, and the new features and improvements are significant. However, don't underestimate the work involved, especially if you're using Nuxt Content or have complex configurations. With a bit of patience and systematic problem-solving, you'll end up with a codebase that's ready for the future.",[14,3904,3905],{},"Good luck with your own upgrade!",[3907,3908,3909],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .s6cf3, html code.shiki .s6cf3{--shiki-default:#89DDFF;--shiki-default-font-style:italic}html pre.shiki code .sdLwU, html code.shiki .sdLwU{--shiki-default:#82AAFF}html pre.shiki code .svy0-, html code.shiki .svy0-{--shiki-default:#EEFFFF}html pre.shiki code .sAklC, html code.shiki .sAklC{--shiki-default:#89DDFF}html pre.shiki code .s0_hs, html code.shiki .s0_hs{--shiki-default:#546E7A;--shiki-default-font-style:italic}html pre.shiki code .s-wAU, html code.shiki .s-wAU{--shiki-default:#F07178}html pre.shiki code .sfyAc, html code.shiki .sfyAc{--shiki-default:#C3E88D}html pre.shiki code .st21m, html code.shiki .st21m{--shiki-default:#F07178;--shiki-default-font-style:italic}html pre.shiki code .sVyDW, html code.shiki .sVyDW{--shiki-default:#C792EA;--shiki-default-font-style:italic}html pre.shiki code .swXnL, html code.shiki .swXnL{--shiki-default:#C3E88D;--shiki-default-font-style:italic}html pre.shiki code .sJ14y, html code.shiki .sJ14y{--shiki-default:#C792EA}html pre.shiki code .s5Dmg, html code.shiki .s5Dmg{--shiki-default:#FFCB6B}html pre.shiki code .sLFUT, html code.shiki .sLFUT{--shiki-default:#EEFFFF;--shiki-default-font-style:italic}html pre.shiki code .sx098, html code.shiki .sx098{--shiki-default:#F78C6C}",{"title":47,"searchDepth":269,"depth":269,"links":3911},[3912,3913,3919,3927],{"id":29,"depth":269,"text":30},{"id":92,"depth":269,"text":93,"children":3914},[3915,3916,3917,3918],{"id":97,"depth":353,"text":98},{"id":293,"depth":353,"text":294},{"id":636,"depth":353,"text":637},{"id":1163,"depth":353,"text":1164},{"id":1458,"depth":269,"text":1459,"children":3920},[3921,3922,3923,3924,3925,3926],{"id":1465,"depth":353,"text":1466},{"id":1600,"depth":353,"text":1601},{"id":1669,"depth":353,"text":1670},{"id":1973,"depth":353,"text":1974},{"id":3204,"depth":353,"text":3205},{"id":3561,"depth":353,"text":3562},{"id":3798,"depth":269,"text":3799,"children":3928},[3929,3930,3931],{"id":3802,"depth":353,"text":3803},{"id":3841,"depth":353,"text":3842},{"id":3879,"depth":353,"text":3880},[3933],"programming","2025-12-29","A Real-World Upgrade Experience",false,"[object Object]","md",{"htmlAttrs":3940,"link":3942,"meta":3947},{"lang":3941},"en",[3943],{"rel":3944,"type":3945,"href":3946},"icon","mange/x-icon","/favicon.ico",[3948,3951,3954,3957,3960,3962,3965,3968,3970,3972,3975],{"name":3949,"content":3950},"keywords","programming, coding, vue",{"name":3952,"content":3953},"robots","index, follow",{"name":3955,"content":3956},"author","Melchior Kannengießer",{"name":3958,"content":3959},"og:title","mjk @ web - Upgrading from Nuxt 3 to Nuxt 4",{"name":3961,"content":3935},"og:description",{"name":3963,"content":3964},"og:image","/logo_518x270.png",{"name":3966,"content":3967},"og:url","http://www.mjkweb.de",{"name":3969,"content":3959},"twitter:title",{"name":3971,"content":3935},"twitter:description",{"name":3973,"content":3974},"twitter:image","/logo_200x200.png",{"name":3976,"content":3094},"twitter:card",{"excerpt_separator":3978},"\u003C!--more-->","/blog/2025/upgrade-nuxt-3-to-nuxt-4",{"title":5,"description":3935},"blog/2025/upgrade-nuxt-3-to-nuxt-4",[3933,3983,1706,104],"coding","d_I-rsq_sDaWYeqXtc2pbaG99BcGN33_KR38EWn9BhQ",1775492953063] \ No newline at end of file diff --git a/blog/2025/upgrade-nuxt-3-to-nuxt-4/index.html b/blog/2025/upgrade-nuxt-3-to-nuxt-4/index.html new file mode 100644 index 0000000..c3df88c --- /dev/null +++ b/blog/2025/upgrade-nuxt-3-to-nuxt-4/index.html @@ -0,0 +1,256 @@ +Upgrading from Nuxt 3 to Nuxt 4

Upgrading from Nuxt 3 to Nuxt 4

It's Christmas time, so I have time to code. Nuxt 3 reaches its end of life in January 2026, and Nuxt 4 is the new kid on the block. So I decided to upgrade my projects to Nuxt 4. Since my blog is already configured to be Nuxt 4 ready and it's just a simple blog with some markdown files, it should be a no-brainer, right?

Well, as it turns out, even projects that are already "Nuxt 4 ready" can throw unexpected challenges at you. In this blog post, I'll document my experience upgrading three projects to Nuxt 4: my personal blog (already Nuxt 4 ready), a web business card/gallery project (also already Nuxt 4 ready), and Linxz—a more complex application that required a full migration.

The irony? Most of the issues I encountered were with the projects that were supposedly already ready for Nuxt 4. This upgrade wasn't just about updating dependencies—it involved dealing with breaking changes in Nuxt Content 3.x, fixing TypeScript configuration issues, and working around problems with dark mode templates and Open Graph metadata.

In this post, I'll walk you through the entire process, including the challenges I faced and how I solved them. Whether you're upgrading a single project or multiple projects like I did, I hope this honest account will help you avoid some of the pitfalls I encountered.

1. Preparation

Before jumping into the actual upgrade, I wanted to make sure I had a safe environment to experiment in. Since all my projects are already hosted on GitHub, I didn't need a separate backup—version control has that covered.
+If you're not using Git, it's a good idea to create a manual backup of your project folder before starting, just to be safe.

I created new branches specifically for the migration in each project:

git checkout -b upgrade/nuxt4
+

This allows me to work on the Nuxt 4 upgrade without touching the production code. If anything goes wrong, I can always fall back to the main branch or review the commit history.

If you're using Git on Windows and don't have access to a Bash shell, the command above should still work in PowerShell or your Git GUI. If you're not using Git at all, simply duplicate your project folder manually and work on the copy.

A confession: At this stage, I should have started looking into the official Nuxt 4 upgrade guide. But I didn't. Why? Because I thought it would be a no-brainer—after all, two of my three projects were already configured to be Nuxt 4 ready. I figured I'd just update the dependencies and be done with it.

As you'll see, that assumption was wrong. Even projects that are "Nuxt 4 ready" can have issues when you actually upgrade to Nuxt 4. So my first piece of advice: Read the documentation first, even if you think you don't need to.

Finally, I listed all major dependencies in each project and began checking whether they needed updates or if replacements were needed.

2. Migration

2.1 Updating Dependencies

The first step in the actual upgrade process is to update the project dependencies. Since Nuxt 4 is the latest major version, the main change is updating the nuxt package itself. However, you may also need to update related modules and Nuxt Content if you're using it.

How do you know which dependencies need to be updated?

Start by opening your package.json and making a list of all packages under dependencies and devDependencies. For each package, check the official documentation or GitHub repository to see if it supports Nuxt 4. The Nuxt 4 upgrade guide is a great starting point.

You can also use tools like npm-check-updates to quickly see which of your dependencies have newer versions available:

npx npm-check-updates
+

However, always double-check compatibility manually, as not every update is Nuxt 4-ready.

In my projects, I identified the following dependencies that needed updates:

PackageStatus in Nuxt 4Recommendation
nuxt❌ Needs updateUpdate to nuxt@^4.0.0
@nuxt/content⚠️ Major version changeUpdate to @nuxt/content@^3.0.0 (breaking changes!)
@pinia/nuxt✅ CompatibleUpdate to latest version
@prisma/nuxt✅ CompatibleUpdate to latest version
@nuxtjs/tailwindcss✅ CompatibleUpdate to latest version
@nuxt/eslint✅ CompatibleUpdate to latest version
@nuxt/test-utils✅ CompatibleUpdate to latest version

The most significant change was Nuxt Content, which jumped from version 2.x to 3.x. This introduced breaking changes in the API that I'll discuss in more detail later.

To update the dependencies, I used the following commands:

npm install nuxt@latest
+npm install @nuxt/content@latest
+

For the other modules, I updated them to their latest versions as well:

npm install @pinia/nuxt@latest @prisma/nuxt@latest @nuxtjs/tailwindcss@latest
+

After running these commands, my package.json files were updated and ready for the next steps in the migration.

2.2 Adapting the Configuration

With the dependencies updated, the next step is to adapt your Nuxt configuration to match Nuxt 4's requirements. The changes are relatively minor compared to the Nuxt 2→3 migration, but there are still some important updates to make.

2.2.1 Remove future.compatibilityVersion

If you had set future.compatibilityVersion: 4 in your nuxt.config.ts to prepare for Nuxt 4, you can now remove it. This option is no longer needed since you're actually using Nuxt 4:

export default defineNuxtConfig({
+  // Remove this:
+  // future: {
+  //   compatibilityVersion: 4,
+  // },
+  
+  // Keep this:
+  compatibilityDate: '2024-11-01', // Update to current date
+  // ... rest of your config
+})
+

2.2.2 Update compatibilityDate

Update the compatibilityDate to the current date. This ensures you're using the latest Nuxt 4 features and conventions:

export default defineNuxtConfig({
+  compatibilityDate: '2024-12-24', // Update to current date
+  // ... rest of your config
+})
+

2.2.3 TypeScript Reference

When using TypeScript, you might encounter an error like Cannot find name 'defineNuxtConfig'. To fix this, add a TypeScript reference directive at the top of your nuxt.config.ts:

// https://nuxt.com/docs/api/configuration/nuxt-config
+/// <reference types="nuxt" />
+export default defineNuxtConfig({
+  // ... your config
+})
+

You may also need to add "types": ["nuxt"] to your tsconfig.json:

{
+  "compilerOptions": {
+    "types": ["nuxt"]
+  }
+}
+

This ensures TypeScript recognizes Nuxt's global types, including defineNuxtConfig.

2.3 Adapting the Project Structure (Linxz Only)

For my Linxz project, which wasn't already Nuxt 4 ready, I needed to restructure the project to follow Nuxt 4's new conventions. Nuxt 4 introduces a new app/ directory structure that organizes your application code more clearly.

What needs to be moved?

The following directories should be moved into a new app/ directory:

  • pages/app/pages/
  • components/app/components/
  • layouts/app/layouts/
  • composables/app/composables/
  • plugins/app/plugins/
  • stores/app/stores/
  • app.vueapp/app.vue
  • lib/app/lib/ (if you have one)

Directories that remain in the root:

  • server/ (stays at root)
  • public/ (stays at root)
  • tests/ (stays at root)
  • config/ (stays at root, if you have one)
  • prisma/ (stays at root, if you have one)

Migration steps:

  1. Create the app/ directory in your project root.
  2. Move the directories:
# On Linux/macOS
+mkdir app
+mv pages components layouts composables plugins stores lib app/
+mv app.vue app/
+
+# On Windows PowerShell
+mkdir app
+Move-Item pages,components,layouts,composables,plugins,stores,lib app/
+Move-Item app.vue app/
+
  1. Update nuxt.config.ts to set srcDir:
export default defineNuxtConfig({
+  srcDir: 'app',
+  // ... rest of your config
+})
+
  1. Update import paths for server-side code. Since ~ and @ now point to app/, you need to use ~~ for root-level imports:
// Old (points to app/server, which doesn't exist)
+import { something } from '~/server/utils'
+
+// New (points to root/server)
+import { something } from '~~/server/utils'
+
  1. Update test configuration. If you're using Vitest, update your vitest.config.ts aliases:
export default defineVitestConfig({
+  resolve: {
+    alias: {
+      '~': path.resolve(__dirname, './app'),
+      '@': path.resolve(__dirname, './app'),
+    }
+  }
+})
+

And update test files to use ~~/server for server imports:

// Old
+import { something } from '~/server/utils'
+
+// New
+import { something } from '~~/server/utils'
+

After these changes, my Linxz project structure looked like this:

linxz/
+├── app/
+│   ├── components/
+│   ├── layouts/
+│   ├── pages/
+│   ├── composables/
+│   ├── plugins/
+│   ├── stores/
+│   ├── lib/
+│   └── app.vue
+├── server/
+├── public/
+├── tests/
+├── config/
+├── prisma/
+├── nuxt.config.ts
+└── package.json
+

2.4 Nuxt Content 3.x Migration

One of the biggest changes in this upgrade was Nuxt Content jumping from version 2.x to 3.x. This introduced breaking changes in the API, particularly for data collections.

The main breaking change: .path() no longer works for data collections

In Nuxt Content 2.x, you could query data collections like this:

const { data } = await useAsyncData('links', async () => {
+  return await queryCollection('data')
+    .path('/link-sets')
+    .first()
+})
+

In Nuxt Content 3.x, .path() doesn't work for data collections anymore. Instead, you need to use .all() and filter manually:

const { data } = await useAsyncData('links', async () => {
+  const allData = await queryCollection('data')
+    .all()
+  const doc = allData.find(item => 
+    item._path === '/link-sets' || 
+    item._id === 'link-sets'
+  )
+  return doc
+})
+

This affected my Links and Projects pages, which I'll discuss in more detail in the Challenges section.

3. Challenges & Solutions

No upgrade is ever completely smooth, and moving from Nuxt 3 to Nuxt 4 was no exception. Here are the main challenges I encountered during the process—and how I solved them:

3.1 TypeScript Configuration Errors

Problem:
+After updating to Nuxt 4, TypeScript complained about defineNuxtConfig not being found:

Cannot find name 'defineNuxtConfig'. Did you mean 'defineNitroConfig'?
+

Solution:
+Add a TypeScript reference directive at the top of your nuxt.config.ts:

/// <reference types="nuxt" />
+export default defineNuxtConfig({
+  // ... your config
+})
+

You may also need to add "types": ["nuxt"] to your tsconfig.json:

{
+  "compilerOptions": {
+    "types": ["nuxt"]
+  }
+}
+

This ensures TypeScript recognizes Nuxt's global types. The triple-slash directive is particularly important and should be placed at the very top of your config file.

3.2 baseURL for GitHub Pages (Windows)

Problem:
+For the web business card project, I needed to set a baseURL for GitHub Pages deployment. The standard approach of setting environment variables doesn't work well on Windows PowerShell:

# This doesn't work on Windows PowerShell
+BASE_URL=/kunstkanne/ npm run generate
+

Solution (or rather, workaround):
+I ended up not deploying the web business card to GitHub Pages anymore. This is a workaround rather than a proper solution, but it was the path of least resistance for this particular project.

If you need to solve this properly, you could:

  1. Use cross-env to set environment variables cross-platform
  2. Detect the npm script in nuxt.config.ts and set baseURL accordingly
  3. Use a .env file (though this affects local development too)

For now, I've documented this as an unresolved issue that I worked around rather than solved.

3.3 Nuxt Content 3.x API Changes

Problem:
+After upgrading to Nuxt Content 3.x, my Links and Projects pages stopped showing data. The error in the console was:

no such column: "path"
+

The issue was that .path() no longer works for data collections in Nuxt Content 3.x.

Solution:
+Replace .path() with .all() and filter manually:

<script setup>
+const { data: result } = await useAsyncData(
+  'link-sets',
+  async () => {
+    const allData = await queryCollection('data')
+      .all()
+    const doc = allData.find(item => 
+      item._path === '/link-sets' || 
+      item._id === 'link-sets' ||
+      item.path === '/link-sets'
+    )
+    return doc || allData[0]
+  }
+)
+const linkSets = result.value?.['link-sets'] || result.value
+</script>
+

This approach loads all data from the collection and then filters it in JavaScript, which is less efficient but works with the new API.

3.4 Open Graph Meta Tags from Frontmatter

Problem:
+After the upgrade, Open Graph meta tags from the frontmatter of blog posts were no longer being processed automatically. The head section in the frontmatter was being ignored.

Solution:
+Manually process the head data from frontmatter and set meta tags using useSeoMeta() and useHead():

<script setup>
+const route = useRoute()
+const { data: doc } = await useAsyncData(
+  `blog-${route.path}`,
+  async () => {
+    try {
+      const article = await queryCollection('blog')
+        .path(route.path)
+        .first()
+      return article
+    } catch {
+      return null
+    }
+  }
+)
+
+if (doc.value?.head) {
+  const head = doc.value.head
+  const config = useRuntimeConfig()
+  const baseURL = config.public.baseURL || 
+                  config.app?.baseURL || 
+                  'https://mjkatgithub.github.io'
+
+  // Extract meta tags
+  const metaTags = head.meta || []
+  const ogTags = {}
+  const twitterTags = {}
+  const otherMeta = []
+
+  metaTags.forEach((tag) => {
+    const tagName = tag.property || tag.name
+    
+    if (tagName?.startsWith('og:')) {
+      const key = tagName.replace('og:', '')
+      ogTags[key] = tag.content
+    } else if (tagName?.startsWith('twitter:')) {
+      const key = tagName.replace('twitter:', '')
+      twitterTags[key] = tag.content
+    } else if (tagName) {
+      const metaTag = tag.property 
+        ? { property: tag.property, content: tag.content }
+        : { name: tag.name, content: tag.content }
+      otherMeta.push(metaTag)
+    }
+  })
+
+  // Set SEO meta tags
+  useSeoMeta({
+    title: doc.value.title || ogTags.title || '',
+    description: doc.value.description || 
+                 ogTags.description || '',
+    ogTitle: ogTags.title || doc.value.title || '',
+    ogDescription: ogTags.description || 
+                   doc.value.description || '',
+    ogImage: ogTags.image || '',
+    ogUrl: ogTags.url || `${baseURL}${route.path}`,
+    twitterTitle: twitterTags.title || 
+                  ogTags.title || 
+                  doc.value.title || '',
+    twitterDescription: twitterTags.description || 
+                        ogTags.description || 
+                        doc.value.description || '',
+    twitterImage: twitterTags.image || '',
+    twitterCard: twitterTags.card || 'summary'
+  })
+
+  // Set additional meta tags and HTML attributes
+  useHead({
+    htmlAttrs: head.htmlAttrs || {},
+    link: head.link || [],
+    meta: otherMeta
+  })
+}
+</script>
+

This manually extracts and processes all the meta tags from the frontmatter, ensuring they're properly set in the page head.

3.5 Dark Mode Template Switching Issues

Problem:
+After the upgrade, code boxes in blog articles had poor contrast in dark mode. More importantly, the template wasn't switching between light and dark mode properly—the dark:prose-invert class wasn't being applied when the mode changed.

Solution:
+I simplified the template by removing the dark mode variant entirely. Instead of trying to make the template switch between light and dark modes, I kept it at a single dark template:

<template>
+  <article class="prose">
+    <ContentRenderer v-if="doc" :value="doc" />
+  </article>
+</template>
+

I also simplified the Tailwind configuration by removing the invert variant:

// tailwind.config.ts
+import { Config } from 'tailwindcss';
+import typography from '@tailwindcss/typography';
+
+const config: Config = {
+  content: [
+    './app/**/*.{vue,js,ts}',
+    './content/**/*.{md,yaml,json}',
+  ],
+  plugins: [
+    typography,
+  ],
+  theme: {
+    extend: {
+      typography: {
+        DEFAULT: {
+          css: {
+            maxWidth: 'none',
+          },
+        },
+      },
+    },
+  },
+};
+
+export default config;
+

This is a workaround rather than a proper fix, but it solved the immediate problem. The root cause was that the template switching mechanism wasn't working correctly after the upgrade, and rather than spending more time debugging it, I chose to simplify.

3.6 Test Configuration Updates (Linxz)

Problem:
+After moving the project structure to the app/ directory, tests started failing because import paths were incorrect. The Vitest aliases needed to be updated, and server imports needed to use ~~/server instead of ~/server.

Solution:
+Update vitest.config.ts to point aliases to the app/ directory:

import { defineVitestConfig } from '@nuxt/test-utils/config'
+import path from 'path'
+
+export default defineVitestConfig({
+  resolve: {
+    alias: {
+      '~': path.resolve(__dirname, './app'),
+      '@': path.resolve(__dirname, './app'),
+    }
+  }
+})
+

Update test files to use ~~/server for server imports:

// Old
+import { something } from '~/server/utils'
+
+// New
+import { something } from '~~/server/utils'
+

After these changes, all 313 tests in the Linxz project passed successfully.

4. Conclusion

Summary of my experience

Upgrading from Nuxt 3 to Nuxt 4 was more challenging than I initially expected. Even though two of my three projects were already configured to be "Nuxt 4 ready," I still encountered several issues that required fixes and workarounds.

The most significant challenges came from:

  1. Nuxt Content 3.x breaking changes - The API changes required refactoring data collection queries
  2. Open Graph metadata - Manual processing of frontmatter head data became necessary
  3. Dark mode template switching - Simplified to a single template as a workaround
  4. TypeScript configuration - Required explicit type references

The Linxz project, which required a full structural migration, was actually the smoothest part of the upgrade. The folder structure changes were straightforward, and all tests passed after updating the import paths.

Recommendations for others

  • Read the documentation first - Even if your project is "Nuxt 4 ready," read the upgrade guide. You might encounter issues you didn't expect.
  • Test thoroughly after each change - Don't assume everything will work just because dependencies updated successfully.
  • Be prepared for Nuxt Content 3.x changes - If you're using Nuxt Content, the API changes are significant and will require code updates.
  • Check your TypeScript configuration - The defineNuxtConfig error is common and easily fixed, but it's worth knowing about upfront.
  • Consider workarounds vs. proper fixes - Sometimes a workaround (like simplifying the dark mode template) is acceptable if it solves the problem and doesn't impact functionality significantly.

What I would do differently next time

  • Read the documentation before starting - I should have consulted the Nuxt 4 upgrade guide first, even though I thought I didn't need to. This would have prepared me better for the Nuxt Content 3.x API changes.
  • Investigate the root cause of dark mode issues - Rather than simplifying to a workaround, I could have spent more time debugging why the template switching wasn't working. However, the workaround works fine for now.

Final thoughts:
+The upgrade to Nuxt 4 is not just worth it—it's necessary. With Nuxt 3 reaching end of life in January 2026, staying on Nuxt 3 means missing out on security updates and long-term support. The migration path is generally smoother than the Nuxt 2→3 migration, and the new features and improvements are significant. However, don't underestimate the work involved, especially if you're using Nuxt Content or have complex configurations. With a bit of patience and systematic problem-solving, you'll end up with a codebase that's ready for the future.

Good luck with your own upgrade!

© by Melchior Jascha Kannengießer
\ No newline at end of file diff --git a/datenschutzerklaerung/_payload.json b/datenschutzerklaerung/_payload.json new file mode 100644 index 0000000..561a4ec --- /dev/null +++ b/datenschutzerklaerung/_payload.json @@ -0,0 +1 @@ +[{"data":1,"prerenderedAt":198},["ShallowReactive",2],{"datenschutzerklaerung":3},{"id":4,"title":5,"body":6,"description":153,"extension":154,"head":155,"meta":193,"navigation":194,"path":195,"seo":196,"stem":153,"__hash__":197},"pages/datenschutzerklaerung.md","Datenschutz-Erklärung",{"type":7,"value":8,"toc":144},"minimark",[9,13,18,22,25,28,32,35,38,48,52,55,58,61,65,78,86,90,93,101,109],[10,11,5],"h1",{"id":12},"datenschutz-erklärung",[14,15,17],"h2",{"id":16},"datenschutz","Datenschutz",[19,20,21],"p",{},"Die Nutzung unserer Webseite ist in der Regel ohne Angabe personenbezogener Daten möglich. Soweit auf unseren Seiten personenbezogene Daten (beispielsweise Name, Anschrift oder eMail-Adressen) erhoben werden, erfolgt dies, soweit möglich, stets auf freiwilliger Basis. Diese Daten werden ohne Ihre ausdrückliche Zustimmung nicht an Dritte weitergegeben.",[19,23,24],{},"Wir weisen darauf hin, dass die Datenübertragung im Internet (z.B. bei der Kommunikation per E-Mail) Sicherheitslücken aufweisen kann. Ein lückenloser Schutz der Daten vor dem Zugriff durch Dritte ist nicht möglich.",[19,26,27],{},"Der Nutzung von im Rahmen der Impressumspflicht veröffentlichten Kontaktdaten durch Dritte zur Übersendung von nicht ausdrücklich angeforderter Werbung und Informationsmaterialien wird hiermit ausdrücklich widersprochen. Die Betreiber der Seiten behalten sich ausdrücklich rechtliche Schritte im Falle der unverlangten Zusendung von Werbeinformationen, etwa durch Spam-Mails, vor.",[14,29,31],{"id":30},"datenschutzerklärung-für-die-nutzung-von-google-analytics","Datenschutzerklärung für die Nutzung von Google Analytics",[19,33,34],{},"Diese Website benutzt Google Analytics, einen Webanalysedienst der Google Inc. (\"Google\"). Google Analytics verwendet sog. \"Cookies\", Textdateien, die auf Ihrem Computer gespeichert werden und die eine Analyse der Benutzung der Website durch Sie ermöglichen. Die durch den Cookie erzeugten Informationen über Ihre Benutzung dieser Website werden in der Regel an einen Server von Google in den USA übertragen und dort gespeichert. Im Falle der Aktivierung der IP-Anonymisierung auf dieser Webseite wird Ihre IP-Adresse von Google jedoch innerhalb von Mitgliedstaaten der Europäischen Union oder in anderen Vertragsstaaten des Abkommens über den Europäischen Wirtschaftsraum zuvor gekürzt.",[19,36,37],{},"Nur in Ausnahmefällen wird die volle IP-Adresse an einen Server von Google in den USA übertragen und dort gekürzt. Im Auftrag des Betreibers dieser Website wird Google diese Informationen benutzen, um Ihre Nutzung der Website auszuwerten, um Reports über die Websiteaktivitäten zusammenzustellen und um weitere mit der Websitenutzung und der Internetnutzung verbundene Dienstleistungen gegenüber dem Websitebetreiber zu erbringen. Die im Rahmen von Google Analytics von Ihrem Browser übermittelte IP-Adresse wird nicht mit anderen Daten von Google zusammengeführt.",[19,39,40,41,47],{},"Sie können die Speicherung der Cookies durch eine entsprechende Einstellung Ihrer Browser-Software verhindern; wir weisen Sie jedoch darauf hin, dass Sie in diesem Fall gegebenenfalls nicht sämtliche Funktionen dieser Website vollumfänglich werden nutzen können. Sie können darüber hinaus die Erfassung der durch das Cookie erzeugten und auf Ihre Nutzung der Website bezogenen Daten (inkl. Ihrer IP-Adresse) an Google sowie die Verarbeitung dieser Daten durch Google verhindern, indem sie das unter dem folgenden Link verfügbare Browser-Plugin herunterladen und installieren: ",[42,43,44],"a",{"href":44,"rel":45},"http://tools.google.com/dlpage/gaoptout?hl=de",[46],"nofollow",".",[14,49,51],{"id":50},"datenschutzerklärung-für-die-nutzung-von-google-adsense","Datenschutzerklärung für die Nutzung von Google Adsense",[19,53,54],{},"Diese Website benutzt Google AdSense, einen Dienst zum Einbinden von Werbeanzeigen der Google Inc. (\"Google\"). Google AdSense verwendet sog. \"Cookies\", Textdateien, die auf Ihrem Computer gespeichert werden und die eine Analyse der Benutzung der Website ermöglicht. Google AdSense verwendet auch so genannte Web Beacons (unsichtbare Grafiken). Durch diese Web Beacons können Informationen wie der Besucherverkehr auf diesen Seiten ausgewertet werden.",[19,56,57],{},"Die durch Cookies und Web Beacons erzeugten Informationen über die Benutzung dieser Website (einschließlich Ihrer IP-Adresse) und Auslieferung von Werbeformaten werden an einen Server von Google in den USA übertragen und dort gespeichert. Diese Informationen können von Google an Vertragspartner von Google weiter gegeben werden. Google wird Ihre IP-Adresse jedoch nicht mit anderen von Ihnen gespeicherten Daten zusammenführen.",[19,59,60],{},"Sie können die Installation der Cookies durch eine entsprechende Einstellung Ihrer Browser Software verhindern; wir weisen Sie jedoch darauf hin, dass Sie in diesem Fall gegebenenfalls nicht sämtliche Funktionen dieser Website voll umfänglich nutzen können. Durch die Nutzung dieser Website erklären Sie sich mit der Bearbeitung der über Sie erhobenen Daten durch Google in der zuvor beschriebenen Art und Weise und zu dem zuvor benannten Zweck einverstanden.",[14,62,64],{"id":63},"datenschutzerklärung-für-die-nutzung-von-google-1","Datenschutzerklärung für die Nutzung von Google +1",[19,66,67,71,74,75,77],{},[68,69,70],"em",{},"Erfassung und Weitergabe von Informationen:",[72,73],"br",{},"\nMithilfe der Google +1-Schaltfläche können Sie Informationen weltweit veröffentlichen. über die Google +1-Schaltfläche erhalten Sie und andere Nutzer personalisierte Inhalte von Google und unseren Partnern. Google speichert sowohl die Information, dass Sie für einen Inhalt +1 gegeben haben, als auch Informationen über die Seite, die Sie beim Klicken auf +1 angesehen haben. Ihre +1 können als Hinweise zusammen mit Ihrem Profilnamen und Ihrem Foto in Google-Diensten, wie etwa in Suchergebnissen oder in Ihrem Google-Profil, oder an anderen Stellen auf Websites und Anzeigen im Internet eingeblendet werden.",[72,76],{},"\nGoogle zeichnet Informationen über Ihre +1-Aktivitäten auf, um die Google-Dienste für Sie und andere zu verbessern. Um die Google +1-Schaltfläche verwenden zu können, benötigen Sie ein weltweit sichtbares, öffentliches Google-Profil, das zumindest den für das Profil gewählten Namen enthalten muss. Dieser Name wird in allen Google-Diensten verwendet. In manchen Fällen kann dieser Name auch einen anderen Namen ersetzen, den Sie beim Teilen von Inhalten über Ihr Google-Konto verwendet haben. Die Identität Ihres Google-Profils kann Nutzern angezeigt werden, die Ihre E-Mail-Adresse kennen oder über andere identifizierende Informationen von Ihnen verfügen.",[19,79,80,83,85],{},[68,81,82],{},"Verwendung der erfassten Informationen:",[72,84],{},"\nNeben den oben erläuterten Verwendungszwecken werden die von Ihnen bereitgestellten Informationen gemäß den geltenden Google-Datenschutzbestimmungen genutzt. Google veröffentlicht möglicherweise zusammengefasste Statistiken über die +1-Aktivitäten der Nutzer bzw. gibt diese an Nutzer und Partner weiter, wie etwa Publisher, Inserenten oder verbundene Websites.",[14,87,89],{"id":88},"datenschutzerklärung-für-die-nutzung-von-twitter","Datenschutzerklärung für die Nutzung von Twitter",[19,91,92],{},"Auf unseren Seiten sind Funktionen des Dienstes Twitter eingebunden. Diese Funktionen werden angeboten durch die Twitter Inc., Twitter, Inc. 1355 Market St, Suite 900, San Francisco, CA 94103, USA. Durch das Benutzen von Twitter und der Funktion \"Re-Tweet\" werden die von Ihnen besuchten Webseiten mit Ihrem Twitter-Account verknüpft und anderen Nutzern bekannt gegeben. Dabei werden auch Daten an Twitter übertragen.",[19,94,95,96,47],{},"Wir weisen darauf hin, dass wir als Anbieter der Seiten keine Kenntnis vom Inhalt der übermittelten Daten sowie deren Nutzung durch Twitter erhalten. Weitere Informationen hierzu finden Sie in der Datenschutzerklärung von Twitter unter ",[42,97,98],{"href":98,"rel":99,":target":100},"http://twitter.com/privacy",[46],"_blank",[19,102,103,104,108],{},"Ihre Datenschutzeinstellungen bei Twitter können Sie in den Konto-Einstellungen unter ",[42,105,106],{"href":106,"rel":107,":target":100},"http://twitter.com/account/settings",[46]," ändern.",[19,110,111],{},[68,112,113,114,119,120,119,125,119,130,119,135,119,140],{},"Quellen: ",[42,115,118],{"href":116,"rel":117,":target":100},"http://www.e-recht24.de/muster-datenschutzerklaerung.html",[46],"eRecht24 Datenschutzerklärung",", ",[42,121,124],{"href":122,"rel":123,":target":100},"http://www.e-recht24.de/artikel/datenschutz/6590-facebook-like-button-datenschutz-disclaimer.html",[46],"eRecht24 Datenschutzerklärung für Facebook",[42,126,129],{"href":127,"rel":128,":target":100},"http://www.google.com/intl/de/analytics/privacyoverview.html",[46],"Datenschutzerklärung Google Analytics",[42,131,134],{"href":132,"rel":133,":target":100},"http://www.e-recht24.de/artikel/datenschutz/6635-datenschutz-rechtliche-risiken-bei-der-nutzung-von-google-analytics-und-googleadsense.html",[46],"Google Adsense Datenschutzerklärung",[42,136,139],{"href":137,"rel":138,":target":100},"http://www.google.com/intl/de/+/policy/+1button.html",[46],"Google +1 Bedingungen",[42,141,143],{"href":98,"rel":142,":target":100},[46],"Datenschutzerklärung für Twitter",{"title":145,"searchDepth":146,"depth":146,"links":147},"",2,[148,149,150,151,152],{"id":16,"depth":146,"text":17},{"id":30,"depth":146,"text":31},{"id":50,"depth":146,"text":51},{"id":63,"depth":146,"text":64},{"id":88,"depth":146,"text":89},"datenschutzerklaerung","md",{"htmlAttrs":156,"link":158,"meta":163},{"lang":157},"en",[159],{"rel":160,"type":161,"href":162},"icon","mange/x-icon","/favicon.ico",[164,166,169,172,175,177,180,183,185,187,190],{"name":165,"content":153},"keywords",{"name":167,"content":168},"robots","index, follow",{"name":170,"content":171},"author","Melchior Kannengießer",{"name":173,"content":174},"og:title","mjk @ web - datenschutzerklaerung",{"name":176,"content":153},"og:description",{"name":178,"content":179},"og:image","/logo_518x270.png",{"name":181,"content":182},"og:url","http://www.mjkweb.de",{"name":184,"content":174},"twitter:title",{"name":186,"content":153},"twitter:description",{"name":188,"content":189},"twitter:image","/logo_200x200.png",{"name":191,"content":192},"twitter:card","summary",{},true,"/datenschutzerklaerung",{"title":5,"description":153},"QnLdTmjfPn61nwigDC-p3MWCvtQX1WS9pgyv_phiYeU",1775492953062] \ No newline at end of file diff --git a/datenschutzerklaerung/index.html b/datenschutzerklaerung/index.html new file mode 100644 index 0000000..a7dbfaf --- /dev/null +++ b/datenschutzerklaerung/index.html @@ -0,0 +1,4 @@ +Datenschutz-Erklärung

Datenschutz-Erklärung

Datenschutz

Die Nutzung unserer Webseite ist in der Regel ohne Angabe personenbezogener Daten möglich. Soweit auf unseren Seiten personenbezogene Daten (beispielsweise Name, Anschrift oder eMail-Adressen) erhoben werden, erfolgt dies, soweit möglich, stets auf freiwilliger Basis. Diese Daten werden ohne Ihre ausdrückliche Zustimmung nicht an Dritte weitergegeben.

Wir weisen darauf hin, dass die Datenübertragung im Internet (z.B. bei der Kommunikation per E-Mail) Sicherheitslücken aufweisen kann. Ein lückenloser Schutz der Daten vor dem Zugriff durch Dritte ist nicht möglich.

Der Nutzung von im Rahmen der Impressumspflicht veröffentlichten Kontaktdaten durch Dritte zur Übersendung von nicht ausdrücklich angeforderter Werbung und Informationsmaterialien wird hiermit ausdrücklich widersprochen. Die Betreiber der Seiten behalten sich ausdrücklich rechtliche Schritte im Falle der unverlangten Zusendung von Werbeinformationen, etwa durch Spam-Mails, vor.

Datenschutzerklärung für die Nutzung von Google Analytics

Diese Website benutzt Google Analytics, einen Webanalysedienst der Google Inc. ("Google"). Google Analytics verwendet sog. "Cookies", Textdateien, die auf Ihrem Computer gespeichert werden und die eine Analyse der Benutzung der Website durch Sie ermöglichen. Die durch den Cookie erzeugten Informationen über Ihre Benutzung dieser Website werden in der Regel an einen Server von Google in den USA übertragen und dort gespeichert. Im Falle der Aktivierung der IP-Anonymisierung auf dieser Webseite wird Ihre IP-Adresse von Google jedoch innerhalb von Mitgliedstaaten der Europäischen Union oder in anderen Vertragsstaaten des Abkommens über den Europäischen Wirtschaftsraum zuvor gekürzt.

Nur in Ausnahmefällen wird die volle IP-Adresse an einen Server von Google in den USA übertragen und dort gekürzt. Im Auftrag des Betreibers dieser Website wird Google diese Informationen benutzen, um Ihre Nutzung der Website auszuwerten, um Reports über die Websiteaktivitäten zusammenzustellen und um weitere mit der Websitenutzung und der Internetnutzung verbundene Dienstleistungen gegenüber dem Websitebetreiber zu erbringen. Die im Rahmen von Google Analytics von Ihrem Browser übermittelte IP-Adresse wird nicht mit anderen Daten von Google zusammengeführt.

Sie können die Speicherung der Cookies durch eine entsprechende Einstellung Ihrer Browser-Software verhindern; wir weisen Sie jedoch darauf hin, dass Sie in diesem Fall gegebenenfalls nicht sämtliche Funktionen dieser Website vollumfänglich werden nutzen können. Sie können darüber hinaus die Erfassung der durch das Cookie erzeugten und auf Ihre Nutzung der Website bezogenen Daten (inkl. Ihrer IP-Adresse) an Google sowie die Verarbeitung dieser Daten durch Google verhindern, indem sie das unter dem folgenden Link verfügbare Browser-Plugin herunterladen und installieren: http://tools.google.com/dlpage/gaoptout?hl=de.

Datenschutzerklärung für die Nutzung von Google Adsense

Diese Website benutzt Google AdSense, einen Dienst zum Einbinden von Werbeanzeigen der Google Inc. ("Google"). Google AdSense verwendet sog. "Cookies", Textdateien, die auf Ihrem Computer gespeichert werden und die eine Analyse der Benutzung der Website ermöglicht. Google AdSense verwendet auch so genannte Web Beacons (unsichtbare Grafiken). Durch diese Web Beacons können Informationen wie der Besucherverkehr auf diesen Seiten ausgewertet werden.

Die durch Cookies und Web Beacons erzeugten Informationen über die Benutzung dieser Website (einschließlich Ihrer IP-Adresse) und Auslieferung von Werbeformaten werden an einen Server von Google in den USA übertragen und dort gespeichert. Diese Informationen können von Google an Vertragspartner von Google weiter gegeben werden. Google wird Ihre IP-Adresse jedoch nicht mit anderen von Ihnen gespeicherten Daten zusammenführen.

Sie können die Installation der Cookies durch eine entsprechende Einstellung Ihrer Browser Software verhindern; wir weisen Sie jedoch darauf hin, dass Sie in diesem Fall gegebenenfalls nicht sämtliche Funktionen dieser Website voll umfänglich nutzen können. Durch die Nutzung dieser Website erklären Sie sich mit der Bearbeitung der über Sie erhobenen Daten durch Google in der zuvor beschriebenen Art und Weise und zu dem zuvor benannten Zweck einverstanden.

Datenschutzerklärung für die Nutzung von Google +1

Erfassung und Weitergabe von Informationen:
+Mithilfe der Google +1-Schaltfläche können Sie Informationen weltweit veröffentlichen. über die Google +1-Schaltfläche erhalten Sie und andere Nutzer personalisierte Inhalte von Google und unseren Partnern. Google speichert sowohl die Information, dass Sie für einen Inhalt +1 gegeben haben, als auch Informationen über die Seite, die Sie beim Klicken auf +1 angesehen haben. Ihre +1 können als Hinweise zusammen mit Ihrem Profilnamen und Ihrem Foto in Google-Diensten, wie etwa in Suchergebnissen oder in Ihrem Google-Profil, oder an anderen Stellen auf Websites und Anzeigen im Internet eingeblendet werden.
+Google zeichnet Informationen über Ihre +1-Aktivitäten auf, um die Google-Dienste für Sie und andere zu verbessern. Um die Google +1-Schaltfläche verwenden zu können, benötigen Sie ein weltweit sichtbares, öffentliches Google-Profil, das zumindest den für das Profil gewählten Namen enthalten muss. Dieser Name wird in allen Google-Diensten verwendet. In manchen Fällen kann dieser Name auch einen anderen Namen ersetzen, den Sie beim Teilen von Inhalten über Ihr Google-Konto verwendet haben. Die Identität Ihres Google-Profils kann Nutzern angezeigt werden, die Ihre E-Mail-Adresse kennen oder über andere identifizierende Informationen von Ihnen verfügen.

Verwendung der erfassten Informationen:
+Neben den oben erläuterten Verwendungszwecken werden die von Ihnen bereitgestellten Informationen gemäß den geltenden Google-Datenschutzbestimmungen genutzt. Google veröffentlicht möglicherweise zusammengefasste Statistiken über die +1-Aktivitäten der Nutzer bzw. gibt diese an Nutzer und Partner weiter, wie etwa Publisher, Inserenten oder verbundene Websites.

Datenschutzerklärung für die Nutzung von Twitter

Auf unseren Seiten sind Funktionen des Dienstes Twitter eingebunden. Diese Funktionen werden angeboten durch die Twitter Inc., Twitter, Inc. 1355 Market St, Suite 900, San Francisco, CA 94103, USA. Durch das Benutzen von Twitter und der Funktion "Re-Tweet" werden die von Ihnen besuchten Webseiten mit Ihrem Twitter-Account verknüpft und anderen Nutzern bekannt gegeben. Dabei werden auch Daten an Twitter übertragen.

Wir weisen darauf hin, dass wir als Anbieter der Seiten keine Kenntnis vom Inhalt der übermittelten Daten sowie deren Nutzung durch Twitter erhalten. Weitere Informationen hierzu finden Sie in der Datenschutzerklärung von Twitter unter http://twitter.com/privacy.

Ihre Datenschutzeinstellungen bei Twitter können Sie in den Konto-Einstellungen unter http://twitter.com/account/settings ändern.

Quellen: eRecht24 Datenschutzerklärung, eRecht24 Datenschutzerklärung für Facebook, Datenschutzerklärung Google Analytics, Google Adsense Datenschutzerklärung, Google +1 Bedingungen, Datenschutzerklärung für Twitter

© by Melchior Jascha Kannengießer
\ No newline at end of file diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 0000000..9f15191 Binary files /dev/null and b/favicon.ico differ diff --git a/impressum/_payload.json b/impressum/_payload.json new file mode 100644 index 0000000..12fe856 --- /dev/null +++ b/impressum/_payload.json @@ -0,0 +1 @@ +[{"data":1,"prerenderedAt":199},["ShallowReactive",2],{"impressum":3},{"id":4,"title":5,"body":6,"description":12,"extension":156,"head":157,"meta":194,"navigation":195,"path":196,"seo":197,"stem":12,"__hash__":198},"pages/impressum.md","Impressum",{"type":7,"value":8,"toc":143},"minimark",[9,13,18,29,33,80,84,90,101,105,110,113,117,120,124,127],[10,11,5],"h1",{"id":12},"impressum",[14,15,17],"h2",{"id":16},"angaben-gemäß-5-tmg","Angaben gemäß § 5 TMG",[19,20,21,22,25,26,28],"p",{},"Melchior Kannengießer",[23,24],"br",{},"\nLimmerstr. 79",[23,27],{},"\n30451 Hannover",[14,30,32],{"id":31},"kontakt","Kontakt",[34,35,36,48],"table",{},[37,38,39],"thead",{},[40,41,42,45],"tr",{},[43,44],"th",{},[43,46],{"align":47},"center",[49,50,51,60,68],"tbody",{},[40,52,53,57],{},[54,55,56],"td",{},"Telefon:",[54,58,59],{"align":47},"0511-65519466",[40,61,62,65],{},[54,63,64],{},"Telefax:",[54,66,67],{"align":47},"0511-51517391",[40,69,70,73],{},[54,71,72],{},"E-Mail:",[54,74,75],{"align":47},[76,77,79],"a",{"href":78},"mailto:info@mjkatweb.de","info@mjkatweb.de",[14,81,83],{"id":82},"verantwortlich-für-den-inhalt-nach-55-abs-2-rstv","Verantwortlich für den Inhalt nach § 55 Abs. 2 RStV",[19,85,21,86,25,88,28],{},[23,87],{},[23,89],{},[19,91,92,93],{},"Quelle: ",[94,95,96],"em",{},[76,97,98],{"href":98,"rel":99,":rel":100},"http://www.e-recht24.de",[100],"nofollow",[14,102,104],{"id":103},"haftungsausschluss","Haftungsausschluss",[106,107,109],"h3",{"id":108},"haftung-für-inhalte","Haftung für Inhalte",[19,111,112],{},"Als Diensteanbieter sind wir gemäß § 7 Abs.1 TMG für eigene Inhalte auf diesen Seiten nach den allgemeinen Gesetzen verantwortlich. Nach §§ 8 bis 10 TMG sind wir als Diensteanbieter jedoch nicht verpflichtet, übermittelte oder gespeicherte fremde Informationen zu überwachen oder nach Umständen zu forschen, die auf eine rechtswidrige Tätigkeit hinweisen. Verpflichtungen zur Entfernung oder Sperrung der Nutzung von Informationen nach den allgemeinen Gesetzen bleiben hiervon unberührt. Eine diesbezügliche Haftung ist jedoch erst ab dem Zeitpunkt der Kenntnis einer konkreten Rechtsverletzung möglich. Bei Bekanntwerden von entsprechenden Rechtsverletzungen werden wir diese Inhalte umgehend entfernen.",[106,114,116],{"id":115},"haftung-für-links","Haftung für Links",[19,118,119],{},"Unser Angebot enthält Links zu externen Webseiten Dritter, auf deren Inhalte wir keinen Einfluss haben. Deshalb können wir für diese fremden Inhalte auch keine Gewähr übernehmen. Für die Inhalte der verlinkten Seiten ist stets der jeweilige Anbieter oder Betreiber der Seiten verantwortlich. Die verlinkten Seiten wurden zum Zeitpunkt der Verlinkung auf mögliche Rechtsverstöße überprüft. Rechtswidrige Inhalte waren zum Zeitpunkt der Verlinkung nicht erkennbar. Eine permanente inhaltliche Kontrolle der verlinkten Seiten ist jedoch ohne konkrete Anhaltspunkte einer Rechtsverletzung nicht zumutbar. Bei Bekanntwerden von Rechtsverletzungen werden wir derartige Links umgehend entfernen.",[106,121,123],{"id":122},"urheberrecht","Urheberrecht",[19,125,126],{},"Die durch die Seitenbetreiber erstellten Inhalte und Werke auf diesen Seiten unterliegen dem deutschen Urheberrecht. Die Vervielfältigung, Bearbeitung, Verbreitung und jede Art der Verwertung außerhalb der Grenzen des Urheberrechtes bedürfen der schriftlichen Zustimmung des jeweiligen Autors bzw. Erstellers. Downloads und Kopien dieser Seite sind nur für den privaten, nicht kommerziellen Gebrauch gestattet. Soweit die Inhalte auf dieser Seite nicht vom Betreiber erstellt wurden, werden die Urheberrechte Dritter beachtet. Insbesondere werden Inhalte Dritter als solche gekennzeichnet. Sollten Sie trotzdem auf eine Urheberrechtsverletzung aufmerksam werden, bitten wir um einen entsprechenden Hinweis. Bei Bekanntwerden von Rechtsverletzungen werden wir derartige Inhalte umgehend entfernen.",[19,128,129],{},[94,130,131,132,138,139,142],{},"Quellen: ",[76,133,137],{"href":134,"rel":135,":target":136},"http://www.e-recht24.de/muster-disclaimer.html",[100],"_blank","Disclaimer"," von eRecht24, dem Portal zum Internetrecht von Rechtsanwalt Sören Siebert, ",[76,140,137],{"href":134,"rel":141,":target":136},[100]," von eRecht24, dem Portal zum Internetrecht von Rechtsanwalt Sören Siebert",{"title":144,"searchDepth":145,"depth":145,"links":146},"",2,[147,148,149,150],{"id":16,"depth":145,"text":17},{"id":31,"depth":145,"text":32},{"id":82,"depth":145,"text":83},{"id":103,"depth":145,"text":104,"children":151},[152,154,155],{"id":108,"depth":153,"text":109},3,{"id":115,"depth":153,"text":116},{"id":122,"depth":153,"text":123},"md",{"htmlAttrs":158,"link":160,"meta":165},{"lang":159},"en",[161],{"rel":162,"type":163,"href":164},"icon","mange/x-icon","/favicon.ico",[166,168,171,173,176,178,181,184,186,188,191],{"name":167,"content":12},"keywords",{"name":169,"content":170},"robots","index, follow",{"name":172,"content":21},"author",{"name":174,"content":175},"og:title","mjk @ web - impressum",{"name":177,"content":12},"og:description",{"name":179,"content":180},"og:image","/logo_518x270.png",{"name":182,"content":183},"og:url","http://www.mjkweb.de",{"name":185,"content":175},"twitter:title",{"name":187,"content":12},"twitter:description",{"name":189,"content":190},"twitter:image","/logo_200x200.png",{"name":192,"content":193},"twitter:card","summary",{},true,"/impressum",{"title":5,"description":12},"6fNVUTQbhdL5-qO2Zw7082sEst2RYGa1ycGVAZQe3vo",1775492953062] \ No newline at end of file diff --git a/impressum/index.html b/impressum/index.html new file mode 100644 index 0000000..d085f53 --- /dev/null +++ b/impressum/index.html @@ -0,0 +1,5 @@ +Impressum

Impressum

Angaben gemäß § 5 TMG

Melchior Kannengießer
+Limmerstr. 79
+30451 Hannover

Kontakt

Telefon:0511-65519466
Telefax:0511-51517391
E-Mail:info@mjkatweb.de

Verantwortlich für den Inhalt nach § 55 Abs. 2 RStV

Melchior Kannengießer
+Limmerstr. 79
+30451 Hannover

Quelle: http://www.e-recht24.de

Haftungsausschluss

Haftung für Inhalte

Als Diensteanbieter sind wir gemäß § 7 Abs.1 TMG für eigene Inhalte auf diesen Seiten nach den allgemeinen Gesetzen verantwortlich. Nach §§ 8 bis 10 TMG sind wir als Diensteanbieter jedoch nicht verpflichtet, übermittelte oder gespeicherte fremde Informationen zu überwachen oder nach Umständen zu forschen, die auf eine rechtswidrige Tätigkeit hinweisen. Verpflichtungen zur Entfernung oder Sperrung der Nutzung von Informationen nach den allgemeinen Gesetzen bleiben hiervon unberührt. Eine diesbezügliche Haftung ist jedoch erst ab dem Zeitpunkt der Kenntnis einer konkreten Rechtsverletzung möglich. Bei Bekanntwerden von entsprechenden Rechtsverletzungen werden wir diese Inhalte umgehend entfernen.

Unser Angebot enthält Links zu externen Webseiten Dritter, auf deren Inhalte wir keinen Einfluss haben. Deshalb können wir für diese fremden Inhalte auch keine Gewähr übernehmen. Für die Inhalte der verlinkten Seiten ist stets der jeweilige Anbieter oder Betreiber der Seiten verantwortlich. Die verlinkten Seiten wurden zum Zeitpunkt der Verlinkung auf mögliche Rechtsverstöße überprüft. Rechtswidrige Inhalte waren zum Zeitpunkt der Verlinkung nicht erkennbar. Eine permanente inhaltliche Kontrolle der verlinkten Seiten ist jedoch ohne konkrete Anhaltspunkte einer Rechtsverletzung nicht zumutbar. Bei Bekanntwerden von Rechtsverletzungen werden wir derartige Links umgehend entfernen.

Urheberrecht

Die durch die Seitenbetreiber erstellten Inhalte und Werke auf diesen Seiten unterliegen dem deutschen Urheberrecht. Die Vervielfältigung, Bearbeitung, Verbreitung und jede Art der Verwertung außerhalb der Grenzen des Urheberrechtes bedürfen der schriftlichen Zustimmung des jeweiligen Autors bzw. Erstellers. Downloads und Kopien dieser Seite sind nur für den privaten, nicht kommerziellen Gebrauch gestattet. Soweit die Inhalte auf dieser Seite nicht vom Betreiber erstellt wurden, werden die Urheberrechte Dritter beachtet. Insbesondere werden Inhalte Dritter als solche gekennzeichnet. Sollten Sie trotzdem auf eine Urheberrechtsverletzung aufmerksam werden, bitten wir um einen entsprechenden Hinweis. Bei Bekanntwerden von Rechtsverletzungen werden wir derartige Inhalte umgehend entfernen.

Quellen: Disclaimer von eRecht24, dem Portal zum Internetrecht von Rechtsanwalt Sören Siebert, Disclaimer von eRecht24, dem Portal zum Internetrecht von Rechtsanwalt Sören Siebert

© by Melchior Jascha Kannengießer
\ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..39a88ce --- /dev/null +++ b/index.html @@ -0,0 +1 @@ +mjk @ web

Blog Posts

This are my recent blog posts

Dec 29, 2025

Upgrading from Nuxt 3 to Nuxt 4

It's Christmas time, so I have time to code. Nuxt 3 reaches its end of life in January 2026, and Nuxt 4 is the new kid on the block. So I decided to upgrade my projects to Nuxt 4. Since my blog is already configured to be Nuxt 4 ready and it's just a simple blog with some markdown files, it should be a no-brainer, right?

Well, as it turns out, even projects that are already "Nuxt 4 ready" can throw unexpected challenges at you. In this blog post, I'll document my experience upgrading three projects to Nuxt 4: my personal blog (already Nuxt 4 ready), a web business card/gallery project (also already Nuxt 4 ready), and Linxz—a more complex application that required a full migration.

The irony? Most of the issues I encountered were with the projects that were supposedly already ready for Nuxt 4. This upgrade wasn't just about updating dependencies—it involved dealing with breaking changes in Nuxt Content 3.x, fixing TypeScript configuration issues, and working around problems with dark mode templates and Open Graph metadata.

In this post, I'll walk you through the entire process, including the challenges I faced and how I solved them. Whether you're upgrading a single project or multiple projects like I did, I hope this honest account will help you avoid some of the pitfalls I encountered.

Categories: programming, Tags: programming, coding, vue, nuxt,
read more
Jul 11, 2025

Upgrading a Nuxt 2 Project to Nuxt 3

Web technologies never stand still. With each new version, frameworks bring improvements in performance, developer experience, and long-term maintainability. That’s why I’ve decided to upgrade an existing Nuxt 2 project of mine to Nuxt 3.

The project in question is a small, personal website—somewhere between an online gallery and a digital business card—created to showcase my father’s artwork. It’s a relatively simple Nuxt 2 application, but it still offers a great opportunity to explore what’s involved in bringing a real-world project up to date with the latest version of Nuxt.

Nuxt 3 is built on top of Vue 3 and introduces a modern architecture that includes first-class support for the Composition API, a new

This upgrade isn’t just about staying current—it’s a chance to revisit old code, rethink the structure, and embrace best practices that have emerged since the original version was built.

In this blog post, I’ll document my migration process as it unfolds—step by step. The goal is to provide a transparent look at what’s involved in moving from Nuxt 2 to Nuxt 3, including the challenges I run into and how I solve them. Whether you're working on a personal project or maintaining something in production, I hope this will serve as a useful and honest guide.

Categories: programming, Tags: programming, coding, vue, nuxt,
read more
Dec 28, 2024

Switch from Jekyll to Nuxt

I haven't use ruby for a while but more and more js/ts (especially vue) so i decided to switch from jekyll to nuxt, as I also like the benefits of autoloading components and server-side rendering with Nuxt.

Also, in Nuxt, using NuxtContent, like in jekyll, I can save my content as markdown, which is then converted to html.

so the journey begins

Categories: programming, Tags: programming, coding, vue, nuxt, jekyll,
read more
Feb 12, 2023

react-navbar

Well, I know it's been a wile that i write something.

I actually intended to program a react-native app. Then I thought it wouldn't hurt to refresh my knowledge about react-js before I get into react-native.

And this is where the story begins.

Categories: programming, Tags: coding, programming, react,
read more
Mar 11, 2018

PeaceDC @ UJZ Korn

Peace Development Crew // S.P. Music - Live Konzert + Party

concerts mixed by

Friday, March 23 21:00 - 6:00

a more info

Categories: concerts, Tags: PeaceDC, peacedevelopmentcrew, ras-or, Live, concert, UJZ Korn,
read more
Dec 12, 2017

update

It's been a long time since I posted anything here. Nothing happened since 2014! That should change now. I'll integrate tags in the near future and continue to post this and that, but focus on some highlights. Well, and hopefully I'll add the social media links soon. ;-)

Jun 21, 2014

GD Map - A tool to visualize disk space

GdMap is a tool which allows to visualize disk space. Ever wondered why your hard disk is full or what directory and files take up most of the space? With GdMap these questions can be answered quickly.

Feb 20, 2014

28.02.14 Peace DC @ Lux Club Hannover

Peace DC zurück auf der Bühne. Mit neuen Songs und einigen neuen Gesichtern zeigt sich die Band wieder. Der Bassist und Rapper Koro Boni aus der Elfenbeinküste präsentiert sich mit 2 Stücken am Mikrofon. An der Gitarre ist Cjah, der auch als Sänger und Produzent in der hannoverschen Reggaeszene bekannt ist.

Christina Korn wird mit ihrer souligen Stimme den Backgroundchor unterstützen.

Von Reggae zu Dancehall, Latin, Hip Hop und Soca wirds heiss auf der Bühne.

Categories: concerts, Tags: concerts, Peace DC, Lux Club,
read more
© by Melchior Jascha Kannengießer
\ No newline at end of file diff --git a/links/_payload.json b/links/_payload.json new file mode 100644 index 0000000..98ee0cc --- /dev/null +++ b/links/_payload.json @@ -0,0 +1 @@ +[{"data":1,"prerenderedAt":197},["ShallowReactive",2],{"links":3,"link-sets":65},{"id":4,"title":5,"body":6,"description":20,"extension":21,"head":22,"meta":60,"navigation":61,"path":62,"seo":63,"stem":12,"__hash__":64},"pages/links.md","Links",{"type":7,"value":8,"toc":16},"minimark",[9,13],[10,11,5],"h1",{"id":12},"links",[14,15],"link-list",{},{"title":17,"searchDepth":18,"depth":18,"links":19},"",2,[],"here you can find all links to my projects, social media and more","md",{"htmlAttrs":23,"link":25,"meta":30},{"lang":24},"en",[26],{"rel":27,"type":28,"href":29},"icon","mange/x-icon","/favicon.ico",[31,33,36,39,42,44,47,50,52,54,57],{"name":32,"content":12},"keywords",{"name":34,"content":35},"robots","index, follow",{"name":37,"content":38},"author","Melchior Kannengießer",{"name":40,"content":41},"og:title","mjk @ web - links",{"name":43,"content":20},"og:description",{"name":45,"content":46},"og:image","/logo_518x270.png",{"name":48,"content":49},"og:url","https://mjkatgithub.github.io/links",{"name":51,"content":41},"twitter:title",{"name":53,"content":20},"twitter:description",{"name":55,"content":56},"twitter:image","/logo_200x200.png",{"name":58,"content":59},"twitter:card","summary",{},true,"/links",{"title":5,"description":20},"fKgtFMOY4Dvvd30rzXScKyNmRBXD33wNeLSD3CRXaYE",{"id":66,"extension":67,"meta":68,"stem":195,"__hash__":196},"data/link-sets.json","json",{"path":69,"link-sets":70,"body":164,"title":194},"/link-sets",[71,122,150],{"title":72,"links":73},"My Links",[74,78,82,86,90,94,98,102,106,110,114,118],{"title":75,"url":76,"thumbnail":77},"buy me something nice","https://www.amazon.de/hz/wishlist/ls/27M80R0N4QZP1?ref_=wl_share","/assets/icons/buy-me-something-nice.png",{"title":79,"url":80,"thumbnail":81},"mka @ matrix","https://matrix.to/#/@mkaatmtrx:matrix.org","/assets/icons/matrix.png",{"title":83,"url":84,"thumbnail":85},"Discord","https://discord.gg/ZsKEmD22gt","none",{"title":87,"url":88,"thumbnail":89},"Youtube","https://www.youtube.com/@MelchiorKannengieer","/assets/icons/youtube48.png",{"title":91,"url":92,"thumbnail":93},"Instagram","https://www.instagram.com/m_thefirst/","/assets/icons/instagram48.png",{"title":95,"url":96,"thumbnail":97},"Twitch","https://www.twitch.tv/melcorethefirst3","/assets/icons/twitch.png",{"title":99,"url":100,"thumbnail":101},"Github","https://github.com/mjkatgithub","/assets/icons/github48.png",{"title":103,"url":104,"thumbnail":105},"Facebook","https://www.facebook.com/melcorethefirst/","/assets/icons/facebook48.png",{"title":107,"url":108,"thumbnail":109},"Mastodon","https://mastodon.social/@mjkatweb_aka_bot007","/assets/icons/mastodon.png",{"title":111,"url":112,"thumbnail":113},"Reddit","https://www.reddit.com/user/sudoKnechtRootRecht/","/assets/icons/reddit48.png",{"title":115,"url":116,"thumbnail":117},"Linktree","https://linktr.ee/mjkatweb","/assets/icons/linktree.png",{"title":119,"url":120,"thumbnail":121},"steemit","https://steemit.com/@mjkatweb","/assets/icons/steemit.png",{"title":123,"links":124},"Family & Frinds",[125,129,133,137,140,143,147],{"title":126,"url":127,"thumbnail":128},"Orgel Kanne","https://orgelkanne.de/","/assets/icons/fuk.png",{"title":130,"url":131,"thumbnail":132},"Kunst Kanne","http://www.kunstkanne.de/","/assets/icons/kunst-kanne.png",{"title":134,"url":135,"thumbnail":136},"Nine Medicines","http://www.ninemedicines.de/","/assets/icons/nine.png",{"title":138,"url":139,"thumbnail":17},"jnfechtig.de","http://www.jnfechtig.de/",{"title":141,"url":142,"thumbnail":17},"Rechtsanwaltskanzlei Uhlich","http://www.kanzlei-uhlich.de/",{"title":144,"url":145,"thumbnail":146},"Peac Development Crew","https://peacedevelopmentcrew.de/","/assets/icons/pdc.png",{"title":148,"url":149,"thumbnail":17},"Batida Deloco","http://www.batidadeloco.de/",{"title":151,"links":152},"Awesome Stuff i found on the internet",[153,157,161],{"title":154,"url":155,"thumbnail":156},"fediverse.info","https://fediverse.info/","/assets/icons/fediverse.info.png",{"title":158,"url":159,"thumbnail":160},"di.day","https://di.day/","/assets/icons/di.day.png",{"title":162,"url":163,"thumbnail":17},"dub-siren.com","https://dub-siren.com/",{"link-sets":165},[166,180,189],{"title":72,"links":167},[168,169,170,171,172,173,174,175,176,177,178,179],{"title":75,"url":76,"thumbnail":77},{"title":79,"url":80,"thumbnail":81},{"title":83,"url":84,"thumbnail":85},{"title":87,"url":88,"thumbnail":89},{"title":91,"url":92,"thumbnail":93},{"title":95,"url":96,"thumbnail":97},{"title":99,"url":100,"thumbnail":101},{"title":103,"url":104,"thumbnail":105},{"title":107,"url":108,"thumbnail":109},{"title":111,"url":112,"thumbnail":113},{"title":115,"url":116,"thumbnail":117},{"title":119,"url":120,"thumbnail":121},{"title":123,"links":181},[182,183,184,185,186,187,188],{"title":126,"url":127,"thumbnail":128},{"title":130,"url":131,"thumbnail":132},{"title":134,"url":135,"thumbnail":136},{"title":138,"url":139,"thumbnail":17},{"title":141,"url":142,"thumbnail":17},{"title":144,"url":145,"thumbnail":146},{"title":148,"url":149,"thumbnail":17},{"title":151,"links":190},[191,192,193],{"title":154,"url":155,"thumbnail":156},{"title":158,"url":159,"thumbnail":160},{"title":162,"url":163,"thumbnail":17},"Link Sets","link-sets","AdJUotx4T4zrmuhBOwnjDhSAm-0faZItEotnmO-6jQw",1775492953061] \ No newline at end of file diff --git a/links/index.html b/links/index.html new file mode 100644 index 0000000..97e69ed --- /dev/null +++ b/links/index.html @@ -0,0 +1 @@ +Links
\ No newline at end of file diff --git a/logo_200x200.png b/logo_200x200.png new file mode 100644 index 0000000..193c888 Binary files /dev/null and b/logo_200x200.png differ diff --git a/logo_518x270.png b/logo_518x270.png new file mode 100644 index 0000000..9301e43 Binary files /dev/null and b/logo_518x270.png differ diff --git a/projects/_payload.json b/projects/_payload.json new file mode 100644 index 0000000..f87a684 --- /dev/null +++ b/projects/_payload.json @@ -0,0 +1 @@ +[{"data":1,"prerenderedAt":1723},["ShallowReactive",2],{"projects":3,"$f0Y__r1POnI2teNqPjPINrSKkdXybvk8ab_x8YgUoLDk":77,"$fLbmff70RxWbxcuWpbWwOAUmH--6Jpv2F9tqGz0gtZto":79},{"id":4,"title":5,"body":6,"description":32,"extension":33,"head":34,"meta":72,"navigation":73,"path":74,"seo":75,"stem":12,"__hash__":76},"pages/projects.md","Projects",{"type":7,"value":8,"toc":28},"minimark",[9,13,25],[10,11,5],"h1",{"id":12},"projects",[14,15,16,17],"p",{},"Check out some of my recent projects on ",[18,19,24],"a",{":target":20,"href":21,"rel":22},"_blank","https://github.com/mjkatgithub",[23],"nofollow","GitHub!",[26,27],"project-list",{},{"title":29,"searchDepth":30,"depth":30,"links":31},"",2,[],"Check out some of my recent projects on GitHub!","md",{"htmlAttrs":35,"link":37,"meta":42},{"lang":36},"en",[38],{"rel":39,"type":40,"href":41},"icon","mange/x-icon","/favicon.ico",[43,45,48,51,54,56,59,62,64,66,69],{"name":44,"content":5},"keywords",{"name":46,"content":47},"robots","index, follow",{"name":49,"content":50},"author","Melchior Kannengießer",{"name":52,"content":53},"og:title","mjk @ web - Projects",{"name":55,"content":32},"og:description",{"name":57,"content":58},"og:image","/logo_518x270.png",{"name":60,"content":61},"og:url","https://mjkatgithub.github.io/projects",{"name":63,"content":53},"twitter:title",{"name":65,"content":32},"twitter:description",{"name":67,"content":68},"twitter:image","/logo_200x200.png",{"name":70,"content":71},"twitter:card","summary",{},true,"/projects",{"title":5,"description":32},"GfAXJ5mdl_kxtwpe19Tvoh68yIXe3MV1zdlfL4JnJCI",[78],"mcp-registry",[80,160,215,267,320,383,438,497,550,604,663,716,769,821,874,932,984,1036,1089,1142,1194,1247,1301,1354,1407,1459,1513,1567,1618,1672],{"id":81,"node_id":82,"name":83,"full_name":84,"private":85,"owner":86,"html_url":103,"description":104,"fork":73,"url":105,"forks_url":106,"keys_url":107,"collaborators_url":108,"teams_url":109,"hooks_url":110,"issue_events_url":111,"events_url":112,"assignees_url":113,"branches_url":114,"tags_url":115,"blobs_url":116,"git_tags_url":117,"git_refs_url":118,"trees_url":119,"statuses_url":120,"languages_url":121,"stargazers_url":122,"contributors_url":123,"subscribers_url":124,"subscription_url":125,"commits_url":126,"git_commits_url":127,"comments_url":128,"issue_comment_url":129,"contents_url":130,"compare_url":131,"merges_url":132,"archive_url":133,"downloads_url":134,"issues_url":135,"pulls_url":136,"milestones_url":137,"notifications_url":138,"labels_url":139,"releases_url":140,"deployments_url":141,"created_at":142,"updated_at":143,"pushed_at":144,"git_url":145,"ssh_url":146,"clone_url":147,"svn_url":103,"homepage":148,"size":149,"stargazers_count":150,"watchers_count":150,"language":104,"has_issues":85,"has_projects":73,"has_downloads":73,"has_wiki":73,"has_pages":85,"has_discussions":85,"forks_count":150,"mirror_url":104,"archived":85,"disabled":85,"open_issues_count":150,"license":151,"allow_forking":73,"is_template":85,"web_commit_signoff_required":85,"has_pull_requests":73,"pull_request_creation_policy":157,"topics":158,"visibility":102,"forks":150,"open_issues":150,"watchers":150,"default_branch":159},717567978,"R_kgDOKsU36g","AutoGPT","mjkatgithub/AutoGPT",false,{"login":87,"id":88,"node_id":89,"avatar_url":90,"gravatar_id":29,"url":91,"html_url":21,"followers_url":92,"following_url":93,"gists_url":94,"starred_url":95,"subscriptions_url":96,"organizations_url":97,"repos_url":98,"events_url":99,"received_events_url":100,"type":101,"user_view_type":102,"site_admin":85},"mjkatgithub",18490178,"MDQ6VXNlcjE4NDkwMTc4","https://avatars.githubusercontent.com/u/18490178?v=4","https://api.github.com/users/mjkatgithub","https://api.github.com/users/mjkatgithub/followers","https://api.github.com/users/mjkatgithub/following{/other_user}","https://api.github.com/users/mjkatgithub/gists{/gist_id}","https://api.github.com/users/mjkatgithub/starred{/owner}{/repo}","https://api.github.com/users/mjkatgithub/subscriptions","https://api.github.com/users/mjkatgithub/orgs","https://api.github.com/users/mjkatgithub/repos","https://api.github.com/users/mjkatgithub/events{/privacy}","https://api.github.com/users/mjkatgithub/received_events","User","public","https://github.com/mjkatgithub/AutoGPT",null,"https://api.github.com/repos/mjkatgithub/AutoGPT","https://api.github.com/repos/mjkatgithub/AutoGPT/forks","https://api.github.com/repos/mjkatgithub/AutoGPT/keys{/key_id}","https://api.github.com/repos/mjkatgithub/AutoGPT/collaborators{/collaborator}","https://api.github.com/repos/mjkatgithub/AutoGPT/teams","https://api.github.com/repos/mjkatgithub/AutoGPT/hooks","https://api.github.com/repos/mjkatgithub/AutoGPT/issues/events{/number}","https://api.github.com/repos/mjkatgithub/AutoGPT/events","https://api.github.com/repos/mjkatgithub/AutoGPT/assignees{/user}","https://api.github.com/repos/mjkatgithub/AutoGPT/branches{/branch}","https://api.github.com/repos/mjkatgithub/AutoGPT/tags","https://api.github.com/repos/mjkatgithub/AutoGPT/git/blobs{/sha}","https://api.github.com/repos/mjkatgithub/AutoGPT/git/tags{/sha}","https://api.github.com/repos/mjkatgithub/AutoGPT/git/refs{/sha}","https://api.github.com/repos/mjkatgithub/AutoGPT/git/trees{/sha}","https://api.github.com/repos/mjkatgithub/AutoGPT/statuses/{sha}","https://api.github.com/repos/mjkatgithub/AutoGPT/languages","https://api.github.com/repos/mjkatgithub/AutoGPT/stargazers","https://api.github.com/repos/mjkatgithub/AutoGPT/contributors","https://api.github.com/repos/mjkatgithub/AutoGPT/subscribers","https://api.github.com/repos/mjkatgithub/AutoGPT/subscription","https://api.github.com/repos/mjkatgithub/AutoGPT/commits{/sha}","https://api.github.com/repos/mjkatgithub/AutoGPT/git/commits{/sha}","https://api.github.com/repos/mjkatgithub/AutoGPT/comments{/number}","https://api.github.com/repos/mjkatgithub/AutoGPT/issues/comments{/number}","https://api.github.com/repos/mjkatgithub/AutoGPT/contents/{+path}","https://api.github.com/repos/mjkatgithub/AutoGPT/compare/{base}...{head}","https://api.github.com/repos/mjkatgithub/AutoGPT/merges","https://api.github.com/repos/mjkatgithub/AutoGPT/{archive_format}{/ref}","https://api.github.com/repos/mjkatgithub/AutoGPT/downloads","https://api.github.com/repos/mjkatgithub/AutoGPT/issues{/number}","https://api.github.com/repos/mjkatgithub/AutoGPT/pulls{/number}","https://api.github.com/repos/mjkatgithub/AutoGPT/milestones{/number}","https://api.github.com/repos/mjkatgithub/AutoGPT/notifications{?since,all,participating}","https://api.github.com/repos/mjkatgithub/AutoGPT/labels{/name}","https://api.github.com/repos/mjkatgithub/AutoGPT/releases{/id}","https://api.github.com/repos/mjkatgithub/AutoGPT/deployments","2023-11-11T21:31:08Z","2025-09-29T06:26:48Z","2023-11-11T19:47:49Z","git://github.com/mjkatgithub/AutoGPT.git","git@github.com:mjkatgithub/AutoGPT.git","https://github.com/mjkatgithub/AutoGPT.git","https://agpt.co",102924,0,{"key":152,"name":153,"spdx_id":154,"url":155,"node_id":156},"mit","MIT License","MIT","https://api.github.com/licenses/mit","MDc6TGljZW5zZTEz","all",[],"master",{"id":161,"node_id":162,"name":163,"full_name":164,"private":85,"owner":165,"html_url":166,"description":167,"fork":73,"url":168,"forks_url":169,"keys_url":170,"collaborators_url":171,"teams_url":172,"hooks_url":173,"issue_events_url":174,"events_url":175,"assignees_url":176,"branches_url":177,"tags_url":178,"blobs_url":179,"git_tags_url":180,"git_refs_url":181,"trees_url":182,"statuses_url":183,"languages_url":184,"stargazers_url":185,"contributors_url":186,"subscribers_url":187,"subscription_url":188,"commits_url":189,"git_commits_url":190,"comments_url":191,"issue_comment_url":192,"contents_url":193,"compare_url":194,"merges_url":195,"archive_url":196,"downloads_url":197,"issues_url":198,"pulls_url":199,"milestones_url":200,"notifications_url":201,"labels_url":202,"releases_url":203,"deployments_url":204,"created_at":205,"updated_at":206,"pushed_at":207,"git_url":208,"ssh_url":209,"clone_url":210,"svn_url":166,"homepage":211,"size":212,"stargazers_count":150,"watchers_count":150,"language":213,"has_issues":85,"has_projects":73,"has_downloads":73,"has_wiki":73,"has_pages":85,"has_discussions":85,"forks_count":150,"mirror_url":104,"archived":85,"disabled":85,"open_issues_count":150,"license":104,"allow_forking":73,"is_template":85,"web_commit_signoff_required":85,"has_pull_requests":73,"pull_request_creation_policy":157,"topics":214,"visibility":102,"forks":150,"open_issues":150,"watchers":150,"default_branch":159},123948967,"MDEwOlJlcG9zaXRvcnkxMjM5NDg5Njc=","bad-kicky","mjkatgithub/bad-kicky",{"login":87,"id":88,"node_id":89,"avatar_url":90,"gravatar_id":29,"url":91,"html_url":21,"followers_url":92,"following_url":93,"gists_url":94,"starred_url":95,"subscriptions_url":96,"organizations_url":97,"repos_url":98,"events_url":99,"received_events_url":100,"type":101,"user_view_type":102,"site_admin":85},"https://github.com/mjkatgithub/bad-kicky","Just another discord bot","https://api.github.com/repos/mjkatgithub/bad-kicky","https://api.github.com/repos/mjkatgithub/bad-kicky/forks","https://api.github.com/repos/mjkatgithub/bad-kicky/keys{/key_id}","https://api.github.com/repos/mjkatgithub/bad-kicky/collaborators{/collaborator}","https://api.github.com/repos/mjkatgithub/bad-kicky/teams","https://api.github.com/repos/mjkatgithub/bad-kicky/hooks","https://api.github.com/repos/mjkatgithub/bad-kicky/issues/events{/number}","https://api.github.com/repos/mjkatgithub/bad-kicky/events","https://api.github.com/repos/mjkatgithub/bad-kicky/assignees{/user}","https://api.github.com/repos/mjkatgithub/bad-kicky/branches{/branch}","https://api.github.com/repos/mjkatgithub/bad-kicky/tags","https://api.github.com/repos/mjkatgithub/bad-kicky/git/blobs{/sha}","https://api.github.com/repos/mjkatgithub/bad-kicky/git/tags{/sha}","https://api.github.com/repos/mjkatgithub/bad-kicky/git/refs{/sha}","https://api.github.com/repos/mjkatgithub/bad-kicky/git/trees{/sha}","https://api.github.com/repos/mjkatgithub/bad-kicky/statuses/{sha}","https://api.github.com/repos/mjkatgithub/bad-kicky/languages","https://api.github.com/repos/mjkatgithub/bad-kicky/stargazers","https://api.github.com/repos/mjkatgithub/bad-kicky/contributors","https://api.github.com/repos/mjkatgithub/bad-kicky/subscribers","https://api.github.com/repos/mjkatgithub/bad-kicky/subscription","https://api.github.com/repos/mjkatgithub/bad-kicky/commits{/sha}","https://api.github.com/repos/mjkatgithub/bad-kicky/git/commits{/sha}","https://api.github.com/repos/mjkatgithub/bad-kicky/comments{/number}","https://api.github.com/repos/mjkatgithub/bad-kicky/issues/comments{/number}","https://api.github.com/repos/mjkatgithub/bad-kicky/contents/{+path}","https://api.github.com/repos/mjkatgithub/bad-kicky/compare/{base}...{head}","https://api.github.com/repos/mjkatgithub/bad-kicky/merges","https://api.github.com/repos/mjkatgithub/bad-kicky/{archive_format}{/ref}","https://api.github.com/repos/mjkatgithub/bad-kicky/downloads","https://api.github.com/repos/mjkatgithub/bad-kicky/issues{/number}","https://api.github.com/repos/mjkatgithub/bad-kicky/pulls{/number}","https://api.github.com/repos/mjkatgithub/bad-kicky/milestones{/number}","https://api.github.com/repos/mjkatgithub/bad-kicky/notifications{?since,all,participating}","https://api.github.com/repos/mjkatgithub/bad-kicky/labels{/name}","https://api.github.com/repos/mjkatgithub/bad-kicky/releases{/id}","https://api.github.com/repos/mjkatgithub/bad-kicky/deployments","2018-03-05T16:44:18Z","2018-03-05T16:44:54Z","2018-03-01T19:14:47Z","git://github.com/mjkatgithub/bad-kicky.git","git@github.com:mjkatgithub/bad-kicky.git","https://github.com/mjkatgithub/bad-kicky.git","https://kicky-home.herokuapp.com/",1223,"JavaScript",[],{"id":216,"node_id":217,"name":218,"full_name":219,"private":85,"owner":220,"html_url":221,"description":104,"fork":85,"url":222,"forks_url":223,"keys_url":224,"collaborators_url":225,"teams_url":226,"hooks_url":227,"issue_events_url":228,"events_url":229,"assignees_url":230,"branches_url":231,"tags_url":232,"blobs_url":233,"git_tags_url":234,"git_refs_url":235,"trees_url":236,"statuses_url":237,"languages_url":238,"stargazers_url":239,"contributors_url":240,"subscribers_url":241,"subscription_url":242,"commits_url":243,"git_commits_url":244,"comments_url":245,"issue_comment_url":246,"contents_url":247,"compare_url":248,"merges_url":249,"archive_url":250,"downloads_url":251,"issues_url":252,"pulls_url":253,"milestones_url":254,"notifications_url":255,"labels_url":256,"releases_url":257,"deployments_url":258,"created_at":259,"updated_at":260,"pushed_at":261,"git_url":262,"ssh_url":263,"clone_url":264,"svn_url":221,"homepage":29,"size":265,"stargazers_count":150,"watchers_count":150,"language":213,"has_issues":73,"has_projects":73,"has_downloads":73,"has_wiki":73,"has_pages":85,"has_discussions":85,"forks_count":150,"mirror_url":104,"archived":85,"disabled":85,"open_issues_count":150,"license":104,"allow_forking":73,"is_template":85,"web_commit_signoff_required":85,"has_pull_requests":73,"pull_request_creation_policy":157,"topics":266,"visibility":102,"forks":150,"open_issues":150,"watchers":150,"default_branch":159},190532070,"MDEwOlJlcG9zaXRvcnkxOTA1MzIwNzA=","beatGenerator","mjkatgithub/beatGenerator",{"login":87,"id":88,"node_id":89,"avatar_url":90,"gravatar_id":29,"url":91,"html_url":21,"followers_url":92,"following_url":93,"gists_url":94,"starred_url":95,"subscriptions_url":96,"organizations_url":97,"repos_url":98,"events_url":99,"received_events_url":100,"type":101,"user_view_type":102,"site_admin":85},"https://github.com/mjkatgithub/beatGenerator","https://api.github.com/repos/mjkatgithub/beatGenerator","https://api.github.com/repos/mjkatgithub/beatGenerator/forks","https://api.github.com/repos/mjkatgithub/beatGenerator/keys{/key_id}","https://api.github.com/repos/mjkatgithub/beatGenerator/collaborators{/collaborator}","https://api.github.com/repos/mjkatgithub/beatGenerator/teams","https://api.github.com/repos/mjkatgithub/beatGenerator/hooks","https://api.github.com/repos/mjkatgithub/beatGenerator/issues/events{/number}","https://api.github.com/repos/mjkatgithub/beatGenerator/events","https://api.github.com/repos/mjkatgithub/beatGenerator/assignees{/user}","https://api.github.com/repos/mjkatgithub/beatGenerator/branches{/branch}","https://api.github.com/repos/mjkatgithub/beatGenerator/tags","https://api.github.com/repos/mjkatgithub/beatGenerator/git/blobs{/sha}","https://api.github.com/repos/mjkatgithub/beatGenerator/git/tags{/sha}","https://api.github.com/repos/mjkatgithub/beatGenerator/git/refs{/sha}","https://api.github.com/repos/mjkatgithub/beatGenerator/git/trees{/sha}","https://api.github.com/repos/mjkatgithub/beatGenerator/statuses/{sha}","https://api.github.com/repos/mjkatgithub/beatGenerator/languages","https://api.github.com/repos/mjkatgithub/beatGenerator/stargazers","https://api.github.com/repos/mjkatgithub/beatGenerator/contributors","https://api.github.com/repos/mjkatgithub/beatGenerator/subscribers","https://api.github.com/repos/mjkatgithub/beatGenerator/subscription","https://api.github.com/repos/mjkatgithub/beatGenerator/commits{/sha}","https://api.github.com/repos/mjkatgithub/beatGenerator/git/commits{/sha}","https://api.github.com/repos/mjkatgithub/beatGenerator/comments{/number}","https://api.github.com/repos/mjkatgithub/beatGenerator/issues/comments{/number}","https://api.github.com/repos/mjkatgithub/beatGenerator/contents/{+path}","https://api.github.com/repos/mjkatgithub/beatGenerator/compare/{base}...{head}","https://api.github.com/repos/mjkatgithub/beatGenerator/merges","https://api.github.com/repos/mjkatgithub/beatGenerator/{archive_format}{/ref}","https://api.github.com/repos/mjkatgithub/beatGenerator/downloads","https://api.github.com/repos/mjkatgithub/beatGenerator/issues{/number}","https://api.github.com/repos/mjkatgithub/beatGenerator/pulls{/number}","https://api.github.com/repos/mjkatgithub/beatGenerator/milestones{/number}","https://api.github.com/repos/mjkatgithub/beatGenerator/notifications{?since,all,participating}","https://api.github.com/repos/mjkatgithub/beatGenerator/labels{/name}","https://api.github.com/repos/mjkatgithub/beatGenerator/releases{/id}","https://api.github.com/repos/mjkatgithub/beatGenerator/deployments","2019-06-06T07:04:52Z","2025-09-29T19:22:37Z","2020-06-03T21:34:36Z","git://github.com/mjkatgithub/beatGenerator.git","git@github.com:mjkatgithub/beatGenerator.git","https://github.com/mjkatgithub/beatGenerator.git",7,[],{"id":268,"node_id":269,"name":270,"full_name":271,"private":85,"owner":272,"html_url":273,"description":104,"fork":85,"url":274,"forks_url":275,"keys_url":276,"collaborators_url":277,"teams_url":278,"hooks_url":279,"issue_events_url":280,"events_url":281,"assignees_url":282,"branches_url":283,"tags_url":284,"blobs_url":285,"git_tags_url":286,"git_refs_url":287,"trees_url":288,"statuses_url":289,"languages_url":290,"stargazers_url":291,"contributors_url":292,"subscribers_url":293,"subscription_url":294,"commits_url":295,"git_commits_url":296,"comments_url":297,"issue_comment_url":298,"contents_url":299,"compare_url":300,"merges_url":301,"archive_url":302,"downloads_url":303,"issues_url":304,"pulls_url":305,"milestones_url":306,"notifications_url":307,"labels_url":308,"releases_url":309,"deployments_url":310,"created_at":311,"updated_at":312,"pushed_at":313,"git_url":314,"ssh_url":315,"clone_url":316,"svn_url":273,"homepage":29,"size":317,"stargazers_count":150,"watchers_count":150,"language":213,"has_issues":73,"has_projects":73,"has_downloads":73,"has_wiki":73,"has_pages":73,"has_discussions":85,"forks_count":150,"mirror_url":104,"archived":85,"disabled":85,"open_issues_count":318,"license":104,"allow_forking":73,"is_template":85,"web_commit_signoff_required":85,"has_pull_requests":73,"pull_request_creation_policy":157,"topics":319,"visibility":102,"forks":150,"open_issues":318,"watchers":150,"default_branch":159},207654322,"MDEwOlJlcG9zaXRvcnkyMDc2NTQzMjI=","dashboard","mjkatgithub/dashboard",{"login":87,"id":88,"node_id":89,"avatar_url":90,"gravatar_id":29,"url":91,"html_url":21,"followers_url":92,"following_url":93,"gists_url":94,"starred_url":95,"subscriptions_url":96,"organizations_url":97,"repos_url":98,"events_url":99,"received_events_url":100,"type":101,"user_view_type":102,"site_admin":85},"https://github.com/mjkatgithub/dashboard","https://api.github.com/repos/mjkatgithub/dashboard","https://api.github.com/repos/mjkatgithub/dashboard/forks","https://api.github.com/repos/mjkatgithub/dashboard/keys{/key_id}","https://api.github.com/repos/mjkatgithub/dashboard/collaborators{/collaborator}","https://api.github.com/repos/mjkatgithub/dashboard/teams","https://api.github.com/repos/mjkatgithub/dashboard/hooks","https://api.github.com/repos/mjkatgithub/dashboard/issues/events{/number}","https://api.github.com/repos/mjkatgithub/dashboard/events","https://api.github.com/repos/mjkatgithub/dashboard/assignees{/user}","https://api.github.com/repos/mjkatgithub/dashboard/branches{/branch}","https://api.github.com/repos/mjkatgithub/dashboard/tags","https://api.github.com/repos/mjkatgithub/dashboard/git/blobs{/sha}","https://api.github.com/repos/mjkatgithub/dashboard/git/tags{/sha}","https://api.github.com/repos/mjkatgithub/dashboard/git/refs{/sha}","https://api.github.com/repos/mjkatgithub/dashboard/git/trees{/sha}","https://api.github.com/repos/mjkatgithub/dashboard/statuses/{sha}","https://api.github.com/repos/mjkatgithub/dashboard/languages","https://api.github.com/repos/mjkatgithub/dashboard/stargazers","https://api.github.com/repos/mjkatgithub/dashboard/contributors","https://api.github.com/repos/mjkatgithub/dashboard/subscribers","https://api.github.com/repos/mjkatgithub/dashboard/subscription","https://api.github.com/repos/mjkatgithub/dashboard/commits{/sha}","https://api.github.com/repos/mjkatgithub/dashboard/git/commits{/sha}","https://api.github.com/repos/mjkatgithub/dashboard/comments{/number}","https://api.github.com/repos/mjkatgithub/dashboard/issues/comments{/number}","https://api.github.com/repos/mjkatgithub/dashboard/contents/{+path}","https://api.github.com/repos/mjkatgithub/dashboard/compare/{base}...{head}","https://api.github.com/repos/mjkatgithub/dashboard/merges","https://api.github.com/repos/mjkatgithub/dashboard/{archive_format}{/ref}","https://api.github.com/repos/mjkatgithub/dashboard/downloads","https://api.github.com/repos/mjkatgithub/dashboard/issues{/number}","https://api.github.com/repos/mjkatgithub/dashboard/pulls{/number}","https://api.github.com/repos/mjkatgithub/dashboard/milestones{/number}","https://api.github.com/repos/mjkatgithub/dashboard/notifications{?since,all,participating}","https://api.github.com/repos/mjkatgithub/dashboard/labels{/name}","https://api.github.com/repos/mjkatgithub/dashboard/releases{/id}","https://api.github.com/repos/mjkatgithub/dashboard/deployments","2019-09-10T20:13:44Z","2025-09-29T06:30:15Z","2023-01-04T09:48:40Z","git://github.com/mjkatgithub/dashboard.git","git@github.com:mjkatgithub/dashboard.git","https://github.com/mjkatgithub/dashboard.git",1129,20,[],{"id":321,"node_id":322,"name":323,"full_name":324,"private":85,"owner":325,"html_url":326,"description":327,"fork":85,"url":328,"forks_url":329,"keys_url":330,"collaborators_url":331,"teams_url":332,"hooks_url":333,"issue_events_url":334,"events_url":335,"assignees_url":336,"branches_url":337,"tags_url":338,"blobs_url":339,"git_tags_url":340,"git_refs_url":341,"trees_url":342,"statuses_url":343,"languages_url":344,"stargazers_url":345,"contributors_url":346,"subscribers_url":347,"subscription_url":348,"commits_url":349,"git_commits_url":350,"comments_url":351,"issue_comment_url":352,"contents_url":353,"compare_url":354,"merges_url":355,"archive_url":356,"downloads_url":357,"issues_url":358,"pulls_url":359,"milestones_url":360,"notifications_url":361,"labels_url":362,"releases_url":363,"deployments_url":364,"created_at":365,"updated_at":366,"pushed_at":367,"git_url":368,"ssh_url":369,"clone_url":370,"svn_url":326,"homepage":29,"size":371,"stargazers_count":372,"watchers_count":372,"language":373,"has_issues":73,"has_projects":73,"has_downloads":73,"has_wiki":85,"has_pages":85,"has_discussions":85,"forks_count":150,"mirror_url":104,"archived":85,"disabled":85,"open_issues_count":374,"license":375,"allow_forking":73,"is_template":85,"web_commit_signoff_required":85,"has_pull_requests":73,"pull_request_creation_policy":157,"topics":381,"visibility":102,"forks":150,"open_issues":374,"watchers":372,"default_branch":382},1157579429,"R_kgDORP9CpQ","Decentra","mjkatgithub/Decentra",{"login":87,"id":88,"node_id":89,"avatar_url":90,"gravatar_id":29,"url":91,"html_url":21,"followers_url":92,"following_url":93,"gists_url":94,"starred_url":95,"subscriptions_url":96,"organizations_url":97,"repos_url":98,"events_url":99,"received_events_url":100,"type":101,"user_view_type":102,"site_admin":85},"https://github.com/mjkatgithub/Decentra","Matrix-based chat client with Spaces, Categories, and Rooms.","https://api.github.com/repos/mjkatgithub/Decentra","https://api.github.com/repos/mjkatgithub/Decentra/forks","https://api.github.com/repos/mjkatgithub/Decentra/keys{/key_id}","https://api.github.com/repos/mjkatgithub/Decentra/collaborators{/collaborator}","https://api.github.com/repos/mjkatgithub/Decentra/teams","https://api.github.com/repos/mjkatgithub/Decentra/hooks","https://api.github.com/repos/mjkatgithub/Decentra/issues/events{/number}","https://api.github.com/repos/mjkatgithub/Decentra/events","https://api.github.com/repos/mjkatgithub/Decentra/assignees{/user}","https://api.github.com/repos/mjkatgithub/Decentra/branches{/branch}","https://api.github.com/repos/mjkatgithub/Decentra/tags","https://api.github.com/repos/mjkatgithub/Decentra/git/blobs{/sha}","https://api.github.com/repos/mjkatgithub/Decentra/git/tags{/sha}","https://api.github.com/repos/mjkatgithub/Decentra/git/refs{/sha}","https://api.github.com/repos/mjkatgithub/Decentra/git/trees{/sha}","https://api.github.com/repos/mjkatgithub/Decentra/statuses/{sha}","https://api.github.com/repos/mjkatgithub/Decentra/languages","https://api.github.com/repos/mjkatgithub/Decentra/stargazers","https://api.github.com/repos/mjkatgithub/Decentra/contributors","https://api.github.com/repos/mjkatgithub/Decentra/subscribers","https://api.github.com/repos/mjkatgithub/Decentra/subscription","https://api.github.com/repos/mjkatgithub/Decentra/commits{/sha}","https://api.github.com/repos/mjkatgithub/Decentra/git/commits{/sha}","https://api.github.com/repos/mjkatgithub/Decentra/comments{/number}","https://api.github.com/repos/mjkatgithub/Decentra/issues/comments{/number}","https://api.github.com/repos/mjkatgithub/Decentra/contents/{+path}","https://api.github.com/repos/mjkatgithub/Decentra/compare/{base}...{head}","https://api.github.com/repos/mjkatgithub/Decentra/merges","https://api.github.com/repos/mjkatgithub/Decentra/{archive_format}{/ref}","https://api.github.com/repos/mjkatgithub/Decentra/downloads","https://api.github.com/repos/mjkatgithub/Decentra/issues{/number}","https://api.github.com/repos/mjkatgithub/Decentra/pulls{/number}","https://api.github.com/repos/mjkatgithub/Decentra/milestones{/number}","https://api.github.com/repos/mjkatgithub/Decentra/notifications{?since,all,participating}","https://api.github.com/repos/mjkatgithub/Decentra/labels{/name}","https://api.github.com/repos/mjkatgithub/Decentra/releases{/id}","https://api.github.com/repos/mjkatgithub/Decentra/deployments","2026-02-14T01:46:45Z","2026-03-11T21:41:07Z","2026-03-11T21:47:30Z","git://github.com/mjkatgithub/Decentra.git","git@github.com:mjkatgithub/Decentra.git","https://github.com/mjkatgithub/Decentra.git",712,1,"TypeScript",33,{"key":376,"name":377,"spdx_id":378,"url":379,"node_id":380},"agpl-3.0","GNU Affero General Public License v3.0","AGPL-3.0","https://api.github.com/licenses/agpl-3.0","MDc6TGljZW5zZTE=",[],"develop",{"id":384,"node_id":385,"name":386,"full_name":387,"private":85,"owner":388,"html_url":389,"description":390,"fork":85,"url":391,"forks_url":392,"keys_url":393,"collaborators_url":394,"teams_url":395,"hooks_url":396,"issue_events_url":397,"events_url":398,"assignees_url":399,"branches_url":400,"tags_url":401,"blobs_url":402,"git_tags_url":403,"git_refs_url":404,"trees_url":405,"statuses_url":406,"languages_url":407,"stargazers_url":408,"contributors_url":409,"subscribers_url":410,"subscription_url":411,"commits_url":412,"git_commits_url":413,"comments_url":414,"issue_comment_url":415,"contents_url":416,"compare_url":417,"merges_url":418,"archive_url":419,"downloads_url":420,"issues_url":421,"pulls_url":422,"milestones_url":423,"notifications_url":424,"labels_url":425,"releases_url":426,"deployments_url":427,"created_at":428,"updated_at":429,"pushed_at":430,"git_url":431,"ssh_url":432,"clone_url":433,"svn_url":389,"homepage":434,"size":435,"stargazers_count":372,"watchers_count":372,"language":213,"has_issues":73,"has_projects":73,"has_downloads":73,"has_wiki":73,"has_pages":73,"has_discussions":85,"forks_count":150,"mirror_url":104,"archived":85,"disabled":85,"open_issues_count":436,"license":104,"allow_forking":73,"is_template":85,"web_commit_signoff_required":85,"has_pull_requests":73,"pull_request_creation_policy":157,"topics":437,"visibility":102,"forks":150,"open_issues":436,"watchers":372,"default_branch":159},260938177,"MDEwOlJlcG9zaXRvcnkyNjA5MzgxNzc=","dynamic-react-navbar","mjkatgithub/dynamic-react-navbar",{"login":87,"id":88,"node_id":89,"avatar_url":90,"gravatar_id":29,"url":91,"html_url":21,"followers_url":92,"following_url":93,"gists_url":94,"starred_url":95,"subscriptions_url":96,"organizations_url":97,"repos_url":98,"events_url":99,"received_events_url":100,"type":101,"user_view_type":102,"site_admin":85},"https://github.com/mjkatgithub/dynamic-react-navbar","some dynamic react navbars Check out my block-article regarding this navabar","https://api.github.com/repos/mjkatgithub/dynamic-react-navbar","https://api.github.com/repos/mjkatgithub/dynamic-react-navbar/forks","https://api.github.com/repos/mjkatgithub/dynamic-react-navbar/keys{/key_id}","https://api.github.com/repos/mjkatgithub/dynamic-react-navbar/collaborators{/collaborator}","https://api.github.com/repos/mjkatgithub/dynamic-react-navbar/teams","https://api.github.com/repos/mjkatgithub/dynamic-react-navbar/hooks","https://api.github.com/repos/mjkatgithub/dynamic-react-navbar/issues/events{/number}","https://api.github.com/repos/mjkatgithub/dynamic-react-navbar/events","https://api.github.com/repos/mjkatgithub/dynamic-react-navbar/assignees{/user}","https://api.github.com/repos/mjkatgithub/dynamic-react-navbar/branches{/branch}","https://api.github.com/repos/mjkatgithub/dynamic-react-navbar/tags","https://api.github.com/repos/mjkatgithub/dynamic-react-navbar/git/blobs{/sha}","https://api.github.com/repos/mjkatgithub/dynamic-react-navbar/git/tags{/sha}","https://api.github.com/repos/mjkatgithub/dynamic-react-navbar/git/refs{/sha}","https://api.github.com/repos/mjkatgithub/dynamic-react-navbar/git/trees{/sha}","https://api.github.com/repos/mjkatgithub/dynamic-react-navbar/statuses/{sha}","https://api.github.com/repos/mjkatgithub/dynamic-react-navbar/languages","https://api.github.com/repos/mjkatgithub/dynamic-react-navbar/stargazers","https://api.github.com/repos/mjkatgithub/dynamic-react-navbar/contributors","https://api.github.com/repos/mjkatgithub/dynamic-react-navbar/subscribers","https://api.github.com/repos/mjkatgithub/dynamic-react-navbar/subscription","https://api.github.com/repos/mjkatgithub/dynamic-react-navbar/commits{/sha}","https://api.github.com/repos/mjkatgithub/dynamic-react-navbar/git/commits{/sha}","https://api.github.com/repos/mjkatgithub/dynamic-react-navbar/comments{/number}","https://api.github.com/repos/mjkatgithub/dynamic-react-navbar/issues/comments{/number}","https://api.github.com/repos/mjkatgithub/dynamic-react-navbar/contents/{+path}","https://api.github.com/repos/mjkatgithub/dynamic-react-navbar/compare/{base}...{head}","https://api.github.com/repos/mjkatgithub/dynamic-react-navbar/merges","https://api.github.com/repos/mjkatgithub/dynamic-react-navbar/{archive_format}{/ref}","https://api.github.com/repos/mjkatgithub/dynamic-react-navbar/downloads","https://api.github.com/repos/mjkatgithub/dynamic-react-navbar/issues{/number}","https://api.github.com/repos/mjkatgithub/dynamic-react-navbar/pulls{/number}","https://api.github.com/repos/mjkatgithub/dynamic-react-navbar/milestones{/number}","https://api.github.com/repos/mjkatgithub/dynamic-react-navbar/notifications{?since,all,participating}","https://api.github.com/repos/mjkatgithub/dynamic-react-navbar/labels{/name}","https://api.github.com/repos/mjkatgithub/dynamic-react-navbar/releases{/id}","https://api.github.com/repos/mjkatgithub/dynamic-react-navbar/deployments","2020-05-03T14:12:02Z","2026-01-02T22:03:30Z","2026-02-04T03:55:58Z","git://github.com/mjkatgithub/dynamic-react-navbar.git","git@github.com:mjkatgithub/dynamic-react-navbar.git","https://github.com/mjkatgithub/dynamic-react-navbar.git","https://mjkatgithub.github.io/blog/2023/react-navbar",2219,8,[],{"id":439,"node_id":440,"name":441,"full_name":442,"private":85,"owner":443,"html_url":444,"description":445,"fork":73,"url":446,"forks_url":447,"keys_url":448,"collaborators_url":449,"teams_url":450,"hooks_url":451,"issue_events_url":452,"events_url":453,"assignees_url":454,"branches_url":455,"tags_url":456,"blobs_url":457,"git_tags_url":458,"git_refs_url":459,"trees_url":460,"statuses_url":461,"languages_url":462,"stargazers_url":463,"contributors_url":464,"subscribers_url":465,"subscription_url":466,"commits_url":467,"git_commits_url":468,"comments_url":469,"issue_comment_url":470,"contents_url":471,"compare_url":472,"merges_url":473,"archive_url":474,"downloads_url":475,"issues_url":476,"pulls_url":477,"milestones_url":478,"notifications_url":479,"labels_url":480,"releases_url":481,"deployments_url":482,"created_at":483,"updated_at":483,"pushed_at":484,"git_url":485,"ssh_url":486,"clone_url":487,"svn_url":444,"homepage":29,"size":488,"stargazers_count":150,"watchers_count":150,"language":104,"has_issues":85,"has_projects":73,"has_downloads":73,"has_wiki":73,"has_pages":85,"has_discussions":85,"forks_count":150,"mirror_url":104,"archived":85,"disabled":85,"open_issues_count":150,"license":489,"allow_forking":73,"is_template":85,"web_commit_signoff_required":85,"has_pull_requests":73,"pull_request_creation_policy":157,"topics":495,"visibility":102,"forks":150,"open_issues":150,"watchers":150,"default_branch":496},850460353,"R_kgDOMrD-wQ","Empyrion-Scripts","mjkatgithub/Empyrion-Scripts",{"login":87,"id":88,"node_id":89,"avatar_url":90,"gravatar_id":29,"url":91,"html_url":21,"followers_url":92,"following_url":93,"gists_url":94,"starred_url":95,"subscriptions_url":96,"organizations_url":97,"repos_url":98,"events_url":99,"received_events_url":100,"type":101,"user_view_type":102,"site_admin":85},"https://github.com/mjkatgithub/Empyrion-Scripts","Scripts for Empyrion Game by Sephrajin, using the mod by Astic","https://api.github.com/repos/mjkatgithub/Empyrion-Scripts","https://api.github.com/repos/mjkatgithub/Empyrion-Scripts/forks","https://api.github.com/repos/mjkatgithub/Empyrion-Scripts/keys{/key_id}","https://api.github.com/repos/mjkatgithub/Empyrion-Scripts/collaborators{/collaborator}","https://api.github.com/repos/mjkatgithub/Empyrion-Scripts/teams","https://api.github.com/repos/mjkatgithub/Empyrion-Scripts/hooks","https://api.github.com/repos/mjkatgithub/Empyrion-Scripts/issues/events{/number}","https://api.github.com/repos/mjkatgithub/Empyrion-Scripts/events","https://api.github.com/repos/mjkatgithub/Empyrion-Scripts/assignees{/user}","https://api.github.com/repos/mjkatgithub/Empyrion-Scripts/branches{/branch}","https://api.github.com/repos/mjkatgithub/Empyrion-Scripts/tags","https://api.github.com/repos/mjkatgithub/Empyrion-Scripts/git/blobs{/sha}","https://api.github.com/repos/mjkatgithub/Empyrion-Scripts/git/tags{/sha}","https://api.github.com/repos/mjkatgithub/Empyrion-Scripts/git/refs{/sha}","https://api.github.com/repos/mjkatgithub/Empyrion-Scripts/git/trees{/sha}","https://api.github.com/repos/mjkatgithub/Empyrion-Scripts/statuses/{sha}","https://api.github.com/repos/mjkatgithub/Empyrion-Scripts/languages","https://api.github.com/repos/mjkatgithub/Empyrion-Scripts/stargazers","https://api.github.com/repos/mjkatgithub/Empyrion-Scripts/contributors","https://api.github.com/repos/mjkatgithub/Empyrion-Scripts/subscribers","https://api.github.com/repos/mjkatgithub/Empyrion-Scripts/subscription","https://api.github.com/repos/mjkatgithub/Empyrion-Scripts/commits{/sha}","https://api.github.com/repos/mjkatgithub/Empyrion-Scripts/git/commits{/sha}","https://api.github.com/repos/mjkatgithub/Empyrion-Scripts/comments{/number}","https://api.github.com/repos/mjkatgithub/Empyrion-Scripts/issues/comments{/number}","https://api.github.com/repos/mjkatgithub/Empyrion-Scripts/contents/{+path}","https://api.github.com/repos/mjkatgithub/Empyrion-Scripts/compare/{base}...{head}","https://api.github.com/repos/mjkatgithub/Empyrion-Scripts/merges","https://api.github.com/repos/mjkatgithub/Empyrion-Scripts/{archive_format}{/ref}","https://api.github.com/repos/mjkatgithub/Empyrion-Scripts/downloads","https://api.github.com/repos/mjkatgithub/Empyrion-Scripts/issues{/number}","https://api.github.com/repos/mjkatgithub/Empyrion-Scripts/pulls{/number}","https://api.github.com/repos/mjkatgithub/Empyrion-Scripts/milestones{/number}","https://api.github.com/repos/mjkatgithub/Empyrion-Scripts/notifications{?since,all,participating}","https://api.github.com/repos/mjkatgithub/Empyrion-Scripts/labels{/name}","https://api.github.com/repos/mjkatgithub/Empyrion-Scripts/releases{/id}","https://api.github.com/repos/mjkatgithub/Empyrion-Scripts/deployments","2024-08-31T20:40:36Z","2023-08-09T16:52:33Z","git://github.com/mjkatgithub/Empyrion-Scripts.git","git@github.com:mjkatgithub/Empyrion-Scripts.git","https://github.com/mjkatgithub/Empyrion-Scripts.git",7955,{"key":490,"name":491,"spdx_id":492,"url":493,"node_id":494},"gpl-3.0","GNU General Public License v3.0","GPL-3.0","https://api.github.com/licenses/gpl-3.0","MDc6TGljZW5zZTk=",[],"main",{"id":498,"node_id":499,"name":500,"full_name":501,"private":85,"owner":502,"html_url":503,"description":104,"fork":73,"url":504,"forks_url":505,"keys_url":506,"collaborators_url":507,"teams_url":508,"hooks_url":509,"issue_events_url":510,"events_url":511,"assignees_url":512,"branches_url":513,"tags_url":514,"blobs_url":515,"git_tags_url":516,"git_refs_url":517,"trees_url":518,"statuses_url":519,"languages_url":520,"stargazers_url":521,"contributors_url":522,"subscribers_url":523,"subscription_url":524,"commits_url":525,"git_commits_url":526,"comments_url":527,"issue_comment_url":528,"contents_url":529,"compare_url":530,"merges_url":531,"archive_url":532,"downloads_url":533,"issues_url":534,"pulls_url":535,"milestones_url":536,"notifications_url":537,"labels_url":538,"releases_url":539,"deployments_url":540,"created_at":541,"updated_at":542,"pushed_at":543,"git_url":544,"ssh_url":545,"clone_url":546,"svn_url":503,"homepage":104,"size":547,"stargazers_count":150,"watchers_count":150,"language":548,"has_issues":85,"has_projects":73,"has_downloads":73,"has_wiki":73,"has_pages":85,"has_discussions":85,"forks_count":150,"mirror_url":104,"archived":85,"disabled":85,"open_issues_count":150,"license":104,"allow_forking":73,"is_template":85,"web_commit_signoff_required":85,"has_pull_requests":73,"pull_request_creation_policy":157,"topics":549,"visibility":102,"forks":150,"open_issues":150,"watchers":150,"default_branch":496},850460437,"R_kgDOMrD_FQ","EmpyrionScripts","mjkatgithub/EmpyrionScripts",{"login":87,"id":88,"node_id":89,"avatar_url":90,"gravatar_id":29,"url":91,"html_url":21,"followers_url":92,"following_url":93,"gists_url":94,"starred_url":95,"subscriptions_url":96,"organizations_url":97,"repos_url":98,"events_url":99,"received_events_url":100,"type":101,"user_view_type":102,"site_admin":85},"https://github.com/mjkatgithub/EmpyrionScripts","https://api.github.com/repos/mjkatgithub/EmpyrionScripts","https://api.github.com/repos/mjkatgithub/EmpyrionScripts/forks","https://api.github.com/repos/mjkatgithub/EmpyrionScripts/keys{/key_id}","https://api.github.com/repos/mjkatgithub/EmpyrionScripts/collaborators{/collaborator}","https://api.github.com/repos/mjkatgithub/EmpyrionScripts/teams","https://api.github.com/repos/mjkatgithub/EmpyrionScripts/hooks","https://api.github.com/repos/mjkatgithub/EmpyrionScripts/issues/events{/number}","https://api.github.com/repos/mjkatgithub/EmpyrionScripts/events","https://api.github.com/repos/mjkatgithub/EmpyrionScripts/assignees{/user}","https://api.github.com/repos/mjkatgithub/EmpyrionScripts/branches{/branch}","https://api.github.com/repos/mjkatgithub/EmpyrionScripts/tags","https://api.github.com/repos/mjkatgithub/EmpyrionScripts/git/blobs{/sha}","https://api.github.com/repos/mjkatgithub/EmpyrionScripts/git/tags{/sha}","https://api.github.com/repos/mjkatgithub/EmpyrionScripts/git/refs{/sha}","https://api.github.com/repos/mjkatgithub/EmpyrionScripts/git/trees{/sha}","https://api.github.com/repos/mjkatgithub/EmpyrionScripts/statuses/{sha}","https://api.github.com/repos/mjkatgithub/EmpyrionScripts/languages","https://api.github.com/repos/mjkatgithub/EmpyrionScripts/stargazers","https://api.github.com/repos/mjkatgithub/EmpyrionScripts/contributors","https://api.github.com/repos/mjkatgithub/EmpyrionScripts/subscribers","https://api.github.com/repos/mjkatgithub/EmpyrionScripts/subscription","https://api.github.com/repos/mjkatgithub/EmpyrionScripts/commits{/sha}","https://api.github.com/repos/mjkatgithub/EmpyrionScripts/git/commits{/sha}","https://api.github.com/repos/mjkatgithub/EmpyrionScripts/comments{/number}","https://api.github.com/repos/mjkatgithub/EmpyrionScripts/issues/comments{/number}","https://api.github.com/repos/mjkatgithub/EmpyrionScripts/contents/{+path}","https://api.github.com/repos/mjkatgithub/EmpyrionScripts/compare/{base}...{head}","https://api.github.com/repos/mjkatgithub/EmpyrionScripts/merges","https://api.github.com/repos/mjkatgithub/EmpyrionScripts/{archive_format}{/ref}","https://api.github.com/repos/mjkatgithub/EmpyrionScripts/downloads","https://api.github.com/repos/mjkatgithub/EmpyrionScripts/issues{/number}","https://api.github.com/repos/mjkatgithub/EmpyrionScripts/pulls{/number}","https://api.github.com/repos/mjkatgithub/EmpyrionScripts/milestones{/number}","https://api.github.com/repos/mjkatgithub/EmpyrionScripts/notifications{?since,all,participating}","https://api.github.com/repos/mjkatgithub/EmpyrionScripts/labels{/name}","https://api.github.com/repos/mjkatgithub/EmpyrionScripts/releases{/id}","https://api.github.com/repos/mjkatgithub/EmpyrionScripts/deployments","2024-08-31T20:40:58Z","2025-06-07T18:42:51Z","2025-06-07T18:42:46Z","git://github.com/mjkatgithub/EmpyrionScripts.git","git@github.com:mjkatgithub/EmpyrionScripts.git","https://github.com/mjkatgithub/EmpyrionScripts.git",2180,"Handlebars",[],{"id":551,"node_id":552,"name":553,"full_name":554,"private":85,"owner":555,"html_url":556,"description":104,"fork":85,"url":557,"forks_url":558,"keys_url":559,"collaborators_url":560,"teams_url":561,"hooks_url":562,"issue_events_url":563,"events_url":564,"assignees_url":565,"branches_url":566,"tags_url":567,"blobs_url":568,"git_tags_url":569,"git_refs_url":570,"trees_url":571,"statuses_url":572,"languages_url":573,"stargazers_url":574,"contributors_url":575,"subscribers_url":576,"subscription_url":577,"commits_url":578,"git_commits_url":579,"comments_url":580,"issue_comment_url":581,"contents_url":582,"compare_url":583,"merges_url":584,"archive_url":585,"downloads_url":586,"issues_url":587,"pulls_url":588,"milestones_url":589,"notifications_url":590,"labels_url":591,"releases_url":592,"deployments_url":593,"created_at":594,"updated_at":595,"pushed_at":596,"git_url":597,"ssh_url":598,"clone_url":599,"svn_url":556,"homepage":600,"size":601,"stargazers_count":150,"watchers_count":150,"language":602,"has_issues":73,"has_projects":73,"has_downloads":73,"has_wiki":73,"has_pages":85,"has_discussions":85,"forks_count":150,"mirror_url":104,"archived":85,"disabled":85,"open_issues_count":150,"license":104,"allow_forking":73,"is_template":85,"web_commit_signoff_required":85,"has_pull_requests":73,"pull_request_creation_policy":157,"topics":603,"visibility":102,"forks":150,"open_issues":150,"watchers":150,"default_branch":159},914832175,"R_kgDONoc7Lw","finance-tracker","mjkatgithub/finance-tracker",{"login":87,"id":88,"node_id":89,"avatar_url":90,"gravatar_id":29,"url":91,"html_url":21,"followers_url":92,"following_url":93,"gists_url":94,"starred_url":95,"subscriptions_url":96,"organizations_url":97,"repos_url":98,"events_url":99,"received_events_url":100,"type":101,"user_view_type":102,"site_admin":85},"https://github.com/mjkatgithub/finance-tracker","https://api.github.com/repos/mjkatgithub/finance-tracker","https://api.github.com/repos/mjkatgithub/finance-tracker/forks","https://api.github.com/repos/mjkatgithub/finance-tracker/keys{/key_id}","https://api.github.com/repos/mjkatgithub/finance-tracker/collaborators{/collaborator}","https://api.github.com/repos/mjkatgithub/finance-tracker/teams","https://api.github.com/repos/mjkatgithub/finance-tracker/hooks","https://api.github.com/repos/mjkatgithub/finance-tracker/issues/events{/number}","https://api.github.com/repos/mjkatgithub/finance-tracker/events","https://api.github.com/repos/mjkatgithub/finance-tracker/assignees{/user}","https://api.github.com/repos/mjkatgithub/finance-tracker/branches{/branch}","https://api.github.com/repos/mjkatgithub/finance-tracker/tags","https://api.github.com/repos/mjkatgithub/finance-tracker/git/blobs{/sha}","https://api.github.com/repos/mjkatgithub/finance-tracker/git/tags{/sha}","https://api.github.com/repos/mjkatgithub/finance-tracker/git/refs{/sha}","https://api.github.com/repos/mjkatgithub/finance-tracker/git/trees{/sha}","https://api.github.com/repos/mjkatgithub/finance-tracker/statuses/{sha}","https://api.github.com/repos/mjkatgithub/finance-tracker/languages","https://api.github.com/repos/mjkatgithub/finance-tracker/stargazers","https://api.github.com/repos/mjkatgithub/finance-tracker/contributors","https://api.github.com/repos/mjkatgithub/finance-tracker/subscribers","https://api.github.com/repos/mjkatgithub/finance-tracker/subscription","https://api.github.com/repos/mjkatgithub/finance-tracker/commits{/sha}","https://api.github.com/repos/mjkatgithub/finance-tracker/git/commits{/sha}","https://api.github.com/repos/mjkatgithub/finance-tracker/comments{/number}","https://api.github.com/repos/mjkatgithub/finance-tracker/issues/comments{/number}","https://api.github.com/repos/mjkatgithub/finance-tracker/contents/{+path}","https://api.github.com/repos/mjkatgithub/finance-tracker/compare/{base}...{head}","https://api.github.com/repos/mjkatgithub/finance-tracker/merges","https://api.github.com/repos/mjkatgithub/finance-tracker/{archive_format}{/ref}","https://api.github.com/repos/mjkatgithub/finance-tracker/downloads","https://api.github.com/repos/mjkatgithub/finance-tracker/issues{/number}","https://api.github.com/repos/mjkatgithub/finance-tracker/pulls{/number}","https://api.github.com/repos/mjkatgithub/finance-tracker/milestones{/number}","https://api.github.com/repos/mjkatgithub/finance-tracker/notifications{?since,all,participating}","https://api.github.com/repos/mjkatgithub/finance-tracker/labels{/name}","https://api.github.com/repos/mjkatgithub/finance-tracker/releases{/id}","https://api.github.com/repos/mjkatgithub/finance-tracker/deployments","2025-01-10T11:55:29Z","2025-02-25T20:48:38Z","2025-02-25T20:45:31Z","git://github.com/mjkatgithub/finance-tracker.git","git@github.com:mjkatgithub/finance-tracker.git","https://github.com/mjkatgithub/finance-tracker.git","https://finance-tracker-ivory-rho.vercel.app",388,"Vue",[],{"id":605,"node_id":606,"name":607,"full_name":608,"private":85,"owner":609,"html_url":610,"description":104,"fork":73,"url":611,"forks_url":612,"keys_url":613,"collaborators_url":614,"teams_url":615,"hooks_url":616,"issue_events_url":617,"events_url":618,"assignees_url":619,"branches_url":620,"tags_url":621,"blobs_url":622,"git_tags_url":623,"git_refs_url":624,"trees_url":625,"statuses_url":626,"languages_url":627,"stargazers_url":628,"contributors_url":629,"subscribers_url":630,"subscription_url":631,"commits_url":632,"git_commits_url":633,"comments_url":634,"issue_comment_url":635,"contents_url":636,"compare_url":637,"merges_url":638,"archive_url":639,"downloads_url":640,"issues_url":641,"pulls_url":642,"milestones_url":643,"notifications_url":644,"labels_url":645,"releases_url":646,"deployments_url":647,"created_at":648,"updated_at":649,"pushed_at":650,"git_url":651,"ssh_url":652,"clone_url":653,"svn_url":610,"homepage":29,"size":654,"stargazers_count":150,"watchers_count":150,"language":655,"has_issues":85,"has_projects":73,"has_downloads":73,"has_wiki":73,"has_pages":85,"has_discussions":85,"forks_count":150,"mirror_url":104,"archived":85,"disabled":85,"open_issues_count":150,"license":656,"allow_forking":73,"is_template":85,"web_commit_signoff_required":85,"has_pull_requests":73,"pull_request_creation_policy":157,"topics":662,"visibility":102,"forks":150,"open_issues":150,"watchers":150,"default_branch":159},909003384,"R_kgDONi5KeA","interactive-tutorials","mjkatgithub/interactive-tutorials",{"login":87,"id":88,"node_id":89,"avatar_url":90,"gravatar_id":29,"url":91,"html_url":21,"followers_url":92,"following_url":93,"gists_url":94,"starred_url":95,"subscriptions_url":96,"organizations_url":97,"repos_url":98,"events_url":99,"received_events_url":100,"type":101,"user_view_type":102,"site_admin":85},"https://github.com/mjkatgithub/interactive-tutorials","https://api.github.com/repos/mjkatgithub/interactive-tutorials","https://api.github.com/repos/mjkatgithub/interactive-tutorials/forks","https://api.github.com/repos/mjkatgithub/interactive-tutorials/keys{/key_id}","https://api.github.com/repos/mjkatgithub/interactive-tutorials/collaborators{/collaborator}","https://api.github.com/repos/mjkatgithub/interactive-tutorials/teams","https://api.github.com/repos/mjkatgithub/interactive-tutorials/hooks","https://api.github.com/repos/mjkatgithub/interactive-tutorials/issues/events{/number}","https://api.github.com/repos/mjkatgithub/interactive-tutorials/events","https://api.github.com/repos/mjkatgithub/interactive-tutorials/assignees{/user}","https://api.github.com/repos/mjkatgithub/interactive-tutorials/branches{/branch}","https://api.github.com/repos/mjkatgithub/interactive-tutorials/tags","https://api.github.com/repos/mjkatgithub/interactive-tutorials/git/blobs{/sha}","https://api.github.com/repos/mjkatgithub/interactive-tutorials/git/tags{/sha}","https://api.github.com/repos/mjkatgithub/interactive-tutorials/git/refs{/sha}","https://api.github.com/repos/mjkatgithub/interactive-tutorials/git/trees{/sha}","https://api.github.com/repos/mjkatgithub/interactive-tutorials/statuses/{sha}","https://api.github.com/repos/mjkatgithub/interactive-tutorials/languages","https://api.github.com/repos/mjkatgithub/interactive-tutorials/stargazers","https://api.github.com/repos/mjkatgithub/interactive-tutorials/contributors","https://api.github.com/repos/mjkatgithub/interactive-tutorials/subscribers","https://api.github.com/repos/mjkatgithub/interactive-tutorials/subscription","https://api.github.com/repos/mjkatgithub/interactive-tutorials/commits{/sha}","https://api.github.com/repos/mjkatgithub/interactive-tutorials/git/commits{/sha}","https://api.github.com/repos/mjkatgithub/interactive-tutorials/comments{/number}","https://api.github.com/repos/mjkatgithub/interactive-tutorials/issues/comments{/number}","https://api.github.com/repos/mjkatgithub/interactive-tutorials/contents/{+path}","https://api.github.com/repos/mjkatgithub/interactive-tutorials/compare/{base}...{head}","https://api.github.com/repos/mjkatgithub/interactive-tutorials/merges","https://api.github.com/repos/mjkatgithub/interactive-tutorials/{archive_format}{/ref}","https://api.github.com/repos/mjkatgithub/interactive-tutorials/downloads","https://api.github.com/repos/mjkatgithub/interactive-tutorials/issues{/number}","https://api.github.com/repos/mjkatgithub/interactive-tutorials/pulls{/number}","https://api.github.com/repos/mjkatgithub/interactive-tutorials/milestones{/number}","https://api.github.com/repos/mjkatgithub/interactive-tutorials/notifications{?since,all,participating}","https://api.github.com/repos/mjkatgithub/interactive-tutorials/labels{/name}","https://api.github.com/repos/mjkatgithub/interactive-tutorials/releases{/id}","https://api.github.com/repos/mjkatgithub/interactive-tutorials/deployments","2024-12-27T14:05:51Z","2025-09-29T19:23:46Z","2024-12-27T14:22:12Z","git://github.com/mjkatgithub/interactive-tutorials.git","git@github.com:mjkatgithub/interactive-tutorials.git","https://github.com/mjkatgithub/interactive-tutorials.git",47549,"Python",{"key":657,"name":658,"spdx_id":659,"url":660,"node_id":661},"apache-2.0","Apache License 2.0","Apache-2.0","https://api.github.com/licenses/apache-2.0","MDc6TGljZW5zZTI=",[],{"id":664,"node_id":665,"name":666,"full_name":667,"private":85,"owner":668,"html_url":669,"description":670,"fork":85,"url":671,"forks_url":672,"keys_url":673,"collaborators_url":674,"teams_url":675,"hooks_url":676,"issue_events_url":677,"events_url":678,"assignees_url":679,"branches_url":680,"tags_url":681,"blobs_url":682,"git_tags_url":683,"git_refs_url":684,"trees_url":685,"statuses_url":686,"languages_url":687,"stargazers_url":688,"contributors_url":689,"subscribers_url":690,"subscription_url":691,"commits_url":692,"git_commits_url":693,"comments_url":694,"issue_comment_url":695,"contents_url":696,"compare_url":697,"merges_url":698,"archive_url":699,"downloads_url":700,"issues_url":701,"pulls_url":702,"milestones_url":703,"notifications_url":704,"labels_url":705,"releases_url":706,"deployments_url":707,"created_at":708,"updated_at":709,"pushed_at":710,"git_url":711,"ssh_url":712,"clone_url":713,"svn_url":669,"homepage":29,"size":714,"stargazers_count":150,"watchers_count":150,"language":373,"has_issues":73,"has_projects":73,"has_downloads":73,"has_wiki":85,"has_pages":85,"has_discussions":85,"forks_count":150,"mirror_url":104,"archived":85,"disabled":85,"open_issues_count":372,"license":104,"allow_forking":73,"is_template":85,"web_commit_signoff_required":85,"has_pull_requests":73,"pull_request_creation_policy":157,"topics":715,"visibility":102,"forks":150,"open_issues":372,"watchers":150,"default_branch":382},1020446163,"R_kgDOPNLF0w","linxz","mjkatgithub/linxz",{"login":87,"id":88,"node_id":89,"avatar_url":90,"gravatar_id":29,"url":91,"html_url":21,"followers_url":92,"following_url":93,"gists_url":94,"starred_url":95,"subscriptions_url":96,"organizations_url":97,"repos_url":98,"events_url":99,"received_events_url":100,"type":101,"user_view_type":102,"site_admin":85},"https://github.com/mjkatgithub/linxz","Your personal link collection for your bio – simple, modern, flexible.","https://api.github.com/repos/mjkatgithub/linxz","https://api.github.com/repos/mjkatgithub/linxz/forks","https://api.github.com/repos/mjkatgithub/linxz/keys{/key_id}","https://api.github.com/repos/mjkatgithub/linxz/collaborators{/collaborator}","https://api.github.com/repos/mjkatgithub/linxz/teams","https://api.github.com/repos/mjkatgithub/linxz/hooks","https://api.github.com/repos/mjkatgithub/linxz/issues/events{/number}","https://api.github.com/repos/mjkatgithub/linxz/events","https://api.github.com/repos/mjkatgithub/linxz/assignees{/user}","https://api.github.com/repos/mjkatgithub/linxz/branches{/branch}","https://api.github.com/repos/mjkatgithub/linxz/tags","https://api.github.com/repos/mjkatgithub/linxz/git/blobs{/sha}","https://api.github.com/repos/mjkatgithub/linxz/git/tags{/sha}","https://api.github.com/repos/mjkatgithub/linxz/git/refs{/sha}","https://api.github.com/repos/mjkatgithub/linxz/git/trees{/sha}","https://api.github.com/repos/mjkatgithub/linxz/statuses/{sha}","https://api.github.com/repos/mjkatgithub/linxz/languages","https://api.github.com/repos/mjkatgithub/linxz/stargazers","https://api.github.com/repos/mjkatgithub/linxz/contributors","https://api.github.com/repos/mjkatgithub/linxz/subscribers","https://api.github.com/repos/mjkatgithub/linxz/subscription","https://api.github.com/repos/mjkatgithub/linxz/commits{/sha}","https://api.github.com/repos/mjkatgithub/linxz/git/commits{/sha}","https://api.github.com/repos/mjkatgithub/linxz/comments{/number}","https://api.github.com/repos/mjkatgithub/linxz/issues/comments{/number}","https://api.github.com/repos/mjkatgithub/linxz/contents/{+path}","https://api.github.com/repos/mjkatgithub/linxz/compare/{base}...{head}","https://api.github.com/repos/mjkatgithub/linxz/merges","https://api.github.com/repos/mjkatgithub/linxz/{archive_format}{/ref}","https://api.github.com/repos/mjkatgithub/linxz/downloads","https://api.github.com/repos/mjkatgithub/linxz/issues{/number}","https://api.github.com/repos/mjkatgithub/linxz/pulls{/number}","https://api.github.com/repos/mjkatgithub/linxz/milestones{/number}","https://api.github.com/repos/mjkatgithub/linxz/notifications{?since,all,participating}","https://api.github.com/repos/mjkatgithub/linxz/labels{/name}","https://api.github.com/repos/mjkatgithub/linxz/releases{/id}","https://api.github.com/repos/mjkatgithub/linxz/deployments","2025-07-15T22:11:30Z","2026-01-02T16:49:10Z","2026-01-02T16:49:06Z","git://github.com/mjkatgithub/linxz.git","git@github.com:mjkatgithub/linxz.git","https://github.com/mjkatgithub/linxz.git",1216,[],{"id":717,"node_id":718,"name":719,"full_name":720,"private":85,"owner":721,"html_url":722,"description":723,"fork":73,"url":724,"forks_url":725,"keys_url":726,"collaborators_url":727,"teams_url":728,"hooks_url":729,"issue_events_url":730,"events_url":731,"assignees_url":732,"branches_url":733,"tags_url":734,"blobs_url":735,"git_tags_url":736,"git_refs_url":737,"trees_url":738,"statuses_url":739,"languages_url":740,"stargazers_url":741,"contributors_url":742,"subscribers_url":743,"subscription_url":744,"commits_url":745,"git_commits_url":746,"comments_url":747,"issue_comment_url":748,"contents_url":749,"compare_url":750,"merges_url":751,"archive_url":752,"downloads_url":753,"issues_url":754,"pulls_url":755,"milestones_url":756,"notifications_url":757,"labels_url":758,"releases_url":759,"deployments_url":760,"created_at":761,"updated_at":761,"pushed_at":762,"git_url":763,"ssh_url":764,"clone_url":765,"svn_url":722,"homepage":29,"size":766,"stargazers_count":150,"watchers_count":150,"language":104,"has_issues":85,"has_projects":73,"has_downloads":73,"has_wiki":73,"has_pages":85,"has_discussions":85,"forks_count":150,"mirror_url":104,"archived":85,"disabled":85,"open_issues_count":150,"license":767,"allow_forking":73,"is_template":85,"web_commit_signoff_required":85,"has_pull_requests":73,"pull_request_creation_policy":157,"topics":768,"visibility":102,"forks":150,"open_issues":150,"watchers":150,"default_branch":496},1162137197,"R_kgDORUTObQ","matrix-mcp-server","mjkatgithub/matrix-mcp-server",{"login":87,"id":88,"node_id":89,"avatar_url":90,"gravatar_id":29,"url":91,"html_url":21,"followers_url":92,"following_url":93,"gists_url":94,"starred_url":95,"subscriptions_url":96,"organizations_url":97,"repos_url":98,"events_url":99,"received_events_url":100,"type":101,"user_view_type":102,"site_admin":85},"https://github.com/mjkatgithub/matrix-mcp-server","MCP Server for a Matrix home server integration; chat, manage rooms, etc.","https://api.github.com/repos/mjkatgithub/matrix-mcp-server","https://api.github.com/repos/mjkatgithub/matrix-mcp-server/forks","https://api.github.com/repos/mjkatgithub/matrix-mcp-server/keys{/key_id}","https://api.github.com/repos/mjkatgithub/matrix-mcp-server/collaborators{/collaborator}","https://api.github.com/repos/mjkatgithub/matrix-mcp-server/teams","https://api.github.com/repos/mjkatgithub/matrix-mcp-server/hooks","https://api.github.com/repos/mjkatgithub/matrix-mcp-server/issues/events{/number}","https://api.github.com/repos/mjkatgithub/matrix-mcp-server/events","https://api.github.com/repos/mjkatgithub/matrix-mcp-server/assignees{/user}","https://api.github.com/repos/mjkatgithub/matrix-mcp-server/branches{/branch}","https://api.github.com/repos/mjkatgithub/matrix-mcp-server/tags","https://api.github.com/repos/mjkatgithub/matrix-mcp-server/git/blobs{/sha}","https://api.github.com/repos/mjkatgithub/matrix-mcp-server/git/tags{/sha}","https://api.github.com/repos/mjkatgithub/matrix-mcp-server/git/refs{/sha}","https://api.github.com/repos/mjkatgithub/matrix-mcp-server/git/trees{/sha}","https://api.github.com/repos/mjkatgithub/matrix-mcp-server/statuses/{sha}","https://api.github.com/repos/mjkatgithub/matrix-mcp-server/languages","https://api.github.com/repos/mjkatgithub/matrix-mcp-server/stargazers","https://api.github.com/repos/mjkatgithub/matrix-mcp-server/contributors","https://api.github.com/repos/mjkatgithub/matrix-mcp-server/subscribers","https://api.github.com/repos/mjkatgithub/matrix-mcp-server/subscription","https://api.github.com/repos/mjkatgithub/matrix-mcp-server/commits{/sha}","https://api.github.com/repos/mjkatgithub/matrix-mcp-server/git/commits{/sha}","https://api.github.com/repos/mjkatgithub/matrix-mcp-server/comments{/number}","https://api.github.com/repos/mjkatgithub/matrix-mcp-server/issues/comments{/number}","https://api.github.com/repos/mjkatgithub/matrix-mcp-server/contents/{+path}","https://api.github.com/repos/mjkatgithub/matrix-mcp-server/compare/{base}...{head}","https://api.github.com/repos/mjkatgithub/matrix-mcp-server/merges","https://api.github.com/repos/mjkatgithub/matrix-mcp-server/{archive_format}{/ref}","https://api.github.com/repos/mjkatgithub/matrix-mcp-server/downloads","https://api.github.com/repos/mjkatgithub/matrix-mcp-server/issues{/number}","https://api.github.com/repos/mjkatgithub/matrix-mcp-server/pulls{/number}","https://api.github.com/repos/mjkatgithub/matrix-mcp-server/milestones{/number}","https://api.github.com/repos/mjkatgithub/matrix-mcp-server/notifications{?since,all,participating}","https://api.github.com/repos/mjkatgithub/matrix-mcp-server/labels{/name}","https://api.github.com/repos/mjkatgithub/matrix-mcp-server/releases{/id}","https://api.github.com/repos/mjkatgithub/matrix-mcp-server/deployments","2026-02-19T22:58:08Z","2025-08-20T04:06:52Z","git://github.com/mjkatgithub/matrix-mcp-server.git","git@github.com:mjkatgithub/matrix-mcp-server.git","https://github.com/mjkatgithub/matrix-mcp-server.git",261,{"key":152,"name":153,"spdx_id":154,"url":155,"node_id":156},[],{"id":770,"node_id":771,"name":78,"full_name":772,"private":85,"owner":773,"html_url":774,"description":775,"fork":73,"url":776,"forks_url":777,"keys_url":778,"collaborators_url":779,"teams_url":780,"hooks_url":781,"issue_events_url":782,"events_url":783,"assignees_url":784,"branches_url":785,"tags_url":786,"blobs_url":787,"git_tags_url":788,"git_refs_url":789,"trees_url":790,"statuses_url":791,"languages_url":792,"stargazers_url":793,"contributors_url":794,"subscribers_url":795,"subscription_url":796,"commits_url":797,"git_commits_url":798,"comments_url":799,"issue_comment_url":800,"contents_url":801,"compare_url":802,"merges_url":803,"archive_url":804,"downloads_url":805,"issues_url":806,"pulls_url":807,"milestones_url":808,"notifications_url":809,"labels_url":810,"releases_url":811,"deployments_url":812,"created_at":813,"updated_at":813,"pushed_at":814,"git_url":815,"ssh_url":816,"clone_url":817,"svn_url":774,"homepage":104,"size":818,"stargazers_count":150,"watchers_count":150,"language":104,"has_issues":85,"has_projects":73,"has_downloads":73,"has_wiki":73,"has_pages":85,"has_discussions":85,"forks_count":150,"mirror_url":104,"archived":85,"disabled":85,"open_issues_count":150,"license":819,"allow_forking":73,"is_template":85,"web_commit_signoff_required":85,"has_pull_requests":73,"pull_request_creation_policy":157,"topics":820,"visibility":102,"forks":150,"open_issues":150,"watchers":150,"default_branch":496},1132190635,"R_kgDOQ3vbqw","mjkatgithub/mcp-registry",{"login":87,"id":88,"node_id":89,"avatar_url":90,"gravatar_id":29,"url":91,"html_url":21,"followers_url":92,"following_url":93,"gists_url":94,"starred_url":95,"subscriptions_url":96,"organizations_url":97,"repos_url":98,"events_url":99,"received_events_url":100,"type":101,"user_view_type":102,"site_admin":85},"https://github.com/mjkatgithub/mcp-registry","Official Docker MCP registry ","https://api.github.com/repos/mjkatgithub/mcp-registry","https://api.github.com/repos/mjkatgithub/mcp-registry/forks","https://api.github.com/repos/mjkatgithub/mcp-registry/keys{/key_id}","https://api.github.com/repos/mjkatgithub/mcp-registry/collaborators{/collaborator}","https://api.github.com/repos/mjkatgithub/mcp-registry/teams","https://api.github.com/repos/mjkatgithub/mcp-registry/hooks","https://api.github.com/repos/mjkatgithub/mcp-registry/issues/events{/number}","https://api.github.com/repos/mjkatgithub/mcp-registry/events","https://api.github.com/repos/mjkatgithub/mcp-registry/assignees{/user}","https://api.github.com/repos/mjkatgithub/mcp-registry/branches{/branch}","https://api.github.com/repos/mjkatgithub/mcp-registry/tags","https://api.github.com/repos/mjkatgithub/mcp-registry/git/blobs{/sha}","https://api.github.com/repos/mjkatgithub/mcp-registry/git/tags{/sha}","https://api.github.com/repos/mjkatgithub/mcp-registry/git/refs{/sha}","https://api.github.com/repos/mjkatgithub/mcp-registry/git/trees{/sha}","https://api.github.com/repos/mjkatgithub/mcp-registry/statuses/{sha}","https://api.github.com/repos/mjkatgithub/mcp-registry/languages","https://api.github.com/repos/mjkatgithub/mcp-registry/stargazers","https://api.github.com/repos/mjkatgithub/mcp-registry/contributors","https://api.github.com/repos/mjkatgithub/mcp-registry/subscribers","https://api.github.com/repos/mjkatgithub/mcp-registry/subscription","https://api.github.com/repos/mjkatgithub/mcp-registry/commits{/sha}","https://api.github.com/repos/mjkatgithub/mcp-registry/git/commits{/sha}","https://api.github.com/repos/mjkatgithub/mcp-registry/comments{/number}","https://api.github.com/repos/mjkatgithub/mcp-registry/issues/comments{/number}","https://api.github.com/repos/mjkatgithub/mcp-registry/contents/{+path}","https://api.github.com/repos/mjkatgithub/mcp-registry/compare/{base}...{head}","https://api.github.com/repos/mjkatgithub/mcp-registry/merges","https://api.github.com/repos/mjkatgithub/mcp-registry/{archive_format}{/ref}","https://api.github.com/repos/mjkatgithub/mcp-registry/downloads","https://api.github.com/repos/mjkatgithub/mcp-registry/issues{/number}","https://api.github.com/repos/mjkatgithub/mcp-registry/pulls{/number}","https://api.github.com/repos/mjkatgithub/mcp-registry/milestones{/number}","https://api.github.com/repos/mjkatgithub/mcp-registry/notifications{?since,all,participating}","https://api.github.com/repos/mjkatgithub/mcp-registry/labels{/name}","https://api.github.com/repos/mjkatgithub/mcp-registry/releases{/id}","https://api.github.com/repos/mjkatgithub/mcp-registry/deployments","2026-01-11T14:00:56Z","2026-01-11T05:13:19Z","git://github.com/mjkatgithub/mcp-registry.git","git@github.com:mjkatgithub/mcp-registry.git","https://github.com/mjkatgithub/mcp-registry.git",1820,{"key":152,"name":153,"spdx_id":154,"url":155,"node_id":156},[],{"id":822,"node_id":823,"name":824,"full_name":825,"private":85,"owner":826,"html_url":827,"description":828,"fork":85,"url":829,"forks_url":830,"keys_url":831,"collaborators_url":832,"teams_url":833,"hooks_url":834,"issue_events_url":835,"events_url":836,"assignees_url":837,"branches_url":838,"tags_url":839,"blobs_url":840,"git_tags_url":841,"git_refs_url":842,"trees_url":843,"statuses_url":844,"languages_url":845,"stargazers_url":846,"contributors_url":847,"subscribers_url":848,"subscription_url":849,"commits_url":850,"git_commits_url":851,"comments_url":852,"issue_comment_url":853,"contents_url":854,"compare_url":855,"merges_url":856,"archive_url":857,"downloads_url":858,"issues_url":859,"pulls_url":860,"milestones_url":861,"notifications_url":862,"labels_url":863,"releases_url":864,"deployments_url":865,"created_at":866,"updated_at":867,"pushed_at":868,"git_url":869,"ssh_url":870,"clone_url":871,"svn_url":827,"homepage":104,"size":872,"stargazers_count":150,"watchers_count":150,"language":602,"has_issues":73,"has_projects":73,"has_downloads":73,"has_wiki":73,"has_pages":73,"has_discussions":85,"forks_count":150,"mirror_url":104,"archived":85,"disabled":85,"open_issues_count":30,"license":104,"allow_forking":73,"is_template":85,"web_commit_signoff_required":85,"has_pull_requests":73,"pull_request_creation_policy":157,"topics":873,"visibility":102,"forks":150,"open_issues":30,"watchers":150,"default_branch":159},912831607,"R_kgDONmi0dw","mjkatgithub.github.io","mjkatgithub/mjkatgithub.github.io",{"login":87,"id":88,"node_id":89,"avatar_url":90,"gravatar_id":29,"url":91,"html_url":21,"followers_url":92,"following_url":93,"gists_url":94,"starred_url":95,"subscriptions_url":96,"organizations_url":97,"repos_url":98,"events_url":99,"received_events_url":100,"type":101,"user_view_type":102,"site_admin":85},"https://github.com/mjkatgithub/mjkatgithub.github.io","this is my personal blog. just visit www.mjkatweb.de","https://api.github.com/repos/mjkatgithub/mjkatgithub.github.io","https://api.github.com/repos/mjkatgithub/mjkatgithub.github.io/forks","https://api.github.com/repos/mjkatgithub/mjkatgithub.github.io/keys{/key_id}","https://api.github.com/repos/mjkatgithub/mjkatgithub.github.io/collaborators{/collaborator}","https://api.github.com/repos/mjkatgithub/mjkatgithub.github.io/teams","https://api.github.com/repos/mjkatgithub/mjkatgithub.github.io/hooks","https://api.github.com/repos/mjkatgithub/mjkatgithub.github.io/issues/events{/number}","https://api.github.com/repos/mjkatgithub/mjkatgithub.github.io/events","https://api.github.com/repos/mjkatgithub/mjkatgithub.github.io/assignees{/user}","https://api.github.com/repos/mjkatgithub/mjkatgithub.github.io/branches{/branch}","https://api.github.com/repos/mjkatgithub/mjkatgithub.github.io/tags","https://api.github.com/repos/mjkatgithub/mjkatgithub.github.io/git/blobs{/sha}","https://api.github.com/repos/mjkatgithub/mjkatgithub.github.io/git/tags{/sha}","https://api.github.com/repos/mjkatgithub/mjkatgithub.github.io/git/refs{/sha}","https://api.github.com/repos/mjkatgithub/mjkatgithub.github.io/git/trees{/sha}","https://api.github.com/repos/mjkatgithub/mjkatgithub.github.io/statuses/{sha}","https://api.github.com/repos/mjkatgithub/mjkatgithub.github.io/languages","https://api.github.com/repos/mjkatgithub/mjkatgithub.github.io/stargazers","https://api.github.com/repos/mjkatgithub/mjkatgithub.github.io/contributors","https://api.github.com/repos/mjkatgithub/mjkatgithub.github.io/subscribers","https://api.github.com/repos/mjkatgithub/mjkatgithub.github.io/subscription","https://api.github.com/repos/mjkatgithub/mjkatgithub.github.io/commits{/sha}","https://api.github.com/repos/mjkatgithub/mjkatgithub.github.io/git/commits{/sha}","https://api.github.com/repos/mjkatgithub/mjkatgithub.github.io/comments{/number}","https://api.github.com/repos/mjkatgithub/mjkatgithub.github.io/issues/comments{/number}","https://api.github.com/repos/mjkatgithub/mjkatgithub.github.io/contents/{+path}","https://api.github.com/repos/mjkatgithub/mjkatgithub.github.io/compare/{base}...{head}","https://api.github.com/repos/mjkatgithub/mjkatgithub.github.io/merges","https://api.github.com/repos/mjkatgithub/mjkatgithub.github.io/{archive_format}{/ref}","https://api.github.com/repos/mjkatgithub/mjkatgithub.github.io/downloads","https://api.github.com/repos/mjkatgithub/mjkatgithub.github.io/issues{/number}","https://api.github.com/repos/mjkatgithub/mjkatgithub.github.io/pulls{/number}","https://api.github.com/repos/mjkatgithub/mjkatgithub.github.io/milestones{/number}","https://api.github.com/repos/mjkatgithub/mjkatgithub.github.io/notifications{?since,all,participating}","https://api.github.com/repos/mjkatgithub/mjkatgithub.github.io/labels{/name}","https://api.github.com/repos/mjkatgithub/mjkatgithub.github.io/releases{/id}","https://api.github.com/repos/mjkatgithub/mjkatgithub.github.io/deployments","2025-01-06T13:37:43Z","2026-04-06T10:32:32Z","2026-04-06T10:32:28Z","git://github.com/mjkatgithub/mjkatgithub.github.io.git","git@github.com:mjkatgithub/mjkatgithub.github.io.git","https://github.com/mjkatgithub/mjkatgithub.github.io.git",3805,[],{"id":875,"node_id":876,"name":877,"full_name":878,"private":85,"owner":879,"html_url":880,"description":104,"fork":73,"url":881,"forks_url":882,"keys_url":883,"collaborators_url":884,"teams_url":885,"hooks_url":886,"issue_events_url":887,"events_url":888,"assignees_url":889,"branches_url":890,"tags_url":891,"blobs_url":892,"git_tags_url":893,"git_refs_url":894,"trees_url":895,"statuses_url":896,"languages_url":897,"stargazers_url":898,"contributors_url":899,"subscribers_url":900,"subscription_url":901,"commits_url":902,"git_commits_url":903,"comments_url":904,"issue_comment_url":905,"contents_url":906,"compare_url":907,"merges_url":908,"archive_url":909,"downloads_url":910,"issues_url":911,"pulls_url":912,"milestones_url":913,"notifications_url":914,"labels_url":915,"releases_url":916,"deployments_url":917,"created_at":918,"updated_at":919,"pushed_at":920,"git_url":921,"ssh_url":922,"clone_url":923,"svn_url":880,"homepage":29,"size":924,"stargazers_count":150,"watchers_count":150,"language":104,"has_issues":85,"has_projects":73,"has_downloads":73,"has_wiki":73,"has_pages":85,"has_discussions":85,"forks_count":150,"mirror_url":104,"archived":85,"disabled":85,"open_issues_count":150,"license":925,"allow_forking":73,"is_template":85,"web_commit_signoff_required":85,"has_pull_requests":73,"pull_request_creation_policy":157,"topics":931,"visibility":102,"forks":150,"open_issues":150,"watchers":150,"default_branch":159},622007827,"R_kgDOJRMWEw","monolog-influxdb","mjkatgithub/monolog-influxdb",{"login":87,"id":88,"node_id":89,"avatar_url":90,"gravatar_id":29,"url":91,"html_url":21,"followers_url":92,"following_url":93,"gists_url":94,"starred_url":95,"subscriptions_url":96,"organizations_url":97,"repos_url":98,"events_url":99,"received_events_url":100,"type":101,"user_view_type":102,"site_admin":85},"https://github.com/mjkatgithub/monolog-influxdb","https://api.github.com/repos/mjkatgithub/monolog-influxdb","https://api.github.com/repos/mjkatgithub/monolog-influxdb/forks","https://api.github.com/repos/mjkatgithub/monolog-influxdb/keys{/key_id}","https://api.github.com/repos/mjkatgithub/monolog-influxdb/collaborators{/collaborator}","https://api.github.com/repos/mjkatgithub/monolog-influxdb/teams","https://api.github.com/repos/mjkatgithub/monolog-influxdb/hooks","https://api.github.com/repos/mjkatgithub/monolog-influxdb/issues/events{/number}","https://api.github.com/repos/mjkatgithub/monolog-influxdb/events","https://api.github.com/repos/mjkatgithub/monolog-influxdb/assignees{/user}","https://api.github.com/repos/mjkatgithub/monolog-influxdb/branches{/branch}","https://api.github.com/repos/mjkatgithub/monolog-influxdb/tags","https://api.github.com/repos/mjkatgithub/monolog-influxdb/git/blobs{/sha}","https://api.github.com/repos/mjkatgithub/monolog-influxdb/git/tags{/sha}","https://api.github.com/repos/mjkatgithub/monolog-influxdb/git/refs{/sha}","https://api.github.com/repos/mjkatgithub/monolog-influxdb/git/trees{/sha}","https://api.github.com/repos/mjkatgithub/monolog-influxdb/statuses/{sha}","https://api.github.com/repos/mjkatgithub/monolog-influxdb/languages","https://api.github.com/repos/mjkatgithub/monolog-influxdb/stargazers","https://api.github.com/repos/mjkatgithub/monolog-influxdb/contributors","https://api.github.com/repos/mjkatgithub/monolog-influxdb/subscribers","https://api.github.com/repos/mjkatgithub/monolog-influxdb/subscription","https://api.github.com/repos/mjkatgithub/monolog-influxdb/commits{/sha}","https://api.github.com/repos/mjkatgithub/monolog-influxdb/git/commits{/sha}","https://api.github.com/repos/mjkatgithub/monolog-influxdb/comments{/number}","https://api.github.com/repos/mjkatgithub/monolog-influxdb/issues/comments{/number}","https://api.github.com/repos/mjkatgithub/monolog-influxdb/contents/{+path}","https://api.github.com/repos/mjkatgithub/monolog-influxdb/compare/{base}...{head}","https://api.github.com/repos/mjkatgithub/monolog-influxdb/merges","https://api.github.com/repos/mjkatgithub/monolog-influxdb/{archive_format}{/ref}","https://api.github.com/repos/mjkatgithub/monolog-influxdb/downloads","https://api.github.com/repos/mjkatgithub/monolog-influxdb/issues{/number}","https://api.github.com/repos/mjkatgithub/monolog-influxdb/pulls{/number}","https://api.github.com/repos/mjkatgithub/monolog-influxdb/milestones{/number}","https://api.github.com/repos/mjkatgithub/monolog-influxdb/notifications{?since,all,participating}","https://api.github.com/repos/mjkatgithub/monolog-influxdb/labels{/name}","https://api.github.com/repos/mjkatgithub/monolog-influxdb/releases{/id}","https://api.github.com/repos/mjkatgithub/monolog-influxdb/deployments","2023-03-31T21:56:45Z","2025-09-29T19:42:03Z","2018-05-17T14:47:26Z","git://github.com/mjkatgithub/monolog-influxdb.git","git@github.com:mjkatgithub/monolog-influxdb.git","https://github.com/mjkatgithub/monolog-influxdb.git",13,{"key":926,"name":927,"spdx_id":928,"url":929,"node_id":930},"gpl-2.0","GNU General Public License v2.0","GPL-2.0","https://api.github.com/licenses/gpl-2.0","MDc6TGljZW5zZTg=",[],{"id":933,"node_id":934,"name":935,"full_name":936,"private":85,"owner":937,"html_url":938,"description":104,"fork":85,"url":939,"forks_url":940,"keys_url":941,"collaborators_url":942,"teams_url":943,"hooks_url":944,"issue_events_url":945,"events_url":946,"assignees_url":947,"branches_url":948,"tags_url":949,"blobs_url":950,"git_tags_url":951,"git_refs_url":952,"trees_url":953,"statuses_url":954,"languages_url":955,"stargazers_url":956,"contributors_url":957,"subscribers_url":958,"subscription_url":959,"commits_url":960,"git_commits_url":961,"comments_url":962,"issue_comment_url":963,"contents_url":964,"compare_url":965,"merges_url":966,"archive_url":967,"downloads_url":968,"issues_url":969,"pulls_url":970,"milestones_url":971,"notifications_url":972,"labels_url":973,"releases_url":974,"deployments_url":975,"created_at":976,"updated_at":977,"pushed_at":978,"git_url":979,"ssh_url":980,"clone_url":981,"svn_url":938,"homepage":29,"size":982,"stargazers_count":150,"watchers_count":150,"language":213,"has_issues":73,"has_projects":73,"has_downloads":73,"has_wiki":73,"has_pages":85,"has_discussions":85,"forks_count":150,"mirror_url":104,"archived":85,"disabled":85,"open_issues_count":372,"license":104,"allow_forking":73,"is_template":85,"web_commit_signoff_required":85,"has_pull_requests":73,"pull_request_creation_policy":157,"topics":983,"visibility":102,"forks":150,"open_issues":372,"watchers":150,"default_branch":159},290888847,"MDEwOlJlcG9zaXRvcnkyOTA4ODg4NDc=","multilist","mjkatgithub/multilist",{"login":87,"id":88,"node_id":89,"avatar_url":90,"gravatar_id":29,"url":91,"html_url":21,"followers_url":92,"following_url":93,"gists_url":94,"starred_url":95,"subscriptions_url":96,"organizations_url":97,"repos_url":98,"events_url":99,"received_events_url":100,"type":101,"user_view_type":102,"site_admin":85},"https://github.com/mjkatgithub/multilist","https://api.github.com/repos/mjkatgithub/multilist","https://api.github.com/repos/mjkatgithub/multilist/forks","https://api.github.com/repos/mjkatgithub/multilist/keys{/key_id}","https://api.github.com/repos/mjkatgithub/multilist/collaborators{/collaborator}","https://api.github.com/repos/mjkatgithub/multilist/teams","https://api.github.com/repos/mjkatgithub/multilist/hooks","https://api.github.com/repos/mjkatgithub/multilist/issues/events{/number}","https://api.github.com/repos/mjkatgithub/multilist/events","https://api.github.com/repos/mjkatgithub/multilist/assignees{/user}","https://api.github.com/repos/mjkatgithub/multilist/branches{/branch}","https://api.github.com/repos/mjkatgithub/multilist/tags","https://api.github.com/repos/mjkatgithub/multilist/git/blobs{/sha}","https://api.github.com/repos/mjkatgithub/multilist/git/tags{/sha}","https://api.github.com/repos/mjkatgithub/multilist/git/refs{/sha}","https://api.github.com/repos/mjkatgithub/multilist/git/trees{/sha}","https://api.github.com/repos/mjkatgithub/multilist/statuses/{sha}","https://api.github.com/repos/mjkatgithub/multilist/languages","https://api.github.com/repos/mjkatgithub/multilist/stargazers","https://api.github.com/repos/mjkatgithub/multilist/contributors","https://api.github.com/repos/mjkatgithub/multilist/subscribers","https://api.github.com/repos/mjkatgithub/multilist/subscription","https://api.github.com/repos/mjkatgithub/multilist/commits{/sha}","https://api.github.com/repos/mjkatgithub/multilist/git/commits{/sha}","https://api.github.com/repos/mjkatgithub/multilist/comments{/number}","https://api.github.com/repos/mjkatgithub/multilist/issues/comments{/number}","https://api.github.com/repos/mjkatgithub/multilist/contents/{+path}","https://api.github.com/repos/mjkatgithub/multilist/compare/{base}...{head}","https://api.github.com/repos/mjkatgithub/multilist/merges","https://api.github.com/repos/mjkatgithub/multilist/{archive_format}{/ref}","https://api.github.com/repos/mjkatgithub/multilist/downloads","https://api.github.com/repos/mjkatgithub/multilist/issues{/number}","https://api.github.com/repos/mjkatgithub/multilist/pulls{/number}","https://api.github.com/repos/mjkatgithub/multilist/milestones{/number}","https://api.github.com/repos/mjkatgithub/multilist/notifications{?since,all,participating}","https://api.github.com/repos/mjkatgithub/multilist/labels{/name}","https://api.github.com/repos/mjkatgithub/multilist/releases{/id}","https://api.github.com/repos/mjkatgithub/multilist/deployments","2020-08-27T21:47:26Z","2026-03-27T22:29:00Z","2020-09-18T09:31:31Z","git://github.com/mjkatgithub/multilist.git","git@github.com:mjkatgithub/multilist.git","https://github.com/mjkatgithub/multilist.git",1850,[],{"id":985,"node_id":986,"name":987,"full_name":988,"private":85,"owner":989,"html_url":990,"description":104,"fork":85,"url":991,"forks_url":992,"keys_url":993,"collaborators_url":994,"teams_url":995,"hooks_url":996,"issue_events_url":997,"events_url":998,"assignees_url":999,"branches_url":1000,"tags_url":1001,"blobs_url":1002,"git_tags_url":1003,"git_refs_url":1004,"trees_url":1005,"statuses_url":1006,"languages_url":1007,"stargazers_url":1008,"contributors_url":1009,"subscribers_url":1010,"subscription_url":1011,"commits_url":1012,"git_commits_url":1013,"comments_url":1014,"issue_comment_url":1015,"contents_url":1016,"compare_url":1017,"merges_url":1018,"archive_url":1019,"downloads_url":1020,"issues_url":1021,"pulls_url":1022,"milestones_url":1023,"notifications_url":1024,"labels_url":1025,"releases_url":1026,"deployments_url":1027,"created_at":1028,"updated_at":1029,"pushed_at":1030,"git_url":1031,"ssh_url":1032,"clone_url":1033,"svn_url":990,"homepage":104,"size":30,"stargazers_count":150,"watchers_count":150,"language":1034,"has_issues":73,"has_projects":73,"has_downloads":73,"has_wiki":73,"has_pages":85,"has_discussions":85,"forks_count":150,"mirror_url":104,"archived":85,"disabled":85,"open_issues_count":150,"license":104,"allow_forking":73,"is_template":85,"web_commit_signoff_required":85,"has_pull_requests":73,"pull_request_creation_policy":157,"topics":1035,"visibility":102,"forks":150,"open_issues":150,"watchers":150,"default_branch":159},84307958,"MDEwOlJlcG9zaXRvcnk4NDMwNzk1OA==","my-conf","mjkatgithub/my-conf",{"login":87,"id":88,"node_id":89,"avatar_url":90,"gravatar_id":29,"url":91,"html_url":21,"followers_url":92,"following_url":93,"gists_url":94,"starred_url":95,"subscriptions_url":96,"organizations_url":97,"repos_url":98,"events_url":99,"received_events_url":100,"type":101,"user_view_type":102,"site_admin":85},"https://github.com/mjkatgithub/my-conf","https://api.github.com/repos/mjkatgithub/my-conf","https://api.github.com/repos/mjkatgithub/my-conf/forks","https://api.github.com/repos/mjkatgithub/my-conf/keys{/key_id}","https://api.github.com/repos/mjkatgithub/my-conf/collaborators{/collaborator}","https://api.github.com/repos/mjkatgithub/my-conf/teams","https://api.github.com/repos/mjkatgithub/my-conf/hooks","https://api.github.com/repos/mjkatgithub/my-conf/issues/events{/number}","https://api.github.com/repos/mjkatgithub/my-conf/events","https://api.github.com/repos/mjkatgithub/my-conf/assignees{/user}","https://api.github.com/repos/mjkatgithub/my-conf/branches{/branch}","https://api.github.com/repos/mjkatgithub/my-conf/tags","https://api.github.com/repos/mjkatgithub/my-conf/git/blobs{/sha}","https://api.github.com/repos/mjkatgithub/my-conf/git/tags{/sha}","https://api.github.com/repos/mjkatgithub/my-conf/git/refs{/sha}","https://api.github.com/repos/mjkatgithub/my-conf/git/trees{/sha}","https://api.github.com/repos/mjkatgithub/my-conf/statuses/{sha}","https://api.github.com/repos/mjkatgithub/my-conf/languages","https://api.github.com/repos/mjkatgithub/my-conf/stargazers","https://api.github.com/repos/mjkatgithub/my-conf/contributors","https://api.github.com/repos/mjkatgithub/my-conf/subscribers","https://api.github.com/repos/mjkatgithub/my-conf/subscription","https://api.github.com/repos/mjkatgithub/my-conf/commits{/sha}","https://api.github.com/repos/mjkatgithub/my-conf/git/commits{/sha}","https://api.github.com/repos/mjkatgithub/my-conf/comments{/number}","https://api.github.com/repos/mjkatgithub/my-conf/issues/comments{/number}","https://api.github.com/repos/mjkatgithub/my-conf/contents/{+path}","https://api.github.com/repos/mjkatgithub/my-conf/compare/{base}...{head}","https://api.github.com/repos/mjkatgithub/my-conf/merges","https://api.github.com/repos/mjkatgithub/my-conf/{archive_format}{/ref}","https://api.github.com/repos/mjkatgithub/my-conf/downloads","https://api.github.com/repos/mjkatgithub/my-conf/issues{/number}","https://api.github.com/repos/mjkatgithub/my-conf/pulls{/number}","https://api.github.com/repos/mjkatgithub/my-conf/milestones{/number}","https://api.github.com/repos/mjkatgithub/my-conf/notifications{?since,all,participating}","https://api.github.com/repos/mjkatgithub/my-conf/labels{/name}","https://api.github.com/repos/mjkatgithub/my-conf/releases{/id}","https://api.github.com/repos/mjkatgithub/my-conf/deployments","2017-03-08T10:24:04Z","2018-04-22T07:50:36Z","2018-04-22T07:50:35Z","git://github.com/mjkatgithub/my-conf.git","git@github.com:mjkatgithub/my-conf.git","https://github.com/mjkatgithub/my-conf.git","Emacs Lisp",[],{"id":1037,"node_id":1038,"name":1039,"full_name":1040,"private":85,"owner":1041,"html_url":1042,"description":104,"fork":85,"url":1043,"forks_url":1044,"keys_url":1045,"collaborators_url":1046,"teams_url":1047,"hooks_url":1048,"issue_events_url":1049,"events_url":1050,"assignees_url":1051,"branches_url":1052,"tags_url":1053,"blobs_url":1054,"git_tags_url":1055,"git_refs_url":1056,"trees_url":1057,"statuses_url":1058,"languages_url":1059,"stargazers_url":1060,"contributors_url":1061,"subscribers_url":1062,"subscription_url":1063,"commits_url":1064,"git_commits_url":1065,"comments_url":1066,"issue_comment_url":1067,"contents_url":1068,"compare_url":1069,"merges_url":1070,"archive_url":1071,"downloads_url":1072,"issues_url":1073,"pulls_url":1074,"milestones_url":1075,"notifications_url":1076,"labels_url":1077,"releases_url":1078,"deployments_url":1079,"created_at":1080,"updated_at":1081,"pushed_at":1082,"git_url":1083,"ssh_url":1084,"clone_url":1085,"svn_url":1042,"homepage":29,"size":1086,"stargazers_count":150,"watchers_count":150,"language":213,"has_issues":73,"has_projects":73,"has_downloads":73,"has_wiki":73,"has_pages":85,"has_discussions":85,"forks_count":150,"mirror_url":104,"archived":85,"disabled":85,"open_issues_count":1087,"license":104,"allow_forking":73,"is_template":85,"web_commit_signoff_required":85,"has_pull_requests":73,"pull_request_creation_policy":157,"topics":1088,"visibility":102,"forks":150,"open_issues":1087,"watchers":150,"default_branch":159},263119425,"MDEwOlJlcG9zaXRvcnkyNjMxMTk0MjU=","myproject","mjkatgithub/myproject",{"login":87,"id":88,"node_id":89,"avatar_url":90,"gravatar_id":29,"url":91,"html_url":21,"followers_url":92,"following_url":93,"gists_url":94,"starred_url":95,"subscriptions_url":96,"organizations_url":97,"repos_url":98,"events_url":99,"received_events_url":100,"type":101,"user_view_type":102,"site_admin":85},"https://github.com/mjkatgithub/myproject","https://api.github.com/repos/mjkatgithub/myproject","https://api.github.com/repos/mjkatgithub/myproject/forks","https://api.github.com/repos/mjkatgithub/myproject/keys{/key_id}","https://api.github.com/repos/mjkatgithub/myproject/collaborators{/collaborator}","https://api.github.com/repos/mjkatgithub/myproject/teams","https://api.github.com/repos/mjkatgithub/myproject/hooks","https://api.github.com/repos/mjkatgithub/myproject/issues/events{/number}","https://api.github.com/repos/mjkatgithub/myproject/events","https://api.github.com/repos/mjkatgithub/myproject/assignees{/user}","https://api.github.com/repos/mjkatgithub/myproject/branches{/branch}","https://api.github.com/repos/mjkatgithub/myproject/tags","https://api.github.com/repos/mjkatgithub/myproject/git/blobs{/sha}","https://api.github.com/repos/mjkatgithub/myproject/git/tags{/sha}","https://api.github.com/repos/mjkatgithub/myproject/git/refs{/sha}","https://api.github.com/repos/mjkatgithub/myproject/git/trees{/sha}","https://api.github.com/repos/mjkatgithub/myproject/statuses/{sha}","https://api.github.com/repos/mjkatgithub/myproject/languages","https://api.github.com/repos/mjkatgithub/myproject/stargazers","https://api.github.com/repos/mjkatgithub/myproject/contributors","https://api.github.com/repos/mjkatgithub/myproject/subscribers","https://api.github.com/repos/mjkatgithub/myproject/subscription","https://api.github.com/repos/mjkatgithub/myproject/commits{/sha}","https://api.github.com/repos/mjkatgithub/myproject/git/commits{/sha}","https://api.github.com/repos/mjkatgithub/myproject/comments{/number}","https://api.github.com/repos/mjkatgithub/myproject/issues/comments{/number}","https://api.github.com/repos/mjkatgithub/myproject/contents/{+path}","https://api.github.com/repos/mjkatgithub/myproject/compare/{base}...{head}","https://api.github.com/repos/mjkatgithub/myproject/merges","https://api.github.com/repos/mjkatgithub/myproject/{archive_format}{/ref}","https://api.github.com/repos/mjkatgithub/myproject/downloads","https://api.github.com/repos/mjkatgithub/myproject/issues{/number}","https://api.github.com/repos/mjkatgithub/myproject/pulls{/number}","https://api.github.com/repos/mjkatgithub/myproject/milestones{/number}","https://api.github.com/repos/mjkatgithub/myproject/notifications{?since,all,participating}","https://api.github.com/repos/mjkatgithub/myproject/labels{/name}","https://api.github.com/repos/mjkatgithub/myproject/releases{/id}","https://api.github.com/repos/mjkatgithub/myproject/deployments","2020-05-11T18:05:37Z","2025-09-29T19:38:17Z","2023-01-26T20:01:41Z","git://github.com/mjkatgithub/myproject.git","git@github.com:mjkatgithub/myproject.git","https://github.com/mjkatgithub/myproject.git",1299,14,[],{"id":1090,"node_id":1091,"name":1092,"full_name":1093,"private":85,"owner":1094,"html_url":1095,"description":104,"fork":85,"url":1096,"forks_url":1097,"keys_url":1098,"collaborators_url":1099,"teams_url":1100,"hooks_url":1101,"issue_events_url":1102,"events_url":1103,"assignees_url":1104,"branches_url":1105,"tags_url":1106,"blobs_url":1107,"git_tags_url":1108,"git_refs_url":1109,"trees_url":1110,"statuses_url":1111,"languages_url":1112,"stargazers_url":1113,"contributors_url":1114,"subscribers_url":1115,"subscription_url":1116,"commits_url":1117,"git_commits_url":1118,"comments_url":1119,"issue_comment_url":1120,"contents_url":1121,"compare_url":1122,"merges_url":1123,"archive_url":1124,"downloads_url":1125,"issues_url":1126,"pulls_url":1127,"milestones_url":1128,"notifications_url":1129,"labels_url":1130,"releases_url":1131,"deployments_url":1132,"created_at":1133,"updated_at":1134,"pushed_at":1135,"git_url":1136,"ssh_url":1137,"clone_url":1138,"svn_url":1095,"homepage":29,"size":1139,"stargazers_count":150,"watchers_count":150,"language":104,"has_issues":73,"has_projects":73,"has_downloads":73,"has_wiki":73,"has_pages":85,"has_discussions":85,"forks_count":150,"mirror_url":104,"archived":85,"disabled":85,"open_issues_count":372,"license":1140,"allow_forking":73,"is_template":85,"web_commit_signoff_required":85,"has_pull_requests":73,"pull_request_creation_policy":157,"topics":1141,"visibility":102,"forks":150,"open_issues":372,"watchers":150,"default_branch":159},163596949,"MDEwOlJlcG9zaXRvcnkxNjM1OTY5NDk=","netplan-wizard","mjkatgithub/netplan-wizard",{"login":87,"id":88,"node_id":89,"avatar_url":90,"gravatar_id":29,"url":91,"html_url":21,"followers_url":92,"following_url":93,"gists_url":94,"starred_url":95,"subscriptions_url":96,"organizations_url":97,"repos_url":98,"events_url":99,"received_events_url":100,"type":101,"user_view_type":102,"site_admin":85},"https://github.com/mjkatgithub/netplan-wizard","https://api.github.com/repos/mjkatgithub/netplan-wizard","https://api.github.com/repos/mjkatgithub/netplan-wizard/forks","https://api.github.com/repos/mjkatgithub/netplan-wizard/keys{/key_id}","https://api.github.com/repos/mjkatgithub/netplan-wizard/collaborators{/collaborator}","https://api.github.com/repos/mjkatgithub/netplan-wizard/teams","https://api.github.com/repos/mjkatgithub/netplan-wizard/hooks","https://api.github.com/repos/mjkatgithub/netplan-wizard/issues/events{/number}","https://api.github.com/repos/mjkatgithub/netplan-wizard/events","https://api.github.com/repos/mjkatgithub/netplan-wizard/assignees{/user}","https://api.github.com/repos/mjkatgithub/netplan-wizard/branches{/branch}","https://api.github.com/repos/mjkatgithub/netplan-wizard/tags","https://api.github.com/repos/mjkatgithub/netplan-wizard/git/blobs{/sha}","https://api.github.com/repos/mjkatgithub/netplan-wizard/git/tags{/sha}","https://api.github.com/repos/mjkatgithub/netplan-wizard/git/refs{/sha}","https://api.github.com/repos/mjkatgithub/netplan-wizard/git/trees{/sha}","https://api.github.com/repos/mjkatgithub/netplan-wizard/statuses/{sha}","https://api.github.com/repos/mjkatgithub/netplan-wizard/languages","https://api.github.com/repos/mjkatgithub/netplan-wizard/stargazers","https://api.github.com/repos/mjkatgithub/netplan-wizard/contributors","https://api.github.com/repos/mjkatgithub/netplan-wizard/subscribers","https://api.github.com/repos/mjkatgithub/netplan-wizard/subscription","https://api.github.com/repos/mjkatgithub/netplan-wizard/commits{/sha}","https://api.github.com/repos/mjkatgithub/netplan-wizard/git/commits{/sha}","https://api.github.com/repos/mjkatgithub/netplan-wizard/comments{/number}","https://api.github.com/repos/mjkatgithub/netplan-wizard/issues/comments{/number}","https://api.github.com/repos/mjkatgithub/netplan-wizard/contents/{+path}","https://api.github.com/repos/mjkatgithub/netplan-wizard/compare/{base}...{head}","https://api.github.com/repos/mjkatgithub/netplan-wizard/merges","https://api.github.com/repos/mjkatgithub/netplan-wizard/{archive_format}{/ref}","https://api.github.com/repos/mjkatgithub/netplan-wizard/downloads","https://api.github.com/repos/mjkatgithub/netplan-wizard/issues{/number}","https://api.github.com/repos/mjkatgithub/netplan-wizard/pulls{/number}","https://api.github.com/repos/mjkatgithub/netplan-wizard/milestones{/number}","https://api.github.com/repos/mjkatgithub/netplan-wizard/notifications{?since,all,participating}","https://api.github.com/repos/mjkatgithub/netplan-wizard/labels{/name}","https://api.github.com/repos/mjkatgithub/netplan-wizard/releases{/id}","https://api.github.com/repos/mjkatgithub/netplan-wizard/deployments","2018-12-30T15:20:27Z","2025-12-21T19:11:45Z","2018-12-30T15:21:08Z","git://github.com/mjkatgithub/netplan-wizard.git","git@github.com:mjkatgithub/netplan-wizard.git","https://github.com/mjkatgithub/netplan-wizard.git",15,{"key":490,"name":491,"spdx_id":492,"url":493,"node_id":494},[],{"id":1143,"node_id":1144,"name":1145,"full_name":1146,"private":85,"owner":1147,"html_url":1148,"description":104,"fork":85,"url":1149,"forks_url":1150,"keys_url":1151,"collaborators_url":1152,"teams_url":1153,"hooks_url":1154,"issue_events_url":1155,"events_url":1156,"assignees_url":1157,"branches_url":1158,"tags_url":1159,"blobs_url":1160,"git_tags_url":1161,"git_refs_url":1162,"trees_url":1163,"statuses_url":1164,"languages_url":1165,"stargazers_url":1166,"contributors_url":1167,"subscribers_url":1168,"subscription_url":1169,"commits_url":1170,"git_commits_url":1171,"comments_url":1172,"issue_comment_url":1173,"contents_url":1174,"compare_url":1175,"merges_url":1176,"archive_url":1177,"downloads_url":1178,"issues_url":1179,"pulls_url":1180,"milestones_url":1181,"notifications_url":1182,"labels_url":1183,"releases_url":1184,"deployments_url":1185,"created_at":1186,"updated_at":1187,"pushed_at":1188,"git_url":1189,"ssh_url":1190,"clone_url":1191,"svn_url":1148,"homepage":29,"size":1192,"stargazers_count":150,"watchers_count":150,"language":373,"has_issues":73,"has_projects":73,"has_downloads":73,"has_wiki":73,"has_pages":85,"has_discussions":85,"forks_count":150,"mirror_url":104,"archived":85,"disabled":85,"open_issues_count":150,"license":104,"allow_forking":73,"is_template":85,"web_commit_signoff_required":85,"has_pull_requests":73,"pull_request_creation_policy":157,"topics":1193,"visibility":102,"forks":150,"open_issues":150,"watchers":150,"default_branch":382},378466377,"MDEwOlJlcG9zaXRvcnkzNzg0NjYzNzc=","ng6","mjkatgithub/ng6",{"login":87,"id":88,"node_id":89,"avatar_url":90,"gravatar_id":29,"url":91,"html_url":21,"followers_url":92,"following_url":93,"gists_url":94,"starred_url":95,"subscriptions_url":96,"organizations_url":97,"repos_url":98,"events_url":99,"received_events_url":100,"type":101,"user_view_type":102,"site_admin":85},"https://github.com/mjkatgithub/ng6","https://api.github.com/repos/mjkatgithub/ng6","https://api.github.com/repos/mjkatgithub/ng6/forks","https://api.github.com/repos/mjkatgithub/ng6/keys{/key_id}","https://api.github.com/repos/mjkatgithub/ng6/collaborators{/collaborator}","https://api.github.com/repos/mjkatgithub/ng6/teams","https://api.github.com/repos/mjkatgithub/ng6/hooks","https://api.github.com/repos/mjkatgithub/ng6/issues/events{/number}","https://api.github.com/repos/mjkatgithub/ng6/events","https://api.github.com/repos/mjkatgithub/ng6/assignees{/user}","https://api.github.com/repos/mjkatgithub/ng6/branches{/branch}","https://api.github.com/repos/mjkatgithub/ng6/tags","https://api.github.com/repos/mjkatgithub/ng6/git/blobs{/sha}","https://api.github.com/repos/mjkatgithub/ng6/git/tags{/sha}","https://api.github.com/repos/mjkatgithub/ng6/git/refs{/sha}","https://api.github.com/repos/mjkatgithub/ng6/git/trees{/sha}","https://api.github.com/repos/mjkatgithub/ng6/statuses/{sha}","https://api.github.com/repos/mjkatgithub/ng6/languages","https://api.github.com/repos/mjkatgithub/ng6/stargazers","https://api.github.com/repos/mjkatgithub/ng6/contributors","https://api.github.com/repos/mjkatgithub/ng6/subscribers","https://api.github.com/repos/mjkatgithub/ng6/subscription","https://api.github.com/repos/mjkatgithub/ng6/commits{/sha}","https://api.github.com/repos/mjkatgithub/ng6/git/commits{/sha}","https://api.github.com/repos/mjkatgithub/ng6/comments{/number}","https://api.github.com/repos/mjkatgithub/ng6/issues/comments{/number}","https://api.github.com/repos/mjkatgithub/ng6/contents/{+path}","https://api.github.com/repos/mjkatgithub/ng6/compare/{base}...{head}","https://api.github.com/repos/mjkatgithub/ng6/merges","https://api.github.com/repos/mjkatgithub/ng6/{archive_format}{/ref}","https://api.github.com/repos/mjkatgithub/ng6/downloads","https://api.github.com/repos/mjkatgithub/ng6/issues{/number}","https://api.github.com/repos/mjkatgithub/ng6/pulls{/number}","https://api.github.com/repos/mjkatgithub/ng6/milestones{/number}","https://api.github.com/repos/mjkatgithub/ng6/notifications{?since,all,participating}","https://api.github.com/repos/mjkatgithub/ng6/labels{/name}","https://api.github.com/repos/mjkatgithub/ng6/releases{/id}","https://api.github.com/repos/mjkatgithub/ng6/deployments","2021-06-19T17:16:47Z","2025-09-29T19:41:06Z","2021-06-21T21:07:46Z","git://github.com/mjkatgithub/ng6.git","git@github.com:mjkatgithub/ng6.git","https://github.com/mjkatgithub/ng6.git",143,[],{"id":1195,"node_id":1196,"name":1197,"full_name":1198,"private":85,"owner":1199,"html_url":1200,"description":104,"fork":73,"url":1201,"forks_url":1202,"keys_url":1203,"collaborators_url":1204,"teams_url":1205,"hooks_url":1206,"issue_events_url":1207,"events_url":1208,"assignees_url":1209,"branches_url":1210,"tags_url":1211,"blobs_url":1212,"git_tags_url":1213,"git_refs_url":1214,"trees_url":1215,"statuses_url":1216,"languages_url":1217,"stargazers_url":1218,"contributors_url":1219,"subscribers_url":1220,"subscription_url":1221,"commits_url":1222,"git_commits_url":1223,"comments_url":1224,"issue_comment_url":1225,"contents_url":1226,"compare_url":1227,"merges_url":1228,"archive_url":1229,"downloads_url":1230,"issues_url":1231,"pulls_url":1232,"milestones_url":1233,"notifications_url":1234,"labels_url":1235,"releases_url":1236,"deployments_url":1237,"created_at":1238,"updated_at":1239,"pushed_at":1240,"git_url":1241,"ssh_url":1242,"clone_url":1243,"svn_url":1200,"homepage":29,"size":1244,"stargazers_count":150,"watchers_count":150,"language":104,"has_issues":85,"has_projects":73,"has_downloads":73,"has_wiki":85,"has_pages":85,"has_discussions":85,"forks_count":150,"mirror_url":104,"archived":85,"disabled":85,"open_issues_count":150,"license":1245,"allow_forking":73,"is_template":85,"web_commit_signoff_required":85,"has_pull_requests":73,"pull_request_creation_policy":157,"topics":1246,"visibility":102,"forks":150,"open_issues":150,"watchers":150,"default_branch":159},283310721,"MDEwOlJlcG9zaXRvcnkyODMzMTA3MjE=","pages-health-check","mjkatgithub/pages-health-check",{"login":87,"id":88,"node_id":89,"avatar_url":90,"gravatar_id":29,"url":91,"html_url":21,"followers_url":92,"following_url":93,"gists_url":94,"starred_url":95,"subscriptions_url":96,"organizations_url":97,"repos_url":98,"events_url":99,"received_events_url":100,"type":101,"user_view_type":102,"site_admin":85},"https://github.com/mjkatgithub/pages-health-check","https://api.github.com/repos/mjkatgithub/pages-health-check","https://api.github.com/repos/mjkatgithub/pages-health-check/forks","https://api.github.com/repos/mjkatgithub/pages-health-check/keys{/key_id}","https://api.github.com/repos/mjkatgithub/pages-health-check/collaborators{/collaborator}","https://api.github.com/repos/mjkatgithub/pages-health-check/teams","https://api.github.com/repos/mjkatgithub/pages-health-check/hooks","https://api.github.com/repos/mjkatgithub/pages-health-check/issues/events{/number}","https://api.github.com/repos/mjkatgithub/pages-health-check/events","https://api.github.com/repos/mjkatgithub/pages-health-check/assignees{/user}","https://api.github.com/repos/mjkatgithub/pages-health-check/branches{/branch}","https://api.github.com/repos/mjkatgithub/pages-health-check/tags","https://api.github.com/repos/mjkatgithub/pages-health-check/git/blobs{/sha}","https://api.github.com/repos/mjkatgithub/pages-health-check/git/tags{/sha}","https://api.github.com/repos/mjkatgithub/pages-health-check/git/refs{/sha}","https://api.github.com/repos/mjkatgithub/pages-health-check/git/trees{/sha}","https://api.github.com/repos/mjkatgithub/pages-health-check/statuses/{sha}","https://api.github.com/repos/mjkatgithub/pages-health-check/languages","https://api.github.com/repos/mjkatgithub/pages-health-check/stargazers","https://api.github.com/repos/mjkatgithub/pages-health-check/contributors","https://api.github.com/repos/mjkatgithub/pages-health-check/subscribers","https://api.github.com/repos/mjkatgithub/pages-health-check/subscription","https://api.github.com/repos/mjkatgithub/pages-health-check/commits{/sha}","https://api.github.com/repos/mjkatgithub/pages-health-check/git/commits{/sha}","https://api.github.com/repos/mjkatgithub/pages-health-check/comments{/number}","https://api.github.com/repos/mjkatgithub/pages-health-check/issues/comments{/number}","https://api.github.com/repos/mjkatgithub/pages-health-check/contents/{+path}","https://api.github.com/repos/mjkatgithub/pages-health-check/compare/{base}...{head}","https://api.github.com/repos/mjkatgithub/pages-health-check/merges","https://api.github.com/repos/mjkatgithub/pages-health-check/{archive_format}{/ref}","https://api.github.com/repos/mjkatgithub/pages-health-check/downloads","https://api.github.com/repos/mjkatgithub/pages-health-check/issues{/number}","https://api.github.com/repos/mjkatgithub/pages-health-check/pulls{/number}","https://api.github.com/repos/mjkatgithub/pages-health-check/milestones{/number}","https://api.github.com/repos/mjkatgithub/pages-health-check/notifications{?since,all,participating}","https://api.github.com/repos/mjkatgithub/pages-health-check/labels{/name}","https://api.github.com/repos/mjkatgithub/pages-health-check/releases{/id}","https://api.github.com/repos/mjkatgithub/pages-health-check/deployments","2020-07-28T19:40:51Z","2025-09-29T19:32:07Z","2018-06-02T11:52:45Z","git://github.com/mjkatgithub/pages-health-check.git","git@github.com:mjkatgithub/pages-health-check.git","https://github.com/mjkatgithub/pages-health-check.git",2683,{"key":152,"name":153,"spdx_id":154,"url":155,"node_id":156},[],{"id":1248,"node_id":1249,"name":1250,"full_name":1251,"private":85,"owner":1252,"html_url":1253,"description":1254,"fork":85,"url":1255,"forks_url":1256,"keys_url":1257,"collaborators_url":1258,"teams_url":1259,"hooks_url":1260,"issue_events_url":1261,"events_url":1262,"assignees_url":1263,"branches_url":1264,"tags_url":1265,"blobs_url":1266,"git_tags_url":1267,"git_refs_url":1268,"trees_url":1269,"statuses_url":1270,"languages_url":1271,"stargazers_url":1272,"contributors_url":1273,"subscribers_url":1274,"subscription_url":1275,"commits_url":1276,"git_commits_url":1277,"comments_url":1278,"issue_comment_url":1279,"contents_url":1280,"compare_url":1281,"merges_url":1282,"archive_url":1283,"downloads_url":1284,"issues_url":1285,"pulls_url":1286,"milestones_url":1287,"notifications_url":1288,"labels_url":1289,"releases_url":1290,"deployments_url":1291,"created_at":1292,"updated_at":1293,"pushed_at":1294,"git_url":1295,"ssh_url":1296,"clone_url":1297,"svn_url":1253,"homepage":104,"size":1298,"stargazers_count":150,"watchers_count":150,"language":655,"has_issues":73,"has_projects":73,"has_downloads":73,"has_wiki":73,"has_pages":85,"has_discussions":85,"forks_count":150,"mirror_url":104,"archived":85,"disabled":85,"open_issues_count":30,"license":1299,"allow_forking":73,"is_template":85,"web_commit_signoff_required":85,"has_pull_requests":73,"pull_request_creation_policy":157,"topics":1300,"visibility":102,"forks":150,"open_issues":30,"watchers":150,"default_branch":159},752064183,"R_kgDOLNOWtw","pricewatch","mjkatgithub/pricewatch",{"login":87,"id":88,"node_id":89,"avatar_url":90,"gravatar_id":29,"url":91,"html_url":21,"followers_url":92,"following_url":93,"gists_url":94,"starred_url":95,"subscriptions_url":96,"organizations_url":97,"repos_url":98,"events_url":99,"received_events_url":100,"type":101,"user_view_type":102,"site_admin":85},"https://github.com/mjkatgithub/pricewatch","Watch Price for V-Server and send E-Mail if it's 1,- €","https://api.github.com/repos/mjkatgithub/pricewatch","https://api.github.com/repos/mjkatgithub/pricewatch/forks","https://api.github.com/repos/mjkatgithub/pricewatch/keys{/key_id}","https://api.github.com/repos/mjkatgithub/pricewatch/collaborators{/collaborator}","https://api.github.com/repos/mjkatgithub/pricewatch/teams","https://api.github.com/repos/mjkatgithub/pricewatch/hooks","https://api.github.com/repos/mjkatgithub/pricewatch/issues/events{/number}","https://api.github.com/repos/mjkatgithub/pricewatch/events","https://api.github.com/repos/mjkatgithub/pricewatch/assignees{/user}","https://api.github.com/repos/mjkatgithub/pricewatch/branches{/branch}","https://api.github.com/repos/mjkatgithub/pricewatch/tags","https://api.github.com/repos/mjkatgithub/pricewatch/git/blobs{/sha}","https://api.github.com/repos/mjkatgithub/pricewatch/git/tags{/sha}","https://api.github.com/repos/mjkatgithub/pricewatch/git/refs{/sha}","https://api.github.com/repos/mjkatgithub/pricewatch/git/trees{/sha}","https://api.github.com/repos/mjkatgithub/pricewatch/statuses/{sha}","https://api.github.com/repos/mjkatgithub/pricewatch/languages","https://api.github.com/repos/mjkatgithub/pricewatch/stargazers","https://api.github.com/repos/mjkatgithub/pricewatch/contributors","https://api.github.com/repos/mjkatgithub/pricewatch/subscribers","https://api.github.com/repos/mjkatgithub/pricewatch/subscription","https://api.github.com/repos/mjkatgithub/pricewatch/commits{/sha}","https://api.github.com/repos/mjkatgithub/pricewatch/git/commits{/sha}","https://api.github.com/repos/mjkatgithub/pricewatch/comments{/number}","https://api.github.com/repos/mjkatgithub/pricewatch/issues/comments{/number}","https://api.github.com/repos/mjkatgithub/pricewatch/contents/{+path}","https://api.github.com/repos/mjkatgithub/pricewatch/compare/{base}...{head}","https://api.github.com/repos/mjkatgithub/pricewatch/merges","https://api.github.com/repos/mjkatgithub/pricewatch/{archive_format}{/ref}","https://api.github.com/repos/mjkatgithub/pricewatch/downloads","https://api.github.com/repos/mjkatgithub/pricewatch/issues{/number}","https://api.github.com/repos/mjkatgithub/pricewatch/pulls{/number}","https://api.github.com/repos/mjkatgithub/pricewatch/milestones{/number}","https://api.github.com/repos/mjkatgithub/pricewatch/notifications{?since,all,participating}","https://api.github.com/repos/mjkatgithub/pricewatch/labels{/name}","https://api.github.com/repos/mjkatgithub/pricewatch/releases{/id}","https://api.github.com/repos/mjkatgithub/pricewatch/deployments","2024-02-02T23:44:50Z","2024-02-02T23:58:18Z","2024-09-15T19:26:32Z","git://github.com/mjkatgithub/pricewatch.git","git@github.com:mjkatgithub/pricewatch.git","https://github.com/mjkatgithub/pricewatch.git",12,{"key":926,"name":927,"spdx_id":928,"url":929,"node_id":930},[],{"id":1302,"node_id":1303,"name":1304,"full_name":1305,"private":85,"owner":1306,"html_url":1307,"description":1308,"fork":85,"url":1309,"forks_url":1310,"keys_url":1311,"collaborators_url":1312,"teams_url":1313,"hooks_url":1314,"issue_events_url":1315,"events_url":1316,"assignees_url":1317,"branches_url":1318,"tags_url":1319,"blobs_url":1320,"git_tags_url":1321,"git_refs_url":1322,"trees_url":1323,"statuses_url":1324,"languages_url":1325,"stargazers_url":1326,"contributors_url":1327,"subscribers_url":1328,"subscription_url":1329,"commits_url":1330,"git_commits_url":1331,"comments_url":1332,"issue_comment_url":1333,"contents_url":1334,"compare_url":1335,"merges_url":1336,"archive_url":1337,"downloads_url":1338,"issues_url":1339,"pulls_url":1340,"milestones_url":1341,"notifications_url":1342,"labels_url":1343,"releases_url":1344,"deployments_url":1345,"created_at":1346,"updated_at":1347,"pushed_at":1348,"git_url":1349,"ssh_url":1350,"clone_url":1351,"svn_url":1307,"homepage":104,"size":1352,"stargazers_count":150,"watchers_count":150,"language":373,"has_issues":73,"has_projects":73,"has_downloads":73,"has_wiki":73,"has_pages":85,"has_discussions":85,"forks_count":150,"mirror_url":104,"archived":85,"disabled":85,"open_issues_count":150,"license":104,"allow_forking":73,"is_template":85,"web_commit_signoff_required":85,"has_pull_requests":73,"pull_request_creation_policy":157,"topics":1353,"visibility":102,"forks":150,"open_issues":150,"watchers":150,"default_branch":496},909643246,"R_kgDONjgN7g","PriceWatchDashboard","mjkatgithub/PriceWatchDashboard",{"login":87,"id":88,"node_id":89,"avatar_url":90,"gravatar_id":29,"url":91,"html_url":21,"followers_url":92,"following_url":93,"gists_url":94,"starred_url":95,"subscriptions_url":96,"organizations_url":97,"repos_url":98,"events_url":99,"received_events_url":100,"type":101,"user_view_type":102,"site_admin":85},"https://github.com/mjkatgithub/PriceWatchDashboard","this will be the dashboard where you can configure your price watcher","https://api.github.com/repos/mjkatgithub/PriceWatchDashboard","https://api.github.com/repos/mjkatgithub/PriceWatchDashboard/forks","https://api.github.com/repos/mjkatgithub/PriceWatchDashboard/keys{/key_id}","https://api.github.com/repos/mjkatgithub/PriceWatchDashboard/collaborators{/collaborator}","https://api.github.com/repos/mjkatgithub/PriceWatchDashboard/teams","https://api.github.com/repos/mjkatgithub/PriceWatchDashboard/hooks","https://api.github.com/repos/mjkatgithub/PriceWatchDashboard/issues/events{/number}","https://api.github.com/repos/mjkatgithub/PriceWatchDashboard/events","https://api.github.com/repos/mjkatgithub/PriceWatchDashboard/assignees{/user}","https://api.github.com/repos/mjkatgithub/PriceWatchDashboard/branches{/branch}","https://api.github.com/repos/mjkatgithub/PriceWatchDashboard/tags","https://api.github.com/repos/mjkatgithub/PriceWatchDashboard/git/blobs{/sha}","https://api.github.com/repos/mjkatgithub/PriceWatchDashboard/git/tags{/sha}","https://api.github.com/repos/mjkatgithub/PriceWatchDashboard/git/refs{/sha}","https://api.github.com/repos/mjkatgithub/PriceWatchDashboard/git/trees{/sha}","https://api.github.com/repos/mjkatgithub/PriceWatchDashboard/statuses/{sha}","https://api.github.com/repos/mjkatgithub/PriceWatchDashboard/languages","https://api.github.com/repos/mjkatgithub/PriceWatchDashboard/stargazers","https://api.github.com/repos/mjkatgithub/PriceWatchDashboard/contributors","https://api.github.com/repos/mjkatgithub/PriceWatchDashboard/subscribers","https://api.github.com/repos/mjkatgithub/PriceWatchDashboard/subscription","https://api.github.com/repos/mjkatgithub/PriceWatchDashboard/commits{/sha}","https://api.github.com/repos/mjkatgithub/PriceWatchDashboard/git/commits{/sha}","https://api.github.com/repos/mjkatgithub/PriceWatchDashboard/comments{/number}","https://api.github.com/repos/mjkatgithub/PriceWatchDashboard/issues/comments{/number}","https://api.github.com/repos/mjkatgithub/PriceWatchDashboard/contents/{+path}","https://api.github.com/repos/mjkatgithub/PriceWatchDashboard/compare/{base}...{head}","https://api.github.com/repos/mjkatgithub/PriceWatchDashboard/merges","https://api.github.com/repos/mjkatgithub/PriceWatchDashboard/{archive_format}{/ref}","https://api.github.com/repos/mjkatgithub/PriceWatchDashboard/downloads","https://api.github.com/repos/mjkatgithub/PriceWatchDashboard/issues{/number}","https://api.github.com/repos/mjkatgithub/PriceWatchDashboard/pulls{/number}","https://api.github.com/repos/mjkatgithub/PriceWatchDashboard/milestones{/number}","https://api.github.com/repos/mjkatgithub/PriceWatchDashboard/notifications{?since,all,participating}","https://api.github.com/repos/mjkatgithub/PriceWatchDashboard/labels{/name}","https://api.github.com/repos/mjkatgithub/PriceWatchDashboard/releases{/id}","https://api.github.com/repos/mjkatgithub/PriceWatchDashboard/deployments","2024-12-29T11:00:54Z","2024-12-29T11:03:34Z","2024-12-29T11:05:51Z","git://github.com/mjkatgithub/PriceWatchDashboard.git","git@github.com:mjkatgithub/PriceWatchDashboard.git","https://github.com/mjkatgithub/PriceWatchDashboard.git",82,[],{"id":1355,"node_id":1356,"name":1357,"full_name":1358,"private":85,"owner":1359,"html_url":1360,"description":104,"fork":73,"url":1361,"forks_url":1362,"keys_url":1363,"collaborators_url":1364,"teams_url":1365,"hooks_url":1366,"issue_events_url":1367,"events_url":1368,"assignees_url":1369,"branches_url":1370,"tags_url":1371,"blobs_url":1372,"git_tags_url":1373,"git_refs_url":1374,"trees_url":1375,"statuses_url":1376,"languages_url":1377,"stargazers_url":1378,"contributors_url":1379,"subscribers_url":1380,"subscription_url":1381,"commits_url":1382,"git_commits_url":1383,"comments_url":1384,"issue_comment_url":1385,"contents_url":1386,"compare_url":1387,"merges_url":1388,"archive_url":1389,"downloads_url":1390,"issues_url":1391,"pulls_url":1392,"milestones_url":1393,"notifications_url":1394,"labels_url":1395,"releases_url":1396,"deployments_url":1397,"created_at":1398,"updated_at":1399,"pushed_at":1400,"git_url":1401,"ssh_url":1402,"clone_url":1403,"svn_url":1360,"homepage":104,"size":1404,"stargazers_count":150,"watchers_count":150,"language":1405,"has_issues":85,"has_projects":73,"has_downloads":73,"has_wiki":73,"has_pages":85,"has_discussions":85,"forks_count":150,"mirror_url":104,"archived":85,"disabled":85,"open_issues_count":150,"license":104,"allow_forking":73,"is_template":85,"web_commit_signoff_required":85,"has_pull_requests":73,"pull_request_creation_policy":157,"topics":1406,"visibility":102,"forks":150,"open_issues":150,"watchers":150,"default_branch":159},82953967,"MDEwOlJlcG9zaXRvcnk4Mjk1Mzk2Nw==","RaspiWeb","mjkatgithub/RaspiWeb",{"login":87,"id":88,"node_id":89,"avatar_url":90,"gravatar_id":29,"url":91,"html_url":21,"followers_url":92,"following_url":93,"gists_url":94,"starred_url":95,"subscriptions_url":96,"organizations_url":97,"repos_url":98,"events_url":99,"received_events_url":100,"type":101,"user_view_type":102,"site_admin":85},"https://github.com/mjkatgithub/RaspiWeb","https://api.github.com/repos/mjkatgithub/RaspiWeb","https://api.github.com/repos/mjkatgithub/RaspiWeb/forks","https://api.github.com/repos/mjkatgithub/RaspiWeb/keys{/key_id}","https://api.github.com/repos/mjkatgithub/RaspiWeb/collaborators{/collaborator}","https://api.github.com/repos/mjkatgithub/RaspiWeb/teams","https://api.github.com/repos/mjkatgithub/RaspiWeb/hooks","https://api.github.com/repos/mjkatgithub/RaspiWeb/issues/events{/number}","https://api.github.com/repos/mjkatgithub/RaspiWeb/events","https://api.github.com/repos/mjkatgithub/RaspiWeb/assignees{/user}","https://api.github.com/repos/mjkatgithub/RaspiWeb/branches{/branch}","https://api.github.com/repos/mjkatgithub/RaspiWeb/tags","https://api.github.com/repos/mjkatgithub/RaspiWeb/git/blobs{/sha}","https://api.github.com/repos/mjkatgithub/RaspiWeb/git/tags{/sha}","https://api.github.com/repos/mjkatgithub/RaspiWeb/git/refs{/sha}","https://api.github.com/repos/mjkatgithub/RaspiWeb/git/trees{/sha}","https://api.github.com/repos/mjkatgithub/RaspiWeb/statuses/{sha}","https://api.github.com/repos/mjkatgithub/RaspiWeb/languages","https://api.github.com/repos/mjkatgithub/RaspiWeb/stargazers","https://api.github.com/repos/mjkatgithub/RaspiWeb/contributors","https://api.github.com/repos/mjkatgithub/RaspiWeb/subscribers","https://api.github.com/repos/mjkatgithub/RaspiWeb/subscription","https://api.github.com/repos/mjkatgithub/RaspiWeb/commits{/sha}","https://api.github.com/repos/mjkatgithub/RaspiWeb/git/commits{/sha}","https://api.github.com/repos/mjkatgithub/RaspiWeb/comments{/number}","https://api.github.com/repos/mjkatgithub/RaspiWeb/issues/comments{/number}","https://api.github.com/repos/mjkatgithub/RaspiWeb/contents/{+path}","https://api.github.com/repos/mjkatgithub/RaspiWeb/compare/{base}...{head}","https://api.github.com/repos/mjkatgithub/RaspiWeb/merges","https://api.github.com/repos/mjkatgithub/RaspiWeb/{archive_format}{/ref}","https://api.github.com/repos/mjkatgithub/RaspiWeb/downloads","https://api.github.com/repos/mjkatgithub/RaspiWeb/issues{/number}","https://api.github.com/repos/mjkatgithub/RaspiWeb/pulls{/number}","https://api.github.com/repos/mjkatgithub/RaspiWeb/milestones{/number}","https://api.github.com/repos/mjkatgithub/RaspiWeb/notifications{?since,all,participating}","https://api.github.com/repos/mjkatgithub/RaspiWeb/labels{/name}","https://api.github.com/repos/mjkatgithub/RaspiWeb/releases{/id}","https://api.github.com/repos/mjkatgithub/RaspiWeb/deployments","2017-02-23T17:38:45Z","2017-02-23T17:38:47Z","2017-02-23T18:09:40Z","git://github.com/mjkatgithub/RaspiWeb.git","git@github.com:mjkatgithub/RaspiWeb.git","https://github.com/mjkatgithub/RaspiWeb.git",1582,"Java",[],{"id":1408,"node_id":1409,"name":1410,"full_name":1411,"private":85,"owner":1412,"html_url":1413,"description":104,"fork":73,"url":1414,"forks_url":1415,"keys_url":1416,"collaborators_url":1417,"teams_url":1418,"hooks_url":1419,"issue_events_url":1420,"events_url":1421,"assignees_url":1422,"branches_url":1423,"tags_url":1424,"blobs_url":1425,"git_tags_url":1426,"git_refs_url":1427,"trees_url":1428,"statuses_url":1429,"languages_url":1430,"stargazers_url":1431,"contributors_url":1432,"subscribers_url":1433,"subscription_url":1434,"commits_url":1435,"git_commits_url":1436,"comments_url":1437,"issue_comment_url":1438,"contents_url":1439,"compare_url":1440,"merges_url":1441,"archive_url":1442,"downloads_url":1443,"issues_url":1444,"pulls_url":1445,"milestones_url":1446,"notifications_url":1447,"labels_url":1448,"releases_url":1449,"deployments_url":1450,"created_at":1451,"updated_at":1452,"pushed_at":1453,"git_url":1454,"ssh_url":1455,"clone_url":1456,"svn_url":1413,"homepage":104,"size":1457,"stargazers_count":150,"watchers_count":150,"language":213,"has_issues":85,"has_projects":73,"has_downloads":73,"has_wiki":73,"has_pages":85,"has_discussions":85,"forks_count":150,"mirror_url":104,"archived":85,"disabled":85,"open_issues_count":150,"license":104,"allow_forking":73,"is_template":85,"web_commit_signoff_required":85,"has_pull_requests":73,"pull_request_creation_policy":157,"topics":1458,"visibility":102,"forks":150,"open_issues":150,"watchers":150,"default_branch":159},138606469,"MDEwOlJlcG9zaXRvcnkxMzg2MDY0Njk=","react-github-bookmarks","mjkatgithub/react-github-bookmarks",{"login":87,"id":88,"node_id":89,"avatar_url":90,"gravatar_id":29,"url":91,"html_url":21,"followers_url":92,"following_url":93,"gists_url":94,"starred_url":95,"subscriptions_url":96,"organizations_url":97,"repos_url":98,"events_url":99,"received_events_url":100,"type":101,"user_view_type":102,"site_admin":85},"https://github.com/mjkatgithub/react-github-bookmarks","https://api.github.com/repos/mjkatgithub/react-github-bookmarks","https://api.github.com/repos/mjkatgithub/react-github-bookmarks/forks","https://api.github.com/repos/mjkatgithub/react-github-bookmarks/keys{/key_id}","https://api.github.com/repos/mjkatgithub/react-github-bookmarks/collaborators{/collaborator}","https://api.github.com/repos/mjkatgithub/react-github-bookmarks/teams","https://api.github.com/repos/mjkatgithub/react-github-bookmarks/hooks","https://api.github.com/repos/mjkatgithub/react-github-bookmarks/issues/events{/number}","https://api.github.com/repos/mjkatgithub/react-github-bookmarks/events","https://api.github.com/repos/mjkatgithub/react-github-bookmarks/assignees{/user}","https://api.github.com/repos/mjkatgithub/react-github-bookmarks/branches{/branch}","https://api.github.com/repos/mjkatgithub/react-github-bookmarks/tags","https://api.github.com/repos/mjkatgithub/react-github-bookmarks/git/blobs{/sha}","https://api.github.com/repos/mjkatgithub/react-github-bookmarks/git/tags{/sha}","https://api.github.com/repos/mjkatgithub/react-github-bookmarks/git/refs{/sha}","https://api.github.com/repos/mjkatgithub/react-github-bookmarks/git/trees{/sha}","https://api.github.com/repos/mjkatgithub/react-github-bookmarks/statuses/{sha}","https://api.github.com/repos/mjkatgithub/react-github-bookmarks/languages","https://api.github.com/repos/mjkatgithub/react-github-bookmarks/stargazers","https://api.github.com/repos/mjkatgithub/react-github-bookmarks/contributors","https://api.github.com/repos/mjkatgithub/react-github-bookmarks/subscribers","https://api.github.com/repos/mjkatgithub/react-github-bookmarks/subscription","https://api.github.com/repos/mjkatgithub/react-github-bookmarks/commits{/sha}","https://api.github.com/repos/mjkatgithub/react-github-bookmarks/git/commits{/sha}","https://api.github.com/repos/mjkatgithub/react-github-bookmarks/comments{/number}","https://api.github.com/repos/mjkatgithub/react-github-bookmarks/issues/comments{/number}","https://api.github.com/repos/mjkatgithub/react-github-bookmarks/contents/{+path}","https://api.github.com/repos/mjkatgithub/react-github-bookmarks/compare/{base}...{head}","https://api.github.com/repos/mjkatgithub/react-github-bookmarks/merges","https://api.github.com/repos/mjkatgithub/react-github-bookmarks/{archive_format}{/ref}","https://api.github.com/repos/mjkatgithub/react-github-bookmarks/downloads","https://api.github.com/repos/mjkatgithub/react-github-bookmarks/issues{/number}","https://api.github.com/repos/mjkatgithub/react-github-bookmarks/pulls{/number}","https://api.github.com/repos/mjkatgithub/react-github-bookmarks/milestones{/number}","https://api.github.com/repos/mjkatgithub/react-github-bookmarks/notifications{?since,all,participating}","https://api.github.com/repos/mjkatgithub/react-github-bookmarks/labels{/name}","https://api.github.com/repos/mjkatgithub/react-github-bookmarks/releases{/id}","https://api.github.com/repos/mjkatgithub/react-github-bookmarks/deployments","2018-06-25T14:30:16Z","2018-07-18T08:29:12Z","2018-07-18T08:29:18Z","git://github.com/mjkatgithub/react-github-bookmarks.git","git@github.com:mjkatgithub/react-github-bookmarks.git","https://github.com/mjkatgithub/react-github-bookmarks.git",1459,[],{"id":1460,"node_id":1461,"name":1462,"full_name":1463,"private":85,"owner":1464,"html_url":1465,"description":1466,"fork":85,"url":1467,"forks_url":1468,"keys_url":1469,"collaborators_url":1470,"teams_url":1471,"hooks_url":1472,"issue_events_url":1473,"events_url":1474,"assignees_url":1475,"branches_url":1476,"tags_url":1477,"blobs_url":1478,"git_tags_url":1479,"git_refs_url":1480,"trees_url":1481,"statuses_url":1482,"languages_url":1483,"stargazers_url":1484,"contributors_url":1485,"subscribers_url":1486,"subscription_url":1487,"commits_url":1488,"git_commits_url":1489,"comments_url":1490,"issue_comment_url":1491,"contents_url":1492,"compare_url":1493,"merges_url":1494,"archive_url":1495,"downloads_url":1496,"issues_url":1497,"pulls_url":1498,"milestones_url":1499,"notifications_url":1500,"labels_url":1501,"releases_url":1502,"deployments_url":1503,"created_at":1504,"updated_at":1505,"pushed_at":1506,"git_url":1507,"ssh_url":1508,"clone_url":1509,"svn_url":1465,"homepage":29,"size":1510,"stargazers_count":150,"watchers_count":150,"language":373,"has_issues":73,"has_projects":73,"has_downloads":73,"has_wiki":73,"has_pages":85,"has_discussions":85,"forks_count":150,"mirror_url":104,"archived":85,"disabled":85,"open_issues_count":150,"license":1511,"allow_forking":73,"is_template":85,"web_commit_signoff_required":85,"has_pull_requests":73,"pull_request_creation_policy":157,"topics":1512,"visibility":102,"forks":150,"open_issues":150,"watchers":150,"default_branch":496},1132196655,"R_kgDOQ3vzLw","S3-MCP","mjkatgithub/S3-MCP",{"login":87,"id":88,"node_id":89,"avatar_url":90,"gravatar_id":29,"url":91,"html_url":21,"followers_url":92,"following_url":93,"gists_url":94,"starred_url":95,"subscriptions_url":96,"organizations_url":97,"repos_url":98,"events_url":99,"received_events_url":100,"type":101,"user_view_type":102,"site_admin":85},"https://github.com/mjkatgithub/S3-MCP","MCP server for S3‑compatible storage like MinIO","https://api.github.com/repos/mjkatgithub/S3-MCP","https://api.github.com/repos/mjkatgithub/S3-MCP/forks","https://api.github.com/repos/mjkatgithub/S3-MCP/keys{/key_id}","https://api.github.com/repos/mjkatgithub/S3-MCP/collaborators{/collaborator}","https://api.github.com/repos/mjkatgithub/S3-MCP/teams","https://api.github.com/repos/mjkatgithub/S3-MCP/hooks","https://api.github.com/repos/mjkatgithub/S3-MCP/issues/events{/number}","https://api.github.com/repos/mjkatgithub/S3-MCP/events","https://api.github.com/repos/mjkatgithub/S3-MCP/assignees{/user}","https://api.github.com/repos/mjkatgithub/S3-MCP/branches{/branch}","https://api.github.com/repos/mjkatgithub/S3-MCP/tags","https://api.github.com/repos/mjkatgithub/S3-MCP/git/blobs{/sha}","https://api.github.com/repos/mjkatgithub/S3-MCP/git/tags{/sha}","https://api.github.com/repos/mjkatgithub/S3-MCP/git/refs{/sha}","https://api.github.com/repos/mjkatgithub/S3-MCP/git/trees{/sha}","https://api.github.com/repos/mjkatgithub/S3-MCP/statuses/{sha}","https://api.github.com/repos/mjkatgithub/S3-MCP/languages","https://api.github.com/repos/mjkatgithub/S3-MCP/stargazers","https://api.github.com/repos/mjkatgithub/S3-MCP/contributors","https://api.github.com/repos/mjkatgithub/S3-MCP/subscribers","https://api.github.com/repos/mjkatgithub/S3-MCP/subscription","https://api.github.com/repos/mjkatgithub/S3-MCP/commits{/sha}","https://api.github.com/repos/mjkatgithub/S3-MCP/git/commits{/sha}","https://api.github.com/repos/mjkatgithub/S3-MCP/comments{/number}","https://api.github.com/repos/mjkatgithub/S3-MCP/issues/comments{/number}","https://api.github.com/repos/mjkatgithub/S3-MCP/contents/{+path}","https://api.github.com/repos/mjkatgithub/S3-MCP/compare/{base}...{head}","https://api.github.com/repos/mjkatgithub/S3-MCP/merges","https://api.github.com/repos/mjkatgithub/S3-MCP/{archive_format}{/ref}","https://api.github.com/repos/mjkatgithub/S3-MCP/downloads","https://api.github.com/repos/mjkatgithub/S3-MCP/issues{/number}","https://api.github.com/repos/mjkatgithub/S3-MCP/pulls{/number}","https://api.github.com/repos/mjkatgithub/S3-MCP/milestones{/number}","https://api.github.com/repos/mjkatgithub/S3-MCP/notifications{?since,all,participating}","https://api.github.com/repos/mjkatgithub/S3-MCP/labels{/name}","https://api.github.com/repos/mjkatgithub/S3-MCP/releases{/id}","https://api.github.com/repos/mjkatgithub/S3-MCP/deployments","2026-01-11T14:13:07Z","2026-01-11T23:17:34Z","2026-01-11T22:40:22Z","git://github.com/mjkatgithub/S3-MCP.git","git@github.com:mjkatgithub/S3-MCP.git","https://github.com/mjkatgithub/S3-MCP.git",54,{"key":152,"name":153,"spdx_id":154,"url":155,"node_id":156},[],{"id":1514,"node_id":1515,"name":1516,"full_name":1517,"private":85,"owner":1518,"html_url":1519,"description":1520,"fork":73,"url":1521,"forks_url":1522,"keys_url":1523,"collaborators_url":1524,"teams_url":1525,"hooks_url":1526,"issue_events_url":1527,"events_url":1528,"assignees_url":1529,"branches_url":1530,"tags_url":1531,"blobs_url":1532,"git_tags_url":1533,"git_refs_url":1534,"trees_url":1535,"statuses_url":1536,"languages_url":1537,"stargazers_url":1538,"contributors_url":1539,"subscribers_url":1540,"subscription_url":1541,"commits_url":1542,"git_commits_url":1543,"comments_url":1544,"issue_comment_url":1545,"contents_url":1546,"compare_url":1547,"merges_url":1548,"archive_url":1549,"downloads_url":1550,"issues_url":1551,"pulls_url":1552,"milestones_url":1553,"notifications_url":1554,"labels_url":1555,"releases_url":1556,"deployments_url":1557,"created_at":1558,"updated_at":1559,"pushed_at":1560,"git_url":1561,"ssh_url":1562,"clone_url":1563,"svn_url":1519,"homepage":29,"size":1564,"stargazers_count":150,"watchers_count":150,"language":373,"has_issues":85,"has_projects":73,"has_downloads":73,"has_wiki":73,"has_pages":85,"has_discussions":85,"forks_count":150,"mirror_url":104,"archived":85,"disabled":85,"open_issues_count":150,"license":1565,"allow_forking":73,"is_template":85,"web_commit_signoff_required":85,"has_pull_requests":73,"pull_request_creation_policy":157,"topics":1566,"visibility":102,"forks":150,"open_issues":150,"watchers":150,"default_branch":496},1134606861,"R_kgDOQ6C6DQ","s3x-explorer","mjkatgithub/s3x-explorer",{"login":87,"id":88,"node_id":89,"avatar_url":90,"gravatar_id":29,"url":91,"html_url":21,"followers_url":92,"following_url":93,"gists_url":94,"starred_url":95,"subscriptions_url":96,"organizations_url":97,"repos_url":98,"events_url":99,"received_events_url":100,"type":101,"user_view_type":102,"site_admin":85},"https://github.com/mjkatgithub/s3x-explorer","A powerful VS Code extension for browsing and managing S3-compatible storage, specifically designed to work seamlessly with Cloudflare R2, AWS S3, MinIO, and other S3-compatible services.","https://api.github.com/repos/mjkatgithub/s3x-explorer","https://api.github.com/repos/mjkatgithub/s3x-explorer/forks","https://api.github.com/repos/mjkatgithub/s3x-explorer/keys{/key_id}","https://api.github.com/repos/mjkatgithub/s3x-explorer/collaborators{/collaborator}","https://api.github.com/repos/mjkatgithub/s3x-explorer/teams","https://api.github.com/repos/mjkatgithub/s3x-explorer/hooks","https://api.github.com/repos/mjkatgithub/s3x-explorer/issues/events{/number}","https://api.github.com/repos/mjkatgithub/s3x-explorer/events","https://api.github.com/repos/mjkatgithub/s3x-explorer/assignees{/user}","https://api.github.com/repos/mjkatgithub/s3x-explorer/branches{/branch}","https://api.github.com/repos/mjkatgithub/s3x-explorer/tags","https://api.github.com/repos/mjkatgithub/s3x-explorer/git/blobs{/sha}","https://api.github.com/repos/mjkatgithub/s3x-explorer/git/tags{/sha}","https://api.github.com/repos/mjkatgithub/s3x-explorer/git/refs{/sha}","https://api.github.com/repos/mjkatgithub/s3x-explorer/git/trees{/sha}","https://api.github.com/repos/mjkatgithub/s3x-explorer/statuses/{sha}","https://api.github.com/repos/mjkatgithub/s3x-explorer/languages","https://api.github.com/repos/mjkatgithub/s3x-explorer/stargazers","https://api.github.com/repos/mjkatgithub/s3x-explorer/contributors","https://api.github.com/repos/mjkatgithub/s3x-explorer/subscribers","https://api.github.com/repos/mjkatgithub/s3x-explorer/subscription","https://api.github.com/repos/mjkatgithub/s3x-explorer/commits{/sha}","https://api.github.com/repos/mjkatgithub/s3x-explorer/git/commits{/sha}","https://api.github.com/repos/mjkatgithub/s3x-explorer/comments{/number}","https://api.github.com/repos/mjkatgithub/s3x-explorer/issues/comments{/number}","https://api.github.com/repos/mjkatgithub/s3x-explorer/contents/{+path}","https://api.github.com/repos/mjkatgithub/s3x-explorer/compare/{base}...{head}","https://api.github.com/repos/mjkatgithub/s3x-explorer/merges","https://api.github.com/repos/mjkatgithub/s3x-explorer/{archive_format}{/ref}","https://api.github.com/repos/mjkatgithub/s3x-explorer/downloads","https://api.github.com/repos/mjkatgithub/s3x-explorer/issues{/number}","https://api.github.com/repos/mjkatgithub/s3x-explorer/pulls{/number}","https://api.github.com/repos/mjkatgithub/s3x-explorer/milestones{/number}","https://api.github.com/repos/mjkatgithub/s3x-explorer/notifications{?since,all,participating}","https://api.github.com/repos/mjkatgithub/s3x-explorer/labels{/name}","https://api.github.com/repos/mjkatgithub/s3x-explorer/releases{/id}","https://api.github.com/repos/mjkatgithub/s3x-explorer/deployments","2026-01-15T00:22:31Z","2026-01-15T01:25:51Z","2026-01-15T01:25:47Z","git://github.com/mjkatgithub/s3x-explorer.git","git@github.com:mjkatgithub/s3x-explorer.git","https://github.com/mjkatgithub/s3x-explorer.git",2292,{"key":152,"name":153,"spdx_id":154,"url":155,"node_id":156},[],{"id":1568,"node_id":1569,"name":1570,"full_name":1571,"private":85,"owner":1572,"html_url":1573,"description":104,"fork":85,"url":1574,"forks_url":1575,"keys_url":1576,"collaborators_url":1577,"teams_url":1578,"hooks_url":1579,"issue_events_url":1580,"events_url":1581,"assignees_url":1582,"branches_url":1583,"tags_url":1584,"blobs_url":1585,"git_tags_url":1586,"git_refs_url":1587,"trees_url":1588,"statuses_url":1589,"languages_url":1590,"stargazers_url":1591,"contributors_url":1592,"subscribers_url":1593,"subscription_url":1594,"commits_url":1595,"git_commits_url":1596,"comments_url":1597,"issue_comment_url":1598,"contents_url":1599,"compare_url":1600,"merges_url":1601,"archive_url":1602,"downloads_url":1603,"issues_url":1604,"pulls_url":1605,"milestones_url":1606,"notifications_url":1607,"labels_url":1608,"releases_url":1609,"deployments_url":1610,"created_at":1611,"updated_at":1612,"pushed_at":1612,"git_url":1613,"ssh_url":1614,"clone_url":1615,"svn_url":1573,"homepage":104,"size":436,"stargazers_count":150,"watchers_count":150,"language":104,"has_issues":73,"has_projects":73,"has_downloads":73,"has_wiki":73,"has_pages":85,"has_discussions":85,"forks_count":150,"mirror_url":104,"archived":85,"disabled":85,"open_issues_count":150,"license":1616,"allow_forking":73,"is_template":85,"web_commit_signoff_required":85,"has_pull_requests":73,"pull_request_creation_policy":157,"topics":1617,"visibility":102,"forks":150,"open_issues":150,"watchers":150,"default_branch":496},752060867,"R_kgDOLNOJww","test","mjkatgithub/test",{"login":87,"id":88,"node_id":89,"avatar_url":90,"gravatar_id":29,"url":91,"html_url":21,"followers_url":92,"following_url":93,"gists_url":94,"starred_url":95,"subscriptions_url":96,"organizations_url":97,"repos_url":98,"events_url":99,"received_events_url":100,"type":101,"user_view_type":102,"site_admin":85},"https://github.com/mjkatgithub/test","https://api.github.com/repos/mjkatgithub/test","https://api.github.com/repos/mjkatgithub/test/forks","https://api.github.com/repos/mjkatgithub/test/keys{/key_id}","https://api.github.com/repos/mjkatgithub/test/collaborators{/collaborator}","https://api.github.com/repos/mjkatgithub/test/teams","https://api.github.com/repos/mjkatgithub/test/hooks","https://api.github.com/repos/mjkatgithub/test/issues/events{/number}","https://api.github.com/repos/mjkatgithub/test/events","https://api.github.com/repos/mjkatgithub/test/assignees{/user}","https://api.github.com/repos/mjkatgithub/test/branches{/branch}","https://api.github.com/repos/mjkatgithub/test/tags","https://api.github.com/repos/mjkatgithub/test/git/blobs{/sha}","https://api.github.com/repos/mjkatgithub/test/git/tags{/sha}","https://api.github.com/repos/mjkatgithub/test/git/refs{/sha}","https://api.github.com/repos/mjkatgithub/test/git/trees{/sha}","https://api.github.com/repos/mjkatgithub/test/statuses/{sha}","https://api.github.com/repos/mjkatgithub/test/languages","https://api.github.com/repos/mjkatgithub/test/stargazers","https://api.github.com/repos/mjkatgithub/test/contributors","https://api.github.com/repos/mjkatgithub/test/subscribers","https://api.github.com/repos/mjkatgithub/test/subscription","https://api.github.com/repos/mjkatgithub/test/commits{/sha}","https://api.github.com/repos/mjkatgithub/test/git/commits{/sha}","https://api.github.com/repos/mjkatgithub/test/comments{/number}","https://api.github.com/repos/mjkatgithub/test/issues/comments{/number}","https://api.github.com/repos/mjkatgithub/test/contents/{+path}","https://api.github.com/repos/mjkatgithub/test/compare/{base}...{head}","https://api.github.com/repos/mjkatgithub/test/merges","https://api.github.com/repos/mjkatgithub/test/{archive_format}{/ref}","https://api.github.com/repos/mjkatgithub/test/downloads","https://api.github.com/repos/mjkatgithub/test/issues{/number}","https://api.github.com/repos/mjkatgithub/test/pulls{/number}","https://api.github.com/repos/mjkatgithub/test/milestones{/number}","https://api.github.com/repos/mjkatgithub/test/notifications{?since,all,participating}","https://api.github.com/repos/mjkatgithub/test/labels{/name}","https://api.github.com/repos/mjkatgithub/test/releases{/id}","https://api.github.com/repos/mjkatgithub/test/deployments","2024-02-02T23:28:54Z","2024-02-02T23:28:55Z","git://github.com/mjkatgithub/test.git","git@github.com:mjkatgithub/test.git","https://github.com/mjkatgithub/test.git",{"key":926,"name":927,"spdx_id":928,"url":929,"node_id":930},[],{"id":1619,"node_id":1620,"name":1621,"full_name":1622,"private":85,"owner":1623,"html_url":1624,"description":1625,"fork":85,"url":1626,"forks_url":1627,"keys_url":1628,"collaborators_url":1629,"teams_url":1630,"hooks_url":1631,"issue_events_url":1632,"events_url":1633,"assignees_url":1634,"branches_url":1635,"tags_url":1636,"blobs_url":1637,"git_tags_url":1638,"git_refs_url":1639,"trees_url":1640,"statuses_url":1641,"languages_url":1642,"stargazers_url":1643,"contributors_url":1644,"subscribers_url":1645,"subscription_url":1646,"commits_url":1647,"git_commits_url":1648,"comments_url":1649,"issue_comment_url":1650,"contents_url":1651,"compare_url":1652,"merges_url":1653,"archive_url":1654,"downloads_url":1655,"issues_url":1656,"pulls_url":1657,"milestones_url":1658,"notifications_url":1659,"labels_url":1660,"releases_url":1661,"deployments_url":1662,"created_at":1663,"updated_at":1664,"pushed_at":1665,"git_url":1666,"ssh_url":1667,"clone_url":1668,"svn_url":1624,"homepage":104,"size":436,"stargazers_count":150,"watchers_count":150,"language":1669,"has_issues":73,"has_projects":73,"has_downloads":73,"has_wiki":73,"has_pages":85,"has_discussions":85,"forks_count":150,"mirror_url":104,"archived":85,"disabled":85,"open_issues_count":1670,"license":104,"allow_forking":73,"is_template":85,"web_commit_signoff_required":85,"has_pull_requests":73,"pull_request_creation_policy":157,"topics":1671,"visibility":102,"forks":150,"open_issues":1670,"watchers":150,"default_branch":159},92444556,"MDEwOlJlcG9zaXRvcnk5MjQ0NDU1Ng==","UI-Constructor","mjkatgithub/UI-Constructor",{"login":87,"id":88,"node_id":89,"avatar_url":90,"gravatar_id":29,"url":91,"html_url":21,"followers_url":92,"following_url":93,"gists_url":94,"starred_url":95,"subscriptions_url":96,"organizations_url":97,"repos_url":98,"events_url":99,"received_events_url":100,"type":101,"user_view_type":102,"site_admin":85},"https://github.com/mjkatgithub/UI-Constructor","This script initialize a UI project","https://api.github.com/repos/mjkatgithub/UI-Constructor","https://api.github.com/repos/mjkatgithub/UI-Constructor/forks","https://api.github.com/repos/mjkatgithub/UI-Constructor/keys{/key_id}","https://api.github.com/repos/mjkatgithub/UI-Constructor/collaborators{/collaborator}","https://api.github.com/repos/mjkatgithub/UI-Constructor/teams","https://api.github.com/repos/mjkatgithub/UI-Constructor/hooks","https://api.github.com/repos/mjkatgithub/UI-Constructor/issues/events{/number}","https://api.github.com/repos/mjkatgithub/UI-Constructor/events","https://api.github.com/repos/mjkatgithub/UI-Constructor/assignees{/user}","https://api.github.com/repos/mjkatgithub/UI-Constructor/branches{/branch}","https://api.github.com/repos/mjkatgithub/UI-Constructor/tags","https://api.github.com/repos/mjkatgithub/UI-Constructor/git/blobs{/sha}","https://api.github.com/repos/mjkatgithub/UI-Constructor/git/tags{/sha}","https://api.github.com/repos/mjkatgithub/UI-Constructor/git/refs{/sha}","https://api.github.com/repos/mjkatgithub/UI-Constructor/git/trees{/sha}","https://api.github.com/repos/mjkatgithub/UI-Constructor/statuses/{sha}","https://api.github.com/repos/mjkatgithub/UI-Constructor/languages","https://api.github.com/repos/mjkatgithub/UI-Constructor/stargazers","https://api.github.com/repos/mjkatgithub/UI-Constructor/contributors","https://api.github.com/repos/mjkatgithub/UI-Constructor/subscribers","https://api.github.com/repos/mjkatgithub/UI-Constructor/subscription","https://api.github.com/repos/mjkatgithub/UI-Constructor/commits{/sha}","https://api.github.com/repos/mjkatgithub/UI-Constructor/git/commits{/sha}","https://api.github.com/repos/mjkatgithub/UI-Constructor/comments{/number}","https://api.github.com/repos/mjkatgithub/UI-Constructor/issues/comments{/number}","https://api.github.com/repos/mjkatgithub/UI-Constructor/contents/{+path}","https://api.github.com/repos/mjkatgithub/UI-Constructor/compare/{base}...{head}","https://api.github.com/repos/mjkatgithub/UI-Constructor/merges","https://api.github.com/repos/mjkatgithub/UI-Constructor/{archive_format}{/ref}","https://api.github.com/repos/mjkatgithub/UI-Constructor/downloads","https://api.github.com/repos/mjkatgithub/UI-Constructor/issues{/number}","https://api.github.com/repos/mjkatgithub/UI-Constructor/pulls{/number}","https://api.github.com/repos/mjkatgithub/UI-Constructor/milestones{/number}","https://api.github.com/repos/mjkatgithub/UI-Constructor/notifications{?since,all,participating}","https://api.github.com/repos/mjkatgithub/UI-Constructor/labels{/name}","https://api.github.com/repos/mjkatgithub/UI-Constructor/releases{/id}","https://api.github.com/repos/mjkatgithub/UI-Constructor/deployments","2017-05-25T21:07:00Z","2017-12-11T20:22:08Z","2018-06-01T13:48:36Z","git://github.com/mjkatgithub/UI-Constructor.git","git@github.com:mjkatgithub/UI-Constructor.git","https://github.com/mjkatgithub/UI-Constructor.git","Shell",4,[],{"id":1673,"node_id":1674,"name":1675,"full_name":1676,"private":85,"owner":1677,"html_url":1678,"description":104,"fork":73,"url":1679,"forks_url":1680,"keys_url":1681,"collaborators_url":1682,"teams_url":1683,"hooks_url":1684,"issue_events_url":1685,"events_url":1686,"assignees_url":1687,"branches_url":1688,"tags_url":1689,"blobs_url":1690,"git_tags_url":1691,"git_refs_url":1692,"trees_url":1693,"statuses_url":1694,"languages_url":1695,"stargazers_url":1696,"contributors_url":1697,"subscribers_url":1698,"subscription_url":1699,"commits_url":1700,"git_commits_url":1701,"comments_url":1702,"issue_comment_url":1703,"contents_url":1704,"compare_url":1705,"merges_url":1706,"archive_url":1707,"downloads_url":1708,"issues_url":1709,"pulls_url":1710,"milestones_url":1711,"notifications_url":1712,"labels_url":1713,"releases_url":1714,"deployments_url":1715,"created_at":1716,"updated_at":1716,"pushed_at":1717,"git_url":1718,"ssh_url":1719,"clone_url":1720,"svn_url":1678,"homepage":104,"size":1721,"stargazers_count":150,"watchers_count":150,"language":104,"has_issues":85,"has_projects":73,"has_downloads":73,"has_wiki":73,"has_pages":85,"has_discussions":85,"forks_count":150,"mirror_url":104,"archived":85,"disabled":85,"open_issues_count":150,"license":104,"allow_forking":73,"is_template":85,"web_commit_signoff_required":85,"has_pull_requests":73,"pull_request_creation_policy":157,"topics":1722,"visibility":102,"forks":150,"open_issues":150,"watchers":150,"default_branch":496},741689371,"R_kgDOLDVIGw","Videolinks","mjkatgithub/Videolinks",{"login":87,"id":88,"node_id":89,"avatar_url":90,"gravatar_id":29,"url":91,"html_url":21,"followers_url":92,"following_url":93,"gists_url":94,"starred_url":95,"subscriptions_url":96,"organizations_url":97,"repos_url":98,"events_url":99,"received_events_url":100,"type":101,"user_view_type":102,"site_admin":85},"https://github.com/mjkatgithub/Videolinks","https://api.github.com/repos/mjkatgithub/Videolinks","https://api.github.com/repos/mjkatgithub/Videolinks/forks","https://api.github.com/repos/mjkatgithub/Videolinks/keys{/key_id}","https://api.github.com/repos/mjkatgithub/Videolinks/collaborators{/collaborator}","https://api.github.com/repos/mjkatgithub/Videolinks/teams","https://api.github.com/repos/mjkatgithub/Videolinks/hooks","https://api.github.com/repos/mjkatgithub/Videolinks/issues/events{/number}","https://api.github.com/repos/mjkatgithub/Videolinks/events","https://api.github.com/repos/mjkatgithub/Videolinks/assignees{/user}","https://api.github.com/repos/mjkatgithub/Videolinks/branches{/branch}","https://api.github.com/repos/mjkatgithub/Videolinks/tags","https://api.github.com/repos/mjkatgithub/Videolinks/git/blobs{/sha}","https://api.github.com/repos/mjkatgithub/Videolinks/git/tags{/sha}","https://api.github.com/repos/mjkatgithub/Videolinks/git/refs{/sha}","https://api.github.com/repos/mjkatgithub/Videolinks/git/trees{/sha}","https://api.github.com/repos/mjkatgithub/Videolinks/statuses/{sha}","https://api.github.com/repos/mjkatgithub/Videolinks/languages","https://api.github.com/repos/mjkatgithub/Videolinks/stargazers","https://api.github.com/repos/mjkatgithub/Videolinks/contributors","https://api.github.com/repos/mjkatgithub/Videolinks/subscribers","https://api.github.com/repos/mjkatgithub/Videolinks/subscription","https://api.github.com/repos/mjkatgithub/Videolinks/commits{/sha}","https://api.github.com/repos/mjkatgithub/Videolinks/git/commits{/sha}","https://api.github.com/repos/mjkatgithub/Videolinks/comments{/number}","https://api.github.com/repos/mjkatgithub/Videolinks/issues/comments{/number}","https://api.github.com/repos/mjkatgithub/Videolinks/contents/{+path}","https://api.github.com/repos/mjkatgithub/Videolinks/compare/{base}...{head}","https://api.github.com/repos/mjkatgithub/Videolinks/merges","https://api.github.com/repos/mjkatgithub/Videolinks/{archive_format}{/ref}","https://api.github.com/repos/mjkatgithub/Videolinks/downloads","https://api.github.com/repos/mjkatgithub/Videolinks/issues{/number}","https://api.github.com/repos/mjkatgithub/Videolinks/pulls{/number}","https://api.github.com/repos/mjkatgithub/Videolinks/milestones{/number}","https://api.github.com/repos/mjkatgithub/Videolinks/notifications{?since,all,participating}","https://api.github.com/repos/mjkatgithub/Videolinks/labels{/name}","https://api.github.com/repos/mjkatgithub/Videolinks/releases{/id}","https://api.github.com/repos/mjkatgithub/Videolinks/deployments","2024-01-10T22:54:10Z","2023-12-17T16:55:10Z","git://github.com/mjkatgithub/Videolinks.git","git@github.com:mjkatgithub/Videolinks.git","https://github.com/mjkatgithub/Videolinks.git",50,[],1775492953061] \ No newline at end of file diff --git a/projects/index.html b/projects/index.html new file mode 100644 index 0000000..9a5ffe4 --- /dev/null +++ b/projects/index.html @@ -0,0 +1 @@ +Projects
\ No newline at end of file diff --git a/robots.txt b/robots.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/robots.txt @@ -0,0 +1 @@ +