feat(housekeeping): integrate studio operations
CI / check (pull_request) Successful in 38s
CI / release (pull_request) Skipped
CI / deploy (pull_request) Skipped

This commit is contained in:
Simo committed 2026-08-30 15:29:58 +02:00
1 parent 020c06f172
commit 2e95a106e0
36 files changed
+2296 -60

No files matched your search

+8 -2
View File
@@ -106,7 +106,9 @@ export interface RepairNitroEvent {
export async function repairMissingNitros(
onEvent?: (evt: RepairNitroEvent) => void,
options?: { signal?: AbortSignal },
): Promise<{ succeeded: number; failed: number; skipped: number }> {
options?.signal?.throwIfAborted();
let succeeded = 0;
let failed = 0;
let skipped = 0;
@@ -201,6 +203,7 @@ export async function repairMissingNitros(
onEvent?.({ type: "started", total });
const processItem = async (classname: string) => {
options?.signal?.throwIfAborted();
// Special items (badges, pets, effects, bots, sticky notes) don't have
// furni .nitro bundles to repair. Skip them.
if (skipSet.has(classname)) {
@@ -276,7 +279,7 @@ export async function repairMissingNitros(
const dl = await downloadFile(
`${source.nitroBaseUrl}/${nitroName}`,
tmpPath,
{ maxRetries: 1 },
{ maxRetries: 1, signal: options?.signal },
);
if (dl.ok) {
// Validate it is a real Nitro bundle before writing it
@@ -315,6 +318,7 @@ export async function repairMissingNitros(
};
await runPool(items, REPAIR_CONCURRENCY, async (item, i) => {
options?.signal?.throwIfAborted();
const classname = item.item_name;
const result = await processItem(classname);
if (result.status === "skipped") {
@@ -384,13 +388,14 @@ export async function repairMissingNitros(
*/
export async function addSize32AllNitros(
onEvent?: (evt: RepairNitroEvent) => void,
opts?: { concurrency?: number },
opts?: { concurrency?: number; signal?: AbortSignal },
): Promise<{
succeeded: number;
failed: number;
skipped: number;
existing: number;
}> {
opts?.signal?.throwIfAborted();
let succeeded = 0;
let failed = 0;
let skipped = 0;
@@ -442,6 +447,7 @@ export async function addSize32AllNitros(
[...fileNames],
opts?.concurrency ?? 12,
async (fileName, i) => {
opts?.signal?.throwIfAborted();
let buf: Buffer | null = null;
for (const dir of nitroDirs) {
try {