From fae70f6975b9b2712f2480b178a4a0ed5987184e Mon Sep 17 00:00:00 2001 From: Tim Date: Wed, 10 Jul 2024 18:20:40 +0200 Subject: [PATCH 01/10] initial commit --- docs/canary/examples/migration-guide.md | 2 +- init/src/init.ts | 2 +- src/context.ts | 8 +-- .../middlewares/error_overlay/middleware.tsx | 2 +- src/dev/middlewares/live_reload.ts | 6 +-- src/handlers.ts | 2 +- src/middlewares/mod.ts | 2 +- src/middlewares/static_files.ts | 8 +-- tests/partials_test.tsx | 10 ++-- update/src/maybePrependReqVar.ts | 2 +- update/src/update.ts | 20 ++++---- update/src/update_test.ts | 50 +++++++++---------- www/routes/_middleware.ts | 2 +- www/routes/index.tsx | 8 +-- www/routes/raw.ts | 2 +- www/routes/update.tsx | 4 +- 16 files changed, 65 insertions(+), 65 deletions(-) diff --git a/docs/canary/examples/migration-guide.md b/docs/canary/examples/migration-guide.md index 1366f3c747c..54e80cd8833 100644 --- a/docs/canary/examples/migration-guide.md +++ b/docs/canary/examples/migration-guide.md @@ -196,7 +196,7 @@ have a trailing slash at the end or that they will never have one. Middleware, handler and route component signatures have been unified to all look the same. Instead of receiving two arguments, they receive one. The `Request` -object is stored on the context object as `ctx.req`. +object is stored on the context object as `ctx.request`. ```diff - const middleware = (req, ctx) => new Response("ok"); diff --git a/init/src/init.ts b/init/src/init.ts index d3b76b8b4f5..32f992c580c 100644 --- a/init/src/init.ts +++ b/init/src/init.ts @@ -385,7 +385,7 @@ app.get("/api2/:name", (ctx) => { // this can also be defined via a file. feel free to delete this! const exampleLoggerMiddleware = define.middleware((ctx) => { - console.log(\`\${ctx.req.method} \${ctx.req.url}\`); + console.log(\`\${ctx.request.method} \${ctx.request.url}\`); return ctx.next(); }); app.use(exampleLoggerMiddleware); diff --git a/src/context.ts b/src/context.ts index 12e00adac2e..5c5a5cc4972 100644 --- a/src/context.ts +++ b/src/context.ts @@ -33,7 +33,7 @@ export interface FreshContext { readonly config: ResolvedFreshConfig; readonly state: State; /** The original incoming `Request` object` */ - readonly req: Request; + readonly request: Request; /** * The request url parsed into an `URL` instance. This is typically used * to apply logic based on the pathname of the incoming url or when @@ -90,7 +90,7 @@ export class FreshReqContext implements FreshContext, PageProps { config: ResolvedFreshConfig; url: URL; - req: Request; + request: Request; params: Record; state: State = {} as State; data: unknown = undefined; @@ -110,7 +110,7 @@ export class FreshReqContext } constructor( - req: Request, + request: Request, url: URL, info: Deno.ServeHandlerInfo | Deno.ServeUnixHandlerInfo, params: Record, @@ -120,7 +120,7 @@ export class FreshReqContext buildCache: BuildCache, ) { this.url = url; - this.req = req; + this.request = request; this.info = info; this.params = params; this.config = config; diff --git a/src/dev/middlewares/error_overlay/middleware.tsx b/src/dev/middlewares/error_overlay/middleware.tsx index b4aa91ab219..c1f2283e06d 100644 --- a/src/dev/middlewares/error_overlay/middleware.tsx +++ b/src/dev/middlewares/error_overlay/middleware.tsx @@ -14,7 +14,7 @@ export function devErrorOverlay(): MiddlewareFn { try { return await ctx.next(); } catch (err) { - if (ctx.req.headers.get("accept")?.includes("text/html")) { + if (ctx.request.headers.get("accept")?.includes("text/html")) { let init: ResponseInit | undefined; if (err instanceof HttpError) { if (err.status < 500) throw err; diff --git a/src/dev/middlewares/live_reload.ts b/src/dev/middlewares/live_reload.ts index 8e182e420d4..fd33bc45908 100644 --- a/src/dev/middlewares/live_reload.ts +++ b/src/dev/middlewares/live_reload.ts @@ -6,12 +6,12 @@ export function liveReload(): MiddlewareFn { const revision = Date.now(); return (ctx) => { - const { config, req, url } = ctx; + const { config, request, url } = ctx; const aliveUrl = config.basePath + ALIVE_URL; if (url.pathname === aliveUrl) { - if (req.headers.get("upgrade") !== "websocket") { + if (request.headers.get("upgrade") !== "websocket") { return new Response(null, { status: 501 }); } @@ -20,7 +20,7 @@ export function liveReload(): MiddlewareFn { // the client to know when the server is back up. Once we // have HMR we'll actively start sending messages back // and forth. - const { response, socket } = Deno.upgradeWebSocket(req); + const { response, socket } = Deno.upgradeWebSocket(request); socket.addEventListener("open", () => { socket.send( diff --git a/src/handlers.ts b/src/handlers.ts index e459595170a..407831474eb 100644 --- a/src/handlers.ts +++ b/src/handlers.ts @@ -89,7 +89,7 @@ export function page(data?: T, options?: { * * ```ts * export const handlers = define.handlers((ctx) => { - * return new Response(`Hello from a ${ctx.req.method} request!`); + * return new Response(`Hello from a ${ctx.request.method} request!`); * }); * ``` */ diff --git a/src/middlewares/mod.ts b/src/middlewares/mod.ts index e6ae6cefd1a..e389477d9c2 100644 --- a/src/middlewares/mod.ts +++ b/src/middlewares/mod.ts @@ -41,7 +41,7 @@ import type { Define as _Define } from "../define.ts"; * // checking and code completion. It does not register the middleware with the * // app. * const loggerMiddleware = define.middleware((ctx) => { - * console.log(`${ctx.req.method} ${ctx.req.url}`); + * console.log(`${ctx.request.method} ${ctx.request.url}`); * // Call the next middleware * return ctx.next(); * }); diff --git a/src/middlewares/static_files.ts b/src/middlewares/static_files.ts index a21f7cb2bf2..b119f9145be 100644 --- a/src/middlewares/static_files.ts +++ b/src/middlewares/static_files.ts @@ -14,7 +14,7 @@ import { getBuildCache } from "../context.ts"; */ export function staticFiles(): MiddlewareFn { return async function freshStaticFiles(ctx) { - const { req, url, config } = ctx; + const { request, url, config } = ctx; const buildCache = getBuildCache(ctx); let pathname = url.pathname; @@ -34,7 +34,7 @@ export function staticFiles(): MiddlewareFn { return ctx.next(); } - if (req.method !== "GET" && req.method !== "HEAD") { + if (request.method !== "GET" && request.method !== "HEAD") { file.close(); return new Response("Method Not Allowed", { status: 405 }); } @@ -67,7 +67,7 @@ export function staticFiles(): MiddlewareFn { "no-cache, no-store, max-age=0, must-revalidate", ); } else { - const ifNoneMatch = req.headers.get("If-None-Match"); + const ifNoneMatch = request.headers.get("If-None-Match"); if ( ifNoneMatch !== null && (ifNoneMatch === etag || ifNoneMatch === `W/"${etag}"`) @@ -80,7 +80,7 @@ export function staticFiles(): MiddlewareFn { } headers.set("Content-Length", String(file.size)); - if (req.method === "HEAD") { + if (request.method === "HEAD") { file.close(); return new Response(null, { status: 200, headers }); } diff --git a/tests/partials_test.tsx b/tests/partials_test.tsx index 7dfc15e8eda..2bce959d65d 100644 --- a/tests/partials_test.tsx +++ b/tests/partials_test.tsx @@ -1500,7 +1500,7 @@ Deno.test({ fn: async () => { const app = testApp() .post("/partial", async (ctx) => { - const data = await ctx.req.formData(); + const data = await ctx.request.formData(); const name = data.get("name"); const submitter = data.get("submitter"); return ctx.render( @@ -1557,7 +1557,7 @@ Deno.test({ ); }) .post("/partial", async (ctx) => { - const data = await ctx.req.formData(); + const data = await ctx.request.formData(); const name = String(data.get("name")); return new Response(null, { @@ -1602,7 +1602,7 @@ Deno.test({ fn: async () => { const app = testApp() .post("/partial", async (ctx) => { - const data = await ctx.req.formData(); + const data = await ctx.request.formData(); const name = data.get("name"); const submitter = data.get("submitter"); return ctx.render( @@ -1661,7 +1661,7 @@ Deno.test({ fn: async () => { const app = testApp() .post("/partial", async (ctx) => { - const data = await ctx.req.formData(); + const data = await ctx.request.formData(); const name = data.get("name"); const submitter = data.get("submitter"); return ctx.render( @@ -1722,7 +1722,7 @@ Deno.test({ fn: async () => { const app = testApp() .post("/partial", async (ctx) => { - const data = await ctx.req.formData(); + const data = await ctx.request.formData(); const name = data.get("name"); const submitter = data.get("submitter"); return ctx.render( diff --git a/update/src/maybePrependReqVar.ts b/update/src/maybePrependReqVar.ts index c9da8770938..f99ee6d6081 100644 --- a/update/src/maybePrependReqVar.ts +++ b/update/src/maybePrependReqVar.ts @@ -64,7 +64,7 @@ export function maybePrependReqVar( declarationKind: tsmorph.VariableDeclarationKind.Const, declarations: [{ name: paramName, - initializer: "ctx.req", + initializer: "ctx.request", }], }); } diff --git a/update/src/update.ts b/update/src/update.ts index 724235f17e7..394a96d9471 100644 --- a/update/src/update.ts +++ b/update/src/update.ts @@ -151,7 +151,7 @@ async function updateFile(sourceFile: tsmorph.SourceFile): Promise { rewriteCtxMethods(stmts); } - maybePrependReqVar(property, newImports, true); + maybePrependRequestVar(property, newImports, true); } } else if (property.isKind(SyntaxKind.PropertyAssignment)) { const init = property.getInitializer(); @@ -166,7 +166,7 @@ async function updateFile(sourceFile: tsmorph.SourceFile): Promise { rewriteCtxMethods(stmts); } - maybePrependReqVar(init, newImports, true); + maybePrependRequestVar(init, newImports, true); } } } @@ -178,7 +178,7 @@ async function updateFile(sourceFile: tsmorph.SourceFile): Promise { rewriteCtxMethods(stmts); } - maybePrependReqVar(node, newImports, false); + maybePrependRequestVar(node, newImports, false); } } else if (name === "default" && decl.length > 0) { const caller = decl[0]; @@ -203,7 +203,7 @@ async function updateFile(sourceFile: tsmorph.SourceFile): Promise { rewriteCtxMethods(stmts); } - maybePrependReqVar(first, newImports, false); + maybePrependRequestVar(first, newImports, false); } } } @@ -215,7 +215,7 @@ async function updateFile(sourceFile: tsmorph.SourceFile): Promise { rewriteCtxMethods(stmts); } - maybePrependReqVar(caller, newImports, false); + maybePrependRequestVar(caller, newImports, false); } } } @@ -302,7 +302,7 @@ function removeEmptyImport(d: tsmorph.ImportDeclaration) { } } -function maybePrependReqVar( +function maybePrependRequestVar( method: | tsmorph.MethodDeclaration | tsmorph.FunctionDeclaration @@ -321,8 +321,8 @@ function maybePrependReqVar( hasInferredTypes = false; } - hasRequestVar = params.length > 1 || paramName === "req"; - if (hasRequestVar || paramName === "_req") { + hasRequestVar = params.length > 1 || paramName === "request"; + if (hasRequestVar || paramName === "_request") { if (hasRequestVar && params.length === 1) { params[0].replaceWithText("ctx"); if (!hasInferredTypes) { @@ -365,7 +365,7 @@ function maybePrependReqVar( declarationKind: tsmorph.VariableDeclarationKind.Const, declarations: [{ name: paramName, - initializer: "ctx.req", + initializer: "ctx.request", }], }); } @@ -387,7 +387,7 @@ function maybePrependReqVar( } if (hasRequestVar && !paramName.startsWith("_")) { const txt = maybeObjBinding.getFullText().slice(0, -2); - maybeObjBinding.replaceWithText(txt + ", req }"); + maybeObjBinding.replaceWithText(txt + ", request }"); } if (needsRemoteAddr) { diff --git a/update/src/update_test.ts b/update/src/update_test.ts index ec1d8540fab..9d3b2908f4e 100644 --- a/update/src/update_test.ts +++ b/update/src/update_test.ts @@ -150,7 +150,7 @@ interface State { export async function handler( ctx: FreshContext, ) { - const req = ctx.req; + const req = ctx.request; ctx.state.data = "myData"; ctx.state.url = req.url; @@ -177,7 +177,7 @@ Deno.test("update - 1.x project middlewares one arg", async () => { .toEqual(`import { FreshContext } from "fresh"; export async function handler(ctx: FreshContext) { - const req = ctx.req; + const req = ctx.request; return new Response("hello world from: " + req.url); }`); @@ -258,19 +258,19 @@ export const handler: Handlers = { export const handler: Handlers = { async GET(ctx) { - const req = ctx.req; + const req = ctx.request; }, async POST(ctx) { - const req = ctx.req; + const req = ctx.request; }, async PATCH(ctx) { - const req = ctx.req; + const req = ctx.request; }, async PUT(ctx) { - const req = ctx.req; + const req = ctx.request; }, async DELETE(ctx) { - const req = ctx.req; + const req = ctx.request; }, };`); expect(files["/routes/foo.tsx"]) @@ -289,19 +289,19 @@ export const handler: Handlers = { export const handler: Handlers = { async GET(ctx) { - const request = ctx.req; + const request = ctx.request; }, async POST(ctx) { - const request = ctx.req; + const request = ctx.request; }, async PATCH(ctx) { - const request = ctx.req; + const request = ctx.request; }, async PUT(ctx) { - const request = ctx.req; + const request = ctx.request; }, async DELETE(ctx) { - const request = ctx.req; + const request = ctx.request; }, };`); expect(files["/routes/name-unused.tsx"]) @@ -334,7 +334,7 @@ Deno.test( expect(files["/routes/index.tsx"]) .toEqual(`export const handler: Handlers = { GET(ctx) { - const req = ctx.req; + const req = ctx.request; return Response.redirect(req.url); }, @@ -361,7 +361,7 @@ Deno.test.ignore( expect(files["/routes/index.tsx"]) .toEqual(`export const handler: Handlers = { GET: (ctx) => { - const req = ctx.req; + const req = ctx.request; return Response.redirect(req.url); }, @@ -369,7 +369,7 @@ Deno.test.ignore( expect(files["/routes/foo.tsx"]) .toEqual(`export const handler: Handlers = { GET: (ctx) => { - const req = ctx.req; + const req = ctx.request; return Response.redirect(req.url); }, @@ -397,7 +397,7 @@ Deno.test( export const handler = { GET(ctx: FreshContext) { - const req = ctx.req; + const req = ctx.request; return Response.redirect(req.url); }, @@ -428,19 +428,19 @@ export const handler: Handlers = { .toEqual(`import { Handlers } from "fresh/compat"; export const handler: Handlers = { - async GET({ params, render, info, req }) { + async GET({ params, render, info, request }) { const remoteAddr = info.remoteAddr; }, - async POST({ params, render, info, req }) { + async POST({ params, render, info, request }) { const remoteAddr = info.remoteAddr; }, - async PATCH({ params, render, info, req }) { + async PATCH({ params, render, info, request }) { const remoteAddr = info.remoteAddr; }, - async PUT({ params, render, info, req }) { + async PUT({ params, render, info, request }) { const remoteAddr = info.remoteAddr; }, - async DELETE({ params, render, info, req }) { + async DELETE({ params, render, info, request }) { const remoteAddr = info.remoteAddr; }, };`); @@ -473,7 +473,7 @@ export default defineRoute(async (req, ctx) => { .toEqual(`import { defineApp } from "fresh/compat"; export default defineApp(async (ctx) => { - const req = ctx.req; + const req = ctx.request; return null; });`); @@ -481,7 +481,7 @@ export default defineApp(async (ctx) => { .toEqual(`import { defineLayout } from "fresh/compat"; export default defineLayout(async (ctx) => { - const req = ctx.req; + const req = ctx.request; return null; });`); @@ -489,7 +489,7 @@ export default defineLayout(async (ctx) => { .toEqual(`import { defineRoute } from "fresh/compat"; export default defineRoute(async (ctx) => { - const req = ctx.req; + const req = ctx.request; return null; });`); @@ -520,7 +520,7 @@ Deno.test( .toEqual(`import { FreshContext } from "fresh"; export default async function Index(ctx: FreshContext) { - const req = ctx.req; + const req = ctx.request; if (true) { return ctx.throw(404); diff --git a/www/routes/_middleware.ts b/www/routes/_middleware.ts index d407000e76f..f5245ea4a6e 100644 --- a/www/routes/_middleware.ts +++ b/www/routes/_middleware.ts @@ -106,7 +106,7 @@ export async function handler( throw e; } finally { ga4( - ctx.req, + ctx.request, ctx, res!, start, diff --git a/www/routes/index.tsx b/www/routes/index.tsx index 031eda5c278..ba523c6bbe5 100644 --- a/www/routes/index.tsx +++ b/www/routes/index.tsx @@ -16,9 +16,9 @@ import { define } from "../utils/state.ts"; export const handler = define.handlers({ GET(ctx) { - const { req } = ctx; - const accept = req.headers.get("accept"); - const userAgent = req.headers.get("user-agent"); + const { request } = ctx; + const accept = request.headers.get("accept"); + const userAgent = request.headers.get("user-agent"); if (userAgent?.includes("Deno/") && !accept?.includes("text/html")) { const path = `https://deno.land/x/fresh@${VERSIONS[0]}/init.ts`; return new Response(`Redirecting to ${path}`, { @@ -37,7 +37,7 @@ export const handler = define.handlers({ }, async POST(ctx) { const headers = new Headers(); - const form = await ctx.req.formData(); + const form = await ctx.request.formData(); const treat = form.get("treat"); headers.set("location", `/thanks?vote=${treat}`); return new Response(null, { diff --git a/www/routes/raw.ts b/www/routes/raw.ts index 503020a0273..fb393e57a51 100644 --- a/www/routes/raw.ts +++ b/www/routes/raw.ts @@ -18,7 +18,7 @@ const contentTypes = new Map([ export const handler = define.handlers({ async GET(ctx) { - const accept = ctx.req.headers.get("Accept"); + const accept = ctx.request.headers.get("Accept"); const isHTML = accept?.includes("text/html"); const { version, path } = ctx.params; diff --git a/www/routes/update.tsx b/www/routes/update.tsx index b36862b99d2..bd1a16399d3 100644 --- a/www/routes/update.tsx +++ b/www/routes/update.tsx @@ -2,8 +2,8 @@ import { define } from "../utils/state.ts"; import VERSIONS from "../../versions.json" with { type: "json" }; export const handler = define.handlers({ - GET({ req }) { - const accept = req.headers.get("accept"); + GET({ request }) { + const accept = request.headers.get("accept"); let path = "/docs/concepts/updating"; if (accept && !accept.includes("text/html")) { path = `https://deno.land/x/fresh@${VERSIONS[0]}/update.ts`; From 4666cfa54bd9b60653b8b381ffa6a1092820d00a Mon Sep 17 00:00:00 2001 From: Tim Date: Wed, 10 Jul 2024 22:02:41 +0200 Subject: [PATCH 02/10] update --- update/src/update.ts | 6 +++--- update/src/update_test.ts | 10 +++++----- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/update/src/update.ts b/update/src/update.ts index 394a96d9471..73683f27e68 100644 --- a/update/src/update.ts +++ b/update/src/update.ts @@ -321,8 +321,8 @@ function maybePrependRequestVar( hasInferredTypes = false; } - hasRequestVar = params.length > 1 || paramName === "request"; - if (hasRequestVar || paramName === "_request") { + hasRequestVar = params.length > 1 || paramName === "req"; + if (hasRequestVar || paramName === "_req") { if (hasRequestVar && params.length === 1) { params[0].replaceWithText("ctx"); if (!hasInferredTypes) { @@ -387,7 +387,7 @@ function maybePrependRequestVar( } if (hasRequestVar && !paramName.startsWith("_")) { const txt = maybeObjBinding.getFullText().slice(0, -2); - maybeObjBinding.replaceWithText(txt + ", request }"); + maybeObjBinding.replaceWithText(txt + ", req }"); } if (needsRemoteAddr) { diff --git a/update/src/update_test.ts b/update/src/update_test.ts index 9d3b2908f4e..98f9f197358 100644 --- a/update/src/update_test.ts +++ b/update/src/update_test.ts @@ -428,19 +428,19 @@ export const handler: Handlers = { .toEqual(`import { Handlers } from "fresh/compat"; export const handler: Handlers = { - async GET({ params, render, info, request }) { + async GET({ params, render, info, req }) { const remoteAddr = info.remoteAddr; }, - async POST({ params, render, info, request }) { + async POST({ params, render, info, req }) { const remoteAddr = info.remoteAddr; }, - async PATCH({ params, render, info, request }) { + async PATCH({ params, render, info, req }) { const remoteAddr = info.remoteAddr; }, - async PUT({ params, render, info, request }) { + async PUT({ params, render, info, req }) { const remoteAddr = info.remoteAddr; }, - async DELETE({ params, render, info, request }) { + async DELETE({ params, render, info, req }) { const remoteAddr = info.remoteAddr; }, };`); From 9171850530e4886f9209898acc453d21fe26ac8b Mon Sep 17 00:00:00 2001 From: Tim Date: Wed, 10 Jul 2024 22:03:29 +0200 Subject: [PATCH 03/10] update --- update/src/update.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/update/src/update.ts b/update/src/update.ts index 73683f27e68..f9909f5264c 100644 --- a/update/src/update.ts +++ b/update/src/update.ts @@ -151,7 +151,7 @@ async function updateFile(sourceFile: tsmorph.SourceFile): Promise { rewriteCtxMethods(stmts); } - maybePrependRequestVar(property, newImports, true); + maybePrependReqVar(property, newImports, true); } } else if (property.isKind(SyntaxKind.PropertyAssignment)) { const init = property.getInitializer(); @@ -166,7 +166,7 @@ async function updateFile(sourceFile: tsmorph.SourceFile): Promise { rewriteCtxMethods(stmts); } - maybePrependRequestVar(init, newImports, true); + maybePrependReqVar(init, newImports, true); } } } @@ -178,7 +178,7 @@ async function updateFile(sourceFile: tsmorph.SourceFile): Promise { rewriteCtxMethods(stmts); } - maybePrependRequestVar(node, newImports, false); + maybePrependReqVar(node, newImports, false); } } else if (name === "default" && decl.length > 0) { const caller = decl[0]; @@ -203,7 +203,7 @@ async function updateFile(sourceFile: tsmorph.SourceFile): Promise { rewriteCtxMethods(stmts); } - maybePrependRequestVar(first, newImports, false); + maybePrependReqVar(first, newImports, false); } } } @@ -215,7 +215,7 @@ async function updateFile(sourceFile: tsmorph.SourceFile): Promise { rewriteCtxMethods(stmts); } - maybePrependRequestVar(caller, newImports, false); + maybePrependReqVar(caller, newImports, false); } } } @@ -302,7 +302,7 @@ function removeEmptyImport(d: tsmorph.ImportDeclaration) { } } -function maybePrependRequestVar( +function maybePrependReqVar( method: | tsmorph.MethodDeclaration | tsmorph.FunctionDeclaration From bfb315b073b01a90a714172c20dc1382e053bb1f Mon Sep 17 00:00:00 2001 From: Tim Date: Sun, 10 Nov 2024 13:01:42 +0100 Subject: [PATCH 04/10] update --- src/middlewares/static_files.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/middlewares/static_files.ts b/src/middlewares/static_files.ts index 0ea351971b1..60f290ab741 100644 --- a/src/middlewares/static_files.ts +++ b/src/middlewares/static_files.ts @@ -61,7 +61,7 @@ export function staticFiles(): MiddlewareFn { vary: "If-None-Match", }); - const ifNoneMatch = req.headers.get("If-None-Match"); + const ifNoneMatch = request.headers.get("If-None-Match"); if ( ifNoneMatch !== null && (ifNoneMatch === etag || ifNoneMatch === `W/"${etag}"`) From d7d041014bdc1087b1b5002b6e6b9c0c77a65d63 Mon Sep 17 00:00:00 2001 From: Tim Date: Thu, 12 Dec 2024 11:15:09 +0100 Subject: [PATCH 05/10] add req deprecation --- src/context.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/context.ts b/src/context.ts index 77e27e6427b..0ea43103126 100644 --- a/src/context.ts +++ b/src/context.ts @@ -36,6 +36,8 @@ export interface FreshContext { readonly state: State; /** The original incoming `Request` object` */ readonly request: Request; + /** @deprecated This is an alias for internal use only. Use {@linkcode FreshContext[request]} instead. */ + readonly req: Request; /** * The request url parsed into an `URL` instance. This is typically used * to apply logic based on the pathname of the incoming url or when @@ -93,6 +95,8 @@ export class FreshReqContext config: ResolvedFreshConfig; url: URL; request: Request; + /** @deprecated This is an alias for internal use only. Use {@linkcode FreshReqContext[request]} instead. */ + req: Request; params: Record; state: State = {} as State; data: unknown = undefined; @@ -123,6 +127,7 @@ export class FreshReqContext ) { this.url = url; this.request = request; + this.req = request; this.info = info; this.params = params; this.config = config; From ccdf6b67cac65e69ac588a74b9baec0547c92a7d Mon Sep 17 00:00:00 2001 From: Tim Date: Mon, 28 Apr 2025 08:27:18 +0200 Subject: [PATCH 06/10] update --- src/middlewares/static_files.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/middlewares/static_files.ts b/src/middlewares/static_files.ts index 0ce842242a0..a7d3b597e71 100644 --- a/src/middlewares/static_files.ts +++ b/src/middlewares/static_files.ts @@ -43,7 +43,7 @@ export function staticFiles(): MiddlewareFn { const parentSpan = trace.getActiveSpan(); if (parentSpan) { - parentSpan.updateName(`${req.method} /*`); + parentSpan.updateName(`${request.method} /*`); parentSpan.setAttribute("http.route", "/*"); } From 84096645c2e5c23f5c89b22087529aea68a8ced6 Mon Sep 17 00:00:00 2001 From: Tim Date: Wed, 7 May 2025 21:11:13 +0200 Subject: [PATCH 07/10] Merge branch 'main' into rename-FreshContext-req-to-request --- .github/workflows/ci.yml | 3 + deno.json | 5 +- deno.lock | 1430 ++++++++++++++++- init/src/init.ts | 15 +- init/src/init_test.ts | 8 +- src/build_cache.ts | 4 +- src/config.ts | 5 +- src/constants.ts | 2 - src/dev/dev_build_cache.ts | 4 +- src/dev/middlewares/error_overlay/overlay.tsx | 164 +- src/error.ts | 61 + src/mod.ts | 1 - src/runtime/server/mod.ts | 4 - tests/active_links_test.tsx | 4 - tests/islands_test.tsx | 42 - tests/partials_test.tsx | 98 -- tests/precompile_test.ts | 41 +- tests/test_utils.tsx | 103 +- tools/check_docs.ts | 5 + update/src/maybePrependReqVar.ts | 105 -- www/utils/screenshot.ts | 40 +- 21 files changed, 1640 insertions(+), 504 deletions(-) delete mode 100644 src/runtime/server/mod.ts create mode 100644 tools/check_docs.ts delete mode 100644 update/src/maybePrependReqVar.ts diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 53a2bd304bd..31a2871b99d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -50,3 +50,6 @@ jobs: - name: Run tests run: deno task test + + - name: Check docs + run: deno task check:docs diff --git a/deno.json b/deno.json index 37f273215ea..8df3e470f58 100644 --- a/deno.json +++ b/deno.json @@ -22,6 +22,7 @@ "build-www": "deno task --cwd=www build", "screenshot": "deno run -A www/utils/screenshot.ts", "check:types": "deno check src/**/*.ts src/**/*.tsx tests/**/*.ts tests/**/*.tsx update/**/*.ts plugin-tailwindcss/**/*.ts init/**/*.ts", + "check:docs": "deno run -A tools/check_docs.ts", "ok": "deno fmt --check && deno lint && deno task check:types && deno task test", "test:www": "deno test -A www/main_test.*", "release": "deno run -A tools/release.ts" @@ -40,6 +41,8 @@ "exclude": ["**/*_test.*", "src/__OLD/**", "*.todo"] }, "imports": { + "@deno/doc": "jsr:@deno/doc@^0.172.0", + "@std/collections": "jsr:@std/collections@^1.0.11", "@std/http": "jsr:@std/http@^1.0.15", "fresh": "jsr:@fresh/core@^2.0.0-alpha.26", "preact": "npm:preact@^10.25.1", @@ -62,7 +65,7 @@ "@std/semver": "jsr:@std/semver@1", "@std/streams": "jsr:@std/streams@1", - "@astral/astral": "jsr:@astral/astral@^0.4.6", + "@astral/astral": "jsr:@astral/astral@^0.5.2", "@marvinh-test/fresh-island": "jsr:@marvinh-test/fresh-island@^0.0.1", "linkedom": "npm:linkedom@^0.16.11", "@std/async": "jsr:@std/async@1", diff --git a/deno.lock b/deno.lock index 4e2f5008594..5e30ab51502 100644 --- a/deno.lock +++ b/deno.lock @@ -1,26 +1,188 @@ { - "version": "4", + "version": "5", "specifiers": { + "jsr:@astral/astral@~0.5.2": "0.5.2", + "jsr:@deno-library/progress@^1.5.1": "1.5.1", + "jsr:@deno/cache-dir@0.14": "0.14.0", + "jsr:@deno/doc@0.172": "0.172.0", + "jsr:@deno/otel@*": "0.0.2", + "jsr:@fresh/core@^2.0.0-alpha.26": "2.0.0-alpha.29", + "jsr:@luca/esbuild-deno-loader@0.11": "0.11.1", + "jsr:@marvinh-test/fresh-island@*": "0.0.1", + "jsr:@marvinh-test/fresh-island@^0.0.1": "0.0.1", "jsr:@std/assert@^1.0.12": "1.0.13", + "jsr:@std/async@1": "1.0.12", + "jsr:@std/bytes@^1.0.2": "1.0.5", + "jsr:@std/bytes@^1.0.5": "1.0.5", + "jsr:@std/cli@^1.0.17": "1.0.17", + "jsr:@std/collections@^1.0.11": "1.0.11", + "jsr:@std/crypto@1": "1.0.4", + "jsr:@std/data-structures@^1.0.6": "1.0.7", + "jsr:@std/datetime@~0.225.2": "0.225.4", + "jsr:@std/encoding@1": "1.0.10", + "jsr:@std/encoding@^1.0.10": "1.0.10", + "jsr:@std/encoding@^1.0.5": "1.0.10", "jsr:@std/expect@1": "1.0.15", + "jsr:@std/fmt@1": "1.0.7", + "jsr:@std/fmt@1.0.3": "1.0.3", + "jsr:@std/fmt@^1.0.3": "1.0.7", + "jsr:@std/fmt@^1.0.7": "1.0.7", + "jsr:@std/front-matter@^1.0.5": "1.0.9", + "jsr:@std/fs@1": "1.0.17", + "jsr:@std/fs@^1.0.16": "1.0.17", + "jsr:@std/fs@^1.0.6": "1.0.17", + "jsr:@std/html@1": "1.0.3", + "jsr:@std/html@^1.0.3": "1.0.3", "jsr:@std/http@^1.0.15": "1.0.15", "jsr:@std/internal@^1.0.6": "1.0.6", + "jsr:@std/io@0.225": "0.225.0", + "jsr:@std/io@0.225.0": "0.225.0", + "jsr:@std/json@^1.0.2": "1.0.2", + "jsr:@std/jsonc@1": "1.0.2", + "jsr:@std/media-types@1": "1.1.0", + "jsr:@std/media-types@^1.1.0": "1.1.0", + "jsr:@std/net@^1.0.4": "1.0.4", + "jsr:@std/path@1": "1.0.9", + "jsr:@std/path@^1.0.6": "1.0.9", + "jsr:@std/path@^1.0.8": "1.0.9", + "jsr:@std/path@^1.0.9": "1.0.9", + "jsr:@std/semver@1": "1.0.5", + "jsr:@std/streams@1": "1.0.9", + "jsr:@std/streams@^1.0.9": "1.0.9", + "jsr:@std/testing@1": "1.0.11", + "jsr:@std/toml@^1.0.3": "1.0.5", + "jsr:@std/yaml@^1.0.5": "1.0.6", + "jsr:@zip-js/zip-js@^2.7.52": "2.7.60", + "npm:@opentelemetry/api@1": "1.9.0", "npm:@opentelemetry/api@^1.9.0": "1.9.0", + "npm:@opentelemetry/sdk-trace-base@1": "1.30.1_@opentelemetry+api@1.9.0", "npm:@preact/signals@^1.2.3": "1.3.2_preact@10.26.5", + "npm:@preact/signals@^1.3.0": "1.3.2_preact@10.26.5", "npm:@types/node@*": "22.12.0", + "npm:autoprefixer@10.4.17": "10.4.17_postcss@8.4.35", + "npm:cssnano@6.0.3": "6.0.3_postcss@8.4.35", "npm:esbuild-wasm@0.23.1": "0.23.1", "npm:esbuild@0.23.1": "0.23.1", + "npm:github-slugger@2": "2.0.0", "npm:linkedom@~0.16.11": "0.16.11", + "npm:marked-mangle@^1.1.9": "1.1.10_marked@14.1.4", + "npm:marked@^14.1.2": "14.1.4", + "npm:postcss@8.4.35": "8.4.35", "npm:preact-render-to-string@^6.5.11": "6.5.13_preact@10.26.5", - "npm:preact@^10.25.1": "10.26.5" + "npm:preact@^10.22.0": "10.26.5", + "npm:preact@^10.24.1": "10.26.5", + "npm:preact@^10.25.1": "10.26.5", + "npm:prismjs@^1.29.0": "1.30.0", + "npm:tailwindcss@^3.4.1": "3.4.17_postcss@8.5.3", + "npm:ts-morph@22": "22.0.0" }, "jsr": { + "@astral/astral@0.5.2": { + "integrity": "dc4b7e0ea5d8186fcd9e33e2c54e62913d7eb99d5a2d4f987b1c5399d8e295de", + "dependencies": [ + "jsr:@deno-library/progress", + "jsr:@std/async", + "jsr:@std/fs@1", + "jsr:@std/path@1", + "jsr:@zip-js/zip-js" + ] + }, + "@deno-library/progress@1.5.1": { + "integrity": "966611826b8bb27baae73ab1c4fa4317cd4edd2abb99750cd6f8488d22d5b121", + "dependencies": [ + "jsr:@std/fmt@1.0.3", + "jsr:@std/io@0.225.0" + ] + }, + "@deno/cache-dir@0.14.0": { + "integrity": "729f0b68e7fc96443c09c2c544b830ca70897bdd5168598446d752f7a4c731ad", + "dependencies": [ + "jsr:@std/fmt@^1.0.3", + "jsr:@std/fs@^1.0.6", + "jsr:@std/io@0.225", + "jsr:@std/path@^1.0.8" + ] + }, + "@deno/doc@0.172.0": { + "integrity": "72a68ed533576a06feb930a84784ad9ba6d83ca9d581fc734d498c58e32b7cf5", + "dependencies": [ + "jsr:@deno/cache-dir" + ] + }, + "@deno/otel@0.0.2": { + "integrity": "4ef61b7eb1c4063f8224d66fc43f25e428a566d2e18785d0dc67bb70a318f0ff", + "dependencies": [ + "npm:@opentelemetry/api@1", + "npm:@opentelemetry/sdk-trace-base" + ] + }, + "@fresh/core@2.0.0-alpha.29": { + "integrity": "5374a478c2d407da2a84a9802e00da2305de2945b0934e6a7b24a989a7b82e0f", + "dependencies": [ + "jsr:@luca/esbuild-deno-loader", + "jsr:@std/crypto", + "jsr:@std/datetime", + "jsr:@std/encoding@1", + "jsr:@std/fmt@1", + "jsr:@std/fs@1", + "jsr:@std/html@1", + "jsr:@std/jsonc", + "jsr:@std/media-types@1", + "jsr:@std/path@1", + "jsr:@std/semver", + "npm:@opentelemetry/api@^1.9.0", + "npm:esbuild", + "npm:esbuild-wasm", + "npm:preact-render-to-string", + "npm:preact@^10.25.1" + ] + }, + "@luca/esbuild-deno-loader@0.11.1": { + "integrity": "dc020d16d75b591f679f6b9288b10f38bdb4f24345edb2f5732affa1d9885267", + "dependencies": [ + "jsr:@std/bytes@^1.0.2", + "jsr:@std/encoding@^1.0.5", + "jsr:@std/path@^1.0.6" + ] + }, + "@marvinh-test/fresh-island@0.0.1": { + "integrity": "890f2595e60b1aaeaa8d73c6ad2c1247d4c5b895387df230f7f3b2a4da29b585", + "dependencies": [ + "npm:@preact/signals@^1.2.3", + "npm:preact@^10.22.0", + "npm:preact@^10.25.1" + ] + }, "@std/assert@1.0.13": { "integrity": "ae0d31e41919b12c656c742b22522c32fb26ed0cba32975cb0de2a273cb68b29", "dependencies": [ "jsr:@std/internal" ] }, + "@std/async@1.0.12": { + "integrity": "d1bfcec459e8012846fe4e38dfc4241ab23240ecda3d8d6dfcf6d81a632e803d" + }, + "@std/bytes@1.0.5": { + "integrity": "4465dd739d7963d964c809202ebea6d5c6b8e3829ef25c6a224290fbb8a1021e" + }, + "@std/cli@1.0.17": { + "integrity": "e15b9abe629e17be90cc6216327f03a29eae613365f1353837fa749aad29ce7b" + }, + "@std/collections@1.0.11": { + "integrity": "2f62cf9587484b1fff364f6c3e1f83478eea53dbb6faed6ffeda92ddb6b172f0" + }, + "@std/crypto@1.0.4": { + "integrity": "cee245c453bd5366207f4d8aa25ea3e9c86cecad2be3fefcaa6cb17203d79340" + }, + "@std/data-structures@1.0.7": { + "integrity": "16932d2c8d281f65eaaa2209af2473209881e33b1ced54cd1b015e7b4cdbb0d2" + }, + "@std/datetime@0.225.4": { + "integrity": "682bc21738b941a4ed1465be6da01704e8010a3a6d9b615de9458202b84e00ec" + }, + "@std/encoding@1.0.10": { + "integrity": "8783c6384a2d13abd5e9e87a7ae0520a30e9f56aeeaa3bdf910a3eaaf5c811a1" + }, "@std/expect@1.0.15": { "integrity": "eca360007b5a7f13dbfa1294224baee7fb98dcd460d8461fe64eeae302902945", "dependencies": [ @@ -28,89 +190,309 @@ "jsr:@std/internal" ] }, + "@std/fmt@1.0.3": { + "integrity": "97765c16aa32245ff4e2204ecf7d8562496a3cb8592340a80e7e554e0bb9149f" + }, + "@std/fmt@1.0.7": { + "integrity": "2a727c043d8df62cd0b819b3fb709b64dd622e42c3b1bb817ea7e6cc606360fb" + }, + "@std/front-matter@1.0.9": { + "integrity": "ee6201d06674cbef137dda2252f62477450b48249e7d8d9ab57a30f85ff6f051", + "dependencies": [ + "jsr:@std/toml", + "jsr:@std/yaml" + ] + }, + "@std/fs@1.0.17": { + "integrity": "1c00c632677c1158988ef7a004cb16137f870aafdb8163b9dce86ec652f3952b", + "dependencies": [ + "jsr:@std/path@^1.0.9" + ] + }, + "@std/html@1.0.3": { + "integrity": "7a0ac35e050431fb49d44e61c8b8aac1ebd55937e0dc9ec6409aa4bab39a7988" + }, "@std/http@1.0.15": { - "integrity": "435a4934b4e196e82a8233f724da525f7b7112f3566502f28815e94764c19159" + "integrity": "435a4934b4e196e82a8233f724da525f7b7112f3566502f28815e94764c19159", + "dependencies": [ + "jsr:@std/cli", + "jsr:@std/encoding@^1.0.10", + "jsr:@std/fmt@^1.0.7", + "jsr:@std/html@^1.0.3", + "jsr:@std/media-types@^1.1.0", + "jsr:@std/net", + "jsr:@std/path@^1.0.9", + "jsr:@std/streams@^1.0.9" + ] }, "@std/internal@1.0.6": { "integrity": "9533b128f230f73bd209408bb07a4b12f8d4255ab2a4d22a1fd6d87304aca9a4" + }, + "@std/io@0.225.0": { + "integrity": "c1db7c5e5a231629b32d64b9a53139445b2ca640d828c26bf23e1c55f8c079b3", + "dependencies": [ + "jsr:@std/bytes@^1.0.2" + ] + }, + "@std/json@1.0.2": { + "integrity": "d9e5497801c15fb679f55a2c01c7794ad7a5dfda4dd1bebab5e409cb5e0d34d4" + }, + "@std/jsonc@1.0.2": { + "integrity": "909605dae3af22bd75b1cbda8d64a32cf1fd2cf6efa3f9e224aba6d22c0f44c7", + "dependencies": [ + "jsr:@std/json" + ] + }, + "@std/media-types@1.1.0": { + "integrity": "c9d093f0c05c3512932b330e3cc1fe1d627b301db33a4c2c2185c02471d6eaa4" + }, + "@std/net@1.0.4": { + "integrity": "2f403b455ebbccf83d8a027d29c5a9e3a2452fea39bb2da7f2c04af09c8bc852" + }, + "@std/path@1.0.9": { + "integrity": "260a49f11edd3db93dd38350bf9cd1b4d1366afa98e81b86167b4e3dd750129e" + }, + "@std/semver@1.0.5": { + "integrity": "529f79e83705714c105ad0ba55bec0f9da0f24d2f726b6cc1c15e505cc2c0624" + }, + "@std/streams@1.0.9": { + "integrity": "a9d26b1988cdd7aa7b1f4b51e1c36c1557f3f252880fa6cc5b9f37078b1a5035", + "dependencies": [ + "jsr:@std/bytes@^1.0.5" + ] + }, + "@std/testing@1.0.11": { + "integrity": "12b3db12d34f0f385a26248933bde766c0f8c5ad8b6ab34d4d38f528ab852f48", + "dependencies": [ + "jsr:@std/assert", + "jsr:@std/data-structures", + "jsr:@std/fs@^1.0.16", + "jsr:@std/internal", + "jsr:@std/path@^1.0.8" + ] + }, + "@std/toml@1.0.5": { + "integrity": "08061156e9c5716443a144b6e40a8668738b8b424ad99ab0b6fdf1b6ea4da806", + "dependencies": [ + "jsr:@std/collections" + ] + }, + "@std/yaml@1.0.6": { + "integrity": "c9a5a914e1d51c46756cb10e356710035cfa905e713c90d3b711413fd3aead27" + }, + "@zip-js/zip-js@2.7.60": { + "integrity": "6bb6cf0d02b64ca9acba8c7bc072293609ec3bad584db2b5cf3bb089e031ea0e" } }, "npm": { + "@alloc/quick-lru@5.2.0": { + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==" + }, "@esbuild/aix-ppc64@0.23.1": { - "integrity": "sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==" + "integrity": "sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==", + "os": ["aix"], + "cpu": ["ppc64"] }, "@esbuild/android-arm64@0.23.1": { - "integrity": "sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==" + "integrity": "sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==", + "os": ["android"], + "cpu": ["arm64"] }, "@esbuild/android-arm@0.23.1": { - "integrity": "sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==" + "integrity": "sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==", + "os": ["android"], + "cpu": ["arm"] }, "@esbuild/android-x64@0.23.1": { - "integrity": "sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==" + "integrity": "sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==", + "os": ["android"], + "cpu": ["x64"] }, "@esbuild/darwin-arm64@0.23.1": { - "integrity": "sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==" + "integrity": "sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==", + "os": ["darwin"], + "cpu": ["arm64"] }, "@esbuild/darwin-x64@0.23.1": { - "integrity": "sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==" + "integrity": "sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==", + "os": ["darwin"], + "cpu": ["x64"] }, "@esbuild/freebsd-arm64@0.23.1": { - "integrity": "sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==" + "integrity": "sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==", + "os": ["freebsd"], + "cpu": ["arm64"] }, "@esbuild/freebsd-x64@0.23.1": { - "integrity": "sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==" + "integrity": "sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==", + "os": ["freebsd"], + "cpu": ["x64"] }, "@esbuild/linux-arm64@0.23.1": { - "integrity": "sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==" + "integrity": "sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==", + "os": ["linux"], + "cpu": ["arm64"] }, "@esbuild/linux-arm@0.23.1": { - "integrity": "sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==" + "integrity": "sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==", + "os": ["linux"], + "cpu": ["arm"] }, "@esbuild/linux-ia32@0.23.1": { - "integrity": "sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==" + "integrity": "sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==", + "os": ["linux"], + "cpu": ["ia32"] }, "@esbuild/linux-loong64@0.23.1": { - "integrity": "sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==" + "integrity": "sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==", + "os": ["linux"], + "cpu": ["loong64"] }, "@esbuild/linux-mips64el@0.23.1": { - "integrity": "sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==" + "integrity": "sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==", + "os": ["linux"], + "cpu": ["mips64el"] }, "@esbuild/linux-ppc64@0.23.1": { - "integrity": "sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==" + "integrity": "sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==", + "os": ["linux"], + "cpu": ["ppc64"] }, "@esbuild/linux-riscv64@0.23.1": { - "integrity": "sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==" + "integrity": "sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==", + "os": ["linux"], + "cpu": ["riscv64"] }, "@esbuild/linux-s390x@0.23.1": { - "integrity": "sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==" + "integrity": "sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==", + "os": ["linux"], + "cpu": ["s390x"] }, "@esbuild/linux-x64@0.23.1": { - "integrity": "sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==" + "integrity": "sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==", + "os": ["linux"], + "cpu": ["x64"] }, "@esbuild/netbsd-x64@0.23.1": { - "integrity": "sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==" + "integrity": "sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==", + "os": ["netbsd"], + "cpu": ["x64"] }, "@esbuild/openbsd-arm64@0.23.1": { - "integrity": "sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==" + "integrity": "sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==", + "os": ["openbsd"], + "cpu": ["arm64"] }, "@esbuild/openbsd-x64@0.23.1": { - "integrity": "sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==" + "integrity": "sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==", + "os": ["openbsd"], + "cpu": ["x64"] }, "@esbuild/sunos-x64@0.23.1": { - "integrity": "sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==" + "integrity": "sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==", + "os": ["sunos"], + "cpu": ["x64"] }, "@esbuild/win32-arm64@0.23.1": { - "integrity": "sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==" + "integrity": "sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==", + "os": ["win32"], + "cpu": ["arm64"] }, "@esbuild/win32-ia32@0.23.1": { - "integrity": "sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==" + "integrity": "sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==", + "os": ["win32"], + "cpu": ["ia32"] }, "@esbuild/win32-x64@0.23.1": { - "integrity": "sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==" + "integrity": "sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==", + "os": ["win32"], + "cpu": ["x64"] + }, + "@isaacs/cliui@8.0.2": { + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dependencies": [ + "string-width@5.1.2", + "string-width-cjs@npm:string-width@4.2.3", + "strip-ansi@7.1.0", + "strip-ansi-cjs@npm:strip-ansi@6.0.1", + "wrap-ansi@8.1.0", + "wrap-ansi-cjs@npm:wrap-ansi@7.0.0" + ] + }, + "@jridgewell/gen-mapping@0.3.8": { + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "dependencies": [ + "@jridgewell/set-array", + "@jridgewell/sourcemap-codec", + "@jridgewell/trace-mapping" + ] + }, + "@jridgewell/resolve-uri@3.1.2": { + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==" + }, + "@jridgewell/set-array@1.2.1": { + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==" + }, + "@jridgewell/sourcemap-codec@1.5.0": { + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" + }, + "@jridgewell/trace-mapping@0.3.25": { + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dependencies": [ + "@jridgewell/resolve-uri", + "@jridgewell/sourcemap-codec" + ] + }, + "@nodelib/fs.scandir@2.1.5": { + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dependencies": [ + "@nodelib/fs.stat", + "run-parallel" + ] + }, + "@nodelib/fs.stat@2.0.5": { + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" + }, + "@nodelib/fs.walk@1.2.8": { + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dependencies": [ + "@nodelib/fs.scandir", + "fastq" + ] }, "@opentelemetry/api@1.9.0": { "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==" }, + "@opentelemetry/core@1.30.1_@opentelemetry+api@1.9.0": { + "integrity": "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==", + "dependencies": [ + "@opentelemetry/api", + "@opentelemetry/semantic-conventions" + ] + }, + "@opentelemetry/resources@1.30.1_@opentelemetry+api@1.9.0": { + "integrity": "sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA==", + "dependencies": [ + "@opentelemetry/api", + "@opentelemetry/core", + "@opentelemetry/semantic-conventions" + ] + }, + "@opentelemetry/sdk-trace-base@1.30.1_@opentelemetry+api@1.9.0": { + "integrity": "sha512-jVPgBbH1gCy2Lb7X0AVQ8XAfgg0pJ4nvl8/IiQA6nxOsPvS+0zMJaFSs2ltXe0J6C8dqjcnpyqINDJmU30+uOg==", + "dependencies": [ + "@opentelemetry/api", + "@opentelemetry/core", + "@opentelemetry/resources", + "@opentelemetry/semantic-conventions" + ] + }, + "@opentelemetry/semantic-conventions@1.28.0": { + "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==" + }, + "@pkgjs/parseargs@0.11.0": { + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==" + }, "@preact/signals-core@1.8.0": { "integrity": "sha512-OBvUsRZqNmjzCZXWLxkZfhcgT+Fk8DDcT/8vD6a1xhDemodyy87UJRJfASMuSD8FaAIeGgGm85ydXhm7lr4fyA==" }, @@ -121,15 +503,161 @@ "preact" ] }, + "@trysound/sax@0.2.0": { + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==" + }, + "@ts-morph/common@0.23.0": { + "integrity": "sha512-m7Lllj9n/S6sOkCkRftpM7L24uvmfXQFedlW/4hENcuJH1HHm9u5EgxZb9uVjQSCGrbBWBkOGgcTxNg36r6ywA==", + "dependencies": [ + "fast-glob", + "minimatch", + "mkdirp", + "path-browserify" + ] + }, "@types/node@22.12.0": { "integrity": "sha512-Fll2FZ1riMjNmlmJOdAyY5pUbkftXslB5DgEzlIuNaiWhXd00FhWxVC/r4yV/4wBb9JfImTu+jiSvXTkJ7F/gA==", "dependencies": [ "undici-types" ] }, + "ansi-regex@5.0.1": { + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "ansi-regex@6.1.0": { + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==" + }, + "ansi-styles@4.3.0": { + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": [ + "color-convert" + ] + }, + "ansi-styles@6.2.1": { + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==" + }, + "any-promise@1.3.0": { + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" + }, + "anymatch@3.1.3": { + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": [ + "normalize-path", + "picomatch" + ] + }, + "arg@5.0.2": { + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" + }, + "autoprefixer@10.4.17_postcss@8.4.35": { + "integrity": "sha512-/cpVNRLSfhOtcGflT13P2794gVSgmPgTR+erw5ifnMLZb0UnSlkK4tquLmkd3BhA+nLo5tX8Cu0upUsGKvKbmg==", + "dependencies": [ + "browserslist", + "caniuse-lite", + "fraction.js", + "normalize-range", + "picocolors", + "postcss@8.4.35", + "postcss-value-parser" + ], + "bin": true + }, + "balanced-match@1.0.2": { + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "binary-extensions@2.3.0": { + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==" + }, "boolbase@1.0.0": { "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" }, + "brace-expansion@2.0.1": { + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": [ + "balanced-match" + ] + }, + "braces@3.0.3": { + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dependencies": [ + "fill-range" + ] + }, + "browserslist@4.24.4": { + "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", + "dependencies": [ + "caniuse-lite", + "electron-to-chromium", + "node-releases", + "update-browserslist-db" + ], + "bin": true + }, + "camelcase-css@2.0.1": { + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==" + }, + "caniuse-api@3.0.0": { + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dependencies": [ + "browserslist", + "caniuse-lite", + "lodash.memoize", + "lodash.uniq" + ] + }, + "caniuse-lite@1.0.30001715": { + "integrity": "sha512-7ptkFGMm2OAOgvZpwgA4yjQ5SQbrNVGdRjzH0pBdy1Fasvcr+KAeECmbCAECzTuDuoX0FCY8KzUxjf9+9kfZEw==" + }, + "chokidar@3.6.0": { + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dependencies": [ + "anymatch", + "braces", + "glob-parent@5.1.2", + "is-binary-path", + "is-glob", + "normalize-path", + "readdirp" + ], + "optionalDependencies": [ + "fsevents" + ] + }, + "code-block-writer@13.0.3": { + "integrity": "sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg==" + }, + "color-convert@2.0.1": { + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": [ + "color-name" + ] + }, + "color-name@1.1.4": { + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "colord@2.9.3": { + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==" + }, + "commander@4.1.1": { + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==" + }, + "commander@7.2.0": { + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" + }, + "cross-spawn@7.0.6": { + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dependencies": [ + "path-key", + "shebang-command", + "which" + ] + }, + "css-declaration-sorter@7.2.0_postcss@8.4.35": { + "integrity": "sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==", + "dependencies": [ + "postcss@8.4.35" + ] + }, "css-select@5.1.0": { "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", "dependencies": [ @@ -140,12 +668,92 @@ "nth-check" ] }, + "css-tree@2.2.1": { + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "dependencies": [ + "mdn-data@2.0.28", + "source-map-js" + ] + }, + "css-tree@2.3.1": { + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "dependencies": [ + "mdn-data@2.0.30", + "source-map-js" + ] + }, "css-what@6.1.0": { "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==" }, + "cssesc@3.0.0": { + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "bin": true + }, + "cssnano-preset-default@6.1.2_postcss@8.4.35": { + "integrity": "sha512-1C0C+eNaeN8OcHQa193aRgYexyJtU8XwbdieEjClw+J9d94E41LwT6ivKH0WT+fYwYWB0Zp3I3IZ7tI/BbUbrg==", + "dependencies": [ + "browserslist", + "css-declaration-sorter", + "cssnano-utils", + "postcss@8.4.35", + "postcss-calc", + "postcss-colormin", + "postcss-convert-values", + "postcss-discard-comments", + "postcss-discard-duplicates", + "postcss-discard-empty", + "postcss-discard-overridden", + "postcss-merge-longhand", + "postcss-merge-rules", + "postcss-minify-font-values", + "postcss-minify-gradients", + "postcss-minify-params", + "postcss-minify-selectors", + "postcss-normalize-charset", + "postcss-normalize-display-values", + "postcss-normalize-positions", + "postcss-normalize-repeat-style", + "postcss-normalize-string", + "postcss-normalize-timing-functions", + "postcss-normalize-unicode", + "postcss-normalize-url", + "postcss-normalize-whitespace", + "postcss-ordered-values", + "postcss-reduce-initial", + "postcss-reduce-transforms", + "postcss-svgo", + "postcss-unique-selectors" + ] + }, + "cssnano-utils@4.0.2_postcss@8.4.35": { + "integrity": "sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ==", + "dependencies": [ + "postcss@8.4.35" + ] + }, + "cssnano@6.0.3_postcss@8.4.35": { + "integrity": "sha512-MRq4CIj8pnyZpcI2qs6wswoYoDD1t0aL28n+41c1Ukcpm56m1h6mCexIHBGjfZfnTqtGSSCP4/fB1ovxgjBOiw==", + "dependencies": [ + "cssnano-preset-default", + "lilconfig", + "postcss@8.4.35" + ] + }, + "csso@5.0.5": { + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "dependencies": [ + "css-tree@2.2.1" + ] + }, "cssom@0.5.0": { "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==" }, + "didyoumean@1.2.2": { + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" + }, + "dlv@1.1.3": { + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" + }, "dom-serializer@2.0.0": { "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", "dependencies": [ @@ -171,15 +779,28 @@ "domhandler" ] }, + "eastasianwidth@0.2.0": { + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, + "electron-to-chromium@1.5.142": { + "integrity": "sha512-Ah2HgkTu/9RhTDNThBtzu2Wirdy4DC9b0sMT1pUhbkZQ5U/iwmE+PHZX1MpjD5IkJCc2wSghgGG/B04szAx07w==" + }, + "emoji-regex@8.0.0": { + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "emoji-regex@9.2.2": { + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, "entities@4.5.0": { "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==" }, "esbuild-wasm@0.23.1": { - "integrity": "sha512-L3vn7ctvBrtScRfoB0zG1eOCiV4xYvpLYWfe6PDZuV+iDFDm4Mt3xeLIDllG8cDHQ8clUouK3XekulE+cxgkgw==" + "integrity": "sha512-L3vn7ctvBrtScRfoB0zG1eOCiV4xYvpLYWfe6PDZuV+iDFDm4Mt3xeLIDllG8cDHQ8clUouK3XekulE+cxgkgw==", + "bin": true }, "esbuild@0.23.1": { "integrity": "sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==", - "dependencies": [ + "optionalDependencies": [ "@esbuild/aix-ppc64", "@esbuild/android-arm", "@esbuild/android-arm64", @@ -204,6 +825,84 @@ "@esbuild/win32-arm64", "@esbuild/win32-ia32", "@esbuild/win32-x64" + ], + "scripts": true, + "bin": true + }, + "escalade@3.2.0": { + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==" + }, + "fast-glob@3.3.3": { + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dependencies": [ + "@nodelib/fs.stat", + "@nodelib/fs.walk", + "glob-parent@5.1.2", + "merge2", + "micromatch" + ] + }, + "fastq@1.19.1": { + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dependencies": [ + "reusify" + ] + }, + "fill-range@7.1.1": { + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dependencies": [ + "to-regex-range" + ] + }, + "foreground-child@3.3.1": { + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dependencies": [ + "cross-spawn", + "signal-exit" + ] + }, + "fraction.js@4.3.7": { + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==" + }, + "fsevents@2.3.3": { + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "os": ["darwin"], + "scripts": true + }, + "function-bind@1.1.2": { + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" + }, + "github-slugger@2.0.0": { + "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==" + }, + "glob-parent@5.1.2": { + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": [ + "is-glob" + ] + }, + "glob-parent@6.0.2": { + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dependencies": [ + "is-glob" + ] + }, + "glob@10.4.5": { + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dependencies": [ + "foreground-child", + "jackspeak", + "minimatch", + "minipass", + "package-json-from-dist", + "path-scurry" + ], + "bin": true + }, + "hasown@2.0.2": { + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": [ + "function-bind" ] }, "html-escaper@3.0.3": { @@ -218,6 +917,55 @@ "entities" ] }, + "is-binary-path@2.1.0": { + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": [ + "binary-extensions" + ] + }, + "is-core-module@2.16.1": { + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dependencies": [ + "hasown" + ] + }, + "is-extglob@2.1.1": { + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + }, + "is-fullwidth-code-point@3.0.0": { + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "is-glob@4.0.3": { + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": [ + "is-extglob" + ] + }, + "is-number@7.0.0": { + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "isexe@2.0.0": { + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "jackspeak@3.4.3": { + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dependencies": [ + "@isaacs/cliui" + ], + "optionalDependencies": [ + "@pkgjs/parseargs" + ] + }, + "jiti@1.21.7": { + "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", + "bin": true + }, + "lilconfig@3.1.3": { + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==" + }, + "lines-and-columns@1.2.4": { + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, "linkedom@0.16.11": { "integrity": "sha512-WgaTVbj7itjyXTsCvgerpneERXShcnNJF5VIV+/4SLtyRLN+HppPre/WDHRofAr2IpEuujSNgJbCBd5lMl6lRw==", "dependencies": [ @@ -228,12 +976,379 @@ "uhyphen" ] }, + "lodash.memoize@4.1.2": { + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" + }, + "lodash.uniq@4.5.0": { + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" + }, + "lru-cache@10.4.3": { + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" + }, + "marked-mangle@1.1.10_marked@14.1.4": { + "integrity": "sha512-TrpN67SMJJdzXXWIzOd/QmnpsC5o1B44PUYaG2bh1XEbqVjA0UCI2ijFuE5LWESwKeI2gCP5FqcUHRGQwFtDIA==", + "dependencies": [ + "marked" + ] + }, + "marked@14.1.4": { + "integrity": "sha512-vkVZ8ONmUdPnjCKc5uTRvmkRbx4EAi2OkTOXmfTDhZz3OFqMNBM1oTTWwTr4HY4uAEojhzPf+Fy8F1DWa3Sndg==", + "bin": true + }, + "mdn-data@2.0.28": { + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==" + }, + "mdn-data@2.0.30": { + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==" + }, + "merge2@1.4.1": { + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + }, + "micromatch@4.0.8": { + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dependencies": [ + "braces", + "picomatch" + ] + }, + "minimatch@9.0.5": { + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dependencies": [ + "brace-expansion" + ] + }, + "minipass@7.1.2": { + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==" + }, + "mkdirp@3.0.1": { + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "bin": true + }, + "mz@2.7.0": { + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dependencies": [ + "any-promise", + "object-assign", + "thenify-all" + ] + }, + "nanoid@3.3.11": { + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "bin": true + }, + "node-releases@2.0.19": { + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==" + }, + "normalize-path@3.0.0": { + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "normalize-range@0.1.2": { + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==" + }, "nth-check@2.1.1": { "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", "dependencies": [ "boolbase" ] }, + "object-assign@4.1.1": { + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" + }, + "object-hash@3.0.0": { + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==" + }, + "package-json-from-dist@1.0.1": { + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==" + }, + "path-browserify@1.0.1": { + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==" + }, + "path-key@3.1.1": { + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + }, + "path-parse@1.0.7": { + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "path-scurry@1.11.1": { + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dependencies": [ + "lru-cache", + "minipass" + ] + }, + "picocolors@1.1.1": { + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" + }, + "picomatch@2.3.1": { + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + }, + "pify@2.3.0": { + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" + }, + "pirates@4.0.7": { + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==" + }, + "postcss-calc@9.0.1_postcss@8.4.35": { + "integrity": "sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==", + "dependencies": [ + "postcss@8.4.35", + "postcss-selector-parser", + "postcss-value-parser" + ] + }, + "postcss-colormin@6.1.0_postcss@8.4.35": { + "integrity": "sha512-x9yX7DOxeMAR+BgGVnNSAxmAj98NX/YxEMNFP+SDCEeNLb2r3i6Hh1ksMsnW8Ub5SLCpbescQqn9YEbE9554Sw==", + "dependencies": [ + "browserslist", + "caniuse-api", + "colord", + "postcss@8.4.35", + "postcss-value-parser" + ] + }, + "postcss-convert-values@6.1.0_postcss@8.4.35": { + "integrity": "sha512-zx8IwP/ts9WvUM6NkVSkiU902QZL1bwPhaVaLynPtCsOTqp+ZKbNi+s6XJg3rfqpKGA/oc7Oxk5t8pOQJcwl/w==", + "dependencies": [ + "browserslist", + "postcss@8.4.35", + "postcss-value-parser" + ] + }, + "postcss-discard-comments@6.0.2_postcss@8.4.35": { + "integrity": "sha512-65w/uIqhSBBfQmYnG92FO1mWZjJ4GL5b8atm5Yw2UgrwD7HiNiSSNwJor1eCFGzUgYnN/iIknhNRVqjrrpuglw==", + "dependencies": [ + "postcss@8.4.35" + ] + }, + "postcss-discard-duplicates@6.0.3_postcss@8.4.35": { + "integrity": "sha512-+JA0DCvc5XvFAxwx6f/e68gQu/7Z9ud584VLmcgto28eB8FqSFZwtrLwB5Kcp70eIoWP/HXqz4wpo8rD8gpsTw==", + "dependencies": [ + "postcss@8.4.35" + ] + }, + "postcss-discard-empty@6.0.3_postcss@8.4.35": { + "integrity": "sha512-znyno9cHKQsK6PtxL5D19Fj9uwSzC2mB74cpT66fhgOadEUPyXFkbgwm5tvc3bt3NAy8ltE5MrghxovZRVnOjQ==", + "dependencies": [ + "postcss@8.4.35" + ] + }, + "postcss-discard-overridden@6.0.2_postcss@8.4.35": { + "integrity": "sha512-j87xzI4LUggC5zND7KdjsI25APtyMuynXZSujByMaav2roV6OZX+8AaCUcZSWqckZpjAjRyFDdpqybgjFO0HJQ==", + "dependencies": [ + "postcss@8.4.35" + ] + }, + "postcss-import@15.1.0_postcss@8.5.3": { + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dependencies": [ + "postcss@8.5.3", + "postcss-value-parser", + "read-cache", + "resolve" + ] + }, + "postcss-js@4.0.1_postcss@8.5.3": { + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dependencies": [ + "camelcase-css", + "postcss@8.5.3" + ] + }, + "postcss-load-config@4.0.2_postcss@8.5.3": { + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "dependencies": [ + "lilconfig", + "postcss@8.5.3", + "yaml" + ], + "optionalPeers": [ + "postcss@8.5.3" + ] + }, + "postcss-merge-longhand@6.0.5_postcss@8.4.35": { + "integrity": "sha512-5LOiordeTfi64QhICp07nzzuTDjNSO8g5Ksdibt44d+uvIIAE1oZdRn8y/W5ZtYgRH/lnLDlvi9F8btZcVzu3w==", + "dependencies": [ + "postcss@8.4.35", + "postcss-value-parser", + "stylehacks" + ] + }, + "postcss-merge-rules@6.1.1_postcss@8.4.35": { + "integrity": "sha512-KOdWF0gju31AQPZiD+2Ar9Qjowz1LTChSjFFbS+e2sFgc4uHOp3ZvVX4sNeTlk0w2O31ecFGgrFzhO0RSWbWwQ==", + "dependencies": [ + "browserslist", + "caniuse-api", + "cssnano-utils", + "postcss@8.4.35", + "postcss-selector-parser" + ] + }, + "postcss-minify-font-values@6.1.0_postcss@8.4.35": { + "integrity": "sha512-gklfI/n+9rTh8nYaSJXlCo3nOKqMNkxuGpTn/Qm0gstL3ywTr9/WRKznE+oy6fvfolH6dF+QM4nCo8yPLdvGJg==", + "dependencies": [ + "postcss@8.4.35", + "postcss-value-parser" + ] + }, + "postcss-minify-gradients@6.0.3_postcss@8.4.35": { + "integrity": "sha512-4KXAHrYlzF0Rr7uc4VrfwDJ2ajrtNEpNEuLxFgwkhFZ56/7gaE4Nr49nLsQDZyUe+ds+kEhf+YAUolJiYXF8+Q==", + "dependencies": [ + "colord", + "cssnano-utils", + "postcss@8.4.35", + "postcss-value-parser" + ] + }, + "postcss-minify-params@6.1.0_postcss@8.4.35": { + "integrity": "sha512-bmSKnDtyyE8ujHQK0RQJDIKhQ20Jq1LYiez54WiaOoBtcSuflfK3Nm596LvbtlFcpipMjgClQGyGr7GAs+H1uA==", + "dependencies": [ + "browserslist", + "cssnano-utils", + "postcss@8.4.35", + "postcss-value-parser" + ] + }, + "postcss-minify-selectors@6.0.4_postcss@8.4.35": { + "integrity": "sha512-L8dZSwNLgK7pjTto9PzWRoMbnLq5vsZSTu8+j1P/2GB8qdtGQfn+K1uSvFgYvgh83cbyxT5m43ZZhUMTJDSClQ==", + "dependencies": [ + "postcss@8.4.35", + "postcss-selector-parser" + ] + }, + "postcss-nested@6.2.0_postcss@8.5.3": { + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "dependencies": [ + "postcss@8.5.3", + "postcss-selector-parser" + ] + }, + "postcss-normalize-charset@6.0.2_postcss@8.4.35": { + "integrity": "sha512-a8N9czmdnrjPHa3DeFlwqst5eaL5W8jYu3EBbTTkI5FHkfMhFZh1EGbku6jhHhIzTA6tquI2P42NtZ59M/H/kQ==", + "dependencies": [ + "postcss@8.4.35" + ] + }, + "postcss-normalize-display-values@6.0.2_postcss@8.4.35": { + "integrity": "sha512-8H04Mxsb82ON/aAkPeq8kcBbAtI5Q2a64X/mnRRfPXBq7XeogoQvReqxEfc0B4WPq1KimjezNC8flUtC3Qz6jg==", + "dependencies": [ + "postcss@8.4.35", + "postcss-value-parser" + ] + }, + "postcss-normalize-positions@6.0.2_postcss@8.4.35": { + "integrity": "sha512-/JFzI441OAB9O7VnLA+RtSNZvQ0NCFZDOtp6QPFo1iIyawyXg0YI3CYM9HBy1WvwCRHnPep/BvI1+dGPKoXx/Q==", + "dependencies": [ + "postcss@8.4.35", + "postcss-value-parser" + ] + }, + "postcss-normalize-repeat-style@6.0.2_postcss@8.4.35": { + "integrity": "sha512-YdCgsfHkJ2jEXwR4RR3Tm/iOxSfdRt7jplS6XRh9Js9PyCR/aka/FCb6TuHT2U8gQubbm/mPmF6L7FY9d79VwQ==", + "dependencies": [ + "postcss@8.4.35", + "postcss-value-parser" + ] + }, + "postcss-normalize-string@6.0.2_postcss@8.4.35": { + "integrity": "sha512-vQZIivlxlfqqMp4L9PZsFE4YUkWniziKjQWUtsxUiVsSSPelQydwS8Wwcuw0+83ZjPWNTl02oxlIvXsmmG+CiQ==", + "dependencies": [ + "postcss@8.4.35", + "postcss-value-parser" + ] + }, + "postcss-normalize-timing-functions@6.0.2_postcss@8.4.35": { + "integrity": "sha512-a+YrtMox4TBtId/AEwbA03VcJgtyW4dGBizPl7e88cTFULYsprgHWTbfyjSLyHeBcK/Q9JhXkt2ZXiwaVHoMzA==", + "dependencies": [ + "postcss@8.4.35", + "postcss-value-parser" + ] + }, + "postcss-normalize-unicode@6.1.0_postcss@8.4.35": { + "integrity": "sha512-QVC5TQHsVj33otj8/JD869Ndr5Xcc/+fwRh4HAsFsAeygQQXm+0PySrKbr/8tkDKzW+EVT3QkqZMfFrGiossDg==", + "dependencies": [ + "browserslist", + "postcss@8.4.35", + "postcss-value-parser" + ] + }, + "postcss-normalize-url@6.0.2_postcss@8.4.35": { + "integrity": "sha512-kVNcWhCeKAzZ8B4pv/DnrU1wNh458zBNp8dh4y5hhxih5RZQ12QWMuQrDgPRw3LRl8mN9vOVfHl7uhvHYMoXsQ==", + "dependencies": [ + "postcss@8.4.35", + "postcss-value-parser" + ] + }, + "postcss-normalize-whitespace@6.0.2_postcss@8.4.35": { + "integrity": "sha512-sXZ2Nj1icbJOKmdjXVT9pnyHQKiSAyuNQHSgRCUgThn2388Y9cGVDR+E9J9iAYbSbLHI+UUwLVl1Wzco/zgv0Q==", + "dependencies": [ + "postcss@8.4.35", + "postcss-value-parser" + ] + }, + "postcss-ordered-values@6.0.2_postcss@8.4.35": { + "integrity": "sha512-VRZSOB+JU32RsEAQrO94QPkClGPKJEL/Z9PCBImXMhIeK5KAYo6slP/hBYlLgrCjFxyqvn5VC81tycFEDBLG1Q==", + "dependencies": [ + "cssnano-utils", + "postcss@8.4.35", + "postcss-value-parser" + ] + }, + "postcss-reduce-initial@6.1.0_postcss@8.4.35": { + "integrity": "sha512-RarLgBK/CrL1qZags04oKbVbrrVK2wcxhvta3GCxrZO4zveibqbRPmm2VI8sSgCXwoUHEliRSbOfpR0b/VIoiw==", + "dependencies": [ + "browserslist", + "caniuse-api", + "postcss@8.4.35" + ] + }, + "postcss-reduce-transforms@6.0.2_postcss@8.4.35": { + "integrity": "sha512-sB+Ya++3Xj1WaT9+5LOOdirAxP7dJZms3GRcYheSPi1PiTMigsxHAdkrbItHxwYHr4kt1zL7mmcHstgMYT+aiA==", + "dependencies": [ + "postcss@8.4.35", + "postcss-value-parser" + ] + }, + "postcss-selector-parser@6.1.2": { + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dependencies": [ + "cssesc", + "util-deprecate" + ] + }, + "postcss-svgo@6.0.3_postcss@8.4.35": { + "integrity": "sha512-dlrahRmxP22bX6iKEjOM+c8/1p+81asjKT+V5lrgOH944ryx/OHpclnIbGsKVd3uWOXFLYJwCVf0eEkJGvO96g==", + "dependencies": [ + "postcss@8.4.35", + "postcss-value-parser", + "svgo" + ] + }, + "postcss-unique-selectors@6.0.4_postcss@8.4.35": { + "integrity": "sha512-K38OCaIrO8+PzpArzkLKB42dSARtC2tmG6PvD4b1o1Q2E9Os8jzfWFfSy/rixsHwohtsDdFtAWGjFVFUdwYaMg==", + "dependencies": [ + "postcss@8.4.35", + "postcss-selector-parser" + ] + }, + "postcss-value-parser@4.2.0": { + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + }, + "postcss@8.4.35": { + "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", + "dependencies": [ + "nanoid", + "picocolors", + "source-map-js" + ] + }, + "postcss@8.5.3": { + "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", + "dependencies": [ + "nanoid", + "picocolors", + "source-map-js" + ] + }, "preact-render-to-string@6.5.13_preact@10.26.5": { "integrity": "sha512-iGPd+hKPMFKsfpR2vL4kJ6ZPcFIoWZEcBf0Dpm3zOpdVvj77aY8RlLiQji5OMrngEyaxGogeakTb54uS2FvA6w==", "dependencies": [ @@ -243,20 +1358,275 @@ "preact@10.26.5": { "integrity": "sha512-fmpDkgfGU6JYux9teDWLhj9mKN55tyepwYbxHgQuIxbWQzgFg5vk7Mrrtfx7xRxq798ynkY4DDDxZr235Kk+4w==" }, + "prismjs@1.30.0": { + "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==" + }, + "queue-microtask@1.2.3": { + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + }, + "read-cache@1.0.0": { + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dependencies": [ + "pify" + ] + }, + "readdirp@3.6.0": { + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": [ + "picomatch" + ] + }, + "resolve@1.22.10": { + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "dependencies": [ + "is-core-module", + "path-parse", + "supports-preserve-symlinks-flag" + ], + "bin": true + }, + "reusify@1.1.0": { + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==" + }, + "run-parallel@1.2.0": { + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dependencies": [ + "queue-microtask" + ] + }, + "shebang-command@2.0.0": { + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": [ + "shebang-regex" + ] + }, + "shebang-regex@3.0.0": { + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + }, + "signal-exit@4.1.0": { + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==" + }, + "source-map-js@1.2.1": { + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==" + }, + "string-width@4.2.3": { + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": [ + "emoji-regex@8.0.0", + "is-fullwidth-code-point", + "strip-ansi@6.0.1" + ] + }, + "string-width@5.1.2": { + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": [ + "eastasianwidth", + "emoji-regex@9.2.2", + "strip-ansi@7.1.0" + ] + }, + "strip-ansi@6.0.1": { + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": [ + "ansi-regex@5.0.1" + ] + }, + "strip-ansi@7.1.0": { + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": [ + "ansi-regex@6.1.0" + ] + }, + "stylehacks@6.1.1_postcss@8.4.35": { + "integrity": "sha512-gSTTEQ670cJNoaeIp9KX6lZmm8LJ3jPB5yJmX8Zq/wQxOsAFXV3qjWzHas3YYk1qesuVIyYWWUpZ0vSE/dTSGg==", + "dependencies": [ + "browserslist", + "postcss@8.4.35", + "postcss-selector-parser" + ] + }, + "sucrase@3.35.0": { + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "dependencies": [ + "@jridgewell/gen-mapping", + "commander@4.1.1", + "glob", + "lines-and-columns", + "mz", + "pirates", + "ts-interface-checker" + ], + "bin": true + }, + "supports-preserve-symlinks-flag@1.0.0": { + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + }, + "svgo@3.3.2": { + "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==", + "dependencies": [ + "@trysound/sax", + "commander@7.2.0", + "css-select", + "css-tree@2.3.1", + "css-what", + "csso", + "picocolors" + ], + "bin": true + }, + "tailwindcss@3.4.17_postcss@8.5.3": { + "integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==", + "dependencies": [ + "@alloc/quick-lru", + "arg", + "chokidar", + "didyoumean", + "dlv", + "fast-glob", + "glob-parent@6.0.2", + "is-glob", + "jiti", + "lilconfig", + "micromatch", + "normalize-path", + "object-hash", + "picocolors", + "postcss@8.5.3", + "postcss-import", + "postcss-js", + "postcss-load-config", + "postcss-nested", + "postcss-selector-parser", + "resolve", + "sucrase" + ], + "bin": true + }, + "thenify-all@1.6.0": { + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dependencies": [ + "thenify" + ] + }, + "thenify@3.3.1": { + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dependencies": [ + "any-promise" + ] + }, + "to-regex-range@5.0.1": { + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": [ + "is-number" + ] + }, + "ts-interface-checker@0.1.13": { + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" + }, + "ts-morph@22.0.0": { + "integrity": "sha512-M9MqFGZREyeb5fTl6gNHKZLqBQA0TjA1lea+CR48R8EBTDuWrNqW6ccC5QvjNR4s6wDumD3LTCjOFSp9iwlzaw==", + "dependencies": [ + "@ts-morph/common", + "code-block-writer" + ] + }, "uhyphen@0.2.0": { "integrity": "sha512-qz3o9CHXmJJPGBdqzab7qAYuW8kQGKNEuoHFYrBwV6hWIMcpAmxDLXojcHfFr9US1Pe6zUswEIJIbLI610fuqA==" }, "undici-types@6.20.0": { "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==" + }, + "update-browserslist-db@1.1.3_browserslist@4.24.4": { + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "dependencies": [ + "browserslist", + "escalade", + "picocolors" + ], + "bin": true + }, + "util-deprecate@1.0.2": { + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "which@2.0.2": { + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": [ + "isexe" + ], + "bin": true + }, + "wrap-ansi@7.0.0": { + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": [ + "ansi-styles@4.3.0", + "string-width@4.2.3", + "strip-ansi@6.0.1" + ] + }, + "wrap-ansi@8.1.0": { + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dependencies": [ + "ansi-styles@6.2.1", + "string-width@5.1.2", + "strip-ansi@7.1.0" + ] + }, + "yaml@2.7.1": { + "integrity": "sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ==", + "bin": true } }, + "redirects": { + "https://esm.sh/@types/react@~19.0.7/index.d.ts": "https://esm.sh/@types/react@19.0.14/index.d.ts" + }, + "remote": { + "https://deno.land/std@0.120.0/async/deadline.ts": "1d6ac7aeaee22f75eb86e4e105d6161118aad7b41ae2dd14f4cfd3bf97472b93", + "https://deno.land/std@0.120.0/async/debounce.ts": "b2f693e4baa16b62793fd618de6c003b63228db50ecfe3bd51fc5f6dc0bc264b", + "https://deno.land/std@0.120.0/async/deferred.ts": "ab60d46ba561abb3b13c0c8085d05797a384b9f182935f051dc67136817acdee", + "https://deno.land/std@0.120.0/async/delay.ts": "f2d8ccaa8ebc26594bd8b0989edfd8a96257a714c1dee2fb54d986e5bdd840ac", + "https://deno.land/std@0.120.0/async/mod.ts": "78425176fabea7bd1046ce3819fd69ce40da85c83e0f174d17e8e224a91f7d10", + "https://deno.land/std@0.120.0/async/mux_async_iterator.ts": "62abff3af9ff619e8f2adc96fc70d4ca020fa48a50c23c13f12d02ed2b760dbe", + "https://deno.land/std@0.120.0/async/pool.ts": "353ce4f91865da203a097aa6f33de8966340c91b6f4a055611c8c5d534afd12f", + "https://deno.land/std@0.120.0/async/tee.ts": "3e9f2ef6b36e55188de16a667c702ace4ad0cf84e3720379160e062bf27348ad", + "https://deno.land/std@0.120.0/http/http_status.ts": "2ff185827bff21c7be2807fcb09a6a2166464ba57fcd94afe805abab8e09070a", + "https://deno.land/std@0.120.0/http/server.ts": "d0be8a9da160255623e645f5b515fa1c6b65eecfbb9cad87ef8002d4f8d56616", + "https://deno.land/std@0.143.0/_util/assert.ts": "e94f2eb37cebd7f199952e242c77654e43333c1ac4c5c700e929ea3aa5489f74", + "https://deno.land/std@0.143.0/datetime/formatter.ts": "7c8e6d16a0950f400aef41b9f1eb9168249869776ec520265dfda785d746589e", + "https://deno.land/std@0.143.0/datetime/mod.ts": "dcab9ae7be83cbf74b7863e83bd16e7c646a8dea2f019092905630eb7a545739", + "https://deno.land/std@0.143.0/datetime/tokenizer.ts": "7381e28f6ab51cb504c7e132be31773d73ef2f3e1e50a812736962b9df1e8c47", + "https://deno.land/std@0.143.0/http/cookie.ts": "526f27762fad7bf84fbe491de7eba7c406057501eec6edcad7884a16b242fddf", + "https://deno.land/std@0.93.0/_util/assert.ts": "2f868145a042a11d5ad0a3c748dcf580add8a0dbc0e876eaa0026303a5488f58", + "https://deno.land/std@0.93.0/_util/os.ts": "e282950a0eaa96760c0cf11e7463e66babd15ec9157d4c9ed49cc0925686f6a7", + "https://deno.land/std@0.93.0/fs/walk.ts": "8d37f2164a7397668842a7cb5d53b9e7bcd216462623b1b96abe519f76d7f8b9", + "https://deno.land/std@0.93.0/path/_constants.ts": "1247fee4a79b70c89f23499691ef169b41b6ccf01887a0abd131009c5581b853", + "https://deno.land/std@0.93.0/path/_interface.ts": "1fa73b02aaa24867e481a48492b44f2598cd9dfa513c7b34001437007d3642e4", + "https://deno.land/std@0.93.0/path/_util.ts": "2e06a3b9e79beaf62687196bd4b60a4c391d862cfa007a20fc3a39f778ba073b", + "https://deno.land/std@0.93.0/path/common.ts": "eaf03d08b569e8a87e674e4e265e099f237472b6fd135b3cbeae5827035ea14a", + "https://deno.land/std@0.93.0/path/glob.ts": "4a524c1c9da3e79a9fdabdc6e850cd9e41bdf31e442856ffa19c5b123268ca95", + "https://deno.land/std@0.93.0/path/mod.ts": "4465dc494f271b02569edbb4a18d727063b5dbd6ed84283ff906260970a15d12", + "https://deno.land/std@0.93.0/path/posix.ts": "f56c3c99feb47f30a40ce9d252ef6f00296fa7c0fcb6dd81211bdb3b8b99ca3b", + "https://deno.land/std@0.93.0/path/separator.ts": "8fdcf289b1b76fd726a508f57d3370ca029ae6976fcde5044007f062e643ff1c", + "https://deno.land/std@0.93.0/path/win32.ts": "77f7b3604e0de40f3a7c698e8a79e7f601dc187035a1c21cb1e596666ce112f8", + "https://deno.land/x/case@2.1.1/lowerCase.ts": "86d5533f9587ed60003181591e40e648838c23f371edfa79d00288153d113b16", + "https://deno.land/x/case@2.1.1/normalCase.ts": "6a8b924da9ab0790d99233ae54bfcfc996d229cb91b2533639fe20972cc33dac", + "https://deno.land/x/case@2.1.1/snakeCase.ts": "ee2ab4e2c931d30bb79190d090c21eb5c00d1de1b7a9a3e7f33e035ae431333b", + "https://deno.land/x/case@2.1.1/types.ts": "8e2bd6edaa27c0d1972c0d5b76698564740f37b4d3787d58d1fb5f48de611e61", + "https://deno.land/x/case@2.1.1/vendor/camelCaseRegexp.ts": "7d9ff02aad4ab6429eeab7c7353f7bcdd6cc5909a8bd3dda97918c8bbb7621ae", + "https://deno.land/x/case@2.1.1/vendor/camelCaseUpperRegexp.ts": "292de54a698370f90adcdf95727993d09888b7f33d17f72f8e54ba75f7791787", + "https://deno.land/x/case@2.1.1/vendor/nonWordRegexp.ts": "c1a052629a694144b48c66b0175a22a83f4d61cb40f4e45293fc5d6b123f927e", + "https://esm.sh/@docsearch/js@3.5.2/es2020/js.mjs": "9b278cf3c0b26feded7d8efeac8e2b50f76bbafcf173a95002944bcc3482830a", + "https://esm.sh/@docsearch/js@3.5.2?target=es2020": "4bad084f771a1923fe042ece62a9078f482f8642cb0b1acb890905e58586fee7", + "https://raw.githubusercontent.com/denoland/ga4/main/mod.ts": "36f72ba1c90b5ebdb811427f367cd95fa6772d2de2fb45d6e57550501ee6d476" + }, "workspace": { "dependencies": [ - "jsr:@astral/astral@~0.4.6", + "jsr:@astral/astral@~0.5.2", + "jsr:@deno/doc@0.172", "jsr:@fresh/core@^2.0.0-alpha.26", "jsr:@luca/esbuild-deno-loader@0.11", "jsr:@marvinh-test/fresh-island@^0.0.1", "jsr:@std/async@1", + "jsr:@std/collections@^1.0.11", "jsr:@std/crypto@1", "jsr:@std/datetime@~0.225.2", "jsr:@std/encoding@1", diff --git a/init/src/init.ts b/init/src/init.ts index 0701167fea1..d72c37b4dbd 100644 --- a/init/src/init.ts +++ b/init/src/init.ts @@ -215,6 +215,7 @@ export default { await writeFile("tailwind.config.ts", TAILWIND_CONFIG_TS); } + // deno-fmt-ignore const GRADIENT_CSS = css`.fresh-gradient { background-color: rgb(134, 239, 172); background-image: linear-gradient( @@ -391,14 +392,12 @@ ${GRADIENT_CSS}`; `; await writeFile("static/logo.svg", STATIC_LOGO); - - try { - const res = await fetch("https://fresh.deno.dev/favicon.ico"); - const buf = await res.arrayBuffer(); - await writeFile("static/favicon.ico", new Uint8Array(buf)); - } catch { - // Skip this and be silent if there is a network issue. - } + await writeFile( + "static/favicon.ico", + await Deno.readFile( + new URL(import.meta.resolve("../../www/static/favicon.ico")), + ), + ); const MAIN_TS = `import { App, fsRoutes, staticFiles } from "fresh"; import { define, type State } from "./utils.ts"; diff --git a/init/src/init_test.ts b/init/src/init_test.ts index c0a2a898b3a..f8a6a9967fa 100644 --- a/init/src/init_test.ts +++ b/init/src/init_test.ts @@ -176,7 +176,7 @@ Deno.test("init - can start dev server", async () => { await patchProject(dir); await withChildProcessServer( dir, - path.join(dir, "dev.ts"), + "dev", async (address) => { await withBrowser(async (page) => { await page.goto(address); @@ -201,7 +201,7 @@ Deno.test("init - can start built project", async () => { // Build await new Deno.Command(Deno.execPath(), { - args: ["run", "-A", path.join(dir, "dev.ts"), "build"], + args: ["task", "build"], stdin: "null", stdout: "piped", stderr: "piped", @@ -210,7 +210,7 @@ Deno.test("init - can start built project", async () => { await withChildProcessServer( dir, - path.join(dir, "main.ts"), + "start", async (address) => { await withBrowser(async (page) => { await page.goto(address); @@ -234,7 +234,7 @@ Deno.test("init - errors on missing build cache in prod", async () => { await patchProject(dir); const cp = await new Deno.Command(Deno.execPath(), { - args: ["run", "-A", "main.ts"], + args: ["task", "start"], stdin: "null", stdout: "piped", stderr: "piped", diff --git a/src/build_cache.ts b/src/build_cache.ts index 6263eba4381..ccc06758c59 100644 --- a/src/build_cache.ts +++ b/src/build_cache.ts @@ -1,5 +1,5 @@ import * as path from "@std/path"; -import type { ResolvedFreshConfig } from "./config.ts"; +import { getSnapshotPath, type ResolvedFreshConfig } from "./config.ts"; import { DENO_DEPLOYMENT_ID, setBuildId } from "./runtime/build_id.ts"; import * as colors from "@std/fmt/colors"; @@ -30,7 +30,7 @@ export interface BuildCache { export class ProdBuildCache implements BuildCache { static async fromSnapshot(config: ResolvedFreshConfig, islandCount: number) { - const snapshotPath = path.join(config.build.outDir, "snapshot.json"); + const snapshotPath = getSnapshotPath(config); const staticFiles = new Map(); const islandToChunk = new Map(); diff --git a/src/config.ts b/src/config.ts index 8e6208c57ad..00680a3372e 100644 --- a/src/config.ts +++ b/src/config.ts @@ -1,5 +1,4 @@ import * as path from "@std/path"; -import type { Mode } from "./runtime/server/mod.ts"; export interface FreshConfig { root?: string; @@ -30,9 +29,9 @@ export interface ResolvedFreshConfig { basePath: string; staticDir: string; /** - * Tells you in which mode Fresh is currently running in. + * The mode Fresh can run in. */ - mode: Mode; + mode: "development" | "production"; } export function parseRootPath(root: string, cwd: string): string { diff --git a/src/constants.ts b/src/constants.ts index e075f235df0..2342ab478fb 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -1,5 +1,3 @@ export const INTERNAL_PREFIX = "/_frsh"; -export const DEV_CLIENT_URL = `${INTERNAL_PREFIX}/fresh_dev_client.js`; export const DEV_ERROR_OVERLAY_URL = `${INTERNAL_PREFIX}/error_overlay`; export const ALIVE_URL = `${INTERNAL_PREFIX}/alive`; -export const JS_PREFIX = `/js`; diff --git a/src/dev/dev_build_cache.ts b/src/dev/dev_build_cache.ts index 2a08c6cb14f..dfe3ebc7f6c 100644 --- a/src/dev/dev_build_cache.ts +++ b/src/dev/dev_build_cache.ts @@ -1,7 +1,7 @@ import type { BuildCache, StaticFile } from "../build_cache.ts"; import * as path from "@std/path"; import { SEPARATOR as WINDOWS_SEPARATOR } from "@std/path/windows/constants"; -import type { ResolvedFreshConfig } from "../config.ts"; +import { getSnapshotPath, type ResolvedFreshConfig } from "../config.ts"; import type { BuildSnapshot } from "../build_cache.ts"; import { encodeHex } from "@std/encoding/hex"; import { crypto } from "@std/crypto"; @@ -284,7 +284,7 @@ export class DiskBuildCache implements DevBuildCache { } await Deno.writeTextFile( - path.join(this.config.build.outDir, "snapshot.json"), + getSnapshotPath(this.config), JSON.stringify(snapshot, null, 2), ); } diff --git a/src/dev/middlewares/error_overlay/overlay.tsx b/src/dev/middlewares/error_overlay/overlay.tsx index f0bbd7257db..515cafadc72 100644 --- a/src/dev/middlewares/error_overlay/overlay.tsx +++ b/src/dev/middlewares/error_overlay/overlay.tsx @@ -8,88 +8,88 @@ const css = (arr: TemplateStringsArray, ...exts: never[]) => { export const errorCss = css` :root { - --bg: #fff; - --bg-code-frame: rgb(255, 0, 32, 0.1); - --bg-active-line: #fbcecc; - --text: #222; - --text2: #444; - --title: #e84644; - --code: #333; - font-family: sans-serif; - line-height: 1.4; - color: var(--text); - background: var(--bg); - } - - * { - box-sizing: border-box; - padding: 0; - margin: 0; - } - - @media (prefers-color-scheme: dark) { - :root { - --bg-code-frame: rgba(251, 93, 113, 0.2); - --bg-active-line: #4f1919; - --bg: #353535; - --text: #f7f7f7; - --text2: #ddd; - --code: #fdd1d1; - } - } - - .inner { - max-width: 48rem; - padding: 4rem 1rem; - margin: 0 auto; - } - - .title { - color: var(--title); - font-weight: normal; - font-size: 1.5rem; - margin-bottom: 1rem; - } - - .code-frame { - overflow: auto; - padding: 0.5rem; - margin-bottom: 0.5rem; - background: var(--bg-code-frame); - color: var(--code); - } - .line { - padding: 0.25rem 0.5rem; - } - .active-line { - display: inline-block; - width: 100%; - background: var(--bg-active-line); - } - - .stack { - overflow-x: auto; - } - - .close-btn { - position: absolute; - top: 1rem; - right: 1rem; - color: var(--title); - display: block; - width: 3rem; - height: 3rem; - background: none; - border: none; - transform: translate3d(0, 0, 0); - } - .close-btn:active { - transform: translate3d(0, 2px, 0); - } - .close-btn:hover { - cursor: pointer; - filter: drop-shadow(0 0 0.75rem crimson); - } + --bg: #fff; + --bg-code-frame: rgb(255, 0, 32, 0.1); + --bg-active-line: #fbcecc; + --text: #222; + --text2: #444; + --title: #e84644; + --code: #333; + font-family: sans-serif; + line-height: 1.4; + color: var(--text); + background: var(--bg); + } + + * { + box-sizing: border-box; + padding: 0; + margin: 0; + } + + @media (prefers-color-scheme: dark) { + :root { + --bg-code-frame: rgba(251, 93, 113, 0.2); + --bg-active-line: #4f1919; + --bg: #353535; + --text: #f7f7f7; + --text2: #ddd; + --code: #fdd1d1; + } + } + + .inner { + max-width: 48rem; + padding: 4rem 1rem; + margin: 0 auto; + } + + .title { + color: var(--title); + font-weight: normal; + font-size: 1.5rem; + margin-bottom: 1rem; + } + + .code-frame { + overflow: auto; + padding: 0.5rem; + margin-bottom: 0.5rem; + background: var(--bg-code-frame); + color: var(--code); + } + .line { + padding: 0.25rem 0.5rem; + } + .active-line { + display: inline-block; + width: 100%; + background: var(--bg-active-line); + } + + .stack { + overflow-x: auto; + } + + .close-btn { + position: absolute; + top: 1rem; + right: 1rem; + color: var(--title); + display: block; + width: 3rem; + height: 3rem; + background: none; + border: none; + transform: translate3d(0, 0, 0); + } + .close-btn:active { + transform: translate3d(0, 2px, 0); + } + .close-btn:hover { + cursor: pointer; + filter: drop-shadow(0 0 0.75rem crimson); + } `; function CodeFrame(props: { codeFrame: string }) { diff --git a/src/error.ts b/src/error.ts index 889e75b051d..d2cbaa71111 100644 --- a/src/error.ts +++ b/src/error.ts @@ -1,8 +1,69 @@ import { STATUS_TEXT } from "@std/http/status"; +/** + * Error that's thrown when a request fails. Correlates to a + * {@link https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status | HTTP status}. + * + * @property status The HTTP status code. + * + * @example Basic usage + * ```ts + * import { App, HttpError } from "fresh"; + * import { expect } from "@std/expect"; + * + * const app = new App() + * .get("/", () => new Response("ok")) + * .get("/not-found", () => { + * throw new HttpError(404, "Nothing here"); + * }); + * + * const handler = await app.handler(); + * + * try { + * await handler(new Request("http://localhost/not-found")) + * } catch (error) { + * expect(error).toBeInstanceOf(HttpError); + * expect(error.status).toBe(404); + * expect(error.message).toBe("Nothing here"); + * } + * ``` + */ export class HttpError extends Error { + /** + * The HTTP status code. + * + * @example Basic usage + * ```ts + * import { App, HttpError } from "fresh"; + * import { expect } from "@std/expect"; + * + * const app = new App() + * .get("/", () => new Response("ok")) + * .get("/not-found", () => { + * throw new HttpError(404, "Nothing here"); + * }); + * + * const handler = await app.handler(); + * + * try { + * await handler(new Request("http://localhost/not-found")) + * } catch (error) { + * expect(error).toBeInstanceOf(HttpError); + * expect(error.status).toBe(404); + * expect(error.message).toBe("Nothing here"); + * } + * ``` + */ status: number; + /** + * Constructs a new instance. + * + * @param status The HTTP status code. + * @param message The error message. Defaults to the status text of the given + * status code. + * @param options Optional error options. + */ constructor( status: keyof typeof STATUS_TEXT, message: string = STATUS_TEXT[status], diff --git a/src/mod.ts b/src/mod.ts index fd19c4b82bf..6116fcccd47 100644 --- a/src/mod.ts +++ b/src/mod.ts @@ -12,7 +12,6 @@ export { export type { RouteConfig } from "./types.ts"; export type { Middleware, MiddlewareFn } from "./middlewares/mod.ts"; export { staticFiles } from "./middlewares/static_files.ts"; -export type { Mode } from "./runtime/server/mod.ts"; export type { FreshConfig, ResolvedFreshConfig } from "./config.ts"; export type { FreshContext, Island, PageProps } from "./context.ts"; export { createDefine, type Define } from "./define.ts"; diff --git a/src/runtime/server/mod.ts b/src/runtime/server/mod.ts deleted file mode 100644 index 99a9ee035f3..00000000000 --- a/src/runtime/server/mod.ts +++ /dev/null @@ -1,4 +0,0 @@ -/** - * The mode Fresh can run in. - */ -export type Mode = "development" | "production"; diff --git a/tests/active_links_test.tsx b/tests/active_links_test.tsx index d57fa3f8ee5..a2c597f00c9 100644 --- a/tests/active_links_test.tsx +++ b/tests/active_links_test.tsx @@ -92,8 +92,6 @@ Deno.test({ assertSelector(doc, "a[href='/'][data-ancestor]"); assertSelector(doc, `a[href='/'][aria-current="true"]`); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -176,6 +174,4 @@ Deno.test({ assertSelector(doc, `a[href='/'][aria-current="true"]`); }); }, - sanitizeResources: false, - sanitizeOps: false, }); diff --git a/tests/islands_test.tsx b/tests/islands_test.tsx index b353e9675fb..294770cfddd 100644 --- a/tests/islands_test.tsx +++ b/tests/islands_test.tsx @@ -64,8 +64,6 @@ Deno.test({ await waitForText(page, ".output", "4"); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -96,8 +94,6 @@ Deno.test({ await waitForText(page, "#multiple-2 .output", "1"); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -127,8 +123,6 @@ Deno.test({ await waitForText(page, "#counter-2 .output", "1"); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -157,8 +151,6 @@ Deno.test({ expect(json).toEqual({ foo: 123 }); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -182,8 +174,6 @@ Deno.test({ await page.locator(".ready").wait(); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -214,8 +204,6 @@ Deno.test({ expect(html).not.toContain("import { Counter }"); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -244,8 +232,6 @@ Deno.test({ expect(doc.querySelector(".children")!.childNodes.length).toEqual(0); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -276,8 +262,6 @@ Deno.test({ expect(JSON.parse(text)).toEqual({ jsx: true, children: true }); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -313,8 +297,6 @@ Deno.test({ expect(childText).toEqual("foobar"); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -347,8 +329,6 @@ Deno.test({ await waitForText(page, ".output", "1"); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -392,8 +372,6 @@ Deno.test({ await waitForText(page, ".children .output", "1"); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -436,8 +414,6 @@ Deno.test({ await waitForText(page, "#b .output", "1"); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -481,8 +457,6 @@ Deno.test({ await waitForText(page, ".children .output", "1"); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -557,8 +531,6 @@ Deno.test({ expect(radio2).toEqual(true); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -589,8 +561,6 @@ Deno.test({ expect(text).toEqual("it works"); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -620,8 +590,6 @@ Deno.test({ expect(text).toEqual("it works"); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -650,8 +618,6 @@ Deno.test({ expect(text).toEqual("value: production"); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -677,8 +643,6 @@ Deno.test({ await waitForText(page, ".output", "1"); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -709,8 +673,6 @@ Deno.test({ expect(falsy).toEqual("false"); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -739,8 +701,6 @@ Deno.test({ expect(text).toEqual("it works"); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -767,6 +727,4 @@ Deno.test({ /<\/_fresh\/js\/[a-zA-Z0-9]+\/fresh-runtime\.js>; rel="modulepreload"; as="script", <\/_fresh\/js\/[a-zA-Z0-9]+\/SelfCounter\.js>; rel="modulepreload"; as="script"/, ); }, - sanitizeResources: false, - sanitizeOps: false, }); diff --git a/tests/partials_test.tsx b/tests/partials_test.tsx index caec84e9e13..269e8033907 100644 --- a/tests/partials_test.tsx +++ b/tests/partials_test.tsx @@ -79,8 +79,6 @@ Deno.test({ await waitForText(page, ".output", "partial update"); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -124,8 +122,6 @@ Deno.test({ assertNotSelector(doc, ".init"); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -168,8 +164,6 @@ Deno.test({ ); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -210,8 +204,6 @@ Deno.test({ // TODO: Check error overlay }, - sanitizeResources: false, - sanitizeOps: false, }); // See https://github.com/denoland/fresh/issues/2254 @@ -257,8 +249,6 @@ Deno.test({ expect(didError).toEqual(false); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -299,8 +289,6 @@ Deno.test({ await page.locator(".ready").wait(); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -334,8 +322,6 @@ Deno.test({ // TODO: Test error overlay }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -378,8 +364,6 @@ Deno.test({ }); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -426,8 +410,6 @@ Deno.test({ expect(counter).toEqual("1"); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -476,8 +458,6 @@ Deno.test({ assertNotSelector(doc, ".output"); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -519,8 +499,6 @@ Deno.test({ await page.locator(".inner-update").wait(); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -574,8 +552,6 @@ Deno.test({ await page.locator(".sib-3-update").wait(); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -637,8 +613,6 @@ Deno.test({ await waitForText(page, "#c .output", "3"); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -713,8 +687,6 @@ Deno.test({ await waitForText(page, "#c .output", "3"); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -789,8 +761,6 @@ Deno.test({ await waitForText(page, "#c .output", "3"); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -858,8 +828,6 @@ Deno.test({ await waitForText(page, "#c .output", "3"); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -929,8 +897,6 @@ Deno.test({ assertNotSelector(doc, ".done-0"); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -981,8 +947,6 @@ Deno.test({ assertNotSelector(doc, ".done-0"); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -1031,8 +995,6 @@ Deno.test({ expect(doc.querySelector(".content")!.textContent).toEqual("init01"); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -1084,8 +1046,6 @@ Deno.test({ expect(doc.querySelector(".content")!.textContent).toEqual("init01"); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -1133,8 +1093,6 @@ Deno.test({ expect(doc.querySelector(".content")!.textContent).toEqual("10init"); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -1186,8 +1144,6 @@ Deno.test({ expect(doc.querySelector(".content")!.textContent).toEqual("10init"); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -1244,8 +1200,6 @@ Deno.test({ }); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -1301,8 +1255,6 @@ Deno.test({ }); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -1387,8 +1339,6 @@ Deno.test({ await waitForText(page, ".output", "1"); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -1473,8 +1423,6 @@ Deno.test({ await waitForText(page, ".output", "1"); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -1541,8 +1489,6 @@ Deno.test({ }); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -1609,8 +1555,6 @@ Deno.test({ }); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -1671,8 +1615,6 @@ Deno.test({ }); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -1729,8 +1671,6 @@ Deno.test({ expect(scroll.scrollY > 100).toEqual(true); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -1783,8 +1723,6 @@ Deno.test({ await page.locator(".done-foo-sub").wait(); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -1840,8 +1778,6 @@ Deno.test({ expect(pathname).toEqual("/foo"); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -1895,8 +1831,6 @@ Deno.test({ await page.locator(".done-foo-sub").wait(); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -1951,8 +1885,6 @@ Deno.test({ expect(pathname).toEqual("/done"); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -2012,8 +1944,6 @@ Deno.test({ await page.locator(".done-foo-sub").wait(); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -2074,8 +2004,6 @@ Deno.test({ await page.locator(".done-foo-sub").wait(); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -2144,8 +2072,6 @@ Deno.test({ assertNotSelector(doc, "button"); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -2204,8 +2130,6 @@ Deno.test({ await page.locator(".done-a-b-c").wait(); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -2234,8 +2158,6 @@ Deno.test({ expect(logs).toEqual([]); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -2271,8 +2193,6 @@ Deno.test({ expect(scroll > 0).toEqual(true); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -2318,8 +2238,6 @@ Deno.test({ expect(logs[0]).toMatch(/Found no partials/); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -2416,8 +2334,6 @@ Deno.test({ expect(textColor).toEqual("rgb(0, 128, 0)"); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -2505,8 +2421,6 @@ Deno.test({ ).toEqual(true); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -2547,8 +2461,6 @@ Deno.test({ await page.locator(".status-refreshed").wait(); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -2602,8 +2514,6 @@ Deno.test({ await waitForText(page, "#inner .output", "1"); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -2642,8 +2552,6 @@ Deno.test({ await page.locator(".done").wait(); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -2681,8 +2589,6 @@ Deno.test({ await page.locator(".error-404").wait(); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -2723,8 +2629,6 @@ Deno.test({ expect(title).toEqual("after update"); }); }, - sanitizeResources: false, - sanitizeOps: false, }); Deno.test({ @@ -2768,6 +2672,4 @@ Deno.test({ expect(`${url.pathname}${url.search}`).toEqual("/"); }); }, - sanitizeResources: false, - sanitizeOps: false, }); diff --git a/tests/precompile_test.ts b/tests/precompile_test.ts index e4f9ac21e7f..f55947b8b57 100644 --- a/tests/precompile_test.ts +++ b/tests/precompile_test.ts @@ -1,37 +1,26 @@ -import * as path from "@std/path"; import { expect } from "@std/expect"; Deno.test("JSX precompile - check config", async () => { - const cwd = path.join(import.meta.dirname!, "fixture_precompile", "invalid"); - const output = await new Deno.Command(Deno.execPath(), { - args: [ - "run", - "-A", - path.join(cwd, "dev.ts"), - ], - cwd, + const { stderr, success } = await new Deno.Command(Deno.execPath(), { + args: ["run", "-A", "dev.ts"], + cwd: new URL("./fixture_precompile/invalid", import.meta.url), }).output(); - const stderr = new TextDecoder().decode(output.stderr); - expect(stderr).toContain("jsxPrecompileSkipElements to contain"); - expect(output.code).toEqual(1); + const stderrText = new TextDecoder().decode(stderr); + expect(stderrText).toContain("jsxPrecompileSkipElements to contain"); + expect(success).toEqual(false); }); Deno.test("JSX precompile - run vnode hooks", async () => { - const cwd = path.join(import.meta.dirname!, "fixture_precompile", "valid"); - const output = await new Deno.Command(Deno.execPath(), { - args: [ - "run", - "-A", - path.join(cwd, "main.tsx"), - ], - cwd, + const { stdout, success } = await new Deno.Command(Deno.execPath(), { + args: ["run", "-A", "main.tsx"], + cwd: new URL("./fixture_precompile/valid", import.meta.url), }).output(); - const stdout = new TextDecoder().decode(output.stdout); - expect(stdout).toContain(''); - expect(stdout).toContain(''); - expect(output.code).toEqual(0); + const stdoutText = new TextDecoder().decode(stdout); + expect(stdoutText).toContain(''); + expect(stdoutText).toContain(''); + expect(success).toEqual(true); }); diff --git a/tests/test_utils.tsx b/tests/test_utils.tsx index 82e725b7098..fd0a4052e4e 100644 --- a/tests/test_utils.tsx +++ b/tests/test_utils.tsx @@ -79,86 +79,67 @@ export async function withBrowserApp( fn: (page: Page, address: string) => void | Promise, ) { const aborter = new AbortController(); - let server: Deno.HttpServer | null = null; - let port = 0; + const server = Deno.serve({ + hostname: "localhost", + port: 0, + signal: aborter.signal, + }, await app.handler()); + + const browser = await launch({ + args: [ + "--window-size=1280,720", + ...((Deno.env.get("CI") && Deno.build.os === "linux") + ? ["--no-sandbox"] + : []), + ], + headless: true, + }); + + const page = await browser.newPage(); try { - server = await Deno.serve({ - hostname: "localhost", - port: 0, - signal: aborter.signal, - onListen: ({ port: p }) => { - port = p; - }, - }, await app.handler()); - - const browser = await launch({ - args: [ - "--window-size=1280,720", - ...((Deno.env.get("CI") && Deno.build.os === "linux") - ? ["--no-sandbox"] - : []), - ], - headless: !Deno.args.includes("--headful"), - }); - - const page = await browser.newPage(); - try { - await fn(page, `http://localhost:${port}`); - } finally { - await page.close(); - await browser.close(); - } + await fn(page, `http://localhost:${server.addr.port}`); } finally { + await page.close(); + await browser.close(); aborter.abort(); await server?.finished; } } export async function withBrowser(fn: (page: Page) => void | Promise) { - const aborter = new AbortController(); + const browser = await launch({ + args: [ + "--window-size=1280,7201", + ...((Deno.env.get("CI") && Deno.build.os === "linux") + ? ["--no-sandbox"] + : []), + ], + headless: true, + }); + const page = await browser.newPage(); try { - const browser = await launch({ - args: [ - "--window-size=1280,7201", - ...((Deno.env.get("CI") && Deno.build.os === "linux") - ? ["--no-sandbox"] - : []), - ], - headless: !Deno.args.includes("--headful"), - }); - - const page = await browser.newPage(); - // page.setDefaultTimeout(1000000); - try { - await fn(page); - } catch (err) { - try { - const raw = await page.content(); - const doc = parseHtml(raw); - const html = prettyDom(doc); - // deno-lint-ignore no-console - console.log(html); - } catch { - // Ignore - } - throw err; - } finally { - await page.close(); - await browser.close(); - } + await fn(page); + } catch (err) { + const raw = await page.content(); + const doc = parseHtml(raw); + const html = prettyDom(doc); + // deno-lint-ignore no-console + console.log(html); + throw err; } finally { - aborter.abort(); + await page.close(); + await browser.close(); } } export async function withChildProcessServer( dir: string, - entry: string, + task: string, fn: (address: string) => void | Promise, ) { const aborter = new AbortController(); const cp = await new Deno.Command(Deno.execPath(), { - args: ["run", "-A", entry], + args: ["task", task], stdin: "null", stdout: "piped", stderr: "inherit", diff --git a/tools/check_docs.ts b/tools/check_docs.ts new file mode 100644 index 00000000000..0b0363d9c9f --- /dev/null +++ b/tools/check_docs.ts @@ -0,0 +1,5 @@ +import { checkDocs } from "https://github.com/denoland/std/raw/refs/heads/main/_tools/check_docs.ts"; + +await checkDocs([ + import.meta.resolve("../src/error.ts"), +]); diff --git a/update/src/maybePrependReqVar.ts b/update/src/maybePrependReqVar.ts deleted file mode 100644 index f99ee6d6081..00000000000 --- a/update/src/maybePrependReqVar.ts +++ /dev/null @@ -1,105 +0,0 @@ -import * as tsmorph from "ts-morph"; -import { type ImportState, SyntaxKind } from "./update.ts"; - -export function maybePrependReqVar( - method: - | tsmorph.MethodDeclaration - | tsmorph.FunctionDeclaration - | tsmorph.FunctionExpression - | tsmorph.ArrowFunction, - newImports: ImportState, - hasInferredTypes: boolean, -) { - let hasRequestVar = false; - const params = method.getParameters(); - if (params.length > 0) { - const paramName = params[0].getName(); - - // Add explicit types if the user did that - if (hasInferredTypes && params[0].getTypeNode()) { - hasInferredTypes = false; - } - - hasRequestVar = params.length > 1 || paramName === "req"; - if (hasRequestVar || paramName === "_req") { - if (hasRequestVar && params.length === 1) { - params[0].replaceWithText("ctx"); - if (!hasInferredTypes) { - newImports.core.add("FreshContext"); - params[0].setType("FreshContext"); - } - } else { - params[0].remove(); - - // Use proper type - if (params.length > 1) { - const initType = params[1].getTypeNode()?.getText(); - if (initType !== undefined && initType === "RouteContext") { - newImports.core.add("FreshContext"); - params[1].setType("FreshContext"); - } - } - } - } - const maybeObjBinding = params.length > 1 - ? params[1].getNameNode() - : undefined; - - if (method.isKind(SyntaxKind.ArrowFunction)) { - const body = method.getBody(); - if (body !== undefined && !body.isKind(SyntaxKind.Block)) { - // deno-lint-ignore no-console - console.warn(`Cannot transform arrow function`); - return; - } - } - - if ( - (maybeObjBinding === undefined || - !maybeObjBinding.isKind(SyntaxKind.ObjectBindingPattern)) && - hasRequestVar && - !paramName.startsWith("_") - ) { - method.insertVariableStatement(0, { - declarationKind: tsmorph.VariableDeclarationKind.Const, - declarations: [{ - name: paramName, - initializer: "ctx.request", - }], - }); - } - - if ( - maybeObjBinding !== undefined && - maybeObjBinding.isKind(SyntaxKind.ObjectBindingPattern) - ) { - const objBinding = maybeObjBinding as tsmorph.ObjectBindingPattern; - const bindings = objBinding.getElements(); - if (bindings.length > 0) { - let needsRemoteAddr = false; - for (let i = 0; i < bindings.length; i++) { - const binding = bindings[i]; - const name = binding.getName(); - if (name === "remoteAddr") { - binding.replaceWithText("info"); - needsRemoteAddr = true; - } - } - if (hasRequestVar && !paramName.startsWith("_")) { - const txt = maybeObjBinding.getFullText().slice(0, -2); - maybeObjBinding.replaceWithText(txt + ", req }"); - } - - if (needsRemoteAddr) { - method.insertVariableStatement(0, { - declarationKind: tsmorph.VariableDeclarationKind.Const, - declarations: [{ - name: "remoteAddr", - initializer: "info.remoteAddr", - }], - }); - } - } - } - } -} diff --git a/www/utils/screenshot.ts b/www/utils/screenshot.ts index ed6b07e298d..bde308b6067 100644 --- a/www/utils/screenshot.ts +++ b/www/utils/screenshot.ts @@ -1,48 +1,30 @@ -import puppeteer from "https://deno.land/x/puppeteer@16.2.0/mod.ts"; -import { Image } from "https://deno.land/x/imagescript@1.2.17/mod.ts"; -import { join } from "https://deno.land/std@0.216.0/path/mod.ts"; +import puppeteer from "npm:puppeteer@24.7.2"; +import { Image } from "https://deno.land/x/imagescript@1.3.0/mod.ts"; -const url = Deno.args[0]; -const id = Deno.args[1]; - -if (Deno.args.length == 0) { - // deno-lint-ignore no-console - console.log("Usage: screenshot "); - Deno.exit(0); -} - -if (!(url.match(/^http[s]?:\/\//)) || !url) { - // deno-lint-ignore no-console - console.log("Provided URL is Broken or Wrong"); - Deno.exit(0); +if (Deno.args.length !== 2) { + throw new Error("Usage: screenshot "); } -if (!id) { - // deno-lint-ignore no-console - console.log("Provide id to Process"); - Deno.exit(0); +const [url, id] = Deno.args; +const parsedUrl = new URL(url); +if (parsedUrl.protocol !== "http:" && parsedUrl.protocol !== "https:") { + throw new Error("Invalid URL"); } -const outDir = "./www/static/showcase"; const browser = await puppeteer.launch({ defaultViewport: { width: 1200, height: 675 }, + headless: true, }); const page = await browser.newPage(); await page.goto(url, { waitUntil: "networkidle2" }); const raw = await page.screenshot(); - await browser.close(); -if (!(raw instanceof Uint8Array)) { - // deno-lint-ignore no-console - console.log("Invalid Image"); - Deno.exit(0); -} // convert to jpeg const image2x = await Image.decode(raw); -const jpeg2x = join(outDir, `${id}2x.jpg`); +const jpeg2x = import.meta.resolve(`../static/showcase/${id}2x.jpg`); await Deno.writeFile(jpeg2x, await image2x.encodeJPEG(80)); -const jpeg1x = join(outDir, `${id}1x.jpg`); +const jpeg1x = import.meta.resolve(`../static/showcase/${id}1x.jpg`); const image1x = image2x.resize(image2x.width / 2, Image.RESIZE_AUTO); await Deno.writeFile(jpeg1x, await image1x.encodeJPEG(80)); From 89d1f19c507eb973aae5fed85c02538bfc81ad9e Mon Sep 17 00:00:00 2001 From: Tim Date: Tue, 27 May 2025 23:25:59 +0200 Subject: [PATCH 08/10] Merge branch 'main' into rename-FreshContext-req-to-request --- .github/workflows/ci.yml | 1 + .github/workflows/deploy.yml | 9 +- .github/workflows/publish.yml | 2 + .gitignore | 3 +- README.md | 7 +- deno.json | 50 +- deno.lock | 618 ++++++++++++------ docs/latest/concepts/deployment.md | 2 +- docs/latest/concepts/server-configuration.md | 8 +- .../client-side-components-and-libraries.md | 11 +- docs/latest/examples/rendering-markdown.md | 2 +- .../getting-started/create-a-project.md | 4 +- docs/latest/getting-started/index.md | 18 +- .../latest/getting-started/running-locally.md | 2 +- docs/latest/introduction/index.md | 23 +- docs/toc.ts | 7 - init/deno.json | 11 +- init/src/assets/favicon.ico | Bin 0 -> 22382 bytes init/src/init.ts | 121 ++-- init/src/init_test.ts | 335 +++++----- init/src/mod.ts | 3 +- plugin-tailwindcss/deno.json | 12 +- plugin-tailwindcss/src/mod.ts | 6 +- plugin-tailwindcss/src/types.ts | 4 + src/app.ts | 18 +- src/app_test.tsx | 46 ++ src/build_cache.ts | 2 +- src/build_cache_test.ts | 80 +++ src/{compat/server.ts => compat.ts} | 24 +- src/compat/mod.ts | 13 - src/constants.ts | 1 + src/context.ts | 24 +- src/context_test.tsx | 15 + src/dev/builder.ts | 2 + src/dev/builder_test.ts | 102 ++- src/dev/dev_build_cache.ts | 2 +- src/dev/dev_build_cache_test.ts | 46 ++ src/dev/esbuild.ts | 4 + src/dev/file_transformer.ts | 23 +- .../automatic_workspace_folders.ts | 49 ++ src/dev/middlewares/error_overlay/overlay.tsx | 6 +- src/dev/update_check_test.ts | 77 +-- src/handlers.ts | 5 +- src/middlewares/static_files.ts | 2 +- src/mod.ts | 2 +- src/plugins/fs_routes/mod.ts | 52 +- src/plugins/fs_routes/mod_test.tsx | 179 ++++- src/runtime/client/partials.ts | 8 +- src/runtime/server/preact_hooks.tsx | 24 +- src/test_utils.ts | 12 + src/types.ts | 14 + src/utils.ts | 21 + src/utils_test.ts | 13 +- tests/partials_test.tsx | 39 ++ tests/test_utils.tsx | 44 +- tools/release.ts | 32 + update/deno.json | 14 +- update/src/update.ts | 41 +- update/src/update_test.ts | 474 +++++++------- www/components/CodeBlock.tsx | 1 + www/data/showcase.json | 6 + www/deno.json | 34 - www/islands/TableOfContents.tsx | 9 +- www/islands/ThemeToggle.tsx | 20 +- www/routes/_app.tsx | 1 + www/routes/docs/[...slug].tsx | 10 +- www/routes/docs/_layout.tsx | 2 +- www/routes/docs/index.tsx | 22 +- www/routes/index.tsx | 5 +- www/static/markdown.css | 2 +- www/static/showcase/zhiblog1x.jpg | Bin 0 -> 33632 bytes www/static/showcase/zhiblog2x.jpg | Bin 0 -> 85052 bytes www/utils/screenshot.ts | 26 +- 73 files changed, 1867 insertions(+), 1040 deletions(-) create mode 100644 init/src/assets/favicon.ico create mode 100644 src/build_cache_test.ts rename src/{compat/server.ts => compat.ts} (61%) delete mode 100644 src/compat/mod.ts create mode 100644 src/dev/dev_build_cache_test.ts create mode 100644 src/dev/middlewares/automatic_workspace_folders.ts create mode 100644 www/static/showcase/zhiblog1x.jpg create mode 100644 www/static/showcase/zhiblog2x.jpg diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 31a2871b99d..f79c0249591 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -31,6 +31,7 @@ jobs: - name: Setup Deno uses: denoland/setup-deno@v2 with: + cache: true deno-version: ${{ matrix.deno }} - name: Verify formatting diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 79304e72590..d6f8c353514 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -3,7 +3,7 @@ on: push: branches: [main] pull_request: - branches: main + branches: [main] jobs: deploy: @@ -21,15 +21,16 @@ jobs: - name: Install Deno uses: denoland/setup-deno@v2 with: + cache: true deno-version: rc - name: Build step working-directory: ./www - run: "deno task build" # 📝 Update the build command(s) if necessary + run: "deno task build" - name: Upload to Deno Deploy uses: denoland/deployctl@v1 with: - project: "fresh" # 📝 Update the deploy project name if necessary - entrypoint: "./www/main.ts" # 📝 Update the entrypoint if necessary + project: "fresh" + entrypoint: "./www/main.ts" root: "." diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 53cd1e2f063..e56b1ae03ec 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -17,6 +17,8 @@ jobs: - name: Install Deno uses: denoland/setup-deno@v2 + with: + cache: true - name: Publish Fresh run: deno publish diff --git a/.gitignore b/.gitignore index aceea018d2a..d76c6907b89 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,5 @@ vendor/ node_modules/ .docs/ .DS_Store -tmp_* \ No newline at end of file +tmp_* +coverage/ \ No newline at end of file diff --git a/README.md b/README.md index 6576e4fabf0..e52dcfae968 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ The [documentation](https://fresh.deno.dev/docs/introduction) is available on ## 🚀 Getting started -Install the latest [Deno CLI](https://deno.land/) version. +Install the latest [Deno CLI](https://deno.com/) version. You can scaffold a new project by running the Fresh init script. To scaffold a project run the following: @@ -54,8 +54,9 @@ To deploy the project to the live internet, you can use 1. Push your project to GitHub. 2. [Create a Deno Deploy project](https://dash.deno.com/new). -3. [Link](https://deno.com/deploy/docs/projects#enabling) the Deno Deploy - project to the **`main.ts`** file in the root of the created repository. +3. [Link](https://docs.deno.com/deploy/manual/#deploy-your-project) the Deno + Deploy project to the **`main.ts`** file in the root of the created + repository. 4. The project will be deployed to a public $project.deno.dev subdomain. For a more in-depth getting started guide, visit the diff --git a/deno.json b/deno.json index 8df3e470f58..9f447e64c11 100644 --- a/deno.json +++ b/deno.json @@ -7,21 +7,21 @@ "./www" ], "name": "@fresh/core", - "version": "2.0.0-alpha.29", + "version": "2.0.0-alpha.34", "license": "MIT", "exports": { ".": "./src/mod.ts", "./runtime": "./src/runtime/shared.ts", "./dev": "./src/dev/mod.ts", - "./compat": "./src/compat/mod.ts" + "./compat": "./src/compat.ts" }, "tasks": { - "test": "deno test -A --parallel src/ init/ update/ && deno test -A tests/ www/main_test.ts", + "test": "deno test -A --parallel", "fixture": "deno run -A --watch=static/,routes/ tests/fixture/dev.ts", "www": "deno task --cwd=www start", "build-www": "deno task --cwd=www build", "screenshot": "deno run -A www/utils/screenshot.ts", - "check:types": "deno check src/**/*.ts src/**/*.tsx tests/**/*.ts tests/**/*.tsx update/**/*.ts plugin-tailwindcss/**/*.ts init/**/*.ts", + "check:types": "deno check --allow-import", "check:docs": "deno run -A tools/check_docs.ts", "ok": "deno fmt --check && deno lint && deno task check:types && deno task test", "test:www": "deno test -A www/main_test.*", @@ -42,21 +42,23 @@ }, "imports": { "@deno/doc": "jsr:@deno/doc@^0.172.0", + "@std/cli": "jsr:@std/cli@^1.0.17", "@std/collections": "jsr:@std/collections@^1.0.11", "@std/http": "jsr:@std/http@^1.0.15", - "fresh": "jsr:@fresh/core@^2.0.0-alpha.26", - "preact": "npm:preact@^10.25.1", + "@std/uuid": "jsr:@std/uuid@^1.0.7", + "fresh": "jsr:@fresh/core@^2.0.0-alpha.29", + "preact": "npm:preact@^10.26.6", "preact-render-to-string": "npm:preact-render-to-string@^6.5.11", "$ga4": "https://raw.githubusercontent.com/denoland/ga4/main/mod.ts", "@luca/esbuild-deno-loader": "jsr:@luca/esbuild-deno-loader@^0.11.0", "@opentelemetry/api": "npm:@opentelemetry/api@^1.9.0", - "@preact/signals": "npm:@preact/signals@^1.2.3", - "esbuild": "npm:esbuild@0.23.1", - "esbuild-wasm": "npm:esbuild-wasm@0.23.1", + "@preact/signals": "npm:@preact/signals@^2.0.4", + "esbuild": "npm:esbuild@0.25.4", + "esbuild-wasm": "npm:esbuild-wasm@0.25.4", "@std/crypto": "jsr:@std/crypto@1", "@std/datetime": "jsr:@std/datetime@^0.225.2", "@std/encoding": "jsr:@std/encoding@1", - "@std/fmt": "jsr:@std/fmt@1", + "@std/fmt": "jsr:@std/fmt@^1.0.7", "@std/fs": "jsr:@std/fs@1", "@std/html": "jsr:@std/html@1", "@std/jsonc": "jsr:@std/jsonc@1", @@ -65,12 +67,29 @@ "@std/semver": "jsr:@std/semver@1", "@std/streams": "jsr:@std/streams@1", - "@astral/astral": "jsr:@astral/astral@^0.5.2", + "@astral/astral": "jsr:@astral/astral@^0.5.3", "@marvinh-test/fresh-island": "jsr:@marvinh-test/fresh-island@^0.0.1", - "linkedom": "npm:linkedom@^0.16.11", - "@std/async": "jsr:@std/async@1", - "@std/expect": "jsr:@std/expect@1", - "@std/testing": "jsr:@std/testing@1" + "linkedom": "npm:linkedom@^0.18.10", + "@std/async": "jsr:@std/async@^1.0.13", + "@std/expect": "jsr:@std/expect@^1.0.16", + "@std/testing": "jsr:@std/testing@^1.0.12", + + "autoprefixer": "npm:autoprefixer@10.4.17", + "cssnano": "npm:cssnano@6.0.3", + "postcss": "npm:postcss@8.4.35", + "tailwindcss": "npm:tailwindcss@^3.4.1", + + "ts-morph": "npm:ts-morph@^25.0.1", + + "@fresh/plugin-tailwind": "jsr:@fresh/plugin-tailwind@^0.0.1-alpha.7", + "@std/front-matter": "jsr:@std/front-matter@^1.0.5", + "fresh/compat": "./src/compat/mod.ts", + "fresh/dev": "./src/dev/mod.ts", + "fresh/runtime": "./src/runtime/shared.ts", + "github-slugger": "npm:github-slugger@^2.0.0", + "marked": "npm:marked@^15.0.11", + "marked-mangle": "npm:marked-mangle@^1.1.9", + "prismjs": "npm:prismjs@^1.29.0" }, "compilerOptions": { "lib": ["dom", "dom.asynciterable", "deno.ns", "deno.unstable"], @@ -80,6 +99,7 @@ }, "lint": { "rules": { + "tags": ["recommended", "fresh", "jsr", "jsx", "react"], "exclude": ["no-window"], "include": ["no-console"] } diff --git a/deno.lock b/deno.lock index c4ba8ca1be8..446b0a742d3 100644 --- a/deno.lock +++ b/deno.lock @@ -1,48 +1,56 @@ { "version": "5", "specifiers": { - "jsr:@astral/astral@~0.5.2": "0.5.2", + "jsr:@astral/astral@~0.5.3": "0.5.3", "jsr:@deno-library/progress@^1.5.1": "1.5.1", "jsr:@deno/cache-dir@0.14": "0.14.0", "jsr:@deno/doc@0.172": "0.172.0", + "jsr:@deno/graph@0.86": "0.86.9", + "jsr:@deno/graph@~0.82.3": "0.82.3", "jsr:@deno/otel@*": "0.0.2", - "jsr:@fresh/core@^2.0.0-alpha.26": "2.0.0-alpha.29", + "jsr:@fresh/core@^2.0.0-alpha.29": "2.0.0-alpha.34", + "jsr:@fresh/plugin-tailwind@^0.0.1-alpha.7": "0.0.1-alpha.7", "jsr:@luca/esbuild-deno-loader@0.11": "0.11.1", "jsr:@marvinh-test/fresh-island@*": "0.0.1", "jsr:@marvinh-test/fresh-island@^0.0.1": "0.0.1", - "jsr:@std/assert@^1.0.12": "1.0.13", - "jsr:@std/async@1": "1.0.12", - "jsr:@std/bytes@^1.0.2": "1.0.5", - "jsr:@std/bytes@^1.0.5": "1.0.5", - "jsr:@std/cli@1": "1.0.17", + "jsr:@std/assert@0.221": "0.221.0", + "jsr:@std/assert@^1.0.13": "1.0.13", + "jsr:@std/async@1": "1.0.13", + "jsr:@std/async@^1.0.13": "1.0.13", + "jsr:@std/bytes@^1.0.2": "1.0.6", + "jsr:@std/bytes@^1.0.5": "1.0.6", "jsr:@std/cli@^1.0.17": "1.0.17", - "jsr:@std/collections@^1.0.11": "1.0.11", - "jsr:@std/crypto@1": "1.0.4", - "jsr:@std/data-structures@^1.0.6": "1.0.7", + "jsr:@std/collections@^1.0.11": "1.1.0", + "jsr:@std/crypto@1": "1.0.5", + "jsr:@std/crypto@^1.0.4": "1.0.5", "jsr:@std/datetime@~0.225.2": "0.225.4", "jsr:@std/encoding@1": "1.0.10", "jsr:@std/encoding@^1.0.10": "1.0.10", "jsr:@std/encoding@^1.0.5": "1.0.10", - "jsr:@std/expect@1": "1.0.15", - "jsr:@std/fmt@1": "1.0.7", + "jsr:@std/expect@^1.0.16": "1.0.16", + "jsr:@std/fmt@1": "1.0.8", "jsr:@std/fmt@1.0.3": "1.0.3", - "jsr:@std/fmt@^1.0.3": "1.0.7", - "jsr:@std/fmt@^1.0.7": "1.0.7", + "jsr:@std/fmt@^1.0.3": "1.0.8", + "jsr:@std/fmt@^1.0.7": "1.0.8", + "jsr:@std/fmt@^1.0.8": "1.0.8", "jsr:@std/front-matter@^1.0.5": "1.0.9", "jsr:@std/fs@1": "1.0.17", "jsr:@std/fs@^1.0.16": "1.0.17", + "jsr:@std/fs@^1.0.17": "1.0.17", "jsr:@std/fs@^1.0.6": "1.0.17", - "jsr:@std/html@1": "1.0.3", - "jsr:@std/html@^1.0.3": "1.0.3", - "jsr:@std/http@^1.0.15": "1.0.15", - "jsr:@std/internal@^1.0.6": "1.0.6", - "jsr:@std/io@0.225": "0.225.0", + "jsr:@std/html@1": "1.0.4", + "jsr:@std/html@^1.0.4": "1.0.4", + "jsr:@std/http@^1.0.15": "1.0.16", + "jsr:@std/internal@^1.0.6": "1.0.7", + "jsr:@std/internal@^1.0.7": "1.0.7", + "jsr:@std/io@0.225": "0.225.2", "jsr:@std/io@0.225.0": "0.225.0", "jsr:@std/json@^1.0.2": "1.0.2", "jsr:@std/jsonc@1": "1.0.2", "jsr:@std/media-types@1": "1.1.0", "jsr:@std/media-types@^1.1.0": "1.1.0", "jsr:@std/net@^1.0.4": "1.0.4", + "jsr:@std/path@0.221": "0.221.0", "jsr:@std/path@1": "1.0.9", "jsr:@std/path@^1.0.6": "1.0.9", "jsr:@std/path@^1.0.8": "1.0.9", @@ -50,39 +58,41 @@ "jsr:@std/semver@1": "1.0.5", "jsr:@std/streams@1": "1.0.9", "jsr:@std/streams@^1.0.9": "1.0.9", - "jsr:@std/testing@1": "1.0.11", + "jsr:@std/testing@^1.0.12": "1.0.12", "jsr:@std/toml@^1.0.3": "1.0.5", + "jsr:@std/uuid@^1.0.7": "1.0.7", "jsr:@std/yaml@^1.0.5": "1.0.6", - "jsr:@zip-js/zip-js@^2.7.52": "2.7.60", + "jsr:@zip-js/zip-js@^2.7.52": "2.7.62", "npm:@opentelemetry/api@1": "1.9.0", "npm:@opentelemetry/api@^1.9.0": "1.9.0", "npm:@opentelemetry/sdk-trace-base@1": "1.30.1_@opentelemetry+api@1.9.0", - "npm:@preact/signals@^1.2.3": "1.3.2_preact@10.26.5", - "npm:@preact/signals@^1.3.0": "1.3.2_preact@10.26.5", - "npm:@types/node@*": "22.12.0", + "npm:@preact/signals@^1.2.3": "1.3.2_preact@10.26.6", + "npm:@preact/signals@^2.0.4": "2.0.4_preact@10.26.6", + "npm:@types/node@*": "22.15.15", "npm:autoprefixer@10.4.17": "10.4.17_postcss@8.4.35", "npm:cssnano@6.0.3": "6.0.3_postcss@8.4.35", "npm:esbuild-wasm@0.23.1": "0.23.1", + "npm:esbuild-wasm@0.25.4": "0.25.4", "npm:esbuild@0.23.1": "0.23.1", + "npm:esbuild@0.25.4": "0.25.4", "npm:github-slugger@2": "2.0.0", - "npm:linkedom@~0.16.11": "0.16.11", - "npm:marked-mangle@^1.1.9": "1.1.10_marked@14.1.4", - "npm:marked@^14.1.2": "14.1.4", + "npm:linkedom@~0.18.10": "0.18.10", + "npm:marked-mangle@^1.1.9": "1.1.10_marked@15.0.12", + "npm:marked@^15.0.11": "15.0.12", "npm:postcss@8.4.35": "8.4.35", - "npm:preact-render-to-string@^6.5.11": "6.5.13_preact@10.26.5", - "npm:preact@^10.22.0": "10.26.5", - "npm:preact@^10.24.1": "10.26.5", - "npm:preact@^10.25.1": "10.26.5", + "npm:preact-render-to-string@^6.5.11": "6.5.13_preact@10.26.6", + "npm:preact@^10.22.0": "10.26.6", + "npm:preact@^10.26.6": "10.26.6", "npm:prismjs@^1.29.0": "1.30.0", "npm:tailwindcss@^3.4.1": "3.4.17_postcss@8.5.3", - "npm:ts-morph@22": "22.0.0" + "npm:ts-morph@^25.0.1": "25.0.1" }, "jsr": { - "@astral/astral@0.5.2": { - "integrity": "dc4b7e0ea5d8186fcd9e33e2c54e62913d7eb99d5a2d4f987b1c5399d8e295de", + "@astral/astral@0.5.3": { + "integrity": "d6a4628313d8be99aac0f51005c1dc090fa3b4c6b5c8335c26a52d4842aa1276", "dependencies": [ "jsr:@deno-library/progress", - "jsr:@std/async", + "jsr:@std/async@1", "jsr:@std/fs@1", "jsr:@std/path@1", "jsr:@zip-js/zip-js" @@ -98,6 +108,7 @@ "@deno/cache-dir@0.14.0": { "integrity": "729f0b68e7fc96443c09c2c544b830ca70897bdd5168598446d752f7a4c731ad", "dependencies": [ + "jsr:@deno/graph@0.86", "jsr:@std/fmt@^1.0.3", "jsr:@std/fs@^1.0.6", "jsr:@std/io@0.225", @@ -107,9 +118,16 @@ "@deno/doc@0.172.0": { "integrity": "72a68ed533576a06feb930a84784ad9ba6d83ca9d581fc734d498c58e32b7cf5", "dependencies": [ - "jsr:@deno/cache-dir" + "jsr:@deno/cache-dir", + "jsr:@deno/graph@~0.82.3" ] }, + "@deno/graph@0.82.3": { + "integrity": "5c1fe944368172a9c87588ac81b82eb027ca78002a57521567e6264be322637e" + }, + "@deno/graph@0.86.9": { + "integrity": "c4f353a695bcc5246c099602977dabc6534eacea9999a35a8cb24e807192e6a1" + }, "@deno/otel@0.0.2": { "integrity": "4ef61b7eb1c4063f8224d66fc43f25e428a566d2e18785d0dc67bb70a318f0ff", "dependencies": [ @@ -117,25 +135,37 @@ "npm:@opentelemetry/sdk-trace-base" ] }, - "@fresh/core@2.0.0-alpha.29": { - "integrity": "5374a478c2d407da2a84a9802e00da2305de2945b0934e6a7b24a989a7b82e0f", + "@fresh/core@2.0.0-alpha.34": { + "integrity": "e177fc69b049b04128de87d243bd7de76582417d80d8d12dc19dd6786f196efa", "dependencies": [ "jsr:@luca/esbuild-deno-loader", - "jsr:@std/crypto", + "jsr:@std/crypto@1", "jsr:@std/datetime", "jsr:@std/encoding@1", "jsr:@std/fmt@1", "jsr:@std/fs@1", "jsr:@std/html@1", + "jsr:@std/http", "jsr:@std/jsonc", "jsr:@std/media-types@1", "jsr:@std/path@1", "jsr:@std/semver", "npm:@opentelemetry/api@^1.9.0", - "npm:esbuild", - "npm:esbuild-wasm", + "npm:@preact/signals@^2.0.4", + "npm:esbuild-wasm@0.23.1", + "npm:esbuild@0.23.1", "npm:preact-render-to-string", - "npm:preact@^10.25.1" + "npm:preact@^10.26.6" + ] + }, + "@fresh/plugin-tailwind@0.0.1-alpha.7": { + "integrity": "b940991bdb76f0995dc58b25183f1001d72c4020e049d384ad3fb751556aa2a9", + "dependencies": [ + "jsr:@std/path@0.221", + "npm:autoprefixer", + "npm:cssnano", + "npm:postcss", + "npm:tailwindcss" ] }, "@luca/esbuild-deno-loader@0.11.1": { @@ -151,32 +181,32 @@ "dependencies": [ "npm:@preact/signals@^1.2.3", "npm:preact@^10.22.0", - "npm:preact@^10.25.1" + "npm:preact@^10.26.6" ] }, + "@std/assert@0.221.0": { + "integrity": "a5f1aa6e7909dbea271754fd4ab3f4e687aeff4873b4cef9a320af813adb489a" + }, "@std/assert@1.0.13": { "integrity": "ae0d31e41919b12c656c742b22522c32fb26ed0cba32975cb0de2a273cb68b29", "dependencies": [ - "jsr:@std/internal" + "jsr:@std/internal@^1.0.6" ] }, - "@std/async@1.0.12": { - "integrity": "d1bfcec459e8012846fe4e38dfc4241ab23240ecda3d8d6dfcf6d81a632e803d" + "@std/async@1.0.13": { + "integrity": "1d76ca5d324aef249908f7f7fe0d39aaf53198e5420604a59ab5c035adc97c96" }, - "@std/bytes@1.0.5": { - "integrity": "4465dd739d7963d964c809202ebea6d5c6b8e3829ef25c6a224290fbb8a1021e" + "@std/bytes@1.0.6": { + "integrity": "f6ac6adbd8ccd99314045f5703e23af0a68d7f7e58364b47d2c7f408aeb5820a" }, "@std/cli@1.0.17": { "integrity": "e15b9abe629e17be90cc6216327f03a29eae613365f1353837fa749aad29ce7b" }, - "@std/collections@1.0.11": { - "integrity": "2f62cf9587484b1fff364f6c3e1f83478eea53dbb6faed6ffeda92ddb6b172f0" - }, - "@std/crypto@1.0.4": { - "integrity": "cee245c453bd5366207f4d8aa25ea3e9c86cecad2be3fefcaa6cb17203d79340" + "@std/collections@1.1.0": { + "integrity": "2ee8761c84c3d203f7a4ecd376f9ca88a0c559817a4a54c9150f28c0b948027c" }, - "@std/data-structures@1.0.7": { - "integrity": "16932d2c8d281f65eaaa2209af2473209881e33b1ced54cd1b015e7b4cdbb0d2" + "@std/crypto@1.0.5": { + "integrity": "0dcfbb319fe0bba1bd3af904ceb4f948cde1b92979ec1614528380ed308a3b40" }, "@std/datetime@0.225.4": { "integrity": "682bc21738b941a4ed1465be6da01704e8010a3a6d9b615de9458202b84e00ec" @@ -184,18 +214,18 @@ "@std/encoding@1.0.10": { "integrity": "8783c6384a2d13abd5e9e87a7ae0520a30e9f56aeeaa3bdf910a3eaaf5c811a1" }, - "@std/expect@1.0.15": { - "integrity": "eca360007b5a7f13dbfa1294224baee7fb98dcd460d8461fe64eeae302902945", + "@std/expect@1.0.16": { + "integrity": "ceeef6dda21f256a5f0f083fcc0eaca175428b523359a9b1d9b3a1df11cc7391", "dependencies": [ - "jsr:@std/assert", - "jsr:@std/internal" + "jsr:@std/assert@^1.0.13", + "jsr:@std/internal@^1.0.7" ] }, "@std/fmt@1.0.3": { "integrity": "97765c16aa32245ff4e2204ecf7d8562496a3cb8592340a80e7e554e0bb9149f" }, - "@std/fmt@1.0.7": { - "integrity": "2a727c043d8df62cd0b819b3fb709b64dd622e42c3b1bb817ea7e6cc606360fb" + "@std/fmt@1.0.8": { + "integrity": "71e1fc498787e4434d213647a6e43e794af4fd393ef8f52062246e06f7e372b7" }, "@std/front-matter@1.0.9": { "integrity": "ee6201d06674cbef137dda2252f62477450b48249e7d8d9ab57a30f85ff6f051", @@ -210,29 +240,32 @@ "jsr:@std/path@^1.0.9" ] }, - "@std/html@1.0.3": { - "integrity": "7a0ac35e050431fb49d44e61c8b8aac1ebd55937e0dc9ec6409aa4bab39a7988" + "@std/html@1.0.4": { + "integrity": "eff3497c08164e6ada49b7f81a28b5108087033823153d065e3f89467dd3d50e" }, - "@std/http@1.0.15": { - "integrity": "435a4934b4e196e82a8233f724da525f7b7112f3566502f28815e94764c19159", + "@std/http@1.0.16": { + "integrity": "80c8d08c4bfcf615b89978dcefb84f7e880087cf3b6b901703936f3592a06933", "dependencies": [ - "jsr:@std/cli@^1.0.17", + "jsr:@std/cli", "jsr:@std/encoding@^1.0.10", - "jsr:@std/fmt@^1.0.7", - "jsr:@std/html@^1.0.3", + "jsr:@std/fmt@^1.0.8", + "jsr:@std/html@^1.0.4", "jsr:@std/media-types@^1.1.0", "jsr:@std/net", "jsr:@std/path@^1.0.9", "jsr:@std/streams@^1.0.9" ] }, - "@std/internal@1.0.6": { - "integrity": "9533b128f230f73bd209408bb07a4b12f8d4255ab2a4d22a1fd6d87304aca9a4" + "@std/internal@1.0.7": { + "integrity": "39eeb5265190a7bc5d5591c9ff019490bd1f2c3907c044a11b0d545796158a0f" }, "@std/io@0.225.0": { - "integrity": "c1db7c5e5a231629b32d64b9a53139445b2ca640d828c26bf23e1c55f8c079b3", + "integrity": "c1db7c5e5a231629b32d64b9a53139445b2ca640d828c26bf23e1c55f8c079b3" + }, + "@std/io@0.225.2": { + "integrity": "3c740cd4ee4c082e6cfc86458f47e2ab7cb353dc6234d5e9b1f91a2de5f4d6c7", "dependencies": [ - "jsr:@std/bytes@^1.0.2" + "jsr:@std/bytes@^1.0.5" ] }, "@std/json@1.0.2": { @@ -250,6 +283,12 @@ "@std/net@1.0.4": { "integrity": "2f403b455ebbccf83d8a027d29c5a9e3a2452fea39bb2da7f2c04af09c8bc852" }, + "@std/path@0.221.0": { + "integrity": "0a36f6b17314ef653a3a1649740cc8db51b25a133ecfe838f20b79a56ebe0095", + "dependencies": [ + "jsr:@std/assert@0.221" + ] + }, "@std/path@1.0.9": { "integrity": "260a49f11edd3db93dd38350bf9cd1b4d1366afa98e81b86167b4e3dd750129e" }, @@ -262,14 +301,13 @@ "jsr:@std/bytes@^1.0.5" ] }, - "@std/testing@1.0.11": { - "integrity": "12b3db12d34f0f385a26248933bde766c0f8c5ad8b6ab34d4d38f528ab852f48", + "@std/testing@1.0.12": { + "integrity": "fec973a45ccc62c540fb89296199051fee142409138fd6e3eae409366bcd4720", "dependencies": [ - "jsr:@std/assert", - "jsr:@std/data-structures", - "jsr:@std/fs@^1.0.16", - "jsr:@std/internal", - "jsr:@std/path@^1.0.8" + "jsr:@std/assert@^1.0.13", + "jsr:@std/fs@^1.0.17", + "jsr:@std/internal@^1.0.7", + "jsr:@std/path@^1.0.9" ] }, "@std/toml@1.0.5": { @@ -278,11 +316,18 @@ "jsr:@std/collections" ] }, + "@std/uuid@1.0.7": { + "integrity": "6885db5cd60794049d1661b5cf06b1e1ed65b2affd054ec8b06da7d2efd421ca", + "dependencies": [ + "jsr:@std/bytes@^1.0.5", + "jsr:@std/crypto@^1.0.4" + ] + }, "@std/yaml@1.0.6": { "integrity": "c9a5a914e1d51c46756cb10e356710035cfa905e713c90d3b711413fd3aead27" }, - "@zip-js/zip-js@2.7.60": { - "integrity": "6bb6cf0d02b64ca9acba8c7bc072293609ec3bad584db2b5cf3bb089e031ea0e" + "@zip-js/zip-js@2.7.62": { + "integrity": "11cbe0746fa1e52e6e0a601c89ba97365f16e38a07f139b9d9914f988aec9081" } }, "npm": { @@ -294,121 +339,246 @@ "os": ["aix"], "cpu": ["ppc64"] }, + "@esbuild/aix-ppc64@0.25.4": { + "integrity": "sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==", + "os": ["aix"], + "cpu": ["ppc64"] + }, "@esbuild/android-arm64@0.23.1": { "integrity": "sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==", "os": ["android"], "cpu": ["arm64"] }, + "@esbuild/android-arm64@0.25.4": { + "integrity": "sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==", + "os": ["android"], + "cpu": ["arm64"] + }, "@esbuild/android-arm@0.23.1": { "integrity": "sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==", "os": ["android"], "cpu": ["arm"] }, + "@esbuild/android-arm@0.25.4": { + "integrity": "sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==", + "os": ["android"], + "cpu": ["arm"] + }, "@esbuild/android-x64@0.23.1": { "integrity": "sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==", "os": ["android"], "cpu": ["x64"] }, + "@esbuild/android-x64@0.25.4": { + "integrity": "sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==", + "os": ["android"], + "cpu": ["x64"] + }, "@esbuild/darwin-arm64@0.23.1": { "integrity": "sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==", "os": ["darwin"], "cpu": ["arm64"] }, + "@esbuild/darwin-arm64@0.25.4": { + "integrity": "sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==", + "os": ["darwin"], + "cpu": ["arm64"] + }, "@esbuild/darwin-x64@0.23.1": { "integrity": "sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==", "os": ["darwin"], "cpu": ["x64"] }, + "@esbuild/darwin-x64@0.25.4": { + "integrity": "sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==", + "os": ["darwin"], + "cpu": ["x64"] + }, "@esbuild/freebsd-arm64@0.23.1": { "integrity": "sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==", "os": ["freebsd"], "cpu": ["arm64"] }, + "@esbuild/freebsd-arm64@0.25.4": { + "integrity": "sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==", + "os": ["freebsd"], + "cpu": ["arm64"] + }, "@esbuild/freebsd-x64@0.23.1": { "integrity": "sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==", "os": ["freebsd"], "cpu": ["x64"] }, + "@esbuild/freebsd-x64@0.25.4": { + "integrity": "sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==", + "os": ["freebsd"], + "cpu": ["x64"] + }, "@esbuild/linux-arm64@0.23.1": { "integrity": "sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==", "os": ["linux"], "cpu": ["arm64"] }, + "@esbuild/linux-arm64@0.25.4": { + "integrity": "sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==", + "os": ["linux"], + "cpu": ["arm64"] + }, "@esbuild/linux-arm@0.23.1": { "integrity": "sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==", "os": ["linux"], "cpu": ["arm"] }, + "@esbuild/linux-arm@0.25.4": { + "integrity": "sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==", + "os": ["linux"], + "cpu": ["arm"] + }, "@esbuild/linux-ia32@0.23.1": { "integrity": "sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==", "os": ["linux"], "cpu": ["ia32"] }, + "@esbuild/linux-ia32@0.25.4": { + "integrity": "sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==", + "os": ["linux"], + "cpu": ["ia32"] + }, "@esbuild/linux-loong64@0.23.1": { "integrity": "sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==", "os": ["linux"], "cpu": ["loong64"] }, + "@esbuild/linux-loong64@0.25.4": { + "integrity": "sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==", + "os": ["linux"], + "cpu": ["loong64"] + }, "@esbuild/linux-mips64el@0.23.1": { "integrity": "sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==", "os": ["linux"], "cpu": ["mips64el"] }, + "@esbuild/linux-mips64el@0.25.4": { + "integrity": "sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==", + "os": ["linux"], + "cpu": ["mips64el"] + }, "@esbuild/linux-ppc64@0.23.1": { "integrity": "sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==", "os": ["linux"], "cpu": ["ppc64"] }, + "@esbuild/linux-ppc64@0.25.4": { + "integrity": "sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==", + "os": ["linux"], + "cpu": ["ppc64"] + }, "@esbuild/linux-riscv64@0.23.1": { "integrity": "sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==", "os": ["linux"], "cpu": ["riscv64"] }, + "@esbuild/linux-riscv64@0.25.4": { + "integrity": "sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==", + "os": ["linux"], + "cpu": ["riscv64"] + }, "@esbuild/linux-s390x@0.23.1": { "integrity": "sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==", "os": ["linux"], "cpu": ["s390x"] }, + "@esbuild/linux-s390x@0.25.4": { + "integrity": "sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==", + "os": ["linux"], + "cpu": ["s390x"] + }, "@esbuild/linux-x64@0.23.1": { "integrity": "sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==", "os": ["linux"], "cpu": ["x64"] }, + "@esbuild/linux-x64@0.25.4": { + "integrity": "sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==", + "os": ["linux"], + "cpu": ["x64"] + }, + "@esbuild/netbsd-arm64@0.25.4": { + "integrity": "sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==", + "os": ["netbsd"], + "cpu": ["arm64"] + }, "@esbuild/netbsd-x64@0.23.1": { "integrity": "sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==", "os": ["netbsd"], "cpu": ["x64"] }, + "@esbuild/netbsd-x64@0.25.4": { + "integrity": "sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==", + "os": ["netbsd"], + "cpu": ["x64"] + }, "@esbuild/openbsd-arm64@0.23.1": { "integrity": "sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==", "os": ["openbsd"], "cpu": ["arm64"] }, + "@esbuild/openbsd-arm64@0.25.4": { + "integrity": "sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==", + "os": ["openbsd"], + "cpu": ["arm64"] + }, "@esbuild/openbsd-x64@0.23.1": { "integrity": "sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==", "os": ["openbsd"], "cpu": ["x64"] }, + "@esbuild/openbsd-x64@0.25.4": { + "integrity": "sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==", + "os": ["openbsd"], + "cpu": ["x64"] + }, "@esbuild/sunos-x64@0.23.1": { "integrity": "sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==", "os": ["sunos"], "cpu": ["x64"] }, + "@esbuild/sunos-x64@0.25.4": { + "integrity": "sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==", + "os": ["sunos"], + "cpu": ["x64"] + }, "@esbuild/win32-arm64@0.23.1": { "integrity": "sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==", "os": ["win32"], "cpu": ["arm64"] }, + "@esbuild/win32-arm64@0.25.4": { + "integrity": "sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==", + "os": ["win32"], + "cpu": ["arm64"] + }, "@esbuild/win32-ia32@0.23.1": { "integrity": "sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==", "os": ["win32"], "cpu": ["ia32"] }, + "@esbuild/win32-ia32@0.25.4": { + "integrity": "sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==", + "os": ["win32"], + "cpu": ["ia32"] + }, "@esbuild/win32-x64@0.23.1": { "integrity": "sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==", "os": ["win32"], "cpu": ["x64"] }, + "@esbuild/win32-x64@0.25.4": { + "integrity": "sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==", + "os": ["win32"], + "cpu": ["x64"] + }, "@isaacs/cliui@8.0.2": { "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dependencies": [ @@ -497,27 +667,33 @@ "@preact/signals-core@1.8.0": { "integrity": "sha512-OBvUsRZqNmjzCZXWLxkZfhcgT+Fk8DDcT/8vD6a1xhDemodyy87UJRJfASMuSD8FaAIeGgGm85ydXhm7lr4fyA==" }, - "@preact/signals@1.3.2_preact@10.26.5": { + "@preact/signals@1.3.2_preact@10.26.6": { "integrity": "sha512-naxcJgUJ6BTOROJ7C3QML7KvwKwCXQJYTc5L/b0eEsdYgPB6SxwoQ1vDGcS0Q7GVjAenVq/tXrybVdFShHYZWg==", "dependencies": [ "@preact/signals-core", "preact" ] }, + "@preact/signals@2.0.4_preact@10.26.6": { + "integrity": "sha512-9241aGnIv7y0IGzaq2vkBMe8/0jGnnmEEUeFmAoTWsaj8q/BW2PVekL8nHVJcy69bBww6rwEy3A1tc6yPE0sJA==", + "dependencies": [ + "@preact/signals-core", + "preact" + ] + }, "@trysound/sax@0.2.0": { "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==" }, - "@ts-morph/common@0.23.0": { - "integrity": "sha512-m7Lllj9n/S6sOkCkRftpM7L24uvmfXQFedlW/4hENcuJH1HHm9u5EgxZb9uVjQSCGrbBWBkOGgcTxNg36r6ywA==", + "@ts-morph/common@0.26.1": { + "integrity": "sha512-Sn28TGl/4cFpcM+jwsH1wLncYq3FtN/BIpem+HOygfBWPT5pAeS5dB4VFVzV8FbnOKHpDLZmvAl4AjPEev5idA==", "dependencies": [ "fast-glob", "minimatch", - "mkdirp", "path-browserify" ] }, - "@types/node@22.12.0": { - "integrity": "sha512-Fll2FZ1riMjNmlmJOdAyY5pUbkftXslB5DgEzlIuNaiWhXd00FhWxVC/r4yV/4wBb9JfImTu+jiSvXTkJ7F/gA==", + "@types/node@22.15.15": { + "integrity": "sha512-R5muMcZob3/Jjchn5LcO8jdKwSCbzqmPB6ruBxMcf9kbxtniZHP327s6C37iOfuw8mbKK3cAQa7sEl7afLrQ8A==", "dependencies": [ "undici-types" ] @@ -584,8 +760,8 @@ "fill-range" ] }, - "browserslist@4.24.4": { - "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", + "browserslist@4.24.5": { + "integrity": "sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw==", "dependencies": [ "caniuse-lite", "electron-to-chromium", @@ -606,8 +782,8 @@ "lodash.uniq" ] }, - "caniuse-lite@1.0.30001715": { - "integrity": "sha512-7ptkFGMm2OAOgvZpwgA4yjQ5SQbrNVGdRjzH0pBdy1Fasvcr+KAeECmbCAECzTuDuoX0FCY8KzUxjf9+9kfZEw==" + "caniuse-lite@1.0.30001717": { + "integrity": "sha512-auPpttCq6BDEG8ZAuHJIplGw6GODhjw+/11e7IjpnYCxZcW/ONgPs0KVBJ0d1bY3e2+7PRe5RCLyP+PfwVgkYw==" }, "chokidar@3.6.0": { "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", @@ -760,7 +936,7 @@ "dependencies": [ "domelementtype", "domhandler", - "entities" + "entities@4.5.0" ] }, "domelementtype@2.3.0": { @@ -783,8 +959,8 @@ "eastasianwidth@0.2.0": { "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" }, - "electron-to-chromium@1.5.142": { - "integrity": "sha512-Ah2HgkTu/9RhTDNThBtzu2Wirdy4DC9b0sMT1pUhbkZQ5U/iwmE+PHZX1MpjD5IkJCc2wSghgGG/B04szAx07w==" + "electron-to-chromium@1.5.151": { + "integrity": "sha512-Rl6uugut2l9sLojjS4H4SAr3A4IgACMLgpuEMPYCVcKydzfyPrn5absNRju38IhQOf/NwjJY8OGWjlteqYeBCA==" }, "emoji-regex@8.0.0": { "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" @@ -795,37 +971,76 @@ "entities@4.5.0": { "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==" }, + "entities@6.0.0": { + "integrity": "sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==" + }, "esbuild-wasm@0.23.1": { "integrity": "sha512-L3vn7ctvBrtScRfoB0zG1eOCiV4xYvpLYWfe6PDZuV+iDFDm4Mt3xeLIDllG8cDHQ8clUouK3XekulE+cxgkgw==", "bin": true }, + "esbuild-wasm@0.25.4": { + "integrity": "sha512-2HlCS6rNvKWaSKhWaG/YIyRsTsL3gUrMP2ToZMBIjw9LM7vVcIs+rz8kE2vExvTJgvM8OKPqNpcHawY/BQc/qQ==", + "bin": true + }, "esbuild@0.23.1": { "integrity": "sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==", "optionalDependencies": [ - "@esbuild/aix-ppc64", - "@esbuild/android-arm", - "@esbuild/android-arm64", - "@esbuild/android-x64", - "@esbuild/darwin-arm64", - "@esbuild/darwin-x64", - "@esbuild/freebsd-arm64", - "@esbuild/freebsd-x64", - "@esbuild/linux-arm", - "@esbuild/linux-arm64", - "@esbuild/linux-ia32", - "@esbuild/linux-loong64", - "@esbuild/linux-mips64el", - "@esbuild/linux-ppc64", - "@esbuild/linux-riscv64", - "@esbuild/linux-s390x", - "@esbuild/linux-x64", - "@esbuild/netbsd-x64", - "@esbuild/openbsd-arm64", - "@esbuild/openbsd-x64", - "@esbuild/sunos-x64", - "@esbuild/win32-arm64", - "@esbuild/win32-ia32", - "@esbuild/win32-x64" + "@esbuild/aix-ppc64@0.23.1", + "@esbuild/android-arm@0.23.1", + "@esbuild/android-arm64@0.23.1", + "@esbuild/android-x64@0.23.1", + "@esbuild/darwin-arm64@0.23.1", + "@esbuild/darwin-x64@0.23.1", + "@esbuild/freebsd-arm64@0.23.1", + "@esbuild/freebsd-x64@0.23.1", + "@esbuild/linux-arm@0.23.1", + "@esbuild/linux-arm64@0.23.1", + "@esbuild/linux-ia32@0.23.1", + "@esbuild/linux-loong64@0.23.1", + "@esbuild/linux-mips64el@0.23.1", + "@esbuild/linux-ppc64@0.23.1", + "@esbuild/linux-riscv64@0.23.1", + "@esbuild/linux-s390x@0.23.1", + "@esbuild/linux-x64@0.23.1", + "@esbuild/netbsd-x64@0.23.1", + "@esbuild/openbsd-arm64@0.23.1", + "@esbuild/openbsd-x64@0.23.1", + "@esbuild/sunos-x64@0.23.1", + "@esbuild/win32-arm64@0.23.1", + "@esbuild/win32-ia32@0.23.1", + "@esbuild/win32-x64@0.23.1" + ], + "scripts": true, + "bin": true + }, + "esbuild@0.25.4": { + "integrity": "sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==", + "optionalDependencies": [ + "@esbuild/aix-ppc64@0.25.4", + "@esbuild/android-arm@0.25.4", + "@esbuild/android-arm64@0.25.4", + "@esbuild/android-x64@0.25.4", + "@esbuild/darwin-arm64@0.25.4", + "@esbuild/darwin-x64@0.25.4", + "@esbuild/freebsd-arm64@0.25.4", + "@esbuild/freebsd-x64@0.25.4", + "@esbuild/linux-arm@0.25.4", + "@esbuild/linux-arm64@0.25.4", + "@esbuild/linux-ia32@0.25.4", + "@esbuild/linux-loong64@0.25.4", + "@esbuild/linux-mips64el@0.25.4", + "@esbuild/linux-ppc64@0.25.4", + "@esbuild/linux-riscv64@0.25.4", + "@esbuild/linux-s390x@0.25.4", + "@esbuild/linux-x64@0.25.4", + "@esbuild/netbsd-arm64", + "@esbuild/netbsd-x64@0.25.4", + "@esbuild/openbsd-arm64@0.25.4", + "@esbuild/openbsd-x64@0.25.4", + "@esbuild/sunos-x64@0.25.4", + "@esbuild/win32-arm64@0.25.4", + "@esbuild/win32-ia32@0.25.4", + "@esbuild/win32-x64@0.25.4" ], "scripts": true, "bin": true @@ -909,13 +1124,13 @@ "html-escaper@3.0.3": { "integrity": "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==" }, - "htmlparser2@9.1.0": { - "integrity": "sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==", + "htmlparser2@10.0.0": { + "integrity": "sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==", "dependencies": [ "domelementtype", "domhandler", "domutils", - "entities" + "entities@6.0.0" ] }, "is-binary-path@2.1.0": { @@ -967,8 +1182,8 @@ "lines-and-columns@1.2.4": { "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, - "linkedom@0.16.11": { - "integrity": "sha512-WgaTVbj7itjyXTsCvgerpneERXShcnNJF5VIV+/4SLtyRLN+HppPre/WDHRofAr2IpEuujSNgJbCBd5lMl6lRw==", + "linkedom@0.18.10": { + "integrity": "sha512-ESCqVAtme2GI3zZnlVRidiydByV6WmPlmKeFzFVQslADiAO2Wi+H6xL/5kr/pUOESjEoVb2Eb3cYFJ/TQhQOWA==", "dependencies": [ "css-select", "cssom", @@ -986,14 +1201,14 @@ "lru-cache@10.4.3": { "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" }, - "marked-mangle@1.1.10_marked@14.1.4": { + "marked-mangle@1.1.10_marked@15.0.12": { "integrity": "sha512-TrpN67SMJJdzXXWIzOd/QmnpsC5o1B44PUYaG2bh1XEbqVjA0UCI2ijFuE5LWESwKeI2gCP5FqcUHRGQwFtDIA==", "dependencies": [ "marked" ] }, - "marked@14.1.4": { - "integrity": "sha512-vkVZ8ONmUdPnjCKc5uTRvmkRbx4EAi2OkTOXmfTDhZz3OFqMNBM1oTTWwTr4HY4uAEojhzPf+Fy8F1DWa3Sndg==", + "marked@15.0.12": { + "integrity": "sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==", "bin": true }, "mdn-data@2.0.28": { @@ -1021,10 +1236,6 @@ "minipass@7.1.2": { "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==" }, - "mkdirp@3.0.1": { - "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", - "bin": true - }, "mz@2.7.0": { "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", "dependencies": [ @@ -1350,14 +1561,14 @@ "source-map-js" ] }, - "preact-render-to-string@6.5.13_preact@10.26.5": { + "preact-render-to-string@6.5.13_preact@10.26.6": { "integrity": "sha512-iGPd+hKPMFKsfpR2vL4kJ6ZPcFIoWZEcBf0Dpm3zOpdVvj77aY8RlLiQji5OMrngEyaxGogeakTb54uS2FvA6w==", "dependencies": [ "preact" ] }, - "preact@10.26.5": { - "integrity": "sha512-fmpDkgfGU6JYux9teDWLhj9mKN55tyepwYbxHgQuIxbWQzgFg5vk7Mrrtfx7xRxq798ynkY4DDDxZr235Kk+4w==" + "preact@10.26.6": { + "integrity": "sha512-5SRRBinwpwkaD+OqlBDeITlRgvd8I8QlxHJw9AxSdMNV6O+LodN9nUyYGpSF7sadHjs6RzeFShMexC6DbtWr9g==" }, "prismjs@1.30.0": { "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==" @@ -1524,8 +1735,8 @@ "ts-interface-checker@0.1.13": { "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" }, - "ts-morph@22.0.0": { - "integrity": "sha512-M9MqFGZREyeb5fTl6gNHKZLqBQA0TjA1lea+CR48R8EBTDuWrNqW6ccC5QvjNR4s6wDumD3LTCjOFSp9iwlzaw==", + "ts-morph@25.0.1": { + "integrity": "sha512-QJEiTdnz1YjrB3JFhd626gX4rKHDLSjSVMvGGG4v7ONc3RBwa0Eei98G9AT9uNFDMtV54JyuXsFeC+OH0n6bXQ==", "dependencies": [ "@ts-morph/common", "code-block-writer" @@ -1534,10 +1745,10 @@ "uhyphen@0.2.0": { "integrity": "sha512-qz3o9CHXmJJPGBdqzab7qAYuW8kQGKNEuoHFYrBwV6hWIMcpAmxDLXojcHfFr9US1Pe6zUswEIJIbLI610fuqA==" }, - "undici-types@6.20.0": { - "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==" + "undici-types@6.21.0": { + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==" }, - "update-browserslist-db@1.1.3_browserslist@4.24.4": { + "update-browserslist-db@1.1.3_browserslist@4.24.5": { "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", "dependencies": [ "browserslist", @@ -1578,7 +1789,8 @@ } }, "redirects": { - "https://esm.sh/@types/react@~19.0.7/index.d.ts": "https://esm.sh/@types/react@19.0.14/index.d.ts" + "https://esm.sh/@types/react@~19.0.7/index.d.ts": "https://esm.sh/@types/react@19.0.14/index.d.ts", + "https://github.com/denoland/std/raw/refs/heads/main/_tools/check_docs.ts": "https://raw.githubusercontent.com/denoland/std/refs/heads/main/_tools/check_docs.ts" }, "remote": { "https://deno.land/std@0.120.0/async/deadline.ts": "1d6ac7aeaee22f75eb86e4e105d6161118aad7b41ae2dd14f4cfd3bf97472b93", @@ -1615,24 +1827,57 @@ "https://deno.land/x/case@2.1.1/vendor/camelCaseRegexp.ts": "7d9ff02aad4ab6429eeab7c7353f7bcdd6cc5909a8bd3dda97918c8bbb7621ae", "https://deno.land/x/case@2.1.1/vendor/camelCaseUpperRegexp.ts": "292de54a698370f90adcdf95727993d09888b7f33d17f72f8e54ba75f7791787", "https://deno.land/x/case@2.1.1/vendor/nonWordRegexp.ts": "c1a052629a694144b48c66b0175a22a83f4d61cb40f4e45293fc5d6b123f927e", + "https://deno.land/x/imagescript@1.3.0/ImageScript.js": "cf90773c966031edd781ed176c598f7ed495e7694cd9b86c986d2d97f783cca0", + "https://deno.land/x/imagescript@1.3.0/mod.ts": "18a6cb83c55e690c873505f6fe867364c678afb64934fe7aef593a6b92f79995", + "https://deno.land/x/imagescript@1.3.0/png/src/crc.mjs": "5cf50de181d61dd00e66a240d811018ba5070afa8bba302f393604404604de84", + "https://deno.land/x/imagescript@1.3.0/png/src/mem.mjs": "4968d400dae069b4bf0ef4767c1802fd2cc7d15d90eda4cfadf5b4cd19b96c6d", + "https://deno.land/x/imagescript@1.3.0/png/src/png.mjs": "96ef0ceff1b5a6cd9304749e5f187b4ab238509fb5f9a8be8ee934240271ed8d", + "https://deno.land/x/imagescript@1.3.0/png/src/zlib.mjs": "9867dc3fab1d31b664f9344b0d7e977f493d9c912a76c760d012ed2b89f7061c", + "https://deno.land/x/imagescript@1.3.0/utils/buffer.js": "952cb1beb8827e50a493a5d1f29a4845e8c648789406d389dd51f51205ba02d8", + "https://deno.land/x/imagescript@1.3.0/utils/crc32.js": "573d6222b3605890714ebc374e687ec2aa3e9a949223ea199483e47ca4864f7d", + "https://deno.land/x/imagescript@1.3.0/utils/png.js": "fbed9117e0a70602645d70df9c103ff6e79c03e987bd5c1685dcb4200729b6de", + "https://deno.land/x/imagescript@1.3.0/utils/wasm/font.js": "9e75d842608c057045698d6a7cdf5ffd27241b5cdea0391c89a1917b31294524", + "https://deno.land/x/imagescript@1.3.0/utils/wasm/gif.js": "8b86f7b96486bb8ff50fbc7c7487f86cb5cef85e6acd71e1def78a1aa2f12e4f", + "https://deno.land/x/imagescript@1.3.0/utils/wasm/jpeg.js": "75295e2fcf96b4f7bb894b3844fdaa8140d63169d28b466b5d5be89d59a7b6e6", + "https://deno.land/x/imagescript@1.3.0/utils/wasm/png.js": "0659536a8dd8f892c8346e268b2754b4414fad0ec1e9794dfcde1ba1c804ee02", + "https://deno.land/x/imagescript@1.3.0/utils/wasm/svg.js": "f5c8a9d1977b51a7c07549ceb6bbbaca9497321a193f28b3dc229a42d91bcf14", + "https://deno.land/x/imagescript@1.3.0/utils/wasm/tiff.js": "c2d7bdaef094df25aae1752e75167f485e89275d76a1379e39d8949580b7af4f", + "https://deno.land/x/imagescript@1.3.0/utils/wasm/zlib.js": "749875f83abffe24d3b977475a0cbd5f9b52bee1fbdbef61ec183cbfc17805f6", + "https://deno.land/x/imagescript@1.3.0/v2/framebuffer.mjs": "add44ff184636659714b3c6d4b896f628545451abffbc30b5bcc2e8d9a73d012", + "https://deno.land/x/imagescript@1.3.0/v2/ops/blur.mjs": "80716f1ffab8a2aeb54a036f583bf51a2b9dd37e005adc000add803df8e8a12f", + "https://deno.land/x/imagescript@1.3.0/v2/ops/color.mjs": "5e72cdcbf97dc939a2795223f01e3cb0544c0c56b03ea2aa026050df58348814", + "https://deno.land/x/imagescript@1.3.0/v2/ops/crop.mjs": "69431fa6f687fd9f0c31eff0ec27d7ac925275005e53a37f0c3fab4cc4d9a9ea", + "https://deno.land/x/imagescript@1.3.0/v2/ops/fill.mjs": "cf1b9488314753fbc9ebf03410ac74c2a34ea5a69fb6892cd6e8366cd1930d93", + "https://deno.land/x/imagescript@1.3.0/v2/ops/flip.mjs": "825a34a66567dcf15e76a719f1bf2f66fb106503cd69942292b1b0ae05c5718e", + "https://deno.land/x/imagescript@1.3.0/v2/ops/index.mjs": "423ba687119be2bba8cec72890577d3afa3621b6b8108912242fe937a183f2aa", + "https://deno.land/x/imagescript@1.3.0/v2/ops/iterator.mjs": "c2adf3d90ce00719a02c48c97634574176a3501ff026676259bd71aa8f5d69b9", + "https://deno.land/x/imagescript@1.3.0/v2/ops/overlay.mjs": "7e6e2c2ffd25006d52597ab8babc5f8f503d388a3fdf2fbc0eaea02799a020c9", + "https://deno.land/x/imagescript@1.3.0/v2/ops/resize.mjs": "814e78ebce8eaf8f1f918688db7b52a141405e06a36ed4b25d04413d69e7d17b", + "https://deno.land/x/imagescript@1.3.0/v2/ops/rotate.mjs": "a1b65616717bd2eed8db406affea3263b4674dada46b56441ef38167a187455d", + "https://deno.land/x/imagescript@1.3.0/v2/util/mem.mjs": "4968d400dae069b4bf0ef4767c1802fd2cc7d15d90eda4cfadf5b4cd19b96c6d", "https://esm.sh/@docsearch/js@3.5.2/es2020/js.mjs": "9b278cf3c0b26feded7d8efeac8e2b50f76bbafcf173a95002944bcc3482830a", "https://esm.sh/@docsearch/js@3.5.2?target=es2020": "4bad084f771a1923fe042ece62a9078f482f8642cb0b1acb890905e58586fee7", - "https://raw.githubusercontent.com/denoland/ga4/main/mod.ts": "36f72ba1c90b5ebdb811427f367cd95fa6772d2de2fb45d6e57550501ee6d476" + "https://raw.githubusercontent.com/denoland/ga4/main/mod.ts": "36f72ba1c90b5ebdb811427f367cd95fa6772d2de2fb45d6e57550501ee6d476", + "https://raw.githubusercontent.com/denoland/std/refs/heads/main/_tools/check_docs.ts": "59c29d6a5de45d04c5cab1078c4aacbed9edd0a6b83a6469f55318665e5be6b2", + "https://raw.githubusercontent.com/denoland/std/refs/heads/main/_tools/utils.ts": "c2e38ed7e7a9a8c0fbaf8d70aa808fb02f2cbb5e71ef18d634feb4b479c6a001" }, "workspace": { "dependencies": [ - "jsr:@astral/astral@~0.5.2", + "jsr:@astral/astral@~0.5.3", "jsr:@deno/doc@0.172", - "jsr:@fresh/core@^2.0.0-alpha.26", + "jsr:@fresh/core@^2.0.0-alpha.29", + "jsr:@fresh/plugin-tailwind@^0.0.1-alpha.7", "jsr:@luca/esbuild-deno-loader@0.11", "jsr:@marvinh-test/fresh-island@^0.0.1", - "jsr:@std/async@1", + "jsr:@std/async@^1.0.13", + "jsr:@std/cli@^1.0.17", "jsr:@std/collections@^1.0.11", "jsr:@std/crypto@1", "jsr:@std/datetime@~0.225.2", "jsr:@std/encoding@1", - "jsr:@std/expect@1", - "jsr:@std/fmt@1", + "jsr:@std/expect@^1.0.16", + "jsr:@std/fmt@^1.0.7", + "jsr:@std/front-matter@^1.0.5", "jsr:@std/fs@1", "jsr:@std/html@1", "jsr:@std/http@^1.0.15", @@ -1641,73 +1886,24 @@ "jsr:@std/path@1", "jsr:@std/semver@1", "jsr:@std/streams@1", - "jsr:@std/testing@1", + "jsr:@std/testing@^1.0.12", + "jsr:@std/uuid@^1.0.7", "npm:@opentelemetry/api@^1.9.0", - "npm:@preact/signals@^1.2.3", - "npm:esbuild-wasm@0.23.1", - "npm:esbuild@0.23.1", - "npm:linkedom@~0.16.11", + "npm:@preact/signals@^2.0.4", + "npm:autoprefixer@10.4.17", + "npm:cssnano@6.0.3", + "npm:esbuild-wasm@0.25.4", + "npm:esbuild@0.25.4", + "npm:github-slugger@2", + "npm:linkedom@~0.18.10", + "npm:marked-mangle@^1.1.9", + "npm:marked@^15.0.11", + "npm:postcss@8.4.35", "npm:preact-render-to-string@^6.5.11", - "npm:preact@^10.25.1" - ], - "members": { - "init": { - "dependencies": [ - "jsr:@std/cli@1", - "jsr:@std/fmt@1", - "jsr:@std/path@1" - ] - }, - "plugin-tailwindcss": { - "dependencies": [ - "jsr:@fresh/core@^2.0.0-alpha.22", - "jsr:@std/path@1", - "npm:autoprefixer@10.4.17", - "npm:cssnano@6.0.3", - "npm:postcss@8.4.35", - "npm:tailwindcss@^3.4.1" - ] - }, - "update": { - "dependencies": [ - "jsr:@std/cli@1", - "jsr:@std/fmt@1", - "jsr:@std/jsonc@1", - "jsr:@std/path@1", - "jsr:@std/semver@1", - "npm:ts-morph@22" - ] - }, - "www": { - "dependencies": [ - "jsr:@luca/esbuild-deno-loader@0.11", - "jsr:@std/crypto@1", - "jsr:@std/datetime@0.225.0", - "jsr:@std/encoding@1", - "jsr:@std/fmt@1", - "jsr:@std/front-matter@^1.0.5", - "jsr:@std/fs@1", - "jsr:@std/html@1", - "jsr:@std/jsonc@1", - "jsr:@std/media-types@1", - "jsr:@std/path@1", - "jsr:@std/semver@1", - "npm:@opentelemetry/api@^1.9.0", - "npm:@preact/signals@^1.3.0", - "npm:autoprefixer@10.4.17", - "npm:cssnano@6.0.3", - "npm:esbuild-wasm@0.23.1", - "npm:esbuild@0.23.1", - "npm:github-slugger@2", - "npm:marked-mangle@^1.1.9", - "npm:marked@^14.1.2", - "npm:postcss@8.4.35", - "npm:preact-render-to-string@^6.5.11", - "npm:preact@^10.24.1", - "npm:prismjs@^1.29.0", - "npm:tailwindcss@^3.4.1" - ] - } - } + "npm:preact@^10.26.6", + "npm:prismjs@^1.29.0", + "npm:tailwindcss@^3.4.1", + "npm:ts-morph@^25.0.1" + ] } } diff --git a/docs/latest/concepts/deployment.md b/docs/latest/concepts/deployment.md index 0f7ff476996..e33bf70e08f 100644 --- a/docs/latest/concepts/deployment.md +++ b/docs/latest/concepts/deployment.md @@ -76,7 +76,7 @@ that includes all assets and dependencies. This executable can run on any platform without requiring Deno to be installed. ```sh Terminal -$ deno build +$ deno task build $ deno compile --include static --include _fresh --include deno.json -A main.ts ``` diff --git a/docs/latest/concepts/server-configuration.md b/docs/latest/concepts/server-configuration.md index 77407a20afc..7e6a35b8664 100644 --- a/docs/latest/concepts/server-configuration.md +++ b/docs/latest/concepts/server-configuration.md @@ -167,10 +167,10 @@ The `basePath` is also applied to the `src` and `srcset` attribute of ## Server -Now that Deno has stabilized [Deno.serve](https://deno.land/api?s=Deno.serve) -and Fresh has switched to using this API, all server configuration options are -embedded in `server` inside the `FreshConfig`. The fully expanded set of -parameters looks like this: +Now that Deno has stabilized +[Deno.serve](https://docs.deno.com/api/deno/~/Deno.serve) and Fresh has switched +to using this API, all server configuration options are embedded in `server` +inside the `FreshConfig`. The fully expanded set of parameters looks like this: ```ts server: { diff --git a/docs/latest/examples/client-side-components-and-libraries.md b/docs/latest/examples/client-side-components-and-libraries.md index 8cc42763c10..0224881c3fa 100644 --- a/docs/latest/examples/client-side-components-and-libraries.md +++ b/docs/latest/examples/client-side-components-and-libraries.md @@ -53,7 +53,7 @@ function LeafletProvider(props: { children: ComponentChildren }) {

Leaflet must be loaded on the client. No children will render

); } - const [value, setValue] = useState(null); + const value = useSignal(null) return ( <> {/* Load Leaflet CSS */} @@ -65,7 +65,7 @@ function LeafletProvider(props: { children: ComponentChildren }) { /> {/* Load Leaflet JS */}