@xrengine/server-core
Version:
Shared components for XREngine server
63 lines (50 loc) • 1.63 kB
text/typescript
import { Id, Params, ServiceMethods } from '@feathersjs/feathers'
import appRootPath from 'app-root-path'
import extract from 'extract-zip'
import fs from 'fs'
import path from 'path'
import { Application } from '@xrengine/server-core/declarations'
import config from '../../appconfig'
interface CreateParams {
path: string
}
export class AssetLibrary implements ServiceMethods<any> {
app: Application
docs: any
rootPath: string
constructor(app: Application) {
this.app = app
this.rootPath = path.join(appRootPath.path, 'packages/projects/projects/')
}
async find(params?: Params): Promise<any> {
return {}
}
async get(id: Id, params?: Params): Promise<any> {
return {}
}
async update(id: Id, params?: Params): Promise<any> {
return {}
}
async patch(id: Id, params?: Params): Promise<any> {
return {}
}
async remove(id: Id, params?: Params): Promise<any> {
return {}
}
async setup() {}
async create(createParams: CreateParams, params?: Params): Promise<any> {
try {
const inPath = decodeURI(createParams.path)
const pathData = /.*projects\/([\w\d\s\-_]+)\/assets\/([\w\d\s\-_\\\/]+).zip$/.exec(inPath)
if (!pathData) throw new Error('could not extract path data')
const [_, projectName, fileName] = pathData
const assetRoot = `${projectName}/assets/${fileName}`
const fullPath = path.join(this.rootPath, assetRoot)
fs.mkdirSync(fullPath)
await extract(`${fullPath}.zip`, { dir: fullPath })
return { assetRoot }
} catch (e) {
throw new Error('error unzipping archive:', e)
}
}
}