From 6a4b27409bdedbeb82ce4451b97fc1488adcb3ea Mon Sep 17 00:00:00 2001 From: Neko Ayaka Date: Tue, 3 Dec 2024 13:50:18 +0800 Subject: [PATCH] chore: build Signed-off-by: Neko Ayaka --- scripts/unzip.ts | 19 +++++++++++++------ vite.config.ts | 14 +++++++------- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/scripts/unzip.ts b/scripts/unzip.ts index 8fe47b7aa..d4ea19d6e 100644 --- a/scripts/unzip.ts +++ b/scripts/unzip.ts @@ -2,7 +2,7 @@ import type { Buffer } from 'node:buffer' import { createWriteStream, existsSync, mkdirSync } from 'node:fs' import { dirname, join } from 'node:path' import { fromBuffer } from 'yauzl' -import { noError, onError, resolveWhenNoError } from './errors' +import { noError, onError } from './errors' /** * Example: @@ -22,6 +22,13 @@ import { noError, onError, resolveWhenNoError } from './errors' export async function unzip(buffer: Buffer, target: string) { return new Promise((resolve, reject) => { let pendingWrites = 0 + let isReadingComplete = false + + function tryResolve() { + if (isReadingComplete && pendingWrites === 0) { + resolve() + } + } fromBuffer(buffer, { lazyEntries: true }, noError(reject, (zipFile) => { // This is the key. We start by reading the first entry. @@ -63,10 +70,7 @@ export async function unzip(buffer: Buffer, target: string) { file.on('finish', () => { file.close(() => { pendingWrites-- - if (pendingWrites === 0) { - resolve() - } - + tryResolve() zipFile.readEntry() }) }) @@ -74,7 +78,10 @@ export async function unzip(buffer: Buffer, target: string) { }) zipFile.on('error', onError(reject, zipFile.close)) - zipFile.on('end', resolveWhenNoError(reject, resolve)) + zipFile.on('end', noError(reject, () => { + isReadingComplete = true + tryResolve() + })) })) }) } diff --git a/vite.config.ts b/vite.config.ts index e532e85e4..f9f4273b3 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,5 +1,5 @@ import { Buffer } from 'node:buffer' -import { cp, mkdir } from 'node:fs/promises' +import { copyFile, cp, mkdir } from 'node:fs/promises' import path, { join, resolve } from 'node:path' import VueI18n from '@intlify/unplugin-vue-i18n/vite' @@ -161,8 +161,8 @@ export default defineConfig({ } if (!(await exists(resolve(join(publicDir, 'assets/js/CubismSdkForWeb-5-r.1'))))) { - await mkdir(join(publicDir, 'assets/js/CubismSdkForWeb-5-r.1'), { recursive: true }).catch(() => {}) - await cp(join(cacheDir, 'assets/js/CubismSdkForWeb-5-r.1/Core/live2dcubismcore.min.js'), join(publicDir, 'assets/js/CubismSdkForWeb-5-r.1/Core/live2dcubismcore.min.js'), { recursive: true }) + await mkdir(join(publicDir, 'assets/js/CubismSdkForWeb-5-r.1/Core'), { recursive: true }).catch(() => {}) + await copyFile(join(cacheDir, 'assets/js/CubismSdkForWeb-5-r.1/Core/live2dcubismcore.min.js'), join(publicDir, 'assets/js/CubismSdkForWeb-5-r.1/Core/live2dcubismcore.min.js')) } } catch (err) { @@ -190,8 +190,8 @@ export default defineConfig({ } if (!(await exists(resolve(join(publicDir, 'assets/live2d/models/hiyori_free_zh'))))) { - await mkdir(join(publicDir, 'assets/live2d/models/hiyori_free_zh'), { recursive: true }).catch(() => { }) - await cp(join(cacheDir, 'assets/live2d/models/hiyori_free_zh/'), join(publicDir, 'assets/live2d/models/hiyori_free_zh/'), { recursive: true }) + await mkdir(join(publicDir, 'assets/live2d/models'), { recursive: true }).catch(() => { }) + await cp(join(cacheDir, 'assets/live2d/models/hiyori_free_zh'), join(publicDir, 'assets/live2d/models/hiyori_free_zh'), { recursive: true }) } } catch (err) { @@ -219,8 +219,8 @@ export default defineConfig({ } if (!(await exists(resolve(join(publicDir, 'assets/live2d/models/hiyori_pro_zh'))))) { - await mkdir(join(publicDir, 'assets/live2d/models/hiyori_pro_zh'), { recursive: true }).catch(() => { }) - await cp(join(cacheDir, 'assets/live2d/models/hiyori_pro_zh/'), join(publicDir, 'assets/live2d/models/hiyori_pro_zh/'), { recursive: true }) + await mkdir(join(publicDir, 'assets/live2d/models'), { recursive: true }).catch(() => { }) + await cp(join(cacheDir, 'assets/live2d/models/hiyori_pro_zh'), join(publicDir, 'assets/live2d/models/hiyori_pro_zh'), { recursive: true }) } } catch (err) {