diff --git a/examples/bugs/gh-223/package.json b/examples/bugs/gh-223/package.json index a7156dc2c..7c3bfad38 100644 --- a/examples/bugs/gh-223/package.json +++ b/examples/bugs/gh-223/package.json @@ -32,6 +32,6 @@ "postcss": "^8.4.49", "tailwindcss": "^3.4.17", "typescript": "^5.7.2", - "wrangler": "^3.107.0" + "wrangler": "catalog:" } } diff --git a/examples/e2e/app-pages-router/open-next.config.ts b/examples/e2e/app-pages-router/open-next.config.ts index 4156694c0..1276dd09d 100644 --- a/examples/e2e/app-pages-router/open-next.config.ts +++ b/examples/e2e/app-pages-router/open-next.config.ts @@ -1,8 +1,8 @@ import { defineCloudflareConfig } from "@opennextjs/cloudflare"; -import kvIncrementalCache from "@opennextjs/cloudflare/overrides/incremental-cache/kv-incremental-cache"; +import r2IncrementalCache from "@opennextjs/cloudflare/overrides/incremental-cache/r2-incremental-cache"; import memoryQueue from "@opennextjs/cloudflare/overrides/queue/memory-queue"; export default defineCloudflareConfig({ - incrementalCache: kvIncrementalCache, + incrementalCache: r2IncrementalCache, queue: memoryQueue, }); diff --git a/examples/e2e/app-pages-router/wrangler.jsonc b/examples/e2e/app-pages-router/wrangler.jsonc index ecc0ab45e..4ae6c168d 100644 --- a/examples/e2e/app-pages-router/wrangler.jsonc +++ b/examples/e2e/app-pages-router/wrangler.jsonc @@ -8,10 +8,10 @@ "directory": ".open-next/assets", "binding": "ASSETS" }, - "kv_namespaces": [ + "r2_buckets": [ { - "binding": "NEXT_INC_CACHE_KV", - "id": "" + "binding": "NEXT_INC_CACHE_R2_BUCKET", + "bucket_name": "" } ], "services": [ diff --git a/examples/e2e/app-router/open-next.config.ts b/examples/e2e/app-router/open-next.config.ts index 6322ba96c..b202bbb13 100644 --- a/examples/e2e/app-router/open-next.config.ts +++ b/examples/e2e/app-router/open-next.config.ts @@ -1,15 +1,14 @@ import { defineCloudflareConfig } from "@opennextjs/cloudflare"; -import kvIncrementalCache from "@opennextjs/cloudflare/overrides/incremental-cache/kv-incremental-cache"; +import r2IncrementalCache from "@opennextjs/cloudflare/overrides/incremental-cache/r2-incremental-cache"; import shardedTagCache from "@opennextjs/cloudflare/overrides/tag-cache/do-sharded-tag-cache"; import doQueue from "@opennextjs/cloudflare/overrides/queue/do-queue"; export default defineCloudflareConfig({ - incrementalCache: kvIncrementalCache, + incrementalCache: r2IncrementalCache, // With such a configuration, we could have up to 12 * (8 + 2) = 120 Durable Objects instances tagCache: shardedTagCache({ baseShardSize: 12, - enableShardReplication: true, - shardReplicationOptions: { + shardReplication: { numberOfSoftReplicas: 8, numberOfHardReplicas: 2, }, diff --git a/examples/e2e/app-router/wrangler.jsonc b/examples/e2e/app-router/wrangler.jsonc index c53a41cac..0425c4d0f 100644 --- a/examples/e2e/app-router/wrangler.jsonc +++ b/examples/e2e/app-router/wrangler.jsonc @@ -12,7 +12,7 @@ "bindings": [ { "name": "NEXT_CACHE_DO_QUEUE", - "class_name": "DurableObjectQueueHandler" + "class_name": "DOQueueHandler" }, { "name": "NEXT_TAG_CACHE_DO_SHARDED", @@ -23,13 +23,13 @@ "migrations": [ { "tag": "v1", - "new_sqlite_classes": ["DurableObjectQueueHandler", "DOShardedTagCache"] + "new_sqlite_classes": ["DOQueueHandler", "DOShardedTagCache"] } ], - "kv_namespaces": [ + "r2_buckets": [ { - "binding": "NEXT_INC_CACHE_KV", - "id": "" + "binding": "NEXT_INC_CACHE_R2_BUCKET", + "bucket_name": "" } ], "services": [ diff --git a/examples/e2e/pages-router/open-next.config.ts b/examples/e2e/pages-router/open-next.config.ts index 4156694c0..1276dd09d 100644 --- a/examples/e2e/pages-router/open-next.config.ts +++ b/examples/e2e/pages-router/open-next.config.ts @@ -1,8 +1,8 @@ import { defineCloudflareConfig } from "@opennextjs/cloudflare"; -import kvIncrementalCache from "@opennextjs/cloudflare/overrides/incremental-cache/kv-incremental-cache"; +import r2IncrementalCache from "@opennextjs/cloudflare/overrides/incremental-cache/r2-incremental-cache"; import memoryQueue from "@opennextjs/cloudflare/overrides/queue/memory-queue"; export default defineCloudflareConfig({ - incrementalCache: kvIncrementalCache, + incrementalCache: r2IncrementalCache, queue: memoryQueue, }); diff --git a/examples/e2e/pages-router/wrangler.jsonc b/examples/e2e/pages-router/wrangler.jsonc index 45b6369cc..45faf7432 100644 --- a/examples/e2e/pages-router/wrangler.jsonc +++ b/examples/e2e/pages-router/wrangler.jsonc @@ -8,10 +8,10 @@ "directory": ".open-next/assets", "binding": "ASSETS" }, - "kv_namespaces": [ + "r2_buckets": [ { - "binding": "NEXT_INC_CACHE_KV", - "id": "" + "binding": "NEXT_INC_CACHE_R2_BUCKET", + "bucket_name": "" } ], "services": [ diff --git a/examples/overrides/r2-incremental-cache/open-next.config.ts b/examples/overrides/r2-incremental-cache/open-next.config.ts index 7e56cad43..b8096a267 100644 --- a/examples/overrides/r2-incremental-cache/open-next.config.ts +++ b/examples/overrides/r2-incremental-cache/open-next.config.ts @@ -1,5 +1,5 @@ import { defineCloudflareConfig } from "@opennextjs/cloudflare"; -import d1TagCache from "@opennextjs/cloudflare/overrides/tag-cache/d1-tag-cache"; +import d1NextTagCache from "@opennextjs/cloudflare/overrides/tag-cache/d1-next-tag-cache"; import memoryQueue from "@opennextjs/cloudflare/overrides/queue/memory-queue"; import r2IncrementalCache from "@opennextjs/cloudflare/overrides/incremental-cache/r2-incremental-cache"; import { withRegionalCache } from "@opennextjs/cloudflare/overrides/incremental-cache/regional-cache"; @@ -9,6 +9,6 @@ export default defineCloudflareConfig({ mode: "long-lived", shouldLazilyUpdateOnCacheHit: true, }), - tagCache: d1TagCache, + tagCache: d1NextTagCache, queue: memoryQueue, }); diff --git a/examples/overrides/r2-incremental-cache/wrangler.jsonc b/examples/overrides/r2-incremental-cache/wrangler.jsonc index 2d666fdaa..1fc46e6f1 100644 --- a/examples/overrides/r2-incremental-cache/wrangler.jsonc +++ b/examples/overrides/r2-incremental-cache/wrangler.jsonc @@ -26,8 +26,7 @@ "r2_buckets": [ { "binding": "NEXT_INC_CACHE_R2_BUCKET", - "bucket_name": "NEXT_INC_CACHE_R2_BUCKET", - "preview_bucket_name": "NEXT_INC_CACHE_R2_BUCKET" + "bucket_name": "NEXT_INC_CACHE_R2_BUCKET" } ] }, diff --git a/package.json b/package.json index 26dea6187..84071bced 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "opennextjs-cloudflare", - "version": "0.0.0.0", + "version": "0.0.0", "private": true, "devDependencies": { "@changesets/changelog-github": "^0.5.0", diff --git a/packages/cloudflare/CHANGELOG.md b/packages/cloudflare/CHANGELOG.md index 9db407f4e..bfc493f9c 100644 --- a/packages/cloudflare/CHANGELOG.md +++ b/packages/cloudflare/CHANGELOG.md @@ -1,5 +1,22 @@ # @opennextjs/cloudflare +## 1.0.0-beta.0 + +### Minor Changes + +- [#526](https://github.com/opennextjs/opennextjs-cloudflare/pull/526) [`8b40268`](https://github.com/opennextjs/opennextjs-cloudflare/commit/8b40268a328f43ee7dfc8fc68bcf14badc0650ca) Thanks [@vicb](https://github.com/vicb)! - Prepare for release 1.0.0-beta.0 + + Bump `@opennextjs/aws` to 3.5.4 + + BREAKING CHANGES + + - `DurableObjectQueueHandler` renamed to `DOQueueHandler` + - `NEXT_CACHE_DO_QUEUE_MAX_NUM_REVALIDATIONS` renamed to `NEXT_CACHE_DO_QUEUE_MAX_RETRIES` + - `D1TagCache` has been removed, use `D1NextModeTagCache` instead. + - The `enableShardReplication` and `shardReplicationOptions` options passed to `ShardedDOTagCache` + have been folded into `shardReplication`. A value for `shardReplication` must be specified to enable + replications. The value must be an object with the number of soft and hard replicas. + ## 0.6.6 ### Patch Changes diff --git a/packages/cloudflare/package.json b/packages/cloudflare/package.json index 87d143298..91413797a 100644 --- a/packages/cloudflare/package.json +++ b/packages/cloudflare/package.json @@ -1,7 +1,7 @@ { "name": "@opennextjs/cloudflare", "description": "Cloudflare builder for next apps", - "version": "0.6.6", + "version": "1.0.0-beta.0", "type": "module", "scripts": { "clean": "rimraf dist", @@ -37,7 +37,7 @@ ], "repository": { "type": "git", - "url": "https://github.com/opennextjs/opennextjs-cloudflare.git", + "url": "git+https://github.com/opennextjs/opennextjs-cloudflare.git", "directory": "packages/cloudflare" }, "keywords": [ @@ -53,7 +53,7 @@ "homepage": "https://github.com/opennextjs/opennextjs-cloudflare", "dependencies": { "@dotenvx/dotenvx": "catalog:", - "@opennextjs/aws": "https://pkg.pr.new/@opennextjs/aws@802", + "@opennextjs/aws": "3.5.4", "enquirer": "^2.4.1", "glob": "catalog:" }, diff --git a/packages/cloudflare/src/api/cloudflare-context.ts b/packages/cloudflare/src/api/cloudflare-context.ts index 367eb07a5..27e11e05b 100644 --- a/packages/cloudflare/src/api/cloudflare-context.ts +++ b/packages/cloudflare/src/api/cloudflare-context.ts @@ -2,7 +2,7 @@ import type { Context, RunningCodeOptions } from "node:vm"; import type { GetPlatformProxyOptions } from "wrangler"; -import type { DurableObjectQueueHandler } from "./durable-objects/queue"; +import type { DOQueueHandler } from "./durable-objects/queue"; import { DOShardedTagCache } from "./durable-objects/sharded-tag-cache"; declare global { @@ -35,7 +35,7 @@ declare global { NEXT_TAG_CACHE_DO_SHARDED_DLQ?: Queue; // Durable Object namespace to use for the durable object queue - NEXT_CACHE_DO_QUEUE?: DurableObjectNamespace; + NEXT_CACHE_DO_QUEUE?: DurableObjectNamespace; // Below are the optional environment variables to configure the durable object queue // The max number of revalidations that can be processed by the durable worker at the same time @@ -46,7 +46,7 @@ declare global { // If it fails again it will exponentially back off until it reaches the max retry interval NEXT_CACHE_DO_QUEUE_RETRY_INTERVAL_MS?: string; // The maximum number of attempts that can be made to revalidate a path - NEXT_CACHE_DO_QUEUE_MAX_NUM_REVALIDATIONS?: string; + NEXT_CACHE_DO_QUEUE_MAX_RETRIES?: string; // Disable SQLite for the durable object queue handler // This can be safely used if you don't use an eventually consistent incremental cache (i.e. R2 without the regional cache for example) NEXT_CACHE_DO_QUEUE_DISABLE_SQLITE?: string; diff --git a/packages/cloudflare/src/api/durable-objects/queue.spec.ts b/packages/cloudflare/src/api/durable-objects/queue.spec.ts index fefa36833..4f70f462e 100644 --- a/packages/cloudflare/src/api/durable-objects/queue.spec.ts +++ b/packages/cloudflare/src/api/durable-objects/queue.spec.ts @@ -1,6 +1,6 @@ import { describe, expect, it, vi } from "vitest"; -import { DurableObjectQueueHandler } from "./queue"; +import { DOQueueHandler } from "./queue"; vi.mock("cloudflare:workers", () => ({ DurableObject: class { @@ -36,7 +36,7 @@ const createDurableObjectQueue = ({ }, }; // eslint-disable-next-line @typescript-eslint/no-explicit-any - return new DurableObjectQueueHandler(mockState as any, { + return new DOQueueHandler(mockState as any, { WORKER_SELF_REFERENCE: { fetch: vi.fn().mockReturnValue( new Promise((res) => @@ -198,7 +198,7 @@ describe("DurableObjectQueue", () => { }); describe("addAlarm", () => { - const getStorage = (queue: DurableObjectQueueHandler): DurableObjectStorage => { + const getStorage = (queue: DOQueueHandler): DurableObjectStorage => { // @ts-expect-error - ctx is a protected field return queue.ctx.storage; }; diff --git a/packages/cloudflare/src/api/durable-objects/queue.ts b/packages/cloudflare/src/api/durable-objects/queue.ts index f16273574..8d63c9e68 100644 --- a/packages/cloudflare/src/api/durable-objects/queue.ts +++ b/packages/cloudflare/src/api/durable-objects/queue.ts @@ -11,7 +11,7 @@ import { DurableObject } from "cloudflare:workers"; const DEFAULT_MAX_REVALIDATION = 5; const DEFAULT_REVALIDATION_TIMEOUT_MS = 10_000; const DEFAULT_RETRY_INTERVAL_MS = 2_000; -const DEFAULT_MAX_NUM_REVALIDATIONS = 6; +const DEFAULT_MAX_RETRIES = 6; interface FailedState { msg: QueueMessage; @@ -19,7 +19,7 @@ interface FailedState { nextAlarmMs: number; } -export class DurableObjectQueueHandler extends DurableObject { +export class DOQueueHandler extends DurableObject { // Ongoing revalidations are deduped by the deduplication id // Since this is running in waitUntil, we expect the durable object state to persist this during the duration of the revalidation // TODO: handle incremental cache with only eventual consistency (i.e. KV or R2/D1 with the optional cache layer on top) @@ -35,7 +35,7 @@ export class DurableObjectQueueHandler extends DurableObject { readonly maxRevalidations: number; readonly revalidationTimeout: number; readonly revalidationRetryInterval: number; - readonly maxRevalidationAttempts: number; + readonly maxRetries: number; readonly disableSQLite: boolean; constructor(ctx: DurableObjectState, env: CloudflareEnv) { @@ -57,9 +57,9 @@ export class DurableObjectQueueHandler extends DurableObject { ? parseInt(env.NEXT_CACHE_DO_QUEUE_RETRY_INTERVAL_MS) : DEFAULT_RETRY_INTERVAL_MS; - this.maxRevalidationAttempts = env.NEXT_CACHE_DO_QUEUE_MAX_NUM_REVALIDATIONS - ? parseInt(env.NEXT_CACHE_DO_QUEUE_MAX_NUM_REVALIDATIONS) - : DEFAULT_MAX_NUM_REVALIDATIONS; + this.maxRetries = env.NEXT_CACHE_DO_QUEUE_MAX_RETRIES + ? parseInt(env.NEXT_CACHE_DO_QUEUE_MAX_RETRIES) + : DEFAULT_MAX_RETRIES; this.disableSQLite = env.NEXT_CACHE_DO_QUEUE_DISABLE_SQLITE === "true"; @@ -199,10 +199,9 @@ export class DurableObjectQueueHandler extends DurableObject { let updatedFailedState: FailedState; if (existingFailedState) { - if (existingFailedState.retryCount >= this.maxRevalidationAttempts) { - // We give up after 6 retries and log the error + if (existingFailedState.retryCount >= this.maxRetries) { error( - `The revalidation for ${msg.MessageBody.host}${msg.MessageBody.url} has failed after 6 retries. It will not be tried again, but subsequent ISR requests will retry.` + `The revalidation for ${msg.MessageBody.host}${msg.MessageBody.url} has failed after ${this.maxRetries} retries. It will not be tried again, but subsequent ISR requests will retry.` ); this.routeInFailedState.delete(msg.MessageDeduplicationId); return; diff --git a/packages/cloudflare/src/api/overrides/incremental-cache/kv-incremental-cache.ts b/packages/cloudflare/src/api/overrides/incremental-cache/kv-incremental-cache.ts index da9ec7d2c..f18c86870 100644 --- a/packages/cloudflare/src/api/overrides/incremental-cache/kv-incremental-cache.ts +++ b/packages/cloudflare/src/api/overrides/incremental-cache/kv-incremental-cache.ts @@ -7,6 +7,8 @@ export const CACHE_ASSET_DIR = "cdn-cgi/_next_cache"; export const STATUS_DELETED = 1; +export const NAME = "cf-kv-incremental-cache"; + /** * Open Next cache based on cloudflare KV and Assets. * @@ -14,8 +16,8 @@ export const STATUS_DELETED = 1; * The cloudflare context and process.env are not initialized yet * when the constructor is called. */ -class Cache implements IncrementalCache { - readonly name = "cloudflare-kv"; +class KVIncrementalCache implements IncrementalCache { + readonly name = NAME; async get( key: string, @@ -158,4 +160,4 @@ class Cache implements IncrementalCache { } } -export default new Cache(); +export default new KVIncrementalCache(); diff --git a/packages/cloudflare/src/api/overrides/incremental-cache/r2-incremental-cache.ts b/packages/cloudflare/src/api/overrides/incremental-cache/r2-incremental-cache.ts index bd1b0fb46..6c1f7f0b4 100644 --- a/packages/cloudflare/src/api/overrides/incremental-cache/r2-incremental-cache.ts +++ b/packages/cloudflare/src/api/overrides/incremental-cache/r2-incremental-cache.ts @@ -4,6 +4,8 @@ import { IgnorableError } from "@opennextjs/aws/utils/error.js"; import { getCloudflareContext } from "../../cloudflare-context.js"; +export const NAME = "cf-r2-incremental-cache"; + /** * An instance of the Incremental Cache that uses an R2 bucket (`NEXT_INC_CACHE_R2_BUCKET`) as it's * underlying data store. @@ -12,7 +14,7 @@ import { getCloudflareContext } from "../../cloudflare-context.js"; * environment variable, and defaults to `incremental-cache`. */ class R2IncrementalCache implements IncrementalCache { - readonly name = "r2-incremental-cache"; + readonly name = NAME; async get( key: string, diff --git a/packages/cloudflare/src/api/overrides/incremental-cache/regional-cache.ts b/packages/cloudflare/src/api/overrides/incremental-cache/regional-cache.ts index 413d9537d..5c611c96c 100644 --- a/packages/cloudflare/src/api/overrides/incremental-cache/regional-cache.ts +++ b/packages/cloudflare/src/api/overrides/incremental-cache/regional-cache.ts @@ -3,6 +3,7 @@ import { CacheValue, IncrementalCache, WithLastModified } from "@opennextjs/aws/ import { getCloudflareContext } from "../../cloudflare-context.js"; import { IncrementalCacheEntry } from "./internal.js"; +import { NAME as KV_CACHE_NAME } from "./kv-incremental-cache.js"; const ONE_MINUTE_IN_SECONDS = 60; const THIRTY_MINUTES_IN_SECONDS = ONE_MINUTE_IN_SECONDS * 30; @@ -12,18 +13,23 @@ type Options = { * The mode to use for the regional cache. * * - `short-lived`: Re-use a cache entry for up to a minute after it has been retrieved. - * - `long-lived`: Re-use a fetch cache entry until it is revalidated (per-region), or an ISR/SSG entry for up to 30 minutes. + * - `long-lived`: Re-use a fetch cache entry until it is revalidated (per-region), + * or an ISR/SSG entry for up to 30 minutes. */ mode: "short-lived" | "long-lived"; + /** * Whether the regional cache entry should be updated in the background or not when it experiences * a cache hit. * - * Defaults to `false` for the `short-lived` mode, and `true` for the `long-lived` mode. + * @default `false` for the `short-lived` mode, and `true` for the `long-lived` mode. */ shouldLazilyUpdateOnCacheHit?: boolean; }; +/** + * Wrapper adding a regional cache on an `IncrementalCache` implementation + */ class RegionalCache implements IncrementalCache { public name: string; @@ -33,8 +39,10 @@ class RegionalCache implements IncrementalCache { private store: IncrementalCache, private opts: Options ) { + if (this.store.name === KV_CACHE_NAME) { + throw new Error("The KV incremental cache does not need a regional cache."); + } this.name = this.store.name; - this.opts.shouldLazilyUpdateOnCacheHit ??= this.opts.mode === "long-lived"; } @@ -150,17 +158,19 @@ class RegionalCache implements IncrementalCache { * * The regional cache uses the Cache API. * - * **WARNING:** If an entry is revalidated in one region, it will trigger an additional revalidation if + * **WARNING:** + * If an entry is revalidated on demand in one region (using either `revalidateTag`, `revalidatePath` or `res.revalidate` ), it will trigger an additional revalidation if * a request is made to another region that has an entry stored in its regional cache. * - * @param cache - Incremental cache instance. - * @param opts.mode - The mode to use for the regional cache. - * - `short-lived`: Re-use a cache entry for up to a minute after it has been retrieved. - * - `long-lived`: Re-use a fetch cache entry until it is revalidated (per-region), or an ISR/SSG entry for up to 30 minutes. - * @param opts.shouldLazilyUpdateOnCacheHit - Whether the regional cache entry should be updated in - * the background or not when it experiences a cache hit. + * @param cache Incremental cache instance. + * @param opts.mode The mode to use for the regional cache. + * - `short-lived`: Re-use a cache entry for up to a minute after it has been retrieved. + * - `long-lived`: Re-use a fetch cache entry until it is revalidated (per-region), + * or an ISR/SSG entry for up to 30 minutes. + * @param opts.shouldLazilyUpdateOnCacheHit Whether the regional cache entry should be updated in + * the background or not when it experiences a cache hit. * - * Defaults to `false` for the `short-lived` mode, and `true` for the `long-lived` mode. + * @default `false` for the `short-lived` mode, and `true` for the `long-lived` mode. */ export function withRegionalCache(cache: IncrementalCache, opts: Options) { return new RegionalCache(cache, opts); diff --git a/packages/cloudflare/src/api/overrides/tag-cache/d1-next-tag-cache.ts b/packages/cloudflare/src/api/overrides/tag-cache/d1-next-tag-cache.ts index 13c60bb50..1503fcdd3 100644 --- a/packages/cloudflare/src/api/overrides/tag-cache/d1-next-tag-cache.ts +++ b/packages/cloudflare/src/api/overrides/tag-cache/d1-next-tag-cache.ts @@ -5,9 +5,11 @@ import { RecoverableError } from "@opennextjs/aws/utils/error.js"; import { getCloudflareContext } from "../../cloudflare-context.js"; +export const NAME = "d1-next-mode-tag-cache"; + export class D1NextModeTagCache implements NextModeTagCache { readonly mode = "nextMode" as const; - readonly name = "d1-next-mode-tag-cache"; + readonly name = NAME; async hasBeenRevalidated(tags: string[], lastModified?: number): Promise { const { isDisabled, db } = this.getConfig(); diff --git a/packages/cloudflare/src/api/overrides/tag-cache/d1-tag-cache.ts b/packages/cloudflare/src/api/overrides/tag-cache/d1-tag-cache.ts deleted file mode 100644 index 444180ab7..000000000 --- a/packages/cloudflare/src/api/overrides/tag-cache/d1-tag-cache.ts +++ /dev/null @@ -1,165 +0,0 @@ -import { debug, error } from "@opennextjs/aws/adapters/logger.js"; -import type { OpenNextConfig } from "@opennextjs/aws/types/open-next.js"; -import type { OriginalTagCache } from "@opennextjs/aws/types/overrides.js"; -import { RecoverableError } from "@opennextjs/aws/utils/error.js"; - -import { getCloudflareContext } from "../../cloudflare-context.js"; - -/** - * An instance of the Tag Cache that uses a D1 binding (`NEXT_TAG_CACHE_D1`) as it's underlying data store. - * - * **Tag/path mappings table** - * - * Information about the relation between tags and paths is stored in a `tags` table that contains - * two columns; `tag`, and `path`. - * - * This table should be populated using an SQL file that is generated during the build process. - * - * **Tag revalidations table** - * - * Revalidation times for tags are stored in a `revalidations` table that contains two columns; `tags`, - * and `revalidatedAt`. - */ -class D1TagCache implements OriginalTagCache { - public readonly name = "d1-tag-cache"; - - public async getByPath(rawPath: string): Promise { - const { isDisabled, db } = this.getConfig(); - if (isDisabled) return []; - - const path = this.getCacheKey(rawPath); - - try { - const { success, results } = await db - .prepare(`SELECT tag FROM tags WHERE path = ?`) - .bind(path) - .all<{ tag: string }>(); - - if (!success) throw new RecoverableError(`D1 select failed for ${path}`); - - const tags = results?.map((item) => this.removeBuildId(item.tag)); - - debug("tags for path", path, tags); - return tags; - } catch (e) { - error("Failed to get tags by path", e); - return []; - } - } - - public async getByTag(rawTag: string): Promise { - const { isDisabled, db } = this.getConfig(); - if (isDisabled) return []; - - const tag = this.getCacheKey(rawTag); - - try { - const { success, results } = await db - .prepare(`SELECT path FROM tags WHERE tag = ?`) - .bind(tag) - .all<{ path: string }>(); - - if (!success) throw new RecoverableError(`D1 select failed for ${tag}`); - - const paths = results?.map((item) => this.removeBuildId(item.path)); - - debug("paths for tag", tag, paths); - return paths; - } catch (e) { - error("Failed to get by tag", e); - return []; - } - } - - public async getLastModified(path: string, lastModified?: number): Promise { - const { isDisabled, db } = this.getConfig(); - if (isDisabled) return lastModified ?? Date.now(); - - try { - const { success, results } = await db - .prepare( - `SELECT revalidations.tag FROM revalidations - INNER JOIN tags ON revalidations.tag = tags.tag - WHERE tags.path = ? AND revalidations.revalidatedAt > ?;` - ) - .bind(this.getCacheKey(path), lastModified ?? 0) - .all<{ tag: string }>(); - - if (!success) throw new RecoverableError(`D1 select failed for ${path} - ${lastModified ?? 0}`); - - debug("revalidatedTags", results); - return results?.length > 0 ? -1 : (lastModified ?? Date.now()); - } catch (e) { - error("Failed to get revalidated tags", e); - return lastModified ?? Date.now(); - } - } - - public async writeTags(tags: { tag: string; path: string; revalidatedAt?: number }[]): Promise { - const { isDisabled, db } = this.getConfig(); - if (isDisabled || tags.length === 0) return; - - try { - const uniqueTags = new Set(); - const results = await db.batch( - tags - .map(({ tag, path, revalidatedAt }) => { - if (revalidatedAt === 1) { - // new tag/path mapping from set - return db - .prepare(`INSERT INTO tags (tag, path) VALUES (?, ?)`) - .bind(this.getCacheKey(tag), this.getCacheKey(path)); - } - - if (!uniqueTags.has(tag) && revalidatedAt !== -1) { - // tag was revalidated - uniqueTags.add(tag); - return db - .prepare(`INSERT INTO revalidations (tag, revalidatedAt) VALUES (?, ?)`) - .bind(this.getCacheKey(tag), revalidatedAt ?? Date.now()); - } - }) - .filter((stmt) => !!stmt) - ); - - const failedResults = results.filter((res) => !res.success); - - if (failedResults.length > 0) { - throw new RecoverableError(`${failedResults.length} tags failed to write`); - } - } catch (e) { - error("Failed to batch write tags", e); - } - } - - private getConfig() { - const cfEnv = getCloudflareContext().env; - const db = cfEnv.NEXT_TAG_CACHE_D1; - - if (!db) debug("No D1 database found"); - - const isDisabled = !!(globalThis as unknown as { openNextConfig: OpenNextConfig }).openNextConfig - .dangerous?.disableTagCache; - - return !db || isDisabled - ? { isDisabled: true as const } - : { - isDisabled: false as const, - db, - }; - } - - protected removeBuildId(key: string) { - return key.replace(`${this.getBuildId()}/`, ""); - } - - protected getCacheKey(key: string) { - return `${this.getBuildId()}/${key}`.replaceAll("//", "/"); - } - - protected getBuildId() { - return process.env.NEXT_BUILD_ID ?? "no-build-id"; - } -} - -export default new D1TagCache(); diff --git a/packages/cloudflare/src/api/overrides/tag-cache/do-sharded-tag-cache.spec.ts b/packages/cloudflare/src/api/overrides/tag-cache/do-sharded-tag-cache.spec.ts index 02ece6bc0..bb7f4f12c 100644 --- a/packages/cloudflare/src/api/overrides/tag-cache/do-sharded-tag-cache.spec.ts +++ b/packages/cloudflare/src/api/overrides/tag-cache/do-sharded-tag-cache.spec.ts @@ -1,10 +1,6 @@ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; -import doShardedTagCache, { - DEFAULT_HARD_REPLICAS, - DEFAULT_SOFT_REPLICAS, - TagCacheDOId, -} from "./do-sharded-tag-cache"; +import shardedDOTagCache, { DOId } from "./do-sharded-tag-cache"; const hasBeenRevalidatedMock = vi.fn(); const writeTagsMock = vi.fn(); @@ -31,7 +27,7 @@ describe("DOShardedTagCache", () => { describe("generateShardId", () => { it("should generate a shardId", () => { - const cache = doShardedTagCache(); + const cache = shardedDOTagCache(); const expectedResult = [ { doId: expect.objectContaining({ shardId: "tag-hard;shard-1" }), tags: ["tag1"] }, { doId: expect.objectContaining({ shardId: "tag-hard;shard-2" }), tags: ["tag2"] }, @@ -43,7 +39,7 @@ describe("DOShardedTagCache", () => { }); it("should group tags by shard", () => { - const cache = doShardedTagCache(); + const cache = shardedDOTagCache(); const expectedResult = [ { doId: expect.objectContaining({ shardId: "tag-hard;shard-1" }), tags: ["tag1", "tag6"] }, ]; @@ -53,14 +49,14 @@ describe("DOShardedTagCache", () => { }); it("should generate the same shardId for the same tag", () => { - const cache = doShardedTagCache(); + const cache = shardedDOTagCache(); const firstResult = cache.groupTagsByDO({ tags: ["tag1"] }); const secondResult = cache.groupTagsByDO({ tags: ["tag1", "tag3", "tag4"] }); expect(firstResult[0]).toEqual(secondResult[0]); }); it("should split hard and soft tags", () => { - const cache = doShardedTagCache(); + const cache = shardedDOTagCache(); const expectedResult = [ { doId: expect.objectContaining({ shardId: "tag-soft;shard-3" }), tags: ["_N_T_/tag1"] }, { doId: expect.objectContaining({ shardId: "tag-hard;shard-1", replicaId: 1 }), tags: ["tag1"] }, @@ -73,7 +69,10 @@ describe("DOShardedTagCache", () => { describe("with shard replication", () => { it("should generate all doIds if generateAllReplicas is true", () => { - const cache = doShardedTagCache({ baseShardSize: 4, enableShardReplication: true }); + const cache = shardedDOTagCache({ + baseShardSize: 4, + shardReplication: { numberOfSoftReplicas: 4, numberOfHardReplicas: 2 }, + }); const expectedResult = [ { doId: expect.objectContaining({ shardId: "tag-soft;shard-3" }), tags: ["_N_T_/tag1"] }, { doId: expect.objectContaining({ shardId: "tag-soft;shard-3" }), tags: ["_N_T_/tag1"] }, @@ -87,7 +86,10 @@ describe("DOShardedTagCache", () => { }); it("should generate only one doIds by tag type if generateAllReplicas is false", () => { - const cache = doShardedTagCache({ baseShardSize: 4, enableShardReplication: true }); + const cache = shardedDOTagCache({ + baseShardSize: 4, + shardReplication: { numberOfSoftReplicas: 4, numberOfHardReplicas: 2 }, + }); const shardedTagCollection = cache.groupTagsByDO({ tags: ["tag1", "_N_T_/tag1"], generateAllReplicas: false, @@ -101,10 +103,10 @@ describe("DOShardedTagCache", () => { // We still need to check if the last part is between the correct boundaries expect(firstDOId?.replicaId).toBeGreaterThanOrEqual(1); - expect(firstDOId?.replicaId).toBeLessThanOrEqual(DEFAULT_SOFT_REPLICAS); + expect(firstDOId?.replicaId).toBeLessThanOrEqual(4); expect(secondDOId?.replicaId).toBeGreaterThanOrEqual(1); - expect(secondDOId?.replicaId).toBeLessThanOrEqual(DEFAULT_HARD_REPLICAS); + expect(secondDOId?.replicaId).toBeLessThanOrEqual(2); }); }); }); @@ -119,14 +121,14 @@ describe("DOShardedTagCache", () => { globalThis.openNextConfig = { dangerous: { disableTagCache: true }, }; - const cache = doShardedTagCache(); + const cache = shardedDOTagCache(); const result = await cache.hasBeenRevalidated(["tag1"]); expect(result).toBe(false); expect(idFromNameMock).not.toHaveBeenCalled(); }); it("should return false if stub return false", async () => { - const cache = doShardedTagCache(); + const cache = shardedDOTagCache(); cache.getFromRegionalCache = vi.fn(); hasBeenRevalidatedMock.mockImplementationOnce(() => false); const result = await cache.hasBeenRevalidated(["tag1"], 123456); @@ -137,7 +139,7 @@ describe("DOShardedTagCache", () => { }); it("should return true if stub return true", async () => { - const cache = doShardedTagCache(); + const cache = shardedDOTagCache(); cache.getFromRegionalCache = vi.fn(); hasBeenRevalidatedMock.mockImplementationOnce(() => true); const result = await cache.hasBeenRevalidated(["tag1"], 123456); @@ -148,7 +150,7 @@ describe("DOShardedTagCache", () => { }); it("should return false if it throws", async () => { - const cache = doShardedTagCache(); + const cache = shardedDOTagCache(); cache.getFromRegionalCache = vi.fn(); hasBeenRevalidatedMock.mockImplementationOnce(() => { throw new Error("error"); @@ -161,7 +163,7 @@ describe("DOShardedTagCache", () => { }); it("Should return from the cache if it was found there", async () => { - const cache = doShardedTagCache(); + const cache = shardedDOTagCache(); cache.getFromRegionalCache = vi.fn().mockReturnValueOnce(new Response("true")); const result = await cache.hasBeenRevalidated(["tag1"], 123456); expect(result).toBe(true); @@ -170,7 +172,7 @@ describe("DOShardedTagCache", () => { }); it("should try to put the result in the cache if it was not revalidated", async () => { - const cache = doShardedTagCache(); + const cache = shardedDOTagCache(); cache.getFromRegionalCache = vi.fn(); cache.putToRegionalCache = vi.fn(); hasBeenRevalidatedMock.mockImplementationOnce(() => false); @@ -182,7 +184,7 @@ describe("DOShardedTagCache", () => { }); it("should call all the durable object instance", async () => { - const cache = doShardedTagCache(); + const cache = shardedDOTagCache(); cache.getFromRegionalCache = vi.fn(); const result = await cache.hasBeenRevalidated(["tag1", "tag2"], 123456); expect(result).toBe(false); @@ -206,14 +208,14 @@ describe("DOShardedTagCache", () => { globalThis.openNextConfig = { dangerous: { disableTagCache: true }, }; - const cache = doShardedTagCache(); + const cache = shardedDOTagCache(); await cache.writeTags(["tag1"]); expect(idFromNameMock).not.toHaveBeenCalled(); expect(writeTagsMock).not.toHaveBeenCalled(); }); it("should write the tags to the cache", async () => { - const cache = doShardedTagCache(); + const cache = shardedDOTagCache(); await cache.writeTags(["tag1"]); expect(idFromNameMock).toHaveBeenCalled(); expect(writeTagsMock).toHaveBeenCalled(); @@ -221,7 +223,7 @@ describe("DOShardedTagCache", () => { }); it("should write the tags to the cache for multiple shards", async () => { - const cache = doShardedTagCache(); + const cache = shardedDOTagCache(); await cache.writeTags(["tag1", "tag2"]); expect(idFromNameMock).toHaveBeenCalledTimes(2); expect(writeTagsMock).toHaveBeenCalledTimes(2); @@ -230,7 +232,10 @@ describe("DOShardedTagCache", () => { }); it('should write to all the replicated shards if "generateAllReplicas" is true', async () => { - const cache = doShardedTagCache({ baseShardSize: 4, enableShardReplication: true }); + const cache = shardedDOTagCache({ + baseShardSize: 4, + shardReplication: { numberOfSoftReplicas: 4, numberOfHardReplicas: 2 }, + }); await cache.writeTags(["tag1", "_N_T_/tag1"]); expect(idFromNameMock).toHaveBeenCalledTimes(6); expect(writeTagsMock).toHaveBeenCalledTimes(6); @@ -239,7 +244,7 @@ describe("DOShardedTagCache", () => { }); it("should call deleteRegionalCache", async () => { - const cache = doShardedTagCache(); + const cache = shardedDOTagCache(); cache.deleteRegionalCache = vi.fn(); await cache.writeTags(["tag1"]); expect(cache.deleteRegionalCache).toHaveBeenCalled(); @@ -253,7 +258,7 @@ describe("DOShardedTagCache", () => { describe("getCacheInstance", () => { it("should return undefined by default", async () => { - const cache = doShardedTagCache(); + const cache = shardedDOTagCache(); expect(await cache.getCacheInstance()).toBeUndefined(); }); @@ -262,7 +267,7 @@ describe("DOShardedTagCache", () => { globalThis.caches = { open: vi.fn().mockResolvedValue("cache"), }; - const cache = doShardedTagCache({ baseShardSize: 4, regionalCache: true }); + const cache = shardedDOTagCache({ baseShardSize: 4, regionalCache: true }); expect(cache.localCache).toBeUndefined(); expect(await cache.getCacheInstance()).toBe("cache"); expect(cache.localCache).toBe("cache"); @@ -273,8 +278,8 @@ describe("DOShardedTagCache", () => { describe("getFromRegionalCache", () => { it("should return undefined if regional cache is disabled", async () => { - const cache = doShardedTagCache(); - const doId = new TagCacheDOId({ + const cache = shardedDOTagCache(); + const doId = new DOId({ baseShardId: "shard-1", numberOfReplicas: 1, shardType: "hard", @@ -289,8 +294,8 @@ describe("DOShardedTagCache", () => { match: vi.fn().mockResolvedValue("response"), }), }; - const cache = doShardedTagCache({ baseShardSize: 4, regionalCache: true }); - const doId = new TagCacheDOId({ + const cache = shardedDOTagCache({ baseShardSize: 4, regionalCache: true }); + const doId = new DOId({ baseShardId: "shard-1", numberOfReplicas: 1, shardType: "hard", @@ -303,12 +308,12 @@ describe("DOShardedTagCache", () => { describe("getCacheKey", () => { it("should return the cache key without the random part", async () => { - const cache = doShardedTagCache(); - const doId1 = new TagCacheDOId({ baseShardId: "shard-0", numberOfReplicas: 1, shardType: "hard" }); + const cache = shardedDOTagCache(); + const doId1 = new DOId({ baseShardId: "shard-0", numberOfReplicas: 1, shardType: "hard" }); const reqKey = await cache.getCacheKey(doId1, ["_N_T_/tag1"]); expect(reqKey.url).toBe("http://local.cache/shard/tag-hard;shard-0?tags=_N_T_%2Ftag1"); - const doId2 = new TagCacheDOId({ + const doId2 = new DOId({ baseShardId: "shard-1", numberOfReplicas: 1, shardType: "hard", @@ -322,12 +327,12 @@ describe("DOShardedTagCache", () => { it("should retry if it fails", async () => { vi.useFakeTimers(); vi.setSystemTime(1000); - const cache = doShardedTagCache(); + const cache = shardedDOTagCache(); writeTagsMock.mockImplementationOnce(() => { throw new Error("error"); }); const spiedFn = vi.spyOn(cache, "performWriteTagsWithRetry"); - const doId = new TagCacheDOId({ + const doId = new DOId({ baseShardId: "shard-1", numberOfReplicas: 1, shardType: "hard", @@ -344,13 +349,13 @@ describe("DOShardedTagCache", () => { it("should stop retrying after 3 times", async () => { vi.useFakeTimers(); vi.setSystemTime(1000); - const cache = doShardedTagCache(); + const cache = shardedDOTagCache(); writeTagsMock.mockImplementationOnce(() => { throw new Error("error"); }); const spiedFn = vi.spyOn(cache, "performWriteTagsWithRetry"); await cache.performWriteTagsWithRetry( - new TagCacheDOId({ baseShardId: "shard-1", numberOfReplicas: 1, shardType: "hard" }), + new DOId({ baseShardId: "shard-1", numberOfReplicas: 1, shardType: "hard" }), ["tag1"], Date.now(), 3 diff --git a/packages/cloudflare/src/api/overrides/tag-cache/do-sharded-tag-cache.ts b/packages/cloudflare/src/api/overrides/tag-cache/do-sharded-tag-cache.ts index a54347baa..4f0edf5aa 100644 --- a/packages/cloudflare/src/api/overrides/tag-cache/do-sharded-tag-cache.ts +++ b/packages/cloudflare/src/api/overrides/tag-cache/do-sharded-tag-cache.ts @@ -6,74 +6,83 @@ import { IgnorableError } from "@opennextjs/aws/utils/error.js"; import { getCloudflareContext } from "../../cloudflare-context"; -const SOFT_TAG_PREFIX = "_N_T_/"; -export const DEFAULT_SOFT_REPLICAS = 4; -export const DEFAULT_HARD_REPLICAS = 2; export const DEFAULT_WRITE_RETRIES = 3; export const DEFAULT_NUM_SHARDS = 4; +export const NAME = "do-sharded-tag-cache"; + +const SOFT_TAG_PREFIX = "_N_T_/"; interface ShardedDOTagCacheOptions { /** * The number of shards that will be used. + * * 1 shards means 1 durable object instance. - * Soft (internal next tags used for `revalidatePath`) and hard tags (the one you define in your app) will be split in different shards. + * Soft (internal next tags used for `revalidatePath`) and hard tags (the one you define in your app) + * will be split in different shards. + * * The number of requests made to Durable Objects will scale linearly with the number of shards. - * For example, a request involving 5 tags may access between 1 and 5 shards, with the upper limit being the lesser of the number of tags or the number of shards + * For example, a request involving 5 tags may access between 1 and 5 shards, with the upper limit being + * the lesser of the number of tags or the number of shards + * * @default 4 */ baseShardSize: number; + /** * Whether to enable a regional cache on a per-shard basis * Because of the way tags are implemented in Next.js, some shards will have more requests than others. For these cases, it is recommended to enable the regional cache. + * * @default false */ regionalCache?: boolean; + /** * The TTL for the regional cache in seconds * Increasing this value will reduce the number of requests to the Durable Object, but it could make `revalidateTags`/`revalidatePath` call being longer to take effect + * * @default 5 */ regionalCacheTtlSec?: number; /** - * Whether to enable shard replication - * Shard replication will duplicate each shards into N replicas to spread the load even more - * All replicas of the a shard contain the same value - write are sent to all of the replicas. - * This allows most frequent read operations to be sent to only one replica to spread the load. - * For example with N being 2, tag `tag1` could be read from 2 different durable object instance - * On read you only need to read from one of the shards, but on write you need to write to all shards - * @default false - */ - enableShardReplication?: boolean; - - /** - * The number of replicas that will be used for shard replication - * Soft shard replicas are more often accessed than hard shard replicas, so it is recommended to have more soft replicas than hard replicas - * Soft replicas are for internal next tags used for `revalidatePath` (i.e. `_N_T_/layout`, `_N_T_/page1`), hard replicas are the tags defined in your app - * @default { numberOfSoftReplicas: 4, numberOfHardReplicas: 2 } + * Enable shard replication to handle higher load. + * + * By default shards are not replicated (`numberOfSoftReplicas = 1` or `numberOfHardReplicas = 1`). + * + * Setting the number of replicas to a number greater than 1 will replicate the shards. + * Write operations always apply to all of the shards. + * However read operations read from a single shard to spread the load. + * + * Soft replicas are for internal next tags used for `revalidatePath` (i.e. `_N_T_/layout`, `_N_T_/page1`). + * Hard replicas are the tags defined in your app. + * + * Soft replicas are accessed more often than hard replicas, so it is recommended to have more soft replicas + * than hard replicas (2x is a good rule of thumb) */ - shardReplicationOptions?: { + shardReplication?: { numberOfSoftReplicas: number; numberOfHardReplicas: number; }; /** * The number of retries to perform when writing tags + * * @default 3 */ maxWriteRetries?: number; } -interface TagCacheDOIdOptions { +interface DOIdOptions { baseShardId: string; numberOfReplicas: number; shardType: "soft" | "hard"; replicaId?: number; } -export class TagCacheDOId { + +export class DOId { shardId: string; replicaId: number; - constructor(public options: TagCacheDOIdOptions) { + constructor(public options: DOIdOptions) { const { baseShardId, shardType, numberOfReplicas, replicaId } = options; this.shardId = `tag-${shardType};${baseShardId}`; this.replicaId = replicaId ?? this.generateRandomNumberBetween(1, numberOfReplicas); @@ -89,19 +98,19 @@ export class TagCacheDOId { } class ShardedDOTagCache implements NextModeTagCache { readonly mode = "nextMode" as const; - readonly name = "do-sharded-tag-cache"; + readonly name = NAME; readonly numSoftReplicas: number; readonly numHardReplicas: number; readonly maxWriteRetries: number; localCache?: Cache; constructor(private opts: ShardedDOTagCacheOptions = { baseShardSize: DEFAULT_NUM_SHARDS }) { - this.numSoftReplicas = opts.shardReplicationOptions?.numberOfSoftReplicas ?? DEFAULT_SOFT_REPLICAS; - this.numHardReplicas = opts.shardReplicationOptions?.numberOfHardReplicas ?? DEFAULT_HARD_REPLICAS; + this.numSoftReplicas = opts.shardReplication?.numberOfSoftReplicas ?? 1; + this.numHardReplicas = opts.shardReplication?.numberOfHardReplicas ?? 1; this.maxWriteRetries = opts.maxWriteRetries ?? DEFAULT_WRITE_RETRIES; } - private getDurableObjectStub(doId: TagCacheDOId) { + private getDurableObjectStub(doId: DOId) { const durableObject = getCloudflareContext().env.NEXT_TAG_CACHE_DO_SHARDED; if (!durableObject) throw new IgnorableError("No durable object binding for cache revalidation"); @@ -127,19 +136,15 @@ class ShardedDOTagCache implements NextModeTagCache { }) { let replicaIndexes: Array = [1]; const isSoft = shardType === "soft"; - let numReplicas = 1; - if (this.opts.enableShardReplication) { - numReplicas = isSoft ? this.numSoftReplicas : this.numHardReplicas; - replicaIndexes = generateAllReplicas - ? Array.from({ length: numReplicas }, (_, i) => i + 1) - : [undefined]; - } + const numReplicas = isSoft ? this.numSoftReplicas : this.numHardReplicas; + replicaIndexes = generateAllReplicas ? Array.from({ length: numReplicas }, (_, i) => i + 1) : [undefined]; + return replicaIndexes.flatMap((replicaId) => { return tags .filter((tag) => (isSoft ? tag.startsWith(SOFT_TAG_PREFIX) : !tag.startsWith(SOFT_TAG_PREFIX))) .map((tag) => { return { - doId: new TagCacheDOId({ + doId: new DOId({ baseShardId: generateShardId(tag, this.opts.baseShardSize, "shard"), numberOfReplicas: numReplicas, shardType, @@ -169,7 +174,7 @@ class ShardedDOTagCache implements NextModeTagCache { const tagsByDOId = new Map< string, { - doId: TagCacheDOId; + doId: DOId; tags: string[]; } >(); @@ -258,7 +263,7 @@ class ShardedDOTagCache implements NextModeTagCache { ); } - async performWriteTagsWithRetry(doId: TagCacheDOId, tags: string[], lastModified: number, retryNumber = 0) { + async performWriteTagsWithRetry(doId: DOId, tags: string[], lastModified: number, retryNumber = 0) { try { const stub = this.getDurableObjectStub(doId); await stub.writeTags(tags, lastModified); @@ -288,13 +293,13 @@ class ShardedDOTagCache implements NextModeTagCache { return this.localCache; } - async getCacheKey(doId: TagCacheDOId, tags: string[]) { + async getCacheKey(doId: DOId, tags: string[]) { return new Request( new URL(`shard/${doId.shardId}?tags=${encodeURIComponent(tags.join(";"))}`, "http://local.cache") ); } - async getFromRegionalCache(doId: TagCacheDOId, tags: string[]) { + async getFromRegionalCache(doId: DOId, tags: string[]) { try { if (!this.opts.regionalCache) return; const cache = await this.getCacheInstance(); @@ -307,7 +312,7 @@ class ShardedDOTagCache implements NextModeTagCache { } } - async putToRegionalCache(doId: TagCacheDOId, tags: string[], hasBeenRevalidated: boolean) { + async putToRegionalCache(doId: DOId, tags: string[], hasBeenRevalidated: boolean) { if (!this.opts.regionalCache) return; const cache = await this.getCacheInstance(); if (!cache) return; @@ -320,7 +325,7 @@ class ShardedDOTagCache implements NextModeTagCache { ); } - async deleteRegionalCache(doId: TagCacheDOId, tags: string[]) { + async deleteRegionalCache(doId: DOId, tags: string[]) { // We never want to crash because of the cache try { if (!this.opts.regionalCache) return; diff --git a/packages/cloudflare/src/cli/commands/populate-cache.ts b/packages/cloudflare/src/cli/commands/populate-cache.ts index 0dea972e3..5ecafbf44 100644 --- a/packages/cloudflare/src/cli/commands/populate-cache.ts +++ b/packages/cloudflare/src/cli/commands/populate-cache.ts @@ -12,6 +12,8 @@ import type { import type { IncrementalCache, TagCache } from "@opennextjs/aws/types/overrides.js"; import { globSync } from "glob"; +import { NAME as R2_CACHE_NAME } from "../../api/overrides/incremental-cache/r2-incremental-cache.js"; +import { NAME as D1_TAG_NAME } from "../../api/overrides/tag-cache/d1-next-tag-cache.js"; import type { WranglerTarget } from "../utils/run-wrangler.js"; import { runWrangler } from "../utils/run-wrangler.js"; @@ -58,7 +60,7 @@ export async function populateCache( if (!config.dangerous?.disableIncrementalCache && incrementalCache) { const name = await resolveCacheName(incrementalCache); switch (name) { - case "r2-incremental-cache": { + case R2_CACHE_NAME: { logger.info("\nPopulating R2 incremental cache..."); const assets = getCacheAssetPaths(options); @@ -88,7 +90,7 @@ export async function populateCache( if (!config.dangerous?.disableTagCache && !config.dangerous?.disableIncrementalCache && tagCache) { const name = await resolveCacheName(tagCache); switch (name) { - case "d1-next-mode-tag-cache": { + case D1_TAG_NAME: { logger.info("\nCreating D1 table if necessary..."); runWrangler( @@ -104,21 +106,6 @@ export async function populateCache( logger.info("\nSuccessfully created D1 table"); break; } - case "d1-tag-cache": { - logger.info("\nPopulating D1 tag cache..."); - - runWrangler( - options, - [ - "d1 execute", - "NEXT_TAG_CACHE_D1", - `--file ${JSON.stringify(path.join(options.outputDir, "cloudflare/cache-assets-manifest.sql"))}`, - ], - { ...populateCacheOptions, logging: "error" } - ); - logger.info("Successfully populated cache"); - break; - } default: logger.info("Tag cache does not need populating"); } diff --git a/packages/cloudflare/src/cli/templates/worker.ts b/packages/cloudflare/src/cli/templates/worker.ts index 0a8bba3c8..eb49fb627 100644 --- a/packages/cloudflare/src/cli/templates/worker.ts +++ b/packages/cloudflare/src/cli/templates/worker.ts @@ -15,7 +15,7 @@ Object.defineProperty(globalThis, Symbol.for("__cloudflare-context__"), { }); //@ts-expect-error: Will be resolved by wrangler build -export { DurableObjectQueueHandler } from "./.build/durable-objects/queue.js"; +export { DOQueueHandler } from "./.build/durable-objects/queue.js"; //@ts-expect-error: Will be resolved by wrangler build export { DOShardedTagCache } from "./.build/durable-objects/sharded-tag-cache.js"; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9e48f5721..f471cfa1d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -82,8 +82,8 @@ catalogs: specifier: ^2.1.1 version: 2.1.1 wrangler: - specifier: ^3.114.1 || ^4.6.0 - version: 3.114.1 + specifier: ^3.114.3 || ^4.7.0 + version: 4.7.0 e2e: '@types/node': specifier: 20.17.6 @@ -192,7 +192,7 @@ importers: version: 5.7.3 wrangler: specifier: 'catalog:' - version: 3.114.1(@cloudflare/workers-types@4.20250321.0) + version: 4.7.0(@cloudflare/workers-types@4.20250321.0) examples/bugs/gh-219: dependencies: @@ -322,7 +322,7 @@ importers: version: 39.4.2(rollup@4.21.0) wrangler: specifier: 'catalog:' - version: 3.114.1(@cloudflare/workers-types@4.20250109.0) + version: 4.7.0(@cloudflare/workers-types@4.20250109.0) examples/bugs/gh-223: dependencies: @@ -376,8 +376,8 @@ importers: specifier: ^5.7.2 version: 5.7.3 wrangler: - specifier: ^3.107.0 - version: 3.107.0(@cloudflare/workers-types@4.20250109.0) + specifier: 'catalog:' + version: 4.7.0(@cloudflare/workers-types@4.20250109.0) examples/create-next-app: dependencies: @@ -423,7 +423,7 @@ importers: version: 5.7.3 wrangler: specifier: 'catalog:' - version: 3.114.1(@cloudflare/workers-types@4.20250321.0) + version: 4.7.0(@cloudflare/workers-types@4.20250321.0) examples/e2e/app-pages-router: dependencies: @@ -469,7 +469,7 @@ importers: version: 5.7.3 wrangler: specifier: 'catalog:' - version: 3.114.1(@cloudflare/workers-types@4.20250321.0) + version: 4.7.0(@cloudflare/workers-types@4.20250321.0) examples/e2e/app-router: dependencies: @@ -515,7 +515,7 @@ importers: version: 5.7.3 wrangler: specifier: 'catalog:' - version: 3.114.1(@cloudflare/workers-types@4.20250321.0) + version: 4.7.0(@cloudflare/workers-types@4.20250321.0) examples/e2e/pages-router: dependencies: @@ -561,7 +561,7 @@ importers: version: 5.7.3 wrangler: specifier: 'catalog:' - version: 3.114.1(@cloudflare/workers-types@4.20250321.0) + version: 4.7.0(@cloudflare/workers-types@4.20250321.0) examples/e2e/shared: dependencies: @@ -620,7 +620,7 @@ importers: version: 5.7.3 wrangler: specifier: 'catalog:' - version: 3.114.1(@cloudflare/workers-types@4.20250321.0) + version: 4.7.0(@cloudflare/workers-types@4.20250321.0) examples/next-partial-prerendering: dependencies: @@ -681,7 +681,7 @@ importers: version: 5.5.3 wrangler: specifier: 'catalog:' - version: 3.114.1(@cloudflare/workers-types@4.20250321.0) + version: 4.7.0(@cloudflare/workers-types@4.20250321.0) examples/overrides/d1-tag-next: dependencies: @@ -715,7 +715,7 @@ importers: version: 5.7.3 wrangler: specifier: 'catalog:' - version: 3.114.1(@cloudflare/workers-types@4.20250321.0) + version: 4.7.0(@cloudflare/workers-types@4.20250321.0) examples/overrides/memory-queue: dependencies: @@ -749,7 +749,7 @@ importers: version: 5.7.3 wrangler: specifier: 'catalog:' - version: 3.114.1(@cloudflare/workers-types@4.20250321.0) + version: 4.7.0(@cloudflare/workers-types@4.20250321.0) examples/overrides/r2-incremental-cache: dependencies: @@ -783,7 +783,7 @@ importers: version: 5.7.3 wrangler: specifier: 'catalog:' - version: 3.114.1(@cloudflare/workers-types@4.20250321.0) + version: 4.7.0(@cloudflare/workers-types@4.20250321.0) examples/playground14: dependencies: @@ -808,7 +808,7 @@ importers: version: 22.2.0 wrangler: specifier: 'catalog:' - version: 3.114.1(@cloudflare/workers-types@4.20250321.0) + version: 4.7.0(@cloudflare/workers-types@4.20250321.0) examples/playground15: dependencies: @@ -833,7 +833,7 @@ importers: version: 22.2.0 wrangler: specifier: 'catalog:' - version: 3.114.1(@cloudflare/workers-types@4.20250321.0) + version: 4.7.0(@cloudflare/workers-types@4.20250321.0) examples/ssg-app: dependencies: @@ -867,7 +867,7 @@ importers: version: 5.7.3 wrangler: specifier: 'catalog:' - version: 3.114.1(@cloudflare/workers-types@4.20250321.0) + version: 4.7.0(@cloudflare/workers-types@4.20250321.0) examples/vercel-blog-starter: dependencies: @@ -922,7 +922,7 @@ importers: version: 5.7.3 wrangler: specifier: 'catalog:' - version: 3.114.1(@cloudflare/workers-types@4.20250321.0) + version: 4.7.0(@cloudflare/workers-types@4.20250321.0) examples/vercel-commerce: dependencies: @@ -989,7 +989,7 @@ importers: version: 5.7.3 wrangler: specifier: 'catalog:' - version: 3.114.1(@cloudflare/workers-types@4.20250321.0) + version: 4.7.0(@cloudflare/workers-types@4.20250321.0) packages/cloudflare: dependencies: @@ -997,8 +997,8 @@ importers: specifier: 'catalog:' version: 1.31.0 '@opennextjs/aws': - specifier: https://pkg.pr.new/@opennextjs/aws@802 - version: https://pkg.pr.new/@opennextjs/aws@802 + specifier: 3.5.4 + version: 3.5.4 enquirer: specifier: ^2.4.1 version: 2.4.1 @@ -1007,7 +1007,7 @@ importers: version: 11.0.0 wrangler: specifier: 'catalog:' - version: 3.114.1(@cloudflare/workers-types@4.20250224.0) + version: 4.7.0(@cloudflare/workers-types@4.20250224.0) devDependencies: '@cloudflare/workers-types': specifier: 'catalog:' @@ -1638,75 +1638,45 @@ packages: resolution: {integrity: sha512-9QdllXYujsjYLbvPg9Kq1rWOemX5FB0r6Ijy8HOxwjKN+TPlxUnGcs+t7IwU+M5gdmZ2KV6aA6d1a2q2FlSoiA==} engines: {node: '>=18.17.0'} - '@cloudflare/kv-asset-handler@0.3.4': - resolution: {integrity: sha512-YLPHc8yASwjNkmcDMQMY35yiWjoKAKnhUbPRszBRS0YgH+IXtsMp61j+yTcnCE3oO2DgP0U3iejLC8FTtKDC8Q==} - engines: {node: '>=16.13'} + '@cloudflare/kv-asset-handler@0.4.0': + resolution: {integrity: sha512-+tv3z+SPp+gqTIcImN9o0hqE9xyfQjI1XD9pL6NuKjua9B1y7mNYv0S9cP+QEbA4ppVgGZEmKOvHX5G5Ei1CVA==} + engines: {node: '>=18.0.0'} - '@cloudflare/unenv-preset@2.0.2': - resolution: {integrity: sha512-nyzYnlZjjV5xT3LizahG1Iu6mnrCaxglJ04rZLpDwlDVDZ7v46lNsfxhV3A/xtfgQuSHmLnc6SVI+KwBpc3Lwg==} + '@cloudflare/unenv-preset@2.3.1': + resolution: {integrity: sha512-Xq57Qd+ADpt6hibcVBO0uLG9zzRgyRhfCUgBT9s+g3+3Ivg5zDyVgLFy40ES1VdNcu8rPNSivm9A+kGP5IVaPg==} peerDependencies: - unenv: 2.0.0-rc.14 - workerd: ^1.20250124.0 + unenv: 2.0.0-rc.15 + workerd: ^1.20250320.0 peerDependenciesMeta: workerd: optional: true - '@cloudflare/workerd-darwin-64@1.20250124.0': - resolution: {integrity: sha512-P5Z5KfVAuoCidIc0o2JPQZFLNTXDjtxN8vhtreCUr6V+xF5pqDNwQqeBDnDDF0gcszFQOYi2OZAB9e1MwssTwA==} + '@cloudflare/workerd-darwin-64@1.20250321.0': + resolution: {integrity: sha512-y273GfLaNCxkL8hTfo0c8FZKkOPdq+CPZAKJXPWB+YpS1JCOULu6lNTptpD7ZtF14dTYPkn5Weug31TTlviJmw==} engines: {node: '>=16'} cpu: [x64] os: [darwin] - '@cloudflare/workerd-darwin-64@1.20250310.0': - resolution: {integrity: sha512-LkLJO6F8lRNaCbK5sQCITi66SyCirDpffRuI5/5iILDJWQU4KVvAOKPvHrd4E5h/WDm9FGd22zMJwky7SxaNjg==} - engines: {node: '>=16'} - cpu: [x64] - os: [darwin] - - '@cloudflare/workerd-darwin-arm64@1.20250124.0': - resolution: {integrity: sha512-lVxf6qIfmJ5rS6rmGKV7lt6ApY6nhD4kAQTK4vKYm/npk2sXod6LASIY0U4WBCwy4N+S75a8hP2QtmQf+KV3Iw==} + '@cloudflare/workerd-darwin-arm64@1.20250321.0': + resolution: {integrity: sha512-qvf7/gkkQq7fAsoMlntJSimN/WfwQqxi2oL0aWZMGodTvs/yRHO2I4oE0eOihVdK1BXyBHJXNxEvNDBjF0+Yuw==} engines: {node: '>=16'} cpu: [arm64] os: [darwin] - '@cloudflare/workerd-darwin-arm64@1.20250310.0': - resolution: {integrity: sha512-WythDJQbsU3Ii1hhA7pJZLBQlHezeYWAnaMnv3gS2Exj45oF8G4chFvrO7zCzjlcJXwSeBTtQRJqxw9AiUDhyA==} - engines: {node: '>=16'} - cpu: [arm64] - os: [darwin] - - '@cloudflare/workerd-linux-64@1.20250124.0': - resolution: {integrity: sha512-5S4GzN08vW/CfzaM1rVAkRhPPSDX1O1t7u0pj+xdbGl4GcazBzE4ZLre+y9OMplZ9PBCkxXkRWqHXzabWA1x4A==} - engines: {node: '>=16'} - cpu: [x64] - os: [linux] - - '@cloudflare/workerd-linux-64@1.20250310.0': - resolution: {integrity: sha512-LbP769tT4/5QBHSj4lCt99QIKTi6cU+wYhLfF7rEtYHBnZS2+nIw9xttAzxeERx/aFrU+mxLcYPFV8fUeVxGng==} + '@cloudflare/workerd-linux-64@1.20250321.0': + resolution: {integrity: sha512-AEp3xjWFrNPO/h0StCOgOb0bWCcNThnkESpy91Wf4mfUF2p7tOCdp37Nk/1QIRqSxnfv4Hgxyi7gcWud9cJuMw==} engines: {node: '>=16'} cpu: [x64] os: [linux] - '@cloudflare/workerd-linux-arm64@1.20250124.0': - resolution: {integrity: sha512-CHSYnutDfXgUWL9WcP0GbzIb5OyC9RZVCJGhKbDTQy6/uH7AivNcLzXtOhNdqetKjERmOxUbL9Us7vcMQLztog==} + '@cloudflare/workerd-linux-arm64@1.20250321.0': + resolution: {integrity: sha512-wRWyMIoPIS1UBXCisW0FYTgGsfZD4AVS0hXA5nuLc0c21CvzZpmmTjqEWMcwPFenwy/MNL61NautVOC4qJqQ3Q==} engines: {node: '>=16'} cpu: [arm64] os: [linux] - '@cloudflare/workerd-linux-arm64@1.20250310.0': - resolution: {integrity: sha512-FzWeKM6id20EMZACaDg0Kkvg1C4lvXZgLBXVI6h6xaXTNFReoyEp4v4eMrRTuja5ec5k+m5iGKjP4/bMWJp9ew==} - engines: {node: '>=16'} - cpu: [arm64] - os: [linux] - - '@cloudflare/workerd-windows-64@1.20250124.0': - resolution: {integrity: sha512-5TunEy5x4pNUQ10Z47qP5iF6m3X9uB2ZScKDLkNaWtbQ7EcMCapOWzuynVkTKIMBgDeKw6DAB8nbbkybPyMS9w==} - engines: {node: '>=16'} - cpu: [x64] - os: [win32] - - '@cloudflare/workerd-windows-64@1.20250310.0': - resolution: {integrity: sha512-04OgaDzm8/8nkjF3tovB+WywZLjSdAHCQT2omXKCwH3EDd1kpd8vvzE1pErtdIyKCOf9/sArY4BhPdxRj7ijlg==} + '@cloudflare/workerd-windows-64@1.20250321.0': + resolution: {integrity: sha512-8vYP3QYO0zo2faUDfWl88jjfUvz7Si9GS3mUYaTh/TR9LcAUtsO7muLxPamqEyoxNFtbQgy08R4rTid94KRi3w==} engines: {node: '>=16'} cpu: [x64] os: [win32] @@ -1777,16 +1747,6 @@ packages: resolution: {integrity: sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==} deprecated: 'Merged into tsx: https://tsx.is' - '@esbuild-plugins/node-globals-polyfill@0.2.3': - resolution: {integrity: sha512-r3MIryXDeXDOZh7ih1l/yE9ZLORCd5e8vWg02azWRGj5SPTuoh69A2AIyn0Z31V/kHBfZ4HgWJ+OK3GTTwLmnw==} - peerDependencies: - esbuild: '*' - - '@esbuild-plugins/node-modules-polyfill@0.2.2': - resolution: {integrity: sha512-LXV7QsWJxRuMYvKbiznh+U1ilIop3g2TeKRzUxOG5X3YITc8JyyTa90BmLwqqv0YnX4v32CSlG+vsziZp9dMvA==} - peerDependencies: - esbuild: '*' - '@esbuild/aix-ppc64@0.19.12': resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} engines: {node: '>=12'} @@ -1811,11 +1771,11 @@ packages: cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.17.19': - resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] + '@esbuild/aix-ppc64@0.25.2': + resolution: {integrity: sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] '@esbuild/android-arm64@0.18.20': resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} @@ -1853,10 +1813,10 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm@0.17.19': - resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==} - engines: {node: '>=12'} - cpu: [arm] + '@esbuild/android-arm64@0.25.2': + resolution: {integrity: sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w==} + engines: {node: '>=18'} + cpu: [arm64] os: [android] '@esbuild/android-arm@0.18.20': @@ -1895,10 +1855,10 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-x64@0.17.19': - resolution: {integrity: sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==} - engines: {node: '>=12'} - cpu: [x64] + '@esbuild/android-arm@0.25.2': + resolution: {integrity: sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA==} + engines: {node: '>=18'} + cpu: [arm] os: [android] '@esbuild/android-x64@0.18.20': @@ -1937,11 +1897,11 @@ packages: cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.17.19': - resolution: {integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] + '@esbuild/android-x64@0.25.2': + resolution: {integrity: sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] '@esbuild/darwin-arm64@0.18.20': resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} @@ -1979,10 +1939,10 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.17.19': - resolution: {integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==} - engines: {node: '>=12'} - cpu: [x64] + '@esbuild/darwin-arm64@0.25.2': + resolution: {integrity: sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA==} + engines: {node: '>=18'} + cpu: [arm64] os: [darwin] '@esbuild/darwin-x64@0.18.20': @@ -2021,11 +1981,11 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.17.19': - resolution: {integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] + '@esbuild/darwin-x64@0.25.2': + resolution: {integrity: sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] '@esbuild/freebsd-arm64@0.18.20': resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} @@ -2063,10 +2023,10 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.17.19': - resolution: {integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==} - engines: {node: '>=12'} - cpu: [x64] + '@esbuild/freebsd-arm64@0.25.2': + resolution: {integrity: sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w==} + engines: {node: '>=18'} + cpu: [arm64] os: [freebsd] '@esbuild/freebsd-x64@0.18.20': @@ -2105,11 +2065,11 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.17.19': - resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] + '@esbuild/freebsd-x64@0.25.2': + resolution: {integrity: sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] '@esbuild/linux-arm64@0.18.20': resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} @@ -2147,10 +2107,10 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.17.19': - resolution: {integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==} - engines: {node: '>=12'} - cpu: [arm] + '@esbuild/linux-arm64@0.25.2': + resolution: {integrity: sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g==} + engines: {node: '>=18'} + cpu: [arm64] os: [linux] '@esbuild/linux-arm@0.18.20': @@ -2189,10 +2149,10 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.17.19': - resolution: {integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==} - engines: {node: '>=12'} - cpu: [ia32] + '@esbuild/linux-arm@0.25.2': + resolution: {integrity: sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g==} + engines: {node: '>=18'} + cpu: [arm] os: [linux] '@esbuild/linux-ia32@0.18.20': @@ -2231,10 +2191,10 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.17.19': - resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==} - engines: {node: '>=12'} - cpu: [loong64] + '@esbuild/linux-ia32@0.25.2': + resolution: {integrity: sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ==} + engines: {node: '>=18'} + cpu: [ia32] os: [linux] '@esbuild/linux-loong64@0.18.20': @@ -2273,10 +2233,10 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.17.19': - resolution: {integrity: sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==} - engines: {node: '>=12'} - cpu: [mips64el] + '@esbuild/linux-loong64@0.25.2': + resolution: {integrity: sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w==} + engines: {node: '>=18'} + cpu: [loong64] os: [linux] '@esbuild/linux-mips64el@0.18.20': @@ -2315,10 +2275,10 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.17.19': - resolution: {integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==} - engines: {node: '>=12'} - cpu: [ppc64] + '@esbuild/linux-mips64el@0.25.2': + resolution: {integrity: sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q==} + engines: {node: '>=18'} + cpu: [mips64el] os: [linux] '@esbuild/linux-ppc64@0.18.20': @@ -2357,10 +2317,10 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.17.19': - resolution: {integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==} - engines: {node: '>=12'} - cpu: [riscv64] + '@esbuild/linux-ppc64@0.25.2': + resolution: {integrity: sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g==} + engines: {node: '>=18'} + cpu: [ppc64] os: [linux] '@esbuild/linux-riscv64@0.18.20': @@ -2399,10 +2359,10 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.17.19': - resolution: {integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==} - engines: {node: '>=12'} - cpu: [s390x] + '@esbuild/linux-riscv64@0.25.2': + resolution: {integrity: sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw==} + engines: {node: '>=18'} + cpu: [riscv64] os: [linux] '@esbuild/linux-s390x@0.18.20': @@ -2441,10 +2401,10 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.17.19': - resolution: {integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==} - engines: {node: '>=12'} - cpu: [x64] + '@esbuild/linux-s390x@0.25.2': + resolution: {integrity: sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q==} + engines: {node: '>=18'} + cpu: [s390x] os: [linux] '@esbuild/linux-x64@0.18.20': @@ -2483,16 +2443,22 @@ packages: cpu: [x64] os: [linux] + '@esbuild/linux-x64@0.25.2': + resolution: {integrity: sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + '@esbuild/netbsd-arm64@0.24.2': resolution: {integrity: sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.17.19': - resolution: {integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==} - engines: {node: '>=12'} - cpu: [x64] + '@esbuild/netbsd-arm64@0.25.2': + resolution: {integrity: sha512-talAIBoY5M8vHc6EeI2WW9d/CkiO9MQJ0IOWX8hrLhxGbro/vBXJvaQXefW2cP0z0nQVTdQ/eNyGFV1GSKrxfw==} + engines: {node: '>=18'} + cpu: [arm64] os: [netbsd] '@esbuild/netbsd-x64@0.18.20': @@ -2531,6 +2497,12 @@ packages: cpu: [x64] os: [netbsd] + '@esbuild/netbsd-x64@0.25.2': + resolution: {integrity: sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + '@esbuild/openbsd-arm64@0.23.1': resolution: {integrity: sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==} engines: {node: '>=18'} @@ -2543,10 +2515,10 @@ packages: cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.17.19': - resolution: {integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==} - engines: {node: '>=12'} - cpu: [x64] + '@esbuild/openbsd-arm64@0.25.2': + resolution: {integrity: sha512-dcXYOC6NXOqcykeDlwId9kB6OkPUxOEqU+rkrYVqJbK2hagWOMrsTGsMr8+rW02M+d5Op5NNlgMmjzecaRf7Tg==} + engines: {node: '>=18'} + cpu: [arm64] os: [openbsd] '@esbuild/openbsd-x64@0.18.20': @@ -2585,11 +2557,11 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/sunos-x64@0.17.19': - resolution: {integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==} - engines: {node: '>=12'} + '@esbuild/openbsd-x64@0.25.2': + resolution: {integrity: sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw==} + engines: {node: '>=18'} cpu: [x64] - os: [sunos] + os: [openbsd] '@esbuild/sunos-x64@0.18.20': resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} @@ -2627,11 +2599,11 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.17.19': - resolution: {integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] + '@esbuild/sunos-x64@0.25.2': + resolution: {integrity: sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] '@esbuild/win32-arm64@0.18.20': resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} @@ -2669,10 +2641,10 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.17.19': - resolution: {integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==} - engines: {node: '>=12'} - cpu: [ia32] + '@esbuild/win32-arm64@0.25.2': + resolution: {integrity: sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q==} + engines: {node: '>=18'} + cpu: [arm64] os: [win32] '@esbuild/win32-ia32@0.18.20': @@ -2711,10 +2683,10 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.17.19': - resolution: {integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==} - engines: {node: '>=12'} - cpu: [x64] + '@esbuild/win32-ia32@0.25.2': + resolution: {integrity: sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg==} + engines: {node: '>=18'} + cpu: [ia32] os: [win32] '@esbuild/win32-x64@0.18.20': @@ -2753,6 +2725,12 @@ packages: cpu: [x64] os: [win32] + '@esbuild/win32-x64@0.25.2': + resolution: {integrity: sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@eslint-community/eslint-utils@4.4.0': resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -3891,9 +3869,8 @@ packages: resolution: {integrity: sha512-fSb9T2S3q39T+XYoacEbtfzM+9aW9njXreByK7eZBvBEKWBNoE+DoJ0r4jaPunBPpr87SBxr1V8ZORlzXudIQg==} hasBin: true - '@opennextjs/aws@https://pkg.pr.new/@opennextjs/aws@802': - resolution: {tarball: https://pkg.pr.new/@opennextjs/aws@802} - version: 3.5.3 + '@opennextjs/aws@3.5.4': + resolution: {integrity: sha512-QPCTcJ95p0pHUVDjjiB9MGRbOKotaq1Dl9WrmS6/dJt6vb6zdavKFBYdT/WQsTn5wj2RqInim7t6Xc5x+wAO6Q==} hasBin: true '@opentelemetry/api@1.9.0': @@ -6072,11 +6049,6 @@ packages: engines: {node: '>=12'} hasBin: true - esbuild@0.17.19: - resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==} - engines: {node: '>=12'} - hasBin: true - esbuild@0.18.20: resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} engines: {node: '>=12'} @@ -6107,6 +6079,11 @@ packages: engines: {node: '>=18'} hasBin: true + esbuild@0.25.2: + resolution: {integrity: sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ==} + engines: {node: '>=18'} + hasBin: true + escalade@3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} @@ -6356,9 +6333,6 @@ packages: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} - estree-walker@0.6.1: - resolution: {integrity: sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==} - estree-walker@2.0.2: resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} @@ -7237,6 +7211,7 @@ packages: libsql@0.4.7: resolution: {integrity: sha512-T9eIRCs6b0J1SHKYIvD8+KCJMcWZ900iZyxdnSCdqxN12Z1ijzT+jY5nrk72Jw4B0HGzms2NgpryArlJqvc3Lw==} + cpu: [x64, arm64, wasm32] os: [darwin, linux, win32] lilconfig@2.1.0: @@ -7343,9 +7318,6 @@ packages: peerDependencies: react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 - magic-string@0.25.9: - resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} - magic-string@0.30.11: resolution: {integrity: sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==} @@ -7511,14 +7483,9 @@ packages: resolution: {integrity: sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==} hasBin: true - miniflare@3.20250124.1: - resolution: {integrity: sha512-BL8jq7btzaHFs/8PwYjBIiBecyqkEwkJIsFvoO/4bJn8O9NAbFaLSB023nGpfwWCebP6uSepzqZm4hrOOxA8Eg==} - engines: {node: '>=16.13'} - hasBin: true - - miniflare@3.20250310.0: - resolution: {integrity: sha512-TQAxoo2ZiQYjiOJoK3bbcyjKD/u1E3akYOeSHc2Zcp1sLVydrgzSjmxtrn65/3BfDIrUgfYHyy9wspT6wzBy/A==} - engines: {node: '>=16.13'} + miniflare@4.20250321.1: + resolution: {integrity: sha512-pQuVtF6vQ1zMvPCo3Z19mzSFjgnlEnybzNzAJZipsqIk6kMXpYBZq+d8cWmeQFkBYlgeZKeKJ4EBKT6KapfTNg==} + engines: {node: '>=18.0.0'} hasBin: true minimatch@10.0.1: @@ -7952,9 +7919,6 @@ packages: obliterator@1.6.1: resolution: {integrity: sha512-9WXswnqINnnhOG/5SLimUlzuU1hFJUc8zkwyD59Sd+dPOMf05PmnYG/d6Q7HZ+KmgkZJa1PxRso6QdM3sTNHig==} - ohash@1.1.4: - resolution: {integrity: sha512-FlDryZAahJmEF3VR3w1KogSEdWX3WhA5GPakFx4J81kEAiHyLMpdLLElS8n8dfNadMgAne/MywcvmogzscVt4g==} - ohash@2.0.11: resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} @@ -8115,9 +8079,6 @@ packages: pathe@1.1.2: resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} - pathe@2.0.1: - resolution: {integrity: sha512-6jpjMpOth5S9ITVu5clZ7NOgHNsv5vRQdheL9ztp2vZmM6fRbLvyua1tiBIL4lk8SAe3ARzeXEly6siXCjDHDw==} - pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} @@ -8602,16 +8563,6 @@ packages: engines: {node: 20 || >=22} hasBin: true - rollup-plugin-inject@3.0.2: - resolution: {integrity: sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==} - deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-inject. - - rollup-plugin-node-polyfills@0.2.1: - resolution: {integrity: sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA==} - - rollup-pluginutils@2.8.2: - resolution: {integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==} - rollup@4.21.0: resolution: {integrity: sha512-vo+S/lfA2lMS7rZ2Qoubi6I5hwZwzXeUIctILZLbHI+laNtvhhOIon2S1JksA5UEDQ7l3vberd0fxK44lTYjbQ==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -8810,10 +8761,6 @@ packages: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} - sourcemap-codec@1.4.8: - resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} - deprecated: Please use @jridgewell/sourcemap-codec instead - space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} @@ -9318,19 +9265,16 @@ packages: resolution: {integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==} engines: {node: '>=14.0'} - undici@5.28.5: - resolution: {integrity: sha512-zICwjrDrcrUE0pyyJc1I2QzBkLM8FINsgOrt6WjA+BgajVq9Nxu2PbFFXUrAggLfDXlZGZBVZYw7WNV5KiBiBA==} + undici@5.29.0: + resolution: {integrity: sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==} engines: {node: '>=14.0'} undici@6.19.8: resolution: {integrity: sha512-U8uCCl2x9TK3WANvmBavymRzxbfFYG+tAu+fgx3zxQy3qdagQqBLwJVrdyO1TBfUXvfKveMKJZhpvUYoOjM+4g==} engines: {node: '>=18.17'} - unenv@2.0.0-rc.1: - resolution: {integrity: sha512-PU5fb40H8X149s117aB4ytbORcCvlASdtF97tfls4BPIyj4PeVxvpSuy1jAptqYHqB0vb2w2sHvzM0XWcp2OKg==} - - unenv@2.0.0-rc.14: - resolution: {integrity: sha512-od496pShMen7nOy5VmVJCnq8rptd45vh6Nx/r2iPbrba6pa6p+tS2ywuIHRZ/OBvSbQZB0kWvpO9XBNVFXHD3Q==} + unenv@2.0.0-rc.15: + resolution: {integrity: sha512-J/rEIZU8w6FOfLNz/hNKsnY+fFHWnu9MH4yRbSZF3xbbGHovcetXPs7sD+9p8L6CeNC//I9bhRYAOsBt2u7/OA==} unified@11.0.5: resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} @@ -9567,33 +9511,17 @@ packages: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} - workerd@1.20250124.0: - resolution: {integrity: sha512-EnT9gN3M9/UHRFPZptKgK36DLOW8WfJV7cjNs3zstVbmF5cpFaHCAzX7tXWBO6zyvW/+EjklJPFtOvfatiZsuQ==} - engines: {node: '>=16'} - hasBin: true - - workerd@1.20250310.0: - resolution: {integrity: sha512-bAaZ9Bmts3mArbIrXYAtr+ZRsAJAAUEsCtvwfBavIYXaZ5sgdEOJBEiBbvsHp6CsVObegOM85tIWpYLpbTxQrQ==} + workerd@1.20250321.0: + resolution: {integrity: sha512-vyuz9pdJ+7o1lC79vQ2UVRLXPARa2Lq94PbTfqEcYQeSxeR9X+YqhNq2yysv8Zs5vpokmexLCtMniPp9u+2LVQ==} engines: {node: '>=16'} hasBin: true - wrangler@3.107.0: - resolution: {integrity: sha512-Rb/fFZDHSiGNQte13Mem0O7oGKs77MfodImB3WbBD+xS0S/fxMYMwuVzkNlOGLBYYnwKx2V2/k8GpK5dJsRLhQ==} - engines: {node: '>=16.17.0'} - deprecated: There is a regression in Wrangler 3.107.0 in which [assets] was not being inherited from the top-level environment. Please downgrade to v3.106.0 for now. - hasBin: true - peerDependencies: - '@cloudflare/workers-types': ^4.20250121.0 - peerDependenciesMeta: - '@cloudflare/workers-types': - optional: true - - wrangler@3.114.1: - resolution: {integrity: sha512-GuS6SrnAZZDiNb20Vf2Ww0KCfnctHUEzi5GyML1i2brfQPI6BikgI/W/u6XDtYtah0OkbIWIiNJ+SdhWT7KEcw==} - engines: {node: '>=16.17.0'} + wrangler@4.7.0: + resolution: {integrity: sha512-5LoyNxpPG8K0kcU43Ossyj7+Hq78v8BNtu7ZNNSxDOUcairMEDwcbrbUOqzu/iM4yHiri5wCjl4Ja57fKED/Sg==} + engines: {node: '>=18.0.0'} hasBin: true peerDependencies: - '@cloudflare/workers-types': ^4.20250310.0 + '@cloudflare/workers-types': ^4.20250321.0 peerDependenciesMeta: '@cloudflare/workers-types': optional: true @@ -9681,9 +9609,6 @@ packages: youch@3.2.3: resolution: {integrity: sha512-ZBcWz/uzZaQVdCvfV4uk616Bbpf2ee+F/AvuKDR5EwX/Y4v06xWdtMluqTD7+KlZdM93lLm9gMZYo0sKBS0pgw==} - youch@3.3.3: - resolution: {integrity: sha512-qSFXUk3UZBLfggAW3dJKg0BMblG5biqSF8M34E06o5CSsZtH92u9Hqmj2RzGiHDi64fhe83+4tENFP2DB6t6ZA==} - zod-package-json@1.0.3: resolution: {integrity: sha512-Mb6GzuRyUEl8X+6V6xzHbd4XV0au/4gOYrYP+CAfHL32uPmGswES+v2YqonZiW1NZWVA3jkssCKSU2knonm/aQ==} engines: {node: '>=20'} @@ -11303,44 +11228,29 @@ snapshots: dependencies: csstype: 3.1.1 - '@cloudflare/kv-asset-handler@0.3.4': + '@cloudflare/kv-asset-handler@0.4.0': dependencies: mime: 3.0.0 - '@cloudflare/unenv-preset@2.0.2(unenv@2.0.0-rc.14)(workerd@1.20250310.0)': + '@cloudflare/unenv-preset@2.3.1(unenv@2.0.0-rc.15)(workerd@1.20250321.0)': dependencies: - unenv: 2.0.0-rc.14 + unenv: 2.0.0-rc.15 optionalDependencies: - workerd: 1.20250310.0 - - '@cloudflare/workerd-darwin-64@1.20250124.0': - optional: true - - '@cloudflare/workerd-darwin-64@1.20250310.0': - optional: true - - '@cloudflare/workerd-darwin-arm64@1.20250124.0': - optional: true - - '@cloudflare/workerd-darwin-arm64@1.20250310.0': - optional: true + workerd: 1.20250321.0 - '@cloudflare/workerd-linux-64@1.20250124.0': + '@cloudflare/workerd-darwin-64@1.20250321.0': optional: true - '@cloudflare/workerd-linux-64@1.20250310.0': + '@cloudflare/workerd-darwin-arm64@1.20250321.0': optional: true - '@cloudflare/workerd-linux-arm64@1.20250124.0': + '@cloudflare/workerd-linux-64@1.20250321.0': optional: true - '@cloudflare/workerd-linux-arm64@1.20250310.0': + '@cloudflare/workerd-linux-arm64@1.20250321.0': optional: true - '@cloudflare/workerd-windows-64@1.20250124.0': - optional: true - - '@cloudflare/workerd-windows-64@1.20250310.0': + '@cloudflare/workerd-windows-64@1.20250321.0': optional: true '@cloudflare/workers-types@4.20250109.0': {} @@ -11409,16 +11319,6 @@ snapshots: '@esbuild-kit/core-utils': 3.3.2 get-tsconfig: 4.8.0 - '@esbuild-plugins/node-globals-polyfill@0.2.3(esbuild@0.17.19)': - dependencies: - esbuild: 0.17.19 - - '@esbuild-plugins/node-modules-polyfill@0.2.2(esbuild@0.17.19)': - dependencies: - esbuild: 0.17.19 - escape-string-regexp: 4.0.0 - rollup-plugin-node-polyfills: 0.2.1 - '@esbuild/aix-ppc64@0.19.12': optional: true @@ -11431,7 +11331,7 @@ snapshots: '@esbuild/aix-ppc64@0.24.2': optional: true - '@esbuild/android-arm64@0.17.19': + '@esbuild/aix-ppc64@0.25.2': optional: true '@esbuild/android-arm64@0.18.20': @@ -11452,7 +11352,7 @@ snapshots: '@esbuild/android-arm64@0.24.2': optional: true - '@esbuild/android-arm@0.17.19': + '@esbuild/android-arm64@0.25.2': optional: true '@esbuild/android-arm@0.18.20': @@ -11473,7 +11373,7 @@ snapshots: '@esbuild/android-arm@0.24.2': optional: true - '@esbuild/android-x64@0.17.19': + '@esbuild/android-arm@0.25.2': optional: true '@esbuild/android-x64@0.18.20': @@ -11494,7 +11394,7 @@ snapshots: '@esbuild/android-x64@0.24.2': optional: true - '@esbuild/darwin-arm64@0.17.19': + '@esbuild/android-x64@0.25.2': optional: true '@esbuild/darwin-arm64@0.18.20': @@ -11515,7 +11415,7 @@ snapshots: '@esbuild/darwin-arm64@0.24.2': optional: true - '@esbuild/darwin-x64@0.17.19': + '@esbuild/darwin-arm64@0.25.2': optional: true '@esbuild/darwin-x64@0.18.20': @@ -11536,7 +11436,7 @@ snapshots: '@esbuild/darwin-x64@0.24.2': optional: true - '@esbuild/freebsd-arm64@0.17.19': + '@esbuild/darwin-x64@0.25.2': optional: true '@esbuild/freebsd-arm64@0.18.20': @@ -11557,7 +11457,7 @@ snapshots: '@esbuild/freebsd-arm64@0.24.2': optional: true - '@esbuild/freebsd-x64@0.17.19': + '@esbuild/freebsd-arm64@0.25.2': optional: true '@esbuild/freebsd-x64@0.18.20': @@ -11578,7 +11478,7 @@ snapshots: '@esbuild/freebsd-x64@0.24.2': optional: true - '@esbuild/linux-arm64@0.17.19': + '@esbuild/freebsd-x64@0.25.2': optional: true '@esbuild/linux-arm64@0.18.20': @@ -11599,7 +11499,7 @@ snapshots: '@esbuild/linux-arm64@0.24.2': optional: true - '@esbuild/linux-arm@0.17.19': + '@esbuild/linux-arm64@0.25.2': optional: true '@esbuild/linux-arm@0.18.20': @@ -11620,7 +11520,7 @@ snapshots: '@esbuild/linux-arm@0.24.2': optional: true - '@esbuild/linux-ia32@0.17.19': + '@esbuild/linux-arm@0.25.2': optional: true '@esbuild/linux-ia32@0.18.20': @@ -11641,7 +11541,7 @@ snapshots: '@esbuild/linux-ia32@0.24.2': optional: true - '@esbuild/linux-loong64@0.17.19': + '@esbuild/linux-ia32@0.25.2': optional: true '@esbuild/linux-loong64@0.18.20': @@ -11662,7 +11562,7 @@ snapshots: '@esbuild/linux-loong64@0.24.2': optional: true - '@esbuild/linux-mips64el@0.17.19': + '@esbuild/linux-loong64@0.25.2': optional: true '@esbuild/linux-mips64el@0.18.20': @@ -11683,7 +11583,7 @@ snapshots: '@esbuild/linux-mips64el@0.24.2': optional: true - '@esbuild/linux-ppc64@0.17.19': + '@esbuild/linux-mips64el@0.25.2': optional: true '@esbuild/linux-ppc64@0.18.20': @@ -11704,7 +11604,7 @@ snapshots: '@esbuild/linux-ppc64@0.24.2': optional: true - '@esbuild/linux-riscv64@0.17.19': + '@esbuild/linux-ppc64@0.25.2': optional: true '@esbuild/linux-riscv64@0.18.20': @@ -11725,7 +11625,7 @@ snapshots: '@esbuild/linux-riscv64@0.24.2': optional: true - '@esbuild/linux-s390x@0.17.19': + '@esbuild/linux-riscv64@0.25.2': optional: true '@esbuild/linux-s390x@0.18.20': @@ -11746,7 +11646,7 @@ snapshots: '@esbuild/linux-s390x@0.24.2': optional: true - '@esbuild/linux-x64@0.17.19': + '@esbuild/linux-s390x@0.25.2': optional: true '@esbuild/linux-x64@0.18.20': @@ -11767,10 +11667,13 @@ snapshots: '@esbuild/linux-x64@0.24.2': optional: true + '@esbuild/linux-x64@0.25.2': + optional: true + '@esbuild/netbsd-arm64@0.24.2': optional: true - '@esbuild/netbsd-x64@0.17.19': + '@esbuild/netbsd-arm64@0.25.2': optional: true '@esbuild/netbsd-x64@0.18.20': @@ -11791,13 +11694,16 @@ snapshots: '@esbuild/netbsd-x64@0.24.2': optional: true + '@esbuild/netbsd-x64@0.25.2': + optional: true + '@esbuild/openbsd-arm64@0.23.1': optional: true '@esbuild/openbsd-arm64@0.24.2': optional: true - '@esbuild/openbsd-x64@0.17.19': + '@esbuild/openbsd-arm64@0.25.2': optional: true '@esbuild/openbsd-x64@0.18.20': @@ -11818,7 +11724,7 @@ snapshots: '@esbuild/openbsd-x64@0.24.2': optional: true - '@esbuild/sunos-x64@0.17.19': + '@esbuild/openbsd-x64@0.25.2': optional: true '@esbuild/sunos-x64@0.18.20': @@ -11839,7 +11745,7 @@ snapshots: '@esbuild/sunos-x64@0.24.2': optional: true - '@esbuild/win32-arm64@0.17.19': + '@esbuild/sunos-x64@0.25.2': optional: true '@esbuild/win32-arm64@0.18.20': @@ -11860,7 +11766,7 @@ snapshots: '@esbuild/win32-arm64@0.24.2': optional: true - '@esbuild/win32-ia32@0.17.19': + '@esbuild/win32-arm64@0.25.2': optional: true '@esbuild/win32-ia32@0.18.20': @@ -11881,7 +11787,7 @@ snapshots: '@esbuild/win32-ia32@0.24.2': optional: true - '@esbuild/win32-x64@0.17.19': + '@esbuild/win32-ia32@0.25.2': optional: true '@esbuild/win32-x64@0.18.20': @@ -11902,6 +11808,9 @@ snapshots: '@esbuild/win32-x64@0.24.2': optional: true + '@esbuild/win32-x64@0.25.2': + optional: true + '@eslint-community/eslint-utils@4.4.0(eslint@8.57.1)': dependencies: eslint: 8.57.1 @@ -13036,7 +12945,7 @@ snapshots: - aws-crt - supports-color - '@opennextjs/aws@https://pkg.pr.new/@opennextjs/aws@802': + '@opennextjs/aws@3.5.4': dependencies: '@ast-grep/napi': 0.35.0 '@aws-sdk/client-cloudfront': 3.398.0 @@ -13078,8 +12987,8 @@ snapshots: '@prisma/config@6.5.0': dependencies: - esbuild: 0.24.2 - esbuild-register: 3.6.0(esbuild@0.24.2) + esbuild: 0.25.2 + esbuild-register: 3.6.0(esbuild@0.25.2) transitivePeerDependencies: - supports-color optional: true @@ -15221,11 +15130,13 @@ snapshots: dependencies: color-name: 1.1.4 simple-swizzle: 0.2.2 + optional: true color@4.2.3: dependencies: color-convert: 2.0.1 color-string: 1.9.1 + optional: true combined-stream@1.0.8: dependencies: @@ -15810,10 +15721,10 @@ snapshots: transitivePeerDependencies: - supports-color - esbuild-register@3.6.0(esbuild@0.24.2): + esbuild-register@3.6.0(esbuild@0.25.2): dependencies: debug: 4.3.6 - esbuild: 0.24.2 + esbuild: 0.25.2 transitivePeerDependencies: - supports-color optional: true @@ -15853,31 +15764,6 @@ snapshots: esbuild-windows-64: 0.14.47 esbuild-windows-arm64: 0.14.47 - esbuild@0.17.19: - optionalDependencies: - '@esbuild/android-arm': 0.17.19 - '@esbuild/android-arm64': 0.17.19 - '@esbuild/android-x64': 0.17.19 - '@esbuild/darwin-arm64': 0.17.19 - '@esbuild/darwin-x64': 0.17.19 - '@esbuild/freebsd-arm64': 0.17.19 - '@esbuild/freebsd-x64': 0.17.19 - '@esbuild/linux-arm': 0.17.19 - '@esbuild/linux-arm64': 0.17.19 - '@esbuild/linux-ia32': 0.17.19 - '@esbuild/linux-loong64': 0.17.19 - '@esbuild/linux-mips64el': 0.17.19 - '@esbuild/linux-ppc64': 0.17.19 - '@esbuild/linux-riscv64': 0.17.19 - '@esbuild/linux-s390x': 0.17.19 - '@esbuild/linux-x64': 0.17.19 - '@esbuild/netbsd-x64': 0.17.19 - '@esbuild/openbsd-x64': 0.17.19 - '@esbuild/sunos-x64': 0.17.19 - '@esbuild/win32-arm64': 0.17.19 - '@esbuild/win32-ia32': 0.17.19 - '@esbuild/win32-x64': 0.17.19 - esbuild@0.18.20: optionalDependencies: '@esbuild/android-arm': 0.18.20 @@ -16035,6 +15921,35 @@ snapshots: '@esbuild/win32-ia32': 0.24.2 '@esbuild/win32-x64': 0.24.2 + esbuild@0.25.2: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.2 + '@esbuild/android-arm': 0.25.2 + '@esbuild/android-arm64': 0.25.2 + '@esbuild/android-x64': 0.25.2 + '@esbuild/darwin-arm64': 0.25.2 + '@esbuild/darwin-x64': 0.25.2 + '@esbuild/freebsd-arm64': 0.25.2 + '@esbuild/freebsd-x64': 0.25.2 + '@esbuild/linux-arm': 0.25.2 + '@esbuild/linux-arm64': 0.25.2 + '@esbuild/linux-ia32': 0.25.2 + '@esbuild/linux-loong64': 0.25.2 + '@esbuild/linux-mips64el': 0.25.2 + '@esbuild/linux-ppc64': 0.25.2 + '@esbuild/linux-riscv64': 0.25.2 + '@esbuild/linux-s390x': 0.25.2 + '@esbuild/linux-x64': 0.25.2 + '@esbuild/netbsd-arm64': 0.25.2 + '@esbuild/netbsd-x64': 0.25.2 + '@esbuild/openbsd-arm64': 0.25.2 + '@esbuild/openbsd-x64': 0.25.2 + '@esbuild/sunos-x64': 0.25.2 + '@esbuild/win32-arm64': 0.25.2 + '@esbuild/win32-ia32': 0.25.2 + '@esbuild/win32-x64': 0.25.2 + optional: true + escalade@3.2.0: {} escape-html@1.0.3: {} @@ -16051,8 +15966,8 @@ snapshots: '@typescript-eslint/parser': 8.7.0(eslint@8.57.1)(typescript@5.7.3) eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1))(eslint@8.57.1) - eslint-plugin-import: 2.30.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.57.1) + eslint-plugin-import: 2.30.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) eslint-plugin-jsx-a11y: 6.10.0(eslint@8.57.1) eslint-plugin-react: 7.36.1(eslint@8.57.1) eslint-plugin-react-hooks: 4.6.2(eslint@8.57.1) @@ -16071,7 +15986,7 @@ snapshots: '@typescript-eslint/parser': 8.7.0(eslint@8.57.1)(typescript@5.7.3) eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1))(eslint@8.57.1) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.1) eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) eslint-plugin-jsx-a11y: 6.10.0(eslint@8.57.1) eslint-plugin-react: 7.36.1(eslint@8.57.1) @@ -16091,7 +16006,7 @@ snapshots: '@typescript-eslint/parser': 8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.7.3) eslint: 9.11.1(jiti@1.21.6) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.7.3))(eslint@9.11.1(jiti@1.21.6)))(eslint@9.11.1(jiti@1.21.6)) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@9.11.1(jiti@1.21.6)) eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.11.1(jiti@1.21.6)) eslint-plugin-jsx-a11y: 6.10.0(eslint@9.11.1(jiti@1.21.6)) eslint-plugin-react: 7.37.4(eslint@9.11.1(jiti@1.21.6)) @@ -16111,7 +16026,7 @@ snapshots: '@typescript-eslint/parser': 8.7.0(eslint@9.19.0(jiti@1.21.6))(typescript@5.7.3) eslint: 9.19.0(jiti@1.21.6) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.7.0(eslint@9.19.0(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.7.0(eslint@9.19.0(jiti@1.21.6))(typescript@5.7.3))(eslint@9.19.0(jiti@1.21.6)))(eslint@9.19.0(jiti@1.21.6)) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.7.0(eslint@9.19.0(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@9.19.0(jiti@1.21.6)) eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.7.0(eslint@9.19.0(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.19.0(jiti@1.21.6)) eslint-plugin-jsx-a11y: 6.10.0(eslint@9.19.0(jiti@1.21.6)) eslint-plugin-react: 7.37.4(eslint@9.19.0(jiti@1.21.6)) @@ -16131,32 +16046,32 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1))(eslint@8.57.1): + eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.57.1): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.3.6 enhanced-resolve: 5.17.1 eslint: 8.57.1 - eslint-module-utils: 2.11.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1) + eslint-module-utils: 2.11.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) fast-glob: 3.3.2 get-tsconfig: 4.8.0 is-bun-module: 1.2.1 is-glob: 4.0.3 optionalDependencies: - eslint-plugin-import: 2.30.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1) + eslint-plugin-import: 2.30.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-node - eslint-import-resolver-webpack - supports-color - eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1))(eslint@8.57.1): + eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.1): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.3.6 enhanced-resolve: 5.17.1 eslint: 8.57.1 - eslint-module-utils: 2.11.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1) + eslint-module-utils: 2.11.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) fast-glob: 3.3.2 get-tsconfig: 4.8.0 is-bun-module: 1.2.1 @@ -16169,13 +16084,13 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.7.3))(eslint@9.11.1(jiti@1.21.6)))(eslint@9.11.1(jiti@1.21.6)): + eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@9.11.1(jiti@1.21.6)): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.3.6 enhanced-resolve: 5.17.1 eslint: 9.11.1(jiti@1.21.6) - eslint-module-utils: 2.11.0(@typescript-eslint/parser@8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.7.3))(eslint@9.11.1(jiti@1.21.6)))(eslint@9.11.1(jiti@1.21.6)))(eslint@9.11.1(jiti@1.21.6)) + eslint-module-utils: 2.11.0(@typescript-eslint/parser@8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@9.11.1(jiti@1.21.6)) fast-glob: 3.3.2 get-tsconfig: 4.8.0 is-bun-module: 1.2.1 @@ -16188,13 +16103,13 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.7.0(eslint@9.19.0(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.7.0(eslint@9.19.0(jiti@1.21.6))(typescript@5.7.3))(eslint@9.19.0(jiti@1.21.6)))(eslint@9.19.0(jiti@1.21.6)): + eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.7.0(eslint@9.19.0(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@9.19.0(jiti@1.21.6)): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.3.6 enhanced-resolve: 5.17.1 eslint: 9.19.0(jiti@1.21.6) - eslint-module-utils: 2.11.0(@typescript-eslint/parser@8.7.0(eslint@9.19.0(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.7.0(eslint@9.19.0(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.7.0(eslint@9.19.0(jiti@1.21.6))(typescript@5.7.3))(eslint@9.19.0(jiti@1.21.6)))(eslint@9.19.0(jiti@1.21.6)))(eslint@9.19.0(jiti@1.21.6)) + eslint-module-utils: 2.11.0(@typescript-eslint/parser@8.7.0(eslint@9.19.0(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@9.19.0(jiti@1.21.6)) fast-glob: 3.3.2 get-tsconfig: 4.8.0 is-bun-module: 1.2.1 @@ -16207,84 +16122,73 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-module-utils@2.11.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1): + eslint-module-utils@2.11.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1): dependencies: debug: 3.2.7 optionalDependencies: '@typescript-eslint/parser': 8.7.0(eslint@8.57.1)(typescript@5.7.3) eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1))(eslint@8.57.1) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.1) transitivePeerDependencies: - supports-color - eslint-module-utils@2.11.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1): - dependencies: - debug: 3.2.7 - optionalDependencies: - '@typescript-eslint/parser': 8.7.0(eslint@8.57.1)(typescript@5.7.3) - eslint: 8.57.1 - eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1))(eslint@8.57.1) - transitivePeerDependencies: - - supports-color - - eslint-module-utils@2.11.0(@typescript-eslint/parser@8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.7.3))(eslint@9.11.1(jiti@1.21.6)))(eslint@9.11.1(jiti@1.21.6)))(eslint@9.11.1(jiti@1.21.6)): + eslint-module-utils@2.11.0(@typescript-eslint/parser@8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@9.11.1(jiti@1.21.6)): dependencies: debug: 3.2.7 optionalDependencies: '@typescript-eslint/parser': 8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.7.3) eslint: 9.11.1(jiti@1.21.6) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.7.3))(eslint@9.11.1(jiti@1.21.6)))(eslint@9.11.1(jiti@1.21.6)) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@9.11.1(jiti@1.21.6)) transitivePeerDependencies: - supports-color - eslint-module-utils@2.11.0(@typescript-eslint/parser@8.7.0(eslint@9.19.0(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.7.0(eslint@9.19.0(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.7.0(eslint@9.19.0(jiti@1.21.6))(typescript@5.7.3))(eslint@9.19.0(jiti@1.21.6)))(eslint@9.19.0(jiti@1.21.6)))(eslint@9.19.0(jiti@1.21.6)): + eslint-module-utils@2.11.0(@typescript-eslint/parser@8.7.0(eslint@9.19.0(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@9.19.0(jiti@1.21.6)): dependencies: debug: 3.2.7 optionalDependencies: '@typescript-eslint/parser': 8.7.0(eslint@9.19.0(jiti@1.21.6))(typescript@5.7.3) eslint: 9.19.0(jiti@1.21.6) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.7.0(eslint@9.19.0(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.7.0(eslint@9.19.0(jiti@1.21.6))(typescript@5.7.3))(eslint@9.19.0(jiti@1.21.6)))(eslint@9.19.0(jiti@1.21.6)) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.7.0(eslint@9.19.0(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@9.19.0(jiti@1.21.6)) transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1): + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1): dependencies: debug: 3.2.7 optionalDependencies: '@typescript-eslint/parser': 8.7.0(eslint@8.57.1)(typescript@5.7.3) eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1))(eslint@8.57.1) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.1) transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.7.3))(eslint@9.11.1(jiti@1.21.6)))(eslint@9.11.1(jiti@1.21.6)))(eslint@9.11.1(jiti@1.21.6)): + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@9.11.1(jiti@1.21.6)): dependencies: debug: 3.2.7 optionalDependencies: '@typescript-eslint/parser': 8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.7.3) eslint: 9.11.1(jiti@1.21.6) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.7.3))(eslint@9.11.1(jiti@1.21.6)))(eslint@9.11.1(jiti@1.21.6)) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@9.11.1(jiti@1.21.6)) transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@8.7.0(eslint@9.19.0(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.7.0(eslint@9.19.0(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.7.0(eslint@9.19.0(jiti@1.21.6))(typescript@5.7.3))(eslint@9.19.0(jiti@1.21.6)))(eslint@9.19.0(jiti@1.21.6)))(eslint@9.19.0(jiti@1.21.6)): + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.7.0(eslint@9.19.0(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@9.19.0(jiti@1.21.6)): dependencies: debug: 3.2.7 optionalDependencies: '@typescript-eslint/parser': 8.7.0(eslint@9.19.0(jiti@1.21.6))(typescript@5.7.3) eslint: 9.19.0(jiti@1.21.6) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.7.0(eslint@9.19.0(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.7.0(eslint@9.19.0(jiti@1.21.6))(typescript@5.7.3))(eslint@9.19.0(jiti@1.21.6)))(eslint@9.19.0(jiti@1.21.6)) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.7.0(eslint@9.19.0(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@9.19.0(jiti@1.21.6)) transitivePeerDependencies: - supports-color - eslint-plugin-import@2.30.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1): + eslint-plugin-import@2.30.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.8 @@ -16295,7 +16199,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.11.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1) + eslint-module-utils: 2.11.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) hasown: 2.0.2 is-core-module: 2.15.1 is-glob: 4.0.3 @@ -16323,7 +16227,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) hasown: 2.0.2 is-core-module: 2.15.1 is-glob: 4.0.3 @@ -16352,7 +16256,7 @@ snapshots: doctrine: 2.1.0 eslint: 9.11.1(jiti@1.21.6) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.7.3))(eslint@9.11.1(jiti@1.21.6)))(eslint@9.11.1(jiti@1.21.6)))(eslint@9.11.1(jiti@1.21.6)) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@9.11.1(jiti@1.21.6)) hasown: 2.0.2 is-core-module: 2.15.1 is-glob: 4.0.3 @@ -16381,7 +16285,7 @@ snapshots: doctrine: 2.1.0 eslint: 9.19.0(jiti@1.21.6) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.7.0(eslint@9.19.0(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.7.0(eslint@9.19.0(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.7.0(eslint@9.19.0(jiti@1.21.6))(typescript@5.7.3))(eslint@9.19.0(jiti@1.21.6)))(eslint@9.19.0(jiti@1.21.6)))(eslint@9.19.0(jiti@1.21.6)) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.7.0(eslint@9.19.0(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@9.19.0(jiti@1.21.6)) hasown: 2.0.2 is-core-module: 2.15.1 is-glob: 4.0.3 @@ -16744,8 +16648,6 @@ snapshots: estraverse@5.3.0: {} - estree-walker@0.6.1: {} - estree-walker@2.0.2: {} estree-walker@3.0.3: @@ -17468,7 +17370,8 @@ snapshots: is-arrayish@0.2.1: {} - is-arrayish@0.3.2: {} + is-arrayish@0.3.2: + optional: true is-async-function@2.0.0: dependencies: @@ -17919,10 +17822,6 @@ snapshots: dependencies: react: 19.0.0 - magic-string@0.25.9: - dependencies: - sourcemap-codec: 1.4.8 - magic-string@0.30.11: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 @@ -18167,24 +18066,7 @@ snapshots: mini-svg-data-uri@1.4.4: {} - miniflare@3.20250124.1: - dependencies: - '@cspotcode/source-map-support': 0.8.1 - acorn: 8.14.0 - acorn-walk: 8.3.3 - exit-hook: 2.2.1 - glob-to-regexp: 0.4.1 - stoppable: 1.1.0 - undici: 5.28.4 - workerd: 1.20250124.0 - ws: 8.18.0 - youch: 3.3.3 - zod: 3.24.1 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - - miniflare@3.20250310.0: + miniflare@4.20250321.1: dependencies: '@cspotcode/source-map-support': 0.8.1 acorn: 8.14.0 @@ -18192,8 +18074,8 @@ snapshots: exit-hook: 2.2.1 glob-to-regexp: 0.4.1 stoppable: 1.1.0 - undici: 5.28.5 - workerd: 1.20250310.0 + undici: 5.29.0 + workerd: 1.20250321.0 ws: 8.18.0 youch: 3.2.3 zod: 3.22.3 @@ -18257,7 +18139,7 @@ snapshots: mlly@1.7.4: dependencies: acorn: 8.14.0 - pathe: 2.0.1 + pathe: 2.0.3 pkg-types: 1.3.0 ufo: 1.5.4 @@ -18684,8 +18566,6 @@ snapshots: obliterator@1.6.1: {} - ohash@1.1.4: {} - ohash@2.0.11: {} oidc-token-hash@5.0.3: {} @@ -18838,8 +18718,6 @@ snapshots: pathe@1.1.2: {} - pathe@2.0.1: {} - pathe@2.0.3: {} pathval@2.0.0: {} @@ -19375,20 +19253,6 @@ snapshots: glob: 11.0.0 package-json-from-dist: 1.0.0 - rollup-plugin-inject@3.0.2: - dependencies: - estree-walker: 0.6.1 - magic-string: 0.25.9 - rollup-pluginutils: 2.8.2 - - rollup-plugin-node-polyfills@0.2.1: - dependencies: - rollup-plugin-inject: 3.0.2 - - rollup-pluginutils@2.8.2: - dependencies: - estree-walker: 0.6.1 - rollup@4.21.0: dependencies: '@types/estree': 1.0.5 @@ -19564,6 +19428,7 @@ snapshots: '@img/sharp-wasm32': 0.33.5 '@img/sharp-win32-ia32': 0.33.5 '@img/sharp-win32-x64': 0.33.5 + optional: true shebang-command@1.2.0: dependencies: @@ -19624,6 +19489,7 @@ snapshots: simple-swizzle@0.2.2: dependencies: is-arrayish: 0.3.2 + optional: true slash@3.0.0: {} @@ -19659,8 +19525,6 @@ snapshots: source-map@0.6.1: {} - sourcemap-codec@1.4.8: {} - space-separated-tokens@2.0.2: {} spawndamnit@2.0.0: @@ -20430,21 +20294,13 @@ snapshots: dependencies: '@fastify/busboy': 2.1.1 - undici@5.28.5: + undici@5.29.0: dependencies: '@fastify/busboy': 2.1.1 undici@6.19.8: {} - unenv@2.0.0-rc.1: - dependencies: - defu: 6.1.4 - mlly: 1.7.4 - ohash: 1.1.4 - pathe: 1.1.2 - ufo: 1.5.4 - - unenv@2.0.0-rc.14: + unenv@2.0.0-rc.15: dependencies: defu: 6.1.4 exsolve: 1.0.4 @@ -20736,53 +20592,24 @@ snapshots: word-wrap@1.2.5: {} - workerd@1.20250124.0: - optionalDependencies: - '@cloudflare/workerd-darwin-64': 1.20250124.0 - '@cloudflare/workerd-darwin-arm64': 1.20250124.0 - '@cloudflare/workerd-linux-64': 1.20250124.0 - '@cloudflare/workerd-linux-arm64': 1.20250124.0 - '@cloudflare/workerd-windows-64': 1.20250124.0 - - workerd@1.20250310.0: - optionalDependencies: - '@cloudflare/workerd-darwin-64': 1.20250310.0 - '@cloudflare/workerd-darwin-arm64': 1.20250310.0 - '@cloudflare/workerd-linux-64': 1.20250310.0 - '@cloudflare/workerd-linux-arm64': 1.20250310.0 - '@cloudflare/workerd-windows-64': 1.20250310.0 - - wrangler@3.107.0(@cloudflare/workers-types@4.20250109.0): - dependencies: - '@cloudflare/kv-asset-handler': 0.3.4 - '@esbuild-plugins/node-globals-polyfill': 0.2.3(esbuild@0.17.19) - '@esbuild-plugins/node-modules-polyfill': 0.2.2(esbuild@0.17.19) - blake3-wasm: 2.1.5 - esbuild: 0.17.19 - miniflare: 3.20250124.1 - path-to-regexp: 6.3.0 - sharp: 0.33.5 - unenv: 2.0.0-rc.1 - workerd: 1.20250124.0 + workerd@1.20250321.0: optionalDependencies: - '@cloudflare/workers-types': 4.20250109.0 - fsevents: 2.3.3 - transitivePeerDependencies: - - bufferutil - - utf-8-validate + '@cloudflare/workerd-darwin-64': 1.20250321.0 + '@cloudflare/workerd-darwin-arm64': 1.20250321.0 + '@cloudflare/workerd-linux-64': 1.20250321.0 + '@cloudflare/workerd-linux-arm64': 1.20250321.0 + '@cloudflare/workerd-windows-64': 1.20250321.0 - wrangler@3.114.1(@cloudflare/workers-types@4.20250109.0): + wrangler@4.7.0(@cloudflare/workers-types@4.20250109.0): dependencies: - '@cloudflare/kv-asset-handler': 0.3.4 - '@cloudflare/unenv-preset': 2.0.2(unenv@2.0.0-rc.14)(workerd@1.20250310.0) - '@esbuild-plugins/node-globals-polyfill': 0.2.3(esbuild@0.17.19) - '@esbuild-plugins/node-modules-polyfill': 0.2.2(esbuild@0.17.19) + '@cloudflare/kv-asset-handler': 0.4.0 + '@cloudflare/unenv-preset': 2.3.1(unenv@2.0.0-rc.15)(workerd@1.20250321.0) blake3-wasm: 2.1.5 - esbuild: 0.17.19 - miniflare: 3.20250310.0 + esbuild: 0.24.2 + miniflare: 4.20250321.1 path-to-regexp: 6.3.0 - unenv: 2.0.0-rc.14 - workerd: 1.20250310.0 + unenv: 2.0.0-rc.15 + workerd: 1.20250321.0 optionalDependencies: '@cloudflare/workers-types': 4.20250109.0 fsevents: 2.3.3 @@ -20791,18 +20618,16 @@ snapshots: - bufferutil - utf-8-validate - wrangler@3.114.1(@cloudflare/workers-types@4.20250224.0): + wrangler@4.7.0(@cloudflare/workers-types@4.20250224.0): dependencies: - '@cloudflare/kv-asset-handler': 0.3.4 - '@cloudflare/unenv-preset': 2.0.2(unenv@2.0.0-rc.14)(workerd@1.20250310.0) - '@esbuild-plugins/node-globals-polyfill': 0.2.3(esbuild@0.17.19) - '@esbuild-plugins/node-modules-polyfill': 0.2.2(esbuild@0.17.19) + '@cloudflare/kv-asset-handler': 0.4.0 + '@cloudflare/unenv-preset': 2.3.1(unenv@2.0.0-rc.15)(workerd@1.20250321.0) blake3-wasm: 2.1.5 - esbuild: 0.17.19 - miniflare: 3.20250310.0 + esbuild: 0.24.2 + miniflare: 4.20250321.1 path-to-regexp: 6.3.0 - unenv: 2.0.0-rc.14 - workerd: 1.20250310.0 + unenv: 2.0.0-rc.15 + workerd: 1.20250321.0 optionalDependencies: '@cloudflare/workers-types': 4.20250224.0 fsevents: 2.3.3 @@ -20811,18 +20636,16 @@ snapshots: - bufferutil - utf-8-validate - wrangler@3.114.1(@cloudflare/workers-types@4.20250321.0): + wrangler@4.7.0(@cloudflare/workers-types@4.20250321.0): dependencies: - '@cloudflare/kv-asset-handler': 0.3.4 - '@cloudflare/unenv-preset': 2.0.2(unenv@2.0.0-rc.14)(workerd@1.20250310.0) - '@esbuild-plugins/node-globals-polyfill': 0.2.3(esbuild@0.17.19) - '@esbuild-plugins/node-modules-polyfill': 0.2.2(esbuild@0.17.19) + '@cloudflare/kv-asset-handler': 0.4.0 + '@cloudflare/unenv-preset': 2.3.1(unenv@2.0.0-rc.15)(workerd@1.20250321.0) blake3-wasm: 2.1.5 - esbuild: 0.17.19 - miniflare: 3.20250310.0 + esbuild: 0.24.2 + miniflare: 4.20250321.1 path-to-regexp: 6.3.0 - unenv: 2.0.0-rc.14 - workerd: 1.20250310.0 + unenv: 2.0.0-rc.15 + workerd: 1.20250321.0 optionalDependencies: '@cloudflare/workers-types': 4.20250321.0 fsevents: 2.3.3 @@ -20903,12 +20726,6 @@ snapshots: mustache: 4.2.0 stacktracey: 2.1.8 - youch@3.3.3: - dependencies: - cookie: 0.5.0 - mustache: 4.2.0 - stacktracey: 2.1.8 - zod-package-json@1.0.3: dependencies: zod: 3.24.1 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 058a86724..0050b028f 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -34,7 +34,7 @@ catalog: typescript-eslint: ^8.7.0 typescript: ^5.7.3 vitest: ^2.1.1 - wrangler: "^3.114.1 || ^4.6.0" + wrangler: "^3.114.3 || ^4.7.0" # e2e tests catalogs: