refactor: clean upload pipeline and restore draco delivery
This commit is contained in:
+23
-16
@@ -5,7 +5,14 @@ import { existsSync } from 'fs'
|
||||
import { TMP_DIR } from '@/lib/constants'
|
||||
import { getModelAssetPath } from '@/lib/model-paths'
|
||||
import { prepareGitAssets } from '@/lib/prepare-git-assets'
|
||||
import type { ParsedFile, PreparedAssetSummary, PushFile } from '@/lib/types'
|
||||
import type {
|
||||
GitModelMode,
|
||||
ParsedFile,
|
||||
PreparedAssetSummary,
|
||||
PreparedStageAssetsResult,
|
||||
PushFile,
|
||||
StagingUploadResult,
|
||||
} from '@/lib/types'
|
||||
|
||||
const STAGING_ROOT = join(TMP_DIR, 'staging')
|
||||
const STAGING_TTL_MS = 60 * 60 * 1000
|
||||
@@ -26,20 +33,12 @@ interface StagedPreparedData {
|
||||
interface StagingManifest {
|
||||
stagingId: string
|
||||
folderName: string
|
||||
gitModelMode: GitModelMode
|
||||
createdAt: number
|
||||
originals: StagedOriginalFile[]
|
||||
prepared?: StagedPreparedData
|
||||
}
|
||||
|
||||
interface PreparedStageAssetsResult {
|
||||
folderName: string
|
||||
filesToPush: PushFile[]
|
||||
modelFilename: string
|
||||
assetSummaries: PreparedAssetSummary[]
|
||||
compressed: boolean
|
||||
compressionError?: string
|
||||
}
|
||||
|
||||
function getStageDir(stagingId: string) {
|
||||
return join(STAGING_ROOT, stagingId)
|
||||
}
|
||||
@@ -87,7 +86,11 @@ async function cleanupExpiredStagingUploads() {
|
||||
}
|
||||
}
|
||||
|
||||
export async function createStagingUpload(folderName: string, parsedFiles: ParsedFile[]) {
|
||||
export async function createStagingUpload(
|
||||
folderName: string,
|
||||
parsedFiles: ParsedFile[],
|
||||
gitModelMode: GitModelMode,
|
||||
): Promise<StagingUploadResult> {
|
||||
await cleanupExpiredStagingUploads()
|
||||
|
||||
const stagingId = randomUUID()
|
||||
@@ -106,6 +109,7 @@ export async function createStagingUpload(folderName: string, parsedFiles: Parse
|
||||
const manifest: StagingManifest = {
|
||||
stagingId,
|
||||
folderName,
|
||||
gitModelMode,
|
||||
createdAt: Date.now(),
|
||||
originals,
|
||||
}
|
||||
@@ -137,12 +141,11 @@ async function readOriginalParsedFiles(stagingId: string, manifest: StagingManif
|
||||
)
|
||||
}
|
||||
|
||||
async function buildPreparedPushFiles(stagingId: string, manifest: StagingManifest): Promise<PushFile[]> {
|
||||
async function buildPreparedPushFiles(stagingId: string, manifest: StagingManifest, prepared: StagedPreparedData): Promise<PushFile[]> {
|
||||
const preparedDir = getPreparedDir(stagingId)
|
||||
const preparedFiles = manifest.prepared?.assetSummaries || []
|
||||
|
||||
return Promise.all(
|
||||
preparedFiles.map(async (file) => {
|
||||
prepared.assetSummaries.map(async (file) => {
|
||||
const buffer = await readFile(join(preparedDir, file.filename))
|
||||
return {
|
||||
path: getModelAssetPath(manifest.folderName, file.filename),
|
||||
@@ -157,7 +160,11 @@ export async function ensurePreparedStagingAssets(stagingId: string): Promise<Pr
|
||||
|
||||
if (!manifest.prepared) {
|
||||
const parsedFiles = await readOriginalParsedFiles(stagingId, manifest)
|
||||
const prepared = await prepareGitAssets({ folderName: manifest.folderName, parsedFiles })
|
||||
const prepared = await prepareGitAssets({
|
||||
folderName: manifest.folderName,
|
||||
parsedFiles,
|
||||
gitModelMode: manifest.gitModelMode,
|
||||
})
|
||||
const preparedDir = getPreparedDir(stagingId)
|
||||
await mkdir(preparedDir, { recursive: true })
|
||||
|
||||
@@ -181,7 +188,7 @@ export async function ensurePreparedStagingAssets(stagingId: string): Promise<Pr
|
||||
|
||||
return {
|
||||
folderName: manifest.folderName,
|
||||
filesToPush: await buildPreparedPushFiles(stagingId, manifest),
|
||||
filesToPush: await buildPreparedPushFiles(stagingId, manifest, manifest.prepared),
|
||||
modelFilename: manifest.prepared.modelFilename,
|
||||
assetSummaries: manifest.prepared.assetSummaries,
|
||||
compressed: manifest.prepared.compressed,
|
||||
|
||||
Reference in New Issue
Block a user