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

+9
View File
@@ -234,6 +234,7 @@ export async function uploadSingleFurni(params: {
nitroBuffer: Buffer;
iconBuffer?: Buffer | null;
generateSql?: boolean;
signal?: AbortSignal;
}): Promise<UploadResult> {
const {
classname,
@@ -250,7 +251,9 @@ export async function uploadSingleFurni(params: {
nitroBuffer,
iconBuffer,
generateSql = false,
signal,
} = params;
signal?.throwIfAborted();
const warnings: string[] = [];
if (!/^[\w\-.*]+$/.test(classname)) {
@@ -280,6 +283,7 @@ export async function uploadSingleFurni(params: {
}
await ensureDirectories();
signal?.throwIfAborted();
const assetTargets = await getFurniAssetWriteTargets();
const { iconDir, nitroDir } = assetTargets;
@@ -297,6 +301,7 @@ export async function uploadSingleFurni(params: {
};
}
await fs.writeFile(nitroPath, nitroBuffer);
signal?.throwIfAborted();
let iconFileName: string | null = null;
let iconPath: string | null = null;
@@ -307,6 +312,7 @@ export async function uploadSingleFurni(params: {
}
const mirroredPaths: string[] = [];
signal?.throwIfAborted();
await mirrorUploadedAsset(
nitroPath,
nitroFileName,
@@ -346,6 +352,7 @@ export async function uploadSingleFurni(params: {
const interactionModesCount = autoInteraction.interactionModesCount;
let newId: number;
signal?.throwIfAborted();
try {
newId = await allocateItemsBaseId(async (nextId) => {
await db.execute(sql`
@@ -372,6 +379,7 @@ export async function uploadSingleFurni(params: {
}
try {
signal?.throwIfAborted();
const furniEntry = buildFurniEntry({
id: newId,
classname,
@@ -390,6 +398,7 @@ export async function uploadSingleFurni(params: {
let catalogItemId: number | null = null;
try {
signal?.throwIfAborted();
// Skip when the item already has a catalog row — re-uploads must never
// create a second row for the same item_ids.
const [existingCatalog] = (await db.execute(sql`