From 3fa305ed5d0e700790b4c734483db625814fb1e8 Mon Sep 17 00:00:00 2001 From: gronxb Date: Sat, 8 Mar 2025 02:18:47 +0900 Subject: [PATCH 01/23] fix: migrations --- .../worker/migrations/0002_hot-updater_0.13.0.sql | 5 +++++ .../{hot-updater-0.13.0.sql => 0002_hot-updater_0.13.0.sql} | 6 +++++- 2 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 plugins/cloudflare/worker/migrations/0002_hot-updater_0.13.0.sql rename plugins/supabase/supabase/migrations/{hot-updater-0.13.0.sql => 0002_hot-updater_0.13.0.sql} (95%) diff --git a/plugins/cloudflare/worker/migrations/0002_hot-updater_0.13.0.sql b/plugins/cloudflare/worker/migrations/0002_hot-updater_0.13.0.sql new file mode 100644 index 00000000..18aa0ef0 --- /dev/null +++ b/plugins/cloudflare/worker/migrations/0002_hot-updater_0.13.0.sql @@ -0,0 +1,5 @@ +-- Migration number: 0002 2025-03-07T16:25:12.486Z +-- HotUpdater.bundles + +ALTER TABLE bundles +ADD COLUMN stage TEXT NOT NULL DEFAULT 'production'; diff --git a/plugins/supabase/supabase/migrations/hot-updater-0.13.0.sql b/plugins/supabase/supabase/migrations/0002_hot-updater_0.13.0.sql similarity index 95% rename from plugins/supabase/supabase/migrations/hot-updater-0.13.0.sql rename to plugins/supabase/supabase/migrations/0002_hot-updater_0.13.0.sql index 5c6e915e..d52c99df 100644 --- a/plugins/supabase/supabase/migrations/hot-updater-0.13.0.sql +++ b/plugins/supabase/supabase/migrations/0002_hot-updater_0.13.0.sql @@ -82,4 +82,8 @@ BEGIN AND b.platform = app_platform ); END; -$$; \ No newline at end of file +$$; + +-- HotUpdater.bundles +ALTER TABLE bundles +ADD COLUMN stage text NOT NULL DEFAULT 'production'; From 84b96fbf8b3d5d7dab5b474b890f3b40b4850e19 Mon Sep 17 00:00:00 2001 From: gronxb Date: Sat, 8 Mar 2025 02:24:52 +0900 Subject: [PATCH 02/23] fix: message --- .../docs/guide/hot-updater/checkForUpdate.mdx | 4 +-- .../test-utils/setupGetUpdateInfoTestSuite.ts | 35 +++++++++---------- packages/core/src/types.ts | 2 +- plugins/js/src/getUpdateInfo.ts | 4 +-- 4 files changed, 22 insertions(+), 23 deletions(-) diff --git a/docs/docs/guide/hot-updater/checkForUpdate.mdx b/docs/docs/guide/hot-updater/checkForUpdate.mdx index 90d498dd..be5d7806 100644 --- a/docs/docs/guide/hot-updater/checkForUpdate.mdx +++ b/docs/docs/guide/hot-updater/checkForUpdate.mdx @@ -54,7 +54,7 @@ export interface UpdateInfo { id: string; shouldForceUpdate: boolean; fileUrl: string | null; - fileHash: string | null; + message: string | null; status: UpdateStatus; } ``` @@ -67,7 +67,7 @@ export interface UpdateInfo { "shouldForceUpdate": true, "status": "UPDATE", "fileUrl": "https://example.com/bundles/update.bundle", - "fileHash": "abc123", + "message": "This is a test message", } ``` diff --git a/packages/core/src/test-utils/setupGetUpdateInfoTestSuite.ts b/packages/core/src/test-utils/setupGetUpdateInfoTestSuite.ts index aa7e32d9..065fba12 100644 --- a/packages/core/src/test-utils/setupGetUpdateInfoTestSuite.ts +++ b/packages/core/src/test-utils/setupGetUpdateInfoTestSuite.ts @@ -4,16 +4,16 @@ import { NIL_UUID } from "../uuid"; const DEFAULT_BUNDLE = { fileUrl: "http://example.com/bundle.zip", - fileHash: "hash", + message: "hello", platform: "ios", gitCommitHash: null, - message: null, + fileHash: "hash", } as const; const INIT_BUNDLE_ROLLBACK_UPDATE_INFO = { - fileHash: null, fileUrl: null, id: NIL_UUID, + message: null, shouldForceUpdate: true, status: "ROLLBACK", } as const; @@ -46,7 +46,7 @@ export const setupGetUpdateInfoTestSuite = ({ expect(update).toStrictEqual({ id: "00000000-0000-0000-0000-000000000001", fileUrl: "http://example.com/bundle.zip", - fileHash: "hash", + message: "hello", shouldForceUpdate: false, status: "UPDATE", }); @@ -110,7 +110,7 @@ export const setupGetUpdateInfoTestSuite = ({ shouldForceUpdate: false, status: "UPDATE", fileUrl: "http://example.com/bundle.zip", - fileHash: "hash", + message: "hello", }); }); @@ -135,7 +135,7 @@ export const setupGetUpdateInfoTestSuite = ({ shouldForceUpdate: true, status: "UPDATE", fileUrl: "http://example.com/bundle.zip", - fileHash: "hash", + message: "hello", }); }); @@ -160,7 +160,7 @@ export const setupGetUpdateInfoTestSuite = ({ shouldForceUpdate: false, status: "UPDATE", fileUrl: "http://example.com/bundle.zip", - fileHash: "hash", + message: "hello", }); }); @@ -184,7 +184,7 @@ export const setupGetUpdateInfoTestSuite = ({ id: "00000000-0000-0000-0000-000000000005", shouldForceUpdate: false, fileUrl: "http://example.com/bundle.zip", - fileHash: "hash", + message: "hello", status: "UPDATE", }); }); @@ -214,7 +214,7 @@ export const setupGetUpdateInfoTestSuite = ({ }); expect(update).toStrictEqual({ fileUrl: "http://example.com/bundle.zip", - fileHash: "hash", + message: "hello", id: "00000000-0000-0000-0000-000000000001", shouldForceUpdate: false, status: "UPDATE", @@ -281,7 +281,7 @@ export const setupGetUpdateInfoTestSuite = ({ fileUrl: "20240722210327/build.zip", fileHash: "a5cbf59a627759a88d472c502423ff55a4f6cd1aafeed3536f6a5f6e870c2290", - message: "", + message: "hi", targetAppVersion: "1.0", id: "00000000-0000-0000-0000-000000000001", enabled: true, @@ -298,8 +298,7 @@ export const setupGetUpdateInfoTestSuite = ({ shouldForceUpdate: false, status: "UPDATE", fileUrl: "20240722210327/build.zip", - fileHash: - "a5cbf59a627759a88d472c502423ff55a4f6cd1aafeed3536f6a5f6e870c2290", + message: "hi", }); }); @@ -357,7 +356,7 @@ export const setupGetUpdateInfoTestSuite = ({ platform: "ios", }); expect(update).toStrictEqual({ - fileHash: "hash", + message: "hello", fileUrl: "http://example.com/bundle.zip", id: "00000000-0000-0000-0000-000000000001", shouldForceUpdate: true, @@ -397,7 +396,7 @@ export const setupGetUpdateInfoTestSuite = ({ }); expect(update).toStrictEqual({ fileUrl: "http://example.com/bundle.zip", - fileHash: "hash", + message: "hello", id: "00000000-0000-0000-0000-000000000003", shouldForceUpdate: false, status: "UPDATE", @@ -451,7 +450,7 @@ export const setupGetUpdateInfoTestSuite = ({ }); expect(update).toStrictEqual({ fileUrl: "http://example.com/bundle.zip", - fileHash: "hash", + message: "hello", id: "00000000-0000-0000-0000-000000000005", shouldForceUpdate: false, status: "UPDATE", @@ -517,7 +516,7 @@ export const setupGetUpdateInfoTestSuite = ({ expect(update).toStrictEqual({ fileUrl: "http://example.com/bundle.zip", - fileHash: "hash", + message: "hello", id: "00000000-0000-0000-0000-000000000001", shouldForceUpdate: true, // Cause the app to reload status: "ROLLBACK", @@ -597,7 +596,7 @@ export const setupGetUpdateInfoTestSuite = ({ expect(update).toStrictEqual({ id: "0195715d-42db-7475-9204-31819efc2f1d", // 2025-03-07T16:08:12.251Z fileUrl: "http://example.com/bundle.zip", - fileHash: "hash", + message: "hello", shouldForceUpdate: false, status: "UPDATE", }); @@ -759,7 +758,7 @@ export const setupGetUpdateInfoTestSuite = ({ expect(update).toStrictEqual({ id: "0195716c-82f5-7e5e-ac8c-d4fbf5bc7555", // 2025-03-07T16:24:51.701Z fileUrl: "http://example.com/bundle.zip", - fileHash: "hash", + message: "hello", shouldForceUpdate: true, status: "ROLLBACK", }); diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts index 7da65f99..a58a0469 100644 --- a/packages/core/src/types.ts +++ b/packages/core/src/types.ts @@ -66,7 +66,7 @@ export interface UpdateInfo { id: string; shouldForceUpdate: boolean; fileUrl: string | null; - fileHash: string | null; + message: string | null; status: UpdateStatus; } diff --git a/plugins/js/src/getUpdateInfo.ts b/plugins/js/src/getUpdateInfo.ts index 81a96ad8..3b935dbb 100644 --- a/plugins/js/src/getUpdateInfo.ts +++ b/plugins/js/src/getUpdateInfo.ts @@ -8,7 +8,7 @@ import { import { semverSatisfies } from "./semverSatisfies"; const INIT_BUNDLE_ROLLBACK_UPDATE_INFO: UpdateInfo = { - fileHash: null, + message: null, fileUrl: null, id: NIL_UUID, shouldForceUpdate: true, @@ -50,7 +50,7 @@ export const getUpdateInfo = async ( const makeResponse = (bundle: Bundle, status: UpdateStatus) => ({ id: bundle.id, fileUrl: bundle.fileUrl, - fileHash: bundle.fileHash, + message: bundle.message, shouldForceUpdate: status === "ROLLBACK" ? true : bundle.shouldForceUpdate, status, }); From 552b22036525fadcbe74f17aef4017a856a8e50b Mon Sep 17 00:00:00 2001 From: gronxb Date: Sat, 8 Mar 2025 02:34:00 +0900 Subject: [PATCH 03/23] fix: semver --- plugins/postgres/sql/get_update_info.spec.ts | 12 +- plugins/postgres/sql/get_update_info.sql | 5 +- plugins/postgres/sql/semver_satisfies.spec.ts | 26 ---- plugins/postgres/sql/semver_satisfies.sql | 126 ------------------ .../supabase/functions/update-server/index.ts | 13 ++ .../migrations/0002_hot-updater_0.13.0.sql | 8 +- 6 files changed, 31 insertions(+), 159 deletions(-) delete mode 100644 plugins/postgres/sql/semver_satisfies.spec.ts delete mode 100644 plugins/postgres/sql/semver_satisfies.sql diff --git a/plugins/postgres/sql/get_update_info.spec.ts b/plugins/postgres/sql/get_update_info.spec.ts index 790dbcfd..bdd05bff 100644 --- a/plugins/postgres/sql/get_update_info.spec.ts +++ b/plugins/postgres/sql/get_update_info.spec.ts @@ -24,7 +24,7 @@ const createInsertBundleQuery = (bundle: Bundle) => { ${bundle.shouldForceUpdate}, ${bundle.enabled}, ${bundle.gitCommitHash ? `'${bundle.gitCommitHash}'` : "null"}, - ${bundle.message ? `'${bundle.message}'` : "null"} + ${bundle.message ? `'${bundle.message}'` : "null"}, ); `; }; @@ -41,11 +41,17 @@ const createGetUpdateInfo = id: string; should_force_update: boolean; file_url: string; - file_hash: string; + message: string; status: string; }>( ` - SELECT * FROM get_update_info('${platform}', '${appVersion}', '${bundleId}', '${minBundleId ?? NIL_UUID}') + SELECT * FROM get_update_info( + '${platform}', + '${appVersion}', + '${bundleId}', + '${minBundleId ?? NIL_UUID}', + '${bundles.map((b) => b.targetAppVersion).join(",")}' + ) `, ); diff --git a/plugins/postgres/sql/get_update_info.sql b/plugins/postgres/sql/get_update_info.sql index 5c6e915e..eae9b60d 100644 --- a/plugins/postgres/sql/get_update_info.sql +++ b/plugins/postgres/sql/get_update_info.sql @@ -4,7 +4,8 @@ CREATE OR REPLACE FUNCTION get_update_info ( app_platform platforms, app_version text, bundle_id uuid, - min_bundle_id uuid + min_bundle_id uuid, + target_app_version_list text[] ) RETURNS TABLE ( id uuid, @@ -32,7 +33,7 @@ BEGIN AND b.platform = app_platform AND b.id >= bundle_id AND b.id > min_bundle_id - AND semver_satisfies(b.target_app_version, app_version) + AND b.target_app_version IN (SELECT unnest(target_app_version_list)) ORDER BY b.id DESC LIMIT 1 ), diff --git a/plugins/postgres/sql/semver_satisfies.spec.ts b/plugins/postgres/sql/semver_satisfies.spec.ts deleted file mode 100644 index 3bd23ed2..00000000 --- a/plugins/postgres/sql/semver_satisfies.spec.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { PGlite } from "@electric-sql/pglite"; -import { setupSemverSatisfiesTestSuite } from "@hot-updater/core/test-utils"; -import { afterAll, describe } from "vitest"; -import { prepareSql } from "./prepareSql"; - -const db = new PGlite(); -const sql = await prepareSql(); -await db.exec(sql); - -const createSemverSatisfies = - (db: PGlite) => async (targetAppVersion: string, currentVersion: string) => { - const result = await db.query<{ actual: boolean }>(` - SELECT semver_satisfies('${targetAppVersion}', '${currentVersion}') AS actual; - `); - return result.rows[0].actual; - }; - -const semverSatisfies = createSemverSatisfies(db); - -describe("semverSatisfies", () => { - afterAll(async () => { - await db.close(); - }); - - setupSemverSatisfiesTestSuite({ semverSatisfies }); -}); diff --git a/plugins/postgres/sql/semver_satisfies.sql b/plugins/postgres/sql/semver_satisfies.sql deleted file mode 100644 index ce4b3b0d..00000000 --- a/plugins/postgres/sql/semver_satisfies.sql +++ /dev/null @@ -1,126 +0,0 @@ --- HotUpdater.semver_satisfies - -CREATE OR REPLACE FUNCTION semver_satisfies(range_expression TEXT, version TEXT) -RETURNS BOOLEAN AS $$ -DECLARE - version_parts TEXT[]; - version_major INT; - version_minor INT; - version_patch INT; - satisfies BOOLEAN := FALSE; -BEGIN - -- Split the version into major, minor, and patch - version_parts := string_to_array(version, '.'); - version_major := version_parts[1]::INT; - version_minor := version_parts[2]::INT; - version_patch := version_parts[3]::INT; - - -- Parse range expression and evaluate - IF range_expression ~ '^\d+\.\d+\.\d+$' THEN - -- Exact match - satisfies := (range_expression = version); - - ELSIF range_expression = '*' THEN - -- Matches any version - satisfies := TRUE; - - ELSIF range_expression ~ '^\d+\.x\.x$' THEN - -- Matches major.x.x - DECLARE - major_range INT := split_part(range_expression, '.', 1)::INT; - BEGIN - satisfies := (version_major = major_range); - END; - - ELSIF range_expression ~ '^\d+\.\d+\.x$' THEN - -- Matches major.minor.x - DECLARE - major_range INT := split_part(range_expression, '.', 1)::INT; - minor_range INT := split_part(range_expression, '.', 2)::INT; - BEGIN - satisfies := (version_major = major_range AND version_minor = minor_range); - END; - - ELSIF range_expression ~ '^\d+\.\d+$' THEN - -- Matches major.minor - DECLARE - major_range INT := split_part(range_expression, '.', 1)::INT; - minor_range INT := split_part(range_expression, '.', 2)::INT; - BEGIN - satisfies := (version_major = major_range AND version_minor = minor_range); - END; - - ELSIF range_expression ~ '^\d+\.\d+\.\d+ - \d+\.\d+\.\d+$' THEN - -- Matches range e.g., 1.2.3 - 1.2.7 - DECLARE - lower_bound TEXT := split_part(range_expression, ' - ', 1); - upper_bound TEXT := split_part(range_expression, ' - ', 2); - BEGIN - satisfies := (version >= lower_bound AND version <= upper_bound); - END; - - ELSIF range_expression ~ '^>=\d+\.\d+\.\d+ <\d+\.\d+\.\d+$' THEN - -- Matches range with inequalities - DECLARE - lower_bound TEXT := regexp_replace(range_expression, '>=([\d\.]+) <.*', '\1'); - upper_bound TEXT := regexp_replace(range_expression, '.*<([\d\.]+)', '\1'); - BEGIN - satisfies := (version >= lower_bound AND version < upper_bound); - END; - - ELSIF range_expression ~ '^~\d+\.\d+\.\d+$' THEN - -- Matches ~1.2.3 (>=1.2.3 <1.3.0) - DECLARE - lower_bound TEXT := regexp_replace(range_expression, '~', ''); - upper_bound_major INT := split_part(lower_bound, '.', 1)::INT; - upper_bound_minor INT := split_part(lower_bound, '.', 2)::INT + 1; - upper_bound TEXT := upper_bound_major || '.' || upper_bound_minor || '.0'; - BEGIN - satisfies := (version >= lower_bound AND version < upper_bound); - END; - - ELSIF range_expression ~ '^\^\d+\.\d+\.\d+$' THEN - -- Matches ^1.2.3 (>=1.2.3 <2.0.0) - DECLARE - lower_bound TEXT := regexp_replace(range_expression, '\^', ''); - upper_bound_major INT := split_part(lower_bound, '.', 1)::INT + 1; - upper_bound TEXT := upper_bound_major || '.0.0'; - BEGIN - satisfies := (version >= lower_bound AND version < upper_bound); - END; - - -- [Added] 1) Single major version pattern '^(\d+)$' - ELSIF range_expression ~ '^\d+$' THEN - /* - e.g.) "1" is interpreted as (>=1.0.0 <2.0.0) in semver range - "2" would be interpreted as (>=2.0.0 <3.0.0) - */ - DECLARE - major_range INT := range_expression::INT; - lower_bound TEXT := major_range || '.0.0'; - upper_bound TEXT := (major_range + 1) || '.0.0'; - BEGIN - satisfies := (version >= lower_bound AND version < upper_bound); - END; - - -- [Added] 2) major.x pattern '^(\d+)\.x$' - ELSIF range_expression ~ '^\d+\.x$' THEN - /* - e.g.) "2.x" => as long as major=2 matches, any minor and patch is OK - effectively works like (>=2.0.0 <3.0.0) - */ - DECLARE - major_range INT := split_part(range_expression, '.', 1)::INT; - lower_bound TEXT := major_range || '.0.0'; - upper_bound TEXT := (major_range + 1) || '.0.0'; - BEGIN - satisfies := (version >= lower_bound AND version < upper_bound); - END; - - ELSE - RAISE EXCEPTION 'Unsupported range expression: %', range_expression; - END IF; - - RETURN satisfies; -END; -$$ LANGUAGE plpgsql; \ No newline at end of file diff --git a/plugins/supabase/supabase/functions/update-server/index.ts b/plugins/supabase/supabase/functions/update-server/index.ts index 1546d360..326a3fc7 100644 --- a/plugins/supabase/supabase/functions/update-server/index.ts +++ b/plugins/supabase/supabase/functions/update-server/index.ts @@ -1,6 +1,7 @@ import "jsr:@supabase/functions-js/edge-runtime.d.ts"; import camelcaseKeys from "npm:camelcase-keys@9.1.3"; import { createClient } from "jsr:@supabase/supabase-js@2.47.10"; +import { filterCompatibleAppVersions } from "@hot-updater/js"; const NIL_UUID = "00000000-0000-0000-0000-000000000000"; @@ -35,11 +36,23 @@ Deno.serve(async (req) => { ); } + const { data: appVersionList } = await supabase + .from("bundles") + .select("target_app_version") + .eq("platform", appPlatform) + .groupBy("target_app_version"); + + const targetAppVersionList = filterCompatibleAppVersions( + appVersionList?.map((group) => group.target_app_version) ?? [], + appVersion, + ); + const { data, error } = await supabase.rpc("get_update_info", { app_platform: appPlatform, app_version: appVersion, bundle_id: bundleId, min_bundle_id: minBundleId || NIL_UUID, + target_app_version_list: targetAppVersionList, }); if (error) { diff --git a/plugins/supabase/supabase/migrations/0002_hot-updater_0.13.0.sql b/plugins/supabase/supabase/migrations/0002_hot-updater_0.13.0.sql index d52c99df..c24b7849 100644 --- a/plugins/supabase/supabase/migrations/0002_hot-updater_0.13.0.sql +++ b/plugins/supabase/supabase/migrations/0002_hot-updater_0.13.0.sql @@ -4,7 +4,8 @@ CREATE OR REPLACE FUNCTION get_update_info ( app_platform platforms, app_version text, bundle_id uuid, - min_bundle_id uuid + min_bundle_id uuid, + target_app_version_list text[] ) RETURNS TABLE ( id uuid, @@ -32,7 +33,7 @@ BEGIN AND b.platform = app_platform AND b.id >= bundle_id AND b.id > min_bundle_id - AND semver_satisfies(b.target_app_version, app_version) + AND b.target_app_version IN (SELECT unnest(target_app_version_list)) ORDER BY b.id DESC LIMIT 1 ), @@ -87,3 +88,6 @@ $$; -- HotUpdater.bundles ALTER TABLE bundles ADD COLUMN stage text NOT NULL DEFAULT 'production'; + +-- HotUpdater.semver_satisfies +DROP FUNCTION IF EXISTS semver_satisfies; From 60cfb3aa073bf02ba8c45f850519b4992846a59e Mon Sep 17 00:00:00 2001 From: gronxb Date: Sat, 8 Mar 2025 02:47:09 +0900 Subject: [PATCH 04/23] fix: supa --- plugins/cloudflare/worker/src/getUpdateInfo.ts | 12 ++++++------ plugins/postgres/sql/get_update_info.spec.ts | 6 +++--- plugins/postgres/sql/get_update_info.sql | 8 ++++---- .../supabase/migrations/0002_hot-updater_0.13.0.sql | 8 ++++---- 4 files changed, 17 insertions(+), 17 deletions(-) diff --git a/plugins/cloudflare/worker/src/getUpdateInfo.ts b/plugins/cloudflare/worker/src/getUpdateInfo.ts index afc2970c..b0059d39 100644 --- a/plugins/cloudflare/worker/src/getUpdateInfo.ts +++ b/plugins/cloudflare/worker/src/getUpdateInfo.ts @@ -47,7 +47,7 @@ export const getUpdateInfo = async ( b.id, b.should_force_update, b.file_url, - b.file_hash, + b.message, 'UPDATE' AS status FROM bundles b, input WHERE b.enabled = 1 @@ -65,7 +65,7 @@ export const getUpdateInfo = async ( b.id, 1 AS should_force_update, b.file_url, - b.file_hash, + b.message, 'ROLLBACK' AS status FROM bundles b, input WHERE b.enabled = 1 @@ -81,7 +81,7 @@ export const getUpdateInfo = async ( SELECT * FROM rollback_candidate WHERE NOT EXISTS (SELECT 1 FROM update_candidate) ) - SELECT id, should_force_update, file_url, file_hash, status + SELECT id, should_force_update, file_url, message, status FROM final_result, input WHERE id <> bundle_id @@ -91,7 +91,7 @@ export const getUpdateInfo = async ( nil_uuid AS id, 1 AS should_force_update, NULL AS file_url, - NULL AS file_hash, + NULL AS message, 'ROLLBACK' AS status FROM input WHERE (SELECT COUNT(*) FROM final_result) = 0 @@ -104,8 +104,8 @@ export const getUpdateInfo = async ( id: string; should_force_update: number; file_url: string | null; - file_hash: string | null; status: UpdateStatus; + message: string | null; }>(); if (!result) { @@ -116,7 +116,7 @@ export const getUpdateInfo = async ( id: result.id, shouldForceUpdate: Boolean(result.should_force_update), fileUrl: result.file_url, - fileHash: result.file_hash, status: result.status, + message: result.message, } as UpdateInfo; }; diff --git a/plugins/postgres/sql/get_update_info.spec.ts b/plugins/postgres/sql/get_update_info.spec.ts index bdd05bff..86db90bb 100644 --- a/plugins/postgres/sql/get_update_info.spec.ts +++ b/plugins/postgres/sql/get_update_info.spec.ts @@ -24,7 +24,7 @@ const createInsertBundleQuery = (bundle: Bundle) => { ${bundle.shouldForceUpdate}, ${bundle.enabled}, ${bundle.gitCommitHash ? `'${bundle.gitCommitHash}'` : "null"}, - ${bundle.message ? `'${bundle.message}'` : "null"}, + ${bundle.message ? `'${bundle.message}'` : "null"} ); `; }; @@ -50,8 +50,8 @@ const createGetUpdateInfo = '${appVersion}', '${bundleId}', '${minBundleId ?? NIL_UUID}', - '${bundles.map((b) => b.targetAppVersion).join(",")}' - ) + ARRAY[${bundles.length > 0 ? [...new Set(bundles.map((b) => `'${b.targetAppVersion}'`))].join(",") : "''"}]::text[] + ); `, ); diff --git a/plugins/postgres/sql/get_update_info.sql b/plugins/postgres/sql/get_update_info.sql index eae9b60d..d53ba577 100644 --- a/plugins/postgres/sql/get_update_info.sql +++ b/plugins/postgres/sql/get_update_info.sql @@ -11,7 +11,7 @@ RETURNS TABLE ( id uuid, should_force_update boolean, file_url text, - file_hash text, + message text, status text ) LANGUAGE plpgsql @@ -26,7 +26,7 @@ BEGIN b.id, b.should_force_update, b.file_url, - b.file_hash, + b.message, 'UPDATE' AS status FROM bundles b WHERE b.enabled = TRUE @@ -42,7 +42,7 @@ BEGIN b.id, TRUE AS should_force_update, b.file_url, - b.file_hash, + b.message, 'ROLLBACK' AS status FROM bundles b WHERE b.enabled = TRUE @@ -70,7 +70,7 @@ BEGIN NIL_UUID AS id, TRUE AS should_force_update, NULL AS file_url, - NULL AS file_hash, + NULL AS message, 'ROLLBACK' AS status WHERE (SELECT COUNT(*) FROM final_result) = 0 AND bundle_id != NIL_UUID diff --git a/plugins/supabase/supabase/migrations/0002_hot-updater_0.13.0.sql b/plugins/supabase/supabase/migrations/0002_hot-updater_0.13.0.sql index c24b7849..064979ff 100644 --- a/plugins/supabase/supabase/migrations/0002_hot-updater_0.13.0.sql +++ b/plugins/supabase/supabase/migrations/0002_hot-updater_0.13.0.sql @@ -11,7 +11,7 @@ RETURNS TABLE ( id uuid, should_force_update boolean, file_url text, - file_hash text, + message text, status text ) LANGUAGE plpgsql @@ -26,7 +26,7 @@ BEGIN b.id, b.should_force_update, b.file_url, - b.file_hash, + b.message, 'UPDATE' AS status FROM bundles b WHERE b.enabled = TRUE @@ -42,7 +42,7 @@ BEGIN b.id, TRUE AS should_force_update, b.file_url, - b.file_hash, + b.message, 'ROLLBACK' AS status FROM bundles b WHERE b.enabled = TRUE @@ -70,7 +70,7 @@ BEGIN NIL_UUID AS id, TRUE AS should_force_update, NULL AS file_url, - NULL AS file_hash, + NULL AS message, 'ROLLBACK' AS status WHERE (SELECT COUNT(*) FROM final_result) = 0 AND bundle_id != NIL_UUID From 34b015fb07b9500eeb01814cc98e2441043da8da Mon Sep 17 00:00:00 2001 From: gronxb Date: Sat, 8 Mar 2025 02:54:00 +0900 Subject: [PATCH 05/23] fix: supabase --- plugins/postgres/package.json | 1 + plugins/postgres/sql/get_update_info.spec.ts | 18 ++++++++++++++++-- pnpm-lock.yaml | 3 +++ 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/plugins/postgres/package.json b/plugins/postgres/package.json index f53073c5..86f08d6e 100644 --- a/plugins/postgres/package.json +++ b/plugins/postgres/package.json @@ -40,6 +40,7 @@ }, "devDependencies": { "@electric-sql/pglite": "^0.2.15", + "@hot-updater/js": "0.12.4", "@types/pg": "^8.11.10", "camelcase-keys": "^9.1.3" } diff --git a/plugins/postgres/sql/get_update_info.spec.ts b/plugins/postgres/sql/get_update_info.spec.ts index 86db90bb..8c40b92f 100644 --- a/plugins/postgres/sql/get_update_info.spec.ts +++ b/plugins/postgres/sql/get_update_info.spec.ts @@ -6,6 +6,7 @@ import { type UpdateInfo, } from "@hot-updater/core"; import { setupGetUpdateInfoTestSuite } from "@hot-updater/core/test-utils"; +import { filterCompatibleAppVersions } from "@hot-updater/js"; import camelcaseKeys from "camelcase-keys"; import { afterAll, beforeEach, describe } from "vitest"; import { prepareSql } from "./prepareSql"; @@ -37,6 +38,19 @@ const createGetUpdateInfo = ): Promise => { await db.exec(createInsertBundleQuerys(bundles)); + const { rows: appVersionList } = await db.query<{ + target_app_version: string; + }>( + ` + SELECT target_app_version FROM bundles WHERE platform = '${platform}' GROUP BY target_app_version + `, + ); + + const targetAppVersionList = filterCompatibleAppVersions( + appVersionList?.map((group) => group.target_app_version) ?? [], + appVersion, + ); + const result = await db.query<{ id: string; should_force_update: boolean; @@ -50,9 +64,9 @@ const createGetUpdateInfo = '${appVersion}', '${bundleId}', '${minBundleId ?? NIL_UUID}', - ARRAY[${bundles.length > 0 ? [...new Set(bundles.map((b) => `'${b.targetAppVersion}'`))].join(",") : "''"}]::text[] + ARRAY[${targetAppVersionList.map((v) => `'${v}'`).join(",")}]::text[] ); - `, + `, ); return result.rows[0] diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4aa1fd71..a8520855 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -932,6 +932,9 @@ importers: '@electric-sql/pglite': specifier: ^0.2.15 version: 0.2.15 + '@hot-updater/js': + specifier: workspace:* + version: link:../js '@types/pg': specifier: ^8.11.10 version: 8.11.10 From 79e05acac9973d4b30c7d9083ef6ee0f47febeaf Mon Sep 17 00:00:00 2001 From: gronxb Date: Sat, 8 Mar 2025 03:20:02 +0900 Subject: [PATCH 06/23] chore: bump --- package.json | 13 +- plugins/cloudflare/package.json | 2 +- plugins/cloudflare/vitest.config.mts | 7 +- plugins/firebase/src/firebaseDatabase.spec.ts | 18 +- pnpm-lock.yaml | 2022 +++++++++++++---- vitest.workspace.mts | 4 +- 6 files changed, 1642 insertions(+), 424 deletions(-) diff --git a/package.json b/package.json index 13b1d157..78251217 100644 --- a/package.json +++ b/package.json @@ -19,13 +19,14 @@ }, "devDependencies": { "@biomejs/biome": "^1.9.4", - "@nx/js": "^20.3.0", - "@rslib/core": "^0.4.0", - "nx": "20.3.0", + "@cloudflare/vitest-pool-workers": "^0.7.7", + "@nx/js": "^20.5.0", + "@rslib/core": "^0.5.3", + "nx": "20.5.0", "rimraf": "^5.0.7", - "tsup": "^8.3.6", - "typescript": "^5.7.2", - "vitest": "^2.1.8" + "tsup": "^8.4.0", + "typescript": "^5.8.2", + "vitest": "^3.0.8" }, "pnpm": { "overrides": { diff --git a/plugins/cloudflare/package.json b/plugins/cloudflare/package.json index b8247c2e..ea71e51a 100644 --- a/plugins/cloudflare/package.json +++ b/plugins/cloudflare/package.json @@ -51,7 +51,7 @@ "cloudflare": "4.1.0" }, "devDependencies": { - "@cloudflare/vitest-pool-workers": "^0.6.4", + "@cloudflare/vitest-pool-workers": "^0.7.7", "@cloudflare/workers-types": "^4.20250124.3", "@types/node": "^22.13.0", "@types/semver": "^7.5.8", diff --git a/plugins/cloudflare/vitest.config.mts b/plugins/cloudflare/vitest.config.mts index e7243a5e..8b5d157a 100644 --- a/plugins/cloudflare/vitest.config.mts +++ b/plugins/cloudflare/vitest.config.mts @@ -1,11 +1,14 @@ +import path from "path"; import { defineWorkersConfig } from "@cloudflare/vitest-pool-workers/config"; export default defineWorkersConfig({ test: { - globalSetup: "./vitest.global-setup.mts", + globalSetup: path.resolve(__dirname, "vitest.global-setup.mts"), poolOptions: { workers: { - wrangler: { configPath: "./worker/wrangler.test.json" }, + wrangler: { + configPath: path.resolve(__dirname, "worker", "wrangler.test.json"), + }, }, }, }, diff --git a/plugins/firebase/src/firebaseDatabase.spec.ts b/plugins/firebase/src/firebaseDatabase.spec.ts index 67d3e924..e70bf3a9 100644 --- a/plugins/firebase/src/firebaseDatabase.spec.ts +++ b/plugins/firebase/src/firebaseDatabase.spec.ts @@ -138,7 +138,6 @@ describe("Firebase Database Plugin", () => { expect(getApp).not.toHaveBeenCalled(); expect(app).toBe(mockExistingApp); }); - describe("commitBundle", () => { it("should do nothing if no IDs are changed", async () => { await databasePlugin.commitBundle(); @@ -163,15 +162,24 @@ describe("Firebase Database Plugin", () => { vi.clearAllMocks(); + const mockDocRef = "document-ref"; + await databasePlugin.commitBundle(); expect(doc).toHaveBeenCalledWith(undefined, "test-bundle-id"); expect(setDoc).toHaveBeenCalledWith( - undefined, - expect.objectContaining({ - id: "test-bundle-id", + mockDocRef, + { enabled: false, - }), + file_hash: "test-file-hash", + file_url: "test-file-url", + git_commit_hash: "test-git-hash", + id: "test-bundle-id", + message: "test-message", + platform: "android", + should_force_update: false, + target_app_version: "1.0.0", + }, { merge: true }, ); expect(mockHooks.onDatabaseUpdated).toHaveBeenCalled(); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a8520855..b085ac32 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -26,27 +26,30 @@ importers: '@biomejs/biome': specifier: ^1.9.4 version: 1.9.4 + '@cloudflare/vitest-pool-workers': + specifier: ^0.7.7 + version: 0.7.7(@vitest/runner@3.0.8)(@vitest/snapshot@3.0.8)(vitest@3.0.8(@types/debug@4.1.12)(@types/node@22.13.5)(jiti@2.4.2)(jsdom@25.0.1)(msw@2.7.0(@types/node@22.13.5)(typescript@5.8.2))(sass-embedded@1.83.0)(terser@5.31.0)(yaml@2.6.1)) '@nx/js': - specifier: ^20.3.0 - version: 20.3.0(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.7.42(@swc/helpers@0.5.15))(@swc/types@0.1.13)(typescript@5.7.2))(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(nx@20.3.0(@swc-node/register@1.10.9(@swc/core@1.7.42(@swc/helpers@0.5.15))(@swc/types@0.1.13)(typescript@5.7.2))(@swc/core@1.7.42(@swc/helpers@0.5.15)))(typescript@5.7.2) + specifier: ^20.5.0 + version: 20.5.0(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.7.42(@swc/helpers@0.5.15))(@swc/types@0.1.13)(typescript@5.8.2))(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(nx@20.5.0(@swc-node/register@1.10.9(@swc/core@1.7.42(@swc/helpers@0.5.15))(@swc/types@0.1.13)(typescript@5.8.2))(@swc/core@1.7.42(@swc/helpers@0.5.15)))(typescript@5.8.2) '@rslib/core': - specifier: ^0.4.0 - version: 0.4.0(typescript@5.7.2) + specifier: ^0.5.3 + version: 0.5.3(typescript@5.8.2) nx: - specifier: 20.3.0 - version: 20.3.0(@swc-node/register@1.10.9(@swc/core@1.7.42(@swc/helpers@0.5.15))(@swc/types@0.1.13)(typescript@5.7.2))(@swc/core@1.7.42(@swc/helpers@0.5.15)) + specifier: 20.5.0 + version: 20.5.0(@swc-node/register@1.10.9(@swc/core@1.7.42(@swc/helpers@0.5.15))(@swc/types@0.1.13)(typescript@5.8.2))(@swc/core@1.7.42(@swc/helpers@0.5.15)) rimraf: specifier: ^5.0.7 version: 5.0.7 tsup: - specifier: ^8.3.6 - version: 8.3.6(@swc/core@1.7.42(@swc/helpers@0.5.15))(jiti@1.21.6)(postcss@8.5.3)(typescript@5.7.2)(yaml@2.6.1) + specifier: ^8.4.0 + version: 8.4.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(jiti@2.4.2)(postcss@8.5.3)(typescript@5.8.2)(yaml@2.6.1) typescript: - specifier: ^5.7.2 - version: 5.7.2 + specifier: ^5.8.2 + version: 5.8.2 vitest: - specifier: ^2.1.8 - version: 2.1.8(@types/node@22.13.5)(jsdom@25.0.1)(msw@2.7.0(@types/node@22.13.5)(typescript@5.7.2))(sass-embedded@1.83.0)(terser@5.31.0) + specifier: ^3.0.8 + version: 3.0.8(@types/debug@4.1.12)(@types/node@22.13.5)(jiti@2.4.2)(jsdom@25.0.1)(msw@2.7.0(@types/node@22.13.5)(typescript@5.8.2))(sass-embedded@1.83.0)(terser@5.31.0)(yaml@2.6.1) docs: devDependencies: @@ -58,7 +61,7 @@ importers: version: 18.19.33 rspress: specifier: ^1.40.0 - version: 1.40.0(webpack@5.91.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.24.2)) + version: 1.40.0(webpack@5.91.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.25.0)) examples/v0.71.19: dependencies: @@ -98,7 +101,7 @@ importers: version: 10.2.5(encoding@0.1.13) '@react-native-community/eslint-config': specifier: ^3.2.0 - version: 3.2.0(eslint@8.57.0)(jest@29.7.0(@types/node@22.13.1)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@4.8.4)))(prettier@2.8.8)(typescript@4.8.4) + version: 3.2.0(eslint@8.57.0)(jest@29.7.0(@types/node@22.13.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@4.8.4)))(prettier@2.8.8)(typescript@4.8.4) '@rnx-kit/metro-config': specifier: ^2.0.1 version: 2.0.1(@react-native/metro-config@0.77.0(@babel/core@7.26.0)(@babel/preset-env@7.23.2(@babel/core@7.26.0)))(react-native@0.71.19(@babel/core@7.26.0)(@babel/preset-env@7.23.2(@babel/core@7.26.0))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) @@ -134,7 +137,7 @@ importers: version: 2.2.4 jest: specifier: ^29.2.1 - version: 29.7.0(@types/node@22.13.1)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@4.8.4)) + version: 29.7.0(@types/node@22.13.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@4.8.4)) metro-react-native-babel-preset: specifier: 0.73.10 version: 0.73.10(@babel/core@7.26.0) @@ -177,7 +180,7 @@ importers: version: 7.26.0 '@callstack/repack': specifier: ^4.0.0 - version: 4.0.0(@react-native-community/cli-debugger-ui@15.0.1)(@react-native-community/cli-server-api@15.0.1)(@react-native-community/cli-types@15.0.1)(@react-native-community/cli@15.0.1(typescript@5.7.2))(encoding@0.1.13)(react-native@0.74.1(@babel/core@7.26.0)(@babel/preset-env@7.23.2(@babel/core@7.26.0))(@types/react@18.3.11)(encoding@0.1.13)(react@18.2.0))(type-fest@4.35.0)(webpack-dev-server@5.0.4(webpack@5.91.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.24.2)))(webpack@5.91.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.24.2)) + version: 4.0.0(@react-native-community/cli-debugger-ui@15.0.1)(@react-native-community/cli-server-api@15.0.1)(@react-native-community/cli-types@15.0.1)(@react-native-community/cli@15.0.1(typescript@5.8.2))(encoding@0.1.13)(react-native@0.74.1(@babel/core@7.26.0)(@babel/preset-env@7.23.2(@babel/core@7.26.0))(@types/react@18.3.11)(encoding@0.1.13)(react@18.2.0))(type-fest@4.35.0)(webpack-dev-server@5.0.4(webpack@5.91.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.25.0)))(webpack@5.91.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.25.0)) '@hot-updater/aws': specifier: workspace:* version: link:../../plugins/aws @@ -195,7 +198,7 @@ importers: version: 0.74.83(@babel/core@7.26.0)(@babel/preset-env@7.23.2(@babel/core@7.26.0)) '@react-native/eslint-config': specifier: 0.74.83 - version: 0.74.83(eslint@8.57.0)(jest@29.7.0(@types/node@22.13.5)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.7.2)))(prettier@2.8.8)(typescript@5.7.2) + version: 0.74.83(eslint@8.57.0)(jest@29.7.0(@types/node@22.13.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.8.2)))(prettier@2.8.8)(typescript@5.8.2) '@react-native/gradle-plugin': specifier: 0.74.83 version: 0.74.83 @@ -222,7 +225,7 @@ importers: version: 29.7.0(@babel/core@7.26.0) babel-loader: specifier: ^9.1.3 - version: 9.1.3(@babel/core@7.26.0)(webpack@5.91.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.24.2)) + version: 9.1.3(@babel/core@7.26.0)(webpack@5.91.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.25.0)) dotenv: specifier: ^16.4.5 version: 16.4.5 @@ -237,7 +240,7 @@ importers: version: 2.2.4 jest: specifier: ^29.6.3 - version: 29.7.0(@types/node@22.13.5)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.7.2)) + version: 29.7.0(@types/node@22.13.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.8.2)) prettier: specifier: 2.8.8 version: 2.8.8 @@ -249,10 +252,10 @@ importers: version: 18.2.0(react@18.2.0) terser-webpack-plugin: specifier: ^5.3.10 - version: 5.3.10(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.24.2)(webpack@5.91.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.24.2)) + version: 5.3.10(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.25.0)(webpack@5.91.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.25.0)) webpack: specifier: ^5.91.0 - version: 5.91.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.24.2) + version: 5.91.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.25.0) examples/v0.76.1-new-arch: dependencies: @@ -298,7 +301,7 @@ importers: version: 0.76.2(@babel/preset-env@7.26.0(@babel/core@7.26.0)) '@react-native/eslint-config': specifier: 0.76.1 - version: 0.76.1(eslint@8.57.0)(jest@29.7.0(@types/node@22.13.5)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.0.4)))(prettier@2.8.8)(typescript@5.0.4) + version: 0.76.1(eslint@8.57.0)(jest@29.7.0(@types/node@22.13.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.0.4)))(prettier@2.8.8)(typescript@5.0.4) '@react-native/gradle-plugin': specifier: 0.76.1 version: 0.76.1 @@ -337,7 +340,7 @@ importers: version: 2.2.4 jest: specifier: ^29.6.3 - version: 29.7.0(@types/node@22.13.5)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.0.4)) + version: 29.7.0(@types/node@22.13.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.0.4)) prettier: specifier: 2.8.8 version: 2.8.8 @@ -398,7 +401,7 @@ importers: version: 0.77.0(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0)) '@react-native/eslint-config': specifier: 0.77.0 - version: 0.77.0(eslint@8.57.0)(jest@29.7.0(@types/node@22.13.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.0)(typescript@5.0.4)))(prettier@2.8.8)(typescript@5.0.4) + version: 0.77.0(eslint@8.57.0)(jest@29.7.0(@types/node@22.13.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.0)(typescript@5.0.4)))(prettier@2.8.8)(typescript@5.0.4) '@react-native/gradle-plugin': specifier: ^0.77.0 version: 0.77.0 @@ -437,7 +440,7 @@ importers: version: link:../../packages/hot-updater jest: specifier: ^29.6.3 - version: 29.7.0(@types/node@22.13.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.0)(typescript@5.0.4)) + version: 29.7.0(@types/node@22.13.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.0)(typescript@5.0.4)) prettier: specifier: 2.8.8 version: 2.8.8 @@ -474,7 +477,7 @@ importers: version: 0.4.1(hono@4.6.3)(valibot@0.42.1(typescript@5.6.3)) '@hono/vite-dev-server': specifier: ^0.18.1 - version: 0.18.1(hono@4.6.3)(miniflare@3.20250124.0)(wrangler@3.105.1(@cloudflare/workers-types@4.20250124.3)) + version: 0.18.1(hono@4.6.3)(miniflare@3.20250224.0)(wrangler@3.114.0) '@hot-updater/mock': specifier: workspace:* version: link:../../plugins/mock @@ -555,13 +558,13 @@ importers: version: 0.42.1(typescript@5.6.3) vite: specifier: ^6.1.0 - version: 6.1.1(@types/node@22.8.7)(jiti@1.21.6)(sass-embedded@1.83.0)(terser@5.31.0)(yaml@2.6.1) + version: 6.1.1(@types/node@22.8.7)(jiti@2.4.2)(sass-embedded@1.83.0)(terser@5.31.0)(yaml@2.6.1) vite-plugin-solid: specifier: ^2.11.1 - version: 2.11.2(solid-js@1.9.3)(vite@6.1.1(@types/node@22.8.7)(jiti@1.21.6)(sass-embedded@1.83.0)(terser@5.31.0)(yaml@2.6.1)) + version: 2.11.2(solid-js@1.9.3)(vite@6.1.1(@types/node@22.8.7)(jiti@2.4.2)(sass-embedded@1.83.0)(terser@5.31.0)(yaml@2.6.1)) vite-tsconfig-paths: specifier: ^5.1.4 - version: 5.1.4(typescript@5.6.3)(vite@6.1.1(@types/node@22.8.7)(jiti@1.21.6)(sass-embedded@1.83.0)(terser@5.31.0)(yaml@2.6.1)) + version: 5.1.4(typescript@5.6.3)(vite@6.1.1(@types/node@22.8.7)(jiti@2.4.2)(sass-embedded@1.83.0)(terser@5.31.0)(yaml@2.6.1)) packages/core: devDependencies: @@ -597,10 +600,10 @@ importers: version: 11.1.0 cosmiconfig: specifier: ^9.0.0 - version: 9.0.0(typescript@5.7.2) + version: 9.0.0(typescript@5.8.2) cosmiconfig-typescript-loader: specifier: ^5.0.0 - version: 5.0.0(@types/node@22.9.0)(cosmiconfig@9.0.0(typescript@5.7.2))(typescript@5.7.2) + version: 5.0.0(@types/node@22.9.0)(cosmiconfig@9.0.0(typescript@5.8.2))(typescript@5.8.2) devDependencies: '@babel/core': specifier: ^7.26.0 @@ -634,7 +637,7 @@ importers: version: 3.4.38 '@types/cosmiconfig': specifier: ^6.0.0 - version: 6.0.0(typescript@5.7.2) + version: 6.0.0(typescript@5.8.2) '@types/node': specifier: ^22.9.0 version: 22.9.0 @@ -692,7 +695,7 @@ importers: devDependencies: '@react-native-community/cli': specifier: 15.0.1 - version: 15.0.1(typescript@5.7.2) + version: 15.0.1(typescript@5.8.2) '@types/react': specifier: ^18.2.44 version: 18.3.11 @@ -707,7 +710,7 @@ importers: version: 0.76.2(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@react-native-community/cli-server-api@15.0.1)(@types/react@18.3.11)(encoding@0.1.13)(react@18.3.1) react-native-builder-bob: specifier: ^0.33.1 - version: 0.33.1(typescript@5.7.2) + version: 0.33.1(typescript@5.8.2) plugins/aws: dependencies: @@ -780,8 +783,8 @@ importers: version: 4.1.0(encoding@0.1.13) devDependencies: '@cloudflare/vitest-pool-workers': - specifier: ^0.6.4 - version: 0.6.7(@cloudflare/workers-types@4.20250124.3)(@vitest/runner@3.0.6)(@vitest/snapshot@3.0.6)(vitest@2.1.8(@types/node@22.13.0)(jsdom@25.0.1)(msw@2.7.0(@types/node@22.13.0)(typescript@5.7.2))(sass-embedded@1.83.0)(terser@5.31.0)) + specifier: ^0.7.7 + version: 0.7.7(@cloudflare/workers-types@4.20250124.3)(@vitest/runner@3.0.8)(@vitest/snapshot@3.0.8)(vitest@2.1.8(@types/node@22.13.0)(jsdom@25.0.1)(msw@2.7.0(@types/node@22.13.0)(typescript@5.7.2))(sass-embedded@1.83.0)(terser@5.31.0)) '@cloudflare/workers-types': specifier: ^4.20250124.3 version: 4.20250124.3 @@ -845,7 +848,7 @@ importers: version: 4.0.4 vitest: specifier: 2.1.8 - version: 2.1.8(@types/node@22.13.5)(jsdom@25.0.1)(msw@2.7.0(@types/node@22.13.5)(typescript@5.7.2))(sass-embedded@1.83.0)(terser@5.31.0) + version: 2.1.8(@types/node@22.13.5)(jsdom@25.0.1)(msw@2.7.0(@types/node@22.13.5)(typescript@5.8.2))(sass-embedded@1.83.0)(terser@5.31.0) plugins/js: dependencies: @@ -890,7 +893,7 @@ importers: devDependencies: vitest: specifier: 2.1.8 - version: 2.1.8(@types/node@22.13.5)(jsdom@25.0.1)(msw@2.7.0(@types/node@22.13.5)(typescript@5.7.2))(sass-embedded@1.83.0)(terser@5.31.0) + version: 2.1.8(@types/node@22.13.5)(jsdom@25.0.1)(msw@2.7.0(@types/node@22.13.5)(typescript@5.8.2))(sass-embedded@1.83.0)(terser@5.31.0) plugins/plugin-core: dependencies: @@ -899,10 +902,10 @@ importers: version: link:../../packages/core cosmiconfig: specifier: ^9.0.0 - version: 9.0.0(typescript@5.7.2) + version: 9.0.0(typescript@5.8.2) cosmiconfig-typescript-loader: specifier: ^5.0.0 - version: 5.0.0(@types/node@22.7.5)(cosmiconfig@9.0.0(typescript@5.7.2))(typescript@5.7.2) + version: 5.0.0(@types/node@22.7.5)(cosmiconfig@9.0.0(typescript@5.8.2))(typescript@5.8.2) workspace-tools: specifier: ^0.36.4 version: 0.36.4 @@ -959,13 +962,13 @@ importers: version: 7.5.8 msw: specifier: ^2.7.0 - version: 2.7.0(@types/node@20.16.10)(typescript@5.7.2) + version: 2.7.0(@types/node@20.16.10)(typescript@5.8.2) semver: specifier: ^7.6.3 version: 7.6.3 vitest: specifier: ^3.0.6 - version: 3.0.6(@types/debug@4.1.12)(@types/node@20.16.10)(jiti@1.21.6)(jsdom@25.0.1)(msw@2.7.0(@types/node@20.16.10)(typescript@5.7.2))(sass-embedded@1.83.0)(terser@5.31.0)(yaml@2.6.1) + version: 3.0.6(@types/debug@4.1.12)(@types/node@20.16.10)(jiti@2.4.2)(jsdom@25.0.1)(msw@2.7.0(@types/node@20.16.10)(typescript@5.8.2))(sass-embedded@1.83.0)(terser@5.31.0)(yaml@2.6.1) plugins/supabase: dependencies: @@ -1002,6 +1005,64 @@ packages: resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} engines: {node: '>=6.0.0'} + '@ast-grep/napi-darwin-arm64@0.35.0': + resolution: {integrity: sha512-T+MN4Oinc+sXjXCIHzfxDDWY7r2pKgPxM6zVeVlkMTrJV2mJtyKYBIS+CABhRM6kflps2T2I6l4DGaKV/8Ym9w==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@ast-grep/napi-darwin-x64@0.35.0': + resolution: {integrity: sha512-pEYiN6JI1HY2uWhMYJ9+3yIMyVYKuYdFzeD+dL7odA3qzK0o9N9AM3/NOt4ynU2EhufaWCJr0P5NoQ636qN6MQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@ast-grep/napi-linux-arm64-gnu@0.35.0': + resolution: {integrity: sha512-NBuzQngABGKz7lhG08IQb+7nPqUx81Ol37xmS3ZhVSdSgM0mtp93rCbgFTkJcAFE8IMfCHQSg7G4g0Iotz4ABQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@ast-grep/napi-linux-arm64-musl@0.35.0': + resolution: {integrity: sha512-1EcvHPwyWpCL/96LuItBYGfeI5FaMTRvL+dHbO/hL5q1npqbb5qn+ppJwtNOjTPz8tayvgggxVk9T4C2O7taYA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@ast-grep/napi-linux-x64-gnu@0.35.0': + resolution: {integrity: sha512-FDzNdlqmQnsiWXhnLxusw5AOfEcEM+5xtmrnAf3SBRFr86JyWD9qsynnFYC2pnP9hlMfifNH2TTmMpyGJW49Xw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@ast-grep/napi-linux-x64-musl@0.35.0': + resolution: {integrity: sha512-wlmndjfBafT8u5p4DBnoRQyoCSGNuVSz7rT3TqhvlHcPzUouRWMn95epU9B1LNLyjXvr9xHeRjSktyCN28w57Q==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@ast-grep/napi-win32-arm64-msvc@0.35.0': + resolution: {integrity: sha512-gkhJeYc4rrZLX2icLxalPikTLMR57DuIYLwLr9g+StHYXIsGHrbfrE6Nnbdd8Izfs34ArFCrcwdaMrGlvOPSeg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@ast-grep/napi-win32-ia32-msvc@0.35.0': + resolution: {integrity: sha512-OdUuRa3chHCZ65y+qALfkUjz0W0Eg21YZ9TyPquV5why07M6HAK38mmYGzLxFH6294SvRQhs+FA/rAfbKeH0jA==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + + '@ast-grep/napi-win32-x64-msvc@0.35.0': + resolution: {integrity: sha512-pcQRUHqbroTN1oQ56V982a7IZTUUySQYWa2KEyksiifHGuBuitlzcyzFGjT96ThcqD9XW0UVJMvpoF2Qjh006Q==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@ast-grep/napi@0.35.0': + resolution: {integrity: sha512-3ucaaSxV6fxXoqHrE/rxAvP1THnDdY5jNzGlnvx+JvnY9C/dSRKc0jlRMRz59N3El572+/yNRUUpAV1T9aBJug==} + engines: {node: '>= 10'} + '@aws-crypto/crc32@5.2.0': resolution: {integrity: sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==} engines: {node: '>=16.0.0'} @@ -2672,12 +2733,21 @@ packages: resolution: {integrity: sha512-YLPHc8yASwjNkmcDMQMY35yiWjoKAKnhUbPRszBRS0YgH+IXtsMp61j+yTcnCE3oO2DgP0U3iejLC8FTtKDC8Q==} engines: {node: '>=16.13'} - '@cloudflare/vitest-pool-workers@0.6.7': - resolution: {integrity: sha512-4tQdPmFTHn/K+sBtrDXqBEJ9dhzIC7sV56bc8MYBV3d0oQkBqiofY+iF4M9al3Oic259iIGl1h1/rt98zkus8w==} + '@cloudflare/unenv-preset@2.0.0': + resolution: {integrity: sha512-Ar4HixFYP8e990JPACno3nqe10QsjS3yVWr48z5Vop5LygdnvPa5cfNHxGoQSPavvg5aaGnF0VAWc3JJ1tBKuQ==} peerDependencies: - '@vitest/runner': 2.0.x - 2.1.x - '@vitest/snapshot': 2.0.x - 2.1.x - vitest: 2.0.x - 2.1.x + unenv: 2.0.0-rc.8 + workerd: ^1.20250124.0 + peerDependenciesMeta: + workerd: + optional: true + + '@cloudflare/vitest-pool-workers@0.7.7': + resolution: {integrity: sha512-/6R2tEbQWZyH4y0DdLkIejHHItr9fTIxo3f6IovKHCHecg3ZQ1DM3oPlaAevNOjj7Ya47/0y+AFAyGWEFIOmqQ==} + peerDependencies: + '@vitest/runner': 2.0.x - 3.0.x + '@vitest/snapshot': 2.0.x - 3.0.x + vitest: 2.0.x - 3.0.x '@cloudflare/workerd-darwin-64@1.20250124.0': resolution: {integrity: sha512-P5Z5KfVAuoCidIc0o2JPQZFLNTXDjtxN8vhtreCUr6V+xF5pqDNwQqeBDnDDF0gcszFQOYi2OZAB9e1MwssTwA==} @@ -2685,30 +2755,60 @@ packages: cpu: [x64] os: [darwin] + '@cloudflare/workerd-darwin-64@1.20250224.0': + resolution: {integrity: sha512-sBbaAF2vgQ9+T50ik1ihekdepStBp0w4fvNghBfXIw1iWqfNWnypcjDMmi/7JhXJt2uBxBrSlXCvE5H7Gz+kbw==} + engines: {node: '>=16'} + cpu: [x64] + os: [darwin] + '@cloudflare/workerd-darwin-arm64@1.20250124.0': resolution: {integrity: sha512-lVxf6qIfmJ5rS6rmGKV7lt6ApY6nhD4kAQTK4vKYm/npk2sXod6LASIY0U4WBCwy4N+S75a8hP2QtmQf+KV3Iw==} engines: {node: '>=16'} cpu: [arm64] os: [darwin] + '@cloudflare/workerd-darwin-arm64@1.20250224.0': + resolution: {integrity: sha512-naetGefgjAaDbEacpwaVruJXNwxmRRL7v3ppStgEiqAlPmTpQ/Edjn2SQ284QwOw3MvaVPHrWcaTBupUpkqCyg==} + 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.20250224.0': + resolution: {integrity: sha512-BtUvuj91rgB06TUAkLYvedghUA8nDFiLcY3GC7MXmWhxCxGmY4PWkrKq/+uHjrhwknCcXrE4aFsM28ja8EcAGA==} + engines: {node: '>=16'} + cpu: [x64] + os: [linux] + '@cloudflare/workerd-linux-arm64@1.20250124.0': resolution: {integrity: sha512-CHSYnutDfXgUWL9WcP0GbzIb5OyC9RZVCJGhKbDTQy6/uH7AivNcLzXtOhNdqetKjERmOxUbL9Us7vcMQLztog==} engines: {node: '>=16'} cpu: [arm64] os: [linux] + '@cloudflare/workerd-linux-arm64@1.20250224.0': + resolution: {integrity: sha512-Gr4MPNi+BvwjfWF7clx0dJY2Vm4suaW5FtAQwrfqJmPtN5zb/BP16VZxxnFRMy377dP7ycoxpKfZZ6Q8RVGvbA==} + 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.20250224.0': + resolution: {integrity: sha512-x2iF1CsmYmmPEorWb1GRpAAouX5rRjmhuHMC259ojIlozR4G0LarlB9XfmeLEvtw537Ea0kJ6SOhjvUcWzxSvA==} + engines: {node: '>=16'} + cpu: [x64] + os: [win32] + '@cloudflare/workers-types@4.20250124.3': resolution: {integrity: sha512-WRZ+ol4RnMroF3tc7en6w8b0MqLrmGnLr2LIhG8EWqIoy8MeYk5uhyNXMZ0WPBhwkRtDcTRwOt61xwnJrthskA==} @@ -2759,6 +2859,12 @@ packages: cpu: [ppc64] os: [aix] + '@esbuild/aix-ppc64@0.25.0': + resolution: {integrity: sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + '@esbuild/android-arm64@0.17.19': resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==} engines: {node: '>=12'} @@ -2777,6 +2883,12 @@ packages: cpu: [arm64] os: [android] + '@esbuild/android-arm64@0.25.0': + resolution: {integrity: sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + '@esbuild/android-arm@0.17.19': resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==} engines: {node: '>=12'} @@ -2795,6 +2907,12 @@ packages: cpu: [arm] os: [android] + '@esbuild/android-arm@0.25.0': + resolution: {integrity: sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + '@esbuild/android-x64@0.17.19': resolution: {integrity: sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==} engines: {node: '>=12'} @@ -2813,6 +2931,12 @@ packages: cpu: [x64] os: [android] + '@esbuild/android-x64@0.25.0': + resolution: {integrity: sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + '@esbuild/darwin-arm64@0.17.19': resolution: {integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==} engines: {node: '>=12'} @@ -2831,6 +2955,12 @@ packages: cpu: [arm64] os: [darwin] + '@esbuild/darwin-arm64@0.25.0': + resolution: {integrity: sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-x64@0.17.19': resolution: {integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==} engines: {node: '>=12'} @@ -2849,6 +2979,12 @@ packages: cpu: [x64] os: [darwin] + '@esbuild/darwin-x64@0.25.0': + resolution: {integrity: sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + '@esbuild/freebsd-arm64@0.17.19': resolution: {integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==} engines: {node: '>=12'} @@ -2867,6 +3003,12 @@ packages: cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-arm64@0.25.0': + resolution: {integrity: sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-x64@0.17.19': resolution: {integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==} engines: {node: '>=12'} @@ -2885,6 +3027,12 @@ packages: cpu: [x64] os: [freebsd] + '@esbuild/freebsd-x64@0.25.0': + resolution: {integrity: sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + '@esbuild/linux-arm64@0.17.19': resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==} engines: {node: '>=12'} @@ -2903,6 +3051,12 @@ packages: cpu: [arm64] os: [linux] + '@esbuild/linux-arm64@0.25.0': + resolution: {integrity: sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm@0.17.19': resolution: {integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==} engines: {node: '>=12'} @@ -2921,6 +3075,12 @@ packages: cpu: [arm] os: [linux] + '@esbuild/linux-arm@0.25.0': + resolution: {integrity: sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + '@esbuild/linux-ia32@0.17.19': resolution: {integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==} engines: {node: '>=12'} @@ -2939,6 +3099,12 @@ packages: cpu: [ia32] os: [linux] + '@esbuild/linux-ia32@0.25.0': + resolution: {integrity: sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-loong64@0.17.19': resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==} engines: {node: '>=12'} @@ -2957,6 +3123,12 @@ packages: cpu: [loong64] os: [linux] + '@esbuild/linux-loong64@0.25.0': + resolution: {integrity: sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-mips64el@0.17.19': resolution: {integrity: sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==} engines: {node: '>=12'} @@ -2975,6 +3147,12 @@ packages: cpu: [mips64el] os: [linux] + '@esbuild/linux-mips64el@0.25.0': + resolution: {integrity: sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-ppc64@0.17.19': resolution: {integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==} engines: {node: '>=12'} @@ -2993,6 +3171,12 @@ packages: cpu: [ppc64] os: [linux] + '@esbuild/linux-ppc64@0.25.0': + resolution: {integrity: sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-riscv64@0.17.19': resolution: {integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==} engines: {node: '>=12'} @@ -3011,6 +3195,12 @@ packages: cpu: [riscv64] os: [linux] + '@esbuild/linux-riscv64@0.25.0': + resolution: {integrity: sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-s390x@0.17.19': resolution: {integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==} engines: {node: '>=12'} @@ -3029,6 +3219,12 @@ packages: cpu: [s390x] os: [linux] + '@esbuild/linux-s390x@0.25.0': + resolution: {integrity: sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-x64@0.17.19': resolution: {integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==} engines: {node: '>=12'} @@ -3047,12 +3243,24 @@ packages: cpu: [x64] os: [linux] + '@esbuild/linux-x64@0.25.0': + resolution: {integrity: sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==} + 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-arm64@0.25.0': + resolution: {integrity: sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + '@esbuild/netbsd-x64@0.17.19': resolution: {integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==} engines: {node: '>=12'} @@ -3071,12 +3279,24 @@ packages: cpu: [x64] os: [netbsd] + '@esbuild/netbsd-x64@0.25.0': + resolution: {integrity: sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + '@esbuild/openbsd-arm64@0.24.2': resolution: {integrity: sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] + '@esbuild/openbsd-arm64@0.25.0': + resolution: {integrity: sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + '@esbuild/openbsd-x64@0.17.19': resolution: {integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==} engines: {node: '>=12'} @@ -3095,6 +3315,12 @@ packages: cpu: [x64] os: [openbsd] + '@esbuild/openbsd-x64@0.25.0': + resolution: {integrity: sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + '@esbuild/sunos-x64@0.17.19': resolution: {integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==} engines: {node: '>=12'} @@ -3113,6 +3339,12 @@ packages: cpu: [x64] os: [sunos] + '@esbuild/sunos-x64@0.25.0': + resolution: {integrity: sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + '@esbuild/win32-arm64@0.17.19': resolution: {integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==} engines: {node: '>=12'} @@ -3131,6 +3363,12 @@ packages: cpu: [arm64] os: [win32] + '@esbuild/win32-arm64@0.25.0': + resolution: {integrity: sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-ia32@0.17.19': resolution: {integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==} engines: {node: '>=12'} @@ -3149,6 +3387,12 @@ packages: cpu: [ia32] os: [win32] + '@esbuild/win32-ia32@0.25.0': + resolution: {integrity: sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-x64@0.17.19': resolution: {integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==} engines: {node: '>=12'} @@ -3167,6 +3411,12 @@ packages: cpu: [x64] os: [win32] + '@esbuild/win32-x64@0.25.0': + resolution: {integrity: sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==} + 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} @@ -3479,6 +3729,111 @@ packages: resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} deprecated: Use @eslint/object-schema instead + '@img/sharp-darwin-arm64@0.33.5': + resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [darwin] + + '@img/sharp-darwin-x64@0.33.5': + resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-darwin-arm64@1.0.4': + resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==} + cpu: [arm64] + os: [darwin] + + '@img/sharp-libvips-darwin-x64@1.0.4': + resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-linux-arm64@1.0.4': + resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linux-arm@1.0.5': + resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==} + cpu: [arm] + os: [linux] + + '@img/sharp-libvips-linux-s390x@1.0.4': + resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==} + cpu: [s390x] + os: [linux] + + '@img/sharp-libvips-linux-x64@1.0.4': + resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==} + cpu: [x64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-arm64@1.0.4': + resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-x64@1.0.4': + resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==} + cpu: [x64] + os: [linux] + + '@img/sharp-linux-arm64@0.33.5': + resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + + '@img/sharp-linux-arm@0.33.5': + resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm] + os: [linux] + + '@img/sharp-linux-s390x@0.33.5': + resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [s390x] + os: [linux] + + '@img/sharp-linux-x64@0.33.5': + resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + + '@img/sharp-linuxmusl-arm64@0.33.5': + resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + + '@img/sharp-linuxmusl-x64@0.33.5': + resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + + '@img/sharp-wasm32@0.33.5': + resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [wasm32] + + '@img/sharp-win32-ia32@0.33.5': + resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ia32] + os: [win32] + + '@img/sharp-win32-x64@0.33.5': + resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [win32] + '@inquirer/confirm@5.1.6': resolution: {integrity: sha512-6ZXYK3M1XmaVBZX6FCfChgtponnL0R6I7k8Nu+kaoNkT828FVZTcca1MqmWQipaW2oNREQl5AaPCUOOCVNdRMw==} engines: {node: '>=18'} @@ -3738,81 +4093,81 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@nx/devkit@20.3.0': - resolution: {integrity: sha512-u9oRd2F33DLNWPbzpYGW7xuMEYUAOwO9DLP9nGYpxbZXy6Z4AdoKeqhN+KBTyg8+DyQGuKUSEXcWriDyLLgcHw==} + '@nx/devkit@20.5.0': + resolution: {integrity: sha512-FLHjNRb6VImdlnDsp3ioIdM600y2xPvN88LFV9zPrG2hDXSaD9Np9YBZvvfCr4x46MrPCTTMoAVwWsCXIBgchg==} peerDependencies: nx: '>= 19 <= 21' - '@nx/js@20.3.0': - resolution: {integrity: sha512-hnO1jzJUvO7+bBsC2uaUElpX9gpMiSA3wdt34V8nnPcIBWtdMrjKX7yRFSwZKimeNauesiX0uorTJf+z28R2bg==} + '@nx/js@20.5.0': + resolution: {integrity: sha512-TFdmmSARDNYiwxXUsVowHgMYhjuGzYG4wWExCXkb8m4g6ER1zT9oUzGRf9eC7CHFTGonvAQ8hgBt90xt2EUdQA==} peerDependencies: - verdaccio: ^5.0.4 + verdaccio: ^6.0.5 peerDependenciesMeta: verdaccio: optional: true - '@nx/nx-darwin-arm64@20.3.0': - resolution: {integrity: sha512-9PqSe1Sh7qNqA4GL0cZH0t3S0EZzb2Xn14XY9au7yf0+eoxyag1oETjjULrxLeUmSoXW2hDxzNtoqKFE9zF07Q==} + '@nx/nx-darwin-arm64@20.5.0': + resolution: {integrity: sha512-HlMMC4d253kk/yrafiepk8bhXMl+v4BIugftwUzRl7AOznyNgaj5WDaIVXZLZzt+WwYw6CTb+zYxfY4LuPFvOg==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@nx/nx-darwin-x64@20.3.0': - resolution: {integrity: sha512-gsGGhJVvi5QZVVTZie5sNMo1zOAU+A2edm6DGegObdFRLV41Ju/Yrm/gTaSp4yUtywd3UU4S/30C/nI2c55adA==} + '@nx/nx-darwin-x64@20.5.0': + resolution: {integrity: sha512-+LO8YC5Iy1168saPeItNePChToP2TuRCj3MuxEtTTJXoRlab38rNaOjWaV1itvtcgrzkQi/IohINWMI8WC5b7g==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@nx/nx-freebsd-x64@20.3.0': - resolution: {integrity: sha512-DiymYZBBu0upbiskdfn9KRyoXdyvKohezJiV3j4VkeRE8KR2p04NgwRQviDFbeD1cjWrDy9wk8y+G5PabLlqAA==} + '@nx/nx-freebsd-x64@20.5.0': + resolution: {integrity: sha512-he3VOuj35XDAAmO3s6LqiWx00CsCMgHceNOHziCELQL0tfQlvvyI0Agmhesw68BAbabt+mKH9g+miENiaMknbg==} engines: {node: '>= 10'} cpu: [x64] os: [freebsd] - '@nx/nx-linux-arm-gnueabihf@20.3.0': - resolution: {integrity: sha512-Aksx66e8jmt/4rGJ/5z34SWXbPcYr9Ht52UonEeuCdQdoEvAOs7yBUbllYOjIcUsfZikEyZgvqfiQslsggSJdQ==} + '@nx/nx-linux-arm-gnueabihf@20.5.0': + resolution: {integrity: sha512-xeysjXvm4xZa/ED7XlbzuS28sCOGZ0AlS7DKWRxEMv60iprxewj0WKPdH7RveiNNauzgHWOW/wxvTWXRu+i36Q==} engines: {node: '>= 10'} cpu: [arm] os: [linux] - '@nx/nx-linux-arm64-gnu@20.3.0': - resolution: {integrity: sha512-Y5wmYEwF1bl014Ps8QjagI911VbViQSFHSTVOCNSObdAzig9E5o6NOkoWe+doT1UZLrrInnlkrggQUsbtdKjOg==} + '@nx/nx-linux-arm64-gnu@20.5.0': + resolution: {integrity: sha512-pj+6OA7d1ltkW/ZYFooi3bDtqVFPxi8YYiZlQx7enEuOxbrTvpjEPvBjVyf+oYpCe9rfKlx9ghzufqsI4uGM0w==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@nx/nx-linux-arm64-musl@20.3.0': - resolution: {integrity: sha512-yGcIkmImyOMfPkQSYH2EVjPmFE0VkLcO71Bbkpr3RlJ1N/vjYxsGbdnqPiBb8Wshib/hmwpiMHf/yzQtKH0SQw==} + '@nx/nx-linux-arm64-musl@20.5.0': + resolution: {integrity: sha512-gCIJEb/VYv6pxiAcSeizX0jpOmTnPmgYVi2EZLSWus0Pg6FIwMHE4MX5kuqehyvnDt9xInb7Rh8vgz/JBOOsbA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@nx/nx-linux-x64-gnu@20.3.0': - resolution: {integrity: sha512-nkA2DLI+rpmiuiy7dyXP4l9s7dgHkQWDX7lG1XltiT41RzAReJF1h8qBE6XrsAYE1CtI76DRWVphnc93+iZr+A==} + '@nx/nx-linux-x64-gnu@20.5.0': + resolution: {integrity: sha512-hfCDmfy7TBQJdgBwNvOh55e8Y00Cxcddw2QeKguvy6vsnVa7fesXDWCw2t3m/VPPQDKQGd8cY1lS1JqX3N+wCA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@nx/nx-linux-x64-musl@20.3.0': - resolution: {integrity: sha512-sPMtTt9iTrCmFEIp9Qv27UX9PeL1aqKck2dz2TAFbXKVtF6+djOdTcNnTYw45KIP6izcUcOXXAq4G0QSQE7CLg==} + '@nx/nx-linux-x64-musl@20.5.0': + resolution: {integrity: sha512-RTTCPjZNSDFE5mUdavDFimDw/aXNBY0w+iuRM5q17rDHxwa//DghCY0GEkBdfuxD7wpw+sRwE18mWsNDek5lXA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@nx/nx-win32-arm64-msvc@20.3.0': - resolution: {integrity: sha512-ppfNa/8OfpWA9o26Pz3vArN4ulAC+Hx70/ghPRCP7ed1Mb3Z6yR2Ry9KfBRImbqajvuAExM0TePKMGq9LCdXmg==} + '@nx/nx-win32-arm64-msvc@20.5.0': + resolution: {integrity: sha512-nT9WlG0QA8D74UJhEP1feGrV00/bas1nnqS+zkwnpJs0vcPmMuIktdETh3lEnqrGD04R7GtwbKtoGIGiZh5m9w==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@nx/nx-win32-x64-msvc@20.3.0': - resolution: {integrity: sha512-8FOejZ4emtLSVn3pYWs4PIc3n4//qMbwMDPVxmPE8us3ir91Qh0bzr5zRj7Q8sEdSgvneXRXqtBp2grY2KMJsw==} + '@nx/nx-win32-x64-msvc@20.5.0': + resolution: {integrity: sha512-KQVqFSYfc8ToSBgzhVNV8WcFEvLdy1zp58qwewa0xnE7DDncMbA+6YoVizUcQ/6GZRlMJ9sdVn3kwm5B8eD5mg==} engines: {node: '>= 10'} cpu: [x64] os: [win32] - '@nx/workspace@20.3.0': - resolution: {integrity: sha512-z8NSAo5SiLEMPuwasDvLdCCtaTGdINh1cSZMCom8HeLbT8F7risbR0IlHVqVrKj9FPKqrAIsH+4knVb4dHHCnQ==} + '@nx/workspace@20.5.0': + resolution: {integrity: sha512-Oe5p7rcgF/o4G2XDHYOxQxa/eDEfvmQV+kFCs8DBQwlzUwREAP4/pHFI0AIdWSfYkq55C5PE/PNKUGHrk2/xTA==} '@open-draft/deferred-promise@2.2.0': resolution: {integrity: sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==} @@ -4466,103 +4821,198 @@ packages: cpu: [arm] os: [android] + '@rollup/rollup-android-arm-eabi@4.34.9': + resolution: {integrity: sha512-qZdlImWXur0CFakn2BJ2znJOdqYZKiedEPEVNTBrpfPjc/YuTGcaYZcdmNFTkUj3DU0ZM/AElcM8Ybww3xVLzA==} + cpu: [arm] + os: [android] + '@rollup/rollup-android-arm64@4.32.1': resolution: {integrity: sha512-If3PDskT77q7zgqVqYuj7WG3WC08G1kwXGVFi9Jr8nY6eHucREHkfpX79c0ACAjLj3QIWKPJR7w4i+f5EdLH5Q==} cpu: [arm64] os: [android] + '@rollup/rollup-android-arm64@4.34.9': + resolution: {integrity: sha512-4KW7P53h6HtJf5Y608T1ISKvNIYLWRKMvfnG0c44M6In4DQVU58HZFEVhWINDZKp7FZps98G3gxwC1sb0wXUUg==} + cpu: [arm64] + os: [android] + '@rollup/rollup-darwin-arm64@4.32.1': resolution: {integrity: sha512-zCpKHioQ9KgZToFp5Wvz6zaWbMzYQ2LJHQ+QixDKq52KKrF65ueu6Af4hLlLWHjX1Wf/0G5kSJM9PySW9IrvHA==} cpu: [arm64] os: [darwin] + '@rollup/rollup-darwin-arm64@4.34.9': + resolution: {integrity: sha512-0CY3/K54slrzLDjOA7TOjN1NuLKERBgk9nY5V34mhmuu673YNb+7ghaDUs6N0ujXR7fz5XaS5Aa6d2TNxZd0OQ==} + cpu: [arm64] + os: [darwin] + '@rollup/rollup-darwin-x64@4.32.1': resolution: {integrity: sha512-sFvF+t2+TyUo/ZQqUcifrJIgznx58oFZbdHS9TvHq3xhPVL9nOp+yZ6LKrO9GWTP+6DbFtoyLDbjTpR62Mbr3Q==} cpu: [x64] os: [darwin] + '@rollup/rollup-darwin-x64@4.34.9': + resolution: {integrity: sha512-eOojSEAi/acnsJVYRxnMkPFqcxSMFfrw7r2iD9Q32SGkb/Q9FpUY1UlAu1DH9T7j++gZ0lHjnm4OyH2vCI7l7Q==} + cpu: [x64] + os: [darwin] + '@rollup/rollup-freebsd-arm64@4.32.1': resolution: {integrity: sha512-NbOa+7InvMWRcY9RG+B6kKIMD/FsnQPH0MWUvDlQB1iXnF/UcKSudCXZtv4lW+C276g3w5AxPbfry5rSYvyeYA==} cpu: [arm64] os: [freebsd] + '@rollup/rollup-freebsd-arm64@4.34.9': + resolution: {integrity: sha512-2lzjQPJbN5UnHm7bHIUKFMulGTQwdvOkouJDpPysJS+QFBGDJqcfh+CxxtG23Ik/9tEvnebQiylYoazFMAgrYw==} + cpu: [arm64] + os: [freebsd] + '@rollup/rollup-freebsd-x64@4.32.1': resolution: {integrity: sha512-JRBRmwvHPXR881j2xjry8HZ86wIPK2CcDw0EXchE1UgU0ubWp9nvlT7cZYKc6bkypBt745b4bglf3+xJ7hXWWw==} cpu: [x64] os: [freebsd] + '@rollup/rollup-freebsd-x64@4.34.9': + resolution: {integrity: sha512-SLl0hi2Ah2H7xQYd6Qaiu01kFPzQ+hqvdYSoOtHYg/zCIFs6t8sV95kaoqjzjFwuYQLtOI0RZre/Ke0nPaQV+g==} + cpu: [x64] + os: [freebsd] + '@rollup/rollup-linux-arm-gnueabihf@4.32.1': resolution: {integrity: sha512-PKvszb+9o/vVdUzCCjL0sKHukEQV39tD3fepXxYrHE3sTKrRdCydI7uldRLbjLmDA3TFDmh418XH19NOsDRH8g==} cpu: [arm] os: [linux] + '@rollup/rollup-linux-arm-gnueabihf@4.34.9': + resolution: {integrity: sha512-88I+D3TeKItrw+Y/2ud4Tw0+3CxQ2kLgu3QvrogZ0OfkmX/DEppehus7L3TS2Q4lpB+hYyxhkQiYPJ6Mf5/dPg==} + cpu: [arm] + os: [linux] + '@rollup/rollup-linux-arm-musleabihf@4.32.1': resolution: {integrity: sha512-9WHEMV6Y89eL606ReYowXuGF1Yb2vwfKWKdD1A5h+OYnPZSJvxbEjxTRKPgi7tkP2DSnW0YLab1ooy+i/FQp/Q==} cpu: [arm] os: [linux] + '@rollup/rollup-linux-arm-musleabihf@4.34.9': + resolution: {integrity: sha512-3qyfWljSFHi9zH0KgtEPG4cBXHDFhwD8kwg6xLfHQ0IWuH9crp005GfoUUh/6w9/FWGBwEHg3lxK1iHRN1MFlA==} + cpu: [arm] + os: [linux] + '@rollup/rollup-linux-arm64-gnu@4.32.1': resolution: {integrity: sha512-tZWc9iEt5fGJ1CL2LRPw8OttkCBDs+D8D3oEM8mH8S1ICZCtFJhD7DZ3XMGM8kpqHvhGUTvNUYVDnmkj4BDXnw==} cpu: [arm64] os: [linux] + '@rollup/rollup-linux-arm64-gnu@4.34.9': + resolution: {integrity: sha512-6TZjPHjKZUQKmVKMUowF3ewHxctrRR09eYyvT5eFv8w/fXarEra83A2mHTVJLA5xU91aCNOUnM+DWFMSbQ0Nxw==} + cpu: [arm64] + os: [linux] + '@rollup/rollup-linux-arm64-musl@4.32.1': resolution: {integrity: sha512-FTYc2YoTWUsBz5GTTgGkRYYJ5NGJIi/rCY4oK/I8aKowx1ToXeoVVbIE4LGAjsauvlhjfl0MYacxClLld1VrOw==} cpu: [arm64] os: [linux] + '@rollup/rollup-linux-arm64-musl@4.34.9': + resolution: {integrity: sha512-LD2fytxZJZ6xzOKnMbIpgzFOuIKlxVOpiMAXawsAZ2mHBPEYOnLRK5TTEsID6z4eM23DuO88X0Tq1mErHMVq0A==} + cpu: [arm64] + os: [linux] + '@rollup/rollup-linux-loongarch64-gnu@4.32.1': resolution: {integrity: sha512-F51qLdOtpS6P1zJVRzYM0v6MrBNypyPEN1GfMiz0gPu9jN8ScGaEFIZQwteSsGKg799oR5EaP7+B2jHgL+d+Kw==} cpu: [loong64] os: [linux] + '@rollup/rollup-linux-loongarch64-gnu@4.34.9': + resolution: {integrity: sha512-dRAgTfDsn0TE0HI6cmo13hemKpVHOEyeciGtvlBTkpx/F65kTvShtY/EVyZEIfxFkV5JJTuQ9tP5HGBS0hfxIg==} + cpu: [loong64] + os: [linux] + '@rollup/rollup-linux-powerpc64le-gnu@4.32.1': resolution: {integrity: sha512-wO0WkfSppfX4YFm5KhdCCpnpGbtgQNj/tgvYzrVYFKDpven8w2N6Gg5nB6w+wAMO3AIfSTWeTjfVe+uZ23zAlg==} cpu: [ppc64] os: [linux] + '@rollup/rollup-linux-powerpc64le-gnu@4.34.9': + resolution: {integrity: sha512-PHcNOAEhkoMSQtMf+rJofwisZqaU8iQ8EaSps58f5HYll9EAY5BSErCZ8qBDMVbq88h4UxaNPlbrKqfWP8RfJA==} + cpu: [ppc64] + os: [linux] + '@rollup/rollup-linux-riscv64-gnu@4.32.1': resolution: {integrity: sha512-iWswS9cIXfJO1MFYtI/4jjlrGb/V58oMu4dYJIKnR5UIwbkzR0PJ09O0PDZT0oJ3LYWXBSWahNf/Mjo6i1E5/g==} cpu: [riscv64] os: [linux] + '@rollup/rollup-linux-riscv64-gnu@4.34.9': + resolution: {integrity: sha512-Z2i0Uy5G96KBYKjeQFKbbsB54xFOL5/y1P5wNBsbXB8yE+At3oh0DVMjQVzCJRJSfReiB2tX8T6HUFZ2k8iaKg==} + cpu: [riscv64] + os: [linux] + '@rollup/rollup-linux-s390x-gnu@4.32.1': resolution: {integrity: sha512-RKt8NI9tebzmEthMnfVgG3i/XeECkMPS+ibVZjZ6mNekpbbUmkNWuIN2yHsb/mBPyZke4nlI4YqIdFPgKuoyQQ==} cpu: [s390x] os: [linux] + '@rollup/rollup-linux-s390x-gnu@4.34.9': + resolution: {integrity: sha512-U+5SwTMoeYXoDzJX5dhDTxRltSrIax8KWwfaaYcynuJw8mT33W7oOgz0a+AaXtGuvhzTr2tVKh5UO8GVANTxyQ==} + cpu: [s390x] + os: [linux] + '@rollup/rollup-linux-x64-gnu@4.32.1': resolution: {integrity: sha512-WQFLZ9c42ECqEjwg/GHHsouij3pzLXkFdz0UxHa/0OM12LzvX7DzedlY0SIEly2v18YZLRhCRoHZDxbBSWoGYg==} cpu: [x64] os: [linux] + '@rollup/rollup-linux-x64-gnu@4.34.9': + resolution: {integrity: sha512-FwBHNSOjUTQLP4MG7y6rR6qbGw4MFeQnIBrMe161QGaQoBQLqSUEKlHIiVgF3g/mb3lxlxzJOpIBhaP+C+KP2A==} + cpu: [x64] + os: [linux] + '@rollup/rollup-linux-x64-musl@4.32.1': resolution: {integrity: sha512-BLoiyHDOWoS3uccNSADMza6V6vCNiphi94tQlVIL5de+r6r/CCQuNnerf+1g2mnk2b6edp5dk0nhdZ7aEjOBsA==} cpu: [x64] os: [linux] + '@rollup/rollup-linux-x64-musl@4.34.9': + resolution: {integrity: sha512-cYRpV4650z2I3/s6+5/LONkjIz8MBeqrk+vPXV10ORBnshpn8S32bPqQ2Utv39jCiDcO2eJTuSlPXpnvmaIgRA==} + cpu: [x64] + os: [linux] + '@rollup/rollup-win32-arm64-msvc@4.32.1': resolution: {integrity: sha512-w2l3UnlgYTNNU+Z6wOR8YdaioqfEnwPjIsJ66KxKAf0p+AuL2FHeTX6qvM+p/Ue3XPBVNyVSfCrfZiQh7vZHLQ==} cpu: [arm64] os: [win32] + '@rollup/rollup-win32-arm64-msvc@4.34.9': + resolution: {integrity: sha512-z4mQK9dAN6byRA/vsSgQiPeuO63wdiDxZ9yg9iyX2QTzKuQM7T4xlBoeUP/J8uiFkqxkcWndWi+W7bXdPbt27Q==} + cpu: [arm64] + os: [win32] + '@rollup/rollup-win32-ia32-msvc@4.32.1': resolution: {integrity: sha512-Am9H+TGLomPGkBnaPWie4F3x+yQ2rr4Bk2jpwy+iV+Gel9jLAu/KqT8k3X4jxFPW6Zf8OMnehyutsd+eHoq1WQ==} cpu: [ia32] os: [win32] + '@rollup/rollup-win32-ia32-msvc@4.34.9': + resolution: {integrity: sha512-KB48mPtaoHy1AwDNkAJfHXvHp24H0ryZog28spEs0V48l3H1fr4i37tiyHsgKZJnCmvxsbATdZGBpbmxTE3a9w==} + cpu: [ia32] + os: [win32] + '@rollup/rollup-win32-x64-msvc@4.32.1': resolution: {integrity: sha512-ar80GhdZb4DgmW3myIS9nRFYcpJRSME8iqWgzH2i44u+IdrzmiXVxeFnExQ5v4JYUSpg94bWjevMG8JHf1Da5Q==} cpu: [x64] os: [win32] + '@rollup/rollup-win32-x64-msvc@4.34.9': + resolution: {integrity: sha512-AyleYRPU7+rgkMWbEh71fQlrzRfeP6SyMnRf9XX4fCdDPAJumdSBqYEcWPMzVQ4ScAl7E4oFfK0GUVn77xSwbw==} + cpu: [x64] + os: [win32] + '@rsbuild/core@1.1.13': resolution: {integrity: sha512-XBL2hrin8731W6iTGGL+x3cv07n4vm2D7u6XHRwtQkRfySzAqGx7ThlQLdNX/dJwfsoQrYQuWl/qzaljjXtGtg==} engines: {node: '>=16.7.0'} hasBin: true - '@rsbuild/core@1.2.3': - resolution: {integrity: sha512-lUCt8gQe9E2PI3srcEJ1Na3GQYmsYuvAqK0f/k00HM0pEjrbOFC9Xq2kR85UoXHFqlTCIw/fLLDe91PKRCbKAw==} + '@rsbuild/core@1.2.15': + resolution: {integrity: sha512-f17C4q3MoQ1G9CXzGkiZKZj3MHnV9oSovBjjQQ5bXVBICfGVyRHlHHCa5b9b40F67lbez2K6eLkLP9wU1j1Udw==} engines: {node: '>=16.7.0'} hasBin: true @@ -4581,9 +5031,9 @@ packages: peerDependencies: '@rsbuild/core': 1.x - '@rslib/core@0.4.0': - resolution: {integrity: sha512-dONhz7PsooyGUdSQbJRzlsCXgOKrP5NyW1dzcNBvfLHr13nd2anCCZzFdQXb/g7772h5moj+EkTEo982AmUeJQ==} - engines: {node: '>=16.0.0'} + '@rslib/core@0.5.3': + resolution: {integrity: sha512-HlFGd4PZ4kJDrGZ4VBPIglGPjsTI+LuVWTaFg/hrmElnmXpw3iq0Oln5Esv24L3VBofyvZGPMlu1fZTiqTPzcw==} + engines: {node: '>=16.7.0'} hasBin: true peerDependencies: '@microsoft/api-extractor': ^7 @@ -4599,8 +5049,8 @@ packages: cpu: [arm64] os: [darwin] - '@rspack/binding-darwin-arm64@1.2.2': - resolution: {integrity: sha512-h23F8zEkXWhwMeScm0ZnN78Zh7hCDalxIWsm7bBS0eKadnlegUDwwCF8WE+8NjWr7bRzv0p3QBWlS5ufkcL4eA==} + '@rspack/binding-darwin-arm64@1.2.7': + resolution: {integrity: sha512-dT5eSMTknZaI8Djmz8KnaWM68rjZuBZwsKyF144o+ZSJM55vgiNXyL0lQYB8mX9nR3Gck+jKuGUAT2W/EF/t5Q==} cpu: [arm64] os: [darwin] @@ -4609,8 +5059,8 @@ packages: cpu: [x64] os: [darwin] - '@rspack/binding-darwin-x64@1.2.2': - resolution: {integrity: sha512-vG5s7FkEvwrGLfksyDRHwKAHUkhZt1zHZZXJQn4gZKjTBonje8ezdc7IFlDiWpC4S+oBYp73nDWkUzkGRbSdcQ==} + '@rspack/binding-darwin-x64@1.2.7': + resolution: {integrity: sha512-5n8IhKBxH71d4BUIvyzTwSOAOKNneLPJwLIphSPNIbCMGjLI59/EVpxSQ/AAUfyMkqOs635NNCn0eGQVuzpI/w==} cpu: [x64] os: [darwin] @@ -4619,8 +5069,8 @@ packages: cpu: [arm64] os: [linux] - '@rspack/binding-linux-arm64-gnu@1.2.2': - resolution: {integrity: sha512-VykY/kiYOzO8E1nYzfJ9+gQEHxb5B6lt5wa8M6xFi5B6jEGU+OsaGskmAZB9/GFImeFDHxDPvhUalI4R9p8O2Q==} + '@rspack/binding-linux-arm64-gnu@1.2.7': + resolution: {integrity: sha512-DTtFBJmgQQrVWjbklpgJDr3kE9Uf1fHsPh+1GVslsBuyn+o4O7JslrnjuVsQCYKoiEg0Lg4ZPQmwnhJLHssZ5A==} cpu: [arm64] os: [linux] @@ -4629,8 +5079,8 @@ packages: cpu: [arm64] os: [linux] - '@rspack/binding-linux-arm64-musl@1.2.2': - resolution: {integrity: sha512-Z5vAC4wGfXi8XXZ6hs8Q06TYjr3zHf819HB4DI5i4C1eQTeKdZSyoFD0NHFG23bP4NWJffp8KhmoObcy9jBT5Q==} + '@rspack/binding-linux-arm64-musl@1.2.7': + resolution: {integrity: sha512-01/OoQQF9eyDvRKkxj4DzCznfGZIvnzI8qOsrv+M7VBm8FLoKpb3hygXixaGQOXmNL42XTh61qjgm++fBu6aUA==} cpu: [arm64] os: [linux] @@ -4639,8 +5089,8 @@ packages: cpu: [x64] os: [linux] - '@rspack/binding-linux-x64-gnu@1.2.2': - resolution: {integrity: sha512-o3pDaL+cH5EeRbDE9gZcdZpBgp5iXvYZBBhe8vZQllYgI4zN5MJEuleV7WplG3UwTXlgZg3Kht4RORSOPn96vg==} + '@rspack/binding-linux-x64-gnu@1.2.7': + resolution: {integrity: sha512-lUOAUq0YSsofCXsP6XnlgfH0ZRDZ2X2XqXLXYjqf4xkSxCl5eBmE0EQYjAHF4zjUvU5rVx4a4bDLWv7+t3bOHg==} cpu: [x64] os: [linux] @@ -4649,8 +5099,8 @@ packages: cpu: [x64] os: [linux] - '@rspack/binding-linux-x64-musl@1.2.2': - resolution: {integrity: sha512-RE3e0xe4DdchHssttKzryDwjLkbrNk/4H59TkkWeGYJcLw41tmcOZVFQUOwKLUvXWVyif/vjvV/w1SMlqB4wQg==} + '@rspack/binding-linux-x64-musl@1.2.7': + resolution: {integrity: sha512-ZrPXfgT30p4DlydYavaTHiluxHkWvZHt7K4q7qNyTfYYowG6jRGwWi/PATdugNICGv027Wsh5nzEO4o27Iuhwg==} cpu: [x64] os: [linux] @@ -4659,8 +5109,8 @@ packages: cpu: [arm64] os: [win32] - '@rspack/binding-win32-arm64-msvc@1.2.2': - resolution: {integrity: sha512-R+PKBYn6uzTaDdVqTHvjqiJPBr5ZHg1wg5UmFDLNH9OklzVFyQh1JInSdJRb7lzfzTRz6bEkkwUFBPQK/CGScw==} + '@rspack/binding-win32-arm64-msvc@1.2.7': + resolution: {integrity: sha512-1OzzM+OUSWX39XYcDfxJ8bGX5vNNrRejCMGotBEdP+uQ3KMWCPz0G4KRc3QIjghaLIYk3ofd83hcfUxyk/2Xog==} cpu: [arm64] os: [win32] @@ -4669,8 +5119,8 @@ packages: cpu: [ia32] os: [win32] - '@rspack/binding-win32-ia32-msvc@1.2.2': - resolution: {integrity: sha512-dBqz3sRAGZ2f31FgzKLDvIRfq2haRP3X3XVCT0PsiMcvt7QJng+26aYYMy2THatd/nM8IwExYeitHWeiMBoruw==} + '@rspack/binding-win32-ia32-msvc@1.2.7': + resolution: {integrity: sha512-VWlDCV9kDtijk9GK6ZtBQmYoVzKGpnrJB0iI3d2gIEa/2NwikJ89bLMFE4dFx8UNH3p/sSyb5pmPOQnbudFK7Q==} cpu: [ia32] os: [win32] @@ -4679,16 +5129,16 @@ packages: cpu: [x64] os: [win32] - '@rspack/binding-win32-x64-msvc@1.2.2': - resolution: {integrity: sha512-eeAvaN831KG553cMSHkVldyk6YQn4ujgRHov6r1wtREq7CD3/ka9LMkJUepCN85K7XtwYT0N4KpFIQyf5GTGoA==} + '@rspack/binding-win32-x64-msvc@1.2.7': + resolution: {integrity: sha512-l/sTdeMsQF1a1aB79cWykDNRZG6nkUA0biJo2/sEARP3ijdr8TuwUdirp2JRDmZfQJkoJnQ2un9y9qyW+TIZzA==} cpu: [x64] os: [win32] '@rspack/binding@1.1.8': resolution: {integrity: sha512-+/JzXx1HctfgPj+XtsCTbRkxiaOfAXGZZLEvs7jgp04WgWRSZ5u97WRCePNPvy+sCfOEH/2zw2ZK36Z7oQRGhQ==} - '@rspack/binding@1.2.2': - resolution: {integrity: sha512-GCZwpGFYlLTdJ2soPLwjw9z4LSZ+GdpbHNfBt3Cm/f/bAF8n6mZc7dHUqN893RFh7MPU17HNEL3fMw7XR+6pHg==} + '@rspack/binding@1.2.7': + resolution: {integrity: sha512-QH+kxkG0I9C6lmlwgBUDFsy24ihXMGG5lfiNtQilk4CyBN+AgSWFENcYrnkUaBioZAvMBznQLiccV3X0JeH9iQ==} '@rspack/core@1.1.8': resolution: {integrity: sha512-pcZtcj5iXLCuw9oElTYC47bp/RQADm/MMEb3djHdwJuSlFWfWPQi5QFgJ/lJAxIW9UNHnTFrYtytycfjpuoEcA==} @@ -4699,8 +5149,8 @@ packages: '@swc/helpers': optional: true - '@rspack/core@1.2.2': - resolution: {integrity: sha512-EeHAmY65Uj62hSbUKesbrcWGE7jfUI887RD03G++Gj8jS4WPHEu1TFODXNOXg6pa7zyIvs2BK0Bm16Kwz8AEaQ==} + '@rspack/core@1.2.7': + resolution: {integrity: sha512-Vg7ySflnqI1nNOBPd6VJkQozWADssxn3einbxa9OqDVAB+dGSj8qihTs6rlaTSewidoaYTGIAiTMHO2y+61qqQ==} engines: {node: '>=16.0.0'} peerDependencies: '@rspack/tracing': ^1.x @@ -5933,6 +6383,9 @@ packages: '@vitest/expect@3.0.6': resolution: {integrity: sha512-zBduHf/ja7/QRX4HdP1DSq5XrPgdN+jzLOwaTq/0qZjYfgETNFCKf9nOAp2j3hmom3oTbczuUzrzg9Hafh7hNg==} + '@vitest/expect@3.0.8': + resolution: {integrity: sha512-Xu6TTIavTvSSS6LZaA3EebWFr6tsoXPetOWNMOlc7LO88QVVBwq2oQWBoDiLCN6YTvNYsGSjqOO8CAdjom5DCQ==} + '@vitest/mocker@2.1.8': resolution: {integrity: sha512-7guJ/47I6uqfttp33mgo6ga5Gr1VnL58rcqYKyShoRK9ebu8T5Rs6HN3s1NABiBeVTdWNrwUMcHH54uXZBN4zA==} peerDependencies: @@ -5955,36 +6408,62 @@ packages: vite: optional: true + '@vitest/mocker@3.0.8': + resolution: {integrity: sha512-n3LjS7fcW1BCoF+zWZxG7/5XvuYH+lsFg+BDwwAz0arIwHQJFUEsKBQ0BLU49fCxuM/2HSeBPHQD8WjgrxMfow==} + peerDependencies: + msw: ^2.4.9 + vite: ^5.0.0 || ^6.0.0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + '@vitest/pretty-format@2.1.8': resolution: {integrity: sha512-9HiSZ9zpqNLKlbIDRWOnAWqgcA7xu+8YxXSekhr0Ykab7PAYFkhkwoqVArPOtJhPmYeE2YHgKZlj3CP36z2AJQ==} '@vitest/pretty-format@3.0.6': resolution: {integrity: sha512-Zyctv3dbNL+67qtHfRnUE/k8qxduOamRfAL1BurEIQSyOEFffoMvx2pnDSSbKAAVxY0Ej2J/GH2dQKI0W2JyVg==} + '@vitest/pretty-format@3.0.8': + resolution: {integrity: sha512-BNqwbEyitFhzYMYHUVbIvepOyeQOSFA/NeJMIP9enMntkkxLgOcgABH6fjyXG85ipTgvero6noreavGIqfJcIg==} + '@vitest/runner@2.1.8': resolution: {integrity: sha512-17ub8vQstRnRlIU5k50bG+QOMLHRhYPAna5tw8tYbj+jzjcspnwnwtPtiOlkuKC4+ixDPTuLZiqiWWQ2PSXHVg==} '@vitest/runner@3.0.6': resolution: {integrity: sha512-JopP4m/jGoaG1+CBqubV/5VMbi7L+NQCJTu1J1Pf6YaUbk7bZtaq5CX7p+8sY64Sjn1UQ1XJparHfcvTTdu9cA==} + '@vitest/runner@3.0.8': + resolution: {integrity: sha512-c7UUw6gEcOzI8fih+uaAXS5DwjlBaCJUo7KJ4VvJcjL95+DSR1kova2hFuRt3w41KZEFcOEiq098KkyrjXeM5w==} + '@vitest/snapshot@2.1.8': resolution: {integrity: sha512-20T7xRFbmnkfcmgVEz+z3AU/3b0cEzZOt/zmnvZEctg64/QZbSDJEVm9fLnnlSi74KibmRsO9/Qabi+t0vCRPg==} '@vitest/snapshot@3.0.6': resolution: {integrity: sha512-qKSmxNQwT60kNwwJHMVwavvZsMGXWmngD023OHSgn873pV0lylK7dwBTfYP7e4URy5NiBCHHiQGA9DHkYkqRqg==} + '@vitest/snapshot@3.0.8': + resolution: {integrity: sha512-x8IlMGSEMugakInj44nUrLSILh/zy1f2/BgH0UeHpNyOocG18M9CWVIFBaXPt8TrqVZWmcPjwfG/ht5tnpba8A==} + '@vitest/spy@2.1.8': resolution: {integrity: sha512-5swjf2q95gXeYPevtW0BLk6H8+bPlMb4Vw/9Em4hFxDcaOxS+e0LOX4yqNxoHzMR2akEB2xfpnWUzkZokmgWDg==} '@vitest/spy@3.0.6': resolution: {integrity: sha512-HfOGx/bXtjy24fDlTOpgiAEJbRfFxoX3zIGagCqACkFKKZ/TTOE6gYMKXlqecvxEndKFuNHcHqP081ggZ2yM0Q==} + '@vitest/spy@3.0.8': + resolution: {integrity: sha512-MR+PzJa+22vFKYb934CejhR4BeRpMSoxkvNoDit68GQxRLSf11aT6CTj3XaqUU9rxgWJFnqicN/wxw6yBRkI1Q==} + '@vitest/utils@2.1.8': resolution: {integrity: sha512-dwSoui6djdwbfFmIgbIjX2ZhIoG7Ex/+xpxyiEgIGzjliY8xGkcpITKTlp6B4MgtGkF2ilvm97cPM96XZaAgcA==} '@vitest/utils@3.0.6': resolution: {integrity: sha512-18ktZpf4GQFTbf9jK543uspU03Q2qya7ZGya5yiZ0Gx0nnnalBvd5ZBislbl2EhLjM8A8rt4OilqKG7QwcGkvQ==} + '@vitest/utils@3.0.8': + resolution: {integrity: sha512-nkBC3aEhfX2PdtQI/QwAWp8qZWwzASsU4Npbcd5RdMPBSSLCpkZp52P3xku3s3uA0HIEhGvEcF8rNkBsz9dQ4Q==} + '@webassemblyjs/ast@1.12.1': resolution: {integrity: sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==} @@ -6356,8 +6835,9 @@ packages: peerDependencies: '@babel/core': ^7.20.12 - babel-plugin-macros@2.8.0: - resolution: {integrity: sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==} + babel-plugin-macros@3.1.0: + resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} + engines: {node: '>=10', npm: '>=6'} babel-plugin-module-resolver@5.0.2: resolution: {integrity: sha512-9KtaCazHee2xc0ibfqsDeamwDps6FZNo5S0Q81dUqEuFzVwPhcT4J5jOqIVvgCA3Q/wO9hKYxN/Ds3tIsp5ygg==} @@ -6611,6 +7091,9 @@ packages: caniuse-lite@1.0.30001680: resolution: {integrity: sha512-rPQy70G6AGUMnbwS1z6Xg+RkHYPAi18ihs47GH0jcxIG7wArmPgY3XbS2sRdBbxJljp3thdT8BIqv9ccCypiPA==} + caniuse-lite@1.0.30001702: + resolution: {integrity: sha512-LoPe/D7zioC0REI5W73PeR1e1MLCipRGq/VkovJnd6Df+QVqT+vT33OXCp8QUd7kA7RZrHWxb1B36OQKI/0gOA==} + capnp-ts@0.7.0: resolution: {integrity: sha512-XKxXAC3HVPv7r674zP0VC3RTXz+/JKhfyw94ljvF80yynK6VkTnqE3jMuN8b3dUVmmc43TjyxjW4KTsmB3c86g==} @@ -6772,6 +7255,13 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + color-string@1.9.1: + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + + color@4.2.3: + resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} + engines: {node: '>=12.5.0'} + colorette@1.4.0: resolution: {integrity: sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==} @@ -6869,6 +7359,10 @@ packages: cookie-signature@1.0.6: resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + cookie@0.5.0: + resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} + engines: {node: '>= 0.6'} + cookie@0.6.0: resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} engines: {node: '>= 0.6'} @@ -6892,8 +7386,8 @@ packages: core-js@3.39.0: resolution: {integrity: sha512-raM0ew0/jJUqkJ0E6e8UDtl+y/7ktFivgWvqw8dNSQeNWoSDLvQ1H/RN3aPXB9tBd4/FhyR4RDPGhsNIMsAn7g==} - core-js@3.40.0: - resolution: {integrity: sha512-7vsMc/Lty6AGnn7uFpYT56QesI5D2Y/UkgKounk87OP9Z2H9Z8kj6jzcSGAxFmUtDOS0ntK6lbQz+Nsa0Jj6mQ==} + core-js@3.41.0: + resolution: {integrity: sha512-SJ4/EHwS36QMJd6h/Rg+GyR4A5xE0FSI3eZ+iBVpfqf1x0eTSg1smWLHrA+2jQThZSh97fmSgFSU8B61nxosxA==} core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} @@ -6910,9 +7404,9 @@ packages: resolution: {integrity: sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==} engines: {node: '>=4'} - cosmiconfig@6.0.0: - resolution: {integrity: sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==} - engines: {node: '>=8'} + cosmiconfig@7.1.0: + resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} + engines: {node: '>=10'} cosmiconfig@9.0.0: resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} @@ -7108,6 +7602,10 @@ packages: resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + detect-libc@2.0.3: + resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} + engines: {node: '>=8'} + detect-newline@3.1.0: resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} engines: {node: '>=8'} @@ -7346,6 +7844,11 @@ packages: engines: {node: '>=18'} hasBin: true + esbuild@0.25.0: + resolution: {integrity: sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==} + engines: {node: '>=18'} + hasBin: true + escalade@3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} @@ -7575,6 +8078,9 @@ packages: resolution: {integrity: sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==} engines: {node: '>= 0.10.0'} + exsolve@1.0.2: + resolution: {integrity: sha512-ZEcIMbthn2zeX4/wD/DLxDUjuCltHXT8Htvm/JFlTkdYgWh2+HGppgwwNUnIVxzxP7yJOPtuBAec0dLx6lVY8w==} + extend-shallow@2.0.1: resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} engines: {node: '>=0.10.0'} @@ -7655,6 +8161,14 @@ packages: picomatch: optional: true + fdir@6.4.3: + resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + figures@3.2.0: resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} engines: {node: '>=8'} @@ -8304,6 +8818,9 @@ packages: is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + is-arrayish@0.3.2: + resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + is-async-function@2.0.0: resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} engines: {node: '>= 0.4'} @@ -8768,6 +9285,10 @@ packages: resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} hasBin: true + jiti@2.4.2: + resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} + hasBin: true + jju@1.4.0: resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} @@ -9518,6 +10039,11 @@ packages: engines: {node: '>=16.13'} hasBin: true + miniflare@3.20250224.0: + resolution: {integrity: sha512-DyLxzhHCQ9UWDceqEsT7tmw8ZTSAhb1yKUqUi5VDmSxsIocKi4y5kvMijw9ELK8+tq/CiCp/RQxwRNZRJD8Xbg==} + engines: {node: '>=16.13'} + hasBin: true + minimalistic-assert@1.0.1: resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} @@ -9708,8 +10234,8 @@ packages: nwsapi@2.2.13: resolution: {integrity: sha512-cTGB9ptp9dY9A5VbMSe7fQBcl/tt22Vcqdq8+eN93rblOuE0aCFu4aZ2vMwct/2t+lFnosm8RkQW1I0Omb1UtQ==} - nx@20.3.0: - resolution: {integrity: sha512-Nzi4k7tV22zwO2iBLk+pHxorLEWPJpPrVCACtz0SQ63j/LiAgfhoqruJO+VU+V+E9qdyPsvmqIL/Iaf/GRQlqA==} + nx@20.5.0: + resolution: {integrity: sha512-KuAzhTj1NHu3iOVsTBrzu7cboO69UgwzUMoAb8KfszV5FwQD5dARrkR7Ew4NZzFdB+arUr2rvo1ik9f1O19keg==} hasBin: true peerDependencies: '@swc-node/register': ^1.8.0 @@ -9772,6 +10298,9 @@ packages: ohash@1.1.4: resolution: {integrity: sha512-FlDryZAahJmEF3VR3w1KogSEdWX3WhA5GPakFx4J81kEAiHyLMpdLLElS8n8dfNadMgAne/MywcvmogzscVt4g==} + ohash@2.0.11: + resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} + on-exit-leak-free@2.1.2: resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} engines: {node: '>=14.0.0'} @@ -10742,12 +11271,17 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + rollup@4.34.9: + resolution: {integrity: sha512-nF5XYqWWp9hx/LrpC8sZvvvmq0TeTjQgaZHYmAgwysT9nh8sWnZhBnM8ZyVbbJFIQBLwHDNoMqsBZBbUo4U8sQ==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + rrweb-cssom@0.7.1: resolution: {integrity: sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==} - rsbuild-plugin-dts@0.4.0: - resolution: {integrity: sha512-Yjr+6iSY/TgV2jd+bY8J0wFe3RSBZaj766ygIMmILBacWUmaxnyIXnXjiIR3KDO7fxSwUYZzqqvpSgrRoVCk6g==} - engines: {node: '>=16.0.0'} + rsbuild-plugin-dts@0.5.3: + resolution: {integrity: sha512-NLy2oKyStcM89CwSdgQUu10BlNTpZieshGj7p7w/sge9VM7aADp8mUqo86bDKX4ITMMACLTO6Q/VQmp9B/1tMg==} + engines: {node: '>=16.7.0'} peerDependencies: '@microsoft/api-extractor': ^7 '@rsbuild/core': 1.x @@ -10979,6 +11513,11 @@ packages: engines: {node: '>=10'} hasBin: true + semver@7.7.1: + resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} + engines: {node: '>=10'} + hasBin: true + send@0.18.0: resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} engines: {node: '>= 0.8.0'} @@ -11046,6 +11585,10 @@ packages: shallowequal@1.1.0: resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==} + sharp@0.33.5: + resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + shebang-command@1.2.0: resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} engines: {node: '>=0.10.0'} @@ -11082,6 +11625,9 @@ packages: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} + simple-swizzle@0.2.2: + resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + sinon@18.0.1: resolution: {integrity: sha512-a2N2TDY1uGviajJ6r4D1CyRAkzE9NNVlYOV1wX5xQDuAk0ONgzgRl0EjCQuRCPxOwp13ghsMwt9Gdldujs39qw==} @@ -11456,6 +12002,10 @@ packages: resolution: {integrity: sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew==} engines: {node: '>=12.0.0'} + tinyglobby@0.2.12: + resolution: {integrity: sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==} + engines: {node: '>=12.0.0'} + tinypool@1.0.2: resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==} engines: {node: ^18.0.0 || >=20.0.0} @@ -11595,8 +12145,8 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - tsup@8.3.6: - resolution: {integrity: sha512-XkVtlDV/58S9Ye0JxUUTcrQk4S+EqlOHKzg6Roa62rdjL1nGWNUstG0xgI4vanHdfIpjP448J8vlN0oK6XOJ5g==} + tsup@8.4.0: + resolution: {integrity: sha512-b+eZbPCjz10fRryaAA7C8xlIHnf8VnsaRqydheLIqwG/Mcpfk8Z5zp3HayX7GaTygkigHl5cBUs+IhcySiIexQ==} engines: {node: '>=18'} hasBin: true peerDependencies: @@ -11696,6 +12246,11 @@ packages: engines: {node: '>=14.17'} hasBin: true + typescript@5.8.2: + resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==} + engines: {node: '>=14.17'} + hasBin: true + ufo@1.5.4: resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==} @@ -11728,6 +12283,9 @@ packages: unenv@2.0.0-rc.0: resolution: {integrity: sha512-H0kl2w8jFL/FAk0xvjVing4bS3jd//mbg1QChDnn58l9Sc5RtduaKmLAL8n+eBw5jJo8ZjYV7CrEGage5LAOZQ==} + unenv@2.0.0-rc.8: + resolution: {integrity: sha512-wj/lN45LvZ4Uz95rti6DC5wg56eocAwA8KYzExk2SN01iuAb9ayzMwN13Kd3EG2eBXu27PzgMIXLTwWfSczKfw==} + unicode-canonical-property-names-ecmascript@2.0.0: resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} engines: {node: '>=4'} @@ -11924,6 +12482,11 @@ packages: engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true + vite-node@3.0.8: + resolution: {integrity: sha512-6PhR4H9VGlcwXZ+KWCdMqbtG649xCPZqfI9j2PsK1FcXgEzro5bGHcVKFCTqPLaNKZES8Evqv4LwvZARsq5qlg==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + vite-plugin-solid@2.11.2: resolution: {integrity: sha512-/OXVasW5OIRSFXnqzMgm8X3hPvf+JTbGecjQhmk7QnbDFq4hqdLssuYAWw9GsJGfzUPiMHM3ME2Y2XHPsTWmkw==} peerDependencies: @@ -12074,6 +12637,34 @@ packages: jsdom: optional: true + vitest@3.0.8: + resolution: {integrity: sha512-dfqAsNqRGUc8hB9OVR2P0w8PZPEckti2+5rdZip0WIz9WW0MnImJ8XiR61QhqLa92EQzKP2uPkzenKOAHyEIbA==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@types/debug': ^4.1.12 + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + '@vitest/browser': 3.0.8 + '@vitest/ui': 3.0.8 + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@types/debug': + optional: true + '@types/node': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + vlq@1.0.1: resolution: {integrity: sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==} @@ -12230,6 +12821,11 @@ packages: engines: {node: '>=16'} hasBin: true + workerd@1.20250224.0: + resolution: {integrity: sha512-NntMg1d9SSkbS4vGdjV5NZxe6FUrvJXY7UiQD7fBtCRVpoPpqz9bVgTq86zalMm+vz64lftzabKT4ka4Y9hejQ==} + engines: {node: '>=16'} + hasBin: true + workspace-tools@0.36.4: resolution: {integrity: sha512-v0UFVvw9BjHtRu2Dau5PEJKkuG8u4jPlpXZQWjSz9XgbSutpPURqtO2P0hp3cVmQVATh8lkMFCewFgJuDnyC/w==} @@ -12243,6 +12839,16 @@ packages: '@cloudflare/workers-types': optional: true + wrangler@3.114.0: + resolution: {integrity: sha512-cY0HxgU5yuc24tE1Y4KD2n9UzYYEx+9lSL7p/Sqj18SgDfwyiMPY/FryXQAPYLuD/S+dxArRQyeEkFSokIr75Q==} + engines: {node: '>=16.17.0'} + hasBin: true + peerDependencies: + '@cloudflare/workers-types': ^4.20250224.0 + peerDependenciesMeta: + '@cloudflare/workers-types': + optional: true + wrap-ansi@6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} engines: {node: '>=8'} @@ -12422,9 +13028,15 @@ packages: resolution: {integrity: sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==} engines: {node: '>=18'} + youch@3.2.3: + resolution: {integrity: sha512-ZBcWz/uzZaQVdCvfV4uk616Bbpf2ee+F/AvuKDR5EwX/Y4v06xWdtMluqTD7+KlZdM93lLm9gMZYo0sKBS0pgw==} + youch@3.3.4: resolution: {integrity: sha512-UeVBXie8cA35DS6+nBkls68xaBBXCye0CNznrhszZjTbRVnJKQuNsyLKBTTL4ln1o1rh2PKtv35twV7irj5SEg==} + zod@3.22.3: + resolution: {integrity: sha512-EjIevzuJRiRPbVH4mGc8nApb/lVLKVpmUhAaR5R5doKGfAnGJ6Gr3CViAVjP+4FWSxCsybeWQdcgCtbX+7oZug==} + zod@3.24.1: resolution: {integrity: sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==} @@ -12440,6 +13052,45 @@ snapshots: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 + '@ast-grep/napi-darwin-arm64@0.35.0': + optional: true + + '@ast-grep/napi-darwin-x64@0.35.0': + optional: true + + '@ast-grep/napi-linux-arm64-gnu@0.35.0': + optional: true + + '@ast-grep/napi-linux-arm64-musl@0.35.0': + optional: true + + '@ast-grep/napi-linux-x64-gnu@0.35.0': + optional: true + + '@ast-grep/napi-linux-x64-musl@0.35.0': + optional: true + + '@ast-grep/napi-win32-arm64-msvc@0.35.0': + optional: true + + '@ast-grep/napi-win32-ia32-msvc@0.35.0': + optional: true + + '@ast-grep/napi-win32-x64-msvc@0.35.0': + optional: true + + '@ast-grep/napi@0.35.0': + optionalDependencies: + '@ast-grep/napi-darwin-arm64': 0.35.0 + '@ast-grep/napi-darwin-x64': 0.35.0 + '@ast-grep/napi-linux-arm64-gnu': 0.35.0 + '@ast-grep/napi-linux-arm64-musl': 0.35.0 + '@ast-grep/napi-linux-x64-gnu': 0.35.0 + '@ast-grep/napi-linux-x64-musl': 0.35.0 + '@ast-grep/napi-win32-arm64-msvc': 0.35.0 + '@ast-grep/napi-win32-ia32-msvc': 0.35.0 + '@ast-grep/napi-win32-x64-msvc': 0.35.0 + '@aws-crypto/crc32@5.2.0': dependencies: '@aws-crypto/util': 5.2.0 @@ -15324,12 +15975,12 @@ snapshots: - supports-color - utf-8-validate - '@callstack/repack@4.0.0(@react-native-community/cli-debugger-ui@15.0.1)(@react-native-community/cli-server-api@15.0.1)(@react-native-community/cli-types@15.0.1)(@react-native-community/cli@15.0.1(typescript@5.7.2))(encoding@0.1.13)(react-native@0.74.1(@babel/core@7.26.0)(@babel/preset-env@7.23.2(@babel/core@7.26.0))(@types/react@18.3.11)(encoding@0.1.13)(react@18.2.0))(type-fest@4.35.0)(webpack-dev-server@5.0.4(webpack@5.91.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.24.2)))(webpack@5.91.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.24.2))': + '@callstack/repack@4.0.0(@react-native-community/cli-debugger-ui@15.0.1)(@react-native-community/cli-server-api@15.0.1)(@react-native-community/cli-types@15.0.1)(@react-native-community/cli@15.0.1(typescript@5.8.2))(encoding@0.1.13)(react-native@0.74.1(@babel/core@7.26.0)(@babel/preset-env@7.23.2(@babel/core@7.26.0))(@types/react@18.3.11)(encoding@0.1.13)(react@18.2.0))(type-fest@4.35.0)(webpack-dev-server@5.0.4(webpack@5.91.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.25.0)))(webpack@5.91.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.25.0))': dependencies: '@callstack/repack-dev-server': 4.0.0(@react-native-community/cli-debugger-ui@15.0.1)(@react-native-community/cli-server-api@15.0.1)(encoding@0.1.13) '@discoveryjs/json-ext': 0.5.7 - '@pmmmwh/react-refresh-webpack-plugin': 0.5.13(react-refresh@0.14.2)(type-fest@4.35.0)(webpack-dev-server@5.0.4(webpack@5.91.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.24.2)))(webpack@5.91.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.24.2)) - '@react-native-community/cli': 15.0.1(typescript@5.7.2) + '@pmmmwh/react-refresh-webpack-plugin': 0.5.13(react-refresh@0.14.2)(type-fest@4.35.0)(webpack-dev-server@5.0.4(webpack@5.91.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.25.0)))(webpack@5.91.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.25.0)) + '@react-native-community/cli': 15.0.1(typescript@5.8.2) '@react-native-community/cli-types': 15.0.1 colorette: 1.4.0 dedent: 0.7.0 @@ -15351,7 +16002,7 @@ snapshots: schema-utils: 3.3.0 shallowequal: 1.1.0 tapable: 2.2.1 - webpack: 5.91.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.24.2) + webpack: 5.91.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.25.0) transitivePeerDependencies: - '@react-native-community/cli-debugger-ui' - '@react-native-community/cli-server-api' @@ -15381,40 +16032,78 @@ snapshots: dependencies: mime: 3.0.0 - '@cloudflare/vitest-pool-workers@0.6.7(@cloudflare/workers-types@4.20250124.3)(@vitest/runner@3.0.6)(@vitest/snapshot@3.0.6)(vitest@2.1.8(@types/node@22.13.0)(jsdom@25.0.1)(msw@2.7.0(@types/node@22.13.0)(typescript@5.7.2))(sass-embedded@1.83.0)(terser@5.31.0))': + '@cloudflare/unenv-preset@2.0.0(unenv@2.0.0-rc.8)(workerd@1.20250224.0)': dependencies: - '@vitest/runner': 3.0.6 - '@vitest/snapshot': 3.0.6 + unenv: 2.0.0-rc.8 + optionalDependencies: + workerd: 1.20250224.0 + + '@cloudflare/vitest-pool-workers@0.7.7(@cloudflare/workers-types@4.20250124.3)(@vitest/runner@3.0.8)(@vitest/snapshot@3.0.8)(vitest@2.1.8(@types/node@22.13.0)(jsdom@25.0.1)(msw@2.7.0(@types/node@22.13.0)(typescript@5.7.2))(sass-embedded@1.83.0)(terser@5.31.0))': + dependencies: + '@vitest/runner': 3.0.8 + '@vitest/snapshot': 3.0.8 birpc: 0.2.14 cjs-module-lexer: 1.3.1 devalue: 4.3.3 esbuild: 0.17.19 - miniflare: 3.20250124.0 - semver: 7.6.3 + miniflare: 3.20250224.0 + semver: 7.7.1 vitest: 2.1.8(@types/node@22.13.0)(jsdom@25.0.1)(msw@2.7.0(@types/node@22.13.0)(typescript@5.7.2))(sass-embedded@1.83.0)(terser@5.31.0) - wrangler: 3.105.1(@cloudflare/workers-types@4.20250124.3) + wrangler: 3.114.0(@cloudflare/workers-types@4.20250124.3) + zod: 3.24.1 + transitivePeerDependencies: + - '@cloudflare/workers-types' + - bufferutil + - utf-8-validate + + '@cloudflare/vitest-pool-workers@0.7.7(@vitest/runner@3.0.8)(@vitest/snapshot@3.0.8)(vitest@3.0.8(@types/debug@4.1.12)(@types/node@22.13.5)(jiti@2.4.2)(jsdom@25.0.1)(msw@2.7.0(@types/node@22.13.5)(typescript@5.8.2))(sass-embedded@1.83.0)(terser@5.31.0)(yaml@2.6.1))': + dependencies: + '@vitest/runner': 3.0.8 + '@vitest/snapshot': 3.0.8 + birpc: 0.2.14 + cjs-module-lexer: 1.3.1 + devalue: 4.3.3 + esbuild: 0.17.19 + miniflare: 3.20250224.0 + semver: 7.7.1 + vitest: 3.0.8(@types/debug@4.1.12)(@types/node@22.13.5)(jiti@2.4.2)(jsdom@25.0.1)(msw@2.7.0(@types/node@22.13.5)(typescript@5.8.2))(sass-embedded@1.83.0)(terser@5.31.0)(yaml@2.6.1) + wrangler: 3.114.0(@cloudflare/workers-types@4.20250124.3) zod: 3.24.1 transitivePeerDependencies: - '@cloudflare/workers-types' - bufferutil - - supports-color - utf-8-validate '@cloudflare/workerd-darwin-64@1.20250124.0': optional: true + '@cloudflare/workerd-darwin-64@1.20250224.0': + optional: true + '@cloudflare/workerd-darwin-arm64@1.20250124.0': optional: true + '@cloudflare/workerd-darwin-arm64@1.20250224.0': + optional: true + '@cloudflare/workerd-linux-64@1.20250124.0': optional: true + '@cloudflare/workerd-linux-64@1.20250224.0': + optional: true + '@cloudflare/workerd-linux-arm64@1.20250124.0': optional: true + '@cloudflare/workerd-linux-arm64@1.20250224.0': + optional: true + '@cloudflare/workerd-windows-64@1.20250124.0': optional: true + '@cloudflare/workerd-windows-64@1.20250224.0': + optional: true + '@cloudflare/workers-types@4.20250124.3': {} '@corvu/utils@0.4.2(solid-js@1.9.3)': @@ -15459,6 +16148,9 @@ snapshots: '@esbuild/aix-ppc64@0.24.2': optional: true + '@esbuild/aix-ppc64@0.25.0': + optional: true + '@esbuild/android-arm64@0.17.19': optional: true @@ -15468,6 +16160,9 @@ snapshots: '@esbuild/android-arm64@0.24.2': optional: true + '@esbuild/android-arm64@0.25.0': + optional: true + '@esbuild/android-arm@0.17.19': optional: true @@ -15477,6 +16172,9 @@ snapshots: '@esbuild/android-arm@0.24.2': optional: true + '@esbuild/android-arm@0.25.0': + optional: true + '@esbuild/android-x64@0.17.19': optional: true @@ -15486,6 +16184,9 @@ snapshots: '@esbuild/android-x64@0.24.2': optional: true + '@esbuild/android-x64@0.25.0': + optional: true + '@esbuild/darwin-arm64@0.17.19': optional: true @@ -15495,6 +16196,9 @@ snapshots: '@esbuild/darwin-arm64@0.24.2': optional: true + '@esbuild/darwin-arm64@0.25.0': + optional: true + '@esbuild/darwin-x64@0.17.19': optional: true @@ -15504,6 +16208,9 @@ snapshots: '@esbuild/darwin-x64@0.24.2': optional: true + '@esbuild/darwin-x64@0.25.0': + optional: true + '@esbuild/freebsd-arm64@0.17.19': optional: true @@ -15513,6 +16220,9 @@ snapshots: '@esbuild/freebsd-arm64@0.24.2': optional: true + '@esbuild/freebsd-arm64@0.25.0': + optional: true + '@esbuild/freebsd-x64@0.17.19': optional: true @@ -15522,6 +16232,9 @@ snapshots: '@esbuild/freebsd-x64@0.24.2': optional: true + '@esbuild/freebsd-x64@0.25.0': + optional: true + '@esbuild/linux-arm64@0.17.19': optional: true @@ -15531,6 +16244,9 @@ snapshots: '@esbuild/linux-arm64@0.24.2': optional: true + '@esbuild/linux-arm64@0.25.0': + optional: true + '@esbuild/linux-arm@0.17.19': optional: true @@ -15540,6 +16256,9 @@ snapshots: '@esbuild/linux-arm@0.24.2': optional: true + '@esbuild/linux-arm@0.25.0': + optional: true + '@esbuild/linux-ia32@0.17.19': optional: true @@ -15549,6 +16268,9 @@ snapshots: '@esbuild/linux-ia32@0.24.2': optional: true + '@esbuild/linux-ia32@0.25.0': + optional: true + '@esbuild/linux-loong64@0.17.19': optional: true @@ -15558,6 +16280,9 @@ snapshots: '@esbuild/linux-loong64@0.24.2': optional: true + '@esbuild/linux-loong64@0.25.0': + optional: true + '@esbuild/linux-mips64el@0.17.19': optional: true @@ -15567,6 +16292,9 @@ snapshots: '@esbuild/linux-mips64el@0.24.2': optional: true + '@esbuild/linux-mips64el@0.25.0': + optional: true + '@esbuild/linux-ppc64@0.17.19': optional: true @@ -15576,6 +16304,9 @@ snapshots: '@esbuild/linux-ppc64@0.24.2': optional: true + '@esbuild/linux-ppc64@0.25.0': + optional: true + '@esbuild/linux-riscv64@0.17.19': optional: true @@ -15585,6 +16316,9 @@ snapshots: '@esbuild/linux-riscv64@0.24.2': optional: true + '@esbuild/linux-riscv64@0.25.0': + optional: true + '@esbuild/linux-s390x@0.17.19': optional: true @@ -15594,6 +16328,9 @@ snapshots: '@esbuild/linux-s390x@0.24.2': optional: true + '@esbuild/linux-s390x@0.25.0': + optional: true + '@esbuild/linux-x64@0.17.19': optional: true @@ -15603,9 +16340,15 @@ snapshots: '@esbuild/linux-x64@0.24.2': optional: true + '@esbuild/linux-x64@0.25.0': + optional: true + '@esbuild/netbsd-arm64@0.24.2': optional: true + '@esbuild/netbsd-arm64@0.25.0': + optional: true + '@esbuild/netbsd-x64@0.17.19': optional: true @@ -15615,9 +16358,15 @@ snapshots: '@esbuild/netbsd-x64@0.24.2': optional: true + '@esbuild/netbsd-x64@0.25.0': + optional: true + '@esbuild/openbsd-arm64@0.24.2': optional: true + '@esbuild/openbsd-arm64@0.25.0': + optional: true + '@esbuild/openbsd-x64@0.17.19': optional: true @@ -15627,6 +16376,9 @@ snapshots: '@esbuild/openbsd-x64@0.24.2': optional: true + '@esbuild/openbsd-x64@0.25.0': + optional: true + '@esbuild/sunos-x64@0.17.19': optional: true @@ -15636,6 +16388,9 @@ snapshots: '@esbuild/sunos-x64@0.24.2': optional: true + '@esbuild/sunos-x64@0.25.0': + optional: true + '@esbuild/win32-arm64@0.17.19': optional: true @@ -15645,6 +16400,9 @@ snapshots: '@esbuild/win32-arm64@0.24.2': optional: true + '@esbuild/win32-arm64@0.25.0': + optional: true + '@esbuild/win32-ia32@0.17.19': optional: true @@ -15654,6 +16412,9 @@ snapshots: '@esbuild/win32-ia32@0.24.2': optional: true + '@esbuild/win32-ia32@0.25.0': + optional: true + '@esbuild/win32-x64@0.17.19': optional: true @@ -15663,6 +16424,9 @@ snapshots: '@esbuild/win32-x64@0.24.2': optional: true + '@esbuild/win32-x64@0.25.0': + optional: true + '@eslint-community/eslint-utils@4.4.0(eslint@8.57.0)': dependencies: eslint: 8.57.0 @@ -16077,26 +16841,101 @@ snapshots: hono: 4.6.3 valibot: 0.42.1(typescript@5.6.3) - '@hono/vite-dev-server@0.18.1(hono@4.6.3)(miniflare@3.20250124.0)(wrangler@3.105.1(@cloudflare/workers-types@4.20250124.3))': + '@hono/vite-dev-server@0.18.1(hono@4.6.3)(miniflare@3.20250224.0)(wrangler@3.114.0)': dependencies: '@hono/node-server': 1.13.4(hono@4.6.3) hono: 4.6.3 minimatch: 9.0.4 optionalDependencies: - miniflare: 3.20250124.0 - wrangler: 3.105.1(@cloudflare/workers-types@4.20250124.3) + miniflare: 3.20250224.0 + wrangler: 3.114.0(@cloudflare/workers-types@4.20250124.3) '@humanwhocodes/config-array@0.11.14': dependencies: - '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.7 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color + '@humanwhocodes/object-schema': 2.0.3 + debug: 4.3.7 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/object-schema@2.0.3': {} + + '@img/sharp-darwin-arm64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.0.4 + optional: true + + '@img/sharp-darwin-x64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.0.4 + optional: true + + '@img/sharp-libvips-darwin-arm64@1.0.4': + optional: true + + '@img/sharp-libvips-darwin-x64@1.0.4': + optional: true + + '@img/sharp-libvips-linux-arm64@1.0.4': + optional: true + + '@img/sharp-libvips-linux-arm@1.0.5': + optional: true + + '@img/sharp-libvips-linux-s390x@1.0.4': + optional: true + + '@img/sharp-libvips-linux-x64@1.0.4': + optional: true + + '@img/sharp-libvips-linuxmusl-arm64@1.0.4': + optional: true + + '@img/sharp-libvips-linuxmusl-x64@1.0.4': + optional: true + + '@img/sharp-linux-arm64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.0.4 + optional: true + + '@img/sharp-linux-arm@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.0.5 + optional: true + + '@img/sharp-linux-s390x@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.0.4 + optional: true + + '@img/sharp-linux-x64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.0.4 + optional: true + + '@img/sharp-linuxmusl-arm64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 + optional: true + + '@img/sharp-linuxmusl-x64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.0.4 + optional: true + + '@img/sharp-wasm32@0.33.5': + dependencies: + '@emnapi/runtime': 1.3.1 + optional: true - '@humanwhocodes/module-importer@1.0.1': {} + '@img/sharp-win32-ia32@0.33.5': + optional: true - '@humanwhocodes/object-schema@2.0.3': {} + '@img/sharp-win32-x64@0.33.5': + optional: true '@inquirer/confirm@5.1.6(@types/node@20.16.10)': dependencies: @@ -16216,7 +17055,7 @@ snapshots: jest-util: 29.7.0 slash: 3.0.0 - '@jest/core@29.7.0(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.0)(typescript@5.0.4))': + '@jest/core@29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.0)(typescript@5.0.4))': dependencies: '@jest/console': 29.7.0 '@jest/reporters': 29.7.0 @@ -16230,7 +17069,7 @@ snapshots: exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@22.13.1)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.0)(typescript@5.0.4)) + jest-config: 29.7.0(@types/node@22.13.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.0)(typescript@5.0.4)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -16251,7 +17090,7 @@ snapshots: - supports-color - ts-node - '@jest/core@29.7.0(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@4.8.4))': + '@jest/core@29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@4.8.4))': dependencies: '@jest/console': 29.7.0 '@jest/reporters': 29.7.0 @@ -16265,7 +17104,7 @@ snapshots: exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@22.13.1)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@4.8.4)) + jest-config: 29.7.0(@types/node@22.13.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@4.8.4)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -16286,7 +17125,7 @@ snapshots: - supports-color - ts-node - '@jest/core@29.7.0(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.0.4))': + '@jest/core@29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.0.4))': dependencies: '@jest/console': 29.7.0 '@jest/reporters': 29.7.0 @@ -16300,7 +17139,7 @@ snapshots: exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@22.13.1)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.0.4)) + jest-config: 29.7.0(@types/node@22.13.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.0.4)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -16321,7 +17160,7 @@ snapshots: - supports-color - ts-node - '@jest/core@29.7.0(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.7.2))': + '@jest/core@29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.8.2))': dependencies: '@jest/console': 29.7.0 '@jest/reporters': 29.7.0 @@ -16335,7 +17174,7 @@ snapshots: exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@22.13.1)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.7.2)) + jest-config: 29.7.0(@types/node@22.13.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.8.2)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -16569,11 +17408,11 @@ snapshots: '@lukeed/ms@2.0.2': {} - '@mdx-js/loader@2.3.0(webpack@5.91.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.24.2))': + '@mdx-js/loader@2.3.0(webpack@5.91.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.25.0))': dependencies: '@mdx-js/mdx': 2.3.0 source-map: 0.7.4 - webpack: 5.91.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.24.2) + webpack: 5.91.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.25.0) transitivePeerDependencies: - supports-color @@ -16680,19 +17519,19 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.15.0 - '@nx/devkit@20.3.0(nx@20.3.0(@swc-node/register@1.10.9(@swc/core@1.7.42(@swc/helpers@0.5.15))(@swc/types@0.1.13)(typescript@5.7.2))(@swc/core@1.7.42(@swc/helpers@0.5.15)))': + '@nx/devkit@20.5.0(nx@20.5.0(@swc-node/register@1.10.9(@swc/core@1.7.42(@swc/helpers@0.5.15))(@swc/types@0.1.13)(typescript@5.8.2))(@swc/core@1.7.42(@swc/helpers@0.5.15)))': dependencies: ejs: 3.1.10 enquirer: 2.3.6 ignore: 5.3.2 minimatch: 9.0.3 - nx: 20.3.0(@swc-node/register@1.10.9(@swc/core@1.7.42(@swc/helpers@0.5.15))(@swc/types@0.1.13)(typescript@5.7.2))(@swc/core@1.7.42(@swc/helpers@0.5.15)) + nx: 20.5.0(@swc-node/register@1.10.9(@swc/core@1.7.42(@swc/helpers@0.5.15))(@swc/types@0.1.13)(typescript@5.8.2))(@swc/core@1.7.42(@swc/helpers@0.5.15)) semver: 7.6.3 tmp: 0.2.3 tslib: 2.8.1 yargs-parser: 21.1.1 - '@nx/js@20.3.0(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.7.42(@swc/helpers@0.5.15))(@swc/types@0.1.13)(typescript@5.7.2))(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(nx@20.3.0(@swc-node/register@1.10.9(@swc/core@1.7.42(@swc/helpers@0.5.15))(@swc/types@0.1.13)(typescript@5.7.2))(@swc/core@1.7.42(@swc/helpers@0.5.15)))(typescript@5.7.2)': + '@nx/js@20.5.0(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.7.42(@swc/helpers@0.5.15))(@swc/types@0.1.13)(typescript@5.8.2))(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(nx@20.5.0(@swc-node/register@1.10.9(@swc/core@1.7.42(@swc/helpers@0.5.15))(@swc/types@0.1.13)(typescript@5.8.2))(@swc/core@1.7.42(@swc/helpers@0.5.15)))(typescript@5.8.2)': dependencies: '@babel/core': 7.26.0 '@babel/plugin-proposal-decorators': 7.25.9(@babel/core@7.26.0) @@ -16701,11 +17540,11 @@ snapshots: '@babel/preset-env': 7.26.0(@babel/core@7.26.0) '@babel/preset-typescript': 7.26.0(@babel/core@7.26.0) '@babel/runtime': 7.26.0 - '@nx/devkit': 20.3.0(nx@20.3.0(@swc-node/register@1.10.9(@swc/core@1.7.42(@swc/helpers@0.5.15))(@swc/types@0.1.13)(typescript@5.7.2))(@swc/core@1.7.42(@swc/helpers@0.5.15))) - '@nx/workspace': 20.3.0(@swc-node/register@1.10.9(@swc/core@1.7.42(@swc/helpers@0.5.15))(@swc/types@0.1.13)(typescript@5.7.2))(@swc/core@1.7.42(@swc/helpers@0.5.15)) + '@nx/devkit': 20.5.0(nx@20.5.0(@swc-node/register@1.10.9(@swc/core@1.7.42(@swc/helpers@0.5.15))(@swc/types@0.1.13)(typescript@5.8.2))(@swc/core@1.7.42(@swc/helpers@0.5.15))) + '@nx/workspace': 20.5.0(@swc-node/register@1.10.9(@swc/core@1.7.42(@swc/helpers@0.5.15))(@swc/types@0.1.13)(typescript@5.8.2))(@swc/core@1.7.42(@swc/helpers@0.5.15)) '@zkochan/js-yaml': 0.0.7 babel-plugin-const-enum: 1.2.0(@babel/core@7.26.0) - babel-plugin-macros: 2.8.0 + babel-plugin-macros: 3.1.0 babel-plugin-transform-typescript-metadata: 0.3.2(@babel/core@7.26.0)(@babel/traverse@7.25.9) chalk: 4.1.2 columnify: 1.6.0 @@ -16714,14 +17553,15 @@ snapshots: ignore: 5.3.2 js-tokens: 4.0.0 jsonc-parser: 3.2.0 - minimatch: 9.0.3 npm-package-arg: 11.0.1 npm-run-path: 4.0.1 ora: 5.3.0 + picocolors: 1.1.1 + picomatch: 4.0.2 semver: 7.6.3 source-map-support: 0.5.19 tinyglobby: 0.2.10 - ts-node: 10.9.1(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.7.2) + ts-node: 10.9.1(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.8.2) tsconfig-paths: 4.2.0 tslib: 2.8.1 transitivePeerDependencies: @@ -16735,42 +17575,42 @@ snapshots: - supports-color - typescript - '@nx/nx-darwin-arm64@20.3.0': + '@nx/nx-darwin-arm64@20.5.0': optional: true - '@nx/nx-darwin-x64@20.3.0': + '@nx/nx-darwin-x64@20.5.0': optional: true - '@nx/nx-freebsd-x64@20.3.0': + '@nx/nx-freebsd-x64@20.5.0': optional: true - '@nx/nx-linux-arm-gnueabihf@20.3.0': + '@nx/nx-linux-arm-gnueabihf@20.5.0': optional: true - '@nx/nx-linux-arm64-gnu@20.3.0': + '@nx/nx-linux-arm64-gnu@20.5.0': optional: true - '@nx/nx-linux-arm64-musl@20.3.0': + '@nx/nx-linux-arm64-musl@20.5.0': optional: true - '@nx/nx-linux-x64-gnu@20.3.0': + '@nx/nx-linux-x64-gnu@20.5.0': optional: true - '@nx/nx-linux-x64-musl@20.3.0': + '@nx/nx-linux-x64-musl@20.5.0': optional: true - '@nx/nx-win32-arm64-msvc@20.3.0': + '@nx/nx-win32-arm64-msvc@20.5.0': optional: true - '@nx/nx-win32-x64-msvc@20.3.0': + '@nx/nx-win32-x64-msvc@20.5.0': optional: true - '@nx/workspace@20.3.0(@swc-node/register@1.10.9(@swc/core@1.7.42(@swc/helpers@0.5.15))(@swc/types@0.1.13)(typescript@5.7.2))(@swc/core@1.7.42(@swc/helpers@0.5.15))': + '@nx/workspace@20.5.0(@swc-node/register@1.10.9(@swc/core@1.7.42(@swc/helpers@0.5.15))(@swc/types@0.1.13)(typescript@5.8.2))(@swc/core@1.7.42(@swc/helpers@0.5.15))': dependencies: - '@nx/devkit': 20.3.0(nx@20.3.0(@swc-node/register@1.10.9(@swc/core@1.7.42(@swc/helpers@0.5.15))(@swc/types@0.1.13)(typescript@5.7.2))(@swc/core@1.7.42(@swc/helpers@0.5.15))) + '@nx/devkit': 20.5.0(nx@20.5.0(@swc-node/register@1.10.9(@swc/core@1.7.42(@swc/helpers@0.5.15))(@swc/types@0.1.13)(typescript@5.8.2))(@swc/core@1.7.42(@swc/helpers@0.5.15))) chalk: 4.1.2 enquirer: 2.3.6 - nx: 20.3.0(@swc-node/register@1.10.9(@swc/core@1.7.42(@swc/helpers@0.5.15))(@swc/types@0.1.13)(typescript@5.7.2))(@swc/core@1.7.42(@swc/helpers@0.5.15)) + nx: 20.5.0(@swc-node/register@1.10.9(@swc/core@1.7.42(@swc/helpers@0.5.15))(@swc/types@0.1.13)(typescript@5.8.2))(@swc/core@1.7.42(@swc/helpers@0.5.15)) tslib: 2.8.1 yargs-parser: 21.1.1 transitivePeerDependencies: @@ -16825,7 +17665,7 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@pmmmwh/react-refresh-webpack-plugin@0.5.13(react-refresh@0.14.2)(type-fest@4.35.0)(webpack-dev-server@5.0.4(webpack@5.91.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.24.2)))(webpack@5.91.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.24.2))': + '@pmmmwh/react-refresh-webpack-plugin@0.5.13(react-refresh@0.14.2)(type-fest@4.35.0)(webpack-dev-server@5.0.4(webpack@5.91.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.25.0)))(webpack@5.91.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.25.0))': dependencies: ansi-html-community: 0.0.8 core-js-pure: 3.37.1 @@ -16835,10 +17675,10 @@ snapshots: react-refresh: 0.14.2 schema-utils: 3.3.0 source-map: 0.7.4 - webpack: 5.91.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.24.2) + webpack: 5.91.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.25.0) optionalDependencies: type-fest: 4.35.0 - webpack-dev-server: 5.0.4(webpack@5.91.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.24.2)) + webpack-dev-server: 5.0.4(webpack@5.91.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.25.0)) '@protobufjs/aspromise@1.1.2': {} @@ -16946,11 +17786,11 @@ snapshots: transitivePeerDependencies: - typescript - '@react-native-community/cli-config@15.0.1(typescript@5.7.2)': + '@react-native-community/cli-config@15.0.1(typescript@5.8.2)': dependencies: '@react-native-community/cli-tools': 15.0.1 chalk: 4.1.2 - cosmiconfig: 9.0.0(typescript@5.7.2) + cosmiconfig: 9.0.0(typescript@5.8.2) deepmerge: 4.3.1 fast-glob: 3.3.2 joi: 17.11.0 @@ -17065,9 +17905,9 @@ snapshots: transitivePeerDependencies: - typescript - '@react-native-community/cli-doctor@15.0.1(typescript@5.7.2)': + '@react-native-community/cli-doctor@15.0.1(typescript@5.8.2)': dependencies: - '@react-native-community/cli-config': 15.0.1(typescript@5.7.2) + '@react-native-community/cli-config': 15.0.1(typescript@5.8.2) '@react-native-community/cli-platform-android': 15.0.1 '@react-native-community/cli-platform-apple': 15.0.1 '@react-native-community/cli-platform-ios': 15.0.1 @@ -17455,12 +18295,12 @@ snapshots: - typescript - utf-8-validate - '@react-native-community/cli@15.0.1(typescript@5.7.2)': + '@react-native-community/cli@15.0.1(typescript@5.8.2)': dependencies: '@react-native-community/cli-clean': 15.0.1 - '@react-native-community/cli-config': 15.0.1(typescript@5.7.2) + '@react-native-community/cli-config': 15.0.1(typescript@5.8.2) '@react-native-community/cli-debugger-ui': 15.0.1 - '@react-native-community/cli-doctor': 15.0.1(typescript@5.7.2) + '@react-native-community/cli-doctor': 15.0.1(typescript@5.8.2) '@react-native-community/cli-server-api': 15.0.1 '@react-native-community/cli-tools': 15.0.1 '@react-native-community/cli-types': 15.0.1 @@ -17479,7 +18319,7 @@ snapshots: - typescript - utf-8-validate - '@react-native-community/eslint-config@3.2.0(eslint@8.57.0)(jest@29.7.0(@types/node@22.13.1)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@4.8.4)))(prettier@2.8.8)(typescript@4.8.4)': + '@react-native-community/eslint-config@3.2.0(eslint@8.57.0)(jest@29.7.0(@types/node@22.13.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@4.8.4)))(prettier@2.8.8)(typescript@4.8.4)': dependencies: '@babel/core': 7.26.0 '@babel/eslint-parser': 7.24.5(@babel/core@7.26.0)(eslint@8.57.0) @@ -17490,7 +18330,7 @@ snapshots: eslint-config-prettier: 8.10.0(eslint@8.57.0) eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.0) eslint-plugin-ft-flow: 2.0.3(@babel/eslint-parser@7.24.5(@babel/core@7.26.0)(eslint@8.57.0))(eslint@8.57.0) - eslint-plugin-jest: 26.9.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@4.8.4))(eslint@8.57.0)(typescript@4.8.4))(eslint@8.57.0)(jest@29.7.0(@types/node@22.13.1)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@4.8.4)))(typescript@4.8.4) + eslint-plugin-jest: 26.9.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@4.8.4))(eslint@8.57.0)(typescript@4.8.4))(eslint@8.57.0)(jest@29.7.0(@types/node@22.13.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@4.8.4)))(typescript@4.8.4) eslint-plugin-prettier: 4.2.1(eslint-config-prettier@8.10.0(eslint@8.57.0))(eslint@8.57.0)(prettier@2.8.8) eslint-plugin-react: 7.34.1(eslint@8.57.0) eslint-plugin-react-hooks: 4.6.2(eslint@8.57.0) @@ -18065,18 +18905,18 @@ snapshots: - supports-color - utf-8-validate - '@react-native/eslint-config@0.74.83(eslint@8.57.0)(jest@29.7.0(@types/node@22.13.5)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.7.2)))(prettier@2.8.8)(typescript@5.7.2)': + '@react-native/eslint-config@0.74.83(eslint@8.57.0)(jest@29.7.0(@types/node@22.13.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.8.2)))(prettier@2.8.8)(typescript@5.8.2)': dependencies: '@babel/core': 7.26.0 '@babel/eslint-parser': 7.24.5(@babel/core@7.26.0)(eslint@8.57.0) '@react-native/eslint-plugin': 0.74.83 - '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.7.2))(eslint@8.57.0)(typescript@5.7.2) - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.7.2) + '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.8.2))(eslint@8.57.0)(typescript@5.8.2) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.8.2) eslint: 8.57.0 eslint-config-prettier: 8.10.0(eslint@8.57.0) eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.0) eslint-plugin-ft-flow: 2.0.3(@babel/eslint-parser@7.24.5(@babel/core@7.26.0)(eslint@8.57.0))(eslint@8.57.0) - eslint-plugin-jest: 26.9.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.7.2))(eslint@8.57.0)(typescript@5.7.2))(eslint@8.57.0)(jest@29.7.0(@types/node@22.13.5)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.7.2)))(typescript@5.7.2) + eslint-plugin-jest: 26.9.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.8.2))(eslint@8.57.0)(typescript@5.8.2))(eslint@8.57.0)(jest@29.7.0(@types/node@22.13.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.8.2)))(typescript@5.8.2) eslint-plugin-prettier: 4.2.1(eslint-config-prettier@8.10.0(eslint@8.57.0))(eslint@8.57.0)(prettier@2.8.8) eslint-plugin-react: 7.34.1(eslint@8.57.0) eslint-plugin-react-hooks: 4.6.2(eslint@8.57.0) @@ -18087,7 +18927,7 @@ snapshots: - supports-color - typescript - '@react-native/eslint-config@0.76.1(eslint@8.57.0)(jest@29.7.0(@types/node@22.13.5)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.0.4)))(prettier@2.8.8)(typescript@5.0.4)': + '@react-native/eslint-config@0.76.1(eslint@8.57.0)(jest@29.7.0(@types/node@22.13.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.0.4)))(prettier@2.8.8)(typescript@5.0.4)': dependencies: '@babel/core': 7.26.0 '@babel/eslint-parser': 7.25.9(@babel/core@7.26.0)(eslint@8.57.0) @@ -18098,7 +18938,7 @@ snapshots: eslint-config-prettier: 8.10.0(eslint@8.57.0) eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.0) eslint-plugin-ft-flow: 2.0.3(@babel/eslint-parser@7.25.9(@babel/core@7.26.0)(eslint@8.57.0))(eslint@8.57.0) - eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.0.4))(eslint@8.57.0)(typescript@5.0.4))(eslint@8.57.0)(jest@29.7.0(@types/node@22.13.5)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.0.4)))(typescript@5.0.4) + eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.0.4))(eslint@8.57.0)(typescript@5.0.4))(eslint@8.57.0)(jest@29.7.0(@types/node@22.13.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.0.4)))(typescript@5.0.4) eslint-plugin-react: 7.34.1(eslint@8.57.0) eslint-plugin-react-hooks: 4.6.2(eslint@8.57.0) eslint-plugin-react-native: 4.1.0(eslint@8.57.0) @@ -18109,7 +18949,7 @@ snapshots: - supports-color - typescript - '@react-native/eslint-config@0.77.0(eslint@8.57.0)(jest@29.7.0(@types/node@22.13.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.0)(typescript@5.0.4)))(prettier@2.8.8)(typescript@5.0.4)': + '@react-native/eslint-config@0.77.0(eslint@8.57.0)(jest@29.7.0(@types/node@22.13.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.0)(typescript@5.0.4)))(prettier@2.8.8)(typescript@5.0.4)': dependencies: '@babel/core': 7.26.0 '@babel/eslint-parser': 7.25.9(@babel/core@7.26.0)(eslint@8.57.0) @@ -18120,7 +18960,7 @@ snapshots: eslint-config-prettier: 8.10.0(eslint@8.57.0) eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.0) eslint-plugin-ft-flow: 2.0.3(@babel/eslint-parser@7.25.9(@babel/core@7.26.0)(eslint@8.57.0))(eslint@8.57.0) - eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.0.4))(eslint@8.57.0)(typescript@5.0.4))(eslint@8.57.0)(jest@29.7.0(@types/node@22.13.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.0)(typescript@5.0.4)))(typescript@5.0.4) + eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.0.4))(eslint@8.57.0)(typescript@5.0.4))(eslint@8.57.0)(jest@29.7.0(@types/node@22.13.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.0)(typescript@5.0.4)))(typescript@5.0.4) eslint-plugin-react: 7.34.1(eslint@8.57.0) eslint-plugin-react-hooks: 4.6.2(eslint@8.57.0) eslint-plugin-react-native: 4.1.0(eslint@8.57.0) @@ -18385,60 +19225,117 @@ snapshots: '@rollup/rollup-android-arm-eabi@4.32.1': optional: true + '@rollup/rollup-android-arm-eabi@4.34.9': + optional: true + '@rollup/rollup-android-arm64@4.32.1': optional: true + '@rollup/rollup-android-arm64@4.34.9': + optional: true + '@rollup/rollup-darwin-arm64@4.32.1': optional: true + '@rollup/rollup-darwin-arm64@4.34.9': + optional: true + '@rollup/rollup-darwin-x64@4.32.1': optional: true + '@rollup/rollup-darwin-x64@4.34.9': + optional: true + '@rollup/rollup-freebsd-arm64@4.32.1': optional: true + '@rollup/rollup-freebsd-arm64@4.34.9': + optional: true + '@rollup/rollup-freebsd-x64@4.32.1': optional: true + '@rollup/rollup-freebsd-x64@4.34.9': + optional: true + '@rollup/rollup-linux-arm-gnueabihf@4.32.1': optional: true + '@rollup/rollup-linux-arm-gnueabihf@4.34.9': + optional: true + '@rollup/rollup-linux-arm-musleabihf@4.32.1': optional: true + '@rollup/rollup-linux-arm-musleabihf@4.34.9': + optional: true + '@rollup/rollup-linux-arm64-gnu@4.32.1': optional: true + '@rollup/rollup-linux-arm64-gnu@4.34.9': + optional: true + '@rollup/rollup-linux-arm64-musl@4.32.1': optional: true + '@rollup/rollup-linux-arm64-musl@4.34.9': + optional: true + '@rollup/rollup-linux-loongarch64-gnu@4.32.1': optional: true + '@rollup/rollup-linux-loongarch64-gnu@4.34.9': + optional: true + '@rollup/rollup-linux-powerpc64le-gnu@4.32.1': optional: true + '@rollup/rollup-linux-powerpc64le-gnu@4.34.9': + optional: true + '@rollup/rollup-linux-riscv64-gnu@4.32.1': optional: true + '@rollup/rollup-linux-riscv64-gnu@4.34.9': + optional: true + '@rollup/rollup-linux-s390x-gnu@4.32.1': optional: true + '@rollup/rollup-linux-s390x-gnu@4.34.9': + optional: true + '@rollup/rollup-linux-x64-gnu@4.32.1': optional: true + '@rollup/rollup-linux-x64-gnu@4.34.9': + optional: true + '@rollup/rollup-linux-x64-musl@4.32.1': optional: true + '@rollup/rollup-linux-x64-musl@4.34.9': + optional: true + '@rollup/rollup-win32-arm64-msvc@4.32.1': optional: true + '@rollup/rollup-win32-arm64-msvc@4.34.9': + optional: true + '@rollup/rollup-win32-ia32-msvc@4.32.1': optional: true + '@rollup/rollup-win32-ia32-msvc@4.34.9': + optional: true + '@rollup/rollup-win32-x64-msvc@4.32.1': optional: true + '@rollup/rollup-win32-x64-msvc@4.34.9': + optional: true + '@rsbuild/core@1.1.13': dependencies: '@rspack/core': 1.1.8(@swc/helpers@0.5.15) @@ -18446,12 +19343,13 @@ snapshots: '@swc/helpers': 0.5.15 core-js: 3.39.0 - '@rsbuild/core@1.2.3': + '@rsbuild/core@1.2.15': dependencies: - '@rspack/core': 1.2.2(@swc/helpers@0.5.15) + '@rspack/core': 1.2.7(@swc/helpers@0.5.15) '@rspack/lite-tapable': 1.0.1 '@swc/helpers': 0.5.15 - core-js: 3.40.0 + core-js: 3.41.0 + jiti: 2.4.2 transitivePeerDependencies: - '@rspack/tracing' @@ -18476,68 +19374,68 @@ snapshots: reduce-configs: 1.1.0 sass-embedded: 1.83.0 - '@rslib/core@0.4.0(typescript@5.7.2)': + '@rslib/core@0.5.3(typescript@5.8.2)': dependencies: - '@rsbuild/core': 1.2.3 - rsbuild-plugin-dts: 0.4.0(@rsbuild/core@1.2.3)(typescript@5.7.2) - tinyglobby: 0.2.10 + '@rsbuild/core': 1.2.15 + rsbuild-plugin-dts: 0.5.3(@rsbuild/core@1.2.15)(typescript@5.8.2) + tinyglobby: 0.2.12 optionalDependencies: - typescript: 5.7.2 + typescript: 5.8.2 transitivePeerDependencies: - '@rspack/tracing' '@rspack/binding-darwin-arm64@1.1.8': optional: true - '@rspack/binding-darwin-arm64@1.2.2': + '@rspack/binding-darwin-arm64@1.2.7': optional: true '@rspack/binding-darwin-x64@1.1.8': optional: true - '@rspack/binding-darwin-x64@1.2.2': + '@rspack/binding-darwin-x64@1.2.7': optional: true '@rspack/binding-linux-arm64-gnu@1.1.8': optional: true - '@rspack/binding-linux-arm64-gnu@1.2.2': + '@rspack/binding-linux-arm64-gnu@1.2.7': optional: true '@rspack/binding-linux-arm64-musl@1.1.8': optional: true - '@rspack/binding-linux-arm64-musl@1.2.2': + '@rspack/binding-linux-arm64-musl@1.2.7': optional: true '@rspack/binding-linux-x64-gnu@1.1.8': optional: true - '@rspack/binding-linux-x64-gnu@1.2.2': + '@rspack/binding-linux-x64-gnu@1.2.7': optional: true '@rspack/binding-linux-x64-musl@1.1.8': optional: true - '@rspack/binding-linux-x64-musl@1.2.2': + '@rspack/binding-linux-x64-musl@1.2.7': optional: true '@rspack/binding-win32-arm64-msvc@1.1.8': optional: true - '@rspack/binding-win32-arm64-msvc@1.2.2': + '@rspack/binding-win32-arm64-msvc@1.2.7': optional: true '@rspack/binding-win32-ia32-msvc@1.1.8': optional: true - '@rspack/binding-win32-ia32-msvc@1.2.2': + '@rspack/binding-win32-ia32-msvc@1.2.7': optional: true '@rspack/binding-win32-x64-msvc@1.1.8': optional: true - '@rspack/binding-win32-x64-msvc@1.2.2': + '@rspack/binding-win32-x64-msvc@1.2.7': optional: true '@rspack/binding@1.1.8': @@ -18552,17 +19450,17 @@ snapshots: '@rspack/binding-win32-ia32-msvc': 1.1.8 '@rspack/binding-win32-x64-msvc': 1.1.8 - '@rspack/binding@1.2.2': + '@rspack/binding@1.2.7': optionalDependencies: - '@rspack/binding-darwin-arm64': 1.2.2 - '@rspack/binding-darwin-x64': 1.2.2 - '@rspack/binding-linux-arm64-gnu': 1.2.2 - '@rspack/binding-linux-arm64-musl': 1.2.2 - '@rspack/binding-linux-x64-gnu': 1.2.2 - '@rspack/binding-linux-x64-musl': 1.2.2 - '@rspack/binding-win32-arm64-msvc': 1.2.2 - '@rspack/binding-win32-ia32-msvc': 1.2.2 - '@rspack/binding-win32-x64-msvc': 1.2.2 + '@rspack/binding-darwin-arm64': 1.2.7 + '@rspack/binding-darwin-x64': 1.2.7 + '@rspack/binding-linux-arm64-gnu': 1.2.7 + '@rspack/binding-linux-arm64-musl': 1.2.7 + '@rspack/binding-linux-x64-gnu': 1.2.7 + '@rspack/binding-linux-x64-musl': 1.2.7 + '@rspack/binding-win32-arm64-msvc': 1.2.7 + '@rspack/binding-win32-ia32-msvc': 1.2.7 + '@rspack/binding-win32-x64-msvc': 1.2.7 '@rspack/core@1.1.8(@swc/helpers@0.5.15)': dependencies: @@ -18573,12 +19471,12 @@ snapshots: optionalDependencies: '@swc/helpers': 0.5.15 - '@rspack/core@1.2.2(@swc/helpers@0.5.15)': + '@rspack/core@1.2.7(@swc/helpers@0.5.15)': dependencies: '@module-federation/runtime-tools': 0.8.4 - '@rspack/binding': 1.2.2 + '@rspack/binding': 1.2.7 '@rspack/lite-tapable': 1.0.1 - caniuse-lite: 1.0.30001680 + caniuse-lite: 1.0.30001702 optionalDependencies: '@swc/helpers': 0.5.15 @@ -18591,9 +19489,9 @@ snapshots: optionalDependencies: react-refresh: 0.16.0 - '@rspress/core@1.40.0(webpack@5.91.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.24.2))': + '@rspress/core@1.40.0(webpack@5.91.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.25.0))': dependencies: - '@mdx-js/loader': 2.3.0(webpack@5.91.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.24.2)) + '@mdx-js/loader': 2.3.0(webpack@5.91.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.25.0)) '@mdx-js/mdx': 2.3.0 '@mdx-js/react': 2.3.0(react@18.3.1) '@rsbuild/core': 1.1.13 @@ -19594,7 +20492,7 @@ snapshots: '@swc/types': 0.1.13 optional: true - '@swc-node/register@1.10.9(@swc/core@1.7.42(@swc/helpers@0.5.15))(@swc/types@0.1.13)(typescript@5.7.2)': + '@swc-node/register@1.10.9(@swc/core@1.7.42(@swc/helpers@0.5.15))(@swc/types@0.1.13)(typescript@5.8.2)': dependencies: '@swc-node/core': 1.13.3(@swc/core@1.7.42(@swc/helpers@0.5.15))(@swc/types@0.1.13) '@swc-node/sourcemap-support': 0.5.1 @@ -19604,7 +20502,7 @@ snapshots: oxc-resolver: 1.12.0 pirates: 4.0.6 tslib: 2.8.1 - typescript: 5.7.2 + typescript: 5.8.2 transitivePeerDependencies: - '@swc/types' - supports-color @@ -19780,9 +20678,9 @@ snapshots: '@types/cookie@0.6.0': {} - '@types/cosmiconfig@6.0.0(typescript@5.7.2)': + '@types/cosmiconfig@6.0.0(typescript@5.8.2)': dependencies: - cosmiconfig: 9.0.0(typescript@5.7.2) + cosmiconfig: 9.0.0(typescript@5.8.2) transitivePeerDependencies: - typescript @@ -20038,13 +20936,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.7.2))(eslint@8.57.0)(typescript@5.7.2)': + '@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.8.2))(eslint@8.57.0)(typescript@5.8.2)': dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.7.2) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.8.2) '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.0)(typescript@5.7.2) - '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.7.2) + '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.0)(typescript@5.8.2) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.8.2) '@typescript-eslint/visitor-keys': 6.21.0 debug: 4.3.7 eslint: 8.57.0 @@ -20052,9 +20950,9 @@ snapshots: ignore: 5.3.2 natural-compare: 1.4.0 semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.7.2) + ts-api-utils: 1.3.0(typescript@5.8.2) optionalDependencies: - typescript: 5.7.2 + typescript: 5.8.2 transitivePeerDependencies: - supports-color @@ -20088,16 +20986,16 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.7.2)': + '@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.8.2)': dependencies: '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.7.2) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.8.2) '@typescript-eslint/visitor-keys': 6.21.0 debug: 4.3.7 eslint: 8.57.0 optionalDependencies: - typescript: 5.7.2 + typescript: 5.8.2 transitivePeerDependencies: - supports-color @@ -20141,15 +21039,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@6.21.0(eslint@8.57.0)(typescript@5.7.2)': + '@typescript-eslint/type-utils@6.21.0(eslint@8.57.0)(typescript@5.8.2)': dependencies: - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.7.2) - '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.7.2) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.8.2) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.8.2) debug: 4.4.0 eslint: 8.57.0 - ts-api-utils: 1.3.0(typescript@5.7.2) + ts-api-utils: 1.3.0(typescript@5.8.2) optionalDependencies: - typescript: 5.7.2 + typescript: 5.8.2 transitivePeerDependencies: - supports-color @@ -20199,7 +21097,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@5.62.0(typescript@5.7.2)': + '@typescript-eslint/typescript-estree@5.62.0(typescript@5.8.2)': dependencies: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 @@ -20207,13 +21105,13 @@ snapshots: globby: 11.1.0 is-glob: 4.0.3 semver: 7.6.3 - tsutils: 3.21.0(typescript@5.7.2) + tsutils: 3.21.0(typescript@5.8.2) optionalDependencies: - typescript: 5.7.2 + typescript: 5.8.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@6.21.0(typescript@5.7.2)': + '@typescript-eslint/typescript-estree@6.21.0(typescript@5.8.2)': dependencies: '@typescript-eslint/types': 6.21.0 '@typescript-eslint/visitor-keys': 6.21.0 @@ -20222,9 +21120,9 @@ snapshots: is-glob: 4.0.3 minimatch: 9.0.3 semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.7.2) + ts-api-utils: 1.3.0(typescript@5.8.2) optionalDependencies: - typescript: 5.7.2 + typescript: 5.8.2 transitivePeerDependencies: - supports-color @@ -20273,14 +21171,14 @@ snapshots: - supports-color - typescript - '@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.7.2)': + '@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.8.2)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) '@types/json-schema': 7.0.15 '@types/semver': 7.5.8 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.7.2) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.8.2) eslint: 8.57.0 eslint-scope: 5.1.1 semver: 7.6.3 @@ -20288,14 +21186,14 @@ snapshots: - supports-color - typescript - '@typescript-eslint/utils@6.21.0(eslint@8.57.0)(typescript@5.7.2)': + '@typescript-eslint/utils@6.21.0(eslint@8.57.0)(typescript@5.8.2)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) '@types/json-schema': 7.0.15 '@types/semver': 7.5.8 '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.7.2) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.8.2) eslint: 8.57.0 semver: 7.6.3 transitivePeerDependencies: @@ -20344,32 +21242,48 @@ snapshots: chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@2.1.8(msw@2.7.0(@types/node@22.13.0)(typescript@5.7.2))(vite@5.4.8(@types/node@22.13.5)(sass-embedded@1.83.0)(terser@5.31.0))': + '@vitest/expect@3.0.8': + dependencies: + '@vitest/spy': 3.0.8 + '@vitest/utils': 3.0.8 + chai: 5.2.0 + tinyrainbow: 2.0.0 + + '@vitest/mocker@2.1.8(msw@2.7.0(@types/node@22.13.0)(typescript@5.7.2))(vite@5.4.8(@types/node@22.13.0)(sass-embedded@1.83.0)(terser@5.31.0))': dependencies: '@vitest/spy': 2.1.8 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: msw: 2.7.0(@types/node@22.13.0)(typescript@5.7.2) - vite: 5.4.8(@types/node@22.13.5)(sass-embedded@1.83.0)(terser@5.31.0) + vite: 5.4.8(@types/node@22.13.0)(sass-embedded@1.83.0)(terser@5.31.0) - '@vitest/mocker@2.1.8(msw@2.7.0(@types/node@22.13.5)(typescript@5.7.2))(vite@5.4.8(@types/node@22.13.5)(sass-embedded@1.83.0)(terser@5.31.0))': + '@vitest/mocker@2.1.8(msw@2.7.0(@types/node@22.13.5)(typescript@5.8.2))(vite@5.4.8(@types/node@22.13.5)(sass-embedded@1.83.0)(terser@5.31.0))': dependencies: '@vitest/spy': 2.1.8 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - msw: 2.7.0(@types/node@22.13.5)(typescript@5.7.2) + msw: 2.7.0(@types/node@22.13.5)(typescript@5.8.2) vite: 5.4.8(@types/node@22.13.5)(sass-embedded@1.83.0)(terser@5.31.0) - '@vitest/mocker@3.0.6(msw@2.7.0(@types/node@20.16.10)(typescript@5.7.2))(vite@6.1.1(@types/node@20.16.10)(jiti@1.21.6)(sass-embedded@1.83.0)(terser@5.31.0)(yaml@2.6.1))': + '@vitest/mocker@3.0.6(msw@2.7.0(@types/node@20.16.10)(typescript@5.8.2))(vite@6.1.1(@types/node@20.16.10)(jiti@2.4.2)(sass-embedded@1.83.0)(terser@5.31.0)(yaml@2.6.1))': dependencies: '@vitest/spy': 3.0.6 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - msw: 2.7.0(@types/node@20.16.10)(typescript@5.7.2) - vite: 6.1.1(@types/node@20.16.10)(jiti@1.21.6)(sass-embedded@1.83.0)(terser@5.31.0)(yaml@2.6.1) + msw: 2.7.0(@types/node@20.16.10)(typescript@5.8.2) + vite: 6.1.1(@types/node@20.16.10)(jiti@2.4.2)(sass-embedded@1.83.0)(terser@5.31.0)(yaml@2.6.1) + + '@vitest/mocker@3.0.8(msw@2.7.0(@types/node@22.13.5)(typescript@5.8.2))(vite@6.1.1(@types/node@22.13.5)(jiti@2.4.2)(sass-embedded@1.83.0)(terser@5.31.0)(yaml@2.6.1))': + dependencies: + '@vitest/spy': 3.0.8 + estree-walker: 3.0.3 + magic-string: 0.30.17 + optionalDependencies: + msw: 2.7.0(@types/node@22.13.5)(typescript@5.8.2) + vite: 6.1.1(@types/node@22.13.5)(jiti@2.4.2)(sass-embedded@1.83.0)(terser@5.31.0)(yaml@2.6.1) '@vitest/pretty-format@2.1.8': dependencies: @@ -20379,6 +21293,10 @@ snapshots: dependencies: tinyrainbow: 2.0.0 + '@vitest/pretty-format@3.0.8': + dependencies: + tinyrainbow: 2.0.0 + '@vitest/runner@2.1.8': dependencies: '@vitest/utils': 2.1.8 @@ -20389,6 +21307,11 @@ snapshots: '@vitest/utils': 3.0.6 pathe: 2.0.3 + '@vitest/runner@3.0.8': + dependencies: + '@vitest/utils': 3.0.8 + pathe: 2.0.3 + '@vitest/snapshot@2.1.8': dependencies: '@vitest/pretty-format': 2.1.8 @@ -20401,6 +21324,12 @@ snapshots: magic-string: 0.30.17 pathe: 2.0.3 + '@vitest/snapshot@3.0.8': + dependencies: + '@vitest/pretty-format': 3.0.8 + magic-string: 0.30.17 + pathe: 2.0.3 + '@vitest/spy@2.1.8': dependencies: tinyspy: 3.0.2 @@ -20409,6 +21338,10 @@ snapshots: dependencies: tinyspy: 3.0.2 + '@vitest/spy@3.0.8': + dependencies: + tinyspy: 3.0.2 + '@vitest/utils@2.1.8': dependencies: '@vitest/pretty-format': 2.1.8 @@ -20421,6 +21354,12 @@ snapshots: loupe: 3.1.3 tinyrainbow: 2.0.0 + '@vitest/utils@3.0.8': + dependencies: + '@vitest/pretty-format': 3.0.8 + loupe: 3.1.3 + tinyrainbow: 2.0.0 + '@webassemblyjs/ast@1.12.1': dependencies: '@webassemblyjs/helper-numbers': 1.11.6 @@ -20825,12 +21764,12 @@ snapshots: transitivePeerDependencies: - supports-color - babel-loader@9.1.3(@babel/core@7.26.0)(webpack@5.91.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.24.2)): + babel-loader@9.1.3(@babel/core@7.26.0)(webpack@5.91.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.25.0)): dependencies: '@babel/core': 7.26.0 find-cache-dir: 4.0.0 schema-utils: 4.2.0 - webpack: 5.91.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.24.2) + webpack: 5.91.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.25.0) babel-plugin-const-enum@1.2.0(@babel/core@7.26.0): dependencies: @@ -20868,10 +21807,10 @@ snapshots: parse5: 7.1.2 validate-html-nesting: 1.2.2 - babel-plugin-macros@2.8.0: + babel-plugin-macros@3.1.0: dependencies: '@babel/runtime': 7.26.0 - cosmiconfig: 6.0.0 + cosmiconfig: 7.1.0 resolve: 1.22.8 babel-plugin-module-resolver@5.0.2: @@ -21148,9 +22087,9 @@ snapshots: dependencies: run-applescript: 7.0.0 - bundle-require@5.1.0(esbuild@0.24.2): + bundle-require@5.1.0(esbuild@0.25.0): dependencies: - esbuild: 0.24.2 + esbuild: 0.25.0 load-tsconfig: 0.2.5 bytes@3.0.0: {} @@ -21211,6 +22150,8 @@ snapshots: caniuse-lite@1.0.30001680: {} + caniuse-lite@1.0.30001702: {} + capnp-ts@0.7.0: dependencies: debug: 4.4.0 @@ -21388,6 +22329,18 @@ snapshots: color-name@1.1.4: {} + color-string@1.9.1: + 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 + colorette@1.4.0: {} colorette@2.0.20: @@ -21475,6 +22428,8 @@ snapshots: cookie-signature@1.0.6: optional: true + cookie@0.5.0: {} + cookie@0.6.0: {} cookie@0.7.2: {} @@ -21495,23 +22450,23 @@ snapshots: core-js@3.39.0: {} - core-js@3.40.0: {} + core-js@3.41.0: {} core-util-is@1.0.3: {} - cosmiconfig-typescript-loader@5.0.0(@types/node@22.7.5)(cosmiconfig@9.0.0(typescript@5.7.2))(typescript@5.7.2): + cosmiconfig-typescript-loader@5.0.0(@types/node@22.7.5)(cosmiconfig@9.0.0(typescript@5.8.2))(typescript@5.8.2): dependencies: '@types/node': 22.7.5 - cosmiconfig: 9.0.0(typescript@5.7.2) + cosmiconfig: 9.0.0(typescript@5.8.2) jiti: 1.21.6 - typescript: 5.7.2 + typescript: 5.8.2 - cosmiconfig-typescript-loader@5.0.0(@types/node@22.9.0)(cosmiconfig@9.0.0(typescript@5.7.2))(typescript@5.7.2): + cosmiconfig-typescript-loader@5.0.0(@types/node@22.9.0)(cosmiconfig@9.0.0(typescript@5.8.2))(typescript@5.8.2): dependencies: '@types/node': 22.9.0 - cosmiconfig: 9.0.0(typescript@5.7.2) + cosmiconfig: 9.0.0(typescript@5.8.2) jiti: 1.21.6 - typescript: 5.7.2 + typescript: 5.8.2 cosmiconfig@5.2.1: dependencies: @@ -21520,7 +22475,7 @@ snapshots: js-yaml: 3.14.1 parse-json: 4.0.0 - cosmiconfig@6.0.0: + cosmiconfig@7.1.0: dependencies: '@types/parse-json': 4.0.2 import-fresh: 3.3.0 @@ -21537,22 +22492,22 @@ snapshots: optionalDependencies: typescript: 5.0.4 - cosmiconfig@9.0.0(typescript@5.7.2): + cosmiconfig@9.0.0(typescript@5.8.2): dependencies: env-paths: 2.2.1 import-fresh: 3.3.0 js-yaml: 4.1.0 parse-json: 5.2.0 optionalDependencies: - typescript: 5.7.2 + typescript: 5.8.2 - create-jest@29.7.0(@types/node@22.13.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.0)(typescript@5.0.4)): + create-jest@29.7.0(@types/node@22.13.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.0)(typescript@5.0.4)): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@22.13.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.0)(typescript@5.0.4)) + jest-config: 29.7.0(@types/node@22.13.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.0)(typescript@5.0.4)) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -21561,13 +22516,13 @@ snapshots: - supports-color - ts-node - create-jest@29.7.0(@types/node@22.13.1)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@4.8.4)): + create-jest@29.7.0(@types/node@22.13.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@4.8.4)): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@22.13.1)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@4.8.4)) + jest-config: 29.7.0(@types/node@22.13.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@4.8.4)) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -21576,13 +22531,13 @@ snapshots: - supports-color - ts-node - create-jest@29.7.0(@types/node@22.13.5)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.0.4)): + create-jest@29.7.0(@types/node@22.13.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.0.4)): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@22.13.5)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.0.4)) + jest-config: 29.7.0(@types/node@22.13.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.0.4)) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -21591,13 +22546,13 @@ snapshots: - supports-color - ts-node - create-jest@29.7.0(@types/node@22.13.5)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.7.2)): + create-jest@29.7.0(@types/node@22.13.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.8.2)): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@22.13.5)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.7.2)) + jest-config: 29.7.0(@types/node@22.13.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.8.2)) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -21682,7 +22637,9 @@ snapshots: dedent@0.7.0: {} - dedent@1.5.3: {} + dedent@1.5.3(babel-plugin-macros@3.1.0): + optionalDependencies: + babel-plugin-macros: 3.1.0 deep-eql@5.0.2: {} @@ -21770,6 +22727,9 @@ snapshots: destroy@1.2.0: {} + detect-libc@2.0.3: + optional: true + detect-newline@3.1.0: {} detect-node@2.1.0: @@ -21778,7 +22738,7 @@ snapshots: detect-port@1.6.1: dependencies: address: 1.2.2 - debug: 4.3.7 + debug: 4.4.0 transitivePeerDependencies: - supports-color @@ -22116,6 +23076,34 @@ snapshots: '@esbuild/win32-ia32': 0.24.2 '@esbuild/win32-x64': 0.24.2 + esbuild@0.25.0: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.0 + '@esbuild/android-arm': 0.25.0 + '@esbuild/android-arm64': 0.25.0 + '@esbuild/android-x64': 0.25.0 + '@esbuild/darwin-arm64': 0.25.0 + '@esbuild/darwin-x64': 0.25.0 + '@esbuild/freebsd-arm64': 0.25.0 + '@esbuild/freebsd-x64': 0.25.0 + '@esbuild/linux-arm': 0.25.0 + '@esbuild/linux-arm64': 0.25.0 + '@esbuild/linux-ia32': 0.25.0 + '@esbuild/linux-loong64': 0.25.0 + '@esbuild/linux-mips64el': 0.25.0 + '@esbuild/linux-ppc64': 0.25.0 + '@esbuild/linux-riscv64': 0.25.0 + '@esbuild/linux-s390x': 0.25.0 + '@esbuild/linux-x64': 0.25.0 + '@esbuild/netbsd-arm64': 0.25.0 + '@esbuild/netbsd-x64': 0.25.0 + '@esbuild/openbsd-arm64': 0.25.0 + '@esbuild/openbsd-x64': 0.25.0 + '@esbuild/sunos-x64': 0.25.0 + '@esbuild/win32-arm64': 0.25.0 + '@esbuild/win32-ia32': 0.25.0 + '@esbuild/win32-x64': 0.25.0 + escalade@3.2.0: {} escape-html@1.0.3: {} @@ -22152,46 +23140,46 @@ snapshots: lodash: 4.17.21 string-natural-compare: 3.0.1 - eslint-plugin-jest@26.9.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@4.8.4))(eslint@8.57.0)(typescript@4.8.4))(eslint@8.57.0)(jest@29.7.0(@types/node@22.13.1)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@4.8.4)))(typescript@4.8.4): + eslint-plugin-jest@26.9.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@4.8.4))(eslint@8.57.0)(typescript@4.8.4))(eslint@8.57.0)(jest@29.7.0(@types/node@22.13.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@4.8.4)))(typescript@4.8.4): dependencies: '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@4.8.4) eslint: 8.57.0 optionalDependencies: '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@4.8.4))(eslint@8.57.0)(typescript@4.8.4) - jest: 29.7.0(@types/node@22.13.1)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@4.8.4)) + jest: 29.7.0(@types/node@22.13.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@4.8.4)) transitivePeerDependencies: - supports-color - typescript - eslint-plugin-jest@26.9.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.7.2))(eslint@8.57.0)(typescript@5.7.2))(eslint@8.57.0)(jest@29.7.0(@types/node@22.13.5)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.7.2)))(typescript@5.7.2): + eslint-plugin-jest@26.9.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.8.2))(eslint@8.57.0)(typescript@5.8.2))(eslint@8.57.0)(jest@29.7.0(@types/node@22.13.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.8.2)))(typescript@5.8.2): dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.7.2) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.8.2) eslint: 8.57.0 optionalDependencies: - '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.7.2))(eslint@8.57.0)(typescript@5.7.2) - jest: 29.7.0(@types/node@22.13.5)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.7.2)) + '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.8.2))(eslint@8.57.0)(typescript@5.8.2) + jest: 29.7.0(@types/node@22.13.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.8.2)) transitivePeerDependencies: - supports-color - typescript - eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.0.4))(eslint@8.57.0)(typescript@5.0.4))(eslint@8.57.0)(jest@29.7.0(@types/node@22.13.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.0)(typescript@5.0.4)))(typescript@5.0.4): + eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.0.4))(eslint@8.57.0)(typescript@5.0.4))(eslint@8.57.0)(jest@29.7.0(@types/node@22.13.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.0)(typescript@5.0.4)))(typescript@5.0.4): dependencies: '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.0.4) eslint: 8.57.0 optionalDependencies: '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.0.4))(eslint@8.57.0)(typescript@5.0.4) - jest: 29.7.0(@types/node@22.13.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.0)(typescript@5.0.4)) + jest: 29.7.0(@types/node@22.13.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.0)(typescript@5.0.4)) transitivePeerDependencies: - supports-color - typescript - eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.0.4))(eslint@8.57.0)(typescript@5.0.4))(eslint@8.57.0)(jest@29.7.0(@types/node@22.13.5)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.0.4)))(typescript@5.0.4): + eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.0.4))(eslint@8.57.0)(typescript@5.0.4))(eslint@8.57.0)(jest@29.7.0(@types/node@22.13.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.0.4)))(typescript@5.0.4): dependencies: '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.0.4) eslint: 8.57.0 optionalDependencies: '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.0.4))(eslint@8.57.0)(typescript@5.0.4) - jest: 29.7.0(@types/node@22.13.5)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.0.4)) + jest: 29.7.0(@types/node@22.13.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.0.4)) transitivePeerDependencies: - supports-color - typescript @@ -22458,6 +23446,8 @@ snapshots: - supports-color optional: true + exsolve@1.0.2: {} + extend-shallow@2.0.1: dependencies: is-extendable: 0.1.1 @@ -22557,6 +23547,10 @@ snapshots: optionalDependencies: picomatch: 4.0.2 + fdir@6.4.3(picomatch@4.0.2): + optionalDependencies: + picomatch: 4.0.2 + figures@3.2.0: dependencies: escape-string-regexp: 1.0.5 @@ -23332,6 +24326,9 @@ snapshots: is-arrayish@0.2.1: {} + is-arrayish@0.3.2: + optional: true + is-async-function@2.0.0: dependencies: has-tostringtag: 1.0.2 @@ -23606,7 +24603,7 @@ snapshots: jest-util: 29.7.0 p-limit: 3.1.0 - jest-circus@29.7.0: + jest-circus@29.7.0(babel-plugin-macros@3.1.0): dependencies: '@jest/environment': 29.7.0 '@jest/expect': 29.7.0 @@ -23615,7 +24612,7 @@ snapshots: '@types/node': 22.13.1 chalk: 4.1.2 co: 4.6.0 - dedent: 1.5.3 + dedent: 1.5.3(babel-plugin-macros@3.1.0) is-generator-fn: 2.1.0 jest-each: 29.7.0 jest-matcher-utils: 29.7.0 @@ -23632,16 +24629,16 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@29.7.0(@types/node@22.13.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.0)(typescript@5.0.4)): + jest-cli@29.7.0(@types/node@22.13.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.0)(typescript@5.0.4)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.0)(typescript@5.0.4)) + '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.0)(typescript@5.0.4)) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@22.13.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.0)(typescript@5.0.4)) + create-jest: 29.7.0(@types/node@22.13.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.0)(typescript@5.0.4)) exit: 0.1.2 import-local: 3.1.0 - jest-config: 29.7.0(@types/node@22.13.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.0)(typescript@5.0.4)) + jest-config: 29.7.0(@types/node@22.13.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.0)(typescript@5.0.4)) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -23651,16 +24648,16 @@ snapshots: - supports-color - ts-node - jest-cli@29.7.0(@types/node@22.13.1)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@4.8.4)): + jest-cli@29.7.0(@types/node@22.13.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@4.8.4)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@4.8.4)) + '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@4.8.4)) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@22.13.1)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@4.8.4)) + create-jest: 29.7.0(@types/node@22.13.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@4.8.4)) exit: 0.1.2 import-local: 3.1.0 - jest-config: 29.7.0(@types/node@22.13.1)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@4.8.4)) + jest-config: 29.7.0(@types/node@22.13.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@4.8.4)) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -23670,16 +24667,16 @@ snapshots: - supports-color - ts-node - jest-cli@29.7.0(@types/node@22.13.5)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.0.4)): + jest-cli@29.7.0(@types/node@22.13.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.0.4)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.0.4)) + '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.0.4)) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@22.13.5)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.0.4)) + create-jest: 29.7.0(@types/node@22.13.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.0.4)) exit: 0.1.2 import-local: 3.1.0 - jest-config: 29.7.0(@types/node@22.13.5)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.0.4)) + jest-config: 29.7.0(@types/node@22.13.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.0.4)) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -23689,16 +24686,16 @@ snapshots: - supports-color - ts-node - jest-cli@29.7.0(@types/node@22.13.5)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.7.2)): + jest-cli@29.7.0(@types/node@22.13.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.8.2)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.7.2)) + '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.8.2)) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@22.13.5)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.7.2)) + create-jest: 29.7.0(@types/node@22.13.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.8.2)) exit: 0.1.2 import-local: 3.1.0 - jest-config: 29.7.0(@types/node@22.13.5)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.7.2)) + jest-config: 29.7.0(@types/node@22.13.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.8.2)) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -23708,7 +24705,7 @@ snapshots: - supports-color - ts-node - jest-config@29.7.0(@types/node@22.13.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.0)(typescript@5.0.4)): + jest-config@29.7.0(@types/node@22.13.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.0)(typescript@5.0.4)): dependencies: '@babel/core': 7.26.0 '@jest/test-sequencer': 29.7.0 @@ -23719,7 +24716,7 @@ snapshots: deepmerge: 4.3.1 glob: 7.2.3 graceful-fs: 4.2.11 - jest-circus: 29.7.0 + jest-circus: 29.7.0(babel-plugin-macros@3.1.0) jest-environment-node: 29.7.0 jest-get-type: 29.6.3 jest-regex-util: 29.6.3 @@ -23739,7 +24736,7 @@ snapshots: - babel-plugin-macros - supports-color - jest-config@29.7.0(@types/node@22.13.1)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.0)(typescript@5.0.4)): + jest-config@29.7.0(@types/node@22.13.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.0)(typescript@5.0.4)): dependencies: '@babel/core': 7.26.0 '@jest/test-sequencer': 29.7.0 @@ -23750,7 +24747,7 @@ snapshots: deepmerge: 4.3.1 glob: 7.2.3 graceful-fs: 4.2.11 - jest-circus: 29.7.0 + jest-circus: 29.7.0(babel-plugin-macros@3.1.0) jest-environment-node: 29.7.0 jest-get-type: 29.6.3 jest-regex-util: 29.6.3 @@ -23770,7 +24767,7 @@ snapshots: - babel-plugin-macros - supports-color - jest-config@29.7.0(@types/node@22.13.1)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@4.8.4)): + jest-config@29.7.0(@types/node@22.13.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@4.8.4)): dependencies: '@babel/core': 7.26.0 '@jest/test-sequencer': 29.7.0 @@ -23781,7 +24778,7 @@ snapshots: deepmerge: 4.3.1 glob: 7.2.3 graceful-fs: 4.2.11 - jest-circus: 29.7.0 + jest-circus: 29.7.0(babel-plugin-macros@3.1.0) jest-environment-node: 29.7.0 jest-get-type: 29.6.3 jest-regex-util: 29.6.3 @@ -23801,7 +24798,7 @@ snapshots: - babel-plugin-macros - supports-color - jest-config@29.7.0(@types/node@22.13.1)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.0.4)): + jest-config@29.7.0(@types/node@22.13.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.0.4)): dependencies: '@babel/core': 7.26.0 '@jest/test-sequencer': 29.7.0 @@ -23812,7 +24809,7 @@ snapshots: deepmerge: 4.3.1 glob: 7.2.3 graceful-fs: 4.2.11 - jest-circus: 29.7.0 + jest-circus: 29.7.0(babel-plugin-macros@3.1.0) jest-environment-node: 29.7.0 jest-get-type: 29.6.3 jest-regex-util: 29.6.3 @@ -23832,7 +24829,7 @@ snapshots: - babel-plugin-macros - supports-color - jest-config@29.7.0(@types/node@22.13.1)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.7.2)): + jest-config@29.7.0(@types/node@22.13.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.8.2)): dependencies: '@babel/core': 7.26.0 '@jest/test-sequencer': 29.7.0 @@ -23843,7 +24840,7 @@ snapshots: deepmerge: 4.3.1 glob: 7.2.3 graceful-fs: 4.2.11 - jest-circus: 29.7.0 + jest-circus: 29.7.0(babel-plugin-macros@3.1.0) jest-environment-node: 29.7.0 jest-get-type: 29.6.3 jest-regex-util: 29.6.3 @@ -23858,12 +24855,12 @@ snapshots: strip-json-comments: 3.1.1 optionalDependencies: '@types/node': 22.13.1 - ts-node: 10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.7.2) + ts-node: 10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.8.2) transitivePeerDependencies: - babel-plugin-macros - supports-color - jest-config@29.7.0(@types/node@22.13.5)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.0.4)): + jest-config@29.7.0(@types/node@22.13.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.0.4)): dependencies: '@babel/core': 7.26.0 '@jest/test-sequencer': 29.7.0 @@ -23874,7 +24871,7 @@ snapshots: deepmerge: 4.3.1 glob: 7.2.3 graceful-fs: 4.2.11 - jest-circus: 29.7.0 + jest-circus: 29.7.0(babel-plugin-macros@3.1.0) jest-environment-node: 29.7.0 jest-get-type: 29.6.3 jest-regex-util: 29.6.3 @@ -23894,7 +24891,7 @@ snapshots: - babel-plugin-macros - supports-color - jest-config@29.7.0(@types/node@22.13.5)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.7.2)): + jest-config@29.7.0(@types/node@22.13.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.8.2)): dependencies: '@babel/core': 7.26.0 '@jest/test-sequencer': 29.7.0 @@ -23905,7 +24902,7 @@ snapshots: deepmerge: 4.3.1 glob: 7.2.3 graceful-fs: 4.2.11 - jest-circus: 29.7.0 + jest-circus: 29.7.0(babel-plugin-macros@3.1.0) jest-environment-node: 29.7.0 jest-get-type: 29.6.3 jest-regex-util: 29.6.3 @@ -23920,7 +24917,7 @@ snapshots: strip-json-comments: 3.1.1 optionalDependencies: '@types/node': 22.13.5 - ts-node: 10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.7.2) + ts-node: 10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.8.2) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -24173,48 +25170,48 @@ snapshots: merge-stream: 2.0.0 supports-color: 8.1.1 - jest@29.7.0(@types/node@22.13.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.0)(typescript@5.0.4)): + jest@29.7.0(@types/node@22.13.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.0)(typescript@5.0.4)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.0)(typescript@5.0.4)) + '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.0)(typescript@5.0.4)) '@jest/types': 29.6.3 import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@22.13.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.0)(typescript@5.0.4)) + jest-cli: 29.7.0(@types/node@22.13.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.0)(typescript@5.0.4)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros - supports-color - ts-node - jest@29.7.0(@types/node@22.13.1)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@4.8.4)): + jest@29.7.0(@types/node@22.13.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@4.8.4)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@4.8.4)) + '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@4.8.4)) '@jest/types': 29.6.3 import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@22.13.1)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@4.8.4)) + jest-cli: 29.7.0(@types/node@22.13.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@4.8.4)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros - supports-color - ts-node - jest@29.7.0(@types/node@22.13.5)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.0.4)): + jest@29.7.0(@types/node@22.13.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.0.4)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.0.4)) + '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.0.4)) '@jest/types': 29.6.3 import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@22.13.5)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.0.4)) + jest-cli: 29.7.0(@types/node@22.13.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.0.4)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros - supports-color - ts-node - jest@29.7.0(@types/node@22.13.5)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.7.2)): + jest@29.7.0(@types/node@22.13.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.8.2)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.7.2)) + '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.8.2)) '@jest/types': 29.6.3 import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@22.13.5)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.7.2)) + jest-cli: 29.7.0(@types/node@22.13.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.8.2)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -24223,6 +25220,8 @@ snapshots: jiti@1.21.6: {} + jiti@2.4.2: {} + jju@1.4.0: {} jmespath@0.16.0: {} @@ -25730,6 +26729,23 @@ snapshots: - supports-color - utf-8-validate + miniflare@3.20250224.0: + dependencies: + '@cspotcode/source-map-support': 0.8.1 + acorn: 8.14.0 + acorn-walk: 8.3.2 + exit-hook: 2.2.1 + glob-to-regexp: 0.4.1 + stoppable: 1.1.0 + undici: 5.28.5 + workerd: 1.20250224.0 + ws: 8.18.0 + youch: 3.2.3 + zod: 3.22.3 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + minimalistic-assert@1.0.1: {} minimatch@3.1.2: @@ -25777,7 +26793,7 @@ snapshots: ms@2.1.3: {} - msw@2.7.0(@types/node@20.16.10)(typescript@5.7.2): + msw@2.7.0(@types/node@20.16.10)(typescript@5.8.2): dependencies: '@bundled-es-modules/cookie': 2.0.1 '@bundled-es-modules/statuses': 1.0.1 @@ -25798,7 +26814,7 @@ snapshots: type-fest: 4.35.0 yargs: 17.7.2 optionalDependencies: - typescript: 5.7.2 + typescript: 5.8.2 transitivePeerDependencies: - '@types/node' @@ -25828,7 +26844,7 @@ snapshots: - '@types/node' optional: true - msw@2.7.0(@types/node@22.13.5)(typescript@5.7.2): + msw@2.7.0(@types/node@22.13.5)(typescript@5.8.2): dependencies: '@bundled-es-modules/cookie': 2.0.1 '@bundled-es-modules/statuses': 1.0.1 @@ -25849,7 +26865,7 @@ snapshots: type-fest: 4.35.0 yargs: 17.7.2 optionalDependencies: - typescript: 5.7.2 + typescript: 5.8.2 transitivePeerDependencies: - '@types/node' optional: true @@ -25957,7 +26973,7 @@ snapshots: nwsapi@2.2.13: optional: true - nx@20.3.0(@swc-node/register@1.10.9(@swc/core@1.7.42(@swc/helpers@0.5.15))(@swc/types@0.1.13)(typescript@5.7.2))(@swc/core@1.7.42(@swc/helpers@0.5.15)): + nx@20.5.0(@swc-node/register@1.10.9(@swc/core@1.7.42(@swc/helpers@0.5.15))(@swc/types@0.1.13)(typescript@5.8.2))(@swc/core@1.7.42(@swc/helpers@0.5.15)): dependencies: '@napi-rs/wasm-runtime': 0.2.4 '@yarnpkg/lockfile': 1.1.0 @@ -25994,17 +27010,17 @@ snapshots: yargs: 17.7.2 yargs-parser: 21.1.1 optionalDependencies: - '@nx/nx-darwin-arm64': 20.3.0 - '@nx/nx-darwin-x64': 20.3.0 - '@nx/nx-freebsd-x64': 20.3.0 - '@nx/nx-linux-arm-gnueabihf': 20.3.0 - '@nx/nx-linux-arm64-gnu': 20.3.0 - '@nx/nx-linux-arm64-musl': 20.3.0 - '@nx/nx-linux-x64-gnu': 20.3.0 - '@nx/nx-linux-x64-musl': 20.3.0 - '@nx/nx-win32-arm64-msvc': 20.3.0 - '@nx/nx-win32-x64-msvc': 20.3.0 - '@swc-node/register': 1.10.9(@swc/core@1.7.42(@swc/helpers@0.5.15))(@swc/types@0.1.13)(typescript@5.7.2) + '@nx/nx-darwin-arm64': 20.5.0 + '@nx/nx-darwin-x64': 20.5.0 + '@nx/nx-freebsd-x64': 20.5.0 + '@nx/nx-linux-arm-gnueabihf': 20.5.0 + '@nx/nx-linux-arm64-gnu': 20.5.0 + '@nx/nx-linux-arm64-musl': 20.5.0 + '@nx/nx-linux-x64-gnu': 20.5.0 + '@nx/nx-linux-x64-musl': 20.5.0 + '@nx/nx-win32-arm64-msvc': 20.5.0 + '@nx/nx-win32-x64-msvc': 20.5.0 + '@swc-node/register': 1.10.9(@swc/core@1.7.42(@swc/helpers@0.5.15))(@swc/types@0.1.13)(typescript@5.8.2) '@swc/core': 1.7.42(@swc/helpers@0.5.15) transitivePeerDependencies: - debug @@ -26061,6 +27077,8 @@ snapshots: ohash@1.1.4: {} + ohash@2.0.11: {} + on-exit-leak-free@2.1.2: {} on-finished@2.3.0: @@ -26447,11 +27465,11 @@ snapshots: postcss: 8.4.47 ts-node: 10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.8.7)(typescript@5.6.3) - postcss-load-config@6.0.1(jiti@1.21.6)(postcss@8.5.3)(yaml@2.6.1): + postcss-load-config@6.0.1(jiti@2.4.2)(postcss@8.5.3)(yaml@2.6.1): dependencies: lilconfig: 3.1.2 optionalDependencies: - jiti: 1.21.6 + jiti: 2.4.2 postcss: 8.5.3 yaml: 2.6.1 @@ -26714,7 +27732,7 @@ snapshots: react-lazy-with-preload@2.2.1: {} - react-native-builder-bob@0.33.1(typescript@5.7.2): + react-native-builder-bob@0.33.1(typescript@5.8.2): dependencies: '@babel/core': 7.26.0 '@babel/plugin-transform-strict-mode': 7.25.9(@babel/core@7.26.0) @@ -26724,7 +27742,7 @@ snapshots: '@babel/preset-typescript': 7.26.0(@babel/core@7.26.0) babel-plugin-module-resolver: 5.0.2 browserslist: 4.24.2 - cosmiconfig: 9.0.0(typescript@5.7.2) + cosmiconfig: 9.0.0(typescript@5.8.2) cross-spawn: 7.0.3 dedent: 0.7.0 del: 6.1.1 @@ -27372,26 +28390,53 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.32.1 fsevents: 2.3.3 + rollup@4.34.9: + dependencies: + '@types/estree': 1.0.6 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.34.9 + '@rollup/rollup-android-arm64': 4.34.9 + '@rollup/rollup-darwin-arm64': 4.34.9 + '@rollup/rollup-darwin-x64': 4.34.9 + '@rollup/rollup-freebsd-arm64': 4.34.9 + '@rollup/rollup-freebsd-x64': 4.34.9 + '@rollup/rollup-linux-arm-gnueabihf': 4.34.9 + '@rollup/rollup-linux-arm-musleabihf': 4.34.9 + '@rollup/rollup-linux-arm64-gnu': 4.34.9 + '@rollup/rollup-linux-arm64-musl': 4.34.9 + '@rollup/rollup-linux-loongarch64-gnu': 4.34.9 + '@rollup/rollup-linux-powerpc64le-gnu': 4.34.9 + '@rollup/rollup-linux-riscv64-gnu': 4.34.9 + '@rollup/rollup-linux-s390x-gnu': 4.34.9 + '@rollup/rollup-linux-x64-gnu': 4.34.9 + '@rollup/rollup-linux-x64-musl': 4.34.9 + '@rollup/rollup-win32-arm64-msvc': 4.34.9 + '@rollup/rollup-win32-ia32-msvc': 4.34.9 + '@rollup/rollup-win32-x64-msvc': 4.34.9 + fsevents: 2.3.3 + rrweb-cssom@0.7.1: optional: true - rsbuild-plugin-dts@0.4.0(@rsbuild/core@1.2.3)(typescript@5.7.2): + rsbuild-plugin-dts@0.5.3(@rsbuild/core@1.2.15)(typescript@5.8.2): dependencies: - '@rsbuild/core': 1.2.3 + '@ast-grep/napi': 0.35.0 + '@rsbuild/core': 1.2.15 magic-string: 0.30.17 picocolors: 1.1.1 - tinyglobby: 0.2.10 + tinyglobby: 0.2.12 + tsconfig-paths: 4.2.0 optionalDependencies: - typescript: 5.7.2 + typescript: 5.8.2 rspack-plugin-virtual-module@0.1.13: dependencies: fs-extra: 11.2.0 - rspress@1.40.0(webpack@5.91.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.24.2)): + rspress@1.40.0(webpack@5.91.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.25.0)): dependencies: '@rsbuild/core': 1.1.13 - '@rspress/core': 1.40.0(webpack@5.91.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.24.2)) + '@rspress/core': 1.40.0(webpack@5.91.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.25.0)) '@rspress/shared': 1.40.0 cac: 6.7.14 chalk: 5.4.1 @@ -27585,6 +28630,8 @@ snapshots: semver@7.6.3: {} + semver@7.7.1: {} + send@0.18.0: dependencies: debug: 2.6.9 @@ -27697,6 +28744,33 @@ snapshots: shallowequal@1.1.0: {} + sharp@0.33.5: + dependencies: + color: 4.2.3 + detect-libc: 2.0.3 + semver: 7.7.1 + optionalDependencies: + '@img/sharp-darwin-arm64': 0.33.5 + '@img/sharp-darwin-x64': 0.33.5 + '@img/sharp-libvips-darwin-arm64': 1.0.4 + '@img/sharp-libvips-darwin-x64': 1.0.4 + '@img/sharp-libvips-linux-arm': 1.0.5 + '@img/sharp-libvips-linux-arm64': 1.0.4 + '@img/sharp-libvips-linux-s390x': 1.0.4 + '@img/sharp-libvips-linux-x64': 1.0.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 + '@img/sharp-libvips-linuxmusl-x64': 1.0.4 + '@img/sharp-linux-arm': 0.33.5 + '@img/sharp-linux-arm64': 0.33.5 + '@img/sharp-linux-s390x': 0.33.5 + '@img/sharp-linux-x64': 0.33.5 + '@img/sharp-linuxmusl-arm64': 0.33.5 + '@img/sharp-linuxmusl-x64': 0.33.5 + '@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: shebang-regex: 1.0.0 @@ -27731,6 +28805,11 @@ snapshots: signal-exit@4.1.0: {} + simple-swizzle@0.2.2: + dependencies: + is-arrayish: 0.3.2 + optional: true + sinon@18.0.1: dependencies: '@sinonjs/commons': 3.0.1 @@ -28089,17 +29168,17 @@ snapshots: dependencies: rimraf: 2.6.3 - terser-webpack-plugin@5.3.10(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.24.2)(webpack@5.91.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.24.2)): + terser-webpack-plugin@5.3.10(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.25.0)(webpack@5.91.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.25.0)): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 terser: 5.31.0 - webpack: 5.91.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.24.2) + webpack: 5.91.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.25.0) optionalDependencies: '@swc/core': 1.7.42(@swc/helpers@0.5.15) - esbuild: 0.24.2 + esbuild: 0.25.0 terser@5.31.0: dependencies: @@ -28153,6 +29232,11 @@ snapshots: fdir: 6.4.2(picomatch@4.0.2) picomatch: 4.0.2 + tinyglobby@0.2.12: + dependencies: + fdir: 6.4.3(picomatch@4.0.2) + picomatch: 4.0.2 + tinypool@1.0.2: {} tinyrainbow@1.2.0: {} @@ -28222,13 +29306,13 @@ snapshots: dependencies: typescript: 5.0.4 - ts-api-utils@1.3.0(typescript@5.7.2): + ts-api-utils@1.3.0(typescript@5.8.2): dependencies: - typescript: 5.7.2 + typescript: 5.8.2 ts-interface-checker@0.1.13: {} - ts-node@10.9.1(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.7.2): + ts-node@10.9.1(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.8.2): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 @@ -28236,13 +29320,13 @@ snapshots: '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 '@types/node': 22.13.5 - acorn: 8.10.0 + acorn: 8.14.0 acorn-walk: 8.3.2 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.7.2 + typescript: 5.8.2 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 optionalDependencies: @@ -28311,7 +29395,7 @@ snapshots: '@swc/core': 1.7.42(@swc/helpers@0.5.15) optional: true - ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.7.2): + ts-node@10.9.2(@swc/core@1.7.42(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.8.2): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 @@ -28325,7 +29409,7 @@ snapshots: create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.7.2 + typescript: 5.8.2 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 optionalDependencies: @@ -28367,28 +29451,28 @@ snapshots: tslib@2.8.1: {} - tsup@8.3.6(@swc/core@1.7.42(@swc/helpers@0.5.15))(jiti@1.21.6)(postcss@8.5.3)(typescript@5.7.2)(yaml@2.6.1): + tsup@8.4.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(jiti@2.4.2)(postcss@8.5.3)(typescript@5.8.2)(yaml@2.6.1): dependencies: - bundle-require: 5.1.0(esbuild@0.24.2) + bundle-require: 5.1.0(esbuild@0.25.0) cac: 6.7.14 chokidar: 4.0.3 consola: 3.4.0 - debug: 4.3.7 - esbuild: 0.24.2 + debug: 4.4.0 + esbuild: 0.25.0 joycon: 3.1.1 picocolors: 1.1.1 - postcss-load-config: 6.0.1(jiti@1.21.6)(postcss@8.5.3)(yaml@2.6.1) + postcss-load-config: 6.0.1(jiti@2.4.2)(postcss@8.5.3)(yaml@2.6.1) resolve-from: 5.0.0 - rollup: 4.32.1 + rollup: 4.34.9 source-map: 0.8.0-beta.0 sucrase: 3.35.0 tinyexec: 0.3.2 - tinyglobby: 0.2.10 + tinyglobby: 0.2.12 tree-kill: 1.2.2 optionalDependencies: '@swc/core': 1.7.42(@swc/helpers@0.5.15) postcss: 8.5.3 - typescript: 5.7.2 + typescript: 5.8.2 transitivePeerDependencies: - jiti - supports-color @@ -28405,10 +29489,10 @@ snapshots: tslib: 1.14.1 typescript: 5.0.4 - tsutils@3.21.0(typescript@5.7.2): + tsutils@3.21.0(typescript@5.8.2): dependencies: tslib: 1.14.1 - typescript: 5.7.2 + typescript: 5.8.2 type-check@0.4.0: dependencies: @@ -28475,6 +29559,8 @@ snapshots: typescript@5.7.2: {} + typescript@5.8.2: {} + ufo@1.5.4: {} uglify-es@3.3.9: @@ -28509,6 +29595,14 @@ snapshots: pathe: 1.1.2 ufo: 1.5.4 + unenv@2.0.0-rc.8: + dependencies: + defu: 6.1.4 + exsolve: 1.0.2 + ohash: 2.0.11 + pathe: 2.0.3 + ufo: 1.5.4 + unicode-canonical-property-names-ecmascript@2.0.0: {} unicode-match-property-ecmascript@2.0.0: @@ -28751,13 +29845,34 @@ snapshots: - supports-color - terser - vite-node@3.0.6(@types/node@20.16.10)(jiti@1.21.6)(sass-embedded@1.83.0)(terser@5.31.0)(yaml@2.6.1): + vite-node@3.0.6(@types/node@20.16.10)(jiti@2.4.2)(sass-embedded@1.83.0)(terser@5.31.0)(yaml@2.6.1): + dependencies: + cac: 6.7.14 + debug: 4.4.0 + es-module-lexer: 1.6.0 + pathe: 2.0.3 + vite: 6.1.1(@types/node@20.16.10)(jiti@2.4.2)(sass-embedded@1.83.0)(terser@5.31.0)(yaml@2.6.1) + transitivePeerDependencies: + - '@types/node' + - jiti + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + + vite-node@3.0.8(@types/node@22.13.5)(jiti@2.4.2)(sass-embedded@1.83.0)(terser@5.31.0)(yaml@2.6.1): dependencies: cac: 6.7.14 debug: 4.4.0 es-module-lexer: 1.6.0 pathe: 2.0.3 - vite: 6.1.1(@types/node@20.16.10)(jiti@1.21.6)(sass-embedded@1.83.0)(terser@5.31.0)(yaml@2.6.1) + vite: 6.1.1(@types/node@22.13.5)(jiti@2.4.2)(sass-embedded@1.83.0)(terser@5.31.0)(yaml@2.6.1) transitivePeerDependencies: - '@types/node' - jiti @@ -28772,7 +29887,7 @@ snapshots: - tsx - yaml - vite-plugin-solid@2.11.2(solid-js@1.9.3)(vite@6.1.1(@types/node@22.8.7)(jiti@1.21.6)(sass-embedded@1.83.0)(terser@5.31.0)(yaml@2.6.1)): + vite-plugin-solid@2.11.2(solid-js@1.9.3)(vite@6.1.1(@types/node@22.8.7)(jiti@2.4.2)(sass-embedded@1.83.0)(terser@5.31.0)(yaml@2.6.1)): dependencies: '@babel/core': 7.26.0 '@types/babel__core': 7.20.5 @@ -28780,18 +29895,18 @@ snapshots: merge-anything: 5.1.7 solid-js: 1.9.3 solid-refresh: 0.6.3(solid-js@1.9.3) - vite: 6.1.1(@types/node@22.8.7)(jiti@1.21.6)(sass-embedded@1.83.0)(terser@5.31.0)(yaml@2.6.1) - vitefu: 1.0.5(vite@6.1.1(@types/node@22.8.7)(jiti@1.21.6)(sass-embedded@1.83.0)(terser@5.31.0)(yaml@2.6.1)) + vite: 6.1.1(@types/node@22.8.7)(jiti@2.4.2)(sass-embedded@1.83.0)(terser@5.31.0)(yaml@2.6.1) + vitefu: 1.0.5(vite@6.1.1(@types/node@22.8.7)(jiti@2.4.2)(sass-embedded@1.83.0)(terser@5.31.0)(yaml@2.6.1)) transitivePeerDependencies: - supports-color - vite-tsconfig-paths@5.1.4(typescript@5.6.3)(vite@6.1.1(@types/node@22.8.7)(jiti@1.21.6)(sass-embedded@1.83.0)(terser@5.31.0)(yaml@2.6.1)): + vite-tsconfig-paths@5.1.4(typescript@5.6.3)(vite@6.1.1(@types/node@22.8.7)(jiti@2.4.2)(sass-embedded@1.83.0)(terser@5.31.0)(yaml@2.6.1)): dependencies: debug: 4.4.0 globrex: 0.1.2 tsconfck: 3.1.5(typescript@5.6.3) optionalDependencies: - vite: 6.1.1(@types/node@22.8.7)(jiti@1.21.6)(sass-embedded@1.83.0)(terser@5.31.0)(yaml@2.6.1) + vite: 6.1.1(@types/node@22.8.7)(jiti@2.4.2)(sass-embedded@1.83.0)(terser@5.31.0)(yaml@2.6.1) transitivePeerDependencies: - supports-color - typescript @@ -28818,7 +29933,7 @@ snapshots: sass-embedded: 1.83.0 terser: 5.31.0 - vite@6.1.1(@types/node@20.16.10)(jiti@1.21.6)(sass-embedded@1.83.0)(terser@5.31.0)(yaml@2.6.1): + vite@6.1.1(@types/node@20.16.10)(jiti@2.4.2)(sass-embedded@1.83.0)(terser@5.31.0)(yaml@2.6.1): dependencies: esbuild: 0.24.2 postcss: 8.5.3 @@ -28826,12 +29941,25 @@ snapshots: optionalDependencies: '@types/node': 20.16.10 fsevents: 2.3.3 - jiti: 1.21.6 + jiti: 2.4.2 + sass-embedded: 1.83.0 + terser: 5.31.0 + yaml: 2.6.1 + + vite@6.1.1(@types/node@22.13.5)(jiti@2.4.2)(sass-embedded@1.83.0)(terser@5.31.0)(yaml@2.6.1): + dependencies: + esbuild: 0.24.2 + postcss: 8.5.3 + rollup: 4.32.1 + optionalDependencies: + '@types/node': 22.13.5 + fsevents: 2.3.3 + jiti: 2.4.2 sass-embedded: 1.83.0 terser: 5.31.0 yaml: 2.6.1 - vite@6.1.1(@types/node@22.8.7)(jiti@1.21.6)(sass-embedded@1.83.0)(terser@5.31.0)(yaml@2.6.1): + vite@6.1.1(@types/node@22.8.7)(jiti@2.4.2)(sass-embedded@1.83.0)(terser@5.31.0)(yaml@2.6.1): dependencies: esbuild: 0.24.2 postcss: 8.5.3 @@ -28839,19 +29967,19 @@ snapshots: optionalDependencies: '@types/node': 22.8.7 fsevents: 2.3.3 - jiti: 1.21.6 + jiti: 2.4.2 sass-embedded: 1.83.0 terser: 5.31.0 yaml: 2.6.1 - vitefu@1.0.5(vite@6.1.1(@types/node@22.8.7)(jiti@1.21.6)(sass-embedded@1.83.0)(terser@5.31.0)(yaml@2.6.1)): + vitefu@1.0.5(vite@6.1.1(@types/node@22.8.7)(jiti@2.4.2)(sass-embedded@1.83.0)(terser@5.31.0)(yaml@2.6.1)): optionalDependencies: - vite: 6.1.1(@types/node@22.8.7)(jiti@1.21.6)(sass-embedded@1.83.0)(terser@5.31.0)(yaml@2.6.1) + vite: 6.1.1(@types/node@22.8.7)(jiti@2.4.2)(sass-embedded@1.83.0)(terser@5.31.0)(yaml@2.6.1) vitest@2.1.8(@types/node@22.13.0)(jsdom@25.0.1)(msw@2.7.0(@types/node@22.13.0)(typescript@5.7.2))(sass-embedded@1.83.0)(terser@5.31.0): dependencies: '@vitest/expect': 2.1.8 - '@vitest/mocker': 2.1.8(msw@2.7.0(@types/node@22.13.0)(typescript@5.7.2))(vite@5.4.8(@types/node@22.13.5)(sass-embedded@1.83.0)(terser@5.31.0)) + '@vitest/mocker': 2.1.8(msw@2.7.0(@types/node@22.13.0)(typescript@5.7.2))(vite@5.4.8(@types/node@22.13.0)(sass-embedded@1.83.0)(terser@5.31.0)) '@vitest/pretty-format': 2.1.8 '@vitest/runner': 2.1.8 '@vitest/snapshot': 2.1.8 @@ -28884,10 +30012,10 @@ snapshots: - supports-color - terser - vitest@2.1.8(@types/node@22.13.5)(jsdom@25.0.1)(msw@2.7.0(@types/node@22.13.5)(typescript@5.7.2))(sass-embedded@1.83.0)(terser@5.31.0): + vitest@2.1.8(@types/node@22.13.5)(jsdom@25.0.1)(msw@2.7.0(@types/node@22.13.5)(typescript@5.8.2))(sass-embedded@1.83.0)(terser@5.31.0): dependencies: '@vitest/expect': 2.1.8 - '@vitest/mocker': 2.1.8(msw@2.7.0(@types/node@22.13.5)(typescript@5.7.2))(vite@5.4.8(@types/node@22.13.5)(sass-embedded@1.83.0)(terser@5.31.0)) + '@vitest/mocker': 2.1.8(msw@2.7.0(@types/node@22.13.5)(typescript@5.8.2))(vite@5.4.8(@types/node@22.13.5)(sass-embedded@1.83.0)(terser@5.31.0)) '@vitest/pretty-format': 2.1.8 '@vitest/runner': 2.1.8 '@vitest/snapshot': 2.1.8 @@ -28920,10 +30048,10 @@ snapshots: - supports-color - terser - vitest@3.0.6(@types/debug@4.1.12)(@types/node@20.16.10)(jiti@1.21.6)(jsdom@25.0.1)(msw@2.7.0(@types/node@20.16.10)(typescript@5.7.2))(sass-embedded@1.83.0)(terser@5.31.0)(yaml@2.6.1): + vitest@3.0.6(@types/debug@4.1.12)(@types/node@20.16.10)(jiti@2.4.2)(jsdom@25.0.1)(msw@2.7.0(@types/node@20.16.10)(typescript@5.8.2))(sass-embedded@1.83.0)(terser@5.31.0)(yaml@2.6.1): dependencies: '@vitest/expect': 3.0.6 - '@vitest/mocker': 3.0.6(msw@2.7.0(@types/node@20.16.10)(typescript@5.7.2))(vite@6.1.1(@types/node@20.16.10)(jiti@1.21.6)(sass-embedded@1.83.0)(terser@5.31.0)(yaml@2.6.1)) + '@vitest/mocker': 3.0.6(msw@2.7.0(@types/node@20.16.10)(typescript@5.8.2))(vite@6.1.1(@types/node@20.16.10)(jiti@2.4.2)(sass-embedded@1.83.0)(terser@5.31.0)(yaml@2.6.1)) '@vitest/pretty-format': 3.0.6 '@vitest/runner': 3.0.6 '@vitest/snapshot': 3.0.6 @@ -28939,8 +30067,8 @@ snapshots: tinyexec: 0.3.2 tinypool: 1.0.2 tinyrainbow: 2.0.0 - vite: 6.1.1(@types/node@20.16.10)(jiti@1.21.6)(sass-embedded@1.83.0)(terser@5.31.0)(yaml@2.6.1) - vite-node: 3.0.6(@types/node@20.16.10)(jiti@1.21.6)(sass-embedded@1.83.0)(terser@5.31.0)(yaml@2.6.1) + vite: 6.1.1(@types/node@20.16.10)(jiti@2.4.2)(sass-embedded@1.83.0)(terser@5.31.0)(yaml@2.6.1) + vite-node: 3.0.6(@types/node@20.16.10)(jiti@2.4.2)(sass-embedded@1.83.0)(terser@5.31.0)(yaml@2.6.1) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 @@ -28960,6 +30088,46 @@ snapshots: - tsx - yaml + vitest@3.0.8(@types/debug@4.1.12)(@types/node@22.13.5)(jiti@2.4.2)(jsdom@25.0.1)(msw@2.7.0(@types/node@22.13.5)(typescript@5.8.2))(sass-embedded@1.83.0)(terser@5.31.0)(yaml@2.6.1): + dependencies: + '@vitest/expect': 3.0.8 + '@vitest/mocker': 3.0.8(msw@2.7.0(@types/node@22.13.5)(typescript@5.8.2))(vite@6.1.1(@types/node@22.13.5)(jiti@2.4.2)(sass-embedded@1.83.0)(terser@5.31.0)(yaml@2.6.1)) + '@vitest/pretty-format': 3.0.8 + '@vitest/runner': 3.0.8 + '@vitest/snapshot': 3.0.8 + '@vitest/spy': 3.0.8 + '@vitest/utils': 3.0.8 + chai: 5.2.0 + debug: 4.4.0 + expect-type: 1.1.0 + magic-string: 0.30.17 + pathe: 2.0.3 + std-env: 3.8.0 + tinybench: 2.9.0 + tinyexec: 0.3.2 + tinypool: 1.0.2 + tinyrainbow: 2.0.0 + vite: 6.1.1(@types/node@22.13.5)(jiti@2.4.2)(sass-embedded@1.83.0)(terser@5.31.0)(yaml@2.6.1) + vite-node: 3.0.8(@types/node@22.13.5)(jiti@2.4.2)(sass-embedded@1.83.0)(terser@5.31.0)(yaml@2.6.1) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/debug': 4.1.12 + '@types/node': 22.13.5 + jsdom: 25.0.1 + transitivePeerDependencies: + - jiti + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + vlq@1.0.1: {} vscode-oniguruma@1.7.0: {} @@ -29002,7 +30170,7 @@ snapshots: webidl-conversions@7.0.0: optional: true - webpack-dev-middleware@7.4.2(webpack@5.91.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.24.2)): + webpack-dev-middleware@7.4.2(webpack@5.91.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.25.0)): dependencies: colorette: 2.0.20 memfs: 4.17.0 @@ -29011,10 +30179,10 @@ snapshots: range-parser: 1.2.1 schema-utils: 4.2.0 optionalDependencies: - webpack: 5.91.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.24.2) + webpack: 5.91.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.25.0) optional: true - webpack-dev-server@5.0.4(webpack@5.91.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.24.2)): + webpack-dev-server@5.0.4(webpack@5.91.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.25.0)): dependencies: '@types/bonjour': 3.5.13 '@types/connect-history-api-fallback': 1.5.4 @@ -29044,10 +30212,10 @@ snapshots: serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack-dev-middleware: 7.4.2(webpack@5.91.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.24.2)) + webpack-dev-middleware: 7.4.2(webpack@5.91.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.25.0)) ws: 8.18.0 optionalDependencies: - webpack: 5.91.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.24.2) + webpack: 5.91.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.25.0) transitivePeerDependencies: - bufferutil - debug @@ -29057,7 +30225,7 @@ snapshots: webpack-sources@3.2.3: {} - webpack@5.91.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.24.2): + webpack@5.91.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.25.0): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.6 @@ -29080,7 +30248,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.24.2)(webpack@5.91.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.24.2)) + terser-webpack-plugin: 5.3.10(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.25.0)(webpack@5.91.0(@swc/core@1.7.42(@swc/helpers@0.5.15))(esbuild@0.25.0)) watchpack: 2.4.1 webpack-sources: 3.2.3 transitivePeerDependencies: @@ -29190,6 +30358,14 @@ snapshots: '@cloudflare/workerd-linux-arm64': 1.20250124.0 '@cloudflare/workerd-windows-64': 1.20250124.0 + workerd@1.20250224.0: + optionalDependencies: + '@cloudflare/workerd-darwin-64': 1.20250224.0 + '@cloudflare/workerd-darwin-arm64': 1.20250224.0 + '@cloudflare/workerd-linux-64': 1.20250224.0 + '@cloudflare/workerd-linux-arm64': 1.20250224.0 + '@cloudflare/workerd-windows-64': 1.20250224.0 + workspace-tools@0.36.4: dependencies: '@yarnpkg/lockfile': 1.1.0 @@ -29219,6 +30395,26 @@ snapshots: - supports-color - utf-8-validate + wrangler@3.114.0(@cloudflare/workers-types@4.20250124.3): + dependencies: + '@cloudflare/kv-asset-handler': 0.3.4 + '@cloudflare/unenv-preset': 2.0.0(unenv@2.0.0-rc.8)(workerd@1.20250224.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) + blake3-wasm: 2.1.5 + esbuild: 0.17.19 + miniflare: 3.20250224.0 + path-to-regexp: 6.3.0 + unenv: 2.0.0-rc.8 + workerd: 1.20250224.0 + optionalDependencies: + '@cloudflare/workers-types': 4.20250124.3 + fsevents: 2.3.3 + sharp: 0.33.5 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + wrap-ansi@6.2.0: dependencies: ansi-styles: 4.3.0 @@ -29357,12 +30553,20 @@ snapshots: yoctocolors@2.1.1: {} + youch@3.2.3: + dependencies: + cookie: 0.5.0 + mustache: 4.2.0 + stacktracey: 2.1.8 + youch@3.3.4: dependencies: cookie: 0.7.2 mustache: 4.2.0 stacktracey: 2.1.8 + zod@3.22.3: {} + zod@3.24.1: {} zwitch@2.0.4: {} diff --git a/vitest.workspace.mts b/vitest.workspace.mts index d941cc05..784128ea 100644 --- a/vitest.workspace.mts +++ b/vitest.workspace.mts @@ -1 +1,3 @@ -export default ["packages/*", "plugins/*"]; +import { defineWorkspace } from "vitest/config"; + +export default defineWorkspace(["packages/*", "plugins/*"]); From f1580afd16bceb8caff0c2516409685518aab059 Mon Sep 17 00:00:00 2001 From: gronxb Date: Sat, 8 Mar 2025 15:39:23 +0900 Subject: [PATCH 07/23] fix: supabase --- .../filterCompatibleAppVersions.ts | 29 +++++++++++++++++++ .../supabase/functions/update-server/index.ts | 2 +- 2 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 plugins/supabase/supabase/functions/update-server/filterCompatibleAppVersions.ts diff --git a/plugins/supabase/supabase/functions/update-server/filterCompatibleAppVersions.ts b/plugins/supabase/supabase/functions/update-server/filterCompatibleAppVersions.ts new file mode 100644 index 00000000..5ed24eeb --- /dev/null +++ b/plugins/supabase/supabase/functions/update-server/filterCompatibleAppVersions.ts @@ -0,0 +1,29 @@ +import semver from "npm:semver@7.7.1"; + +const semverSatisfies = (targetAppVersion: string, currentVersion: string) => { + const currentCoerce = semver.coerce(currentVersion); + if (!currentCoerce) { + return false; + } + + return semver.satisfies(currentCoerce.version, targetAppVersion); +}; + +/** + * Filters target app versions that are compatible with the current app version. + * Returns only versions that are compatible with the current version according to semver rules. + * + * @param targetAppVersionList - List of target app versions to filter + * @param currentVersion - Current app version + * @returns Array of target app versions compatible with the current version + */ +export const filterCompatibleAppVersions = ( + targetAppVersionList: string[], + currentVersion: string, +) => { + const compatibleAppVersionList = targetAppVersionList.filter((version) => + semverSatisfies(version, currentVersion), + ); + + return compatibleAppVersionList.sort((a, b) => b.localeCompare(a)); +}; diff --git a/plugins/supabase/supabase/functions/update-server/index.ts b/plugins/supabase/supabase/functions/update-server/index.ts index 326a3fc7..528abb43 100644 --- a/plugins/supabase/supabase/functions/update-server/index.ts +++ b/plugins/supabase/supabase/functions/update-server/index.ts @@ -1,7 +1,7 @@ import "jsr:@supabase/functions-js/edge-runtime.d.ts"; import camelcaseKeys from "npm:camelcase-keys@9.1.3"; import { createClient } from "jsr:@supabase/supabase-js@2.47.10"; -import { filterCompatibleAppVersions } from "@hot-updater/js"; +import { filterCompatibleAppVersions } from "./filterCompatibleAppVersions"; const NIL_UUID = "00000000-0000-0000-0000-000000000000"; From 2e054b3f65137a3cf3a4398278342b22115c241d Mon Sep 17 00:00:00 2001 From: gronxb Date: Sat, 8 Mar 2025 16:00:49 +0900 Subject: [PATCH 08/23] fix: header --- packages/core/src/types.ts | 16 +++++++++++++++- .../hot-updater/src/commands/init/aws/index.ts | 16 ++++++++++++++-- packages/react-native/src/ensureUpdateInfo.ts | 4 +++- 3 files changed, 32 insertions(+), 4 deletions(-) diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts index a58a0469..a1af265a 100644 --- a/packages/core/src/types.ts +++ b/packages/core/src/types.ts @@ -37,6 +37,19 @@ export interface Bundle { * The message of the bundle. */ message: string | null; + /** + * + * The name of the environment where the bundle is deployed. + * + * Examples: + * - production: Production environment for end users + * - development: Development environment for testing + * - staging: Staging environment for quality assurance before production + * - app-name: Environment for specific app instances (e.g., my-app, app-test) + * + * Different stage values can be used based on each app's requirements. + */ + stage: string; } type SnakeCase = S extends `${infer T}${infer U}` @@ -73,6 +86,7 @@ export interface UpdateInfo { export interface GetBundlesArgs { platform: Platform; bundleId: string; - minBundleId?: string; appVersion: string; + minBundleId?: string; + stage?: string; } diff --git a/packages/hot-updater/src/commands/init/aws/index.ts b/packages/hot-updater/src/commands/init/aws/index.ts index a8fa4be4..8e92b482 100644 --- a/packages/hot-updater/src/commands/init/aws/index.ts +++ b/packages/hot-updater/src/commands/init/aws/index.ts @@ -444,7 +444,13 @@ export const createCloudFrontDistribution = async ( Cookies: { Forward: "none" }, Headers: { Quantity: 3, - Items: ["x-bundle-id", "x-app-version", "x-app-platform"], + Items: [ + "x-bundle-id", + "x-app-version", + "x-app-platform", + "x-min-bundle-id", + "x-stage", + ], }, }, }, @@ -554,7 +560,13 @@ export const createCloudFrontDistribution = async ( Cookies: { Forward: "none" }, Headers: { Quantity: 3, - Items: ["x-bundle-id", "x-app-version", "x-app-platform"], + Items: [ + "x-bundle-id", + "x-app-version", + "x-app-platform", + "x-min-bundle-id", + "x-stage", + ], }, }, }, diff --git a/packages/react-native/src/ensureUpdateInfo.ts b/packages/react-native/src/ensureUpdateInfo.ts index 743e12cb..7a961d6f 100644 --- a/packages/react-native/src/ensureUpdateInfo.ts +++ b/packages/react-native/src/ensureUpdateInfo.ts @@ -7,7 +7,7 @@ import type { export const ensureUpdateInfo = async ( source: BundleArg, - { appVersion, bundleId, platform }: GetBundlesArgs, + { appVersion, bundleId, platform, minBundleId, stage }: GetBundlesArgs, requestHeaders?: Record, ): Promise => { try { @@ -19,6 +19,8 @@ export const ensureUpdateInfo = async ( "x-app-platform": platform, "x-app-version": appVersion, "x-bundle-id": bundleId, + ...(minBundleId ? { "x-min-bundle-id": minBundleId } : {}), + ...(stage ? { "x-stage": stage } : {}), ...requestHeaders, }, }).then((res) => res.json()); From dd2dfcaca0562c353b2b11900a2a04aec24d59d4 Mon Sep 17 00:00:00 2001 From: gronxb Date: Sat, 8 Mar 2025 16:03:22 +0900 Subject: [PATCH 09/23] fix: min bundle id --- packages/react-native/src/checkForUpdate.ts | 4 +++- packages/react-native/src/index.ts | 2 ++ packages/react-native/src/native.ts | 19 ++++++++++++++----- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/packages/react-native/src/checkForUpdate.ts b/packages/react-native/src/checkForUpdate.ts index 5f12caa7..a9241c37 100644 --- a/packages/react-native/src/checkForUpdate.ts +++ b/packages/react-native/src/checkForUpdate.ts @@ -3,7 +3,7 @@ import { getUpdateInfo } from "@hot-updater/js"; import { Platform } from "react-native"; import { ensureUpdateInfo } from "./ensureUpdateInfo"; import { HotUpdaterError } from "./error"; -import { getAppVersion, getBundleId } from "./native"; +import { getAppVersion, getBundleId, getMinBundleId } from "./native"; export interface CheckForUpdateConfig { source: BundleArg; @@ -24,6 +24,7 @@ export async function checkForUpdate(config: CheckForUpdateConfig) { const currentAppVersion = await getAppVersion(); const platform = Platform.OS as "ios" | "android"; const currentBundleId = await getBundleId(); + const minBundleId = await getMinBundleId(); if (!currentAppVersion) { throw new HotUpdaterError("Failed to get app version"); @@ -35,6 +36,7 @@ export async function checkForUpdate(config: CheckForUpdateConfig) { appVersion: currentAppVersion, bundleId: currentBundleId, platform, + minBundleId, }, config.requestHeaders, ); diff --git a/packages/react-native/src/index.ts b/packages/react-native/src/index.ts index 2e6f8e0a..d27b4720 100644 --- a/packages/react-native/src/index.ts +++ b/packages/react-native/src/index.ts @@ -3,6 +3,7 @@ import { addListener, getAppVersion, getBundleId, + getMinBundleId, reload, updateBundle, } from "./native"; @@ -25,6 +26,7 @@ export const HotUpdater = { reload, getAppVersion, getBundleId, + getMinBundleId, addListener, checkForUpdate, diff --git a/packages/react-native/src/native.ts b/packages/react-native/src/native.ts index 5761c904..31264544 100644 --- a/packages/react-native/src/native.ts +++ b/packages/react-native/src/native.ts @@ -79,6 +79,17 @@ export const reload = () => { }); }; +/** + * Fetches the minimum bundle id, which represents the initial bundle of the app + * since it is created at build time. + * + * @returns {string} Resolves with the minimum bundle id or null if not available. + */ +export const getMinBundleId = (): string => { + const constants = HotUpdaterNative.getConstants(); + return constants.BUNDLE_ID_BUILD_TIME; +}; + /** * Fetches the current bundle version id. * @@ -86,11 +97,9 @@ export const reload = () => { * @returns {Promise} Resolves with the current version id or null if not available. */ export const getBundleId = (): string => { - const constants = HotUpdaterNative.getConstants(); + const minBundleId = getMinBundleId(); - return constants.BUNDLE_ID_BUILD_TIME.localeCompare( - HotUpdater.HOT_UPDATER_BUNDLE_ID, - ) >= 0 - ? constants.BUNDLE_ID_BUILD_TIME + return minBundleId.localeCompare(HotUpdater.HOT_UPDATER_BUNDLE_ID) >= 0 + ? minBundleId : HotUpdater.HOT_UPDATER_BUNDLE_ID; }; From e9ebfb579ee2cedfb7b09256d87e39950a7f99b6 Mon Sep 17 00:00:00 2001 From: gronxb Date: Sat, 8 Mar 2025 16:26:48 +0900 Subject: [PATCH 10/23] feat: channel --- packages/core/src/types.ts | 17 ++++++++--------- .../hot-updater/src/commands/init/aws/index.ts | 4 ++-- packages/react-native/src/ensureUpdateInfo.ts | 4 ++-- .../migrations/0002_hot-updater_0.13.0.sql | 2 +- .../migrations/0002_hot-updater_0.13.0.sql | 2 +- 5 files changed, 14 insertions(+), 15 deletions(-) diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts index a1af265a..d7f1c6ae 100644 --- a/packages/core/src/types.ts +++ b/packages/core/src/types.ts @@ -38,18 +38,17 @@ export interface Bundle { */ message: string | null; /** - * - * The name of the environment where the bundle is deployed. + * The name of the channel where the bundle is deployed. * * Examples: - * - production: Production environment for end users - * - development: Development environment for testing - * - staging: Staging environment for quality assurance before production - * - app-name: Environment for specific app instances (e.g., my-app, app-test) + * - production: Production channel for end users + * - development: Development channel for testing + * - staging: Staging channel for quality assurance before production + * - app-name: Channel for specific app instances (e.g., my-app, app-test) * - * Different stage values can be used based on each app's requirements. + * Different channel values can be used based on each app's requirements. */ - stage: string; + channel: string; } type SnakeCase = S extends `${infer T}${infer U}` @@ -88,5 +87,5 @@ export interface GetBundlesArgs { bundleId: string; appVersion: string; minBundleId?: string; - stage?: string; + channel?: string; } diff --git a/packages/hot-updater/src/commands/init/aws/index.ts b/packages/hot-updater/src/commands/init/aws/index.ts index 8e92b482..eb579949 100644 --- a/packages/hot-updater/src/commands/init/aws/index.ts +++ b/packages/hot-updater/src/commands/init/aws/index.ts @@ -449,7 +449,7 @@ export const createCloudFrontDistribution = async ( "x-app-version", "x-app-platform", "x-min-bundle-id", - "x-stage", + "x-channel", ], }, }, @@ -565,7 +565,7 @@ export const createCloudFrontDistribution = async ( "x-app-version", "x-app-platform", "x-min-bundle-id", - "x-stage", + "x-channel", ], }, }, diff --git a/packages/react-native/src/ensureUpdateInfo.ts b/packages/react-native/src/ensureUpdateInfo.ts index 7a961d6f..745777a7 100644 --- a/packages/react-native/src/ensureUpdateInfo.ts +++ b/packages/react-native/src/ensureUpdateInfo.ts @@ -7,7 +7,7 @@ import type { export const ensureUpdateInfo = async ( source: BundleArg, - { appVersion, bundleId, platform, minBundleId, stage }: GetBundlesArgs, + { appVersion, bundleId, platform, minBundleId, channel }: GetBundlesArgs, requestHeaders?: Record, ): Promise => { try { @@ -20,7 +20,7 @@ export const ensureUpdateInfo = async ( "x-app-version": appVersion, "x-bundle-id": bundleId, ...(minBundleId ? { "x-min-bundle-id": minBundleId } : {}), - ...(stage ? { "x-stage": stage } : {}), + ...(channel ? { "x-channel": channel } : {}), ...requestHeaders, }, }).then((res) => res.json()); diff --git a/plugins/cloudflare/worker/migrations/0002_hot-updater_0.13.0.sql b/plugins/cloudflare/worker/migrations/0002_hot-updater_0.13.0.sql index 18aa0ef0..db48b990 100644 --- a/plugins/cloudflare/worker/migrations/0002_hot-updater_0.13.0.sql +++ b/plugins/cloudflare/worker/migrations/0002_hot-updater_0.13.0.sql @@ -2,4 +2,4 @@ -- HotUpdater.bundles ALTER TABLE bundles -ADD COLUMN stage TEXT NOT NULL DEFAULT 'production'; +ADD COLUMN channel TEXT NOT NULL DEFAULT 'production'; diff --git a/plugins/supabase/supabase/migrations/0002_hot-updater_0.13.0.sql b/plugins/supabase/supabase/migrations/0002_hot-updater_0.13.0.sql index 064979ff..6fe07fab 100644 --- a/plugins/supabase/supabase/migrations/0002_hot-updater_0.13.0.sql +++ b/plugins/supabase/supabase/migrations/0002_hot-updater_0.13.0.sql @@ -87,7 +87,7 @@ $$; -- HotUpdater.bundles ALTER TABLE bundles -ADD COLUMN stage text NOT NULL DEFAULT 'production'; +ADD COLUMN channel text NOT NULL DEFAULT 'production'; -- HotUpdater.semver_satisfies DROP FUNCTION IF EXISTS semver_satisfies; From f72dfcd36f5777c7fac76e261dcf9a05bbae653e Mon Sep 17 00:00:00 2001 From: gronxb Date: Sat, 8 Mar 2025 16:30:06 +0900 Subject: [PATCH 11/23] fix: getChannel --- packages/react-native/src/checkForUpdate.ts | 13 ++++++++++--- packages/react-native/src/native.ts | 5 +++++ plugins/plugin-core/src/types.ts | 12 ++++++++++++ 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/packages/react-native/src/checkForUpdate.ts b/packages/react-native/src/checkForUpdate.ts index a9241c37..743346a4 100644 --- a/packages/react-native/src/checkForUpdate.ts +++ b/packages/react-native/src/checkForUpdate.ts @@ -3,7 +3,12 @@ import { getUpdateInfo } from "@hot-updater/js"; import { Platform } from "react-native"; import { ensureUpdateInfo } from "./ensureUpdateInfo"; import { HotUpdaterError } from "./error"; -import { getAppVersion, getBundleId, getMinBundleId } from "./native"; +import { + getAppVersion, + getBundleId, + getChannel, + getMinBundleId, +} from "./native"; export interface CheckForUpdateConfig { source: BundleArg; @@ -23,8 +28,9 @@ export async function checkForUpdate(config: CheckForUpdateConfig) { const currentAppVersion = await getAppVersion(); const platform = Platform.OS as "ios" | "android"; - const currentBundleId = await getBundleId(); - const minBundleId = await getMinBundleId(); + const currentBundleId = getBundleId(); + const minBundleId = getMinBundleId(); + const channel = getChannel(); if (!currentAppVersion) { throw new HotUpdaterError("Failed to get app version"); @@ -37,6 +43,7 @@ export async function checkForUpdate(config: CheckForUpdateConfig) { bundleId: currentBundleId, platform, minBundleId, + channel, }, config.requestHeaders, ); diff --git a/packages/react-native/src/native.ts b/packages/react-native/src/native.ts index 31264544..f1f7e41a 100644 --- a/packages/react-native/src/native.ts +++ b/packages/react-native/src/native.ts @@ -4,6 +4,7 @@ const NIL_UUID = "00000000-0000-0000-0000-000000000000"; const HotUpdater = { HOT_UPDATER_BUNDLE_ID: NIL_UUID, + CHANNEL: "production", }; const LINKING_ERROR = @@ -103,3 +104,7 @@ export const getBundleId = (): string => { ? minBundleId : HotUpdater.HOT_UPDATER_BUNDLE_ID; }; + +export const getChannel = (): string => { + return HotUpdater.CHANNEL; +}; diff --git a/plugins/plugin-core/src/types.ts b/plugins/plugin-core/src/types.ts index 755b782e..f73fd467 100644 --- a/plugins/plugin-core/src/types.ts +++ b/plugins/plugin-core/src/types.ts @@ -54,6 +54,18 @@ export interface StoragePluginHooks { } export type Config = { + /** + * The name of the channel where the bundle is deployed. + * + * @default "production" + * + * Examples: + * - production: Production channel for end users + * - development: Development channel for testing + * - staging: Staging channel for quality assurance before production + * - app-name: Channel for specific app instances (e.g., my-app, app-test) + */ + channel?: string; console?: { /** * Git repository URL From 171bf1dbb696d7143631b21ef912749cb43228c8 Mon Sep 17 00:00:00 2001 From: gronxb Date: Sat, 8 Mar 2025 16:45:37 +0900 Subject: [PATCH 12/23] fix: channel --- .../test-utils/setupGetUpdateInfoTestSuite.ts | 51 +++++++++++++++++++ packages/core/src/types.ts | 23 +++++++++ plugins/aws/src/s3Database.spec.ts | 6 ++- plugins/cloudflare/src/d1Database.ts | 22 +++----- plugins/supabase/src/supabaseDatabase.ts | 3 ++ 5 files changed, 88 insertions(+), 17 deletions(-) diff --git a/packages/core/src/test-utils/setupGetUpdateInfoTestSuite.ts b/packages/core/src/test-utils/setupGetUpdateInfoTestSuite.ts index 065fba12..0ec453ef 100644 --- a/packages/core/src/test-utils/setupGetUpdateInfoTestSuite.ts +++ b/packages/core/src/test-utils/setupGetUpdateInfoTestSuite.ts @@ -8,6 +8,7 @@ const DEFAULT_BUNDLE = { platform: "ios", gitCommitHash: null, fileHash: "hash", + channel: "production", } as const; const INIT_BUNDLE_ROLLBACK_UPDATE_INFO = { @@ -783,4 +784,54 @@ export const setupGetUpdateInfoTestSuite = ({ }); expect(update).toBeNull(); }); + + it("does not update bundles from different channels", async () => { + const bundles: Bundle[] = [ + { + ...DEFAULT_BUNDLE, + targetAppVersion: "1.0", + shouldForceUpdate: false, + enabled: true, + channel: "beta", + id: "00000000-0000-0000-0000-000000000001", + }, + ]; + + const update = await getUpdateInfo(bundles, { + appVersion: "1.0", + bundleId: NIL_UUID, + platform: "ios", + channel: "production", + }); + + expect(update).toBeNull(); + }); + + it("updates bundles from the same channel", async () => { + const bundles: Bundle[] = [ + { + ...DEFAULT_BUNDLE, + targetAppVersion: "1.0", + shouldForceUpdate: false, + enabled: true, + channel: "beta", + id: "00000000-0000-0000-0000-000000000001", + }, + ]; + + const update = await getUpdateInfo(bundles, { + appVersion: "1.0", + bundleId: NIL_UUID, + platform: "ios", + channel: "beta", + }); + + expect(update).toStrictEqual({ + id: "00000000-0000-0000-0000-000000000001", + fileUrl: "http://example.com/bundle.zip", + message: "hello", + shouldForceUpdate: false, + status: "UPDATE", + }); + }); }; diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts index d7f1c6ae..bbf84258 100644 --- a/packages/core/src/types.ts +++ b/packages/core/src/types.ts @@ -84,8 +84,31 @@ export interface UpdateInfo { export interface GetBundlesArgs { platform: Platform; + /** + * The current bundle id of the app. + */ bundleId: string; + /** + * The current app version. + */ appVersion: string; + /** + * Minimum bundle id that should be used. + * This value is generated at build time via getMinBundleId(). + * + * @default "00000000-0000-0000-0000-000000000000" + */ minBundleId?: string; + /** + * The name of the channel where the bundle is deployed. + * + * @default "production" + * + * Examples: + * - production: Production channel for end users + * - development: Development channel for testing + * - staging: Staging channel for quality assurance before production + * - app-name: Channel for specific app instances (e.g., my-app, app-test) + */ channel?: string; } diff --git a/plugins/aws/src/s3Database.spec.ts b/plugins/aws/src/s3Database.spec.ts index 577960e7..42638d05 100644 --- a/plugins/aws/src/s3Database.spec.ts +++ b/plugins/aws/src/s3Database.spec.ts @@ -13,14 +13,15 @@ import { s3Database } from "./s3Database"; const delay = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)); -const DEFAULT_BUNDLE = { +const DEFAULT_BUNDLE: Omit = { fileUrl: "http://example.com/bundle.zip", fileHash: "hash", gitCommitHash: null, message: null, enabled: true, shouldForceUpdate: false, -} as const; + channel: "production", +}; const createBundleJson = ( platform: "ios" | "android", @@ -31,6 +32,7 @@ const createBundleJson = ( id, platform, targetAppVersion, + channel: "production", }); // fakeStore simulates files stored in S3 diff --git a/plugins/cloudflare/src/d1Database.ts b/plugins/cloudflare/src/d1Database.ts index 102917e9..88a544af 100644 --- a/plugins/cloudflare/src/d1Database.ts +++ b/plugins/cloudflare/src/d1Database.ts @@ -47,6 +47,7 @@ export const d1Database = .map((b) => { params.push( b.id, + b.channel, b.enabled ? 1 : 0, b.fileUrl, b.shouldForceUpdate ? 1 : 0, @@ -56,13 +57,14 @@ export const d1Database = b.platform, b.targetAppVersion, ); - return "(?, ?, ?, ?, ?, ?, ?, ?, ?)"; + return "(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; }) .join(",\n"); const sql = minify(/* sql */ ` INSERT OR REPLACE INTO bundles ( id, + channel, enabled, file_url, should_force_update, @@ -130,6 +132,7 @@ export const d1Database = const row = rows[0]; return { + channel: row.channel, enabled: Boolean(row.enabled), fileUrl: row.file_url, shouldForceUpdate: Boolean(row.should_force_update), @@ -148,20 +151,8 @@ export const d1Database = } const sql = minify( - /* sql */ ` - SELECT - id, - enabled, - file_url, - should_force_update, - file_hash, - git_commit_hash, - message, - platform, - target_app_version - FROM bundles - ORDER BY id DESC - `, + /* sql */ + "SELECT * FROM bundles ORDER BY id DESC", ); const singlePage = await cf.d1.database.query(config.databaseId, { @@ -180,6 +171,7 @@ export const d1Database = } else { bundles = rows.map((row) => ({ id: row.id, + channel: row.channel, enabled: Boolean(row.enabled), fileUrl: row.file_url, shouldForceUpdate: Boolean(row.should_force_update), diff --git a/plugins/supabase/src/supabaseDatabase.ts b/plugins/supabase/src/supabaseDatabase.ts index ee1a9b41..39f10031 100644 --- a/plugins/supabase/src/supabaseDatabase.ts +++ b/plugins/supabase/src/supabaseDatabase.ts @@ -42,6 +42,7 @@ export const supabaseDatabase = await supabase.from("bundles").upsert( changedBundles.map((bundle) => ({ id: bundle.id, + channel: bundle.channel, enabled: bundle.enabled, file_url: bundle.fileUrl, should_force_update: bundle.shouldForceUpdate, @@ -84,6 +85,7 @@ export const supabaseDatabase = return null; } return { + channel: data.channel, enabled: data.enabled, fileUrl: data.file_url, shouldForceUpdate: data.should_force_update, @@ -110,6 +112,7 @@ export const supabaseDatabase = } return data.map((bundle) => ({ + channel: bundle.channel, enabled: bundle.enabled, fileUrl: bundle.file_url, shouldForceUpdate: bundle.should_force_update, From 11732bf85b58463993240520a85cbced12af85a7 Mon Sep 17 00:00:00 2001 From: gronxb Date: Sat, 8 Mar 2025 17:02:54 +0900 Subject: [PATCH 13/23] fix --- packages/core/src/types.ts | 4 ++-- plugins/aws/lambda/getUpdateInfo.spec.ts | 11 +++++++++-- plugins/aws/lambda/getUpdateInfo.ts | 13 +++++-------- plugins/js/src/getUpdateInfo.ts | 10 ++++++++-- 4 files changed, 24 insertions(+), 14 deletions(-) diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts index bbf84258..bd02f10f 100644 --- a/packages/core/src/types.ts +++ b/packages/core/src/types.ts @@ -98,7 +98,7 @@ export interface GetBundlesArgs { * * @default "00000000-0000-0000-0000-000000000000" */ - minBundleId?: string; + minBundleId: string; /** * The name of the channel where the bundle is deployed. * @@ -110,5 +110,5 @@ export interface GetBundlesArgs { * - staging: Staging channel for quality assurance before production * - app-name: Channel for specific app instances (e.g., my-app, app-test) */ - channel?: string; + channel: string; } diff --git a/plugins/aws/lambda/getUpdateInfo.spec.ts b/plugins/aws/lambda/getUpdateInfo.spec.ts index a806172d..e56f402b 100644 --- a/plugins/aws/lambda/getUpdateInfo.spec.ts +++ b/plugins/aws/lambda/getUpdateInfo.spec.ts @@ -18,7 +18,13 @@ const createGetUpdateInfo = (s3: S3Client, bucketName: string) => async ( bundles: Bundle[], - { appVersion, bundleId, platform, minBundleId }: GetBundlesArgs, + { + appVersion, + bundleId, + platform, + minBundleId = NIL_UUID, + channel = "production", + }: GetBundlesArgs, ): Promise => { if (bundles.length > 0) { // Mock target-app-versions.json @@ -66,7 +72,8 @@ const createGetUpdateInfo = } return getUpdateInfoFromS3(s3, bucketName, { - minBundleId: minBundleId || NIL_UUID, + minBundleId, + channel, appVersion, bundleId, platform, diff --git a/plugins/aws/lambda/getUpdateInfo.ts b/plugins/aws/lambda/getUpdateInfo.ts index 7bc5ee26..d7ced29c 100644 --- a/plugins/aws/lambda/getUpdateInfo.ts +++ b/plugins/aws/lambda/getUpdateInfo.ts @@ -1,5 +1,5 @@ import { GetObjectCommand, type S3Client } from "@aws-sdk/client-s3"; -import type { Bundle, Platform } from "@hot-updater/core"; +import { type Bundle, type GetBundlesArgs, NIL_UUID } from "@hot-updater/core"; import { filterCompatibleAppVersions, getUpdateInfo as getUpdateInfoJS, @@ -26,13 +26,9 @@ export const getUpdateInfo = async ( platform, appVersion, bundleId, - minBundleId, - }: { - platform: Platform; - appVersion: string; - bundleId: string; - minBundleId: string; - }, + minBundleId = NIL_UUID, + channel = "production", + }: GetBundlesArgs, ) => { const targetAppVersions = await getS3Json( s3, @@ -62,5 +58,6 @@ export const getUpdateInfo = async ( bundleId, appVersion, minBundleId, + channel, }); }; diff --git a/plugins/js/src/getUpdateInfo.ts b/plugins/js/src/getUpdateInfo.ts index 3b935dbb..dac29143 100644 --- a/plugins/js/src/getUpdateInfo.ts +++ b/plugins/js/src/getUpdateInfo.ts @@ -17,11 +17,18 @@ const INIT_BUNDLE_ROLLBACK_UPDATE_INFO: UpdateInfo = { export const getUpdateInfo = async ( bundles: Bundle[], - { platform, bundleId, appVersion, minBundleId }: GetBundlesArgs, + { + platform, + bundleId, + appVersion, + minBundleId = NIL_UUID, + channel = "production", + }: GetBundlesArgs, ): Promise => { const filteredBundles = bundles.filter( (b) => b.platform === platform && + b.channel === channel && semverSatisfies(b.targetAppVersion, appVersion), ); @@ -41,7 +48,6 @@ export const getUpdateInfo = async ( return INIT_BUNDLE_ROLLBACK_UPDATE_INFO; } - // 5. 후보 번들을 한 번만 내림차순 정렬 (최신 순) const sortedCandidates = candidateBundles .slice() .sort((a, b) => b.id.localeCompare(a.id)); From 0fe3bdc370b1c13062ad5a691e8c9f1698604e8a Mon Sep 17 00:00:00 2001 From: gronxb Date: Sat, 8 Mar 2025 17:13:25 +0900 Subject: [PATCH 14/23] fix: types --- packages/console/src-server/rpc.ts | 1 + packages/core/src/types.ts | 4 ++-- packages/hot-updater/src/commands/deploy.ts | 2 ++ plugins/firebase/src/firebaseDatabase.spec.ts | 2 ++ plugins/firebase/src/firebaseDatabase.ts | 3 +++ plugins/js/src/checkForRollback.spec.ts | 1 + plugins/mock/src/test/mockDatabase.spec.ts | 2 ++ plugins/postgres/src/postgres.ts | 4 ++++ plugins/standalone/src/standaloneRepository.spec.ts | 2 ++ 9 files changed, 19 insertions(+), 2 deletions(-) diff --git a/packages/console/src-server/rpc.ts b/packages/console/src-server/rpc.ts index 55f77060..c0401637 100644 --- a/packages/console/src-server/rpc.ts +++ b/packages/console/src-server/rpc.ts @@ -19,6 +19,7 @@ export const bundleSchema = v.object({ fileHash: v.string(), gitCommitHash: v.nullable(v.string()), message: v.nullable(v.string()), + channel: v.string(), }); let config: Config | null = null; diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts index bd02f10f..bbf84258 100644 --- a/packages/core/src/types.ts +++ b/packages/core/src/types.ts @@ -98,7 +98,7 @@ export interface GetBundlesArgs { * * @default "00000000-0000-0000-0000-000000000000" */ - minBundleId: string; + minBundleId?: string; /** * The name of the channel where the bundle is deployed. * @@ -110,5 +110,5 @@ export interface GetBundlesArgs { * - staging: Staging channel for quality assurance before production * - app-name: Channel for specific app instances (e.g., my-app, app-test) */ - channel: string; + channel?: string; } diff --git a/packages/hot-updater/src/commands/deploy.ts b/packages/hot-updater/src/commands/deploy.ts index 10da977c..7fb3f281 100644 --- a/packages/hot-updater/src/commands/deploy.ts +++ b/packages/hot-updater/src/commands/deploy.ts @@ -177,6 +177,7 @@ export const deploy = async (options: DeployOptions) => { } try { + const channel = config.channel || "production"; await databasePlugin.appendBundle({ shouldForceUpdate: options.forceUpdate, platform, @@ -187,6 +188,7 @@ export const deploy = async (options: DeployOptions) => { targetAppVersion, id: bundleId, enabled: true, + channel, }); await databasePlugin.commitBundle(); } catch (e) { diff --git a/plugins/firebase/src/firebaseDatabase.spec.ts b/plugins/firebase/src/firebaseDatabase.spec.ts index e70bf3a9..97ab5c51 100644 --- a/plugins/firebase/src/firebaseDatabase.spec.ts +++ b/plugins/firebase/src/firebaseDatabase.spec.ts @@ -78,6 +78,7 @@ describe("Firebase Database Plugin", () => { fileHash: "test-file-hash", gitCommitHash: "test-git-hash", message: "test-message", + channel: "production", platform: "android", targetAppVersion: "1.0.0", }; @@ -90,6 +91,7 @@ describe("Firebase Database Plugin", () => { file_hash: "test-file-hash", git_commit_hash: "test-git-hash", message: "test-message", + channel: "production", platform: "android", target_app_version: "1.0.0", }; diff --git a/plugins/firebase/src/firebaseDatabase.ts b/plugins/firebase/src/firebaseDatabase.ts index 06a8f4ef..7e55dacb 100644 --- a/plugins/firebase/src/firebaseDatabase.ts +++ b/plugins/firebase/src/firebaseDatabase.ts @@ -73,6 +73,7 @@ export const firebaseDatabase = message: bundle.message, platform: bundle.platform, target_app_version: bundle.targetAppVersion, + channel: bundle.channel, }, { merge: true }, ); @@ -119,6 +120,7 @@ export const firebaseDatabase = message: data.message, platform: data.platform, targetAppVersion: data.target_app_version, + channel: data.channel, }; }, async getBundles(refresh = false) { @@ -145,6 +147,7 @@ export const firebaseDatabase = message: data.message, platform: data.platform, targetAppVersion: data.target_app_version, + channel: data.channel, }; }); diff --git a/plugins/js/src/checkForRollback.spec.ts b/plugins/js/src/checkForRollback.spec.ts index a245eb65..7b809fda 100644 --- a/plugins/js/src/checkForRollback.spec.ts +++ b/plugins/js/src/checkForRollback.spec.ts @@ -10,6 +10,7 @@ const DEFAULT_BUNDLE = { gitCommitHash: null, message: null, targetAppVersion: "1.0", + channel: "production", } as const; describe("checkForRollback", () => { diff --git a/plugins/mock/src/test/mockDatabase.spec.ts b/plugins/mock/src/test/mockDatabase.spec.ts index bc292d50..72cbef36 100644 --- a/plugins/mock/src/test/mockDatabase.spec.ts +++ b/plugins/mock/src/test/mockDatabase.spec.ts @@ -6,6 +6,7 @@ const DEFAULT_BUNDLES_MOCK: Bundle[] = [ { id: "0194ed78-ee7f-7d55-88f2-0511cbacc8f1", enabled: true, + channel: "production", fileUrl: "https://example.com/bundle.js", shouldForceUpdate: false, fileHash: "1234", @@ -17,6 +18,7 @@ const DEFAULT_BUNDLES_MOCK: Bundle[] = [ { id: "0194ed78-d791-753c-ba37-abb7259edcc8", enabled: true, + channel: "production", fileUrl: "https://example.com/bundle.js", shouldForceUpdate: false, fileHash: "1234", diff --git a/plugins/postgres/src/postgres.ts b/plugins/postgres/src/postgres.ts index 80c48b0a..69e9250a 100644 --- a/plugins/postgres/src/postgres.ts +++ b/plugins/postgres/src/postgres.ts @@ -64,6 +64,7 @@ export const postgres = message: bundle.message, platform: bundle.platform, target_app_version: bundle.targetAppVersion, + channel: bundle.channel, }) .onConflict((oc) => oc.column("id").doUpdateSet({ @@ -75,6 +76,7 @@ export const postgres = message: bundle.message, platform: bundle.platform, target_app_version: bundle.targetAppVersion, + channel: bundle.channel, }), ) .execute(); @@ -120,6 +122,7 @@ export const postgres = message: data.message, platform: data.platform, targetAppVersion: data.target_app_version, + channel: data.channel, } as Bundle; }, async getBundles(refresh = false) { @@ -142,6 +145,7 @@ export const postgres = message: bundle.message, platform: bundle.platform, targetAppVersion: bundle.target_app_version, + channel: bundle.channel, })) as Bundle[]; }, }; diff --git a/plugins/standalone/src/standaloneRepository.spec.ts b/plugins/standalone/src/standaloneRepository.spec.ts index fb94199b..f92a206d 100644 --- a/plugins/standalone/src/standaloneRepository.spec.ts +++ b/plugins/standalone/src/standaloneRepository.spec.ts @@ -32,6 +32,7 @@ const testBundles: Bundle[] = [ shouldForceUpdate: false, enabled: true, id: "00000000-0000-0000-0000-000000000001", + channel: "production", }, ]; @@ -214,6 +215,7 @@ describe("Standalone Repository Plugin (Default Routes)", () => { shouldForceUpdate: false, enabled: true, id: "00000000-0000-0000-0000-000000000002", + channel: "production", }; await repo.appendBundle(newBundle); From 58db6a020dc0471a42d27b42ca6e1d792d39903d Mon Sep 17 00:00:00 2001 From: gronxb Date: Sat, 8 Mar 2025 17:36:06 +0900 Subject: [PATCH 15/23] fix: test --- plugins/cloudflare/sql/bundles.sql | 3 ++- plugins/cloudflare/sql/prepareSql.ts | 3 ++- .../worker/src/getUpdateInfo.spec.ts | 8 ++++--- .../cloudflare/worker/src/getUpdateInfo.ts | 21 +++++++++++-------- plugins/firebase/src/firebaseDatabase.spec.ts | 1 + plugins/postgres/sql/bundles.sql | 3 ++- plugins/postgres/sql/get_update_info.spec.ts | 14 ++++++++++--- plugins/postgres/sql/get_update_info.sql | 2 ++ 8 files changed, 37 insertions(+), 18 deletions(-) diff --git a/plugins/cloudflare/sql/bundles.sql b/plugins/cloudflare/sql/bundles.sql index f2fe48aa..e93620e2 100644 --- a/plugins/cloudflare/sql/bundles.sql +++ b/plugins/cloudflare/sql/bundles.sql @@ -9,7 +9,8 @@ CREATE TABLE bundles ( file_url TEXT NOT NULL, file_hash TEXT NOT NULL, git_commit_hash TEXT, - message TEXT + message TEXT, + channel TEXT NOT NULL ); CREATE INDEX bundles_target_app_version_idx ON bundles(target_app_version); diff --git a/plugins/cloudflare/sql/prepareSql.ts b/plugins/cloudflare/sql/prepareSql.ts index 9635752e..af8a2044 100644 --- a/plugins/cloudflare/sql/prepareSql.ts +++ b/plugins/cloudflare/sql/prepareSql.ts @@ -7,5 +7,6 @@ export const prepareSql = async () => { const contents = await Promise.all( sqlFiles.map((file) => fs.readFile(path.join(__dirname, file), "utf-8")), ); - return contents.join("\n"); + const sql = contents.join("\n"); + return sql; }; diff --git a/plugins/cloudflare/worker/src/getUpdateInfo.spec.ts b/plugins/cloudflare/worker/src/getUpdateInfo.spec.ts index ec36a607..1ed51543 100644 --- a/plugins/cloudflare/worker/src/getUpdateInfo.spec.ts +++ b/plugins/cloudflare/worker/src/getUpdateInfo.spec.ts @@ -26,7 +26,7 @@ const createInsertBundleQuery = (bundle: Bundle) => { return ` INSERT INTO bundles ( id, file_url, file_hash, platform, target_app_version, - should_force_update, enabled, git_commit_hash, message + should_force_update, enabled, git_commit_hash, message, channel ) VALUES ( '${bundle.id}', '${bundle.fileUrl}', @@ -36,7 +36,8 @@ const createInsertBundleQuery = (bundle: Bundle) => { ${bundle.shouldForceUpdate}, ${bundle.enabled}, ${bundle.gitCommitHash ? `'${bundle.gitCommitHash}'` : "null"}, - ${bundle.message ? `'${bundle.message}'` : "null"} + ${bundle.message ? `'${bundle.message}'` : "null"}, + '${bundle.channel}' ); `; }; @@ -45,7 +46,7 @@ const createGetUpdateInfo = (db: D1Database) => async ( bundles: Bundle[], - { appVersion, bundleId, platform, minBundleId }: GetBundlesArgs, + { appVersion, bundleId, platform, minBundleId, channel }: GetBundlesArgs, ): Promise => { if (bundles.length > 0) { await db.prepare(createInsertBundleQuerys(bundles)).run(); @@ -55,6 +56,7 @@ const createGetUpdateInfo = bundleId, platform, minBundleId: minBundleId || NIL_UUID, + channel, })) as UpdateInfo | null; }; diff --git a/plugins/cloudflare/worker/src/getUpdateInfo.ts b/plugins/cloudflare/worker/src/getUpdateInfo.ts index b0059d39..fbbbdd99 100644 --- a/plugins/cloudflare/worker/src/getUpdateInfo.ts +++ b/plugins/cloudflare/worker/src/getUpdateInfo.ts @@ -1,6 +1,11 @@ import { filterCompatibleAppVersions } from "@hot-updater/js"; -import type { Platform, UpdateInfo, UpdateStatus } from "@hot-updater/core"; +import { + type GetBundlesArgs, + NIL_UUID, + type UpdateInfo, + type UpdateStatus, +} from "@hot-updater/core"; export const getUpdateInfo = async ( DB: D1Database, @@ -8,13 +13,9 @@ export const getUpdateInfo = async ( platform, appVersion, bundleId, - minBundleId, - }: { - platform: Platform; - appVersion: string; - bundleId: string; - minBundleId: string; - }, + minBundleId = NIL_UUID, + channel = "production", + }: GetBundlesArgs, ) => { const appVersionList = await DB.prepare( /* sql */ ` @@ -40,6 +41,7 @@ export const getUpdateInfo = async ( ? AS app_version, ? AS bundle_id, ? AS min_bundle_id, + ? AS channel, '00000000-0000-0000-0000-000000000000' AS nil_uuid ), update_candidate AS ( @@ -54,6 +56,7 @@ export const getUpdateInfo = async ( AND b.platform = input.app_platform AND b.id >= input.bundle_id AND b.id >= input.min_bundle_id + AND b.channel = input.channel AND b.target_app_version IN (${targetAppVersionList .map((version) => `'${version}'`) .join(",")}) @@ -99,7 +102,7 @@ export const getUpdateInfo = async ( `; const result = await DB.prepare(sql) - .bind(platform, appVersion, bundleId, minBundleId) + .bind(platform, appVersion, bundleId, minBundleId, channel) .first<{ id: string; should_force_update: number; diff --git a/plugins/firebase/src/firebaseDatabase.spec.ts b/plugins/firebase/src/firebaseDatabase.spec.ts index 97ab5c51..4d243aa8 100644 --- a/plugins/firebase/src/firebaseDatabase.spec.ts +++ b/plugins/firebase/src/firebaseDatabase.spec.ts @@ -172,6 +172,7 @@ describe("Firebase Database Plugin", () => { expect(setDoc).toHaveBeenCalledWith( mockDocRef, { + channel: "production", enabled: false, file_hash: "test-file-hash", file_url: "test-file-url", diff --git a/plugins/postgres/sql/bundles.sql b/plugins/postgres/sql/bundles.sql index 386f2d2a..7f5b5eb2 100644 --- a/plugins/postgres/sql/bundles.sql +++ b/plugins/postgres/sql/bundles.sql @@ -11,7 +11,8 @@ CREATE TABLE bundles ( file_url text NOT NULL, file_hash text NOT NULL, git_commit_hash text, - message text + message text, + channel text NOT NULL DEFAULT 'production' ); CREATE INDEX bundles_target_app_version_idx ON bundles(target_app_version); diff --git a/plugins/postgres/sql/get_update_info.spec.ts b/plugins/postgres/sql/get_update_info.spec.ts index 8c40b92f..9bb5b6cf 100644 --- a/plugins/postgres/sql/get_update_info.spec.ts +++ b/plugins/postgres/sql/get_update_info.spec.ts @@ -15,7 +15,7 @@ const createInsertBundleQuery = (bundle: Bundle) => { return ` INSERT INTO bundles ( id, file_url, file_hash, platform, target_app_version, - should_force_update, enabled, git_commit_hash, message + should_force_update, enabled, git_commit_hash, message, channel ) VALUES ( '${bundle.id}', '${bundle.fileUrl}', @@ -25,7 +25,8 @@ const createInsertBundleQuery = (bundle: Bundle) => { ${bundle.shouldForceUpdate}, ${bundle.enabled}, ${bundle.gitCommitHash ? `'${bundle.gitCommitHash}'` : "null"}, - ${bundle.message ? `'${bundle.message}'` : "null"} + ${bundle.message ? `'${bundle.message}'` : "null"}, + '${bundle.channel}' ); `; }; @@ -34,7 +35,13 @@ const createGetUpdateInfo = (db: PGlite) => async ( bundles: Bundle[], - { appVersion, bundleId, platform, minBundleId }: GetBundlesArgs, + { + appVersion, + bundleId, + platform, + minBundleId = NIL_UUID, + channel = "production", + }: GetBundlesArgs, ): Promise => { await db.exec(createInsertBundleQuerys(bundles)); @@ -64,6 +71,7 @@ const createGetUpdateInfo = '${appVersion}', '${bundleId}', '${minBundleId ?? NIL_UUID}', + '${channel}', ARRAY[${targetAppVersionList.map((v) => `'${v}'`).join(",")}]::text[] ); `, diff --git a/plugins/postgres/sql/get_update_info.sql b/plugins/postgres/sql/get_update_info.sql index d53ba577..0c90cc70 100644 --- a/plugins/postgres/sql/get_update_info.sql +++ b/plugins/postgres/sql/get_update_info.sql @@ -5,6 +5,7 @@ CREATE OR REPLACE FUNCTION get_update_info ( app_version text, bundle_id uuid, min_bundle_id uuid, + channel text, target_app_version_list text[] ) RETURNS TABLE ( @@ -34,6 +35,7 @@ BEGIN AND b.id >= bundle_id AND b.id > min_bundle_id AND b.target_app_version IN (SELECT unnest(target_app_version_list)) + AND b.channel = channel ORDER BY b.id DESC LIMIT 1 ), From 530f356968e75a4f15e22f4d9ed9308d2a7d0284 Mon Sep 17 00:00:00 2001 From: gronxb Date: Sat, 8 Mar 2025 17:37:39 +0900 Subject: [PATCH 16/23] fix: test --- plugins/postgres/sql/get_update_info.sql | 4 ++-- plugins/supabase/supabase/functions/update-server/index.ts | 6 +++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/plugins/postgres/sql/get_update_info.sql b/plugins/postgres/sql/get_update_info.sql index 0c90cc70..2d097945 100644 --- a/plugins/postgres/sql/get_update_info.sql +++ b/plugins/postgres/sql/get_update_info.sql @@ -5,7 +5,7 @@ CREATE OR REPLACE FUNCTION get_update_info ( app_version text, bundle_id uuid, min_bundle_id uuid, - channel text, + target_channel text, target_app_version_list text[] ) RETURNS TABLE ( @@ -35,7 +35,7 @@ BEGIN AND b.id >= bundle_id AND b.id > min_bundle_id AND b.target_app_version IN (SELECT unnest(target_app_version_list)) - AND b.channel = channel + AND b.channel = target_channel ORDER BY b.id DESC LIMIT 1 ), diff --git a/plugins/supabase/supabase/functions/update-server/index.ts b/plugins/supabase/supabase/functions/update-server/index.ts index 528abb43..6863e9e2 100644 --- a/plugins/supabase/supabase/functions/update-server/index.ts +++ b/plugins/supabase/supabase/functions/update-server/index.ts @@ -27,7 +27,10 @@ Deno.serve(async (req) => { const bundleId = req.headers.get("x-bundle-id") as string; const appPlatform = req.headers.get("x-app-platform") as "ios" | "android"; const appVersion = req.headers.get("x-app-version") as string; - const minBundleId = req.headers.get("x-min-bundle-id") as string; + const minBundleId = req.headers.get("x-min-bundle-id") as + | string + | undefined; + const channel = req.headers.get("x-channel") as string | undefined; if (!bundleId || !appPlatform || !appVersion) { return createErrorResponse( @@ -52,6 +55,7 @@ Deno.serve(async (req) => { app_version: appVersion, bundle_id: bundleId, min_bundle_id: minBundleId || NIL_UUID, + target_channel: channel || "production", target_app_version_list: targetAppVersionList, }); From b269f69049c10ab20130882f327425ffc95d3360 Mon Sep 17 00:00:00 2001 From: gronxb Date: Sat, 8 Mar 2025 17:38:50 +0900 Subject: [PATCH 17/23] fix: lambda --- plugins/aws/lambda/index.ts | 3 +++ plugins/cloudflare/worker/src/index.ts | 7 ++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/plugins/aws/lambda/index.ts b/plugins/aws/lambda/index.ts index 7456b18b..05ee14fc 100644 --- a/plugins/aws/lambda/index.ts +++ b/plugins/aws/lambda/index.ts @@ -66,6 +66,8 @@ app.get("/api/check-update", async (c) => { const appVersion = headers["x-app-version"]?.[0]?.value; const minBundleId = headers["x-min-bundle-id"]?.[0]?.value ?? NIL_UUID; + const channel = headers["x-channel"]?.[0]?.value ?? "production"; + if (!bundleId || !appPlatform || !appVersion) { return c.json({ error: "Missing required headers." }, 400); } @@ -75,6 +77,7 @@ app.get("/api/check-update", async (c) => { bundleId, appVersion, minBundleId, + channel, }); if (!updateInfo) { return c.json(null); diff --git a/plugins/cloudflare/worker/src/index.ts b/plugins/cloudflare/worker/src/index.ts index d693dfde..142ed329 100644 --- a/plugins/cloudflare/worker/src/index.ts +++ b/plugins/cloudflare/worker/src/index.ts @@ -28,7 +28,11 @@ export default { | "ios" | "android"; const appVersion = request.headers.get("x-app-version") as string; - const minBundleId = request.headers.get("x-min-bundle-id") as string; + + const minBundleId = request.headers.get("x-min-bundle-id") as + | string + | undefined; + const channel = request.headers.get("x-channel") as string | undefined; if (!bundleId || !appPlatform || !appVersion) { return new Response( @@ -44,6 +48,7 @@ export default { bundleId, platform: appPlatform, minBundleId: minBundleId || NIL_UUID, + channel: channel || "production", }); return new Response(JSON.stringify(updateInfo), { From b63cab2507b45abd51e6520776ddc3ef7b620ee5 Mon Sep 17 00:00:00 2001 From: gronxb Date: Sat, 8 Mar 2025 17:46:53 +0900 Subject: [PATCH 18/23] fix: cli --- packages/hot-updater/src/commands/deploy.ts | 9 ++++++--- packages/hot-updater/src/index.ts | 13 +++++++++++++ plugins/plugin-core/src/loadConfig.ts | 1 + plugins/plugin-core/src/types.ts | 12 ------------ 4 files changed, 20 insertions(+), 15 deletions(-) diff --git a/packages/hot-updater/src/commands/deploy.ts b/packages/hot-updater/src/commands/deploy.ts index 7fb3f281..782d4439 100644 --- a/packages/hot-updater/src/commands/deploy.ts +++ b/packages/hot-updater/src/commands/deploy.ts @@ -26,6 +26,8 @@ export interface DeployOptions { platform?: Platform; forceUpdate: boolean; interactive: boolean; + channel: string; + message?: string; } export const deploy = async (options: DeployOptions) => { @@ -55,7 +57,9 @@ export const deploy = async (options: DeployOptions) => { return; } - const config = await loadConfig({ platform }); + const channel = options.channel; + + const config = await loadConfig({ platform, channel }); if (!config) { console.error("No config found. Please run `hot-updater init` first."); process.exit(1); @@ -177,14 +181,13 @@ export const deploy = async (options: DeployOptions) => { } try { - const channel = config.channel || "production"; await databasePlugin.appendBundle({ shouldForceUpdate: options.forceUpdate, platform, fileUrl, fileHash, gitCommitHash, - message: gitMessage, + message: options?.message ?? gitMessage, targetAppVersion, id: bundleId, enabled: true, diff --git a/packages/hot-updater/src/index.ts b/packages/hot-updater/src/index.ts index 1043273a..c623c82d 100644 --- a/packages/hot-updater/src/index.ts +++ b/packages/hot-updater/src/index.ts @@ -12,6 +12,8 @@ import { Command, Option } from "commander"; import picocolors from "picocolors"; import semverValid from "semver/ranges/valid"; +const DEFAULT_CHANNEL = "production"; + const program = new Command(); program @@ -51,6 +53,17 @@ program new Option("-f, --force-update", "force update the app").default(false), ) .addOption(new Option("-i, --interactive", "interactive mode").default(false)) + .addOption( + new Option("-c, --channel", "specify the channel to deploy").default( + DEFAULT_CHANNEL, + ), + ) + .addOption( + new Option( + "-m, --message", + "Specify a custom message for this deployment. If not provided, the latest git commit message will be used as the deployment message", + ), + ) .action(async (options: DeployOptions) => { deploy(options); }); diff --git a/plugins/plugin-core/src/loadConfig.ts b/plugins/plugin-core/src/loadConfig.ts index f73c105f..50c1a68d 100644 --- a/plugins/plugin-core/src/loadConfig.ts +++ b/plugins/plugin-core/src/loadConfig.ts @@ -5,6 +5,7 @@ import type { Config, Platform } from "./types.js"; export interface HotUpdaterConfigOptions { platform: Platform | "console"; + channel: string; } export const loadConfig = async ( diff --git a/plugins/plugin-core/src/types.ts b/plugins/plugin-core/src/types.ts index f73fd467..755b782e 100644 --- a/plugins/plugin-core/src/types.ts +++ b/plugins/plugin-core/src/types.ts @@ -54,18 +54,6 @@ export interface StoragePluginHooks { } export type Config = { - /** - * The name of the channel where the bundle is deployed. - * - * @default "production" - * - * Examples: - * - production: Production channel for end users - * - development: Development channel for testing - * - staging: Staging channel for quality assurance before production - * - app-name: Channel for specific app instances (e.g., my-app, app-test) - */ - channel?: string; console?: { /** * Git repository URL From dd27f77a0dffd9513f44102529eff131b56fc868 Mon Sep 17 00:00:00 2001 From: gronxb Date: Sat, 8 Mar 2025 17:48:56 +0900 Subject: [PATCH 19/23] fix: channel --- packages/console/src-server/rpc.ts | 1 + packages/hot-updater/src/commands/console.ts | 1 + 2 files changed, 2 insertions(+) diff --git a/packages/console/src-server/rpc.ts b/packages/console/src-server/rpc.ts index c0401637..a1a37381 100644 --- a/packages/console/src-server/rpc.ts +++ b/packages/console/src-server/rpc.ts @@ -29,6 +29,7 @@ const prepareConfig = async () => { if (!config) { config = await loadConfig({ platform: "console", + channel: "console", }); databasePlugin = (await config?.database({ diff --git a/packages/hot-updater/src/commands/console.ts b/packages/hot-updater/src/commands/console.ts index d7a313ca..b2b1ba03 100644 --- a/packages/hot-updater/src/commands/console.ts +++ b/packages/hot-updater/src/commands/console.ts @@ -11,6 +11,7 @@ export const getConsolePort = async (config?: Config) => { if (!$config) { $config = await loadConfig({ platform: "console", + channel: "console", }); } return $config?.console?.port ?? CONSOLE_DEFAULT_PORT; From 35a6ab7a0a120a05017d689dec60f0880afc35d9 Mon Sep 17 00:00:00 2001 From: gronxb Date: Sat, 8 Mar 2025 18:53:46 +0900 Subject: [PATCH 20/23] fix: babel --- packages/console/src-server/rpc.ts | 5 +-- packages/hot-updater/src/commands/console.ts | 5 +-- packages/hot-updater/src/plugins/babel.ts | 12 ++++++ plugins/plugin-core/src/loadConfig.ts | 40 ++++++++++++++++++-- plugins/plugin-core/src/types.ts | 14 +++++++ 5 files changed, 64 insertions(+), 12 deletions(-) diff --git a/packages/console/src-server/rpc.ts b/packages/console/src-server/rpc.ts index a1a37381..4ae8af3e 100644 --- a/packages/console/src-server/rpc.ts +++ b/packages/console/src-server/rpc.ts @@ -27,10 +27,7 @@ let databasePlugin: DatabasePlugin | null = null; const prepareConfig = async () => { if (!config) { - config = await loadConfig({ - platform: "console", - channel: "console", - }); + config = await loadConfig(null); databasePlugin = (await config?.database({ cwd: getCwd(), diff --git a/packages/hot-updater/src/commands/console.ts b/packages/hot-updater/src/commands/console.ts index b2b1ba03..48d5934c 100644 --- a/packages/hot-updater/src/commands/console.ts +++ b/packages/hot-updater/src/commands/console.ts @@ -9,10 +9,7 @@ export const CONSOLE_DEFAULT_PORT = 1422; export const getConsolePort = async (config?: Config) => { let $config: Config | undefined | null = config; if (!$config) { - $config = await loadConfig({ - platform: "console", - channel: "console", - }); + $config = await loadConfig(null); } return $config?.console?.port ?? CONSOLE_DEFAULT_PORT; }; diff --git a/packages/hot-updater/src/plugins/babel.ts b/packages/hot-updater/src/plugins/babel.ts index bc21f0ca..7b76ce65 100644 --- a/packages/hot-updater/src/plugins/babel.ts +++ b/packages/hot-updater/src/plugins/babel.ts @@ -3,10 +3,12 @@ import path from "path"; import type { PluginObj } from "@babel/core"; import type { NodePath } from "@babel/traverse"; import * as t from "@babel/types"; +import { loadConfigSync } from "@hot-updater/plugin-core"; import picocolors from "picocolors"; import { uuidv7 } from "uuidv7"; export default function replaceHotUpdaterBundleId(): PluginObj { + const config = loadConfigSync(null); const buildOutDir = process.env["BUILD_OUT_DIR"]; if (!buildOutDir) { @@ -42,6 +44,7 @@ export default function replaceHotUpdaterBundleId(): PluginObj { ); } + const channel = config?.channel || "production"; return { name: "replace-hot-updater-bundle-id", visitor: { @@ -54,6 +57,15 @@ export default function replaceHotUpdaterBundleId(): PluginObj { ) { path.replaceWith(t.stringLiteral(bundleId)); } + + if ( + t.isIdentifier(path.node.object, { name: "HotUpdater" }) && + t.isIdentifier(path.node.property, { + name: "CHANNEL", + }) + ) { + path.replaceWith(t.stringLiteral(channel)); + } }, }, }; diff --git a/plugins/plugin-core/src/loadConfig.ts b/plugins/plugin-core/src/loadConfig.ts index 50c1a68d..6c574c23 100644 --- a/plugins/plugin-core/src/loadConfig.ts +++ b/plugins/plugin-core/src/loadConfig.ts @@ -1,12 +1,12 @@ -import { cosmiconfig } from "cosmiconfig"; +import { cosmiconfig, cosmiconfigSync } from "cosmiconfig"; import { TypeScriptLoader } from "cosmiconfig-typescript-loader"; import { getCwd } from "./cwd.js"; import type { Config, Platform } from "./types.js"; -export interface HotUpdaterConfigOptions { - platform: Platform | "console"; +export type HotUpdaterConfigOptions = { + platform: Platform; channel: string; -} +} | null; export const loadConfig = async ( options: HotUpdaterConfigOptions, @@ -39,3 +39,35 @@ export const loadConfig = async ( return result.config as Config; }; + +export const loadConfigSync = ( + options: HotUpdaterConfigOptions, +): Config | null => { + const result = cosmiconfigSync("hot-updater", { + stopDir: getCwd(), + searchPlaces: [ + "hot-updater.config.js", + "hot-updater.config.cjs", + "hot-updater.config.ts", + "hot-updater.config.cts", + "hot-updater.config.mjs", + "hot-updater.config.cjs", + ], + ignoreEmptySearchPlaces: false, + loaders: { + ".ts": TypeScriptLoader(), + ".mts": TypeScriptLoader(), + ".cts": TypeScriptLoader(), + }, + }).search(); + + if (!result?.config) { + return null; + } + + if (typeof result.config === "function") { + return result.config(options); + } + + return result.config as Config; +}; diff --git a/plugins/plugin-core/src/types.ts b/plugins/plugin-core/src/types.ts index 755b782e..d0ad54c0 100644 --- a/plugins/plugin-core/src/types.ts +++ b/plugins/plugin-core/src/types.ts @@ -54,6 +54,20 @@ export interface StoragePluginHooks { } export type Config = { + /** + * The name of the channel where the bundle is deployed. + * + * Examples: + * - production: Production channel for end users + * - development: Development channel for testing + * - staging: Staging channel for quality assurance before production + * - app-name: Channel for specific app instances (e.g., my-app, app-test) + * + * @default "production" + * + * Different channel values can be used based on each app's requirements. + */ + channel?: string; console?: { /** * Git repository URL From a62fc25af5a5e8779d31c726e74ed78febf178c7 Mon Sep 17 00:00:00 2001 From: gronxb Date: Sun, 9 Mar 2025 01:33:40 +0900 Subject: [PATCH 21/23] fix: babel --- packages/hot-updater/src/commands/deploy.ts | 1 + packages/hot-updater/src/plugins/babel.ts | 45 +++++++++++---------- plugins/metro/src/index.ts | 7 +++- plugins/plugin-core/src/types.ts | 19 ++++----- 4 files changed, 38 insertions(+), 34 deletions(-) diff --git a/packages/hot-updater/src/commands/deploy.ts b/packages/hot-updater/src/commands/deploy.ts index 782d4439..40e09e6f 100644 --- a/packages/hot-updater/src/commands/deploy.ts +++ b/packages/hot-updater/src/commands/deploy.ts @@ -130,6 +130,7 @@ export const deploy = async (options: DeployOptions) => { task: async () => { taskRef.buildResult = await buildPlugin.build({ platform: platform, + channel, }); bundlePath = path.join(getCwd(), "bundle.zip"); diff --git a/packages/hot-updater/src/plugins/babel.ts b/packages/hot-updater/src/plugins/babel.ts index 7b76ce65..a54e5862 100644 --- a/packages/hot-updater/src/plugins/babel.ts +++ b/packages/hot-updater/src/plugins/babel.ts @@ -7,28 +7,13 @@ import { loadConfigSync } from "@hot-updater/plugin-core"; import picocolors from "picocolors"; import { uuidv7 } from "uuidv7"; -export default function replaceHotUpdaterBundleId(): PluginObj { - const config = loadConfigSync(null); - const buildOutDir = process.env["BUILD_OUT_DIR"]; +const NIL_UUID = "00000000-0000-0000-0000-000000000000"; +const DEFAULT_CHANNEL = "production"; +const getBundleId = () => { + const buildOutDir = process.env["BUILD_OUT_DIR"]; if (!buildOutDir) { - return { - name: "replace-hot-updater-bundle-id", - visitor: { - MemberExpression(path: NodePath) { - if ( - t.isIdentifier(path.node.object, { name: "HotUpdater" }) && - t.isIdentifier(path.node.property, { - name: "HOT_UPDATER_BUNDLE_ID", - }) - ) { - path.replaceWith( - t.stringLiteral("00000000-0000-0000-0000-000000000000"), - ); - } - }, - }, - }; + return NIL_UUID; } const bundleIdPath = path.join(buildOutDir, "BUNDLE_ID"); @@ -44,7 +29,24 @@ export default function replaceHotUpdaterBundleId(): PluginObj { ); } - const channel = config?.channel || "production"; + return bundleId; +}; + +export const getChannel = () => { + const config = loadConfigSync(null); + + const channel = + process.env["HOT_UPDATER_CHANNEL"] || + config?.releaseChannel || + DEFAULT_CHANNEL; + + return channel; +}; + +export default function replaceHotUpdaterBundleId(): PluginObj { + const bundleId = getBundleId(); + const channel = getChannel(); + return { name: "replace-hot-updater-bundle-id", visitor: { @@ -57,7 +59,6 @@ export default function replaceHotUpdaterBundleId(): PluginObj { ) { path.replaceWith(t.stringLiteral(bundleId)); } - if ( t.isIdentifier(path.node.object, { name: "HotUpdater" }) && t.isIdentifier(path.node.property, { diff --git a/plugins/metro/src/index.ts b/plugins/metro/src/index.ts index 5514cae8..a8d3cced 100644 --- a/plugins/metro/src/index.ts +++ b/plugins/metro/src/index.ts @@ -16,6 +16,7 @@ interface RunBundleArgs { buildPath: string; sourcemap: boolean; enableHermes: boolean; + channel: string; } const runBundle = async ({ @@ -25,6 +26,7 @@ const runBundle = async ({ buildPath, sourcemap, enableHermes, + channel, }: RunBundleArgs) => { const reactNativePath = require.resolve("react-native/package.json", { paths: [cwd], @@ -58,6 +60,7 @@ const runBundle = async ({ env: { ...process.env, BUILD_OUT_DIR: buildPath, + HOT_UPDATER_CHANNEL: channel, }, }); } catch (error) { @@ -127,7 +130,7 @@ export const metro = enableHermes, } = config; return { - build: async ({ platform }) => { + build: async ({ platform, channel }) => { const buildPath = path.join(cwd, outDir); await fs.rm(buildPath, { recursive: true, force: true }); @@ -139,10 +142,12 @@ export const metro = platform, buildPath, sourcemap, + channel, enableHermes, }); return { + channel, buildPath, bundleId, stdout, diff --git a/plugins/plugin-core/src/types.ts b/plugins/plugin-core/src/types.ts index d0ad54c0..96197087 100644 --- a/plugins/plugin-core/src/types.ts +++ b/plugins/plugin-core/src/types.ts @@ -28,9 +28,13 @@ export interface DatabasePluginHooks { } export interface BuildPlugin { - build: (args: { platform: Platform }) => Promise<{ + build: (args: { + platform: Platform; + channel: string; + }) => Promise<{ buildPath: string; bundleId: string; + channel: string; stdout: string | null; }>; name: string; @@ -55,19 +59,12 @@ export interface StoragePluginHooks { export type Config = { /** - * The name of the channel where the bundle is deployed. - * - * Examples: - * - production: Production channel for end users - * - development: Development channel for testing - * - staging: Staging channel for quality assurance before production - * - app-name: Channel for specific app instances (e.g., my-app, app-test) + * The channel used when building the native app. + * Used to replace HotUpdater.CHANNEL at build time. * * @default "production" - * - * Different channel values can be used based on each app's requirements. */ - channel?: string; + releaseChannel?: string; console?: { /** * Git repository URL From ac7007ef432d7df0e82ed76468388928fe7ae383 Mon Sep 17 00:00:00 2001 From: gronxb Date: Sun, 9 Mar 2025 14:59:45 +0900 Subject: [PATCH 22/23] fix: channel --- packages/hot-updater/src/commands/deploy.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/hot-updater/src/commands/deploy.ts b/packages/hot-updater/src/commands/deploy.ts index 40e09e6f..578fcc6e 100644 --- a/packages/hot-updater/src/commands/deploy.ts +++ b/packages/hot-updater/src/commands/deploy.ts @@ -124,6 +124,8 @@ export const deploy = async (options: DeployOptions) => { buildResult: null, }; + p.log.info(`Channel: ${channel}`); + await p.tasks([ { title: `📦 Building Bundle (${buildPlugin.name})`, From 801b571e0d635842013067aa092163c4d54215c1 Mon Sep 17 00:00:00 2001 From: gronxb Date: Sun, 9 Mar 2025 15:01:12 +0900 Subject: [PATCH 23/23] fix: migration --- plugins/postgres/sql/get_update_info.sql | 2 -- .../supabase/supabase/migrations/0002_hot-updater_0.13.0.sql | 4 ++-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/plugins/postgres/sql/get_update_info.sql b/plugins/postgres/sql/get_update_info.sql index 2d097945..e34c157f 100644 --- a/plugins/postgres/sql/get_update_info.sql +++ b/plugins/postgres/sql/get_update_info.sql @@ -66,8 +66,6 @@ BEGIN UNION ALL - -- fallback: 번들 DB에 현재(bundle_id)가 없고, - -- (단, bundle_id가 min_bundle_id와 같으면 아무것도 하지 않고, bundle_id가 min_bundle_id보다 큰 경우에만 fallback) SELECT NIL_UUID AS id, TRUE AS should_force_update, diff --git a/plugins/supabase/supabase/migrations/0002_hot-updater_0.13.0.sql b/plugins/supabase/supabase/migrations/0002_hot-updater_0.13.0.sql index 6fe07fab..48391a99 100644 --- a/plugins/supabase/supabase/migrations/0002_hot-updater_0.13.0.sql +++ b/plugins/supabase/supabase/migrations/0002_hot-updater_0.13.0.sql @@ -5,6 +5,7 @@ CREATE OR REPLACE FUNCTION get_update_info ( app_version text, bundle_id uuid, min_bundle_id uuid, + target_channel text, target_app_version_list text[] ) RETURNS TABLE ( @@ -34,6 +35,7 @@ BEGIN AND b.id >= bundle_id AND b.id > min_bundle_id AND b.target_app_version IN (SELECT unnest(target_app_version_list)) + AND b.channel = target_channel ORDER BY b.id DESC LIMIT 1 ), @@ -64,8 +66,6 @@ BEGIN UNION ALL - -- fallback: 번들 DB에 현재(bundle_id)가 없고, - -- (단, bundle_id가 min_bundle_id와 같으면 아무것도 하지 않고, bundle_id가 min_bundle_id보다 큰 경우에만 fallback) SELECT NIL_UUID AS id, TRUE AS should_force_update,