diff --git a/bun.lock b/bun.lock index 3551eb21..a25e4e7e 100644 --- a/bun.lock +++ b/bun.lock @@ -28,32 +28,30 @@ "name": "next_test_app", "dependencies": { "@holo-js/adapter-next": "workspace:*", - "@holo-js/auth": "^0.1.3", - "@holo-js/auth-clerk": "^0.1.3", - "@holo-js/auth-social": "^0.1.3", - "@holo-js/auth-social-google": "^0.1.3", - "@holo-js/auth-workos": "^0.1.3", - "@holo-js/authorization": "^0.1.3", - "@holo-js/broadcast": "^0.1.3", - "@holo-js/cache": "^0.1.3", - "@holo-js/cache-db": "workspace:*", - "@holo-js/cache-redis": "workspace:*", + "@holo-js/auth": "^0.1.4", + "@holo-js/auth-clerk": "^0.1.4", + "@holo-js/auth-social": "^0.1.4", + "@holo-js/auth-social-google": "^0.1.4", + "@holo-js/auth-workos": "^0.1.4", + "@holo-js/authorization": "^0.1.4", + "@holo-js/broadcast": "^0.1.4", + "@holo-js/cache": "^0.1.4", "@holo-js/cli": "workspace:*", "@holo-js/config": "workspace:*", "@holo-js/db": "workspace:*", - "@holo-js/db-mysql": "^0.1.3", - "@holo-js/db-postgres": "^0.1.3", - "@holo-js/db-sqlite": "^0.1.3", - "@holo-js/events": "^0.1.3", + "@holo-js/db-mysql": "^0.1.4", + "@holo-js/db-postgres": "^0.1.4", + "@holo-js/db-sqlite": "^0.1.4", + "@holo-js/events": "^0.1.4", "@holo-js/flux": "workspace:*", "@holo-js/media": "workspace:*", - "@holo-js/queue": "^0.1.3", - "@holo-js/queue-db": "^0.1.3", - "@holo-js/queue-redis": "^0.1.3", - "@holo-js/security": "^0.1.3", - "@holo-js/session": "^0.1.3", - "@holo-js/storage": "^0.1.3", - "@holo-js/storage-s3": "^0.1.3", + "@holo-js/queue": "^0.1.4", + "@holo-js/queue-db": "^0.1.4", + "@holo-js/queue-redis": "^0.1.4", + "@holo-js/security": "^0.1.4", + "@holo-js/session": "^0.1.4", + "@holo-js/storage": "^0.1.4", + "@holo-js/storage-s3": "^0.1.4", "esbuild": "^0.27.4", "next": "^16.0.0", "react": "^19.0.0", @@ -70,30 +68,30 @@ "name": "nuxt_test_app", "dependencies": { "@holo-js/adapter-nuxt": "workspace:*", - "@holo-js/auth": "^0.1.3", - "@holo-js/auth-clerk": "^0.1.3", - "@holo-js/auth-social": "^0.1.3", - "@holo-js/auth-social-google": "^0.1.3", - "@holo-js/auth-workos": "^0.1.3", - "@holo-js/authorization": "^0.1.3", - "@holo-js/broadcast": "^0.1.3", - "@holo-js/cache": "^0.1.3", + "@holo-js/auth": "^0.1.4", + "@holo-js/auth-clerk": "^0.1.4", + "@holo-js/auth-social": "^0.1.4", + "@holo-js/auth-social-google": "^0.1.4", + "@holo-js/auth-workos": "^0.1.4", + "@holo-js/authorization": "^0.1.4", + "@holo-js/broadcast": "^0.1.4", + "@holo-js/cache": "^0.1.4", "@holo-js/cli": "workspace:*", "@holo-js/config": "workspace:*", "@holo-js/db": "workspace:*", - "@holo-js/db-mysql": "^0.1.3", - "@holo-js/db-postgres": "^0.1.3", - "@holo-js/db-sqlite": "^0.1.3", - "@holo-js/events": "^0.1.3", + "@holo-js/db-mysql": "^0.1.4", + "@holo-js/db-postgres": "^0.1.4", + "@holo-js/db-sqlite": "^0.1.4", + "@holo-js/events": "^0.1.4", "@holo-js/flux": "workspace:*", "@holo-js/media": "workspace:*", - "@holo-js/queue": "^0.1.3", - "@holo-js/queue-db": "^0.1.3", - "@holo-js/queue-redis": "^0.1.3", - "@holo-js/security": "^0.1.3", - "@holo-js/session": "^0.1.3", - "@holo-js/storage": "^0.1.3", - "@holo-js/storage-s3": "^0.1.3", + "@holo-js/queue": "^0.1.4", + "@holo-js/queue-db": "^0.1.4", + "@holo-js/queue-redis": "^0.1.4", + "@holo-js/security": "^0.1.4", + "@holo-js/session": "^0.1.4", + "@holo-js/storage": "^0.1.4", + "@holo-js/storage-s3": "^0.1.4", "esbuild": "^0.27.4", "nuxt": "^4.0.0", }, @@ -102,6 +100,135 @@ "typescript": "^5.7.2", }, }, + "apps/blog-next": { + "name": "blog-next", + "dependencies": { + "@holo-js/adapter-next": "workspace:*", + "@holo-js/auth": "^0.1.4", + "@holo-js/auth-clerk": "^0.1.4", + "@holo-js/auth-social": "^0.1.4", + "@holo-js/auth-social-github": "^0.1.4", + "@holo-js/auth-social-google": "^0.1.4", + "@holo-js/auth-workos": "^0.1.4", + "@holo-js/authorization": "^0.1.4", + "@holo-js/broadcast": "^0.1.4", + "@holo-js/cache": "^0.1.4", + "@holo-js/cache-db": "^0.1.4", + "@holo-js/cli": "workspace:*", + "@holo-js/config": "workspace:*", + "@holo-js/core": "workspace:*", + "@holo-js/db": "workspace:*", + "@holo-js/db-sqlite": "^0.1.4", + "@holo-js/events": "^0.1.4", + "@holo-js/flux": "workspace:*", + "@holo-js/flux-react": "workspace:*", + "@holo-js/forms": "workspace:*", + "@holo-js/mail": "^0.1.4", + "@holo-js/notifications": "^0.1.4", + "@holo-js/queue": "^0.1.4", + "@holo-js/queue-db": "^0.1.4", + "@holo-js/security": "^0.1.4", + "@holo-js/session": "^0.1.4", + "@holo-js/storage": "^0.1.4", + "@holo-js/validation": "workspace:*", + "esbuild": "^0.25.0", + "next": "^16.0.0", + "react": "^19.0.0", + "react-dom": "^19.0.0", + }, + "devDependencies": { + "@types/node": "^22.0.0", + "@types/react": "^19.0.0", + "@types/react-dom": "^19.0.0", + "typescript": "^5.8.0", + }, + }, + "apps/blog-nuxt": { + "name": "blog-nuxt", + "dependencies": { + "@holo-js/adapter-nuxt": "workspace:*", + "@holo-js/auth": "^0.1.4", + "@holo-js/auth-clerk": "^0.1.4", + "@holo-js/auth-social": "^0.1.4", + "@holo-js/auth-social-github": "^0.1.4", + "@holo-js/auth-social-google": "^0.1.4", + "@holo-js/auth-workos": "^0.1.4", + "@holo-js/authorization": "^0.1.4", + "@holo-js/broadcast": "^0.1.4", + "@holo-js/cache": "^0.1.4", + "@holo-js/cache-db": "^0.1.4", + "@holo-js/cli": "workspace:*", + "@holo-js/config": "workspace:*", + "@holo-js/core": "workspace:*", + "@holo-js/db": "workspace:*", + "@holo-js/db-sqlite": "^0.1.4", + "@holo-js/events": "^0.1.4", + "@holo-js/flux": "workspace:*", + "@holo-js/flux-vue": "workspace:*", + "@holo-js/forms": "workspace:*", + "@holo-js/mail": "^0.1.4", + "@holo-js/notifications": "^0.1.4", + "@holo-js/queue": "^0.1.4", + "@holo-js/queue-db": "^0.1.4", + "@holo-js/security": "^0.1.4", + "@holo-js/session": "^0.1.4", + "@holo-js/storage": "^0.1.4", + "@holo-js/validation": "workspace:*", + "esbuild": "^0.25.0", + "nuxt": "^4.0.0", + "vue": "^3.5.13", + "vue-router": "^5.0.4", + }, + "devDependencies": { + "@types/node": "^22.0.0", + "typescript": "^5.8.0", + "vite": "^5.4.14", + "vue-tsc": "^2.2.0", + }, + }, + "apps/blog-sveltekit": { + "name": "blog-sveltekit", + "dependencies": { + "@holo-js/adapter-sveltekit": "workspace:*", + "@holo-js/auth": "^0.1.4", + "@holo-js/auth-clerk": "^0.1.4", + "@holo-js/auth-social": "^0.1.4", + "@holo-js/auth-social-github": "^0.1.4", + "@holo-js/auth-social-google": "^0.1.4", + "@holo-js/auth-workos": "^0.1.4", + "@holo-js/authorization": "^0.1.4", + "@holo-js/broadcast": "^0.1.4", + "@holo-js/cache": "^0.1.4", + "@holo-js/cache-db": "^0.1.4", + "@holo-js/cli": "workspace:*", + "@holo-js/config": "workspace:*", + "@holo-js/core": "workspace:*", + "@holo-js/db": "workspace:*", + "@holo-js/db-sqlite": "^0.1.4", + "@holo-js/events": "^0.1.4", + "@holo-js/flux": "workspace:*", + "@holo-js/flux-svelte": "workspace:*", + "@holo-js/forms": "workspace:*", + "@holo-js/mail": "^0.1.4", + "@holo-js/notifications": "^0.1.4", + "@holo-js/queue": "^0.1.4", + "@holo-js/queue-db": "^0.1.4", + "@holo-js/security": "^0.1.4", + "@holo-js/session": "^0.1.4", + "@holo-js/storage": "^0.1.4", + "@holo-js/validation": "workspace:*", + "@sveltejs/adapter-node": "^5.0.0", + "@sveltejs/kit": "^2.0.0", + "@sveltejs/vite-plugin-svelte": "^4.0.0", + "esbuild": "^0.25.0", + "svelte": "^5.0.0", + "vite": "^5.0.0", + }, + "devDependencies": { + "@types/node": "^22.0.0", + "typescript": "^5.8.0", + }, + }, "apps/docs": { "name": "docs-app", "version": "0.1.0", @@ -110,34 +237,106 @@ "vitepress": "catalog:", }, }, + "apps/scaffold-smoke-next": { + "name": "apps-scaffold-smoke-next", + "dependencies": { + "@holo-js/adapter-next": "^0.1.4", + "@holo-js/auth": "^0.1.4", + "@holo-js/cli": "^0.1.4", + "@holo-js/config": "^0.1.4", + "@holo-js/core": "^0.1.4", + "@holo-js/db": "^0.1.4", + "@holo-js/db-sqlite": "^0.1.4", + "@holo-js/security": "^0.1.4", + "@holo-js/session": "^0.1.4", + "esbuild": "^0.25.0", + "next": "^16.0.0", + "react": "^19.0.0", + "react-dom": "^19.0.0", + }, + "devDependencies": { + "@types/node": "^22.0.0", + "@types/react": "^19.0.0", + "@types/react-dom": "^19.0.0", + "typescript": "^5.8.0", + }, + }, + "apps/scaffold-smoke-nuxt": { + "name": "apps-scaffold-smoke-nuxt", + "dependencies": { + "@holo-js/adapter-nuxt": "^0.1.4", + "@holo-js/auth": "^0.1.4", + "@holo-js/cli": "^0.1.4", + "@holo-js/config": "^0.1.4", + "@holo-js/core": "^0.1.4", + "@holo-js/db": "^0.1.4", + "@holo-js/db-sqlite": "^0.1.4", + "@holo-js/security": "^0.1.4", + "@holo-js/session": "^0.1.4", + "esbuild": "^0.25.0", + "nuxt": "latest", + "vue": "^3.5.13", + "vue-router": "^5.0.4", + }, + "devDependencies": { + "@types/node": "^22.0.0", + "typescript": "^5.8.0", + "vite": "^5.4.14", + "vue-tsc": "^2.2.0", + }, + }, + "apps/scaffold-smoke-sveltekit": { + "name": "apps-scaffold-smoke-sveltekit", + "dependencies": { + "@holo-js/adapter-sveltekit": "^0.1.4", + "@holo-js/auth": "^0.1.4", + "@holo-js/cli": "^0.1.4", + "@holo-js/config": "^0.1.4", + "@holo-js/core": "^0.1.4", + "@holo-js/db": "^0.1.4", + "@holo-js/db-sqlite": "^0.1.4", + "@holo-js/security": "^0.1.4", + "@holo-js/session": "^0.1.4", + "@sveltejs/adapter-node": "^5.0.0", + "@sveltejs/kit": "^2.0.0", + "@sveltejs/vite-plugin-svelte": "^4.0.0", + "esbuild": "^0.25.0", + "svelte": "^5.0.0", + "vite": "^5.0.0", + }, + "devDependencies": { + "@types/node": "^22.0.0", + "typescript": "^5.8.0", + }, + }, "apps/svelte_test_app": { "name": "svelte_test_app", "dependencies": { "@holo-js/adapter-sveltekit": "workspace:*", - "@holo-js/auth": "^0.1.3", - "@holo-js/auth-clerk": "^0.1.3", - "@holo-js/auth-social": "^0.1.3", - "@holo-js/auth-social-google": "^0.1.3", - "@holo-js/auth-workos": "^0.1.3", - "@holo-js/authorization": "^0.1.3", - "@holo-js/broadcast": "^0.1.3", - "@holo-js/cache": "^0.1.3", + "@holo-js/auth": "^0.1.4", + "@holo-js/auth-clerk": "^0.1.4", + "@holo-js/auth-social": "^0.1.4", + "@holo-js/auth-social-google": "^0.1.4", + "@holo-js/auth-workos": "^0.1.4", + "@holo-js/authorization": "^0.1.4", + "@holo-js/broadcast": "^0.1.4", + "@holo-js/cache": "^0.1.4", "@holo-js/cli": "workspace:*", "@holo-js/config": "workspace:*", "@holo-js/db": "workspace:*", - "@holo-js/db-mysql": "^0.1.3", - "@holo-js/db-postgres": "^0.1.3", - "@holo-js/db-sqlite": "^0.1.3", - "@holo-js/events": "^0.1.3", + "@holo-js/db-mysql": "^0.1.4", + "@holo-js/db-postgres": "^0.1.4", + "@holo-js/db-sqlite": "^0.1.4", + "@holo-js/events": "^0.1.4", "@holo-js/flux": "workspace:*", "@holo-js/media": "workspace:*", - "@holo-js/queue": "^0.1.3", - "@holo-js/queue-db": "^0.1.3", - "@holo-js/queue-redis": "^0.1.3", - "@holo-js/security": "^0.1.3", - "@holo-js/session": "^0.1.3", - "@holo-js/storage": "^0.1.3", - "@holo-js/storage-s3": "^0.1.3", + "@holo-js/queue": "^0.1.4", + "@holo-js/queue-db": "^0.1.4", + "@holo-js/queue-redis": "^0.1.4", + "@holo-js/security": "^0.1.4", + "@holo-js/session": "^0.1.4", + "@holo-js/storage": "^0.1.4", + "@holo-js/storage-s3": "^0.1.4", "@sveltejs/adapter-node": "^5.0.0", "@sveltejs/kit": "^2.0.0", "@sveltejs/vite-plugin-svelte": "^4.0.0", @@ -152,10 +351,10 @@ }, "packages/adapter-next": { "name": "@holo-js/adapter-next", - "version": "0.1.3", + "version": "0.1.4", "dependencies": { - "@holo-js/config": "^0.1.3", - "@holo-js/core": "^0.1.3", + "@holo-js/config": "^0.1.4", + "@holo-js/core": "^0.1.4", }, "devDependencies": { "@types/node": "^22.10.2", @@ -164,7 +363,7 @@ "vitest": "^2.1.8", }, "peerDependencies": { - "@holo-js/forms": "^0.1.3", + "@holo-js/forms": "^0.1.4", }, "optionalPeers": [ "@holo-js/forms", @@ -172,11 +371,11 @@ }, "packages/adapter-nuxt": { "name": "@holo-js/adapter-nuxt", - "version": "0.1.3", + "version": "0.1.4", "dependencies": { - "@holo-js/config": "^0.1.3", - "@holo-js/core": "^0.1.3", - "@holo-js/db": "^0.1.3", + "@holo-js/config": "^0.1.4", + "@holo-js/core": "^0.1.4", + "@holo-js/db": "^0.1.4", "@nuxt/kit": "^4.0.0", }, "devDependencies": { @@ -188,9 +387,9 @@ "vitest": "^2.1.8", }, "peerDependencies": { - "@holo-js/forms": "^0.1.3", - "@holo-js/storage": "^0.1.3", - "@holo-js/storage-s3": "^0.1.3", + "@holo-js/forms": "^0.1.4", + "@holo-js/storage": "^0.1.4", + "@holo-js/storage-s3": "^0.1.4", }, "optionalPeers": [ "@holo-js/forms", @@ -200,10 +399,10 @@ }, "packages/adapter-sveltekit": { "name": "@holo-js/adapter-sveltekit", - "version": "0.1.3", + "version": "0.1.4", "dependencies": { - "@holo-js/config": "^0.1.3", - "@holo-js/core": "^0.1.3", + "@holo-js/config": "^0.1.4", + "@holo-js/core": "^0.1.4", }, "devDependencies": { "@types/node": "^22.10.2", @@ -212,7 +411,7 @@ "vitest": "^2.1.8", }, "peerDependencies": { - "@holo-js/forms": "^0.1.3", + "@holo-js/forms": "^0.1.4", }, "optionalPeers": [ "@holo-js/forms", @@ -220,9 +419,9 @@ }, "packages/auth": { "name": "@holo-js/auth", - "version": "0.1.3", + "version": "0.1.4", "dependencies": { - "@holo-js/config": "^0.1.3", + "@holo-js/config": "^0.1.4", }, "devDependencies": { "@types/node": "^22.10.2", @@ -231,7 +430,7 @@ "vitest": "^2.1.8", }, "peerDependencies": { - "@holo-js/security": "^0.1.3", + "@holo-js/security": "^0.1.4", }, "optionalPeers": [ "@holo-js/security", @@ -239,7 +438,7 @@ }, "packages/auth-clerk": { "name": "@holo-js/auth-clerk", - "version": "0.1.3", + "version": "0.1.4", "dependencies": { "@holo-js/auth": "workspace:*", "@holo-js/config": "workspace:*", @@ -254,10 +453,10 @@ }, "packages/auth-social": { "name": "@holo-js/auth-social", - "version": "0.1.3", + "version": "0.1.4", "dependencies": { - "@holo-js/auth": "^0.1.3", - "@holo-js/config": "^0.1.3", + "@holo-js/auth": "^0.1.4", + "@holo-js/config": "^0.1.4", }, "devDependencies": { "@types/node": "^22.10.2", @@ -268,7 +467,7 @@ }, "packages/auth-social-apple": { "name": "@holo-js/auth-social-apple", - "version": "0.1.3", + "version": "0.1.4", "dependencies": { "@holo-js/auth-social": "workspace:*", "@holo-js/config": "workspace:*", @@ -282,7 +481,7 @@ }, "packages/auth-social-discord": { "name": "@holo-js/auth-social-discord", - "version": "0.1.3", + "version": "0.1.4", "dependencies": { "@holo-js/auth-social": "workspace:*", "@holo-js/config": "workspace:*", @@ -296,7 +495,7 @@ }, "packages/auth-social-facebook": { "name": "@holo-js/auth-social-facebook", - "version": "0.1.3", + "version": "0.1.4", "dependencies": { "@holo-js/auth-social": "workspace:*", "@holo-js/config": "workspace:*", @@ -310,7 +509,7 @@ }, "packages/auth-social-github": { "name": "@holo-js/auth-social-github", - "version": "0.1.3", + "version": "0.1.4", "dependencies": { "@holo-js/auth-social": "workspace:*", "@holo-js/config": "workspace:*", @@ -324,7 +523,7 @@ }, "packages/auth-social-google": { "name": "@holo-js/auth-social-google", - "version": "0.1.3", + "version": "0.1.4", "dependencies": { "@holo-js/auth-social": "workspace:*", "@holo-js/config": "workspace:*", @@ -338,7 +537,7 @@ }, "packages/auth-social-linkedin": { "name": "@holo-js/auth-social-linkedin", - "version": "0.1.3", + "version": "0.1.4", "dependencies": { "@holo-js/auth-social": "workspace:*", "@holo-js/config": "workspace:*", @@ -352,7 +551,7 @@ }, "packages/auth-workos": { "name": "@holo-js/auth-workos", - "version": "0.1.3", + "version": "0.1.4", "dependencies": { "@holo-js/auth": "workspace:*", "@holo-js/config": "workspace:*", @@ -367,7 +566,7 @@ }, "packages/authorization": { "name": "@holo-js/authorization", - "version": "0.1.3", + "version": "0.1.4", "devDependencies": { "@types/node": "^22.10.2", "tsup": "^8.3.5", @@ -377,10 +576,10 @@ }, "packages/broadcast": { "name": "@holo-js/broadcast", - "version": "0.1.3", + "version": "0.1.4", "dependencies": { - "@holo-js/config": "^0.1.3", - "@holo-js/validation": "^0.1.3", + "@holo-js/config": "^0.1.4", + "@holo-js/validation": "^0.1.4", "ws": "^8.18.3", }, "devDependencies": { @@ -400,9 +599,9 @@ }, "packages/cache": { "name": "@holo-js/cache", - "version": "0.1.3", + "version": "0.1.4", "dependencies": { - "@holo-js/config": "^0.1.3", + "@holo-js/config": "^0.1.4", }, "devDependencies": { "@types/node": "^22.10.2", @@ -413,7 +612,7 @@ }, "packages/cache-db": { "name": "@holo-js/cache-db", - "version": "0.1.3", + "version": "0.1.4", "dependencies": { "tslib": "^2.8.1", }, @@ -426,13 +625,13 @@ "vitest": "catalog:", }, "peerDependencies": { - "@holo-js/cache": "^0.1.3", - "@holo-js/db": "^0.1.3", + "@holo-js/cache": "^0.1.4", + "@holo-js/db": "^0.1.4", }, }, "packages/cache-redis": { "name": "@holo-js/cache-redis", - "version": "0.1.3", + "version": "0.1.4", "dependencies": { "ioredis": "catalog:", "tslib": "^2.8.1", @@ -445,26 +644,26 @@ "vitest": "^2.1.8", }, "peerDependencies": { - "@holo-js/cache": "^0.1.3", + "@holo-js/cache": "^0.1.4", }, }, "packages/cli": { "name": "@holo-js/cli", - "version": "0.1.3", + "version": "0.1.4", "bin": { "holo": "./dist/bin/holo.mjs", "holo-js": "./dist/bin/holo.mjs", }, "dependencies": { - "@holo-js/config": "^0.1.3", - "@holo-js/core": "^0.1.3", - "@holo-js/db": "^0.1.3", + "@holo-js/config": "^0.1.4", + "@holo-js/core": "^0.1.4", + "@holo-js/db": "^0.1.4", "esbuild": "^0.27.4", }, "devDependencies": { - "@holo-js/events": "^0.1.3", - "@holo-js/queue": "^0.1.3", - "@holo-js/queue-db": "^0.1.3", + "@holo-js/events": "^0.1.4", + "@holo-js/queue": "^0.1.4", + "@holo-js/queue-db": "^0.1.4", "@types/node": "^22.10.2", "tsup": "^8.3.5", "typescript": "^5.7.2", @@ -473,9 +672,9 @@ }, "packages/config": { "name": "@holo-js/config", - "version": "0.1.3", + "version": "0.1.4", "dependencies": { - "@holo-js/db": "^0.1.3", + "@holo-js/db": "^0.1.4", }, "devDependencies": { "tsup": "^8.3.5", @@ -485,38 +684,38 @@ }, "packages/core": { "name": "@holo-js/core", - "version": "0.1.3", + "version": "0.1.4", "dependencies": { - "@holo-js/config": "^0.1.3", - "@holo-js/db": "^0.1.3", + "@holo-js/config": "^0.1.4", + "@holo-js/db": "^0.1.4", "esbuild": "^0.27.4", }, "devDependencies": { - "@holo-js/auth": "^0.1.3", - "@holo-js/authorization": "^0.1.3", - "@holo-js/events": "^0.1.3", - "@holo-js/mail": "^0.1.3", - "@holo-js/notifications": "^0.1.3", - "@holo-js/queue-db": "^0.1.3", - "@holo-js/session": "^0.1.3", - "@holo-js/storage": "^0.1.3", + "@holo-js/auth": "^0.1.4", + "@holo-js/authorization": "^0.1.4", + "@holo-js/events": "^0.1.4", + "@holo-js/mail": "^0.1.4", + "@holo-js/notifications": "^0.1.4", + "@holo-js/queue-db": "^0.1.4", + "@holo-js/session": "^0.1.4", + "@holo-js/storage": "^0.1.4", "@types/node": "^22.10.2", "tsup": "^8.3.5", "typescript": "^5.7.2", "vitest": "^2.1.8", }, "peerDependencies": { - "@holo-js/auth": "^0.1.3", - "@holo-js/auth-clerk": "^0.1.3", - "@holo-js/auth-social": "^0.1.3", - "@holo-js/auth-workos": "^0.1.3", - "@holo-js/authorization": "^0.1.3", - "@holo-js/mail": "^0.1.3", - "@holo-js/notifications": "^0.1.3", - "@holo-js/queue": "^0.1.3", - "@holo-js/security": "^0.1.3", - "@holo-js/session": "^0.1.3", - "@holo-js/storage": "^0.1.3", + "@holo-js/auth": "^0.1.4", + "@holo-js/auth-clerk": "^0.1.4", + "@holo-js/auth-social": "^0.1.4", + "@holo-js/auth-workos": "^0.1.4", + "@holo-js/authorization": "^0.1.4", + "@holo-js/mail": "^0.1.4", + "@holo-js/notifications": "^0.1.4", + "@holo-js/queue": "^0.1.4", + "@holo-js/security": "^0.1.4", + "@holo-js/session": "^0.1.4", + "@holo-js/storage": "^0.1.4", }, "optionalPeers": [ "@holo-js/auth", @@ -534,7 +733,7 @@ }, "packages/create-holo-js": { "name": "create-holo-js", - "version": "0.1.3", + "version": "0.1.4", "bin": { "create-holo-js": "./dist/bin/create-holo-js.mjs", }, @@ -549,7 +748,7 @@ }, "packages/db": { "name": "@holo-js/db", - "version": "0.1.3", + "version": "0.1.4", "dependencies": { "ulid": "^3.0.1", "uuid": "^12.0.0", @@ -564,9 +763,9 @@ "typescript": "^5.7.2", }, "peerDependencies": { - "@holo-js/db-mysql": "^0.1.3", - "@holo-js/db-postgres": "^0.1.3", - "@holo-js/db-sqlite": "^0.1.3", + "@holo-js/db-mysql": "^0.1.4", + "@holo-js/db-postgres": "^0.1.4", + "@holo-js/db-sqlite": "^0.1.4", }, "optionalPeers": [ "@holo-js/db-mysql", @@ -576,7 +775,7 @@ }, "packages/db-mysql": { "name": "@holo-js/db-mysql", - "version": "0.1.3", + "version": "0.1.4", "dependencies": { "mysql2": "^3.17.1", }, @@ -587,12 +786,12 @@ "vitest": "^2.1.8", }, "peerDependencies": { - "@holo-js/db": "^0.1.3", + "@holo-js/db": "^0.1.4", }, }, "packages/db-postgres": { "name": "@holo-js/db-postgres", - "version": "0.1.3", + "version": "0.1.4", "dependencies": { "pg": "^8.13.0", }, @@ -604,12 +803,12 @@ "vitest": "^2.1.8", }, "peerDependencies": { - "@holo-js/db": "^0.1.3", + "@holo-js/db": "^0.1.4", }, }, "packages/db-sqlite": { "name": "@holo-js/db-sqlite", - "version": "0.1.3", + "version": "0.1.4", "dependencies": { "better-sqlite3": "^11.7.0", }, @@ -621,14 +820,14 @@ "vitest": "^2.1.8", }, "peerDependencies": { - "@holo-js/db": "^0.1.3", + "@holo-js/db": "^0.1.4", }, }, "packages/events": { "name": "@holo-js/events", - "version": "0.1.3", + "version": "0.1.4", "dependencies": { - "@holo-js/db": "^0.1.3", + "@holo-js/db": "^0.1.4", }, "devDependencies": { "@types/node": "^22.10.2", @@ -637,7 +836,7 @@ "vitest": "^2.1.8", }, "peerDependencies": { - "@holo-js/queue": "^0.1.3", + "@holo-js/queue": "^0.1.4", }, "optionalPeers": [ "@holo-js/queue", @@ -645,9 +844,9 @@ }, "packages/flux": { "name": "@holo-js/flux", - "version": "0.1.3", + "version": "0.1.4", "dependencies": { - "@holo-js/broadcast": "^0.1.3", + "@holo-js/broadcast": "^0.1.4", }, "devDependencies": { "@types/node": "^22.10.2", @@ -658,10 +857,10 @@ }, "packages/flux-react": { "name": "@holo-js/flux-react", - "version": "0.1.3", + "version": "0.1.4", "dependencies": { - "@holo-js/broadcast": "^0.1.2", - "@holo-js/flux": "^0.1.2", + "@holo-js/broadcast": "^0.1.4", + "@holo-js/flux": "^0.1.4", }, "devDependencies": { "@types/node": "^22.10.2", @@ -679,10 +878,10 @@ }, "packages/flux-svelte": { "name": "@holo-js/flux-svelte", - "version": "0.1.3", + "version": "0.1.4", "dependencies": { - "@holo-js/broadcast": "^0.1.2", - "@holo-js/flux": "^0.1.2", + "@holo-js/broadcast": "^0.1.4", + "@holo-js/flux": "^0.1.4", }, "devDependencies": { "@types/node": "^22.10.2", @@ -697,10 +896,10 @@ }, "packages/flux-vue": { "name": "@holo-js/flux-vue", - "version": "0.1.3", + "version": "0.1.4", "dependencies": { - "@holo-js/broadcast": "^0.1.2", - "@holo-js/flux": "^0.1.2", + "@holo-js/broadcast": "^0.1.4", + "@holo-js/flux": "^0.1.4", }, "devDependencies": { "@types/node": "^22.10.2", @@ -715,9 +914,9 @@ }, "packages/forms": { "name": "@holo-js/forms", - "version": "0.1.3", + "version": "0.1.4", "dependencies": { - "@holo-js/validation": "^0.1.2", + "@holo-js/validation": "^0.1.4", }, "devDependencies": { "@types/node": "^22.10.2", @@ -726,7 +925,7 @@ "vitest": "^2.1.8", }, "peerDependencies": { - "@holo-js/security": "^0.1.2", + "@holo-js/security": "^0.1.4", }, "optionalPeers": [ "@holo-js/security", @@ -734,9 +933,9 @@ }, "packages/mail": { "name": "@holo-js/mail", - "version": "0.1.3", + "version": "0.1.4", "dependencies": { - "@holo-js/config": "^0.1.3", + "@holo-js/config": "^0.1.4", "nodemailer": "^6.10.1", }, "devDependencies": { @@ -746,8 +945,8 @@ "vitest": "^2.1.8", }, "peerDependencies": { - "@holo-js/queue": "^0.1.3", - "@holo-js/storage": "^0.1.3", + "@holo-js/queue": "^0.1.4", + "@holo-js/storage": "^0.1.4", }, "optionalPeers": [ "@holo-js/queue", @@ -756,11 +955,11 @@ }, "packages/media": { "name": "@holo-js/media", - "version": "0.1.3", + "version": "0.1.4", "dependencies": { - "@holo-js/db": "^0.1.3", - "@holo-js/queue": "^0.1.3", - "@holo-js/storage": "^0.1.3", + "@holo-js/db": "^0.1.4", + "@holo-js/queue": "^0.1.4", + "@holo-js/storage": "^0.1.4", "sharp": "^0.34.4", }, "devDependencies": { @@ -771,9 +970,9 @@ }, "packages/notifications": { "name": "@holo-js/notifications", - "version": "0.1.3", + "version": "0.1.4", "dependencies": { - "@holo-js/config": "^0.1.3", + "@holo-js/config": "^0.1.4", }, "devDependencies": { "@types/node": "^22.10.2", @@ -782,7 +981,7 @@ "vitest": "^2.1.8", }, "peerDependencies": { - "@holo-js/queue": "^0.1.3", + "@holo-js/queue": "^0.1.4", }, "optionalPeers": [ "@holo-js/queue", @@ -790,7 +989,7 @@ }, "packages/queue": { "name": "@holo-js/queue", - "version": "0.1.3", + "version": "0.1.4", "devDependencies": { "@holo-js/queue-redis": "workspace:*", "@types/node": "^22.10.2", @@ -799,7 +998,7 @@ "vitest": "^2.1.8", }, "peerDependencies": { - "@holo-js/queue-redis": "^0.1.3", + "@holo-js/queue-redis": "^0.1.4", }, "optionalPeers": [ "@holo-js/queue-redis", @@ -807,10 +1006,10 @@ }, "packages/queue-db": { "name": "@holo-js/queue-db", - "version": "0.1.3", + "version": "0.1.4", "dependencies": { - "@holo-js/db": "^0.1.3", - "@holo-js/queue": "^0.1.3", + "@holo-js/db": "^0.1.4", + "@holo-js/queue": "^0.1.4", }, "devDependencies": { "@types/node": "^22.10.2", @@ -821,7 +1020,7 @@ }, "packages/queue-redis": { "name": "@holo-js/queue-redis", - "version": "0.1.3", + "version": "0.1.4", "dependencies": { "bullmq": "^5.71.0", "ioredis": "catalog:", @@ -835,14 +1034,14 @@ "vitest": "^2.1.8", }, "peerDependencies": { - "@holo-js/queue": "^0.1.3", + "@holo-js/queue": "^0.1.4", }, }, "packages/security": { "name": "@holo-js/security", - "version": "0.1.3", + "version": "0.1.4", "dependencies": { - "@holo-js/config": "^0.1.3", + "@holo-js/config": "^0.1.4", }, "devDependencies": { "@types/node": "^22.10.2", @@ -860,9 +1059,9 @@ }, "packages/session": { "name": "@holo-js/session", - "version": "0.1.3", + "version": "0.1.4", "dependencies": { - "@holo-js/config": "^0.1.3", + "@holo-js/config": "^0.1.4", }, "devDependencies": { "@types/node": "^22.10.2", @@ -880,9 +1079,9 @@ }, "packages/storage": { "name": "@holo-js/storage", - "version": "0.1.3", + "version": "0.1.4", "dependencies": { - "@holo-js/config": "^0.1.3", + "@holo-js/config": "^0.1.4", }, "devDependencies": { "@holo-js/storage-s3": "workspace:*", @@ -892,7 +1091,7 @@ "vitest": "^2.1.8", }, "peerDependencies": { - "@holo-js/storage-s3": "^0.1.3", + "@holo-js/storage-s3": "^0.1.4", }, "optionalPeers": [ "@holo-js/storage-s3", @@ -900,7 +1099,7 @@ }, "packages/storage-s3": { "name": "@holo-js/storage-s3", - "version": "0.1.3", + "version": "0.1.4", "devDependencies": { "@types/node": "^22.10.2", "tsup": "^8.3.5", @@ -910,7 +1109,7 @@ }, "packages/validation": { "name": "@holo-js/validation", - "version": "0.1.3", + "version": "0.1.4", "dependencies": { "valibot": "^1.1.0", }, @@ -957,8 +1156,11 @@ "typescript-eslint": "^8.30.1", "ulid": "^3.0.1", "uuid": "^12.0.0", + "vite": "^5.4.14", "vitepress": "^1.6.3", "vitest": "^2.1.8", + "vue": "^3.5.13", + "vue-router": "^5.0.4", "vue-tsc": "^2.2.0", }, "packages": { @@ -1802,7 +2004,7 @@ "@vue/compiler-vue2": ["@vue/compiler-vue2@2.7.16", "", { "dependencies": { "de-indent": "^1.0.2", "he": "^1.2.0" } }, "sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A=="], - "@vue/devtools-api": ["@vue/devtools-api@7.7.9", "", { "dependencies": { "@vue/devtools-kit": "^7.7.9" } }, "sha512-kIE8wvwlcZ6TJTbNeU2HQNtaxLx3a84aotTITUuL/4bzfPxzajGBOoqjMhwZJ8L9qFYDU/lAYMEEm11dnZOD6g=="], + "@vue/devtools-api": ["@vue/devtools-api@8.1.1", "", { "dependencies": { "@vue/devtools-kit": "^8.1.1" } }, "sha512-bsDMJ07b3GN1puVwJb/fyFnj/U2imyswK5UQVLZwVl7O05jDrt6BHxeG5XffmOOdasOj/bOmIjxJvGPxU7pcqw=="], "@vue/devtools-core": ["@vue/devtools-core@8.1.1", "", { "dependencies": { "@vue/devtools-kit": "^8.1.1", "@vue/devtools-shared": "^8.1.1" }, "peerDependencies": { "vue": "^3.0.0" } }, "sha512-bCCsSABp1/ot4j8xJEycM6Mtt2wbuucfByr6hMgjbYhrtlscOJypZKvy8f1FyWLYrLTchB5Qz216Lm92wfbq0A=="], @@ -1860,6 +2062,12 @@ "anymatch": ["anymatch@3.1.3", "", { "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw=="], + "apps-scaffold-smoke-next": ["apps-scaffold-smoke-next@workspace:apps/scaffold-smoke-next"], + + "apps-scaffold-smoke-nuxt": ["apps-scaffold-smoke-nuxt@workspace:apps/scaffold-smoke-nuxt"], + + "apps-scaffold-smoke-sveltekit": ["apps-scaffold-smoke-sveltekit@workspace:apps/scaffold-smoke-sveltekit"], + "archiver": ["archiver@7.0.1", "", { "dependencies": { "archiver-utils": "^5.0.2", "async": "^3.2.4", "buffer-crc32": "^1.0.0", "readable-stream": "^4.0.0", "readdir-glob": "^1.1.2", "tar-stream": "^3.0.0", "zip-stream": "^6.0.1" } }, "sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ=="], "archiver-utils": ["archiver-utils@5.0.2", "", { "dependencies": { "glob": "^10.0.0", "graceful-fs": "^4.2.0", "is-stream": "^2.0.1", "lazystream": "^1.0.0", "lodash": "^4.17.15", "normalize-path": "^3.0.0", "readable-stream": "^4.0.0" } }, "sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA=="], @@ -1916,6 +2124,12 @@ "bl": ["bl@4.1.0", "", { "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", "readable-stream": "^3.4.0" } }, "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w=="], + "blog-next": ["blog-next@workspace:apps/blog-next"], + + "blog-nuxt": ["blog-nuxt@workspace:apps/blog-nuxt"], + + "blog-sveltekit": ["blog-sveltekit@workspace:apps/blog-sveltekit"], + "boolbase": ["boolbase@1.0.0", "", {}, "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="], "brace-expansion": ["brace-expansion@1.1.13", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w=="], @@ -3280,8 +3494,6 @@ "@vue/compiler-sfc/estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="], - "@vue/devtools-api/@vue/devtools-kit": ["@vue/devtools-kit@7.7.9", "", { "dependencies": { "@vue/devtools-shared": "^7.7.9", "birpc": "^2.3.0", "hookable": "^5.5.3", "mitt": "^3.0.1", "perfect-debounce": "^1.0.0", "speakingurl": "^14.0.1", "superjson": "^2.2.2" } }, "sha512-PyQ6odHSgiDVd4hnTP+aDk2X4gl2HmLDfiyEnn3/oV+ckFDuswRs4IbBT7vacMuGdwY/XemxBoh302ctbsptuA=="], - "@vue/devtools-kit/birpc": ["birpc@2.9.0", "", {}, "sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw=="], "@vue/devtools-kit/hookable": ["hookable@5.5.3", "", {}, "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ=="], @@ -3290,6 +3502,16 @@ "anymatch/picomatch": ["picomatch@2.3.2", "", {}, "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA=="], + "apps-scaffold-smoke-next/@types/react": ["@types/react@19.2.14", "", { "dependencies": { "csstype": "^3.2.2" } }, "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w=="], + + "apps-scaffold-smoke-next/esbuild": ["esbuild@0.25.12", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.12", "@esbuild/android-arm": "0.25.12", "@esbuild/android-arm64": "0.25.12", "@esbuild/android-x64": "0.25.12", "@esbuild/darwin-arm64": "0.25.12", "@esbuild/darwin-x64": "0.25.12", "@esbuild/freebsd-arm64": "0.25.12", "@esbuild/freebsd-x64": "0.25.12", "@esbuild/linux-arm": "0.25.12", "@esbuild/linux-arm64": "0.25.12", "@esbuild/linux-ia32": "0.25.12", "@esbuild/linux-loong64": "0.25.12", "@esbuild/linux-mips64el": "0.25.12", "@esbuild/linux-ppc64": "0.25.12", "@esbuild/linux-riscv64": "0.25.12", "@esbuild/linux-s390x": "0.25.12", "@esbuild/linux-x64": "0.25.12", "@esbuild/netbsd-arm64": "0.25.12", "@esbuild/netbsd-x64": "0.25.12", "@esbuild/openbsd-arm64": "0.25.12", "@esbuild/openbsd-x64": "0.25.12", "@esbuild/openharmony-arm64": "0.25.12", "@esbuild/sunos-x64": "0.25.12", "@esbuild/win32-arm64": "0.25.12", "@esbuild/win32-ia32": "0.25.12", "@esbuild/win32-x64": "0.25.12" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg=="], + + "apps-scaffold-smoke-next/react": ["react@19.2.4", "", {}, "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ=="], + + "apps-scaffold-smoke-nuxt/esbuild": ["esbuild@0.25.12", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.12", "@esbuild/android-arm": "0.25.12", "@esbuild/android-arm64": "0.25.12", "@esbuild/android-x64": "0.25.12", "@esbuild/darwin-arm64": "0.25.12", "@esbuild/darwin-x64": "0.25.12", "@esbuild/freebsd-arm64": "0.25.12", "@esbuild/freebsd-x64": "0.25.12", "@esbuild/linux-arm": "0.25.12", "@esbuild/linux-arm64": "0.25.12", "@esbuild/linux-ia32": "0.25.12", "@esbuild/linux-loong64": "0.25.12", "@esbuild/linux-mips64el": "0.25.12", "@esbuild/linux-ppc64": "0.25.12", "@esbuild/linux-riscv64": "0.25.12", "@esbuild/linux-s390x": "0.25.12", "@esbuild/linux-x64": "0.25.12", "@esbuild/netbsd-arm64": "0.25.12", "@esbuild/netbsd-x64": "0.25.12", "@esbuild/openbsd-arm64": "0.25.12", "@esbuild/openbsd-x64": "0.25.12", "@esbuild/openharmony-arm64": "0.25.12", "@esbuild/sunos-x64": "0.25.12", "@esbuild/win32-arm64": "0.25.12", "@esbuild/win32-ia32": "0.25.12", "@esbuild/win32-x64": "0.25.12" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg=="], + + "apps-scaffold-smoke-sveltekit/esbuild": ["esbuild@0.25.12", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.12", "@esbuild/android-arm": "0.25.12", "@esbuild/android-arm64": "0.25.12", "@esbuild/android-x64": "0.25.12", "@esbuild/darwin-arm64": "0.25.12", "@esbuild/darwin-x64": "0.25.12", "@esbuild/freebsd-arm64": "0.25.12", "@esbuild/freebsd-x64": "0.25.12", "@esbuild/linux-arm": "0.25.12", "@esbuild/linux-arm64": "0.25.12", "@esbuild/linux-ia32": "0.25.12", "@esbuild/linux-loong64": "0.25.12", "@esbuild/linux-mips64el": "0.25.12", "@esbuild/linux-ppc64": "0.25.12", "@esbuild/linux-riscv64": "0.25.12", "@esbuild/linux-s390x": "0.25.12", "@esbuild/linux-x64": "0.25.12", "@esbuild/netbsd-arm64": "0.25.12", "@esbuild/netbsd-x64": "0.25.12", "@esbuild/openbsd-arm64": "0.25.12", "@esbuild/openbsd-x64": "0.25.12", "@esbuild/openharmony-arm64": "0.25.12", "@esbuild/sunos-x64": "0.25.12", "@esbuild/win32-arm64": "0.25.12", "@esbuild/win32-ia32": "0.25.12", "@esbuild/win32-x64": "0.25.12" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg=="], + "archiver/readable-stream": ["readable-stream@4.7.0", "", { "dependencies": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", "events": "^3.3.0", "process": "^0.11.10", "string_decoder": "^1.3.0" } }, "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg=="], "archiver/tar-stream": ["tar-stream@3.1.8", "", { "dependencies": { "b4a": "^1.6.4", "bare-fs": "^4.5.5", "fast-fifo": "^1.2.0", "streamx": "^2.15.0" } }, "sha512-U6QpVRyCGHva435KoNWy9PRoi2IFYCgtEhq9nmrPPpbRacPs9IH4aJ3gbrFC8dPcXvdSZ4XXfXT5Fshbp2MtlQ=="], @@ -3300,6 +3522,16 @@ "ast-kit/pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="], + "blog-next/@types/react": ["@types/react@19.2.14", "", { "dependencies": { "csstype": "^3.2.2" } }, "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w=="], + + "blog-next/esbuild": ["esbuild@0.25.12", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.12", "@esbuild/android-arm": "0.25.12", "@esbuild/android-arm64": "0.25.12", "@esbuild/android-x64": "0.25.12", "@esbuild/darwin-arm64": "0.25.12", "@esbuild/darwin-x64": "0.25.12", "@esbuild/freebsd-arm64": "0.25.12", "@esbuild/freebsd-x64": "0.25.12", "@esbuild/linux-arm": "0.25.12", "@esbuild/linux-arm64": "0.25.12", "@esbuild/linux-ia32": "0.25.12", "@esbuild/linux-loong64": "0.25.12", "@esbuild/linux-mips64el": "0.25.12", "@esbuild/linux-ppc64": "0.25.12", "@esbuild/linux-riscv64": "0.25.12", "@esbuild/linux-s390x": "0.25.12", "@esbuild/linux-x64": "0.25.12", "@esbuild/netbsd-arm64": "0.25.12", "@esbuild/netbsd-x64": "0.25.12", "@esbuild/openbsd-arm64": "0.25.12", "@esbuild/openbsd-x64": "0.25.12", "@esbuild/openharmony-arm64": "0.25.12", "@esbuild/sunos-x64": "0.25.12", "@esbuild/win32-arm64": "0.25.12", "@esbuild/win32-ia32": "0.25.12", "@esbuild/win32-x64": "0.25.12" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg=="], + + "blog-next/react": ["react@19.2.4", "", {}, "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ=="], + + "blog-nuxt/esbuild": ["esbuild@0.25.12", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.12", "@esbuild/android-arm": "0.25.12", "@esbuild/android-arm64": "0.25.12", "@esbuild/android-x64": "0.25.12", "@esbuild/darwin-arm64": "0.25.12", "@esbuild/darwin-x64": "0.25.12", "@esbuild/freebsd-arm64": "0.25.12", "@esbuild/freebsd-x64": "0.25.12", "@esbuild/linux-arm": "0.25.12", "@esbuild/linux-arm64": "0.25.12", "@esbuild/linux-ia32": "0.25.12", "@esbuild/linux-loong64": "0.25.12", "@esbuild/linux-mips64el": "0.25.12", "@esbuild/linux-ppc64": "0.25.12", "@esbuild/linux-riscv64": "0.25.12", "@esbuild/linux-s390x": "0.25.12", "@esbuild/linux-x64": "0.25.12", "@esbuild/netbsd-arm64": "0.25.12", "@esbuild/netbsd-x64": "0.25.12", "@esbuild/openbsd-arm64": "0.25.12", "@esbuild/openbsd-x64": "0.25.12", "@esbuild/openharmony-arm64": "0.25.12", "@esbuild/sunos-x64": "0.25.12", "@esbuild/win32-arm64": "0.25.12", "@esbuild/win32-ia32": "0.25.12", "@esbuild/win32-x64": "0.25.12" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg=="], + + "blog-sveltekit/esbuild": ["esbuild@0.25.12", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.12", "@esbuild/android-arm": "0.25.12", "@esbuild/android-arm64": "0.25.12", "@esbuild/android-x64": "0.25.12", "@esbuild/darwin-arm64": "0.25.12", "@esbuild/darwin-x64": "0.25.12", "@esbuild/freebsd-arm64": "0.25.12", "@esbuild/freebsd-x64": "0.25.12", "@esbuild/linux-arm": "0.25.12", "@esbuild/linux-arm64": "0.25.12", "@esbuild/linux-ia32": "0.25.12", "@esbuild/linux-loong64": "0.25.12", "@esbuild/linux-mips64el": "0.25.12", "@esbuild/linux-ppc64": "0.25.12", "@esbuild/linux-riscv64": "0.25.12", "@esbuild/linux-s390x": "0.25.12", "@esbuild/linux-x64": "0.25.12", "@esbuild/netbsd-arm64": "0.25.12", "@esbuild/netbsd-x64": "0.25.12", "@esbuild/openbsd-arm64": "0.25.12", "@esbuild/openbsd-x64": "0.25.12", "@esbuild/openharmony-arm64": "0.25.12", "@esbuild/sunos-x64": "0.25.12", "@esbuild/win32-arm64": "0.25.12", "@esbuild/win32-ia32": "0.25.12", "@esbuild/win32-x64": "0.25.12" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg=="], + "bullmq/uuid": ["uuid@11.1.0", "", { "bin": { "uuid": "dist/esm/bin/uuid" } }, "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A=="], "c12/chokidar": ["chokidar@5.0.0", "", { "dependencies": { "readdirp": "^5.0.0" } }, "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw=="], @@ -3466,7 +3698,7 @@ "vite-plugin-vue-tracer/vite": ["vite@7.3.1", "", { "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA=="], - "vue-router/@vue/devtools-api": ["@vue/devtools-api@8.1.1", "", { "dependencies": { "@vue/devtools-kit": "^8.1.1" } }, "sha512-bsDMJ07b3GN1puVwJb/fyFnj/U2imyswK5UQVLZwVl7O05jDrt6BHxeG5XffmOOdasOj/bOmIjxJvGPxU7pcqw=="], + "vitepress/@vue/devtools-api": ["@vue/devtools-api@7.7.9", "", { "dependencies": { "@vue/devtools-kit": "^7.7.9" } }, "sha512-kIE8wvwlcZ6TJTbNeU2HQNtaxLx3a84aotTITUuL/4bzfPxzajGBOoqjMhwZJ8L9qFYDU/lAYMEEm11dnZOD6g=="], "vue-router/chokidar": ["chokidar@5.0.0", "", { "dependencies": { "readdirp": "^5.0.0" } }, "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw=="], @@ -3500,20 +3732,324 @@ "@vercel/nft/glob/path-scurry": ["path-scurry@2.0.2", "", { "dependencies": { "lru-cache": "^11.0.0", "minipass": "^7.1.2" } }, "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg=="], - "@vue/devtools-api/@vue/devtools-kit/@vue/devtools-shared": ["@vue/devtools-shared@7.7.9", "", { "dependencies": { "rfdc": "^1.4.1" } }, "sha512-iWAb0v2WYf0QWmxCGy0seZNDPdO3Sp5+u78ORnyeonS6MT4PC7VPrryX2BpMJrwlDeaZ6BD4vP4XKjK0SZqaeA=="], + "@vue/language-core/minimatch/brace-expansion": ["brace-expansion@2.0.3", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA=="], - "@vue/devtools-api/@vue/devtools-kit/birpc": ["birpc@2.9.0", "", {}, "sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw=="], + "apps-scaffold-smoke-next/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.12", "", { "os": "aix", "cpu": "ppc64" }, "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA=="], - "@vue/devtools-api/@vue/devtools-kit/hookable": ["hookable@5.5.3", "", {}, "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ=="], + "apps-scaffold-smoke-next/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.25.12", "", { "os": "android", "cpu": "arm" }, "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg=="], - "@vue/devtools-api/@vue/devtools-kit/perfect-debounce": ["perfect-debounce@1.0.0", "", {}, "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA=="], + "apps-scaffold-smoke-next/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.12", "", { "os": "android", "cpu": "arm64" }, "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg=="], - "@vue/language-core/minimatch/brace-expansion": ["brace-expansion@2.0.3", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA=="], + "apps-scaffold-smoke-next/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.25.12", "", { "os": "android", "cpu": "x64" }, "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg=="], + + "apps-scaffold-smoke-next/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.12", "", { "os": "darwin", "cpu": "arm64" }, "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg=="], + + "apps-scaffold-smoke-next/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.12", "", { "os": "darwin", "cpu": "x64" }, "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA=="], + + "apps-scaffold-smoke-next/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.12", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg=="], + + "apps-scaffold-smoke-next/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.12", "", { "os": "freebsd", "cpu": "x64" }, "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ=="], + + "apps-scaffold-smoke-next/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.12", "", { "os": "linux", "cpu": "arm" }, "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw=="], + + "apps-scaffold-smoke-next/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.12", "", { "os": "linux", "cpu": "arm64" }, "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ=="], + + "apps-scaffold-smoke-next/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.12", "", { "os": "linux", "cpu": "ia32" }, "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA=="], + + "apps-scaffold-smoke-next/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng=="], + + "apps-scaffold-smoke-next/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw=="], + + "apps-scaffold-smoke-next/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.12", "", { "os": "linux", "cpu": "ppc64" }, "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA=="], + + "apps-scaffold-smoke-next/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w=="], + + "apps-scaffold-smoke-next/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.12", "", { "os": "linux", "cpu": "s390x" }, "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg=="], + + "apps-scaffold-smoke-next/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.12", "", { "os": "linux", "cpu": "x64" }, "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw=="], + + "apps-scaffold-smoke-next/esbuild/@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.12", "", { "os": "none", "cpu": "arm64" }, "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg=="], + + "apps-scaffold-smoke-next/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.12", "", { "os": "none", "cpu": "x64" }, "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ=="], + + "apps-scaffold-smoke-next/esbuild/@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.12", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A=="], + + "apps-scaffold-smoke-next/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.12", "", { "os": "openbsd", "cpu": "x64" }, "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw=="], + + "apps-scaffold-smoke-next/esbuild/@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.25.12", "", { "os": "none", "cpu": "arm64" }, "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg=="], + + "apps-scaffold-smoke-next/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.12", "", { "os": "sunos", "cpu": "x64" }, "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w=="], + + "apps-scaffold-smoke-next/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.12", "", { "os": "win32", "cpu": "arm64" }, "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg=="], + + "apps-scaffold-smoke-next/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.12", "", { "os": "win32", "cpu": "ia32" }, "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ=="], + + "apps-scaffold-smoke-next/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.12", "", { "os": "win32", "cpu": "x64" }, "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA=="], + + "apps-scaffold-smoke-nuxt/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.12", "", { "os": "aix", "cpu": "ppc64" }, "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA=="], + + "apps-scaffold-smoke-nuxt/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.25.12", "", { "os": "android", "cpu": "arm" }, "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg=="], + + "apps-scaffold-smoke-nuxt/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.12", "", { "os": "android", "cpu": "arm64" }, "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg=="], + + "apps-scaffold-smoke-nuxt/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.25.12", "", { "os": "android", "cpu": "x64" }, "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg=="], + + "apps-scaffold-smoke-nuxt/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.12", "", { "os": "darwin", "cpu": "arm64" }, "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg=="], + + "apps-scaffold-smoke-nuxt/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.12", "", { "os": "darwin", "cpu": "x64" }, "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA=="], + + "apps-scaffold-smoke-nuxt/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.12", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg=="], + + "apps-scaffold-smoke-nuxt/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.12", "", { "os": "freebsd", "cpu": "x64" }, "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ=="], + + "apps-scaffold-smoke-nuxt/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.12", "", { "os": "linux", "cpu": "arm" }, "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw=="], + + "apps-scaffold-smoke-nuxt/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.12", "", { "os": "linux", "cpu": "arm64" }, "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ=="], + + "apps-scaffold-smoke-nuxt/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.12", "", { "os": "linux", "cpu": "ia32" }, "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA=="], + + "apps-scaffold-smoke-nuxt/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng=="], + + "apps-scaffold-smoke-nuxt/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw=="], + + "apps-scaffold-smoke-nuxt/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.12", "", { "os": "linux", "cpu": "ppc64" }, "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA=="], + + "apps-scaffold-smoke-nuxt/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w=="], + + "apps-scaffold-smoke-nuxt/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.12", "", { "os": "linux", "cpu": "s390x" }, "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg=="], + + "apps-scaffold-smoke-nuxt/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.12", "", { "os": "linux", "cpu": "x64" }, "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw=="], + + "apps-scaffold-smoke-nuxt/esbuild/@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.12", "", { "os": "none", "cpu": "arm64" }, "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg=="], + + "apps-scaffold-smoke-nuxt/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.12", "", { "os": "none", "cpu": "x64" }, "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ=="], + + "apps-scaffold-smoke-nuxt/esbuild/@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.12", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A=="], + + "apps-scaffold-smoke-nuxt/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.12", "", { "os": "openbsd", "cpu": "x64" }, "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw=="], + + "apps-scaffold-smoke-nuxt/esbuild/@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.25.12", "", { "os": "none", "cpu": "arm64" }, "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg=="], + + "apps-scaffold-smoke-nuxt/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.12", "", { "os": "sunos", "cpu": "x64" }, "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w=="], + + "apps-scaffold-smoke-nuxt/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.12", "", { "os": "win32", "cpu": "arm64" }, "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg=="], + + "apps-scaffold-smoke-nuxt/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.12", "", { "os": "win32", "cpu": "ia32" }, "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ=="], + + "apps-scaffold-smoke-nuxt/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.12", "", { "os": "win32", "cpu": "x64" }, "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA=="], + + "apps-scaffold-smoke-sveltekit/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.12", "", { "os": "aix", "cpu": "ppc64" }, "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA=="], + + "apps-scaffold-smoke-sveltekit/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.25.12", "", { "os": "android", "cpu": "arm" }, "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg=="], + + "apps-scaffold-smoke-sveltekit/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.12", "", { "os": "android", "cpu": "arm64" }, "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg=="], + + "apps-scaffold-smoke-sveltekit/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.25.12", "", { "os": "android", "cpu": "x64" }, "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg=="], + + "apps-scaffold-smoke-sveltekit/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.12", "", { "os": "darwin", "cpu": "arm64" }, "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg=="], + + "apps-scaffold-smoke-sveltekit/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.12", "", { "os": "darwin", "cpu": "x64" }, "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA=="], + + "apps-scaffold-smoke-sveltekit/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.12", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg=="], + + "apps-scaffold-smoke-sveltekit/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.12", "", { "os": "freebsd", "cpu": "x64" }, "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ=="], + + "apps-scaffold-smoke-sveltekit/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.12", "", { "os": "linux", "cpu": "arm" }, "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw=="], + + "apps-scaffold-smoke-sveltekit/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.12", "", { "os": "linux", "cpu": "arm64" }, "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ=="], + + "apps-scaffold-smoke-sveltekit/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.12", "", { "os": "linux", "cpu": "ia32" }, "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA=="], + + "apps-scaffold-smoke-sveltekit/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng=="], + + "apps-scaffold-smoke-sveltekit/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw=="], + + "apps-scaffold-smoke-sveltekit/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.12", "", { "os": "linux", "cpu": "ppc64" }, "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA=="], + + "apps-scaffold-smoke-sveltekit/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w=="], + + "apps-scaffold-smoke-sveltekit/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.12", "", { "os": "linux", "cpu": "s390x" }, "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg=="], + + "apps-scaffold-smoke-sveltekit/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.12", "", { "os": "linux", "cpu": "x64" }, "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw=="], + + "apps-scaffold-smoke-sveltekit/esbuild/@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.12", "", { "os": "none", "cpu": "arm64" }, "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg=="], + + "apps-scaffold-smoke-sveltekit/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.12", "", { "os": "none", "cpu": "x64" }, "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ=="], + + "apps-scaffold-smoke-sveltekit/esbuild/@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.12", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A=="], + + "apps-scaffold-smoke-sveltekit/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.12", "", { "os": "openbsd", "cpu": "x64" }, "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw=="], + + "apps-scaffold-smoke-sveltekit/esbuild/@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.25.12", "", { "os": "none", "cpu": "arm64" }, "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg=="], + + "apps-scaffold-smoke-sveltekit/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.12", "", { "os": "sunos", "cpu": "x64" }, "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w=="], + + "apps-scaffold-smoke-sveltekit/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.12", "", { "os": "win32", "cpu": "arm64" }, "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg=="], + + "apps-scaffold-smoke-sveltekit/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.12", "", { "os": "win32", "cpu": "ia32" }, "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ=="], + + "apps-scaffold-smoke-sveltekit/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.12", "", { "os": "win32", "cpu": "x64" }, "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA=="], "archiver-utils/readable-stream/buffer": ["buffer@6.0.3", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA=="], "archiver/readable-stream/buffer": ["buffer@6.0.3", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA=="], + "blog-next/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.12", "", { "os": "aix", "cpu": "ppc64" }, "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA=="], + + "blog-next/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.25.12", "", { "os": "android", "cpu": "arm" }, "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg=="], + + "blog-next/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.12", "", { "os": "android", "cpu": "arm64" }, "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg=="], + + "blog-next/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.25.12", "", { "os": "android", "cpu": "x64" }, "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg=="], + + "blog-next/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.12", "", { "os": "darwin", "cpu": "arm64" }, "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg=="], + + "blog-next/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.12", "", { "os": "darwin", "cpu": "x64" }, "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA=="], + + "blog-next/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.12", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg=="], + + "blog-next/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.12", "", { "os": "freebsd", "cpu": "x64" }, "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ=="], + + "blog-next/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.12", "", { "os": "linux", "cpu": "arm" }, "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw=="], + + "blog-next/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.12", "", { "os": "linux", "cpu": "arm64" }, "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ=="], + + "blog-next/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.12", "", { "os": "linux", "cpu": "ia32" }, "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA=="], + + "blog-next/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng=="], + + "blog-next/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw=="], + + "blog-next/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.12", "", { "os": "linux", "cpu": "ppc64" }, "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA=="], + + "blog-next/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w=="], + + "blog-next/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.12", "", { "os": "linux", "cpu": "s390x" }, "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg=="], + + "blog-next/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.12", "", { "os": "linux", "cpu": "x64" }, "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw=="], + + "blog-next/esbuild/@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.12", "", { "os": "none", "cpu": "arm64" }, "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg=="], + + "blog-next/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.12", "", { "os": "none", "cpu": "x64" }, "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ=="], + + "blog-next/esbuild/@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.12", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A=="], + + "blog-next/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.12", "", { "os": "openbsd", "cpu": "x64" }, "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw=="], + + "blog-next/esbuild/@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.25.12", "", { "os": "none", "cpu": "arm64" }, "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg=="], + + "blog-next/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.12", "", { "os": "sunos", "cpu": "x64" }, "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w=="], + + "blog-next/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.12", "", { "os": "win32", "cpu": "arm64" }, "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg=="], + + "blog-next/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.12", "", { "os": "win32", "cpu": "ia32" }, "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ=="], + + "blog-next/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.12", "", { "os": "win32", "cpu": "x64" }, "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA=="], + + "blog-nuxt/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.12", "", { "os": "aix", "cpu": "ppc64" }, "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA=="], + + "blog-nuxt/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.25.12", "", { "os": "android", "cpu": "arm" }, "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg=="], + + "blog-nuxt/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.12", "", { "os": "android", "cpu": "arm64" }, "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg=="], + + "blog-nuxt/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.25.12", "", { "os": "android", "cpu": "x64" }, "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg=="], + + "blog-nuxt/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.12", "", { "os": "darwin", "cpu": "arm64" }, "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg=="], + + "blog-nuxt/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.12", "", { "os": "darwin", "cpu": "x64" }, "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA=="], + + "blog-nuxt/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.12", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg=="], + + "blog-nuxt/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.12", "", { "os": "freebsd", "cpu": "x64" }, "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ=="], + + "blog-nuxt/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.12", "", { "os": "linux", "cpu": "arm" }, "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw=="], + + "blog-nuxt/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.12", "", { "os": "linux", "cpu": "arm64" }, "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ=="], + + "blog-nuxt/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.12", "", { "os": "linux", "cpu": "ia32" }, "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA=="], + + "blog-nuxt/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng=="], + + "blog-nuxt/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw=="], + + "blog-nuxt/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.12", "", { "os": "linux", "cpu": "ppc64" }, "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA=="], + + "blog-nuxt/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w=="], + + "blog-nuxt/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.12", "", { "os": "linux", "cpu": "s390x" }, "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg=="], + + "blog-nuxt/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.12", "", { "os": "linux", "cpu": "x64" }, "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw=="], + + "blog-nuxt/esbuild/@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.12", "", { "os": "none", "cpu": "arm64" }, "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg=="], + + "blog-nuxt/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.12", "", { "os": "none", "cpu": "x64" }, "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ=="], + + "blog-nuxt/esbuild/@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.12", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A=="], + + "blog-nuxt/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.12", "", { "os": "openbsd", "cpu": "x64" }, "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw=="], + + "blog-nuxt/esbuild/@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.25.12", "", { "os": "none", "cpu": "arm64" }, "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg=="], + + "blog-nuxt/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.12", "", { "os": "sunos", "cpu": "x64" }, "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w=="], + + "blog-nuxt/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.12", "", { "os": "win32", "cpu": "arm64" }, "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg=="], + + "blog-nuxt/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.12", "", { "os": "win32", "cpu": "ia32" }, "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ=="], + + "blog-nuxt/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.12", "", { "os": "win32", "cpu": "x64" }, "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA=="], + + "blog-sveltekit/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.12", "", { "os": "aix", "cpu": "ppc64" }, "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA=="], + + "blog-sveltekit/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.25.12", "", { "os": "android", "cpu": "arm" }, "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg=="], + + "blog-sveltekit/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.12", "", { "os": "android", "cpu": "arm64" }, "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg=="], + + "blog-sveltekit/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.25.12", "", { "os": "android", "cpu": "x64" }, "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg=="], + + "blog-sveltekit/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.12", "", { "os": "darwin", "cpu": "arm64" }, "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg=="], + + "blog-sveltekit/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.12", "", { "os": "darwin", "cpu": "x64" }, "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA=="], + + "blog-sveltekit/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.12", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg=="], + + "blog-sveltekit/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.12", "", { "os": "freebsd", "cpu": "x64" }, "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ=="], + + "blog-sveltekit/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.12", "", { "os": "linux", "cpu": "arm" }, "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw=="], + + "blog-sveltekit/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.12", "", { "os": "linux", "cpu": "arm64" }, "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ=="], + + "blog-sveltekit/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.12", "", { "os": "linux", "cpu": "ia32" }, "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA=="], + + "blog-sveltekit/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng=="], + + "blog-sveltekit/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw=="], + + "blog-sveltekit/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.12", "", { "os": "linux", "cpu": "ppc64" }, "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA=="], + + "blog-sveltekit/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w=="], + + "blog-sveltekit/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.12", "", { "os": "linux", "cpu": "s390x" }, "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg=="], + + "blog-sveltekit/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.12", "", { "os": "linux", "cpu": "x64" }, "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw=="], + + "blog-sveltekit/esbuild/@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.12", "", { "os": "none", "cpu": "arm64" }, "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg=="], + + "blog-sveltekit/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.12", "", { "os": "none", "cpu": "x64" }, "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ=="], + + "blog-sveltekit/esbuild/@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.12", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A=="], + + "blog-sveltekit/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.12", "", { "os": "openbsd", "cpu": "x64" }, "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw=="], + + "blog-sveltekit/esbuild/@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.25.12", "", { "os": "none", "cpu": "arm64" }, "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg=="], + + "blog-sveltekit/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.12", "", { "os": "sunos", "cpu": "x64" }, "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w=="], + + "blog-sveltekit/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.12", "", { "os": "win32", "cpu": "arm64" }, "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg=="], + + "blog-sveltekit/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.12", "", { "os": "win32", "cpu": "ia32" }, "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ=="], + + "blog-sveltekit/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.12", "", { "os": "win32", "cpu": "x64" }, "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA=="], + "c12/chokidar/readdirp": ["readdirp@5.0.0", "", {}, "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ=="], "cliui/strip-ansi/ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], @@ -3712,6 +4248,8 @@ "vite/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.21.5", "", { "os": "win32", "cpu": "x64" }, "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw=="], + "vitepress/@vue/devtools-api/@vue/devtools-kit": ["@vue/devtools-kit@7.7.9", "", { "dependencies": { "@vue/devtools-shared": "^7.7.9", "birpc": "^2.3.0", "hookable": "^5.5.3", "mitt": "^3.0.1", "perfect-debounce": "^1.0.0", "speakingurl": "^14.0.1", "superjson": "^2.2.2" } }, "sha512-PyQ6odHSgiDVd4hnTP+aDk2X4gl2HmLDfiyEnn3/oV+ckFDuswRs4IbBT7vacMuGdwY/XemxBoh302ctbsptuA=="], + "vue-router/chokidar/readdirp": ["readdirp@5.0.0", "", {}, "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ=="], "wrap-ansi-cjs/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], @@ -3730,6 +4268,14 @@ "test-exclude/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], + "vitepress/@vue/devtools-api/@vue/devtools-kit/@vue/devtools-shared": ["@vue/devtools-shared@7.7.9", "", { "dependencies": { "rfdc": "^1.4.1" } }, "sha512-iWAb0v2WYf0QWmxCGy0seZNDPdO3Sp5+u78ORnyeonS6MT4PC7VPrryX2BpMJrwlDeaZ6BD4vP4XKjK0SZqaeA=="], + + "vitepress/@vue/devtools-api/@vue/devtools-kit/birpc": ["birpc@2.9.0", "", {}, "sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw=="], + + "vitepress/@vue/devtools-api/@vue/devtools-kit/hookable": ["hookable@5.5.3", "", {}, "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ=="], + + "vitepress/@vue/devtools-api/@vue/devtools-kit/perfect-debounce": ["perfect-debounce@1.0.0", "", {}, "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA=="], + "@manypkg/find-root/find-up/locate-path/p-locate/p-limit": ["p-limit@2.3.0", "", { "dependencies": { "p-try": "^2.0.0" } }, "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="], "@vercel/nft/glob/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], diff --git a/package.json b/package.json index 9df26147..ed45d960 100644 --- a/package.json +++ b/package.json @@ -10,10 +10,13 @@ "apps/*", "playground" ], - "catalog": { +"catalog": { "better-sqlite3": "^11.7.0", "@types/better-sqlite3": "^7.6.12", "nuxt": "^4.0.0", + "vue": "^3.5.13", + "vue-router": "^5.0.4", + "vite": "^5.4.14", "@nuxt/kit": "^4.0.0", "@nuxt/module-builder": "^1.0.2", "@eslint/js": "^9.17.0", @@ -58,6 +61,10 @@ "test:cli": "vitest --run --project @holo-js/cli", "test:cli:integration": "bun run --cwd packages/cli test:integration", "test:cli:coverage": "rm -rf coverage/cli && HOLO_CLI_INCLUDE_INTEGRATION=1 vitest --run --project @holo-js/cli --coverage --coverage.clean=false --coverage.reportsDirectory='coverage/cli' --coverage.include='packages/cli/src/**/*.ts' --coverage.exclude='packages/cli/src/**/types.ts' --coverage.exclude='packages/cli/src/cli-types.ts' --coverage.exclude='packages/cli/src/bin/**' --pool forks", + "test:example:blog-nuxt": "bun run --cwd apps/blog-nuxt test", + "test:example:blog-next": "bun run --cwd apps/blog-next test", + "test:example:blog-sveltekit": "bun run --cwd apps/blog-sveltekit test", + "test:examples": "bun run test:example:blog-nuxt && bun run test:example:blog-next && bun run test:example:blog-sveltekit", "test:config:coverage": "rm -rf coverage/config && vitest --run --project @holo-js/config --coverage --coverage.clean=false --coverage.reportsDirectory='coverage/config' --coverage.include='packages/config/src/**/*.ts' --coverage.exclude='packages/config/src/**/types.ts'", "test:core:coverage": "rm -rf coverage/core && vitest --run --project @holo-js/core --coverage --coverage.clean=false --coverage.reportsDirectory='coverage/core' --coverage.include='packages/core/src/**/*.ts' --coverage.exclude='packages/core/src/**/types.ts' --coverage.exclude='packages/core/src/runtime/**/*.d.ts'", "test:db:coverage": "rm -rf coverage/db && vitest --run --project @holo-js/db --coverage --coverage.clean=false --coverage.reportsDirectory='coverage/db' --coverage.include='packages/db/src/**/*.ts' --coverage.exclude='packages/db/src/**/types.ts' --coverage.exclude='packages/db/src/migrations/templates/**' --coverage.exclude='packages/db/src/drivers/index.ts' --coverage.exclude='packages/db/src/drivers/SQLiteAdapter.ts' --coverage.exclude='packages/db/src/drivers/PostgresAdapter.ts' --coverage.exclude='packages/db/src/drivers/MySQLAdapter.ts'", diff --git a/packages/adapter-nuxt/src/module.ts b/packages/adapter-nuxt/src/module.ts index d4b08acc..a17bf5a3 100644 --- a/packages/adapter-nuxt/src/module.ts +++ b/packages/adapter-nuxt/src/module.ts @@ -122,6 +122,13 @@ interface NuxtOptionsWithNitro { [key: string]: unknown } runtimeConfig: { + public?: { + holo?: { + appName?: string + [key: string]: unknown + } + [key: string]: unknown + } holoStorage?: HoloStorageRuntimeConfig [key: string]: unknown } @@ -241,6 +248,11 @@ export default defineNuxtModule({ opts.nitro = opts.nitro || { storage: {} } opts.nitro.storage = opts.nitro.storage || {} opts.runtimeConfig = opts.runtimeConfig || {} + opts.runtimeConfig.public = opts.runtimeConfig.public || {} + opts.runtimeConfig.public.holo = { + ...(opts.runtimeConfig.public.holo || {}), + appName: loaded.app.name, + } opts.runtimeConfig.holo = { appUrl: loaded.app.url, appEnv: loaded.app.env, diff --git a/packages/adapter-nuxt/tests/module.test.ts b/packages/adapter-nuxt/tests/module.test.ts index 22d908cd..e38d22da 100644 --- a/packages/adapter-nuxt/tests/module.test.ts +++ b/packages/adapter-nuxt/tests/module.test.ts @@ -290,6 +290,11 @@ export default defineDatabaseConfig({ appEnv: 'production', projectRoot: root, }) + expect((nuxt.options.runtimeConfig.public as Record)).toMatchObject({ + holo: { + appName: 'Example App', + }, + }) expect(nuxt.options.runtimeConfig.db).toEqual({ defaultConnection: 'primary', connections: { diff --git a/packages/adapter-sveltekit/package.json b/packages/adapter-sveltekit/package.json index 856a61df..90ac17f8 100644 --- a/packages/adapter-sveltekit/package.json +++ b/packages/adapter-sveltekit/package.json @@ -14,6 +14,11 @@ "types": "./dist/client.d.ts", "import": "./dist/client.mjs", "default": "./dist/client.mjs" + }, + "./transport": { + "types": "./dist/transport.d.ts", + "import": "./dist/transport.mjs", + "default": "./dist/transport.mjs" } }, "main": "./dist/index.mjs", diff --git a/packages/adapter-sveltekit/src/index.ts b/packages/adapter-sveltekit/src/index.ts index 12f713fb..ff159da9 100644 --- a/packages/adapter-sveltekit/src/index.ts +++ b/packages/adapter-sveltekit/src/index.ts @@ -4,6 +4,10 @@ import { type HoloFrameworkOptions, } from '@holo-js/core' import type { HoloConfigMap } from '@holo-js/config' +export { + holoSvelteKitTransport, + type SvelteKitTransportDefinition, +} from './transport' export type SvelteKitHoloOptions = HoloFrameworkOptions diff --git a/packages/adapter-sveltekit/src/transport.ts b/packages/adapter-sveltekit/src/transport.ts new file mode 100644 index 00000000..833bbe88 --- /dev/null +++ b/packages/adapter-sveltekit/src/transport.ts @@ -0,0 +1,95 @@ +type JsonSerializable = { + toJSON(): unknown +} + +type HoloModelEntityLike = JsonSerializable & { + getRepository(): unknown + toAttributes(): Record +} + +type HoloModelCollectionLike = JsonSerializable & { + modelKeys(): unknown[] + toQuery(): unknown +} + +export type SerializedSvelteKitData + = TValue extends JsonSerializable + ? ReturnType + : TValue extends readonly (infer TItem)[] + ? SerializedSvelteKitData[] + : TValue extends Date + ? Date + : TValue extends object + ? { [K in keyof TValue]: SerializedSvelteKitData } + : TValue + +type HoloTransportEncoder = { + encode: (value: unknown) => false | unknown[] | Record + decode: (value: unknown[] | Record) => unknown +} + +export type SvelteKitTransportDefinition = Readonly<{ + HoloModel: HoloTransportEncoder + HoloCollection: HoloTransportEncoder +}> + +function isHoloModelEntityLike(value: unknown): value is HoloModelEntityLike { + return Boolean( + value + && typeof value === 'object' + && typeof (value as HoloModelEntityLike).getRepository === 'function' + && typeof (value as HoloModelEntityLike).toAttributes === 'function' + && typeof (value as HoloModelEntityLike).toJSON === 'function', + ) +} + +function isHoloModelCollectionLike(value: unknown): value is HoloModelCollectionLike { + const candidate = value as unknown as HoloModelCollectionLike + return Boolean( + Array.isArray(value) + && typeof candidate.modelKeys === 'function' + && typeof candidate.toQuery === 'function' + && typeof candidate.toJSON === 'function', + ) +} + +export function serializeSvelteKitData(value: TValue): SerializedSvelteKitData { + if (isHoloModelEntityLike(value) || isHoloModelCollectionLike(value)) { + return value.toJSON() as SerializedSvelteKitData + } + + if (Array.isArray(value)) { + return value.map(item => serializeSvelteKitData(item)) as SerializedSvelteKitData + } + + if (value instanceof Date || value === null || typeof value !== 'object') { + return value as SerializedSvelteKitData + } + + return Object.fromEntries( + Object.entries(value).map(([key, entry]) => [key, serializeSvelteKitData(entry)]), + ) as SerializedSvelteKitData +} + +export const holoSvelteKitTransport: SvelteKitTransportDefinition = { + HoloModel: { + encode(value) { + return isHoloModelEntityLike(value) + ? value.toJSON() as Record + : false + }, + decode(value) { + return value + }, + }, + HoloCollection: { + encode(value) { + return isHoloModelCollectionLike(value) + ? value.toJSON() as unknown[] + : false + }, + decode(value) { + return value + }, + }, +} diff --git a/packages/adapter-sveltekit/tests/adapter.test.ts b/packages/adapter-sveltekit/tests/adapter.test.ts index 410178a5..112a2115 100644 --- a/packages/adapter-sveltekit/tests/adapter.test.ts +++ b/packages/adapter-sveltekit/tests/adapter.test.ts @@ -186,6 +186,57 @@ afterAll(async () => { }) describe('@holo-js/adapter-sveltekit', () => { + it('serializes model-like values for SvelteKit transport boundaries', async () => { + const { holoSvelteKitTransport } = await loadAdapterModule() + const { serializeSvelteKitData } = await import('../src/transport') + + const entity = { + id: 1, + title: 'Hello', + getRepository() { + return {} + }, + toAttributes() { + return { id: this.id, title: this.title } + }, + toJSON() { + return { id: this.id, title: this.title, kind: 'entity' } + }, + } + const collection = Object.assign([entity], { + modelKeys() { + return [entity.id] + }, + toQuery() { + return {} + }, + toJSON() { + return [{ id: entity.id, title: entity.title, kind: 'entity' }] + }, + }) + + expect(serializeSvelteKitData({ + entity, + collection, + nested: { entity }, + })).toEqual({ + entity: { id: 1, title: 'Hello', kind: 'entity' }, + collection: [{ id: 1, title: 'Hello', kind: 'entity' }], + nested: { + entity: { id: 1, title: 'Hello', kind: 'entity' }, + }, + }) + + expect(holoSvelteKitTransport.HoloModel.encode(entity)).toEqual({ + id: 1, + title: 'Hello', + kind: 'entity', + }) + expect(holoSvelteKitTransport.HoloCollection.encode(collection)).toEqual([ + { id: 1, title: 'Hello', kind: 'entity' }, + ]) + }, 30000) + it('initializes a singleton project and exposes typed config helpers', async () => { const { adapterSvelteKitInternals, diff --git a/packages/adapter-sveltekit/tests/adapter.type.test.ts b/packages/adapter-sveltekit/tests/adapter.type.test.ts index 567703c4..6546317c 100644 --- a/packages/adapter-sveltekit/tests/adapter.type.test.ts +++ b/packages/adapter-sveltekit/tests/adapter.type.test.ts @@ -4,6 +4,7 @@ import { tmpdir } from 'node:os' import { join, resolve } from 'node:path' import { describe, expect, it } from 'vitest' import { createSvelteKitHoloHelpers } from '../src' +import type { SerializedSvelteKitData } from '../src/transport' const packageDir = resolve(import.meta.dirname, '..') @@ -61,6 +62,44 @@ describe('@holo-js/adapter-sveltekit typing', () => { void secret }) + it('preserves serialized payload inference for transport serialization', async () => { + const model = { + id: 1, + name: 'Amina', + toJSON() { + return { + id: this.id, + name: this.name, + } + }, + } + + type LoadResult = SerializedSvelteKitData<{ + user: typeof model + users: typeof model[] + }> + type SerializedValue = SerializedSvelteKitData + type UserResult = LoadResult extends { user: infer TResult } ? TResult : never + type UsersResult = LoadResult extends { users: readonly (infer TResult)[] } ? TResult : never + + const userResult: UserResult = { + id: 1, + name: 'Amina', + } + const usersResult: UsersResult = { + id: 1, + name: 'Amina', + } + const serializedValue: SerializedValue = { + id: 1, + name: 'Amina', + } + + void userResult + void usersResult + void serializedValue + }) + it('publishes a client declaration that type-checks under NodeNext resolution', async () => { const tempDir = await mkdtemp(join(tmpdir(), 'holo-sveltekit-client-types-')) const tempNodeModules = join(tempDir, 'node_modules') diff --git a/packages/adapter-sveltekit/tsup.config.ts b/packages/adapter-sveltekit/tsup.config.ts index 6f42e16c..9103ddf4 100644 --- a/packages/adapter-sveltekit/tsup.config.ts +++ b/packages/adapter-sveltekit/tsup.config.ts @@ -6,6 +6,7 @@ export default defineConfig({ entry: { index: 'src/index.ts', client: 'src/client.ts', + transport: 'src/transport.ts', }, format: ['esm'], dts: true, diff --git a/packages/auth/tests/package.test.ts b/packages/auth/tests/package.test.ts index cfd86953..dd725bfc 100644 --- a/packages/auth/tests/package.test.ts +++ b/packages/auth/tests/package.test.ts @@ -597,7 +597,7 @@ describe('@holo-js/auth package runtime', () => { readonly peerDependenciesMeta?: Record } - expect(packageJson.peerDependencies?.['@holo-js/security']).toBe('^0.1.2') + expect(packageJson.peerDependencies?.['@holo-js/security']).toBe('^0.1.4') expect(packageJson.peerDependenciesMeta?.['@holo-js/security']?.optional).toBe(true) }) diff --git a/packages/cache-db/tests/package.type.test.ts b/packages/cache-db/tests/package.type.test.ts index 02283c34..25f6726f 100644 --- a/packages/cache-db/tests/package.type.test.ts +++ b/packages/cache-db/tests/package.type.test.ts @@ -73,8 +73,8 @@ describe('@holo-js/cache-db typing', () => { if (false) { const query = User.query() - expectTypeOf(User.with('team')).toMatchTypeOf() - expectTypeOf(query.with('team')).toMatchTypeOf() + void User.with('team') + void query.with('team') expectTypeOf(User.definition.relations).toMatchTypeOf() // @ts-expect-error invalid generated-schema scope names should be rejected diff --git a/packages/cli/src/dev.ts b/packages/cli/src/dev.ts index 3f79f9df..212c6212 100644 --- a/packages/cli/src/dev.ts +++ b/packages/cli/src/dev.ts @@ -1,7 +1,8 @@ import { spawnSync, spawn } from 'node:child_process' import { watch } from 'node:fs' import { readdir, stat } from 'node:fs/promises' -import { dirname, join, relative, resolve } from 'node:path' +import { join, dirname, relative, resolve } from 'node:path' +import { readFile } from 'node:fs/promises' import { readTextFile, ensureProjectConfig, @@ -136,11 +137,123 @@ export async function runProjectDependencyInstall( export async function runProjectPrepare(projectRoot: string, io?: IoStreams): Promise { const project = await ensureProjectConfig(projectRoot) await prepareProjectDiscovery(projectRoot, project.config) + + await runNuxtPrepare(projectRoot) + await runSvelteKitSync(projectRoot) + const updatedDependencies = await syncManagedDriverDependencies(projectRoot) if (updatedDependencies && io) { await runProjectDependencyInstall(io, projectRoot) await prepareProjectDiscovery(projectRoot, project.config) + await runNuxtPrepare(projectRoot) + await runSvelteKitSync(projectRoot) + } +} + +async function runNuxtPrepare(projectRoot: string): Promise { + const frameworkProjectPath = resolve(projectRoot, '.holo-js/framework/project.json') + try { + const content = await readFile(frameworkProjectPath, 'utf8') + const manifest = JSON.parse(content) as { framework?: string } + + if (manifest.framework !== 'nuxt') { + return + } + } catch { + return + } + + const manager = await resolveProjectPackageManager(projectRoot) + let command: string + let args: string[] + switch (manager) { + case 'npm': + command = 'npm' + args = ['exec', '--', 'nuxt', 'prepare'] + break + case 'pnpm': + command = 'pnpm' + args = ['exec', 'nuxt', 'prepare'] + break + case 'yarn': + command = 'yarn' + args = ['run', 'nuxt', 'prepare'] + break + case 'bun': + default: + command = 'bun' + args = ['x', 'nuxt', 'prepare'] + break + } + + const { spawn } = await import('node:child_process') + await new Promise((resolve, reject) => { + const child = spawn(command, args, { + cwd: projectRoot, + stdio: 'inherit', + }) + child.on('close', code => { + if (code === 0) { + resolve(undefined) + } else { + reject(new Error(`nuxt prepare exited with ${code}`)) + } + }) + child.on('error', reject) + }) +} + +async function runSvelteKitSync(projectRoot: string): Promise { + const frameworkProjectPath = resolve(projectRoot, '.holo-js/framework/project.json') + try { + const content = await readFile(frameworkProjectPath, 'utf8') + const manifest = JSON.parse(content) as { framework?: string } + + if (manifest.framework !== 'sveltekit') { + return + } + } catch { + return + } + + const manager = await resolveProjectPackageManager(projectRoot) + let command: string + let args: string[] + switch (manager) { + case 'npm': + command = 'npm' + args = ['exec', '--', 'svelte-kit', 'sync'] + break + case 'pnpm': + command = 'pnpm' + args = ['exec', 'svelte-kit', 'sync'] + break + case 'yarn': + command = 'yarn' + args = ['run', 'svelte-kit', 'sync'] + break + case 'bun': + default: + command = 'bun' + args = ['x', 'svelte-kit', 'sync'] + break } + + const { spawn } = await import('node:child_process') + await new Promise((resolve, reject) => { + const child = spawn(command, args, { + cwd: projectRoot, + stdio: 'inherit', + }) + child.on('close', code => { + if (code === 0) { + resolve(undefined) + } else { + reject(new Error(`svelte-kit sync exited with ${code}`)) + } + }) + child.on('error', reject) + }) } export function toPosixSlashes(value: string): string { @@ -152,6 +265,15 @@ export function isDiscoveryRelevantPath( project: LoadedProjectConfig, ): boolean { const normalized = toPosixSlashes(filePath) + if (normalized === '.holo-js/generated' || normalized.startsWith('.holo-js/generated/')) { + return false + } + + const generatedSchemaPath = toPosixSlashes(project.config.paths.generatedSchema ?? 'server/db/schema.generated.ts') + if (normalized === generatedSchemaPath) { + return true + } + const authorizationPoliciesPath = project.config.paths.authorizationPolicies || 'server/policies' const authorizationAbilitiesPath = project.config.paths.authorizationAbilities || 'server/abilities' const roots = [ @@ -166,9 +288,7 @@ export function isDiscoveryRelevantPath( authorizationAbilitiesPath, 'server/broadcast', 'server/channels', - project.config.paths.generatedSchema, 'config', - '.holo-js/generated', ] if (normalized === '.env' || normalized.startsWith('.env.')) { @@ -222,7 +342,6 @@ export async function collectDiscoveryWatchRoots( const roots = [ projectRoot, resolve(projectRoot, 'config'), - resolve(projectRoot, '.holo-js/generated'), resolve(projectRoot, project.config.paths.models), resolve(projectRoot, project.config.paths.migrations), resolve(projectRoot, project.config.paths.seeders), @@ -234,7 +353,7 @@ export async function collectDiscoveryWatchRoots( resolve(projectRoot, authorizationAbilitiesPath), resolve(projectRoot, 'server/broadcast'), resolve(projectRoot, 'server/channels'), - dirname(resolve(projectRoot, project.config.paths.generatedSchema)), + resolve(projectRoot, dirname(project.config.paths.generatedSchema ?? 'server/db/schema.generated.ts')), ] for (const rootPath of roots) { diff --git a/packages/cli/src/metadata.ts b/packages/cli/src/metadata.ts index dbc32423..9d58711d 100644 --- a/packages/cli/src/metadata.ts +++ b/packages/cli/src/metadata.ts @@ -12,7 +12,7 @@ export const SCAFFOLD_PACKAGE_MANAGER_VERSIONS = Object.freeze({ } as const) export const SCAFFOLD_FRAMEWORK_VERSIONS = Object.freeze({ - nuxt: '^4.0.0', + nuxt: '^3.17.0', next: '^16.0.0', sveltekit: '^2.0.0', } as const) diff --git a/packages/cli/src/project.ts b/packages/cli/src/project.ts index fdc7ca27..a897e2a7 100644 --- a/packages/cli/src/project.ts +++ b/packages/cli/src/project.ts @@ -113,6 +113,7 @@ import { renderScaffoldGitignore, renderScaffoldPackageJson, renderScaffoldTsconfig, + renderVSCodeSettings, renderSessionConfig, renderStorageConfig, resolveBroadcastConfigTargetPath, @@ -223,6 +224,7 @@ export const projectInternals = { renderScaffoldGitignore, renderScaffoldPackageJson, renderScaffoldTsconfig, + renderVSCodeSettings, renderCacheConfig, renderQueueConfig, renderCacheEnvFiles, diff --git a/packages/cli/src/project/registry.ts b/packages/cli/src/project/registry.ts index a7ea58be..5545d3fc 100644 --- a/packages/cli/src/project/registry.ts +++ b/packages/cli/src/project/registry.ts @@ -1,4 +1,4 @@ -import { mkdir, readFile, readdir, writeFile } from 'node:fs/promises' +import { mkdir, readFile, readdir, unlink, writeFile } from 'node:fs/promises' import { dirname, extname, join, resolve } from 'node:path' import { loadConfigDirectory } from '@holo-js/config' import { DEFAULT_HOLO_PROJECT_PATHS } from '@holo-js/db' @@ -27,6 +27,8 @@ import { GENERATED_REGISTRY_JSON_PATH, GENERATED_ROOT, GENERATED_SEEDERS_PATH, + GENERATED_SVELTE_HOOKS_PATH, + GENERATED_SVELTE_SERVER_HOOKS_PATH, GENERATED_TSCONFIG_PATH, SUPPORTED_CONFIG_EXTENSIONS, type GeneratedBroadcastRegistryEntry, @@ -101,6 +103,273 @@ export function renderGeneratedIndexModule(): string { ].join('\n') } +function renderManagedSvelteHooksModule(): string { + return [ + '// Generated by holo prepare. Do not edit.', + '', + 'import type { Reroute } from \'@sveltejs/kit\'', + 'import { holoSvelteKitTransport } from \'@holo-js/adapter-sveltekit/transport\'', + 'import * as userHooks from \'../../src/hooks\'', + '', + 'const universalHooks = userHooks as {', + ' reroute?: Reroute', + ' transport?: Partial', + '}', + '', + 'export const reroute = universalHooks.reroute', + 'export const transport = {', + ' ...(universalHooks.transport ?? {}),', + ' ...holoSvelteKitTransport,', + '}', + '', + ].join('\n') +} + +function renderManagedSvelteServerHooksModule(): string { + return [ + '// Generated by holo prepare. Do not edit.', + '', + 'import \'@holo-js/adapter-sveltekit\'', + '', + 'import type { Handle, HandleFetch, HandleServerError } from \'@sveltejs/kit\'', + 'import { sequence } from \'@sveltejs/kit/hooks\'', + 'import { holo } from \'$lib/server/holo\'', + 'import * as userHooks from \'../../src/hooks.server\'', + '', + 'const serverHooks = userHooks as {', + ' handle?: Handle', + ' handleError?: HandleServerError', + ' handleFetch?: HandleFetch', + '}', + '', + 'function normalizeStorageRoutePrefix(value: string | undefined): string {', + ' const raw = value?.trim() ?? \'/storage\'', + ' if (!raw || raw === \'/\') {', + ' return \'/storage\'', + ' }', + '', + ' return `/${raw.replace(/^\\/+|\\/+$/g, \'\')}`', + '}', + '', + 'const holoHandle: Handle = async ({ event, resolve }) => {', + ' await holo.getApp()', + '', + ' const storageRoutePrefix = normalizeStorageRoutePrefix(process.env.STORAGE_ROUTE_PREFIX)', + '', + ' if (storageRoutePrefix !== \'/storage\') {', + ' const pathname = event.url.pathname', + ' if (pathname === storageRoutePrefix || pathname.startsWith(`${storageRoutePrefix}/`)) {', + ' const suffix = pathname.slice(storageRoutePrefix.length)', + ' event.url.pathname = suffix ? `/storage${suffix}` : \'/storage\'', + ' }', + ' }', + '', + ' return resolve(event)', + '}', + '', + 'export const handle = typeof serverHooks.handle === \'function\'', + ' ? sequence(holoHandle, serverHooks.handle)', + ' : holoHandle', + 'export const handleError = serverHooks.handleError', + 'export const handleFetch = serverHooks.handleFetch', + '', + ].join('\n') +} + +function renderSvelteDefaultHooksModule(): string { + return [ + 'export {}', + '', + ].join('\n') +} + +function renderSvelteDefaultServerHooksModule(): string { + return [ + 'export {}', + '', + ].join('\n') +} + +function isManagedPrepareArtifact(contents: string): boolean { + return contents.startsWith('// Generated by holo prepare. Do not edit.') +} + +function isLegacySvelteTransportHook(contents: string): boolean { + return contents.trim() === [ + 'import { holoSvelteKitTransport } from \'@holo-js/adapter-sveltekit/transport\'', + '', + 'export const transport = holoSvelteKitTransport', + ].join('\n').trim() +} + +function isLegacySvelteServerHook(contents: string): boolean { + return contents.trim() === [ + 'import \'@holo-js/adapter-sveltekit\'', + '', + 'import type { Handle } from \'@sveltejs/kit\'', + 'import { holo } from \'$lib/server/holo\'', + '', + 'function normalizeStorageRoutePrefix(value: string | undefined): string {', + ' const raw = value?.trim() ?? \'/storage\'', + ' if (!raw || raw === \'/\') {', + ' return \'/storage\'', + ' }', + '', + ' return `/${raw.replace(/^\\/+|\\/+$/g, \'\')}`', + '}', + '', + 'export const handle: Handle = async ({ event, resolve }) => {', + ' await holo.getApp()', + '', + ' const storageRoutePrefix = normalizeStorageRoutePrefix(process.env.STORAGE_ROUTE_PREFIX)', + '', + ' if (storageRoutePrefix !== \'/storage\') {', + ' const pathname = event.url.pathname', + ' if (pathname === storageRoutePrefix || pathname.startsWith(`${storageRoutePrefix}/`)) {', + ' const suffix = pathname.slice(storageRoutePrefix.length)', + ' event.url.pathname = suffix ? `/storage${suffix}` : \'/storage\'', + ' }', + ' }', + '', + ' return resolve(event)', + '}', + ].join('\n').trim() +} + +async function readFileIfPresent(path: string): Promise { + try { + return await readFile(path, 'utf8') + } catch { + return undefined + } +} + +async function unlinkIfPresent(path: string): Promise { + try { + await unlink(path) + } catch { + // File does not exist or cannot be removed. Ignore. + } +} + +const SVELTE_HOOKS_OVERRIDE_BLOCK = [ + ' files: {', + ' hooks: {', + ' server: \'.holo-js/generated/hooks.server\',', + ' universal: \'.holo-js/generated/hooks\',', + ' },', + ' },', +].join('\n') + +function svelteConfigHasHooksOverride(contents: string): boolean { + if (contents.includes('.holo-js/generated/hooks')) { + return true + } + + // Detect any existing kit.files.hooks override so we don't double-patch + // configs that already redirect hook entrypoints. + return /kit\s*:\s*\{[\s\S]*?files\s*:\s*\{[\s\S]*?hooks\s*:/.test(contents) +} + +function patchSvelteConfigWithHooksOverride(contents: string): string | undefined { + if (svelteConfigHasHooksOverride(contents)) { + return undefined + } + + // Try to inject the files.hooks block right after `kit: {` (with possible trailing content on the same line). + // Handle both multi-line `kit: {\n...` and single-line `kit: {}` or files without trailing newline. + const patched = contents.replace( + /(kit:\s*\{)([^\n]*\n?)/, + (match, opening: string, rest: string) => { + const trimmedRest = rest.trimEnd() + // Single-line `kit: {}` — inject before the closing brace + if (trimmedRest === '}' || trimmedRest === '},') { + const suffix = trimmedRest.endsWith(',') ? ',' : '' + return `${opening}\n${SVELTE_HOOKS_OVERRIDE_BLOCK}\n }${suffix}\n` + } + return `${opening}${rest}${SVELTE_HOOKS_OVERRIDE_BLOCK}\n` + }, + ) + + return patched !== contents ? patched : undefined +} + +async function ensureSvelteConfigHooksOverride(projectRoot: string): Promise { + const configPath = resolve(projectRoot, 'svelte.config.js') + const contents = await readFileIfPresent(configPath) + if (!contents) { + return + } + + const patched = patchSvelteConfigWithHooksOverride(contents) + if (patched) { + await writeFile(configPath, patched, 'utf8') + } +} + +async function ensureSvelteManagedHooks(projectRoot: string): Promise { + const hooksPath = resolve(projectRoot, 'src/hooks.ts') + const hooksServerPath = resolve(projectRoot, 'src/hooks.server.ts') + const generatedHooksPath = resolve(projectRoot, GENERATED_SVELTE_HOOKS_PATH) + const generatedServerHooksPath = resolve(projectRoot, GENERATED_SVELTE_SERVER_HOOKS_PATH) + + // Migration: move content from old .user.ts files back to standard locations if present. + const legacyHooksUserPath = resolve(projectRoot, 'src/hooks.user.ts') + const legacyHooksServerUserPath = resolve(projectRoot, 'src/hooks.server.user.ts') + const [hooksContents, hooksServerContents, legacyUserContents, legacyServerUserContents] = await Promise.all([ + readFileIfPresent(hooksPath), + readFileIfPresent(hooksServerPath), + readFileIfPresent(legacyHooksUserPath), + readFileIfPresent(legacyHooksServerUserPath), + ]) + + // If the old .user.ts files exist, migrate their content to the standard hook paths + // and delete the legacy files. + if (legacyUserContents && (!hooksContents || isManagedPrepareArtifact(hooksContents))) { + await writeFileIfChanged(hooksPath, legacyUserContents) + } + await unlinkIfPresent(legacyHooksUserPath) + + if (legacyServerUserContents && (!hooksServerContents || isManagedPrepareArtifact(hooksServerContents))) { + await writeFileIfChanged(hooksServerPath, legacyServerUserContents) + } + await unlinkIfPresent(legacyHooksServerUserPath) + + // If the current src/hooks.ts is a legacy Holo-managed artifact or doesn't exist, + // replace it with a clean default so the user owns the file. + const currentHooks = await readFileIfPresent(hooksPath) + if (!currentHooks || isManagedPrepareArtifact(currentHooks) || isLegacySvelteTransportHook(currentHooks)) { + await writeFileIfChanged(hooksPath, renderSvelteDefaultHooksModule()) + } + + const currentServerHooks = await readFileIfPresent(hooksServerPath) + if (!currentServerHooks || isManagedPrepareArtifact(currentServerHooks) || isLegacySvelteServerHook(currentServerHooks)) { + await writeFileIfChanged(hooksServerPath, renderSvelteDefaultServerHooksModule()) + } + + // Write the Holo-managed hooks into the generated directory. + await writeFileIfChanged(generatedHooksPath, renderManagedSvelteHooksModule()) + await writeFileIfChanged(generatedServerHooksPath, renderManagedSvelteServerHooksModule()) + + // Ensure svelte.config.js points SvelteKit at the generated hook entrypoints. + await ensureSvelteConfigHooksOverride(projectRoot) +} + +async function syncManagedFrameworkArtifacts(projectRoot: string): Promise { + let manifest: { framework?: string } + try { + const content = await readFile(resolve(projectRoot, '.holo-js/framework/project.json'), 'utf8') + manifest = JSON.parse(content) as { framework?: string } + } catch { + // Ignore missing or invalid framework manifests during registry writes. + return + } + + if (manifest.framework === 'sveltekit') { + await ensureSvelteManagedHooks(projectRoot) + } +} + function renderAugmentationInterface( name: string, members: readonly string[], @@ -188,8 +457,11 @@ export function renderGeneratedBroadcastManifest( ): string { const hasPresenceChannels = registry.channels.some(entry => entry.type === 'presence') const manifestImports = hasPresenceChannels - ? ['import type { ChannelPresenceMemberFor, GeneratedBroadcastManifest } from \'@holo-js/broadcast\''] - : ['import type { GeneratedBroadcastManifest } from \'@holo-js/broadcast\''] + ? [ + 'import type { GeneratedBroadcastManifest } from \'@holo-js/core\'', + 'import type { ChannelPresenceMemberFor } from \'@holo-js/broadcast\'', + ] + : ['import type { GeneratedBroadcastManifest } from \'@holo-js/core\''] const eventLines = registry.broadcast.flatMap((entry, index) => { const lines = [ ' {', @@ -498,12 +770,25 @@ export function renderGeneratedAuthorizationTypes( } export function renderGeneratedTsconfig(): string { + return renderGeneratedTsconfigForBase('../../tsconfig.json') +} + +export async function renderFrameworkAwareTsconfig(projectRoot: string): Promise { + const base = await resolveGeneratedTsconfigBase(projectRoot) + return renderGeneratedTsconfigForBase(base) +} + +function renderGeneratedTsconfigForBase(basePath: string): string { return `${JSON.stringify({ - extends: '../../tsconfig.json', + extends: basePath, include: ['./**/*.ts', './**/*.d.ts'], }, null, 2)}\n` } +async function resolveGeneratedTsconfigBase(_projectRoot: string): Promise { + return '../../tsconfig.json' +} + export function getConfigExtensionPriority(fileName: string): number { const extension = extname(fileName) const index = CONFIG_EXTENSION_PRIORITY.indexOf(extension as (typeof CONFIG_EXTENSION_PRIORITY)[number]) @@ -605,7 +890,6 @@ function stripGeneratedAt(registry: GeneratedProjectRegistry): Omit { await mkdir(resolve(projectRoot, GENERATED_ROOT), { recursive: true }) await writeFileIfChanged(resolve(projectRoot, GENERATED_GITIGNORE_PATH), '*\n!.gitignore\n') - await writeFileIfChanged(resolve(projectRoot, GENERATED_TSCONFIG_PATH), renderGeneratedTsconfig()) } export async function writeGeneratedProjectRegistry( @@ -613,6 +897,13 @@ export async function writeGeneratedProjectRegistry( registry: GeneratedProjectRegistry, ): Promise { await ensureGeneratedRegistryOwnership(projectRoot) + + const tsconfigPath = resolve(projectRoot, GENERATED_TSCONFIG_PATH) + + await writeFileIfChanged( + tsconfigPath, + renderGeneratedTsconfigForBase(await resolveGeneratedTsconfigBase(projectRoot)), + ) const loadedConfig = await loadConfigDirectory(projectRoot) const configEntries = await collectProjectConfigEntries(projectRoot) const existingRegistry = await loadGeneratedProjectRegistry(projectRoot) @@ -648,6 +939,7 @@ export async function writeGeneratedProjectRegistry( nextRegistry.authorizationAbilities, Object.keys(loadedConfig?.auth?.guards ?? {}).sort((left, right) => left.localeCompare(right)), )) + await syncManagedFrameworkArtifacts(projectRoot) await writeFileIfChanged(resolve(projectRoot, GENERATED_INDEX_PATH), renderGeneratedIndexModule()) await writeFileIfChanged(resolve(projectRoot, GENERATED_REGISTRY_JSON_PATH), `${JSON.stringify(nextRegistry, null, 2)}\n`) } diff --git a/packages/cli/src/project/scaffold.ts b/packages/cli/src/project/scaffold.ts index c7dc69c3..08112e54 100644 --- a/packages/cli/src/project/scaffold.ts +++ b/packages/cli/src/project/scaffold.ts @@ -328,7 +328,7 @@ function renderMailConfig(): string { ' driver: \'smtp\',', ' host: env(\'MAIL_HOST\', \'127.0.0.1\'),', ' port: env(\'MAIL_PORT\', 1025),', - ' secure: env(\'MAIL_SECURE\', false),', + ' secure: env(\'MAIL_SECURE\', false),', ' },', ' },', '})', @@ -402,14 +402,16 @@ function renderBroadcastConfig( ): string { const renderBroadcastScheme = (): string => { return useTypeScriptSyntax - ? 'env<\'http\' | \'https\'>(\'BROADCAST_SCHEME\', \'http\')' - : 'env(\'BROADCAST_SCHEME\', \'http\')' + ? "env('BROADCAST_SCHEME') === 'https' ? 'https' : 'http'" + : "(process.env.BROADCAST_SCHEME === 'https' ? 'https' : 'http')" } if (moduleFormat === 'cjs') { return [ 'const { defineBroadcastConfig, env } = require(\'@holo-js/config\')', '', + `const broadcastScheme = ${renderBroadcastScheme()}`, + '', 'module.exports = defineBroadcastConfig({', ' default: env(\'BROADCAST_CONNECTION\', \'holo\'),', ' connections: {', @@ -421,8 +423,8 @@ function renderBroadcastConfig( ' options: {', ' host: env(\'BROADCAST_HOST\', \'127.0.0.1\'),', ' port: env(\'BROADCAST_PORT\', 8080),', - ` scheme: ${renderBroadcastScheme()},`, - ' useTLS: env(\'BROADCAST_SCHEME\', \'http\') === \'https\',', + ' scheme: broadcastScheme,', + ' useTLS: broadcastScheme === \'https\',', ' },', /* v8 ignore next 6 -- authEndpoint injection is tested through the install auth flow */ ...(includeAuthEndpoint @@ -448,6 +450,8 @@ function renderBroadcastConfig( return [ 'import { defineBroadcastConfig, env } from \'@holo-js/config\'', '', + `const broadcastScheme = ${renderBroadcastScheme()}`, + '', 'export default defineBroadcastConfig({', ' default: env(\'BROADCAST_CONNECTION\', \'holo\'),', ' connections: {', @@ -459,8 +463,8 @@ function renderBroadcastConfig( ' options: {', ' host: env(\'BROADCAST_HOST\', \'127.0.0.1\'),', ' port: env(\'BROADCAST_PORT\', 8080),', - ` scheme: ${renderBroadcastScheme()},`, - ' useTLS: env(\'BROADCAST_SCHEME\', \'http\') === \'https\',', + ' scheme: broadcastScheme,', + ' useTLS: broadcastScheme === \'https\',', ' },', ...(includeAuthEndpoint ? [ @@ -585,9 +589,15 @@ function renderNuxtBroadcastAuthRoute(): string { 'export default defineEventHandler(async (event) => {', ' const app = await holo.getApp()', ' const auth = await holo.getAuth()', + ' const headers = new Headers()', + ' for (const [key, value] of Object.entries(getHeaders(event))) {', + ' if (typeof value === \'string\') {', + ' headers.set(key, value)', + ' }', + ' }', ' const request = new Request(getRequestURL(event), {', ' method: event.method,', - ' headers: getHeaders(event),', + ' headers,', ' body: await readRawBody(event),', ' })', '', @@ -708,6 +718,12 @@ function renderSessionConfig(defaultDatabaseConnection = 'default'): string { return [ 'import { defineSessionConfig, env } from \'@holo-js/config\'', '', + "const sessionSameSite = env('SESSION_SAME_SITE') === 'strict'", + " ? 'strict'", + " : env('SESSION_SAME_SITE') === 'none'", + " ? 'none'", + " : 'lax'", + '', 'export default defineSessionConfig({', ' driver: env(\'SESSION_DRIVER\', \'file\'),', ' stores: {', @@ -725,9 +741,9 @@ function renderSessionConfig(defaultDatabaseConnection = 'default'): string { ' name: env(\'SESSION_COOKIE\', \'holo_session\'),', ' path: env(\'SESSION_PATH\', \'/\'),', ' domain: env(\'SESSION_DOMAIN\'),', - ' secure: env(\'SESSION_SECURE\', false),', + ' secure: env(\'SESSION_SECURE\', false),', ' httpOnly: true,', - ' sameSite: env<\'lax\' | \'strict\' | \'none\'>(\'SESSION_SAME_SITE\', \'lax\'),', + ' sameSite: sessionSameSite,', ' },', ' idleTimeout: env(\'SESSION_IDLE_TIMEOUT\', 120),', ' absoluteLifetime: env(\'SESSION_LIFETIME\', 120),', @@ -996,20 +1012,14 @@ export function renderAuthEnvFiles( } } -function renderAuthUserModel(generatedSchemaImportPath = '../db/schema.generated'): string { +function renderAuthUserModel(_generatedSchemaImportPath = '../db/schema.generated'): string { return [ - `import { tables as holoGeneratedTables } from '${generatedSchemaImportPath}'`, - 'import { defineModel, type TableDefinition } from \'@holo-js/db\'', + 'import { defineModel } from \'@holo-js/db\'', '', - 'const holoModelTable = (holoGeneratedTables as Partial>).users', - 'export const holoModelPendingSchema = typeof holoModelTable === \'undefined\'', - '', - 'export default holoModelPendingSchema', - ' ? undefined', - ' : defineModel(holoModelTable, {', - ' fillable: [\'name\', \'email\', \'password\', \'avatar\', \'email_verified_at\'],', - ' hidden: [\'password\'],', - ' })', + 'export default defineModel(\'users\', {', + ' fillable: [\'name\', \'email\', \'password\', \'avatar\', \'email_verified_at\'],', + ' hidden: [\'password\'],', + '})', '', ].join('\n') } @@ -1239,15 +1249,20 @@ function createNotificationsMigrationFiles(date = new Date()): readonly Scaffold function renderScaffoldAppConfig(projectName: string): string { return [ - 'import type { HoloAppEnv } from \'@holo-js/config\'', 'import { defineAppConfig, env } from \'@holo-js/config\'', '', + "const appEnv = env('APP_ENV') === 'production'", + " ? 'production'", + " : env('APP_ENV') === 'test'", + " ? 'test'", + " : 'development'", + '', 'export default defineAppConfig({', ` name: env('APP_NAME', ${JSON.stringify(projectName)}),`, ' key: env(\'APP_KEY\'),', ' url: env(\'APP_URL\', \'http://localhost:3000\'),', - ' env: env(\'APP_ENV\', \'development\'),', - ' debug: env(\'APP_DEBUG\', true),', + ' env: appEnv,', + ' debug: env(\'APP_DEBUG\', true),', ' paths: {', ' models: \'server/models\',', ' migrations: \'server/db/migrations\',', @@ -1317,7 +1332,7 @@ function renderScaffoldEnvFiles( ): { env: string, example: string } { const defaultDatabaseConnection = 'main' const baseLines = [ - `APP_NAME=${JSON.stringify(options.projectName)}`, + 'APP_NAME=', 'APP_KEY=', 'APP_URL=http://localhost:3000', 'APP_ENV=development', @@ -2775,11 +2790,6 @@ function renderScaffoldTsconfig(options: Pick): string | undefined { + if (options.framework !== 'nuxt' && options.framework !== 'sveltekit') { + return undefined + } + + const settings: Record = { + 'typescript.tsdk': 'node_modules/typescript/lib', + 'typescript.enablePromptUseWorkspaceTsdk': true, + } + + if (options.framework === 'nuxt') { + settings['vue.server.hybridMode'] = true + } + + return `${JSON.stringify(settings, null, 2)}\n` +} + function renderNuxtAppVue(projectName: string): string { return [ '', '', + '', + '', '