@hot-updater/console 0.35.11 → 0.36.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.output/nitro.json +1 -1
- package/.output/public/assets/{index-CCUspZZV.js → index-Iylis5kY.js} +2 -2
- package/.output/public/assets/routes-HT21hs0C.js +54 -0
- package/.output/public/assets/{styles-C0q26dS-.css → styles-C0Re4quB.css} +1 -1
- package/.output/server/{__23tanstack-start-server-fn-resolver-DVQ3oVr1.mjs → __23tanstack-start-server-fn-resolver-CgwgZ0-i.mjs} +17 -13
- package/.output/server/_libs/verkit.mjs +246 -0
- package/.output/server/_ssr/{api-rpc-CToa1VZt.mjs → api-rpc-BIbDUKSz.mjs} +29 -4
- package/.output/server/_ssr/{deleteBundle-De_OKj6m.mjs → deleteBundle-BgbZTtpW.mjs} +72 -46
- package/.output/server/_ssr/{router-CIjEvqDS.mjs → router-C3hqEy3k.mjs} +7 -3
- package/.output/server/_ssr/{routes-Bjhf6xFE.mjs → routes-B0lQvvlC.mjs} +77 -48
- package/.output/server/_ssr/ssr.mjs +3 -3
- package/.output/server/{_tanstack-start-manifest_v-BroBMdSR.mjs → _tanstack-start-manifest_v-Bpx52WOU.mjs} +4 -4
- package/.output/server/index.mjs +38 -38
- package/package.json +8 -9
- package/.output/public/assets/routes-D0t6y5Fr.js +0 -54
- package/.output/server/_libs/semver.mjs +0 -1385
|
@@ -14,14 +14,13 @@ import { m as useSearch, p as useNavigate } from "../_libs/@tanstack/react-route
|
|
|
14
14
|
import { n as useStore, t as useForm } from "../_libs/@tanstack/react-form+[...].mjs";
|
|
15
15
|
import { i as useQueryClient, n as useQuery, t as useMutation } from "../_libs/tanstack__react-query.mjs";
|
|
16
16
|
import { n as toast } from "../_libs/sonner.mjs";
|
|
17
|
-
import { t as getServerFnById } from "../__23tanstack-start-server-fn-resolver-
|
|
18
|
-
import { t as
|
|
17
|
+
import { t as getServerFnById } from "../__23tanstack-start-server-fn-resolver-CgwgZ0-i.mjs";
|
|
18
|
+
import { t as normalizeRange } from "../_libs/verkit.mjs";
|
|
19
19
|
import { i as getCoreRowModel, n as useReactTable, r as createColumnHelper, t as flexRender } from "../_libs/@tanstack/react-table+[...].mjs";
|
|
20
20
|
import { n as require_dayjs_min, t as require_relativeTime } from "../_libs/dayjs.mjs";
|
|
21
|
-
//#region node_modules/.nitro/vite/services/ssr/assets/routes-
|
|
21
|
+
//#region node_modules/.nitro/vite/services/ssr/assets/routes-B0lQvvlC.js
|
|
22
22
|
var import_react = /* @__PURE__ */ __toESM(require_react());
|
|
23
23
|
var import_jsx_runtime = require_jsx_runtime();
|
|
24
|
-
var import_semver = /* @__PURE__ */ __toESM(require_semver());
|
|
25
24
|
var import_dayjs_min = /* @__PURE__ */ __toESM(require_dayjs_min());
|
|
26
25
|
var import_relativeTime = /* @__PURE__ */ __toESM(require_relativeTime());
|
|
27
26
|
var extractTimestampFromUUIDv7 = (uuid) => {
|
|
@@ -412,6 +411,7 @@ var updateBundle = createServerFn({ method: "POST" }).inputValidator((input) =>
|
|
|
412
411
|
var promoteBundle = createServerFn({ method: "POST" }).inputValidator((input) => input).handler(createSsrRpc("c4ef3bbb77ea8a4410623fd18a4741e2ff0668b1a97510bcdd032a8428eaa5da"));
|
|
413
412
|
createServerFn({ method: "POST" }).inputValidator((input) => input).handler(createSsrRpc("16cc7c2f080ea5b73e0c6bba815b110dbd7727796036d248ba0d8ae819ddef08"));
|
|
414
413
|
var deleteBundle = createServerFn({ method: "POST" }).inputValidator((input) => input).handler(createSsrRpc("3a27ff5679228b86a346b3fe42142e7a5bf0264f73173c0dbe5f07fb37c43cf7"));
|
|
414
|
+
var deleteBundles = createServerFn({ method: "POST" }).inputValidator((input) => input).handler(createSsrRpc("61de3b69779c5ce2a5f5d3c27e2cfaca8fba8f14c8803559b9cd733c456494fa"));
|
|
415
415
|
var bundleListQueryKey = ["bundles"];
|
|
416
416
|
var queryKeys = {
|
|
417
417
|
config: ["config"],
|
|
@@ -446,6 +446,14 @@ function removeBundleFromQueryData(data, bundleId) {
|
|
|
446
446
|
data: data.data.filter((bundle) => bundle.id !== bundleId)
|
|
447
447
|
};
|
|
448
448
|
}
|
|
449
|
+
function removeBundlesFromQueryData(data, bundleIds) {
|
|
450
|
+
if (!data) return data;
|
|
451
|
+
const bundleIdSet = new Set(bundleIds);
|
|
452
|
+
return {
|
|
453
|
+
...data,
|
|
454
|
+
data: data.data.filter((bundle) => !bundleIdSet.has(bundle.id))
|
|
455
|
+
};
|
|
456
|
+
}
|
|
449
457
|
var hasOwn = (value, key) => Object.prototype.hasOwnProperty.call(value, key);
|
|
450
458
|
var invalidateInBackground = (queryClient, queryKey) => {
|
|
451
459
|
queryClient.invalidateQueries({ queryKey }).catch(() => void 0);
|
|
@@ -541,6 +549,19 @@ function useDeleteBundleMutation() {
|
|
|
541
549
|
}
|
|
542
550
|
});
|
|
543
551
|
}
|
|
552
|
+
function useDeleteBundlesMutation() {
|
|
553
|
+
const queryClient = useQueryClient();
|
|
554
|
+
return useMutation({
|
|
555
|
+
mutationFn: (params) => deleteBundles({ data: params }),
|
|
556
|
+
onSuccess: (_, vars) => {
|
|
557
|
+
for (const bundleId of vars.bundleIds) queryClient.removeQueries({ queryKey: queryKeys.bundle(bundleId) });
|
|
558
|
+
queryClient.setQueriesData({ queryKey: queryKeys.bundles.all }, (data) => removeBundlesFromQueryData(data, vars.bundleIds));
|
|
559
|
+
invalidateInBackground(queryClient, queryKeys.bundles.all);
|
|
560
|
+
invalidateInBackground(queryClient, queryKeys.bundleChildren.all);
|
|
561
|
+
invalidateInBackground(queryClient, queryKeys.channels);
|
|
562
|
+
}
|
|
563
|
+
});
|
|
564
|
+
}
|
|
544
565
|
function AlertDialog$1({ ...props }) {
|
|
545
566
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Root2, {
|
|
546
567
|
"data-slot": "alert-dialog",
|
|
@@ -759,6 +780,7 @@ function useFilterParams() {
|
|
|
759
780
|
const filters = {
|
|
760
781
|
channel: search.channel,
|
|
761
782
|
platform: search.platform,
|
|
783
|
+
targetAppVersion: search.targetAppVersion,
|
|
762
784
|
page: search.page,
|
|
763
785
|
after: search.after,
|
|
764
786
|
before: search.before
|
|
@@ -775,14 +797,16 @@ function useFilterParams() {
|
|
|
775
797
|
const getNextFilters = (newFilters) => {
|
|
776
798
|
const hasChannel = Object.hasOwn(newFilters, "channel");
|
|
777
799
|
const hasPlatform = Object.hasOwn(newFilters, "platform");
|
|
800
|
+
const hasTargetAppVersion = Object.hasOwn(newFilters, "targetAppVersion");
|
|
778
801
|
const hasPage = Object.hasOwn(newFilters, "page");
|
|
779
802
|
const hasAfter = Object.hasOwn(newFilters, "after");
|
|
780
803
|
const hasBefore = Object.hasOwn(newFilters, "before");
|
|
781
|
-
const shouldResetPagination = hasChannel || hasPlatform;
|
|
804
|
+
const shouldResetPagination = hasChannel || hasPlatform || hasTargetAppVersion;
|
|
782
805
|
const nextPage = hasPage && newFilters.page !== void 0 && newFilters.page > 1 ? newFilters.page : void 0;
|
|
783
806
|
return {
|
|
784
807
|
channel: hasChannel ? newFilters.channel : filters.channel,
|
|
785
808
|
platform: hasPlatform ? newFilters.platform : filters.platform,
|
|
809
|
+
targetAppVersion: hasTargetAppVersion ? newFilters.targetAppVersion : filters.targetAppVersion,
|
|
786
810
|
page: shouldResetPagination ? void 0 : hasPage ? nextPage : filters.page,
|
|
787
811
|
after: shouldResetPagination ? void 0 : hasAfter ? newFilters.after : filters.after,
|
|
788
812
|
before: shouldResetPagination ? void 0 : hasBefore ? newFilters.before : filters.before
|
|
@@ -813,6 +837,7 @@ function useFilterParams() {
|
|
|
813
837
|
navigateWithSearch({
|
|
814
838
|
channel: void 0,
|
|
815
839
|
platform: void 0,
|
|
840
|
+
targetAppVersion: void 0,
|
|
816
841
|
page: void 0,
|
|
817
842
|
after: void 0,
|
|
818
843
|
before: void 0,
|
|
@@ -1203,7 +1228,7 @@ function getTargetAppVersionValidation(value) {
|
|
|
1203
1228
|
error: "Invalid target app version",
|
|
1204
1229
|
normalizedRange: null
|
|
1205
1230
|
};
|
|
1206
|
-
const normalizedRange =
|
|
1231
|
+
const normalizedRange = normalizeRange(normalizedValue);
|
|
1207
1232
|
if (!normalizedRange) return {
|
|
1208
1233
|
error: "Invalid target app version",
|
|
1209
1234
|
normalizedRange: null
|
|
@@ -2342,7 +2367,7 @@ function DeleteStatusIcon({ status }) {
|
|
|
2342
2367
|
}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TooltipContent, { children: label })] });
|
|
2343
2368
|
}
|
|
2344
2369
|
function SelectedBundlesDeleteDialog({ bundles, open, onOpenChange, onComplete }) {
|
|
2345
|
-
const
|
|
2370
|
+
const deleteBundlesMutation = useDeleteBundlesMutation();
|
|
2346
2371
|
const [phase, setPhase] = (0, import_react.useState)("confirming");
|
|
2347
2372
|
const [items, setItems] = (0, import_react.useState)(() => createDeleteItems(bundles));
|
|
2348
2373
|
const isDeleting = phase === "deleting";
|
|
@@ -2351,15 +2376,8 @@ function SelectedBundlesDeleteDialog({ bundles, open, onOpenChange, onComplete }
|
|
|
2351
2376
|
const failedBundleIds = items.filter((item) => item.status === "failed").map((item) => item.bundle.id);
|
|
2352
2377
|
const hasFailures = failedBundleIds.length > 0;
|
|
2353
2378
|
const title = phase === "confirming" ? "Delete selected bundles?" : "Deleting bundles";
|
|
2354
|
-
const description = phase === "confirming" ? `This action cannot be undone. This
|
|
2355
|
-
const deleteButtonLabel =
|
|
2356
|
-
if (!isDeleting) return "Delete";
|
|
2357
|
-
return `Deleting ${Math.min(activeCount + 1, totalCount)}/${totalCount}`;
|
|
2358
|
-
}, [
|
|
2359
|
-
activeCount,
|
|
2360
|
-
isDeleting,
|
|
2361
|
-
totalCount
|
|
2362
|
-
]);
|
|
2379
|
+
const description = phase === "confirming" ? `This action cannot be undone. This deletes ${bundles.length} bundle records and schedules artifact cleanup; shared assets are reclaimed by storage prune.` : phase === "deleting" ? `Deleting ${totalCount} bundles in one batch.` : `${activeCount} of ${totalCount} delete requests finished.`;
|
|
2380
|
+
const deleteButtonLabel = isDeleting ? "Deleting..." : "Delete";
|
|
2363
2381
|
(0, import_react.useEffect)(() => {
|
|
2364
2382
|
if (open && phase === "confirming") setItems(createDeleteItems(bundles));
|
|
2365
2383
|
}, [
|
|
@@ -2378,44 +2396,36 @@ function SelectedBundlesDeleteDialog({ bundles, open, onOpenChange, onComplete }
|
|
|
2378
2396
|
const runDeletion = async (bundleIds) => {
|
|
2379
2397
|
if (isDeleting || bundleIds.length === 0) return;
|
|
2380
2398
|
const bundleIdSet = new Set(bundleIds);
|
|
2381
|
-
const deletedBundleIds = [];
|
|
2382
|
-
const nextFailedBundleIds = [];
|
|
2383
2399
|
setPhase("deleting");
|
|
2384
2400
|
setItems((currentItems) => currentItems.map((item) => bundleIdSet.has(item.bundle.id) ? {
|
|
2385
2401
|
bundle: item.bundle,
|
|
2386
|
-
status: "
|
|
2402
|
+
status: "deleting"
|
|
2387
2403
|
} : item));
|
|
2388
|
-
|
|
2389
|
-
|
|
2404
|
+
try {
|
|
2405
|
+
const result = await deleteBundlesMutation.mutateAsync({ bundleIds: [...bundleIds] });
|
|
2406
|
+
setItems((currentItems) => currentItems.map((item) => bundleIdSet.has(item.bundle.id) ? {
|
|
2390
2407
|
bundle: item.bundle,
|
|
2391
|
-
status: "
|
|
2408
|
+
status: "deleted"
|
|
2392
2409
|
} : item));
|
|
2393
|
-
|
|
2394
|
-
|
|
2395
|
-
deletedBundleIds
|
|
2396
|
-
|
|
2397
|
-
|
|
2398
|
-
|
|
2399
|
-
|
|
2400
|
-
|
|
2401
|
-
|
|
2402
|
-
|
|
2403
|
-
|
|
2404
|
-
|
|
2405
|
-
|
|
2406
|
-
|
|
2407
|
-
|
|
2408
|
-
|
|
2409
|
-
|
|
2410
|
-
|
|
2411
|
-
deletedBundleIds,
|
|
2412
|
-
failedBundleIds: nextFailedBundleIds
|
|
2413
|
-
});
|
|
2414
|
-
if (nextFailedBundleIds.length > 0) {
|
|
2415
|
-
toast.error(`${deletedBundleIds.length} deleted, ${nextFailedBundleIds.length} failed`);
|
|
2416
|
-
return;
|
|
2410
|
+
setPhase("complete");
|
|
2411
|
+
onComplete({
|
|
2412
|
+
deletedBundleIds: bundleIds,
|
|
2413
|
+
failedBundleIds: []
|
|
2414
|
+
});
|
|
2415
|
+
toast.success(result.missingBundleIds.length > 0 ? `${result.deletedBundleIds.length} deleted, ${result.missingBundleIds.length} already absent` : `${bundleIds.length} bundles deleted successfully`);
|
|
2416
|
+
} catch (error) {
|
|
2417
|
+
setItems((currentItems) => currentItems.map((item) => bundleIdSet.has(item.bundle.id) ? {
|
|
2418
|
+
bundle: item.bundle,
|
|
2419
|
+
message: getDeleteErrorMessage(error),
|
|
2420
|
+
status: "failed"
|
|
2421
|
+
} : item));
|
|
2422
|
+
setPhase("complete");
|
|
2423
|
+
onComplete({
|
|
2424
|
+
deletedBundleIds: [],
|
|
2425
|
+
failedBundleIds: bundleIds
|
|
2426
|
+
});
|
|
2427
|
+
toast.error(`0 deleted, ${bundleIds.length} failed`);
|
|
2417
2428
|
}
|
|
2418
|
-
toast.success(`${deletedBundleIds.length} bundles deleted successfully`);
|
|
2419
2429
|
};
|
|
2420
2430
|
const handleDelete = () => {
|
|
2421
2431
|
runDeletion(items.map((item) => item.bundle.id));
|
|
@@ -2897,7 +2907,14 @@ function BundlesTable({ bundles, pagination, expandedBundleId, selectedBundleId,
|
|
|
2897
2907
|
function FilterToolbar() {
|
|
2898
2908
|
const { filters, setFilters, resetFilters } = useFilterParams();
|
|
2899
2909
|
const { data: channels = [] } = useChannelsQuery();
|
|
2900
|
-
const
|
|
2910
|
+
const [targetAppVersion, setTargetAppVersion] = (0, import_react.useState)(filters.targetAppVersion ?? "");
|
|
2911
|
+
(0, import_react.useEffect)(() => {
|
|
2912
|
+
setTargetAppVersion(filters.targetAppVersion ?? "");
|
|
2913
|
+
}, [filters.targetAppVersion]);
|
|
2914
|
+
const hasActiveFilters = filters.channel || filters.platform || filters.targetAppVersion;
|
|
2915
|
+
const applyTargetAppVersion = () => {
|
|
2916
|
+
setFilters({ targetAppVersion: targetAppVersion.trim() || void 0 });
|
|
2917
|
+
};
|
|
2901
2918
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("header", {
|
|
2902
2919
|
className: "sticky top-0 z-10 flex shrink-0 flex-wrap items-center gap-2 border-b bg-background px-3 py-3 sm:h-12 sm:flex-nowrap sm:bg-card/70 sm:px-4 sm:py-0 sm:backdrop-blur-sm",
|
|
2903
2920
|
children: [
|
|
@@ -2930,6 +2947,17 @@ function FilterToolbar() {
|
|
|
2930
2947
|
})
|
|
2931
2948
|
] })]
|
|
2932
2949
|
}),
|
|
2950
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Input, {
|
|
2951
|
+
"aria-label": "Target app version",
|
|
2952
|
+
className: "h-8 w-full min-w-[132px] text-xs sm:w-[160px]",
|
|
2953
|
+
placeholder: "Target version",
|
|
2954
|
+
value: targetAppVersion,
|
|
2955
|
+
onBlur: applyTargetAppVersion,
|
|
2956
|
+
onChange: (event) => setTargetAppVersion(event.target.value),
|
|
2957
|
+
onKeyDown: (event) => {
|
|
2958
|
+
if (event.key === "Enter") applyTargetAppVersion();
|
|
2959
|
+
}
|
|
2960
|
+
}),
|
|
2933
2961
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Select$1, {
|
|
2934
2962
|
value: filters.channel || "all",
|
|
2935
2963
|
onValueChange: (value) => setFilters({ channel: value === "all" ? void 0 : value }),
|
|
@@ -2961,6 +2989,7 @@ function BundlesPage() {
|
|
|
2961
2989
|
const { data: bundlesData, isLoading } = useBundlesQuery({
|
|
2962
2990
|
channel: filters.channel,
|
|
2963
2991
|
platform: filters.platform,
|
|
2992
|
+
targetAppVersion: filters.targetAppVersion,
|
|
2964
2993
|
page: filters.page,
|
|
2965
2994
|
after: filters.after,
|
|
2966
2995
|
before: filters.before,
|
|
@@ -3,7 +3,7 @@ import { a as X_TSS_RAW_RESPONSE, d as getStartOptions, f as isRedirect, g as sa
|
|
|
3
3
|
import { u as require_react } from "../_libs/@floating-ui/react-dom+[...].mjs";
|
|
4
4
|
import { P as require_jsx_runtime } from "../_libs/@radix-ui/react-alert-dialog+[...].mjs";
|
|
5
5
|
import { n as defineHandlerCallback, o as RouterProvider, t as renderRouterToStream } from "../_libs/@tanstack/react-router+[...].mjs";
|
|
6
|
-
import { t as getServerFnById } from "../__23tanstack-start-server-fn-resolver-
|
|
6
|
+
import { t as getServerFnById } from "../__23tanstack-start-server-fn-resolver-CgwgZ0-i.mjs";
|
|
7
7
|
import { PassThrough, Readable } from "node:stream";
|
|
8
8
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
9
9
|
require_react();
|
|
@@ -3831,7 +3831,7 @@ var defaultSerovalPlugins = [
|
|
|
3831
3831
|
* the dev styles URL for route-scoped CSS collection.
|
|
3832
3832
|
*/
|
|
3833
3833
|
async function getStartManifest(matchedRoutes) {
|
|
3834
|
-
const { tsrStartManifest } = await import("../_tanstack-start-manifest_v-
|
|
3834
|
+
const { tsrStartManifest } = await import("../_tanstack-start-manifest_v-Bpx52WOU.mjs");
|
|
3835
3835
|
const startManifest = tsrStartManifest();
|
|
3836
3836
|
let routes = startManifest.routes;
|
|
3837
3837
|
routes[rootRouteId];
|
|
@@ -5359,7 +5359,7 @@ var getBaseManifest = getProdBaseManifest;
|
|
|
5359
5359
|
var createEarlyHintsForRequest = createEarlyHintsCollector;
|
|
5360
5360
|
async function loadEntries() {
|
|
5361
5361
|
const [routerEntry, startEntry, pluginAdapters] = await Promise.all([
|
|
5362
|
-
import("./router-
|
|
5362
|
+
import("./router-C3hqEy3k.mjs"),
|
|
5363
5363
|
import("./start-02sLteYG.mjs"),
|
|
5364
5364
|
import("./empty-plugin-adapters-B4HCzgmM.mjs")
|
|
5365
5365
|
]);
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
//#region node_modules/.nitro/vite/services/ssr/assets/_tanstack-start-manifest_v-
|
|
1
|
+
//#region node_modules/.nitro/vite/services/ssr/assets/_tanstack-start-manifest_v-Bpx52WOU.js
|
|
2
2
|
var tsrStartManifest = () => ({ routes: {
|
|
3
3
|
__root__: {
|
|
4
4
|
filePath: "/home/runner/work/hot-updater/hot-updater/packages/console/src/routes/__root.tsx",
|
|
5
5
|
children: ["/"],
|
|
6
|
-
preloads: ["/assets/index-
|
|
6
|
+
preloads: ["/assets/index-Iylis5kY.js", "/assets/dist-DJX53faP.js"],
|
|
7
7
|
scripts: [{ attrs: {
|
|
8
8
|
type: "module",
|
|
9
9
|
async: !0,
|
|
10
|
-
src: "/assets/index-
|
|
10
|
+
src: "/assets/index-Iylis5kY.js"
|
|
11
11
|
} }]
|
|
12
12
|
},
|
|
13
13
|
"/": {
|
|
14
14
|
filePath: "/home/runner/work/hot-updater/hot-updater/packages/console/src/routes/index.tsx",
|
|
15
15
|
children: void 0,
|
|
16
|
-
preloads: ["/assets/routes-
|
|
16
|
+
preloads: ["/assets/routes-HT21hs0C.js"]
|
|
17
17
|
}
|
|
18
18
|
} });
|
|
19
19
|
//#endregion
|
package/.output/server/index.mjs
CHANGED
|
@@ -11,131 +11,131 @@ var headers = ((m) => function headersRouteRule(event) {
|
|
|
11
11
|
//#endregion
|
|
12
12
|
//#region #nitro/virtual/public-assets-data
|
|
13
13
|
var public_assets_data_default = {
|
|
14
|
-
"/apple-touch-icon.png": {
|
|
15
|
-
"type": "image/png",
|
|
16
|
-
"etag": "\"329e-uyxOmLQHjRnOIdaE3FE7O/uZ9l4\"",
|
|
17
|
-
"mtime": "2026-08-06T01:49:41.506Z",
|
|
18
|
-
"size": 12958,
|
|
19
|
-
"path": "../public/apple-touch-icon.png"
|
|
20
|
-
},
|
|
21
14
|
"/favicon-16x16.png": {
|
|
22
15
|
"type": "image/png",
|
|
23
16
|
"etag": "\"240-h6ktCVLfjIcsDJuLwUXP4nCJxlI\"",
|
|
24
|
-
"mtime": "2026-08-
|
|
17
|
+
"mtime": "2026-08-13T07:56:49.356Z",
|
|
25
18
|
"size": 576,
|
|
26
19
|
"path": "../public/favicon-16x16.png"
|
|
27
20
|
},
|
|
28
21
|
"/favicon-32x32.png": {
|
|
29
22
|
"type": "image/png",
|
|
30
23
|
"etag": "\"4f0-0qQrV3Eq3PzIigrp+8htf8vFCYA\"",
|
|
31
|
-
"mtime": "2026-08-
|
|
24
|
+
"mtime": "2026-08-13T07:56:49.356Z",
|
|
32
25
|
"size": 1264,
|
|
33
26
|
"path": "../public/favicon-32x32.png"
|
|
34
27
|
},
|
|
35
28
|
"/favicon.ico": {
|
|
36
29
|
"type": "image/vnd.microsoft.icon",
|
|
37
30
|
"etag": "\"3c2e-eMwmbJNNg6G+Uu+rqWtuvtI2Om4\"",
|
|
38
|
-
"mtime": "2026-08-
|
|
31
|
+
"mtime": "2026-08-13T07:56:49.356Z",
|
|
39
32
|
"size": 15406,
|
|
40
33
|
"path": "../public/favicon.ico"
|
|
41
34
|
},
|
|
42
35
|
"/logo.svg": {
|
|
43
36
|
"type": "image/svg+xml",
|
|
44
37
|
"etag": "\"478-zKvD9Jp5dDLCBmng0McewYMBxfs\"",
|
|
45
|
-
"mtime": "2026-08-
|
|
38
|
+
"mtime": "2026-08-13T07:56:49.357Z",
|
|
46
39
|
"size": 1144,
|
|
47
40
|
"path": "../public/logo.svg"
|
|
48
41
|
},
|
|
49
42
|
"/manifest.json": {
|
|
50
43
|
"type": "application/json",
|
|
51
44
|
"etag": "\"258-CQdbkGDhbZhU+yrcSXanXKWFEpw\"",
|
|
52
|
-
"mtime": "2026-08-
|
|
45
|
+
"mtime": "2026-08-13T07:56:49.357Z",
|
|
53
46
|
"size": 600,
|
|
54
47
|
"path": "../public/manifest.json"
|
|
55
48
|
},
|
|
56
49
|
"/robots.txt": {
|
|
57
50
|
"type": "text/plain; charset=utf-8",
|
|
58
51
|
"etag": "\"43-BEzmj4PuhUNHX+oW9uOnPSihxtU\"",
|
|
59
|
-
"mtime": "2026-08-
|
|
52
|
+
"mtime": "2026-08-13T07:56:49.357Z",
|
|
60
53
|
"size": 67,
|
|
61
54
|
"path": "../public/robots.txt"
|
|
62
55
|
},
|
|
56
|
+
"/apple-touch-icon.png": {
|
|
57
|
+
"type": "image/png",
|
|
58
|
+
"etag": "\"329e-uyxOmLQHjRnOIdaE3FE7O/uZ9l4\"",
|
|
59
|
+
"mtime": "2026-08-13T07:56:49.356Z",
|
|
60
|
+
"size": 12958,
|
|
61
|
+
"path": "../public/apple-touch-icon.png"
|
|
62
|
+
},
|
|
63
63
|
"/assets/dist-DJX53faP.js": {
|
|
64
64
|
"type": "text/javascript; charset=utf-8",
|
|
65
65
|
"etag": "\"2f040-7YsjRPYPOzs727quwj97y+YTXIY\"",
|
|
66
|
-
"mtime": "2026-08-
|
|
66
|
+
"mtime": "2026-08-13T07:56:48.021Z",
|
|
67
67
|
"size": 192576,
|
|
68
68
|
"path": "../public/assets/dist-DJX53faP.js"
|
|
69
69
|
},
|
|
70
|
+
"/assets/index-Iylis5kY.js": {
|
|
71
|
+
"type": "text/javascript; charset=utf-8",
|
|
72
|
+
"etag": "\"448c7-Y0mf8ainq/iep6OX+wNwaKsdLSc\"",
|
|
73
|
+
"mtime": "2026-08-13T07:56:48.020Z",
|
|
74
|
+
"size": 280775,
|
|
75
|
+
"path": "../public/assets/index-Iylis5kY.js"
|
|
76
|
+
},
|
|
70
77
|
"/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2": {
|
|
71
78
|
"type": "font/woff2",
|
|
72
79
|
"etag": "\"6568-cF1iUGbboMFZ8TfnP5HiMgl9II0\"",
|
|
73
|
-
"mtime": "2026-08-
|
|
80
|
+
"mtime": "2026-08-13T07:56:48.021Z",
|
|
74
81
|
"size": 25960,
|
|
75
82
|
"path": "../public/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2"
|
|
76
83
|
},
|
|
77
84
|
"/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2": {
|
|
78
85
|
"type": "font/woff2",
|
|
79
86
|
"etag": "\"493c-n3Oy9D6jvzfMjpClqox+Zo7ERQQ\"",
|
|
80
|
-
"mtime": "2026-08-
|
|
87
|
+
"mtime": "2026-08-13T07:56:48.021Z",
|
|
81
88
|
"size": 18748,
|
|
82
89
|
"path": "../public/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2"
|
|
83
90
|
},
|
|
84
91
|
"/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2": {
|
|
85
92
|
"type": "font/woff2",
|
|
86
93
|
"etag": "\"2be0-BP5iTzJeB8nLqYAgKpWNi5o1Zm8\"",
|
|
87
|
-
"mtime": "2026-08-
|
|
94
|
+
"mtime": "2026-08-13T07:56:48.021Z",
|
|
88
95
|
"size": 11232,
|
|
89
96
|
"path": "../public/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2"
|
|
90
97
|
},
|
|
91
98
|
"/assets/inter-greek-wght-normal-CkhJZR-_.woff2": {
|
|
92
99
|
"type": "font/woff2",
|
|
93
100
|
"etag": "\"4a34-xor/hj4YNqI52zFecXnUbzQ4Xs4\"",
|
|
94
|
-
"mtime": "2026-08-
|
|
101
|
+
"mtime": "2026-08-13T07:56:48.021Z",
|
|
95
102
|
"size": 18996,
|
|
96
103
|
"path": "../public/assets/inter-greek-wght-normal-CkhJZR-_.woff2"
|
|
97
104
|
},
|
|
98
105
|
"/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2": {
|
|
99
106
|
"type": "font/woff2",
|
|
100
107
|
"etag": "\"14c4c-zz61D7IQFMB9QxHvTAOk/Vh4ibQ\"",
|
|
101
|
-
"mtime": "2026-08-
|
|
108
|
+
"mtime": "2026-08-13T07:56:48.021Z",
|
|
102
109
|
"size": 85068,
|
|
103
110
|
"path": "../public/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2"
|
|
104
111
|
},
|
|
105
112
|
"/assets/inter-latin-wght-normal-Dx4kXJAl.woff2": {
|
|
106
113
|
"type": "font/woff2",
|
|
107
114
|
"etag": "\"bc80-8R1ym7Ck2DUNLqPQ/AYs9u8tUpg\"",
|
|
108
|
-
"mtime": "2026-08-
|
|
115
|
+
"mtime": "2026-08-13T07:56:48.021Z",
|
|
109
116
|
"size": 48256,
|
|
110
117
|
"path": "../public/assets/inter-latin-wght-normal-Dx4kXJAl.woff2"
|
|
111
118
|
},
|
|
112
119
|
"/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2": {
|
|
113
120
|
"type": "font/woff2",
|
|
114
121
|
"etag": "\"280c-nBythjoDQ0+5wVAendJ6wU7Xz2M\"",
|
|
115
|
-
"mtime": "2026-08-
|
|
122
|
+
"mtime": "2026-08-13T07:56:48.021Z",
|
|
116
123
|
"size": 10252,
|
|
117
124
|
"path": "../public/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2"
|
|
118
125
|
},
|
|
119
|
-
"/assets/routes-
|
|
126
|
+
"/assets/routes-HT21hs0C.js": {
|
|
120
127
|
"type": "text/javascript; charset=utf-8",
|
|
121
|
-
"etag": "\"
|
|
122
|
-
"mtime": "2026-08-
|
|
123
|
-
"size":
|
|
124
|
-
"path": "../public/assets/routes-
|
|
128
|
+
"etag": "\"42aff-ijr0WyUxqj3KtRhkJOrtK4xE8RY\"",
|
|
129
|
+
"mtime": "2026-08-13T07:56:48.021Z",
|
|
130
|
+
"size": 273151,
|
|
131
|
+
"path": "../public/assets/routes-HT21hs0C.js"
|
|
125
132
|
},
|
|
126
|
-
"/assets/styles-
|
|
133
|
+
"/assets/styles-C0Re4quB.css": {
|
|
127
134
|
"type": "text/css; charset=utf-8",
|
|
128
|
-
"etag": "\"
|
|
129
|
-
"mtime": "2026-08-
|
|
130
|
-
"size":
|
|
131
|
-
"path": "../public/assets/styles-
|
|
132
|
-
},
|
|
133
|
-
"/assets/index-CCUspZZV.js": {
|
|
134
|
-
"type": "text/javascript; charset=utf-8",
|
|
135
|
-
"etag": "\"4485b-DRNtfLDdFR321J+PhmPr50J6wmg\"",
|
|
136
|
-
"mtime": "2026-08-06T01:49:40.296Z",
|
|
137
|
-
"size": 280667,
|
|
138
|
-
"path": "../public/assets/index-CCUspZZV.js"
|
|
135
|
+
"etag": "\"18983-iQ64N/MMT2ZA9Kd6OSvDGJFw80E\"",
|
|
136
|
+
"mtime": "2026-08-13T07:56:48.022Z",
|
|
137
|
+
"size": 100739,
|
|
138
|
+
"path": "../public/assets/styles-C0Re4quB.css"
|
|
139
139
|
}
|
|
140
140
|
};
|
|
141
141
|
//#endregion
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hot-updater/console",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.36.0",
|
|
5
5
|
"files": [
|
|
6
6
|
".output",
|
|
7
7
|
"package.json"
|
|
@@ -13,8 +13,8 @@
|
|
|
13
13
|
"@hot-updater/cli-tools": "*"
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
|
-
"@hot-updater/bsdiff": "0.
|
|
17
|
-
"@hot-updater/server": "0.
|
|
16
|
+
"@hot-updater/bsdiff": "0.36.0",
|
|
17
|
+
"@hot-updater/server": "0.36.0"
|
|
18
18
|
},
|
|
19
19
|
"devDependencies": {
|
|
20
20
|
"@base-ui/react": "^1.3.0",
|
|
@@ -35,7 +35,6 @@
|
|
|
35
35
|
"@types/node": "^25.5.0",
|
|
36
36
|
"@types/react": "^19.2.14",
|
|
37
37
|
"@types/react-dom": "^19.2.0",
|
|
38
|
-
"@types/semver": "^7.7.1",
|
|
39
38
|
"@vitejs/plugin-react": "^6.0.1",
|
|
40
39
|
"class-variance-authority": "^0.7.1",
|
|
41
40
|
"clsx": "^2.1.1",
|
|
@@ -49,7 +48,6 @@
|
|
|
49
48
|
"react": "^19.2.4",
|
|
50
49
|
"react-dom": "^19.2.4",
|
|
51
50
|
"react-grab": "^0.1.28",
|
|
52
|
-
"semver": "^7.7.4",
|
|
53
51
|
"shadcn": "^4.0.8",
|
|
54
52
|
"sonner": "^2.0.7",
|
|
55
53
|
"tailwind-merge": "^3.5.0",
|
|
@@ -59,14 +57,15 @@
|
|
|
59
57
|
"tw-animate-css": "^1.4.0",
|
|
60
58
|
"@typescript/native": "npm:typescript@^7.0.2",
|
|
61
59
|
"typescript": "npm:@typescript/typescript6@^6.0.2",
|
|
60
|
+
"verkit": "0.3.2",
|
|
62
61
|
"vite": "8.0.8",
|
|
63
62
|
"vite-tsconfig-paths": "^6.1.1",
|
|
64
63
|
"vitest": "4.1.4",
|
|
65
64
|
"web-vitals": "^5.1.0",
|
|
66
|
-
"@hot-updater/
|
|
67
|
-
"@hot-updater/core": "0.
|
|
68
|
-
"@hot-updater/
|
|
69
|
-
"@hot-updater/
|
|
65
|
+
"@hot-updater/mock": "0.36.0",
|
|
66
|
+
"@hot-updater/core": "0.36.0",
|
|
67
|
+
"@hot-updater/plugin-core": "0.36.0",
|
|
68
|
+
"@hot-updater/cli-tools": "0.36.0"
|
|
70
69
|
},
|
|
71
70
|
"description": "React Native OTA solution for self-hosted",
|
|
72
71
|
"license": "MIT",
|