From 837e1c7c509c5ceb27a4741662fb6ef90e760645 Mon Sep 17 00:00:00 2001 From: Shivam Meena Date: Thu, 9 Jul 2026 21:26:42 +0530 Subject: [PATCH 1/5] feat(takumi): migrate to takumi-js v2 (2.0.1 stable) (#66) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(takumi): migrate to takumi-js v2 (2.0.1 stable) takumi-js graduated from beta — 2.0.1 is now the `latest` tag. Bump the pin across the library (dev + peer dep) and every example from 2.0.0-beta.14 to the stable release. No source changes needed: the public API is unchanged between beta.14 and 2.0.1. Verified — lib typecheck 0 errors, vitest 10/10 (incl. takumi render tests), all 8 examples build. * release(package): next version .16 * docs: takumi v2 note; document Deno prerendered-image 404 - usage/takumi: note takumi-js is stable v2 (^2.0.1). - runtime/deno: add Known Issue — prerendered image endpoints (`+server.ts` with prerender = true) are written to the static output but the Deno adapter only registers prerendered pages in its route manifest, not endpoint assets. Deno Deploy serves static from that manifest (not the filesystem), so the route 404s. Workaround: serve image endpoints dynamically on Deno. * fix(deno): patch adapter to serve prerendered image endpoints @deno/svelte-adapter@0.2.1 writes prerendered output to the static dir via writePrerendered(), but only registers builder.prerendered.pages in the deploy.json staticFiles manifest. Prerendered *endpoints* (e.g. /png/prerendered.png) are written to disk but never registered, and Deno Deploy serves static files from that manifest — so those routes 404. Add a pnpm patch that also registers builder.prerendered.assets. Verified: deploy.json now lists all three prerendered image routes, and `deno run -A .deno-deploy/server.ts` serves /png/prerendered.png with 200 (valid 1200x630 PNG). Docs known-issue updated to point at the patch. Upstream fix should land in @deno/svelte-adapter; drop the patch when it does. * fix(repo): pin packageManager to pnpm@10 Vercel's builder defaulted to pnpm@9, which hashes patchedDependencies differently than the pnpm@10-written lockfile, failing frozen install with ERR_PNPM_LOCKFILE_CONFIG_MISMATCH. Pin pnpm 10 via packageManager so all hosts use the same version. * docs(takumi): install from beta tag, next channel retired v4.3 prerelease moved from the next tag to beta (4.3.0-next.16) and is ready for test deployments. * release(package): 4.3.0-beta.1 Retire the next prerelease channel; v4.3 ships from the beta tag now. --- apps/docs/src/content/runtime/deno.md | 18 +++ apps/docs/src/content/usage/takumi.md | 8 +- examples/cf-pages-build/package.json | 2 +- examples/cf-workers-build/package.json | 2 +- examples/deno-build/package.json | 2 +- examples/netlify-build/package.json | 2 +- examples/node-build/package.json | 2 +- examples/shared/package.json | 4 +- examples/takumi-only-build/package.json | 2 +- examples/vercel-build/package.json | 2 +- package.json | 6 +- packages/sveltekit-og/package.json | 6 +- patches/@deno__svelte-adapter@0.2.1.patch | 19 +++ pnpm-lock.yaml | 160 ++++++++++++---------- 14 files changed, 150 insertions(+), 85 deletions(-) create mode 100644 patches/@deno__svelte-adapter@0.2.1.patch diff --git a/apps/docs/src/content/runtime/deno.md b/apps/docs/src/content/runtime/deno.md index 16717cd..e0380ef 100644 --- a/apps/docs/src/content/runtime/deno.md +++ b/apps/docs/src/content/runtime/deno.md @@ -135,3 +135,21 @@ NotFound: No such file or directory (os error 2): open '_app/immutable/assets/Je ``` + + + +A prerendered image endpoint — a `+server.ts` with `export const prerender = true` that returns an image — is generated at build time and written into the deploy output as a static file (e.g. `static/png/prerendered.png`). On most hosts this just works, because they serve the static directory straight from the filesystem. + +Deno Deploy is different: it serves static assets from an explicit route manifest, not by scanning the filesystem. The current Deno adapter only registers prerendered **pages** in that manifest — prerendered **endpoints** (image/asset routes) are written to disk but never added — so the file is orphaned and requesting the route (e.g. `/png/prerendered.png`) returns a **404**. + +Until this is fixed upstream, either patch the adapter to also register `builder.prerendered.assets` in `staticFiles` (see [the patch used by this repo](https://github.com/etherCorps/sveltekit-og/blob/main/patches/%40deno__svelte-adapter%400.2.1.patch) via [`pnpm patch`](https://pnpm.io/cli/patch)), or **don't prerender image endpoints on Deno** — serve them dynamically by dropping `export const prerender = true`: + +```typescript title="routes/png/og.png/+server.ts" +// export const prerender = true; // ← remove on Deno Deploy + +export const GET = async () => new ImageResponse(template, { width: 1200, height: 630 }); +``` + +Satori and Takumi both generate images fast enough at request time. To avoid regenerating on every hit, cache with a `Cache-Control` header on the response or Deno Deploy's ISR. + + diff --git a/apps/docs/src/content/usage/takumi.md b/apps/docs/src/content/usage/takumi.md index 68da375..003b2b7 100644 --- a/apps/docs/src/content/usage/takumi.md +++ b/apps/docs/src/content/usage/takumi.md @@ -21,7 +21,7 @@ Reach for Takumi when you want: -Takumi support is available from `sveltekit-og@v4.3.0`. While v4.3 is in prerelease, install it from the `next` tag: `@ethercorps/sveltekit-og@next`. +Takumi support is available from `sveltekit-og@v4.3.0`. v4.3 is in beta and ready for test deployments — install it from the `beta` tag: `@ethercorps/sveltekit-og@beta`. @@ -33,6 +33,12 @@ The Takumi engine lives behind a separate entry point and `takumi-js` is an **op pnpm add @ethercorps/sveltekit-og takumi-js ``` + + +`takumi-js` has graduated from beta — install the stable `v2` line (`^2.0.1`), which is what `pnpm add takumi-js` resolves to. + + + Takumi loads its WebAssembly through the same build plugin as Satori. Make sure the Vite/Rollup plugin is configured as shown in [Getting Started](/docs/getting-started). diff --git a/examples/cf-pages-build/package.json b/examples/cf-pages-build/package.json index fdf827e..3e1abb0 100644 --- a/examples/cf-pages-build/package.json +++ b/examples/cf-pages-build/package.json @@ -26,6 +26,6 @@ "dependencies": { "@ethercorps/sveltekit-og": "workspace:*", "@examples/shared": "workspace:*", - "takumi-js": "2.0.0-beta.14" + "takumi-js": "2.0.1" } } diff --git a/examples/cf-workers-build/package.json b/examples/cf-workers-build/package.json index 27514e0..851d8a5 100644 --- a/examples/cf-workers-build/package.json +++ b/examples/cf-workers-build/package.json @@ -28,6 +28,6 @@ "dependencies": { "@ethercorps/sveltekit-og": "workspace:*", "@examples/shared": "workspace:*", - "takumi-js": "2.0.0-beta.14" + "takumi-js": "2.0.1" } } diff --git a/examples/deno-build/package.json b/examples/deno-build/package.json index cf93e7b..099a431 100644 --- a/examples/deno-build/package.json +++ b/examples/deno-build/package.json @@ -26,6 +26,6 @@ "dependencies": { "@ethercorps/sveltekit-og": "workspace:*", "@examples/shared": "workspace:*", - "takumi-js": "2.0.0-beta.14" + "takumi-js": "2.0.1" } } diff --git a/examples/netlify-build/package.json b/examples/netlify-build/package.json index 5401962..5ab6ac4 100644 --- a/examples/netlify-build/package.json +++ b/examples/netlify-build/package.json @@ -26,6 +26,6 @@ "dependencies": { "@ethercorps/sveltekit-og": "workspace:*", "@examples/shared": "workspace:*", - "takumi-js": "2.0.0-beta.14" + "takumi-js": "2.0.1" } } diff --git a/examples/node-build/package.json b/examples/node-build/package.json index 34435c0..9cde0f7 100644 --- a/examples/node-build/package.json +++ b/examples/node-build/package.json @@ -26,6 +26,6 @@ "dependencies": { "@ethercorps/sveltekit-og": "workspace:*", "@examples/shared": "workspace:*", - "takumi-js": "2.0.0-beta.14" + "takumi-js": "2.0.1" } } diff --git a/examples/shared/package.json b/examples/shared/package.json index 861b5a2..792328f 100644 --- a/examples/shared/package.json +++ b/examples/shared/package.json @@ -24,7 +24,7 @@ }, "peerDependencies": { "svelte": "^5", - "takumi-js": "^2.0.0-beta.14" + "takumi-js": "^2.0.1" }, "peerDependenciesMeta": { "takumi-js": { @@ -37,7 +37,7 @@ "@sveltejs/vite-plugin-svelte": "^6.2.1", "svelte": "^5.53.10", "svelte-check": "^4.4.5", - "takumi-js": "2.0.0-beta.14", + "takumi-js": "2.0.1", "typescript": "^5.9.3" } } diff --git a/examples/takumi-only-build/package.json b/examples/takumi-only-build/package.json index 090b6cd..c7ea154 100644 --- a/examples/takumi-only-build/package.json +++ b/examples/takumi-only-build/package.json @@ -26,6 +26,6 @@ "dependencies": { "@ethercorps/sveltekit-og": "workspace:*", "@examples/shared": "workspace:*", - "takumi-js": "2.0.0-beta.14" + "takumi-js": "2.0.1" } } diff --git a/examples/vercel-build/package.json b/examples/vercel-build/package.json index 9cc66c2..a36908f 100644 --- a/examples/vercel-build/package.json +++ b/examples/vercel-build/package.json @@ -26,6 +26,6 @@ "dependencies": { "@ethercorps/sveltekit-og": "workspace:*", "@examples/shared": "workspace:*", - "takumi-js": "2.0.0-beta.14" + "takumi-js": "2.0.1" } } diff --git a/package.json b/package.json index 15c008a..3f7141b 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,7 @@ "version": "0.0.0", "private": true, "type": "module", + "packageManager": "pnpm@10.30.3", "license": "MIT", "repository": "github:ethercorps/sveltekit-og", "scripts": { @@ -22,6 +23,9 @@ "esbuild", "sharp", "workerd" - ] + ], + "patchedDependencies": { + "@deno/svelte-adapter@0.2.1": "patches/@deno__svelte-adapter@0.2.1.patch" + } } } diff --git a/packages/sveltekit-og/package.json b/packages/sveltekit-og/package.json index 78ef4bb..0ac9d05 100644 --- a/packages/sveltekit-og/package.json +++ b/packages/sveltekit-og/package.json @@ -1,6 +1,6 @@ { "name": "@ethercorps/sveltekit-og", - "version": "4.3.0-next.15", + "version": "4.3.0-beta.1", "license": "MIT", "homepage": "https://sveltekit-og.dev", "repository": "github:ethercorps/sveltekit-og", @@ -105,7 +105,7 @@ "typescript": "^5.9.3", "typescript-eslint": "^8.57.0", "vite": "^5.4.21", - "takumi-js": "2.0.0-beta.14", + "takumi-js": "2.0.1", "vitest": "^1.6.1" }, "main": "./dist/index.js", @@ -121,7 +121,7 @@ }, "peerDependencies": { "@sveltejs/kit": ">=2.0.0", - "takumi-js": "^2.0.0-beta.14" + "takumi-js": "^2.0.1" }, "peerDependenciesMeta": { "takumi-js": { diff --git a/patches/@deno__svelte-adapter@0.2.1.patch b/patches/@deno__svelte-adapter@0.2.1.patch new file mode 100644 index 0000000..fc6d071 --- /dev/null +++ b/patches/@deno__svelte-adapter@0.2.1.patch @@ -0,0 +1,19 @@ +diff --git a/dist/index.js b/dist/index.js +--- a/dist/index.js ++++ b/dist/index.js +@@ -52,6 +52,15 @@ + }); + } + } ++ // Prerendered endpoints (e.g. image routes) are written into the ++ // static dir by writePrerendered() above, but only prerendered ++ // *pages* were registered — so Deno Deploy 404s the assets. ++ for (const pathname of builder.prerendered.assets.keys()) { ++ staticFiles.push({ ++ source: pathname, ++ destination: path.join(dirs.static, pathname), ++ }); ++ } + const svelteData = { + isr: [], + }; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5293c3e..ecb00dc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,6 +4,11 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false +patchedDependencies: + '@deno/svelte-adapter@0.2.1': + hash: a28e8e1c386834ae41f01ff4b054a70df14ed7404bdb0b5d8ca5f3285ae93cb2 + path: patches/@deno__svelte-adapter@0.2.1.patch + importers: .: {} @@ -111,8 +116,8 @@ importers: specifier: workspace:* version: link:../shared takumi-js: - specifier: 2.0.0-beta.14 - version: 2.0.0-beta.14 + specifier: 2.0.1 + version: 2.0.1(csstype@3.2.3) devDependencies: '@playwright/test': specifier: ^1.55.0 @@ -154,8 +159,8 @@ importers: specifier: workspace:* version: link:../shared takumi-js: - specifier: 2.0.0-beta.14 - version: 2.0.0-beta.14 + specifier: 2.0.1 + version: 2.0.1(csstype@3.2.3) devDependencies: '@playwright/test': specifier: ^1.55.0 @@ -203,12 +208,12 @@ importers: specifier: workspace:* version: link:../shared takumi-js: - specifier: 2.0.0-beta.14 - version: 2.0.0-beta.14 + specifier: 2.0.1 + version: 2.0.1(csstype@3.2.3) devDependencies: '@deno/svelte-adapter': specifier: ^0.2.1 - version: 0.2.1(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.53.10)(vite@6.4.2(@types/node@24.11.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2)))(svelte@5.53.10)(typescript@5.9.3)(vite@6.4.2(@types/node@24.11.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))) + version: 0.2.1(patch_hash=a28e8e1c386834ae41f01ff4b054a70df14ed7404bdb0b5d8ca5f3285ae93cb2)(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.53.10)(vite@6.4.2(@types/node@24.11.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2)))(svelte@5.53.10)(typescript@5.9.3)(vite@6.4.2(@types/node@24.11.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))) '@playwright/test': specifier: ^1.55.0 version: 1.58.2 @@ -246,8 +251,8 @@ importers: specifier: workspace:* version: link:../shared takumi-js: - specifier: 2.0.0-beta.14 - version: 2.0.0-beta.14 + specifier: 2.0.1 + version: 2.0.1(csstype@3.2.3) devDependencies: '@playwright/test': specifier: ^1.55.0 @@ -289,8 +294,8 @@ importers: specifier: workspace:* version: link:../shared takumi-js: - specifier: 2.0.0-beta.14 - version: 2.0.0-beta.14 + specifier: 2.0.1 + version: 2.0.1(csstype@3.2.3) devDependencies: '@playwright/test': specifier: ^1.55.0 @@ -385,8 +390,8 @@ importers: specifier: ^4.4.5 version: 4.4.5(picomatch@4.0.3)(svelte@5.53.10)(typescript@5.9.3) takumi-js: - specifier: 2.0.0-beta.14 - version: 2.0.0-beta.14 + specifier: 2.0.1 + version: 2.0.1(csstype@3.2.3) typescript: specifier: ^5.9.3 version: 5.9.3 @@ -400,8 +405,8 @@ importers: specifier: workspace:* version: link:../shared takumi-js: - specifier: 2.0.0-beta.14 - version: 2.0.0-beta.14 + specifier: 2.0.1 + version: 2.0.1(csstype@3.2.3) devDependencies: '@playwright/test': specifier: ^1.55.0 @@ -443,8 +448,8 @@ importers: specifier: workspace:* version: link:../shared takumi-js: - specifier: 2.0.0-beta.14 - version: 2.0.0-beta.14 + specifier: 2.0.1 + version: 2.0.1(csstype@3.2.3) devDependencies: '@playwright/test': specifier: ^1.55.0 @@ -565,8 +570,8 @@ importers: specifier: ^4.4.5 version: 4.4.5(picomatch@4.0.3)(svelte@5.53.10)(typescript@5.9.3) takumi-js: - specifier: 2.0.0-beta.14 - version: 2.0.0-beta.14 + specifier: 2.0.1 + version: 2.0.1(csstype@3.2.3) tslib: specifier: ^2.8.1 version: 2.8.1 @@ -2286,64 +2291,69 @@ packages: peerDependencies: vite: ^5.2.0 || ^6 || ^7 || ^8 - '@takumi-rs/core-darwin-arm64@2.0.0-beta.14': - resolution: {integrity: sha512-RFnw6WqBl7ec6DAqe2uUjmPMRXhz3Pe+uu0uMQexGTA2JX6zfJsj+HEl1Y+hjnKk5piPA3hDt8fbusGwkkLVyw==} + '@takumi-rs/core-darwin-arm64@2.0.1': + resolution: {integrity: sha512-A/hUaWhlfC3wquGIlZVJpXZn9luGP5faKMKMNj6z1QYZGWECT5yn0h0Ui84HKGiGZkk4ExgwZcLnejDywNbNgg==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@takumi-rs/core-darwin-x64@2.0.0-beta.14': - resolution: {integrity: sha512-h5uxEKHbgssj+rt1ir7uGNn+OUhjvm7aOKblh1BDCw+KrzFLgJd69xQh3din1kcXJm2M0WEuf6ryvxeowvBWpA==} + '@takumi-rs/core-darwin-x64@2.0.1': + resolution: {integrity: sha512-+8W5q8aBLMgnFM30iWrjc1FDZyBIqP0/gIi53pQNs1R/9lucxyoR9hhNV7TAIByGU1YPU9xWlVK4T5m0ypMoKQ==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@takumi-rs/core-linux-arm64-gnu@2.0.0-beta.14': - resolution: {integrity: sha512-XodnNERSfoxTH5Sretb+woOMWXOUff27jBIuvPBaSEdb8wphTAOZH4gdH6WAEIojXhepluja4xeACz9vWbQmcA==} + '@takumi-rs/core-linux-arm64-gnu@2.0.1': + resolution: {integrity: sha512-3nykGv1PxCcRNCwff2/E+w3uzpNH6BN1QkpBMD4Gl55d7tuVVP+9Z94TvrGNQjpvjlsXRHL2bdK7NT+ogGZkYQ==} engines: {node: '>=18'} cpu: [arm64] os: [linux] libc: [glibc] - '@takumi-rs/core-linux-arm64-musl@2.0.0-beta.14': - resolution: {integrity: sha512-te31hr9VwhxjochpfwSQrcBbIRZBQ4P+jWKr3peraq9VW4gfW2aR48jfxufa2CcXqcqE+E/7AiUTwg2vtqAocg==} + '@takumi-rs/core-linux-arm64-musl@2.0.1': + resolution: {integrity: sha512-OD7YUud5E81V9iXvgkxKVUPifINYfDzpdf2s1kvcXoZ/Pp5zcGgB1El5NXpksweyqtFcIkz6lpSIEGUJLPnYTg==} engines: {node: '>=18'} cpu: [arm64] os: [linux] libc: [musl] - '@takumi-rs/core-linux-x64-gnu@2.0.0-beta.14': - resolution: {integrity: sha512-L+llt6IEXLuPqKyQZufMHQPCpQHaxTSmUsSQK0JfeF9yzeGoHlttU3gDzy2dUePn5bKkU2CO5/U59oGghg09Og==} + '@takumi-rs/core-linux-x64-gnu@2.0.1': + resolution: {integrity: sha512-1kAZSE36E1Jck1HLvzjtwgotUCf/UB1V/ElIXgXLoXGmvqBC3Wi9mdG6briBSM9jae2BfWUJlg34sz6/oE6xGg==} engines: {node: '>=18'} cpu: [x64] os: [linux] libc: [glibc] - '@takumi-rs/core-linux-x64-musl@2.0.0-beta.14': - resolution: {integrity: sha512-YP3BbPmSka2g+HLW1Jcy+b9cq3r/mHmOT6SO/t/eFAdh4CC5GcAzp0qhHwy7Lxt/UoPEZyizEPl66iDh6FQyIw==} + '@takumi-rs/core-linux-x64-musl@2.0.1': + resolution: {integrity: sha512-6Y3tbatXeEf8U8OD4i6CMYjYGsXODsExBPt0VX/KRj7X9TWa2vzlBRyarfh+OfxqgczNv1GhNKNGZOmmYvkHbg==} engines: {node: '>=18'} cpu: [x64] os: [linux] libc: [musl] - '@takumi-rs/core-win32-arm64-msvc@2.0.0-beta.14': - resolution: {integrity: sha512-EPSDxv6pEFb8uu4unowybLUm9QK1tdrMA12spagr4KKTifRXi1jZbB0pA1QCv/KHZqnaadXUFNK3MuOoSXyE9A==} + '@takumi-rs/core-win32-arm64-msvc@2.0.1': + resolution: {integrity: sha512-Xm1LUrLBwOh+Vbu8Og5kYnP6hRL2lAGsejDnunktwbe+iwt26i/klBYVfin/TZWNjOPiYRhqPcstn8RO0yIf4g==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@takumi-rs/core-win32-x64-msvc@2.0.0-beta.14': - resolution: {integrity: sha512-XA83vd4nSg5sWrLDvNP/Z/64LrauqRQ1S7B57dmvyKmH+CI2h8BT+02FAwb24BbOLQn+mBqD+v/qMpRtdvZI4Q==} + '@takumi-rs/core-win32-x64-msvc@2.0.1': + resolution: {integrity: sha512-Rtr85quL8BGarB0ww5DHDhC6bJSbfIHFWZDcO5nTWhzaOEKyq1oCd4ONxZZ8YYj+OLpKG7Hq/RSHHKzsQ/XasQ==} engines: {node: '>=18'} cpu: [x64] os: [win32] - '@takumi-rs/core@2.0.0-beta.14': - resolution: {integrity: sha512-0IzsA/kBl73FNYtvBnWvDxzxC1h7nuKlX3n7/48vBIGLOENk5mLWcxYoINP6CUXXSVcDAAx95JRKo1OlD9ABGg==} + '@takumi-rs/core@2.0.1': + resolution: {integrity: sha512-VgTsotfo1oB4JJl/v6tj2S0VJC6CM/M1P2Wu+dVSxf7xRJBNNfS1xzzAk8ycuLPUhxj3E5BJ35kZtdhvV9l1Eg==} engines: {node: '>=18'} + peerDependencies: + csstype: '*' + peerDependenciesMeta: + csstype: + optional: true - '@takumi-rs/helpers@2.0.0-beta.14': - resolution: {integrity: sha512-Vlwn0C+sWMXKuleBZgAIy9a35LCi/ikylxKuSUhJbd1ea7V+wiAth8uVI/fGj3XDchB55W+aC5OA/IFMgDOrIA==} + '@takumi-rs/helpers@2.0.1': + resolution: {integrity: sha512-6vlGGE6iKGM4+/s0EB4EVLx2Bjm3vzgP63ITBQ9AHL557wSSjbBXST6OaM1uu4B4XErNct+0IikIit0gfE6MYA==} engines: {node: '>=18'} peerDependencies: react: ^18.0.0 || ^19.0.0 @@ -2354,9 +2364,14 @@ packages: react-dom: optional: true - '@takumi-rs/wasm@2.0.0-beta.14': - resolution: {integrity: sha512-Ky+cz+kdVy2JxhtT9kY5MHHrE1YAV9lNk2wjENlPkb+/GBPwAeffHtQ/ZN4VI/kOKQXUEyvTExlvQvxtbFTnpw==} + '@takumi-rs/wasm@2.0.1': + resolution: {integrity: sha512-7dpvjT4k8DSES3dOCduRzlmAYLz+No/V3zWuUnU390c4dABqkPwBiT7IVsjylhaF76w8yf15nBiz+SAELKP2wA==} engines: {node: '>=18'} + peerDependencies: + csstype: '*' + peerDependenciesMeta: + csstype: + optional: true '@types/aws-lambda@8.10.161': resolution: {integrity: sha512-rUYdp+MQwSFocxIOcSsYSF3YYYC/uUpMbCY/mbO21vGqfrEYvNSoPyKYDj6RhXXpPfS0KstW9RwG3qXh9sL7FQ==} @@ -4526,8 +4541,8 @@ packages: tailwindcss@4.2.4: resolution: {integrity: sha512-HhKppgO81FQof5m6TEnuBWCZGgfRAWbaeOaGT00KOy/Pf/j6oUihdvBpA7ltCeAvZpFhW3j0PTclkxsd4IXYDA==} - takumi-js@2.0.0-beta.14: - resolution: {integrity: sha512-+MiFoD2Irr3/oAaG27FBhGANktGXpwMQFGvQ5DZiGYN/Dv0NozsViGgN1ICOYCscm6AW8VtRKmZBCJJaSJb9UA==} + takumi-js@2.0.1: + resolution: {integrity: sha512-4Mw5nc8mHM5TBLq7dGLBQ88V+5VrT+xOQVEajwD8PRhC//CGHdjAJvNZdap/iIJMQBx9X6gV7sbNbBsKmjL2XA==} engines: {node: '>=18'} tapable@2.3.0: @@ -5128,7 +5143,7 @@ snapshots: dependencies: urlpattern-polyfill: 10.1.0 - '@deno/svelte-adapter@0.2.1(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.53.10)(vite@6.4.2(@types/node@24.11.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2)))(svelte@5.53.10)(typescript@5.9.3)(vite@6.4.2(@types/node@24.11.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2)))': + '@deno/svelte-adapter@0.2.1(patch_hash=a28e8e1c386834ae41f01ff4b054a70df14ed7404bdb0b5d8ca5f3285ae93cb2)(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.53.10)(vite@6.4.2(@types/node@24.11.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2)))(svelte@5.53.10)(typescript@5.9.3)(vite@6.4.2(@types/node@24.11.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2)))': dependencies: '@deno/experimental-route-config': 0.0.5 '@sveltejs/kit': 2.55.0(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.53.10)(vite@6.4.2(@types/node@24.11.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2)))(svelte@5.53.10)(typescript@5.9.3)(vite@6.4.2(@types/node@24.11.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2)) @@ -6464,52 +6479,53 @@ snapshots: tailwindcss: 4.2.2 vite: 7.3.2(@types/node@24.11.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2) - '@takumi-rs/core-darwin-arm64@2.0.0-beta.14': + '@takumi-rs/core-darwin-arm64@2.0.1': optional: true - '@takumi-rs/core-darwin-x64@2.0.0-beta.14': + '@takumi-rs/core-darwin-x64@2.0.1': optional: true - '@takumi-rs/core-linux-arm64-gnu@2.0.0-beta.14': + '@takumi-rs/core-linux-arm64-gnu@2.0.1': optional: true - '@takumi-rs/core-linux-arm64-musl@2.0.0-beta.14': + '@takumi-rs/core-linux-arm64-musl@2.0.1': optional: true - '@takumi-rs/core-linux-x64-gnu@2.0.0-beta.14': + '@takumi-rs/core-linux-x64-gnu@2.0.1': optional: true - '@takumi-rs/core-linux-x64-musl@2.0.0-beta.14': + '@takumi-rs/core-linux-x64-musl@2.0.1': optional: true - '@takumi-rs/core-win32-arm64-msvc@2.0.0-beta.14': + '@takumi-rs/core-win32-arm64-msvc@2.0.1': optional: true - '@takumi-rs/core-win32-x64-msvc@2.0.0-beta.14': + '@takumi-rs/core-win32-x64-msvc@2.0.1': optional: true - '@takumi-rs/core@2.0.0-beta.14': + '@takumi-rs/core@2.0.1(csstype@3.2.3)': dependencies: - '@takumi-rs/helpers': 2.0.0-beta.14 - csstype: 3.2.3 + '@takumi-rs/helpers': 2.0.1 optionalDependencies: - '@takumi-rs/core-darwin-arm64': 2.0.0-beta.14 - '@takumi-rs/core-darwin-x64': 2.0.0-beta.14 - '@takumi-rs/core-linux-arm64-gnu': 2.0.0-beta.14 - '@takumi-rs/core-linux-arm64-musl': 2.0.0-beta.14 - '@takumi-rs/core-linux-x64-gnu': 2.0.0-beta.14 - '@takumi-rs/core-linux-x64-musl': 2.0.0-beta.14 - '@takumi-rs/core-win32-arm64-msvc': 2.0.0-beta.14 - '@takumi-rs/core-win32-x64-msvc': 2.0.0-beta.14 + '@takumi-rs/core-darwin-arm64': 2.0.1 + '@takumi-rs/core-darwin-x64': 2.0.1 + '@takumi-rs/core-linux-arm64-gnu': 2.0.1 + '@takumi-rs/core-linux-arm64-musl': 2.0.1 + '@takumi-rs/core-linux-x64-gnu': 2.0.1 + '@takumi-rs/core-linux-x64-musl': 2.0.1 + '@takumi-rs/core-win32-arm64-msvc': 2.0.1 + '@takumi-rs/core-win32-x64-msvc': 2.0.1 + csstype: 3.2.3 transitivePeerDependencies: - react - react-dom - '@takumi-rs/helpers@2.0.0-beta.14': {} + '@takumi-rs/helpers@2.0.1': {} - '@takumi-rs/wasm@2.0.0-beta.14': + '@takumi-rs/wasm@2.0.1(csstype@3.2.3)': dependencies: - '@takumi-rs/helpers': 2.0.0-beta.14 + '@takumi-rs/helpers': 2.0.1 + optionalDependencies: csstype: 3.2.3 transitivePeerDependencies: - react @@ -7013,7 +7029,8 @@ snapshots: css-tree: 3.2.1 lru-cache: 11.2.6 - csstype@3.2.3: {} + csstype@3.2.3: + optional: true data-urls@6.0.1: dependencies: @@ -9301,12 +9318,13 @@ snapshots: tailwindcss@4.2.4: {} - takumi-js@2.0.0-beta.14: + takumi-js@2.0.1(csstype@3.2.3): dependencies: - '@takumi-rs/core': 2.0.0-beta.14 - '@takumi-rs/helpers': 2.0.0-beta.14 - '@takumi-rs/wasm': 2.0.0-beta.14 + '@takumi-rs/core': 2.0.1(csstype@3.2.3) + '@takumi-rs/helpers': 2.0.1 + '@takumi-rs/wasm': 2.0.1(csstype@3.2.3) transitivePeerDependencies: + - csstype - react - react-dom From 3cc38caa647059328514b7b66db9b0870771fd71 Mon Sep 17 00:00:00 2001 From: Shivam Meena Date: Thu, 9 Jul 2026 23:53:25 +0530 Subject: [PATCH 2/5] feat(takumi): migrate to takumi-js v2 (2.0.1 stable) (#67) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(takumi): migrate to takumi-js v2 (2.0.1 stable) takumi-js graduated from beta — 2.0.1 is now the `latest` tag. Bump the pin across the library (dev + peer dep) and every example from 2.0.0-beta.14 to the stable release. No source changes needed: the public API is unchanged between beta.14 and 2.0.1. Verified — lib typecheck 0 errors, vitest 10/10 (incl. takumi render tests), all 8 examples build. * release(package): next version .16 * docs: takumi v2 note; document Deno prerendered-image 404 - usage/takumi: note takumi-js is stable v2 (^2.0.1). - runtime/deno: add Known Issue — prerendered image endpoints (`+server.ts` with prerender = true) are written to the static output but the Deno adapter only registers prerendered pages in its route manifest, not endpoint assets. Deno Deploy serves static from that manifest (not the filesystem), so the route 404s. Workaround: serve image endpoints dynamically on Deno. * fix(deno): patch adapter to serve prerendered image endpoints @deno/svelte-adapter@0.2.1 writes prerendered output to the static dir via writePrerendered(), but only registers builder.prerendered.pages in the deploy.json staticFiles manifest. Prerendered *endpoints* (e.g. /png/prerendered.png) are written to disk but never registered, and Deno Deploy serves static files from that manifest — so those routes 404. Add a pnpm patch that also registers builder.prerendered.assets. Verified: deploy.json now lists all three prerendered image routes, and `deno run -A .deno-deploy/server.ts` serves /png/prerendered.png with 200 (valid 1200x630 PNG). Docs known-issue updated to point at the patch. Upstream fix should land in @deno/svelte-adapter; drop the patch when it does. * fix(repo): pin packageManager to pnpm@10 Vercel's builder defaulted to pnpm@9, which hashes patchedDependencies differently than the pnpm@10-written lockfile, failing frozen install with ERR_PNPM_LOCKFILE_CONFIG_MISMATCH. Pin pnpm 10 via packageManager so all hosts use the same version. * docs(takumi): install from beta tag, next channel retired v4.3 prerelease moved from the next tag to beta (4.3.0-next.16) and is ready for test deployments. * release(package): 4.3.0-beta.1 Retire the next prerelease channel; v4.3 ships from the beta tag now. * chore: format and lint * chore(cloudflare): Dev deployment test * chore(cloudflare): Dev deployment test * chore(examples): cloudflare workers dev deployment --- apps/docs/src/content/usage/takumi.md | 61 +++--- apps/docs/wrangler.jsonc | 2 +- examples/cf-workers-build/wrangler.jsonc | 14 +- .../sveltekit-og/benchmarks/baseline.json | 184 +++++++++--------- .../snapshots/2026-06-26T15-11-29.json | 184 +++++++++--------- packages/sveltekit-og/src/index.test.ts | 4 +- packages/sveltekit-og/src/lib/fonts.ts | 11 +- .../sveltekit-og/src/lib/helpers/logger.ts | 4 +- .../sveltekit-og/src/lib/helpers/utils.ts | 4 +- .../src/lib/takumi/image-response.ts | 19 +- packages/sveltekit-og/src/routes/+server.ts | 2 +- .../sveltekit-og/src/routes/sc/+server.ts | 6 +- .../sveltekit-og/src/routes/takumi/+server.ts | 3 +- 13 files changed, 252 insertions(+), 246 deletions(-) diff --git a/apps/docs/src/content/usage/takumi.md b/apps/docs/src/content/usage/takumi.md index 003b2b7..28a6b99 100644 --- a/apps/docs/src/content/usage/takumi.md +++ b/apps/docs/src/content/usage/takumi.md @@ -107,14 +107,14 @@ new ImageResponse(template, { format: 'jpeg', quality: 90 }); new ImageResponse(template, { format: 'svg' }); ``` -| Format | Content-Type | -| ------ | ------------ | -| `png` (default) | `image/png` | -| `jpeg` | `image/jpeg` | -| `webp` | `image/webp` | -| `ico` | `image/x-icon` | -| `svg` | `image/svg+xml` | -| `raw` | `application/octet-stream` | +| Format | Content-Type | +| --------------- | -------------------------- | +| `png` (default) | `image/png` | +| `jpeg` | `image/jpeg` | +| `webp` | `image/webp` | +| `ico` | `image/x-icon` | +| `svg` | `image/svg+xml` | +| `raw` | `application/octet-stream` | ## Fonts @@ -132,17 +132,14 @@ import { read } from '$app/server'; import RegularFont from '$lib/assets/MyFont-Regular.ttf?url'; export const GET = async () => { - return new ImageResponse( - `
Hello World
`, - { - width: 1200, - height: 630, - fonts: [ - new GoogleFont('Inter', { weight: 400 }), - new CustomFont('My Font', () => read(RegularFont).arrayBuffer(), { weight: 700 }) - ] - } - ); + return new ImageResponse(`
Hello World
`, { + width: 1200, + height: 630, + fonts: [ + new GoogleFont('Inter', { weight: 400 }), + new CustomFont('My Font', () => read(RegularFont).arrayBuffer(), { weight: 700 }) + ] + }); }; ``` @@ -172,19 +169,19 @@ new ImageResponse(`
Ship it 🚀
`, { emoji: 'noto Everything the constructor accepts, passed as the second argument. -| Option | Type | Default | Description | -| ------ | ---- | ------- | ----------- | -| `width` | `number` | `1200` | Image width in pixels. | -| `height` | `number` | `630` | Image height in pixels. | -| `format` | `TakumiFormat` | `'png'` | Output format — see [Output Formats](#output-formats). | -| `quality` | `number` | — | `0`–`100`, applies to lossy `jpeg` / `webp`. | -| `fonts` | `TakumiFontInput[]` | built-in font | Fonts to register — see [Fonts](#fonts). | -| `stylesheets` | `string[]` | — | Extra CSS stylesheets applied before rendering. | -| `emoji` | `EmojiType \| 'from-font'` | `'twemoji'` | Emoji provider — see [Emoji](#emoji). | -| `debug` | `boolean` | `false` | Log render timing and diagnostics. | -| `status` | `number` | `200` | HTTP status code of the `Response`. | -| `statusText` | `string` | `'Success'` | HTTP status text of the `Response`. | -| `headers` | `Record` | — | Extra response headers (merged with the `Content-Type`). | +| Option | Type | Default | Description | +| ------------- | -------------------------- | ------------- | -------------------------------------------------------- | +| `width` | `number` | `1200` | Image width in pixels. | +| `height` | `number` | `630` | Image height in pixels. | +| `format` | `TakumiFormat` | `'png'` | Output format — see [Output Formats](#output-formats). | +| `quality` | `number` | — | `0`–`100`, applies to lossy `jpeg` / `webp`. | +| `fonts` | `TakumiFontInput[]` | built-in font | Fonts to register — see [Fonts](#fonts). | +| `stylesheets` | `string[]` | — | Extra CSS stylesheets applied before rendering. | +| `emoji` | `EmojiType \| 'from-font'` | `'twemoji'` | Emoji provider — see [Emoji](#emoji). | +| `debug` | `boolean` | `false` | Log render timing and diagnostics. | +| `status` | `number` | `200` | HTTP status code of the `Response`. | +| `statusText` | `string` | `'Success'` | HTTP status text of the `Response`. | +| `headers` | `Record` | — | Extra response headers (merged with the `Content-Type`). | ## Next Steps diff --git a/apps/docs/wrangler.jsonc b/apps/docs/wrangler.jsonc index d2bda9a..872979c 100644 --- a/apps/docs/wrangler.jsonc +++ b/apps/docs/wrangler.jsonc @@ -2,5 +2,5 @@ "name": "sveltekit-og-docs", "pages_build_output_dir": ".svelte-kit/cloudflare", "compatibility_date": "2025-11-22", - "compatibility_flags": ["nodejs_compat"] + "compatibility_flags": ["nodejs_compat"], } diff --git a/examples/cf-workers-build/wrangler.jsonc b/examples/cf-workers-build/wrangler.jsonc index 6776861..d7c656d 100644 --- a/examples/cf-workers-build/wrangler.jsonc +++ b/examples/cf-workers-build/wrangler.jsonc @@ -9,7 +9,7 @@ } ], "workers_dev": false, - "compatibility_date": "2025-11-20", + "compatibility_date": "2026-07-01", "build": { "command": "pnpm run build" }, @@ -44,5 +44,15 @@ "globs": ["**/*.ttf"], "fallthrough": true } - ] + ], + "env": { + "dev": { + "routes": [ + { + "pattern": "dev-workers.sveltekit-og.dev", + "custom_domain": true + } + ] + } + } } diff --git a/packages/sveltekit-og/benchmarks/baseline.json b/packages/sveltekit-og/benchmarks/baseline.json index 5ece94a..f859435 100644 --- a/packages/sveltekit-og/benchmarks/baseline.json +++ b/packages/sveltekit-og/benchmarks/baseline.json @@ -1,93 +1,93 @@ { - "files": [ - { - "filepath": "/Users/shivammeena/Projects/ethercorps/sveltekit-og/src/image-response.bench.ts", - "groups": [ - { - "fullName": "src/image-response.bench.ts > ImageResponse: html → png (full, incl. stream drain)", - "benchmarks": [ - { - "id": "1924286189_0_0", - "sampleCount": 368, - "name": "ImageResponse", - "rank": 1, - "rme": 0.30957127632140724, - "totalTime": 5008.753219000003, - "min": 11.746624999999767, - "max": 16.26574999999957, - "hz": 73.47137778799794, - "period": 13.610742442934791, - "mean": 13.610742442934791, - "variance": 0.170067224136426, - "sd": 0.4123920757439769, - "sem": 0.021497423008884037, - "df": 367, - "critical": 1.96, - "moe": 0.042134949097412715, - "p75": 13.843332999999802, - "p99": 14.733458999999584, - "p995": 15.493249999999989, - "p999": 16.26574999999957 - } - ] - }, - { - "fullName": "src/image-response.bench.ts > createPng: html → png (satori + resvg)", - "benchmarks": [ - { - "id": "1924286189_1_0", - "sampleCount": 424, - "name": "createPng", - "rank": 1, - "rme": 0.5652196159655196, - "totalTime": 5012.0603890000075, - "min": 11.08929100000023, - "max": 15.211417000000438, - "hz": 84.5959479918787, - "period": 11.820897143867942, - "mean": 11.820897143867942, - "variance": 0.4927073512958219, - "sd": 0.7019311585161482, - "sem": 0.03408879053073952, - "df": 423, - "critical": 1.96, - "moe": 0.06681402944024946, - "p75": 11.885833000000275, - "p99": 14.533124999999927, - "p995": 14.648417000000336, - "p999": 15.211417000000438 - } - ] - }, - { - "fullName": "src/image-response.bench.ts > createSvg: html → svg (satori only)", - "benchmarks": [ - { - "id": "1924286189_2_0", - "sampleCount": 5982, - "name": "createSvg", - "rank": 1, - "rme": 0.6141181627637844, - "totalTime": 5000.671607999993, - "min": 0.6748749999987922, - "max": 2.944792000000234, - "hz": 1196.239319220661, - "period": 0.8359531273821453, - "mean": 0.8359531273821453, - "variance": 0.041039494585467746, - "sd": 0.2025820687658899, - "sem": 0.002619255095635525, - "df": 5981, - "critical": 1.96, - "moe": 0.005133739987445629, - "p75": 0.7925410000007105, - "p99": 1.4479580000006536, - "p995": 1.9095000000015716, - "p999": 2.4850420000002487 - } - ] - } - ] - } - ] -} \ No newline at end of file + "files": [ + { + "filepath": "/Users/shivammeena/Projects/ethercorps/sveltekit-og/src/image-response.bench.ts", + "groups": [ + { + "fullName": "src/image-response.bench.ts > ImageResponse: html → png (full, incl. stream drain)", + "benchmarks": [ + { + "id": "1924286189_0_0", + "sampleCount": 368, + "name": "ImageResponse", + "rank": 1, + "rme": 0.30957127632140724, + "totalTime": 5008.753219000003, + "min": 11.746624999999767, + "max": 16.26574999999957, + "hz": 73.47137778799794, + "period": 13.610742442934791, + "mean": 13.610742442934791, + "variance": 0.170067224136426, + "sd": 0.4123920757439769, + "sem": 0.021497423008884037, + "df": 367, + "critical": 1.96, + "moe": 0.042134949097412715, + "p75": 13.843332999999802, + "p99": 14.733458999999584, + "p995": 15.493249999999989, + "p999": 16.26574999999957 + } + ] + }, + { + "fullName": "src/image-response.bench.ts > createPng: html → png (satori + resvg)", + "benchmarks": [ + { + "id": "1924286189_1_0", + "sampleCount": 424, + "name": "createPng", + "rank": 1, + "rme": 0.5652196159655196, + "totalTime": 5012.0603890000075, + "min": 11.08929100000023, + "max": 15.211417000000438, + "hz": 84.5959479918787, + "period": 11.820897143867942, + "mean": 11.820897143867942, + "variance": 0.4927073512958219, + "sd": 0.7019311585161482, + "sem": 0.03408879053073952, + "df": 423, + "critical": 1.96, + "moe": 0.06681402944024946, + "p75": 11.885833000000275, + "p99": 14.533124999999927, + "p995": 14.648417000000336, + "p999": 15.211417000000438 + } + ] + }, + { + "fullName": "src/image-response.bench.ts > createSvg: html → svg (satori only)", + "benchmarks": [ + { + "id": "1924286189_2_0", + "sampleCount": 5982, + "name": "createSvg", + "rank": 1, + "rme": 0.6141181627637844, + "totalTime": 5000.671607999993, + "min": 0.6748749999987922, + "max": 2.944792000000234, + "hz": 1196.239319220661, + "period": 0.8359531273821453, + "mean": 0.8359531273821453, + "variance": 0.041039494585467746, + "sd": 0.2025820687658899, + "sem": 0.002619255095635525, + "df": 5981, + "critical": 1.96, + "moe": 0.005133739987445629, + "p75": 0.7925410000007105, + "p99": 1.4479580000006536, + "p995": 1.9095000000015716, + "p999": 2.4850420000002487 + } + ] + } + ] + } + ] +} diff --git a/packages/sveltekit-og/benchmarks/snapshots/2026-06-26T15-11-29.json b/packages/sveltekit-og/benchmarks/snapshots/2026-06-26T15-11-29.json index b962bbe..b385c2f 100644 --- a/packages/sveltekit-og/benchmarks/snapshots/2026-06-26T15-11-29.json +++ b/packages/sveltekit-og/benchmarks/snapshots/2026-06-26T15-11-29.json @@ -1,93 +1,93 @@ { - "files": [ - { - "filepath": "/Users/shivammeena/Projects/ethercorps/sveltekit-og/src/image-response.bench.ts", - "groups": [ - { - "fullName": "src/image-response.bench.ts > ImageResponse: html → png (full, incl. stream drain)", - "benchmarks": [ - { - "id": "1924286189_0_0", - "sampleCount": 367, - "name": "ImageResponse", - "rank": 1, - "rme": 0.3114901305694826, - "totalTime": 5005.398713000009, - "min": 11.61608299999989, - "max": 15.930917000000136, - "hz": 73.3208323738184, - "period": 13.638688591280678, - "mean": 13.638688591280678, - "variance": 0.172420035357901, - "sd": 0.41523491587040345, - "sem": 0.02167508617395169, - "df": 366, - "critical": 1.96, - "moe": 0.04248316890094531, - "p75": 13.8740829999997, - "p99": 14.78704099999959, - "p995": 15.8759170000003, - "p999": 15.930917000000136 - } - ] - }, - { - "fullName": "src/image-response.bench.ts > createPng: html → png (satori + resvg)", - "benchmarks": [ - { - "id": "1924286189_1_0", - "sampleCount": 420, - "name": "createPng", - "rank": 1, - "rme": 0.5107261763707514, - "totalTime": 5002.28296699998, - "min": 11.22387500000059, - "max": 14.531334000001152, - "hz": 83.96166365852083, - "period": 11.910197540476142, - "mean": 11.910197540476142, - "variance": 0.4045305378330453, - "sd": 0.6360271518048938, - "sem": 0.031034947192182184, - "df": 419, - "critical": 1.96, - "moe": 0.06082849649667708, - "p75": 12.074416999999812, - "p99": 14.228499999999258, - "p995": 14.425666999999521, - "p999": 14.531334000001152 - } - ] - }, - { - "fullName": "src/image-response.bench.ts > createSvg: html → svg (satori only)", - "benchmarks": [ - { - "id": "1924286189_2_0", - "sampleCount": 5986, - "name": "createSvg", - "rank": 1, - "rme": 0.637274119656219, - "totalTime": 5000.142297999977, - "min": 0.6694580000003043, - "max": 3.0225420000006125, - "hz": 1197.1659291365286, - "period": 0.8353060972268589, - "mean": 0.8353060972268589, - "variance": 0.044153835591551845, - "sd": 0.21012814088444184, - "sem": 0.0027159130497638705, - "df": 5985, - "critical": 1.96, - "moe": 0.005323189577537186, - "p75": 0.789042000000336, - "p99": 1.4883329999993293, - "p995": 2.059291999999914, - "p999": 2.4301249999989523 - } - ] - } - ] - } - ] -} \ No newline at end of file + "files": [ + { + "filepath": "/Users/shivammeena/Projects/ethercorps/sveltekit-og/src/image-response.bench.ts", + "groups": [ + { + "fullName": "src/image-response.bench.ts > ImageResponse: html → png (full, incl. stream drain)", + "benchmarks": [ + { + "id": "1924286189_0_0", + "sampleCount": 367, + "name": "ImageResponse", + "rank": 1, + "rme": 0.3114901305694826, + "totalTime": 5005.398713000009, + "min": 11.61608299999989, + "max": 15.930917000000136, + "hz": 73.3208323738184, + "period": 13.638688591280678, + "mean": 13.638688591280678, + "variance": 0.172420035357901, + "sd": 0.41523491587040345, + "sem": 0.02167508617395169, + "df": 366, + "critical": 1.96, + "moe": 0.04248316890094531, + "p75": 13.8740829999997, + "p99": 14.78704099999959, + "p995": 15.8759170000003, + "p999": 15.930917000000136 + } + ] + }, + { + "fullName": "src/image-response.bench.ts > createPng: html → png (satori + resvg)", + "benchmarks": [ + { + "id": "1924286189_1_0", + "sampleCount": 420, + "name": "createPng", + "rank": 1, + "rme": 0.5107261763707514, + "totalTime": 5002.28296699998, + "min": 11.22387500000059, + "max": 14.531334000001152, + "hz": 83.96166365852083, + "period": 11.910197540476142, + "mean": 11.910197540476142, + "variance": 0.4045305378330453, + "sd": 0.6360271518048938, + "sem": 0.031034947192182184, + "df": 419, + "critical": 1.96, + "moe": 0.06082849649667708, + "p75": 12.074416999999812, + "p99": 14.228499999999258, + "p995": 14.425666999999521, + "p999": 14.531334000001152 + } + ] + }, + { + "fullName": "src/image-response.bench.ts > createSvg: html → svg (satori only)", + "benchmarks": [ + { + "id": "1924286189_2_0", + "sampleCount": 5986, + "name": "createSvg", + "rank": 1, + "rme": 0.637274119656219, + "totalTime": 5000.142297999977, + "min": 0.6694580000003043, + "max": 3.0225420000006125, + "hz": 1197.1659291365286, + "period": 0.8353060972268589, + "mean": 0.8353060972268589, + "variance": 0.044153835591551845, + "sd": 0.21012814088444184, + "sem": 0.0027159130497638705, + "df": 5985, + "critical": 1.96, + "moe": 0.005323189577537186, + "p75": 0.789042000000336, + "p99": 1.4883329999993293, + "p995": 2.059291999999914, + "p999": 2.4301249999989523 + } + ] + } + ] + } + ] +} diff --git a/packages/sveltekit-og/src/index.test.ts b/packages/sveltekit-og/src/index.test.ts index 3e42032..c890207 100644 --- a/packages/sveltekit-og/src/index.test.ts +++ b/packages/sveltekit-og/src/index.test.ts @@ -7,7 +7,9 @@ import { createSvg } from "$lib/helpers/create.js"; const fontData = readFileSync( new URL("./routes/(components)/SpaceMono-Regular.ttf", import.meta.url) ); -const fonts = [{ name: "Space Mono", data: fontData, weight: 400 as const, style: "normal" as const }]; +const fonts = [ + { name: "Space Mono", data: fontData, weight: 400 as const, style: "normal" as const }, +]; const html = `
hi
`; describe("satori ImageResponse", () => { diff --git a/packages/sveltekit-og/src/lib/fonts.ts b/packages/sveltekit-og/src/lib/fonts.ts index b7a6c9d..1092455 100644 --- a/packages/sveltekit-og/src/lib/fonts.ts +++ b/packages/sveltekit-og/src/lib/fonts.ts @@ -15,10 +15,7 @@ export class BaseFont { style: FontStyle; weight: FontWeight; - constructor( - name: string, - { weight = 400, style = "normal" }: BaseFontOptions = {} - ) { + constructor(name: string, { weight = 400, style = "normal" }: BaseFontOptions = {}) { this.name = name; this.style = style; this.weight = weight; @@ -33,7 +30,9 @@ export class BaseFont { } export class CustomFont extends BaseFont { - protected input: MayBePromise | (() => MayBePromise); + protected input: + | MayBePromise + | (() => MayBePromise); private promise?: Promise; constructor( @@ -143,7 +142,7 @@ export class GoogleFont extends BaseFont { family: string, options: { name?: string; text?: string; weight?: FontWeight; style?: FontStyle } = {} ) { - super(options.name || family, options); + super(options.name || family, options); this.family = family; this.text = options.text; } diff --git a/packages/sveltekit-og/src/lib/helpers/logger.ts b/packages/sveltekit-og/src/lib/helpers/logger.ts index 0c5508f..b4046f5 100644 --- a/packages/sveltekit-og/src/lib/helpers/logger.ts +++ b/packages/sveltekit-og/src/lib/helpers/logger.ts @@ -1,4 +1,4 @@ -const PREFIX = '[SvelteKit-OG]'; +const PREFIX = "[SvelteKit-OG]"; export type Logger = ReturnType; @@ -15,6 +15,6 @@ export function createLogger(debug: boolean) { }, error: (message: string, ...args: unknown[]) => { if (debug) console.error(`${PREFIX} ❌ ${message}`, ...args); - } + }, }; } diff --git a/packages/sveltekit-og/src/lib/helpers/utils.ts b/packages/sveltekit-og/src/lib/helpers/utils.ts index 00ce315..3a9f3ed 100644 --- a/packages/sveltekit-og/src/lib/helpers/utils.ts +++ b/packages/sveltekit-og/src/lib/helpers/utils.ts @@ -15,10 +15,10 @@ export const formatBytes = (bytes: number, decimals = 2) => { ); }; -export async function importWasm(input: any) { +export async function importWasm(input: unknown) { // may be a nested await for some reason const _input = await input; - const _module = _input.default || _input; + const _module = _input?.default || _input; // this is from rollup/wasm, it does some magic we need to recover from if (typeof _module === "function") { // empty input is to avoid instantiating the wasm module diff --git a/packages/sveltekit-og/src/lib/takumi/image-response.ts b/packages/sveltekit-og/src/lib/takumi/image-response.ts index 97dac67..45adcf0 100644 --- a/packages/sveltekit-og/src/lib/takumi/image-response.ts +++ b/packages/sveltekit-og/src/lib/takumi/image-response.ts @@ -24,17 +24,14 @@ export class ImageResponse> extends Response { ) { const opts = { ...DEFAULT_OPTIONS, ...options }; - const { body, init } = buildImageResponse( - () => createTakumiImage(element, opts, props), - { - label: opts.format.toUpperCase(), - contentType: CONTENT_TYPES[opts.format], - debug: opts.debug, - headers: opts.headers, - status: opts.status, - statusText: opts.statusText, - } - ); + const { body, init } = buildImageResponse(() => createTakumiImage(element, opts, props), { + label: opts.format.toUpperCase(), + contentType: CONTENT_TYPES[opts.format], + debug: opts.debug, + headers: opts.headers, + status: opts.status, + statusText: opts.statusText, + }); super(body, init); } diff --git a/packages/sveltekit-og/src/routes/+server.ts b/packages/sveltekit-og/src/routes/+server.ts index 1634c6b..855eb40 100644 --- a/packages/sveltekit-og/src/routes/+server.ts +++ b/packages/sveltekit-og/src/routes/+server.ts @@ -13,7 +13,7 @@ const customRegular = new CustomFont("Space Mono", () => read(RegularFont).array }); export const GET: RequestHandler = async ({ url }) => { - const format = url.searchParams.get("format") as ImageResponseOptions['format'] || "png"; + const format = (url.searchParams.get("format") as ImageResponseOptions["format"]) || "png"; const html = `
diff --git a/packages/sveltekit-og/src/routes/sc/+server.ts b/packages/sveltekit-og/src/routes/sc/+server.ts index 8d4f0a3..158aca0 100644 --- a/packages/sveltekit-og/src/routes/sc/+server.ts +++ b/packages/sveltekit-og/src/routes/sc/+server.ts @@ -3,7 +3,7 @@ import { ImageResponse, type ImageResponseOptions } from "$lib/index.js"; import OG from "../(components)/OG.svelte"; export const GET: RequestHandler = async ({ url }) => { - const format = url.searchParams.get("format") as ImageResponseOptions['format'] || "png"; + const format = (url.searchParams.get("format") as ImageResponseOptions["format"]) || "png"; return new ImageResponse( OG, { @@ -12,8 +12,8 @@ export const GET: RequestHandler = async ({ url }) => { width: 800, height: 400, headers: { - "Cache-Control": "no-cache, no-store" - } + "Cache-Control": "no-cache, no-store", + }, }, { text: "Ready to try sveltekit-og?", diff --git a/packages/sveltekit-og/src/routes/takumi/+server.ts b/packages/sveltekit-og/src/routes/takumi/+server.ts index 7698408..018a162 100644 --- a/packages/sveltekit-og/src/routes/takumi/+server.ts +++ b/packages/sveltekit-og/src/routes/takumi/+server.ts @@ -3,7 +3,8 @@ import { ImageResponse, type TakumiImageResponseOptions } from "$lib/takumi/inde import OG from "../(components)/OG.svelte"; export const GET: RequestHandler = async ({ url }) => { - const format = (url.searchParams.get("format") as TakumiImageResponseOptions["format"]) || "png"; + const format = + (url.searchParams.get("format") as TakumiImageResponseOptions["format"]) || "png"; return new ImageResponse( OG, { From e54ff0ea87bd0be952a124dedc3c35ceb132a5b3 Mon Sep 17 00:00:00 2001 From: Shivam Meena Date: Fri, 10 Jul 2026 18:05:56 +0530 Subject: [PATCH 3/5] ci(release): automate branch-driven npm publishing (#73) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add release workflow triggered on push to main/dev. Channel is derived from branch + version: main + clean version -> latest dev + -beta.x -> beta any + -next.x -> next Skips when the version is already on npm, so no-bump merges are no-ops. Publishing uses npm Trusted Publishing (OIDC) with provenance — no NPM_TOKEN is stored in the repo. On publish, CI tags v and generates GitHub release notes via changelogithub. Add `pnpm release` (bumpp) for version bumps and document the full release flow in CONTRIBUTING.md. Contributor PRs now target dev. --- .github/workflows/release.yml | 98 ++++++ CONTRIBUTING.md | 73 ++++- package.json | 7 +- pnpm-lock.yaml | 589 +++++++++++++++++++++++++++++++++- 4 files changed, 763 insertions(+), 4 deletions(-) create mode 100644 .github/workflows/release.yml diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..dab4648 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,98 @@ +name: Release + +# Release channel is driven by the branch you merge into: +# main -> production (dist-tag: latest) +# dev -> beta (dist-tag: beta) version must be a -beta.x prerelease +# any -> next (dist-tag: next) whenever the version contains -next.x +# A merge only publishes when the version in package.json is NOT already on npm, +# so ordinary merges that don't bump the version are no-ops. +on: + push: + branches: [main, dev] + +concurrency: + group: release-${{ github.ref }} + cancel-in-progress: false + +# No secrets. Publishing uses npm Trusted Publishing (OIDC) — there is no +# NPM_TOKEN in this repo to steal. id-token mints a short-lived identity npm +# verifies against the trusted publisher configured on npmjs.com for this exact +# repo + workflow. contents:write is only for the tag + GitHub release notes. +permissions: {} + +jobs: + release: + runs-on: ubuntu-latest + permissions: + contents: write + id-token: write + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - uses: pnpm/action-setup@v4 + + - uses: actions/setup-node@v4 + with: + node-version: 22 + registry-url: https://registry.npmjs.org + + # Trusted Publishing needs npm >= 11.5.1; Node 22 ships an older npm. + - run: npm install -g npm@latest + + - run: pnpm install --frozen-lockfile + + # Decide the dist-tag from branch + version, or skip if this channel/version + # combination is not allowed. Enforces: production only from main, beta only + # from dev, next from anywhere. + - name: Resolve release channel + id: channel + working-directory: packages/sveltekit-og + run: | + NAME=$(node -p "require('./package.json').name") + VERSION=$(node -p "require('./package.json').version") + BRANCH="${GITHUB_REF_NAME}" + echo "name=$NAME"; echo "version=$VERSION"; echo "branch=$BRANCH" + + if [[ "$VERSION" == *-next.* ]]; then + TAG=next + elif [[ "$BRANCH" == "dev" && "$VERSION" == *-beta.* ]]; then + TAG=beta + elif [[ "$BRANCH" == "main" && "$VERSION" != *-* ]]; then + TAG=latest + else + echo "No release: version '$VERSION' is not valid for branch '$BRANCH'." >> "$GITHUB_STEP_SUMMARY" + echo "publish=false" >> "$GITHUB_OUTPUT" + exit 0 + fi + + # Skip if this exact version is already on npm (merge didn't bump it). + if npm view "$NAME@$VERSION" version >/dev/null 2>&1; then + echo "$NAME@$VERSION already published — skipping." >> "$GITHUB_STEP_SUMMARY" + echo "publish=false" >> "$GITHUB_OUTPUT" + exit 0 + fi + + echo "publish=true" >> "$GITHUB_OUTPUT" + echo "tag=$TAG" >> "$GITHUB_OUTPUT" + echo "version=$VERSION" >> "$GITHUB_OUTPUT" + + # Build runs via the package's prepublishOnly. --provenance signs a build attestation. + - name: Publish to npm + if: steps.channel.outputs.publish == 'true' + working-directory: packages/sveltekit-og + run: | + echo "Publishing ${{ steps.channel.outputs.version }} with dist-tag: ${{ steps.channel.outputs.tag }}" + npm publish --provenance --tag "${{ steps.channel.outputs.tag }}" + + # Tag the release commit and generate GitHub release notes from conventional commits. + - name: Tag + GitHub release notes + if: steps.channel.outputs.publish == 'true' + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + TAG="v${{ steps.channel.outputs.version }}" + git tag "$TAG" + git push origin "$TAG" + npx changelogithub diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 33c4e74..2dabb09 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -25,10 +25,10 @@ If you have an idea for a new feature or an improvement to an existing one, plea If you would like to contribute code to the project, please follow these steps: -1. Fork the repository and create a `new branch` from `main`. +1. Fork the repository and create a `new branch` from `dev`. 2. Make your changes and commit them with a clear and descriptive commit message. 3. Push your changes to your fork. -4. Open a pull request to the `main` branch of the SvelteKit OG repository. +4. Open a pull request to the `dev` branch of the SvelteKit OG repository. (`main` is the release branch — see [Releasing](#releasing).) Please make sure your pull request includes: @@ -55,6 +55,75 @@ npm run lint npm run format ``` +## Releasing + +> For maintainers. Releases are automated by `.github/workflows/release.yml` and published to npm via **Trusted Publishing (OIDC)** — there is no `NPM_TOKEN` stored in the repo. + +**The version string in `packages/sveltekit-og/package.json` decides the npm dist-tag; the branch decides whether that release is allowed:** + +| Branch | Version | Published to | +| ------ | ----------------- | ---------------- | +| `main` | clean (`4.4.0`) | `latest` (prod) | +| `dev` | `-beta.x` | `beta` | +| any | `-next.x` | `next` | + +Any other branch/version combination does **not** publish. A push/merge only publishes when the version is not already on npm — merges that don't bump the version are no-ops. + +Bump the version with the interactive helper (it commits and pushes to the current branch; the CI creates the git tag): + +```bash +pnpm release +``` + +### Beta + +```bash +git checkout dev +pnpm release # pick a -beta version, e.g. 4.4.0-beta.0 +``` + +Pushing to `dev` publishes `@beta`. Install with `npm i @ethercorps/sveltekit-og@beta`. + +### Next (experimental preview) + +```bash +pnpm release # pick a -next version, e.g. 4.4.0-next.0 +``` + +Publishes `@next` from any branch. Use for throwaway previews you don't want on `@beta`. + +### Production + +Bump to a clean version on `dev` (this is a no-op publish), then merge `dev` → `main`: + +```bash +git checkout dev +pnpm release # pick the clean release, e.g. 4.4.0 +git push origin dev + +git checkout main +git merge --ff-only dev # or merge the dev → main PR +git push origin main +``` + +Pushing the clean version to `main` publishes `@latest`. + +> Do **not** bump the clean version directly on `main` during a beta cycle — bump on `dev` and merge, so `main` always matches what's on `@latest`. + +### Hotfix + +```bash +git checkout -b hotfix main +# fix, then: +pnpm release # e.g. 4.4.1 +git checkout main && git merge --ff-only hotfix && git push origin main +git checkout dev && git merge main && git push origin dev # keep dev in sync +``` + +### One-time setup + +Trusted Publishing must be configured once on npmjs.com → the package → **Settings → Trusted Publishing**: add a GitHub Actions publisher for repo `ethercorps/sveltekit-og`, workflow `release.yml`. Without it, publishing fails (by design — npm only trusts that exact repo + workflow). + ## Code of Conduct This project and everyone participating in it is governed by the [SvelteKit OG Code of Conduct](CODE_OF_CONDUCT.md). By participating, you are expected to uphold this code. Please report unacceptable behavior to [ethercorps@gmail.com](mailto:ethercorps@gmail.com). diff --git a/package.json b/package.json index 3f7141b..c00756d 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,12 @@ "docs:build": "pnpm -F @svecodocs/docs build", "check": "pnpm -r check", "lint": "pnpm -r lint", - "format": "pnpm -r format" + "format": "pnpm -r format", + "release": "bumpp --no-tag packages/sveltekit-og/package.json" + }, + "devDependencies": { + "bumpp": "^10.4.0", + "changelogithub": "^13.16.0" }, "pnpm": { "onlyBuiltDependencies": [ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ecb00dc..95458df 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,7 +11,14 @@ patchedDependencies: importers: - .: {} + .: + devDependencies: + bumpp: + specifier: ^10.4.0 + version: 10.4.1 + changelogithub: + specifier: ^13.16.0 + version: 13.16.1 apps/docs: dependencies: @@ -2056,6 +2063,9 @@ packages: cpu: [x64] os: [win32] + '@sec-ant/readable-stream@0.4.1': + resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} + '@shikijs/core@1.29.2': resolution: {integrity: sha512-vju0lY9r27jJfOY4Z7+Rt/nIOjzJpZ3y+nYpqtUZInVoXQ/TJZcfGnNOGnKjFdVZb8qexiCuSlZRKcGfhhTTZQ==} @@ -2089,6 +2099,10 @@ packages: resolution: {integrity: sha512-P1Cz1dWaFfR4IR+U13mqqiGsLFf1KbayybWwdd2vfctdV6hDpUkgCY0nKOLLTMSoRd/jJNjtbqzf13K8DCCXQw==} engines: {node: '>=18'} + '@sindresorhus/merge-streams@4.0.0': + resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} + engines: {node: '>=18'} + '@speed-highlight/core@1.2.14': resolution: {integrity: sha512-G4ewlBNhUtlLvrJTb88d2mdy2KRijzs4UhnlrOSRT4bmjh/IqNElZa3zkrZ+TC47TwtlDWzVLFADljF1Ijp5hA==} @@ -2617,9 +2631,20 @@ packages: resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} engines: {node: '>=12'} + ansis@4.2.0: + resolution: {integrity: sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==} + engines: {node: '>=14'} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + args-tokenizer@0.3.0: + resolution: {integrity: sha512-xXAd7G2Mll5W8uo37GETpQ2VrE84M181Z7ugHFGQnJZ50M2mbOv0osSZ9VsSgPfJQ+LVG0prSi0th+ELMsno7Q==} + aria-query@5.3.1: resolution: {integrity: sha512-Z/ZeOgVl7bcSYZ/u/rh0fOpvEpq//LZmdbkXyc7syVzjPAhfOa9ebsdTSjEBDU4vs5nC98Kfduj1uFo0qyET3g==} engines: {node: '>= 0.4'} @@ -2662,6 +2687,10 @@ packages: bidi-js@1.0.3: resolution: {integrity: sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==} + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + bindings@1.5.0: resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} @@ -2695,6 +2724,31 @@ packages: buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + bumpp@10.4.1: + resolution: {integrity: sha512-X/bwWs5Gbb/D7rN4aHLB7zdjiA6nGdjckM1sTHhI9oovIbEw2L5pw5S4xzk8ZTeOZ8EnwU/Ze4SoZ6/Vr3pM2Q==} + engines: {node: '>=18'} + hasBin: true + + bundle-name@4.1.0: + resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} + engines: {node: '>=18'} + + c12@1.11.2: + resolution: {integrity: sha512-oBs8a4uvSDO9dm8b7OCFW7+dgtVrwmwnrVXYzLm43ta7ep2jCn/0MhoUFygIWtxhyy6+/MG7/agvpY0U1Iemew==} + peerDependencies: + magicast: ^0.3.4 + peerDependenciesMeta: + magicast: + optional: true + + c12@3.3.3: + resolution: {integrity: sha512-750hTRvgBy5kcMNPdh95Qo+XUBeGo8C7nsKSmedDmaQI+E0r82DwHeM6vBewDe4rGFbnxoa4V9pw+sPh5+Iz8Q==} + peerDependencies: + magicast: '*' + peerDependenciesMeta: + magicast: + optional: true + cac@6.7.14: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} @@ -2717,6 +2771,15 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} + changelogen@0.5.7: + resolution: {integrity: sha512-cTZXBcJMl3pudE40WENOakXkcVtrbBpbkmSkM20NdRiUqa4+VYRdXdEsgQ0BNQ6JBE2YymTNWtPKVF7UCTN5+g==} + hasBin: true + + changelogithub@13.16.1: + resolution: {integrity: sha512-h4etOmEM/wtqBWKPbnHoqv2C8moRCCEGTckwwWpvRgr/t1tY0MbyjQbZKy1ETQ7gn1UTQMJkCSRQ4KxiQ+HfSQ==} + engines: {node: '>=12.0.0'} + hasBin: true + character-entities-html4@2.1.0: resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} @@ -2732,6 +2795,10 @@ packages: check-error@1.0.3: resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + chokidar@4.0.3: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} @@ -2740,10 +2807,20 @@ packages: resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} engines: {node: '>= 20.19.0'} + chownr@2.0.0: + resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} + engines: {node: '>=10'} + chownr@3.0.0: resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} engines: {node: '>=18'} + citty@0.1.6: + resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==} + + citty@0.2.2: + resolution: {integrity: sha512-+6vJA3L98yv+IdfKGZHBNiGW5KHn22e/JwID0Strsz8h4S/csAu/OuICwxrg44k5MRiZHWIo8XXuJgQTriRP4w==} + cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} @@ -2762,6 +2839,9 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + comma-separated-tokens@2.0.3: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} @@ -2784,6 +2864,9 @@ packages: resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} engines: {node: ^14.18.0 || >=16.10.0} + convert-gitmoji@0.1.5: + resolution: {integrity: sha512-4wqOafJdk2tqZC++cjcbGcaJ13BZ3kwldf06PTiAQRAB76Z1KJwZNL1SaRZMi2w1FM9RYTgZ6QErS8NUl/GBmQ==} + cookie@0.6.0: resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} engines: {node: '>= 0.6'} @@ -2866,14 +2949,32 @@ packages: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} + default-browser-id@5.0.1: + resolution: {integrity: sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==} + engines: {node: '>=18'} + + default-browser@5.5.0: + resolution: {integrity: sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==} + engines: {node: '>=18'} + define-lazy-prop@2.0.0: resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} engines: {node: '>=8'} + define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} + + defu@6.1.7: + resolution: {integrity: sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==} + dequal@2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} + destr@2.0.5: + resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==} + detect-libc@2.1.2: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} @@ -2896,6 +2997,14 @@ packages: resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} engines: {node: '>=6.0.0'} + dotenv@16.6.1: + resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} + engines: {node: '>=12'} + + dotenv@17.3.1: + resolution: {integrity: sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA==} + engines: {node: '>=12'} + eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} @@ -3109,6 +3218,10 @@ packages: resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} engines: {node: '>=16.17'} + execa@9.6.1: + resolution: {integrity: sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA==} + engines: {node: ^18.19.0 || >=20.5.0} + exsolve@1.0.8: resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==} @@ -3146,6 +3259,10 @@ packages: fflate@0.7.4: resolution: {integrity: sha512-5u2V/CDW15QM1XbbgS+0DfPxVB+jUKhWEKuuFuHncbk3tEEqzmoXL+2KyOFuKGqOnmdIy0/davWF1CkuwtibCw==} + figures@6.1.0: + resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} + engines: {node: '>=18'} + file-entry-cache@6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} @@ -3183,6 +3300,10 @@ packages: resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} engines: {node: '>=14'} + fs-minipass@2.1.0: + resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} + engines: {node: '>= 8'} + fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} @@ -3210,6 +3331,18 @@ packages: resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} engines: {node: '>=16'} + get-stream@9.0.1: + resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} + engines: {node: '>=18'} + + giget@1.2.5: + resolution: {integrity: sha512-r1ekGw/Bgpi3HLV3h1MRBIlSAdHoIMklpaQ3OQLFcRw9PwAj2rqigvIbg+dBUI51OxVI2jsEtDywDBjSiuf7Ug==} + hasBin: true + + giget@2.0.0: + resolution: {integrity: sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==} + hasBin: true + github-slugger@2.0.0: resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} @@ -3345,6 +3478,10 @@ packages: resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} engines: {node: '>=16.17.0'} + human-signals@8.0.1: + resolution: {integrity: sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==} + engines: {node: '>=18.18.0'} + ignore-walk@5.0.1: resolution: {integrity: sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} @@ -3384,6 +3521,10 @@ packages: is-alphanumerical@2.0.1: resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + is-buffer@2.0.5: resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} engines: {node: '>=4'} @@ -3400,6 +3541,11 @@ packages: engines: {node: '>=8'} hasBin: true + is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -3415,6 +3561,11 @@ packages: is-hexadecimal@2.0.1: resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} + is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + is-module@1.0.0: resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} @@ -3443,16 +3594,32 @@ packages: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + is-stream@4.0.1: + resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} + engines: {node: '>=18'} + + is-unicode-supported@2.1.0: + resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} + engines: {node: '>=18'} + is-wsl@2.2.0: resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} engines: {node: '>=8'} + is-wsl@3.1.1: + resolution: {integrity: sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==} + engines: {node: '>=16'} + isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + jiti@1.21.7: + resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} + hasBin: true + jiti@2.6.1: resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true @@ -3826,14 +3993,31 @@ packages: resolution: {integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==} engines: {node: '>=16 || 14 >=14.17'} + minipass@3.3.6: + resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} + engines: {node: '>=8'} + + minipass@5.0.0: + resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} + engines: {node: '>=8'} + minipass@7.1.3: resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} engines: {node: '>=16 || 14 >=14.17'} + minizlib@2.1.2: + resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} + engines: {node: '>= 8'} + minizlib@3.1.0: resolution: {integrity: sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==} engines: {node: '>= 18'} + mkdirp@1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + mlly@1.8.2: resolution: {integrity: sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==} @@ -3864,6 +4048,9 @@ packages: natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + node-fetch-native@1.6.7: + resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==} + node-fetch@2.7.0: resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} engines: {node: 4.x || >=6.0.0} @@ -3882,6 +4069,10 @@ packages: engines: {node: ^18.17.0 || >=20.5.0} hasBin: true + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + npm-bundled@2.0.1: resolution: {integrity: sha512-gZLxXdjEzE/+mOstGDqR6b0EkhJ+kM6fxM6vUuckuctuVPh80Q6pw/rSZj9s4Gex9GxWtIicO1pc8DB9KZWudw==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} @@ -3899,6 +4090,20 @@ packages: resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + npm-run-path@6.0.0: + resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==} + engines: {node: '>=18'} + + nypm@0.5.4: + resolution: {integrity: sha512-X0SNNrZiGU8/e/zAB7sCTtdxWTMSIO73q+xuKgglm2Yvzwlo8UoC5FNySQFCvl84uPaeADkqHUZUkWy4aH4xOA==} + engines: {node: ^14.16.0 || >=16.10.0} + hasBin: true + + nypm@0.6.5: + resolution: {integrity: sha512-K6AJy1GMVyfyMXRVB88700BJqNUkByijGJM8kEHpLdcAt+vSQAVfkWWHYzuRXHSY6xA2sNc5RjTj0p9rE2izVQ==} + engines: {node: '>=18'} + hasBin: true + obug@2.1.1: resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} @@ -3906,6 +4111,15 @@ packages: resolution: {integrity: sha512-4+/OFSqOjoyULo7eN7EA97DE0Xydj/PW5aIckxqQIoFjFwqXKuFCvXUJObyJfBF9Khu4RL/jlDRI9FPaMGfPnw==} engines: {node: '>= 20'} + ofetch@1.5.1: + resolution: {integrity: sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==} + + ohash@1.1.6: + resolution: {integrity: sha512-TBu7PtV8YkAZn0tSxobKY2n2aAQva936lhRrj6957aDaCf9IEtqsKbgMzXE/F/sjqYOwmrukeORHNLe5glk7Cg==} + + ohash@2.0.11: + resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} + once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} @@ -3916,6 +4130,10 @@ packages: oniguruma-to-es@2.3.0: resolution: {integrity: sha512-bwALDxriqfKGfUufKGGepCzu9x7nJQuoRoAFp4AnwehhC2crqrDIAP/uN2qdlsAvSMpeRC3+Yzhqc7hLmle5+g==} + open@10.2.0: + resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} + engines: {node: '>=18'} + open@8.4.2: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} @@ -3949,6 +4167,9 @@ packages: package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + package-manager-detector@1.6.0: + resolution: {integrity: sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==} + pako@0.2.9: resolution: {integrity: sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==} @@ -3962,6 +4183,10 @@ packages: parse-entities@4.0.2: resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==} + parse-ms@4.0.0: + resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} + engines: {node: '>=18'} + parse-numeric-range@1.3.0: resolution: {integrity: sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==} @@ -4010,6 +4235,12 @@ packages: pathval@1.1.1: resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + perfect-debounce@1.0.0: + resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} + + perfect-debounce@2.1.0: + resolution: {integrity: sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g==} + phosphor-svelte@3.1.0: resolution: {integrity: sha512-nldtxx+XCgNREvrb7O5xgDsefytXpSkPTx8Rnu3f2qQCUZLDV1rLxYSd2Jcwckuo9lZB1qKMqGR17P4UDC0PrA==} peerDependencies: @@ -4161,6 +4392,10 @@ packages: resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + pretty-ms@9.3.0: + resolution: {integrity: sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==} + engines: {node: '>=18'} + property-information@7.1.0: resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} @@ -4176,9 +4411,16 @@ packages: queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + rc9@2.1.2: + resolution: {integrity: sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==} + react-is@18.3.1: resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + readdirp@4.1.2: resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} engines: {node: '>= 14.18.0'} @@ -4314,6 +4556,10 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + run-applescript@7.1.0: + resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==} + engines: {node: '>=18'} + run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} @@ -4449,6 +4695,10 @@ packages: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} engines: {node: '>=12'} + strip-final-newline@4.0.0: + resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==} + engines: {node: '>=18'} + strip-indent@4.1.1: resolution: {integrity: sha512-SlyRoSkdh1dYP0PzclLE7r0M9sgbFKKMFXpFRUMNuKhQSbC6VQIGzq3E0qsfvGJaUFJPGv6Ws1NZ/haTAjfbMA==} engines: {node: '>=12'} @@ -4549,6 +4799,11 @@ packages: resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} engines: {node: '>=6'} + tar@6.2.1: + resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} + engines: {node: '>=10'} + deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me + tar@7.5.19: resolution: {integrity: sha512-4LeEWl96twnS2Q7Bz4MGqgazLqO+hJN63GZxXoIqh1T3VweYD997gbU1ItNsQafqqXTXd5WFyFdReLtwvRBNiw==} engines: {node: '>=18'} @@ -4567,6 +4822,13 @@ packages: tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + tinyexec@0.3.2: + resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + + tinyexec@1.0.4: + resolution: {integrity: sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw==} + engines: {node: '>=18'} + tinyglobby@0.2.15: resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} @@ -4688,6 +4950,10 @@ packages: unicode-trie@2.0.0: resolution: {integrity: sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==} + unicorn-magic@0.3.0: + resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} + engines: {node: '>=18'} + unified@11.0.5: resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} @@ -5008,6 +5274,10 @@ packages: utf-8-validate: optional: true + wsl-utils@0.1.0: + resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==} + engines: {node: '>=18'} + xml-name-validator@5.0.0: resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} engines: {node: '>=18'} @@ -5019,6 +5289,9 @@ packages: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + yallist@5.0.0: resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} engines: {node: '>=18'} @@ -5048,6 +5321,10 @@ packages: resolution: {integrity: sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==} engines: {node: '>=12.20'} + yoctocolors@2.1.2: + resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==} + engines: {node: '>=18'} + yoga-layout@3.2.1: resolution: {integrity: sha512-0LPOt3AxKqMdFBZA3HBAt/t/8vIKq7VaQYbuA8WxCgung+p9TVyKRYdpvCb80HcdTN2NkbIKbhNwKUfm3tQywQ==} @@ -6143,6 +6420,8 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.59.0': optional: true + '@sec-ant/readable-stream@0.4.1': {} + '@shikijs/core@1.29.2': dependencies: '@shikijs/engine-javascript': 1.29.2 @@ -6187,6 +6466,8 @@ snapshots: '@sindresorhus/is@7.2.0': {} + '@sindresorhus/merge-streams@4.0.0': {} + '@speed-highlight/core@1.2.14': {} '@standard-schema/spec@1.1.0': {} @@ -6843,8 +7124,17 @@ snapshots: ansi-styles@6.2.3: {} + ansis@4.2.0: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + argparse@2.0.1: {} + args-tokenizer@0.3.0: {} + aria-query@5.3.1: {} array-union@2.1.0: {} @@ -6871,6 +7161,8 @@ snapshots: dependencies: require-from-string: 2.0.2 + binary-extensions@2.3.0: {} + bindings@1.5.0: dependencies: file-uri-to-path: 1.0.0 @@ -6911,6 +7203,56 @@ snapshots: buffer-from@1.1.2: {} + bumpp@10.4.1: + dependencies: + ansis: 4.2.0 + args-tokenizer: 0.3.0 + c12: 3.3.3 + cac: 6.7.14 + escalade: 3.2.0 + jsonc-parser: 3.3.1 + package-manager-detector: 1.6.0 + semver: 7.7.4 + tinyexec: 1.0.4 + tinyglobby: 0.2.15 + yaml: 2.8.2 + transitivePeerDependencies: + - magicast + + bundle-name@4.1.0: + dependencies: + run-applescript: 7.1.0 + + c12@1.11.2: + dependencies: + chokidar: 3.6.0 + confbox: 0.1.8 + defu: 6.1.7 + dotenv: 16.6.1 + giget: 1.2.5 + jiti: 1.21.7 + mlly: 1.8.2 + ohash: 1.1.6 + pathe: 1.1.2 + perfect-debounce: 1.0.0 + pkg-types: 1.3.1 + rc9: 2.1.2 + + c12@3.3.3: + dependencies: + chokidar: 5.0.0 + confbox: 0.2.4 + defu: 6.1.7 + dotenv: 17.3.1 + exsolve: 1.0.8 + giget: 2.0.0 + jiti: 2.6.1 + ohash: 2.0.11 + pathe: 2.0.3 + perfect-debounce: 2.1.0 + pkg-types: 2.3.0 + rc9: 2.1.2 + cac@6.7.14: {} callsites@3.1.0: {} @@ -6934,6 +7276,39 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 + changelogen@0.5.7: + dependencies: + c12: 1.11.2 + colorette: 2.0.20 + consola: 3.4.2 + convert-gitmoji: 0.1.5 + mri: 1.2.0 + node-fetch-native: 1.6.7 + ofetch: 1.5.1 + open: 10.2.0 + pathe: 1.1.2 + pkg-types: 1.3.1 + scule: 1.3.0 + semver: 7.7.4 + std-env: 3.10.0 + yaml: 2.8.2 + transitivePeerDependencies: + - magicast + + changelogithub@13.16.1: + dependencies: + ansis: 4.2.0 + c12: 3.3.3 + cac: 6.7.14 + changelogen: 0.5.7 + convert-gitmoji: 0.1.5 + execa: 9.6.1 + ofetch: 1.5.1 + semver: 7.7.4 + tinyglobby: 0.2.15 + transitivePeerDependencies: + - magicast + character-entities-html4@2.1.0: {} character-entities-legacy@3.0.0: {} @@ -6946,6 +7321,18 @@ snapshots: dependencies: get-func-name: 2.0.2 + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + chokidar@4.0.3: dependencies: readdirp: 4.1.2 @@ -6954,8 +7341,16 @@ snapshots: dependencies: readdirp: 5.0.0 + chownr@2.0.0: {} + chownr@3.0.0: {} + citty@0.1.6: + dependencies: + consola: 3.4.2 + + citty@0.2.2: {} + cliui@8.0.1: dependencies: string-width: 4.2.3 @@ -6972,6 +7367,8 @@ snapshots: color-name@1.1.4: {} + colorette@2.0.20: {} + comma-separated-tokens@2.0.3: {} commander@2.20.3: {} @@ -6986,6 +7383,8 @@ snapshots: consola@3.4.2: {} + convert-gitmoji@0.1.5: {} + cookie@0.6.0: {} cookie@1.1.1: {} @@ -7057,10 +7456,23 @@ snapshots: deepmerge@4.3.1: {} + default-browser-id@5.0.1: {} + + default-browser@5.5.0: + dependencies: + bundle-name: 4.1.0 + default-browser-id: 5.0.1 + define-lazy-prop@2.0.0: {} + define-lazy-prop@3.0.0: {} + + defu@6.1.7: {} + dequal@2.0.3: {} + destr@2.0.5: {} + detect-libc@2.1.2: {} devalue@5.6.4: {} @@ -7079,6 +7491,10 @@ snapshots: dependencies: esutils: 2.0.3 + dotenv@16.6.1: {} + + dotenv@17.3.1: {} + eastasianwidth@0.2.0: {} emoji-regex-xs@1.0.0: {} @@ -7467,6 +7883,21 @@ snapshots: signal-exit: 4.1.0 strip-final-newline: 3.0.0 + execa@9.6.1: + dependencies: + '@sindresorhus/merge-streams': 4.0.0 + cross-spawn: 7.0.6 + figures: 6.1.0 + get-stream: 9.0.1 + human-signals: 8.0.1 + is-plain-obj: 4.1.0 + is-stream: 4.0.1 + npm-run-path: 6.0.0 + pretty-ms: 9.3.0 + signal-exit: 4.1.0 + strip-final-newline: 4.0.0 + yoctocolors: 2.1.2 + exsolve@1.0.8: {} extend@3.0.2: {} @@ -7497,6 +7928,10 @@ snapshots: fflate@0.7.4: {} + figures@6.1.0: + dependencies: + is-unicode-supported: 2.1.0 + file-entry-cache@6.0.1: dependencies: flat-cache: 3.2.0 @@ -7536,6 +7971,10 @@ snapshots: cross-spawn: 7.0.6 signal-exit: 4.1.0 + fs-minipass@2.1.0: + dependencies: + minipass: 3.3.6 + fs.realpath@1.0.0: {} fsevents@2.3.2: @@ -7552,6 +7991,30 @@ snapshots: get-stream@8.0.1: {} + get-stream@9.0.1: + dependencies: + '@sec-ant/readable-stream': 0.4.1 + is-stream: 4.0.1 + + giget@1.2.5: + dependencies: + citty: 0.1.6 + consola: 3.4.2 + defu: 6.1.7 + node-fetch-native: 1.6.7 + nypm: 0.5.4 + pathe: 2.0.3 + tar: 6.2.1 + + giget@2.0.0: + dependencies: + citty: 0.1.6 + consola: 3.4.2 + defu: 6.1.7 + node-fetch-native: 1.6.7 + nypm: 0.6.5 + pathe: 2.0.3 + github-slugger@2.0.0: {} glob-parent@5.1.2: @@ -7801,6 +8264,8 @@ snapshots: human-signals@5.0.0: {} + human-signals@8.0.1: {} + ignore-walk@5.0.1: dependencies: minimatch: 5.1.9 @@ -7834,6 +8299,10 @@ snapshots: is-alphabetical: 2.0.1 is-decimal: 2.0.1 + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + is-buffer@2.0.5: {} is-core-module@2.16.1: @@ -7844,6 +8313,8 @@ snapshots: is-docker@2.2.1: {} + is-docker@3.0.0: {} + is-extglob@2.1.1: {} is-fullwidth-code-point@3.0.0: {} @@ -7854,6 +8325,10 @@ snapshots: is-hexadecimal@2.0.1: {} + is-inside-container@1.0.0: + dependencies: + is-docker: 3.0.0 + is-module@1.0.0: {} is-number@7.0.0: {} @@ -7874,10 +8349,18 @@ snapshots: is-stream@3.0.0: {} + is-stream@4.0.1: {} + + is-unicode-supported@2.1.0: {} + is-wsl@2.2.0: dependencies: is-docker: 2.2.1 + is-wsl@3.1.1: + dependencies: + is-inside-container: 1.0.0 + isexe@2.0.0: {} jackspeak@3.4.3: @@ -7886,6 +8369,8 @@ snapshots: optionalDependencies: '@pkgjs/parseargs': 0.11.0 + jiti@1.21.7: {} + jiti@2.6.1: {} js-tokens@9.0.1: {} @@ -8524,12 +9009,25 @@ snapshots: dependencies: brace-expansion: 2.0.2 + minipass@3.3.6: + dependencies: + yallist: 4.0.0 + + minipass@5.0.0: {} + minipass@7.1.3: {} + minizlib@2.1.2: + dependencies: + minipass: 3.3.6 + yallist: 4.0.0 + minizlib@3.1.0: dependencies: minipass: 7.1.3 + mkdirp@1.0.4: {} + mlly@1.8.2: dependencies: acorn: 8.16.0 @@ -8555,6 +9053,8 @@ snapshots: natural-compare@1.4.0: {} + node-fetch-native@1.6.7: {} + node-fetch@2.7.0: dependencies: whatwg-url: 5.0.0 @@ -8565,6 +9065,8 @@ snapshots: dependencies: abbrev: 3.0.1 + normalize-path@3.0.0: {} + npm-bundled@2.0.1: dependencies: npm-normalize-package-bin: 2.0.0 @@ -8582,6 +9084,26 @@ snapshots: dependencies: path-key: 4.0.0 + npm-run-path@6.0.0: + dependencies: + path-key: 4.0.0 + unicorn-magic: 0.3.0 + + nypm@0.5.4: + dependencies: + citty: 0.1.6 + consola: 3.4.2 + pathe: 2.0.3 + pkg-types: 1.3.1 + tinyexec: 0.3.2 + ufo: 1.6.4 + + nypm@0.6.5: + dependencies: + citty: 0.2.2 + pathe: 2.0.3 + tinyexec: 1.0.4 + obug@2.1.1: {} octokit@5.0.5: @@ -8598,6 +9120,16 @@ snapshots: '@octokit/types': 16.0.0 '@octokit/webhooks': 14.2.0 + ofetch@1.5.1: + dependencies: + destr: 2.0.5 + node-fetch-native: 1.6.7 + ufo: 1.6.4 + + ohash@1.1.6: {} + + ohash@2.0.11: {} + once@1.4.0: dependencies: wrappy: 1.0.2 @@ -8612,6 +9144,13 @@ snapshots: regex: 5.1.1 regex-recursion: 5.1.1 + open@10.2.0: + dependencies: + default-browser: 5.5.0 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + wsl-utils: 0.1.0 + open@8.4.2: dependencies: define-lazy-prop: 2.0.0 @@ -8663,6 +9202,8 @@ snapshots: package-json-from-dist@1.0.1: {} + package-manager-detector@1.6.0: {} + pako@0.2.9: {} parent-module@1.0.1: @@ -8684,6 +9225,8 @@ snapshots: is-decimal: 2.0.1 is-hexadecimal: 2.0.1 + parse-ms@4.0.0: {} + parse-numeric-range@1.3.0: {} parse5@7.3.0: @@ -8719,6 +9262,10 @@ snapshots: pathval@1.1.1: {} + perfect-debounce@1.0.0: {} + + perfect-debounce@2.1.0: {} + phosphor-svelte@3.1.0(svelte@5.53.10)(vite@7.3.2(@types/node@24.11.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2)): dependencies: estree-walker: 3.0.3 @@ -8802,6 +9349,10 @@ snapshots: ansi-styles: 5.2.0 react-is: 18.3.1 + pretty-ms@9.3.0: + dependencies: + parse-ms: 4.0.0 + property-information@7.1.0: {} publint@0.1.16: @@ -8814,8 +9365,17 @@ snapshots: queue-microtask@1.2.3: {} + rc9@2.1.2: + dependencies: + defu: 6.1.7 + destr: 2.0.5 + react-is@18.3.1: {} + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + readdirp@4.1.2: {} readdirp@5.0.0: {} @@ -9037,6 +9597,8 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.59.0 fsevents: 2.3.3 + run-applescript@7.1.0: {} + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 @@ -9213,6 +9775,8 @@ snapshots: strip-final-newline@3.0.0: {} + strip-final-newline@4.0.0: {} + strip-indent@4.1.1: {} strip-json-comments@3.1.1: {} @@ -9330,6 +9894,15 @@ snapshots: tapable@2.3.0: {} + tar@6.2.1: + dependencies: + chownr: 2.0.0 + fs-minipass: 2.1.0 + minipass: 5.0.0 + minizlib: 2.1.2 + mkdirp: 1.0.4 + yallist: 4.0.0 + tar@7.5.19: dependencies: '@isaacs/fs-minipass': 4.0.1 @@ -9351,6 +9924,10 @@ snapshots: tinybench@2.9.0: {} + tinyexec@0.3.2: {} + + tinyexec@1.0.4: {} + tinyglobby@0.2.15: dependencies: fdir: 6.5.0(picomatch@4.0.3) @@ -9452,6 +10029,8 @@ snapshots: pako: 0.2.9 tiny-inflate: 1.0.3 + unicorn-magic@0.3.0: {} + unified@11.0.5: dependencies: '@types/unist': 3.0.3 @@ -9761,12 +10340,18 @@ snapshots: ws@8.20.0: {} + wsl-utils@0.1.0: + dependencies: + is-wsl: 3.1.1 + xml-name-validator@5.0.0: {} xmlchars@2.2.0: {} y18n@5.0.8: {} + yallist@4.0.0: {} + yallist@5.0.0: {} yaml@1.10.2: {} @@ -9789,6 +10374,8 @@ snapshots: yocto-queue@1.2.2: {} + yoctocolors@2.1.2: {} + yoga-layout@3.2.1: {} yoga-wasm-web@0.3.3: {} From e571cd7fcc88dfc2bd0b93bf461cd324f4a99129 Mon Sep 17 00:00:00 2001 From: theetherGit Date: Fri, 10 Jul 2026 18:11:28 +0530 Subject: [PATCH 4/5] chore: release v4.3.0 --- packages/sveltekit-og/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sveltekit-og/package.json b/packages/sveltekit-og/package.json index 0ac9d05..dd7aa3c 100644 --- a/packages/sveltekit-og/package.json +++ b/packages/sveltekit-og/package.json @@ -1,6 +1,6 @@ { "name": "@ethercorps/sveltekit-og", - "version": "4.3.0-beta.1", + "version": "4.3.0", "license": "MIT", "homepage": "https://sveltekit-og.dev", "repository": "github:ethercorps/sveltekit-og", From 1e84e1fba647f46f7ca2ac825897e6c9793d59da Mon Sep 17 00:00:00 2001 From: Shivam Meena Date: Fri, 10 Jul 2026 18:28:21 +0530 Subject: [PATCH 5/5] fix(ci): use Node 24 for release, drop broken npm self-upgrade (#75) `npm install -g npm@latest` self-upgrade leaves an inconsistent global install (missing 'sigstore'), so `npm publish --provenance` crashed with MODULE_NOT_FOUND. Node 24 already bundles npm >= 11.5.1 with OIDC Trusted Publishing support, so pin Node 24 and remove the self-upgrade step. --- .github/workflows/release.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index dab4648..23e7894 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -33,14 +33,14 @@ jobs: - uses: pnpm/action-setup@v4 + # Node 24 bundles npm >= 11.5.1, which supports OIDC Trusted Publishing. + # Do NOT self-upgrade npm (`npm i -g npm@latest`) — it leaves a broken + # dependency tree (missing 'sigstore') and provenance publishing crashes. - uses: actions/setup-node@v4 with: - node-version: 22 + node-version: 24 registry-url: https://registry.npmjs.org - # Trusted Publishing needs npm >= 11.5.1; Node 22 ships an older npm. - - run: npm install -g npm@latest - - run: pnpm install --frozen-lockfile # Decide the dist-tag from branch + version, or skip if this channel/version