mirror of
https://github.com/moeru-ai/airi.git
synced 2026-08-14 00:48:06 +00:00
+13
-6
@@ -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<void>((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()
|
||||
}))
|
||||
}))
|
||||
})
|
||||
}
|
||||
|
||||
+7
-7
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user