diff --git a/next.config.ts b/next.config.ts index 9200ce00..1d97330f 100644 --- a/next.config.ts +++ b/next.config.ts @@ -30,7 +30,7 @@ const securityHeaders = [ const nextConfig: NextConfig = { turbopack: { root: import.meta.dirname }, - serverExternalPackages: ["@prisma/adapter-mariadb", "mariadb", "@prisma/client"], + serverExternalPackages: ["@prisma/adapter-mariadb", "mariadb", "@prisma/client", "lzma"], // Compress responses with gzip compress: true, diff --git a/src/app/api/admin/import/badges/route.ts b/src/app/api/admin/import/badges/route.ts index 9781914a..633c6916 100644 --- a/src/app/api/admin/import/badges/route.ts +++ b/src/app/api/admin/import/badges/route.ts @@ -77,4 +77,3 @@ export const POST = withAdmin({ permission: PERMS.ASSETS_IMPORT }, async (reques return apiOk() }) - diff --git a/src/app/api/admin/import/clone/batch/route.ts b/src/app/api/admin/import/clone/batch/route.ts index 9151a784..60786848 100644 --- a/src/app/api/admin/import/clone/batch/route.ts +++ b/src/app/api/admin/import/clone/batch/route.ts @@ -69,4 +69,3 @@ export const POST = withAdmin({ permission: PERMS.ASSETS_IMPORT }, async (reques }, }) }) - diff --git a/src/app/api/admin/import/clone/icon/route.ts b/src/app/api/admin/import/clone/icon/route.ts index 821e98f3..2548800d 100644 --- a/src/app/api/admin/import/clone/icon/route.ts +++ b/src/app/api/admin/import/clone/icon/route.ts @@ -50,4 +50,3 @@ export const GET = withAdmin({ permission: PERMS.ASSETS_IMPORT }, async (request }, }) }) - diff --git a/src/app/api/admin/import/clone/route.ts b/src/app/api/admin/import/clone/route.ts index 29569b16..c49f33a2 100644 --- a/src/app/api/admin/import/clone/route.ts +++ b/src/app/api/admin/import/clone/route.ts @@ -92,4 +92,3 @@ export const DELETE = withAdmin({ permission: PERMS.ASSETS_IMPORT }, async (requ return apiOk({ id }) }) - diff --git a/src/app/api/admin/import/clothing/batch/route.ts b/src/app/api/admin/import/clothing/batch/route.ts index 85fc6439..1e6ecd15 100644 --- a/src/app/api/admin/import/clothing/batch/route.ts +++ b/src/app/api/admin/import/clothing/batch/route.ts @@ -43,4 +43,3 @@ export const POST = withAdmin({ permission: PERMS.ASSETS_IMPORT }, async (reques }, }) }) - diff --git a/src/app/api/admin/import/clothing/route.ts b/src/app/api/admin/import/clothing/route.ts index 4b3c9e1d..0c7c82ae 100644 --- a/src/app/api/admin/import/clothing/route.ts +++ b/src/app/api/admin/import/clothing/route.ts @@ -26,4 +26,3 @@ export const DELETE = withAdmin({ permission: PERMS.ASSETS_IMPORT }, async (requ }) return apiOk({ lib, deletedFile }) }) - diff --git a/src/app/api/admin/import/clothing/sets/batch/route.ts b/src/app/api/admin/import/clothing/sets/batch/route.ts index 5136fd21..83a0e725 100644 --- a/src/app/api/admin/import/clothing/sets/batch/route.ts +++ b/src/app/api/admin/import/clothing/sets/batch/route.ts @@ -47,4 +47,3 @@ export const POST = withAdmin({ permission: PERMS.ASSETS_IMPORT }, async (reques }, }) }) - diff --git a/src/app/api/admin/import/clothing/sets/route.ts b/src/app/api/admin/import/clothing/sets/route.ts index f39d6ef5..eb22f36d 100644 --- a/src/app/api/admin/import/clothing/sets/route.ts +++ b/src/app/api/admin/import/clothing/sets/route.ts @@ -18,4 +18,3 @@ export const GET = withAdmin({ permission: PERMS.ASSETS_IMPORT }, async (request }) return apiOk({ items, meta }) }) - diff --git a/src/app/api/admin/import/effects/batch/route.ts b/src/app/api/admin/import/effects/batch/route.ts index dd8afd1b..419a456b 100644 --- a/src/app/api/admin/import/effects/batch/route.ts +++ b/src/app/api/admin/import/effects/batch/route.ts @@ -47,4 +47,3 @@ export const POST = withAdmin({ permission: PERMS.ASSETS_IMPORT }, async (reques }, }) }) - diff --git a/src/app/api/admin/import/effects/route.ts b/src/app/api/admin/import/effects/route.ts index 81eac7b2..856a76be 100644 --- a/src/app/api/admin/import/effects/route.ts +++ b/src/app/api/admin/import/effects/route.ts @@ -28,4 +28,3 @@ export const DELETE = withAdmin({ permission: PERMS.ASSETS_IMPORT }, async (requ }) return apiOk({ idOrLib, removed, deletedFile }) }) - diff --git a/src/app/api/admin/import/furni/batch-regen/route.ts b/src/app/api/admin/import/furni/batch-regen/route.ts index 19a4701d..c6c2b4fb 100644 --- a/src/app/api/admin/import/furni/batch-regen/route.ts +++ b/src/app/api/admin/import/furni/batch-regen/route.ts @@ -228,4 +228,3 @@ export const POST = withAdmin({ permission: PERMS.ASSETS_IMPORT }, async (reques }, }) }) - diff --git a/src/app/api/admin/import/furni/batch/route.ts b/src/app/api/admin/import/furni/batch/route.ts index d461aead..b038402f 100644 --- a/src/app/api/admin/import/furni/batch/route.ts +++ b/src/app/api/admin/import/furni/batch/route.ts @@ -195,4 +195,3 @@ export const POST = withAdmin({ permission: PERMS.ASSETS_IMPORT }, async (reques }, }) }) - diff --git a/src/app/api/admin/import/furni/nitro-editor/route.ts b/src/app/api/admin/import/furni/nitro-editor/route.ts index b67cd3a7..839de288 100644 --- a/src/app/api/admin/import/furni/nitro-editor/route.ts +++ b/src/app/api/admin/import/furni/nitro-editor/route.ts @@ -163,4 +163,3 @@ export const PUT = withAdmin( return apiOk({ dimensions: dims }) }, ) - diff --git a/src/app/api/admin/import/pets/batch/route.ts b/src/app/api/admin/import/pets/batch/route.ts index 0491892a..df3f2190 100644 --- a/src/app/api/admin/import/pets/batch/route.ts +++ b/src/app/api/admin/import/pets/batch/route.ts @@ -43,4 +43,3 @@ export const POST = withAdmin({ permission: PERMS.ASSETS_IMPORT }, async (reques }, }) }) - diff --git a/src/app/api/admin/import/pets/icon/route.ts b/src/app/api/admin/import/pets/icon/route.ts index 76a185d7..5a547d41 100644 --- a/src/app/api/admin/import/pets/icon/route.ts +++ b/src/app/api/admin/import/pets/icon/route.ts @@ -16,4 +16,3 @@ export const GET = withAdmin({ permission: PERMS.ASSETS_IMPORT }, async (request }, }) }) - diff --git a/src/app/api/admin/import/pets/route.ts b/src/app/api/admin/import/pets/route.ts index 06cdc2f4..a900d49d 100644 --- a/src/app/api/admin/import/pets/route.ts +++ b/src/app/api/admin/import/pets/route.ts @@ -24,4 +24,3 @@ export const DELETE = withAdmin({ permission: PERMS.ASSETS_IMPORT }, async (requ }) return apiOk({ lib, deletedFile }) }) - diff --git a/src/app/api/admin/import/repair/audit/route.ts b/src/app/api/admin/import/repair/audit/route.ts index f454d233..f6bea685 100644 --- a/src/app/api/admin/import/repair/audit/route.ts +++ b/src/app/api/admin/import/repair/audit/route.ts @@ -9,4 +9,3 @@ export const POST = withAdmin({ permission: PERMS.ASSETS_IMPORT }, async () => { const summary = await auditImportedAssets() return apiOk(summary as unknown as Record) }) - diff --git a/src/app/api/admin/import/repair/route.ts b/src/app/api/admin/import/repair/route.ts index 2780ba11..f0ba30a2 100644 --- a/src/app/api/admin/import/repair/route.ts +++ b/src/app/api/admin/import/repair/route.ts @@ -125,4 +125,3 @@ export const POST = withAdmin({ permission: PERMS.ASSETS_IMPORT }, async (reques }, }) }) - diff --git a/src/lib/api-response.ts b/src/lib/api-response.ts index 622902f0..1d3bf698 100644 --- a/src/lib/api-response.ts +++ b/src/lib/api-response.ts @@ -49,4 +49,3 @@ export function handleApiError(error: unknown): Response { ) return apiError('Internal server error', 500) } - diff --git a/src/lib/catalog-categories.ts b/src/lib/catalog-categories.ts index 5a4b92cf..3943115e 100644 --- a/src/lib/catalog-categories.ts +++ b/src/lib/catalog-categories.ts @@ -1,2 +1 @@ export * from './catalog-categories/index' - diff --git a/src/lib/catalog-categories/categories.ts b/src/lib/catalog-categories/categories.ts index cfd83468..97299c6e 100644 --- a/src/lib/catalog-categories/categories.ts +++ b/src/lib/catalog-categories/categories.ts @@ -650,4 +650,3 @@ export const SUPREME_CATEGORIES: SupremeCategory[] = [ layout: 'default_3x3', }, ] - diff --git a/src/lib/catalog-categories/eras.ts b/src/lib/catalog-categories/eras.ts index 44054b24..a33e6d03 100644 --- a/src/lib/catalog-categories/eras.ts +++ b/src/lib/catalog-categories/eras.ts @@ -61,4 +61,3 @@ export function matchEra(revision: number): ReleaseEra { } return RELEASE_ERAS[RELEASE_ERAS.length - 1] } - diff --git a/src/lib/catalog-categories/index.ts b/src/lib/catalog-categories/index.ts index 160972d7..e448cf24 100644 --- a/src/lib/catalog-categories/index.ts +++ b/src/lib/catalog-categories/index.ts @@ -94,4 +94,3 @@ export function extractPrefix(itemName: string): string | null { const match = normalized.match(/^([a-z]{2,})/) return match ? match[1] : null } - diff --git a/src/lib/services/clone-icon.ts b/src/lib/services/clone-icon.ts index 0b6cd752..c05eb7c5 100644 --- a/src/lib/services/clone-icon.ts +++ b/src/lib/services/clone-icon.ts @@ -61,4 +61,3 @@ export function extractFurniIconPng(nitro: Buffer): Buffer | null { return null } } - diff --git a/src/lib/services/clone-import.test.ts b/src/lib/services/clone-import.test.ts index 70507d1a..b2d784ab 100644 --- a/src/lib/services/clone-import.test.ts +++ b/src/lib/services/clone-import.test.ts @@ -149,4 +149,3 @@ describe('clone-import', () => { expect(r.error).toMatch(/items_base insert failed/) }) }) - diff --git a/src/lib/services/clone-import.ts b/src/lib/services/clone-import.ts index 435d2fee..ce78e2f6 100644 --- a/src/lib/services/clone-import.ts +++ b/src/lib/services/clone-import.ts @@ -323,4 +323,3 @@ export async function getClonableClassnames(source: CloneSource): Promise !have.has(e.classname)).map((e) => e.classname) } - diff --git a/src/lib/services/clothing-set-import.test.ts b/src/lib/services/clothing-set-import.test.ts index 218ec8d6..43d9e944 100644 --- a/src/lib/services/clothing-set-import.test.ts +++ b/src/lib/services/clothing-set-import.test.ts @@ -63,4 +63,3 @@ describe('importClothingSet', () => { expect(r.ok).toBe(false) }) }) - diff --git a/src/lib/services/clothing-set-import.ts b/src/lib/services/clothing-set-import.ts index 463c16c0..ea301eef 100644 --- a/src/lib/services/clothing-set-import.ts +++ b/src/lib/services/clothing-set-import.ts @@ -202,4 +202,3 @@ export async function getClothingSetStats(): Promise { return { total, present, missing: total - present } } - diff --git a/src/lib/services/effect-import.test.ts b/src/lib/services/effect-import.test.ts index 87588670..09e5532c 100644 --- a/src/lib/services/effect-import.test.ts +++ b/src/lib/services/effect-import.test.ts @@ -53,4 +53,3 @@ describe('effect-import.importSingleEffect', () => { expect(mergeEffect).not.toHaveBeenCalled() }) }) - diff --git a/src/lib/services/effect-import.ts b/src/lib/services/effect-import.ts index fed06ff7..2f16eec3 100644 --- a/src/lib/services/effect-import.ts +++ b/src/lib/services/effect-import.ts @@ -135,4 +135,3 @@ export async function getEffectStats(): Promise<{ const imported = official.filter((e) => localLibs.has(e.lib)).length return { official: official.length, imported, missing: official.length - imported } } - diff --git a/src/lib/services/figure-import.test.ts b/src/lib/services/figure-import.test.ts index 46001d23..f48f22bd 100644 --- a/src/lib/services/figure-import.test.ts +++ b/src/lib/services/figure-import.test.ts @@ -65,4 +65,3 @@ describe('figure-import', () => { expect(r.error).toContain('conversion') }) }) - diff --git a/src/lib/services/figure-import.ts b/src/lib/services/figure-import.ts index 6bfd307e..02fe5e34 100644 --- a/src/lib/services/figure-import.ts +++ b/src/lib/services/figure-import.ts @@ -126,4 +126,3 @@ export async function getFigureStats(): Promise<{ ).length return { total: libs.length, imported, missing: libs.length - imported } } - diff --git a/src/lib/services/furni-import.test.ts b/src/lib/services/furni-import.test.ts index fded3660..41b25b69 100644 --- a/src/lib/services/furni-import.test.ts +++ b/src/lib/services/furni-import.test.ts @@ -44,4 +44,3 @@ describe('buildItemsBaseEnrichmentUpdate', () => { expect(update.values).toEqual([2, 3, 1.5, '1', '0', '1', '1', 'default', 123]) }) }) - diff --git a/src/lib/services/habbofurni.ts b/src/lib/services/habbofurni.ts index 15b63abe..339cf121 100644 --- a/src/lib/services/habbofurni.ts +++ b/src/lib/services/habbofurni.ts @@ -157,4 +157,3 @@ export async function batchLookupByClassnames( return result } - diff --git a/src/lib/services/imager/png-decode.test.ts b/src/lib/services/imager/png-decode.test.ts index fa44a6f9..7dd47a8f 100644 --- a/src/lib/services/imager/png-decode.test.ts +++ b/src/lib/services/imager/png-decode.test.ts @@ -44,4 +44,3 @@ describe('png-decode', () => { expect(() => decodePng(Buffer.from([1, 2, 3, 4, 5, 6, 7, 8]))).toThrow('not a PNG') }) }) - diff --git a/src/lib/services/imager/png-decode.ts b/src/lib/services/imager/png-decode.ts index f6a9da13..02041ffe 100644 --- a/src/lib/services/imager/png-decode.ts +++ b/src/lib/services/imager/png-decode.ts @@ -133,4 +133,3 @@ export function cropRgba( } return out } - diff --git a/src/lib/services/import/core/asset-paths.test.ts b/src/lib/services/import/core/asset-paths.test.ts index 20f62fa4..712929c1 100644 --- a/src/lib/services/import/core/asset-paths.test.ts +++ b/src/lib/services/import/core/asset-paths.test.ts @@ -19,4 +19,3 @@ describe('resolveGamedataFile', () => { expect(resolveGamedataFile(absolutePath, 'FigureMap.json')).toBe(absolutePath) }) }) - diff --git a/src/lib/services/import/core/asset-paths.ts b/src/lib/services/import/core/asset-paths.ts index 3bc06396..d2ce7315 100644 --- a/src/lib/services/import/core/asset-paths.ts +++ b/src/lib/services/import/core/asset-paths.ts @@ -26,4 +26,3 @@ export function resolveGamedataFile(url: string, fallbackName: string): string { if (existsSync(/*turbopackIgnore: true*/ gamedata)) return gamedata return configured } - diff --git a/src/lib/services/import/core/download.test.ts b/src/lib/services/import/core/download.test.ts index 46065ec9..64bbd857 100644 --- a/src/lib/services/import/core/download.test.ts +++ b/src/lib/services/import/core/download.test.ts @@ -18,4 +18,3 @@ describe('import/core/download validators', () => { expect(validatePngBytes(Buffer.from([1, 2, 3, 4, 5, 6, 7, 8]))).toBe(false) }) }) - diff --git a/src/lib/services/import/core/download.ts b/src/lib/services/import/core/download.ts index ce690417..fa8e7fd2 100644 --- a/src/lib/services/import/core/download.ts +++ b/src/lib/services/import/core/download.ts @@ -65,4 +65,3 @@ export async function downloadFile( } return { ok: false, size: 0 } } - diff --git a/src/lib/services/import/core/gamedata-json.test.ts b/src/lib/services/import/core/gamedata-json.test.ts index f16b1c10..f2f7ff3f 100644 --- a/src/lib/services/import/core/gamedata-json.test.ts +++ b/src/lib/services/import/core/gamedata-json.test.ts @@ -41,4 +41,3 @@ describe('import/core/gamedata-json', () => { expect(d.effects).toHaveLength(4) // 1 seed + 3 appended, none lost }) }) - diff --git a/src/lib/services/import/core/gamedata-json.ts b/src/lib/services/import/core/gamedata-json.ts index 4242d109..0374f1f7 100644 --- a/src/lib/services/import/core/gamedata-json.ts +++ b/src/lib/services/import/core/gamedata-json.ts @@ -61,4 +61,3 @@ export async function writeGamedataJsonAtomic(filePath: string, data: unknown): await fs.writeFile(/*turbopackIgnore: true*/ tmp, JSON.stringify(data, null, 2), 'utf-8') await fs.rename(/*turbopackIgnore: true*/ tmp, filePath) } - diff --git a/src/lib/services/import/core/gordon.test.ts b/src/lib/services/import/core/gordon.test.ts index a40aa2bf..fed7f547 100644 --- a/src/lib/services/import/core/gordon.test.ts +++ b/src/lib/services/import/core/gordon.test.ts @@ -29,4 +29,3 @@ describe('import/core/gordon', () => { await expect(resolveGordonBuildUrl()).rejects.toThrow() }) }) - diff --git a/src/lib/services/import/core/gordon.ts b/src/lib/services/import/core/gordon.ts index a5019163..c7453d69 100644 --- a/src/lib/services/import/core/gordon.ts +++ b/src/lib/services/import/core/gordon.ts @@ -20,4 +20,3 @@ export async function resolveGordonBuildUrl(): Promise { gordonCache = { url: normalized, ts: now } return normalized } - diff --git a/src/lib/services/import/core/sse-batch.test.ts b/src/lib/services/import/core/sse-batch.test.ts index 4d854f6c..4a994fcb 100644 --- a/src/lib/services/import/core/sse-batch.test.ts +++ b/src/lib/services/import/core/sse-batch.test.ts @@ -26,4 +26,3 @@ describe('import/core/sse-batch', () => { expect(events.at(-1)).toMatchObject({ type: 'batch_complete', succeeded: 2, failed: 1 }) }) }) - diff --git a/src/lib/services/import/core/sse-batch.ts b/src/lib/services/import/core/sse-batch.ts index d1e26d3d..af075ef1 100644 --- a/src/lib/services/import/core/sse-batch.ts +++ b/src/lib/services/import/core/sse-batch.ts @@ -103,4 +103,3 @@ export function runSseBatch(opts: RunSseBatchOptions): Response { }, }) } - diff --git a/src/lib/services/nitro-assets.ts b/src/lib/services/nitro-assets.ts index 85a3aab9..59a1f788 100644 --- a/src/lib/services/nitro-assets.ts +++ b/src/lib/services/nitro-assets.ts @@ -72,4 +72,3 @@ export async function scanAllNitroFiles(): Promise> { return new Set() } } - diff --git a/src/lib/services/pet-icon.ts b/src/lib/services/pet-icon.ts index b3d32195..eb1c5d7d 100644 --- a/src/lib/services/pet-icon.ts +++ b/src/lib/services/pet-icon.ts @@ -352,4 +352,3 @@ export function getPetIconPng(lib: string): Buffer | null { return null } } - diff --git a/src/lib/services/pet-import.test.ts b/src/lib/services/pet-import.test.ts index eb0fbfd5..b94e932c 100644 --- a/src/lib/services/pet-import.test.ts +++ b/src/lib/services/pet-import.test.ts @@ -46,4 +46,3 @@ describe('pet-import.importSinglePet', () => { expect(r.error).toContain('conversion') }) }) - diff --git a/src/lib/services/pet-import.ts b/src/lib/services/pet-import.ts index e66fbe18..a82bc72c 100644 --- a/src/lib/services/pet-import.ts +++ b/src/lib/services/pet-import.ts @@ -100,4 +100,3 @@ export function getPetStats(): { total: number; imported: number; missing: numbe ).length return { total: CANONICAL_PETS.length, imported, missing: CANONICAL_PETS.length - imported } } - diff --git a/src/types/effects.ts b/src/types/effects.ts index 234817d8..62954d6d 100644 --- a/src/types/effects.ts +++ b/src/types/effects.ts @@ -16,4 +16,3 @@ export interface ImportEffectResult { warnings: string[] error?: string } -