the home site for me: also iteration 3 or 4 of my site
5
fork

Configure Feed

Select the types of activity you want to include in your feed.

feat: add pre processor

dunkirk.sh 401cc3e4 8298475e

verified
+375 -112
+1
.gitignore
··· 1 1 public 2 + .zola-build 2 3 node_modules 3 4 .env 4 5 .crush
+48
content/blog/2024-10-11_example_post.md
··· 139 139 140 140 {{ img(id="https://hc-cdn.hel1.your-objectstorage.com/s/v3/d294f113bf415a0d1c544fbf3c2d0f4286d892a6_0img_1846_1_.jpg" alt="MacBook proprietary blade SSD" caption="it really was a rather sleek design; shame that apple got rid of it in favor of soldered on storage") }} 141 141 142 + You can also display multiple images side-by-side using the `imgs` shortcode with comma-separated URLs: 143 + 144 + ```terra 145 + {{/* imgs(id="https://url.com/image1.png, https://url.com/image2.png" alt="alt text 1, alt text 2" caption="optional caption for both images") */}} 146 + ``` 147 + 148 + {{ imgs(id="https://hc-cdn.hel1.your-objectstorage.com/s/v3/c509aeaac769c3e5b99d5a7d320cc4a759db4ff5_img_8880.jpeg, https://hc-cdn.hel1.your-objectstorage.com/s/v3/ed400c26ddfa37ab4a9ef4fd5a506f2dcc1bcfbb_img_8879.jpeg", alt="the copyright section, the ssh section", caption="side by side images from the remarkable tutorial") }} 149 + 142 150 ### Videos 143 151 144 152 To embed a video, you use the `youtube(id="", autoplay?=bool)` shortcode e.g. ··· 160 168 But these should be used sparingly, if at all. 161 169 162 170 You can also use emojis inline from the hackclub slack like this :yay:! This is just done by writing `:emoji:` and it gets progressively enhanced with a bit of js as long as the emoji is in cachet! 171 + 172 + ## Callouts 173 + 174 + Callouts are a great way to draw attention to important information. They come in several types: 175 + 176 + ### Info Callout 177 + 178 + {% callout(type="info") %} 179 + This is an info callout! Use this for general information that readers should be aware of. 180 + {% end %} 181 + 182 + ### Warning Callout 183 + 184 + {% callout(type="warning") %} 185 + This is a warning callout! Use this to alert readers about potential issues or things to watch out for. 186 + {% end %} 187 + 188 + ### Danger Callout 189 + 190 + {% callout(type="danger") %} 191 + This is a danger callout! Use this for critical information that could cause problems if ignored. 192 + {% end %} 193 + 194 + ### Tip Callout 195 + 196 + {% callout(type="tip") %} 197 + This is a tip callout! Use this to share helpful hints and best practices. 198 + {% end %} 199 + 200 + ### Note Callout 201 + 202 + {% callout(type="note") %} 203 + This is a note callout! Use this for additional context or side information. 204 + {% end %} 205 + 206 + ### Custom Title 207 + 208 + {% callout(type="info", title="Custom Title Here") %} 209 + You can also customize the title of any callout by adding a `title` parameter! 210 + {% end %}
+19
package.json
··· 1 + { 2 + "name": "zera", 3 + "type": "module", 4 + "scripts": { 5 + "dev": "bun run scripts/dev.ts", 6 + "serve": "bun run scripts/dev.ts", 7 + "build": "bun run scripts/build.ts", 8 + "preprocess": "bun run scripts/preprocess.ts", 9 + "gen-og": "bun run scripts/genOG.ts" 10 + }, 11 + "dependencies": { 12 + "dotenv": "^16.4.7", 13 + "glob": "^13.0.0" 14 + }, 15 + "devDependencies": { 16 + "@types/bun": "latest", 17 + "puppeteer": "^23.6.0" 18 + } 19 + }
+3 -2
sass/css/_copy-button.scss
··· 134 134 } 135 135 } 136 136 137 - pre.z-code:not(.pre-container):not(.pre-container pre) { 137 + pre.z-code:not(.pre-container pre) { 138 138 position: relative; 139 139 border: none; 140 140 background-color: var(--accent); 141 141 padding: 0.4em; 142 142 border-bottom: 5px solid var(--bg-light); 143 + border-radius: 7px 7px 10px 10px; 143 144 144 145 code { 145 146 border-radius: 0.3rem; 146 147 display: block; 147 148 overflow-x: auto; 148 149 padding: 1em; 149 - background-color: var(--bg-light); 150 + background-color: var(--nightshade-violet); 150 151 margin: 0; 151 152 border: none; 152 153 box-shadow: none;
+20
scripts/build.ts
··· 1 + #!/usr/bin/env bun 2 + 3 + import { existsSync } from 'fs'; 4 + 5 + await Bun.$`rm -rf .zola-build`.quiet(); 6 + await Bun.$`mkdir -p .zola-build`.quiet(); 7 + await Bun.$`cp -r content .zola-build/`.quiet(); 8 + 9 + const optionalDirs = ['static', 'templates', 'sass', 'syntaxes']; 10 + for (const dir of optionalDirs) { 11 + if (existsSync(dir)) { 12 + await Bun.$`cp -r ${dir} .zola-build/`.quiet(); 13 + } 14 + } 15 + 16 + await Bun.$`cp config.toml .zola-build/`.quiet(); 17 + await Bun.$`bun run scripts/preprocess.ts .zola-build/content`.quiet(); 18 + await Bun.$`cd .zola-build && zola build --force --output-dir ../public`; 19 + await Bun.$`rm -rf .zola-build`.quiet(); 20 +
+72
scripts/dev.ts
··· 1 + #!/usr/bin/env bun 2 + 3 + import { watch } from 'fs'; 4 + import { existsSync } from 'fs'; 5 + import { spawn } from 'child_process'; 6 + 7 + let zolaProcess: any = null; 8 + let isRebuilding = false; 9 + 10 + function cleanup() { 11 + if (zolaProcess) { 12 + zolaProcess.kill(); 13 + } 14 + process.exit(0); 15 + } 16 + 17 + process.on('SIGINT', cleanup); 18 + process.on('SIGTERM', cleanup); 19 + 20 + async function buildShadow() { 21 + if (isRebuilding) return; 22 + isRebuilding = true; 23 + 24 + if (zolaProcess) { 25 + zolaProcess.kill(); 26 + zolaProcess = null; 27 + } 28 + 29 + await Bun.$`rm -rf .zola-build`.quiet(); 30 + await Bun.$`mkdir -p .zola-build`.quiet(); 31 + await Bun.$`cp -r content .zola-build/`.quiet(); 32 + 33 + const optionalDirs = ['static', 'templates', 'sass', 'syntaxes']; 34 + for (const dir of optionalDirs) { 35 + if (existsSync(dir)) { 36 + await Bun.$`cp -r ${dir} .zola-build/`.quiet(); 37 + } 38 + } 39 + 40 + await Bun.$`cp config.toml .zola-build/`.quiet(); 41 + await Bun.$`bun run scripts/preprocess.ts .zola-build/content`.quiet(); 42 + 43 + zolaProcess = spawn('zola', ['serve', '--force', '--interface', '0.0.0.0', '--output-dir', '../public'], { 44 + cwd: '.zola-build', 45 + stdio: 'inherit' 46 + }); 47 + 48 + zolaProcess.on('error', (err: Error) => { 49 + console.error('Failed to start Zola:', err); 50 + }); 51 + 52 + isRebuilding = false; 53 + } 54 + 55 + await buildShadow(); 56 + 57 + const watchDirs = ['content', 'templates', 'sass', 'static', 'syntaxes']; 58 + 59 + for (const dir of watchDirs) { 60 + if (existsSync(dir)) { 61 + watch(dir, { recursive: true }, async (event, filename) => { 62 + if (filename && !filename.includes('.zola-build')) { 63 + await buildShadow(); 64 + } 65 + }); 66 + } 67 + } 68 + 69 + watch('config.toml', async () => { 70 + await buildShadow(); 71 + }); 72 +
+100
scripts/preprocess.ts
··· 1 + #!/usr/bin/env bun 2 + 3 + import fs from 'fs'; 4 + import path from 'path'; 5 + import { glob } from 'glob'; 6 + 7 + const contentDir = process.argv[2] || 'content'; 8 + 9 + function splitByCodeBlocks(content: string): { text: string; isCode: boolean }[] { 10 + const parts: { text: string; isCode: boolean }[] = []; 11 + const codeBlockRegex = /^(```|~~~)/gm; 12 + 13 + let lastIndex = 0; 14 + let inCodeBlock = false; 15 + let match; 16 + 17 + codeBlockRegex.lastIndex = 0; 18 + 19 + while ((match = codeBlockRegex.exec(content)) !== null) { 20 + const segment = content.slice(lastIndex, match.index); 21 + if (segment) { 22 + parts.push({ text: segment, isCode: inCodeBlock }); 23 + } 24 + inCodeBlock = !inCodeBlock; 25 + lastIndex = match.index; 26 + } 27 + 28 + // Add remaining content 29 + if (lastIndex < content.length) { 30 + parts.push({ text: content.slice(lastIndex), isCode: inCodeBlock }); 31 + } 32 + 33 + return parts; 34 + } 35 + 36 + function transformCallouts(content: string): string { 37 + return content.replace( 38 + /^> \[!(INFO|WARNING|WARN|DANGER|ERROR|TIP|HINT|NOTE)\]\n((?:> .*\n?)*)/gm, 39 + (match, type, body) => { 40 + const cleanBody = body.replace(/^> /gm, '').trim(); 41 + const normalizedType = type.toLowerCase() === 'warn' ? 'warning' : 42 + type.toLowerCase() === 'error' ? 'danger' : 43 + type.toLowerCase() === 'hint' ? 'tip' : 44 + type.toLowerCase(); 45 + return `{% callout(type="${normalizedType}") %}\n${cleanBody}\n{% end %}\n`; 46 + } 47 + ); 48 + } 49 + 50 + function transformImages(content: string): string { 51 + return content.replace( 52 + /!\[([^\]]*)\]\(([^)]+)\)\{([^}]+)\}/g, 53 + (match, alt, url, attrs) => { 54 + const params: string[] = [`id="${url}"`]; 55 + 56 + if (alt) { 57 + params.push(`alt="${alt}"`); 58 + } 59 + 60 + const classes = attrs.match(/\.([a-zA-Z0-9_-]+)/g)?.map(c => c.slice(1)) || []; 61 + if (classes.length) { 62 + params.push(`class="${classes.join(' ')}"`); 63 + } 64 + 65 + const keyValueMatches = attrs.matchAll(/([a-zA-Z]+)=["']?([^"'\s}]+)["']?/g); 66 + for (const [, key, value] of keyValueMatches) { 67 + if (key !== 'class') { 68 + params.push(`${key}="${value.replace(/["']/g, '')}"`); 69 + } 70 + } 71 + 72 + return `{{ img(${params.join(', ')}) }}`; 73 + } 74 + ); 75 + } 76 + 77 + function processFile(filePath: string): void { 78 + let content = fs.readFileSync(filePath, 'utf8'); 79 + const originalContent = content; 80 + 81 + // Split by code blocks and only transform non-code parts 82 + const parts = splitByCodeBlocks(content); 83 + content = parts.map(part => { 84 + if (part.isCode) { 85 + return part.text; // Don't transform code blocks 86 + } 87 + let text = part.text; 88 + text = transformCallouts(text); 89 + text = transformImages(text); 90 + return text; 91 + }).join(''); 92 + 93 + if (content !== originalContent) { 94 + fs.writeFileSync(filePath, content); 95 + } 96 + } 97 + 98 + const files = glob.sync(`${contentDir}/**/*.md`); 99 + files.forEach(processFile); 100 +
+65 -53
static/js/copy-button.js
··· 1 1 // Based on https://www.roboleary.net/2022/01/13/copy-code-to-clipboard-blog.html 2 - document.addEventListener("DOMContentLoaded", () => { 3 - const blocks = document.querySelectorAll("pre[class^='language-']"); 4 2 3 + function initCopyButtons() { 4 + const blocks = document.querySelectorAll("pre[class^='language-']"); 5 + 5 6 for (const block of blocks) { 6 - if (navigator.clipboard) { 7 - // Code block header title 8 - const title = document.createElement("span"); 9 - title.style.color = "var(--accent-text)"; 10 - const lang = block.getAttribute("data-lang"); 11 - const comment = 12 - block.previousElementSibling && 13 - (block.previousElementSibling.tagName === "blockquote" || 14 - block.previousElementSibling.nodeName === "BLOCKQUOTE") 15 - ? block.previousElementSibling 16 - : null; 17 - if (comment) block.previousElementSibling.remove(); 18 - title.innerHTML = 19 - lang + (comment ? ` (${comment.textContent.trim()})` : ""); 7 + // Code block header title 8 + const title = document.createElement("span"); 9 + title.style.color = "var(--accent-text)"; 10 + const lang = block.getAttribute("data-lang"); 11 + const comment = 12 + block.previousElementSibling && 13 + (block.previousElementSibling.tagName === "blockquote" || 14 + block.previousElementSibling.nodeName === "BLOCKQUOTE") 15 + ? block.previousElementSibling 16 + : null; 17 + if (comment) block.previousElementSibling.remove(); 18 + title.innerHTML = 19 + lang + (comment ? ` (${comment.textContent.trim()})` : ""); 20 20 21 - // Copy button icon 22 - const icon = document.createElement("i"); 23 - icon.classList.add("icon"); 21 + // Copy button icon 22 + const icon = document.createElement("i"); 23 + icon.classList.add("icon"); 24 24 25 - // Copy button 26 - const button = document.createElement("button"); 27 - const copyCodeText = "Copy code"; // Use hardcoded text instead of getElementById 28 - button.setAttribute("title", copyCodeText); 29 - button.appendChild(icon); 25 + // Copy button 26 + const button = document.createElement("button"); 27 + const copyCodeText = "Copy code"; 28 + button.setAttribute("title", copyCodeText); 29 + button.appendChild(icon); 30 30 31 - // Code block header 32 - const header = document.createElement("div"); 33 - header.classList.add("header"); 34 - header.appendChild(title); 35 - header.appendChild(button); 31 + // Code block header 32 + const header = document.createElement("div"); 33 + header.classList.add("header"); 34 + header.appendChild(title); 35 + header.appendChild(button); 36 36 37 - // Container that holds header and the code block itself 38 - const container = document.createElement("div"); 39 - container.classList.add("pre-container"); 40 - container.appendChild(header); 37 + // Container that holds header and the code block itself 38 + const container = document.createElement("div"); 39 + container.classList.add("pre-container"); 40 + container.appendChild(header); 41 41 42 - // Move code block into the container 43 - block.parentNode.insertBefore(container, block); 44 - container.appendChild(block); 42 + // Move code block into the container 43 + block.parentNode.insertBefore(container, block); 44 + container.appendChild(block); 45 45 46 - button.addEventListener("click", async () => { 47 - await copyCode(block, header, button); // Pass the button here 48 - }); 49 - } 46 + button.addEventListener("click", async () => { 47 + await copyCode(block, header, button); 48 + }); 50 49 } 51 50 52 51 async function copyCode(block, header, button) { 53 52 const code = block.querySelector("code"); 54 53 const text = code.innerText; 55 54 56 - await navigator.clipboard.writeText(text); 55 + // Only try to copy if clipboard API is available 56 + if (navigator.clipboard) { 57 + try { 58 + await navigator.clipboard.writeText(text); 59 + header.classList.add("active"); 60 + button.setAttribute("disabled", true); 57 61 58 - header.classList.add("active"); 59 - button.setAttribute("disabled", true); 62 + header.addEventListener( 63 + "animationend", 64 + () => { 65 + header.classList.remove("active"); 66 + button.removeAttribute("disabled"); 67 + }, 68 + { once: true }, 69 + ); 70 + } catch (err) { 71 + console.error("Failed to copy:", err); 72 + } 73 + } 74 + } 75 + } 60 76 61 - header.addEventListener( 62 - "animationend", 63 - () => { 64 - header.classList.remove("active"); 65 - button.removeAttribute("disabled"); 66 - }, 67 - { once: true }, 68 - ); 69 - } 70 - }); 77 + // Since the script has defer attribute, the DOM is already loaded when this runs 78 + if (document.readyState === 'loading') { 79 + document.addEventListener('DOMContentLoaded', initCopyButtons); 80 + } else { 81 + initCopyButtons(); 82 + }
+47 -39
tools/bun.lock bun.lock
··· 1 1 { 2 2 "lockfileVersion": 1, 3 + "configVersion": 1, 3 4 "workspaces": { 4 5 "": { 5 - "name": "zera", 6 6 "dependencies": { 7 7 "dotenv": "^16.4.7", 8 + "glob": "^13.0.0", 8 9 }, 9 10 "devDependencies": { 10 11 "@types/bun": "latest", 11 12 "puppeteer": "^23.6.0", 12 - }, 13 - "peerDependencies": { 14 - "typescript": "^5.0.0", 15 13 }, 16 14 }, 17 15 }, 18 16 "packages": { 19 - "@babel/code-frame": ["@babel/code-frame@7.26.2", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.25.9", "js-tokens": "^4.0.0", "picocolors": "^1.0.0" } }, "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ=="], 17 + "@babel/code-frame": ["@babel/code-frame@7.27.1", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg=="], 20 18 21 - "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.25.9", "", {}, "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ=="], 19 + "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="], 20 + 21 + "@isaacs/balanced-match": ["@isaacs/balanced-match@4.0.1", "", {}, "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ=="], 22 + 23 + "@isaacs/brace-expansion": ["@isaacs/brace-expansion@5.0.0", "", { "dependencies": { "@isaacs/balanced-match": "^4.0.1" } }, "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA=="], 22 24 23 25 "@puppeteer/browsers": ["@puppeteer/browsers@2.6.1", "", { "dependencies": { "debug": "^4.4.0", "extract-zip": "^2.0.1", "progress": "^2.0.3", "proxy-agent": "^6.5.0", "semver": "^7.6.3", "tar-fs": "^3.0.6", "unbzip2-stream": "^1.4.3", "yargs": "^17.7.2" }, "bin": { "browsers": "lib/cjs/main-cli.js" } }, "sha512-aBSREisdsGH890S2rQqK82qmQYU3uFpSH8wcZWHgHzl3LfzsxAKbLNiAG9mO8v1Y0UICBeClICxPJvyr0rcuxg=="], 24 26 25 27 "@tootallnate/quickjs-emscripten": ["@tootallnate/quickjs-emscripten@0.23.0", "", {}, "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA=="], 26 28 27 - "@types/bun": ["@types/bun@1.2.2", "", { "dependencies": { "bun-types": "1.2.2" } }, "sha512-tr74gdku+AEDN5ergNiBnplr7hpDp3V1h7fqI2GcR/rsUaM39jpSeKH0TFibRvU0KwniRx5POgaYnaXbk0hU+w=="], 29 + "@types/bun": ["@types/bun@1.3.4", "", { "dependencies": { "bun-types": "1.3.4" } }, "sha512-EEPTKXHP+zKGPkhRLv+HI0UEX8/o+65hqARxLy8Ov5rIxMBPNTjeZww00CIihrIQGEQBYg+0roO5qOnS/7boGA=="], 28 30 29 - "@types/node": ["@types/node@22.13.4", "", { "dependencies": { "undici-types": "~6.20.0" } }, "sha512-ywP2X0DYtX3y08eFVx5fNIw7/uIv8hYUKgXoK8oayJlLnKcRfEYCxWMVE1XagUdVtCJlZT1AU4LXEABW+L1Peg=="], 30 - 31 - "@types/ws": ["@types/ws@8.5.14", "", { "dependencies": { "@types/node": "*" } }, "sha512-bd/YFLW+URhBzMXurx7lWByOu+xzU9+kb3RboOteXYDfW+tr+JZa99OyNmPINEGB/ahzKrEuc8rcv4gnpJmxTw=="], 31 + "@types/node": ["@types/node@24.10.2", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-WOhQTZ4G8xZ1tjJTvKOpyEVSGgOTvJAfDK3FNFgELyaTpzhdgHVHeqW8V+UJvzF5BT+/B54T/1S2K6gd9c7bbA=="], 32 32 33 33 "@types/yauzl": ["@types/yauzl@2.10.3", "", { "dependencies": { "@types/node": "*" } }, "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q=="], 34 34 35 - "agent-base": ["agent-base@7.1.3", "", {}, "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw=="], 35 + "agent-base": ["agent-base@7.1.4", "", {}, "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ=="], 36 36 37 37 "ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], 38 38 ··· 42 42 43 43 "ast-types": ["ast-types@0.13.4", "", { "dependencies": { "tslib": "^2.0.1" } }, "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w=="], 44 44 45 - "b4a": ["b4a@1.6.7", "", {}, "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg=="], 45 + "b4a": ["b4a@1.7.3", "", { "peerDependencies": { "react-native-b4a": "*" }, "optionalPeers": ["react-native-b4a"] }, "sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q=="], 46 46 47 - "bare-events": ["bare-events@2.5.4", "", {}, "sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA=="], 47 + "bare-events": ["bare-events@2.8.2", "", { "peerDependencies": { "bare-abort-controller": "*" }, "optionalPeers": ["bare-abort-controller"] }, "sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ=="], 48 48 49 - "bare-fs": ["bare-fs@4.0.1", "", { "dependencies": { "bare-events": "^2.0.0", "bare-path": "^3.0.0", "bare-stream": "^2.0.0" } }, "sha512-ilQs4fm/l9eMfWY2dY0WCIUplSUp7U0CT1vrqMg1MUdeZl4fypu5UP0XcDBK5WBQPJAKP1b7XEodISmekH/CEg=="], 49 + "bare-fs": ["bare-fs@4.5.2", "", { "dependencies": { "bare-events": "^2.5.4", "bare-path": "^3.0.0", "bare-stream": "^2.6.4", "bare-url": "^2.2.2", "fast-fifo": "^1.3.2" }, "peerDependencies": { "bare-buffer": "*" }, "optionalPeers": ["bare-buffer"] }, "sha512-veTnRzkb6aPHOvSKIOy60KzURfBdUflr5VReI+NSaPL6xf+XLdONQgZgpYvUuZLVQ8dCqxpBAudaOM1+KpAUxw=="], 50 50 51 - "bare-os": ["bare-os@3.4.0", "", {}, "sha512-9Ous7UlnKbe3fMi7Y+qh0DwAup6A1JkYgPnjvMDNOlmnxNRQvQ/7Nst+OnUQKzk0iAT0m9BisbDVp9gCv8+ETA=="], 51 + "bare-os": ["bare-os@3.6.2", "", {}, "sha512-T+V1+1srU2qYNBmJCXZkUY5vQ0B4FSlL3QDROnKQYOqeiQR8UbjNHlPa+TIbM4cuidiN9GaTaOZgSEgsvPbh5A=="], 52 52 53 53 "bare-path": ["bare-path@3.0.0", "", { "dependencies": { "bare-os": "^3.0.1" } }, "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw=="], 54 54 55 - "bare-stream": ["bare-stream@2.6.5", "", { "dependencies": { "streamx": "^2.21.0" }, "peerDependencies": { "bare-buffer": "*", "bare-events": "*" }, "optionalPeers": ["bare-buffer", "bare-events"] }, "sha512-jSmxKJNJmHySi6hC42zlZnq00rga4jjxcgNZjY9N5WlOe/iOoGRtdwGsHzQv2RlH2KOYMwGUXhf2zXd32BA9RA=="], 55 + "bare-stream": ["bare-stream@2.7.0", "", { "dependencies": { "streamx": "^2.21.0" }, "peerDependencies": { "bare-buffer": "*", "bare-events": "*" }, "optionalPeers": ["bare-buffer", "bare-events"] }, "sha512-oyXQNicV1y8nc2aKffH+BUHFRXmx6VrPzlnaEvMhram0nPBrKcEdcyBg5r08D0i8VxngHFAiVyn1QKXpSG0B8A=="], 56 + 57 + "bare-url": ["bare-url@2.3.2", "", { "dependencies": { "bare-path": "^3.0.0" } }, "sha512-ZMq4gd9ngV5aTMa5p9+UfY0b3skwhHELaDkhEHetMdX0LRkW9kzaym4oo/Eh+Ghm0CCDuMTsRIGM/ytUc1ZYmw=="], 56 58 57 59 "base64-js": ["base64-js@1.5.1", "", {}, "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="], 58 60 ··· 62 64 63 65 "buffer-crc32": ["buffer-crc32@0.2.13", "", {}, "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ=="], 64 66 65 - "bun-types": ["bun-types@1.2.2", "", { "dependencies": { "@types/node": "*", "@types/ws": "~8.5.10" } }, "sha512-RCbMH5elr9gjgDGDhkTTugA21XtJAy/9jkKe/G3WR2q17VPGhcquf9Sir6uay9iW+7P/BV0CAHA1XlHXMAVKHg=="], 67 + "bun-types": ["bun-types@1.3.4", "", { "dependencies": { "@types/node": "*" } }, "sha512-5ua817+BZPZOlNaRgGBpZJOSAQ9RQ17pkwPD0yR7CfJg+r8DgIILByFifDTa+IPDDxzf5VNhtNlcKqFzDgJvlQ=="], 66 68 67 69 "callsites": ["callsites@3.1.0", "", {}, "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="], 68 70 ··· 78 80 79 81 "data-uri-to-buffer": ["data-uri-to-buffer@6.0.2", "", {}, "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw=="], 80 82 81 - "debug": ["debug@4.4.0", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="], 83 + "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], 82 84 83 85 "degenerator": ["degenerator@5.0.1", "", { "dependencies": { "ast-types": "^0.13.4", "escodegen": "^2.1.0", "esprima": "^4.0.1" } }, "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ=="], 84 86 85 87 "devtools-protocol": ["devtools-protocol@0.0.1367902", "", {}, "sha512-XxtPuC3PGakY6PD7dG66/o8KwJ/LkH2/EKe19Dcw58w53dv4/vSQEkn/SzuyhHE2q4zPgCkxQBxus3VV4ql+Pg=="], 86 88 87 - "dotenv": ["dotenv@16.4.7", "", {}, "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ=="], 89 + "dotenv": ["dotenv@16.6.1", "", {}, "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow=="], 88 90 89 91 "emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], 90 92 91 - "end-of-stream": ["end-of-stream@1.4.4", "", { "dependencies": { "once": "^1.4.0" } }, "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q=="], 93 + "end-of-stream": ["end-of-stream@1.4.5", "", { "dependencies": { "once": "^1.4.0" } }, "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg=="], 92 94 93 95 "env-paths": ["env-paths@2.2.1", "", {}, "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A=="], 94 96 95 - "error-ex": ["error-ex@1.3.2", "", { "dependencies": { "is-arrayish": "^0.2.1" } }, "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g=="], 97 + "error-ex": ["error-ex@1.3.4", "", { "dependencies": { "is-arrayish": "^0.2.1" } }, "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ=="], 96 98 97 99 "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], 98 100 ··· 103 105 "estraverse": ["estraverse@5.3.0", "", {}, "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="], 104 106 105 107 "esutils": ["esutils@2.0.3", "", {}, "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="], 108 + 109 + "events-universal": ["events-universal@1.0.1", "", { "dependencies": { "bare-events": "^2.7.0" } }, "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw=="], 106 110 107 111 "extract-zip": ["extract-zip@2.0.1", "", { "dependencies": { "debug": "^4.1.1", "get-stream": "^5.1.0", "yauzl": "^2.10.0" }, "optionalDependencies": { "@types/yauzl": "^2.9.1" }, "bin": { "extract-zip": "cli.js" } }, "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg=="], 108 112 ··· 114 118 115 119 "get-stream": ["get-stream@5.2.0", "", { "dependencies": { "pump": "^3.0.0" } }, "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA=="], 116 120 117 - "get-uri": ["get-uri@6.0.4", "", { "dependencies": { "basic-ftp": "^5.0.2", "data-uri-to-buffer": "^6.0.2", "debug": "^4.3.4" } }, "sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ=="], 121 + "get-uri": ["get-uri@6.0.5", "", { "dependencies": { "basic-ftp": "^5.0.2", "data-uri-to-buffer": "^6.0.2", "debug": "^4.3.4" } }, "sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg=="], 122 + 123 + "glob": ["glob@13.0.0", "", { "dependencies": { "minimatch": "^10.1.1", "minipass": "^7.1.2", "path-scurry": "^2.0.0" } }, "sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA=="], 118 124 119 125 "http-proxy-agent": ["http-proxy-agent@7.0.2", "", { "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" } }, "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig=="], 120 126 ··· 124 130 125 131 "import-fresh": ["import-fresh@3.3.1", "", { "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ=="], 126 132 127 - "ip-address": ["ip-address@9.0.5", "", { "dependencies": { "jsbn": "1.1.0", "sprintf-js": "^1.1.3" } }, "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g=="], 133 + "ip-address": ["ip-address@10.1.0", "", {}, "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q=="], 128 134 129 135 "is-arrayish": ["is-arrayish@0.2.1", "", {}, "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg=="], 130 136 ··· 132 138 133 139 "js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], 134 140 135 - "js-yaml": ["js-yaml@4.1.0", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA=="], 136 - 137 - "jsbn": ["jsbn@1.1.0", "", {}, "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A=="], 141 + "js-yaml": ["js-yaml@4.1.1", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA=="], 138 142 139 143 "json-parse-even-better-errors": ["json-parse-even-better-errors@2.3.1", "", {}, "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="], 140 144 141 145 "lines-and-columns": ["lines-and-columns@1.2.4", "", {}, "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="], 142 146 143 - "lru-cache": ["lru-cache@7.18.3", "", {}, "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA=="], 147 + "lru-cache": ["lru-cache@11.2.4", "", {}, "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg=="], 148 + 149 + "minimatch": ["minimatch@10.1.1", "", { "dependencies": { "@isaacs/brace-expansion": "^5.0.0" } }, "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ=="], 150 + 151 + "minipass": ["minipass@7.1.2", "", {}, "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw=="], 144 152 145 153 "mitt": ["mitt@3.0.1", "", {}, "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw=="], 146 154 ··· 150 158 151 159 "once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="], 152 160 153 - "pac-proxy-agent": ["pac-proxy-agent@7.1.0", "", { "dependencies": { "@tootallnate/quickjs-emscripten": "^0.23.0", "agent-base": "^7.1.2", "debug": "^4.3.4", "get-uri": "^6.0.1", "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.6", "pac-resolver": "^7.0.1", "socks-proxy-agent": "^8.0.5" } }, "sha512-Z5FnLVVZSnX7WjBg0mhDtydeRZ1xMcATZThjySQUHqr+0ksP8kqaw23fNKkaaN/Z8gwLUs/W7xdl0I75eP2Xyw=="], 161 + "pac-proxy-agent": ["pac-proxy-agent@7.2.0", "", { "dependencies": { "@tootallnate/quickjs-emscripten": "^0.23.0", "agent-base": "^7.1.2", "debug": "^4.3.4", "get-uri": "^6.0.1", "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.6", "pac-resolver": "^7.0.1", "socks-proxy-agent": "^8.0.5" } }, "sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA=="], 154 162 155 163 "pac-resolver": ["pac-resolver@7.0.1", "", { "dependencies": { "degenerator": "^5.0.0", "netmask": "^2.0.2" } }, "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg=="], 156 164 ··· 158 166 159 167 "parse-json": ["parse-json@5.2.0", "", { "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", "json-parse-even-better-errors": "^2.3.0", "lines-and-columns": "^1.1.6" } }, "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg=="], 160 168 169 + "path-scurry": ["path-scurry@2.0.1", "", { "dependencies": { "lru-cache": "^11.0.0", "minipass": "^7.1.2" } }, "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA=="], 170 + 161 171 "pend": ["pend@1.2.0", "", {}, "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg=="], 162 172 163 173 "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], ··· 168 178 169 179 "proxy-from-env": ["proxy-from-env@1.1.0", "", {}, "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="], 170 180 171 - "pump": ["pump@3.0.2", "", { "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw=="], 181 + "pump": ["pump@3.0.3", "", { "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA=="], 172 182 173 183 "puppeteer": ["puppeteer@23.11.1", "", { "dependencies": { "@puppeteer/browsers": "2.6.1", "chromium-bidi": "0.11.0", "cosmiconfig": "^9.0.0", "devtools-protocol": "0.0.1367902", "puppeteer-core": "23.11.1", "typed-query-selector": "^2.12.0" }, "bin": { "puppeteer": "lib/cjs/puppeteer/node/cli.js" } }, "sha512-53uIX3KR5en8l7Vd8n5DUv90Ae9QDQsyIthaUFVzwV6yU750RjqRznEtNMBT20VthqAdemnJN+hxVdmMHKt7Zw=="], 174 184 ··· 178 188 179 189 "resolve-from": ["resolve-from@4.0.0", "", {}, "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="], 180 190 181 - "semver": ["semver@7.7.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA=="], 191 + "semver": ["semver@7.7.3", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q=="], 182 192 183 193 "smart-buffer": ["smart-buffer@4.2.0", "", {}, "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg=="], 184 194 185 - "socks": ["socks@2.8.4", "", { "dependencies": { "ip-address": "^9.0.5", "smart-buffer": "^4.2.0" } }, "sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ=="], 195 + "socks": ["socks@2.8.7", "", { "dependencies": { "ip-address": "^10.0.1", "smart-buffer": "^4.2.0" } }, "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A=="], 186 196 187 197 "socks-proxy-agent": ["socks-proxy-agent@8.0.5", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "^4.3.4", "socks": "^2.8.3" } }, "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw=="], 188 198 189 199 "source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], 190 200 191 - "sprintf-js": ["sprintf-js@1.1.3", "", {}, "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA=="], 192 - 193 - "streamx": ["streamx@2.22.0", "", { "dependencies": { "fast-fifo": "^1.3.2", "text-decoder": "^1.1.0" }, "optionalDependencies": { "bare-events": "^2.2.0" } }, "sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw=="], 201 + "streamx": ["streamx@2.23.0", "", { "dependencies": { "events-universal": "^1.0.0", "fast-fifo": "^1.3.2", "text-decoder": "^1.1.0" } }, "sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg=="], 194 202 195 203 "string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], 196 204 197 205 "strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], 198 206 199 - "tar-fs": ["tar-fs@3.0.8", "", { "dependencies": { "pump": "^3.0.0", "tar-stream": "^3.1.5" }, "optionalDependencies": { "bare-fs": "^4.0.1", "bare-path": "^3.0.0" } }, "sha512-ZoROL70jptorGAlgAYiLoBLItEKw/fUxg9BSYK/dF/GAGYFJOJJJMvjPAKDJraCXFwadD456FCuvLWgfhMsPwg=="], 207 + "tar-fs": ["tar-fs@3.1.1", "", { "dependencies": { "pump": "^3.0.0", "tar-stream": "^3.1.5" }, "optionalDependencies": { "bare-fs": "^4.0.1", "bare-path": "^3.0.0" } }, "sha512-LZA0oaPOc2fVo82Txf3gw+AkEd38szODlptMYejQUhndHMLQ9M059uXR+AfS7DNo0NpINvSqDsvyaCrBVkptWg=="], 200 208 201 209 "tar-stream": ["tar-stream@3.1.7", "", { "dependencies": { "b4a": "^1.6.4", "fast-fifo": "^1.2.0", "streamx": "^2.15.0" } }, "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ=="], 202 210 ··· 208 216 209 217 "typed-query-selector": ["typed-query-selector@2.12.0", "", {}, "sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg=="], 210 218 211 - "typescript": ["typescript@5.7.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw=="], 212 - 213 219 "unbzip2-stream": ["unbzip2-stream@1.4.3", "", { "dependencies": { "buffer": "^5.2.1", "through": "^2.3.8" } }, "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg=="], 214 220 215 - "undici-types": ["undici-types@6.20.0", "", {}, "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg=="], 221 + "undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="], 216 222 217 223 "wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], 218 224 219 225 "wrappy": ["wrappy@1.0.2", "", {}, "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="], 220 226 221 - "ws": ["ws@8.18.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw=="], 227 + "ws": ["ws@8.18.3", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg=="], 222 228 223 229 "y18n": ["y18n@5.0.8", "", {}, "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="], 224 230 ··· 229 235 "yauzl": ["yauzl@2.10.0", "", { "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" } }, "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g=="], 230 236 231 237 "zod": ["zod@3.23.8", "", {}, "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="], 238 + 239 + "proxy-agent/lru-cache": ["lru-cache@7.18.3", "", {}, "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA=="], 232 240 } 233 241 }
tools/genOG.ts scripts/genOG.ts
tools/og.html scripts/og.html
-18
tools/package.json
··· 1 - { 2 - "name": "zera", 3 - "module": "index.ts", 4 - "type": "module", 5 - "scripts": { 6 - "gen": "bun genOG.ts" 7 - }, 8 - "devDependencies": { 9 - "@types/bun": "latest", 10 - "puppeteer": "^23.6.0" 11 - }, 12 - "peerDependencies": { 13 - "typescript": "^5.0.0" 14 - }, 15 - "dependencies": { 16 - "dotenv": "^16.4.7" 17 - } 18 - }
tools/rehost-cdn.sh scripts/rehost-cdn.sh