From bea15f65b33aac4f5b9fa95d8c3fb53d938e404f Mon Sep 17 00:00:00 2001 From: Shigma Date: Fri, 12 Apr 2024 06:10:08 +0800 Subject: [PATCH] chore: migrate server-temp to cordis --- packages/server-temp/.npmignore | 2 - packages/server-temp/package.json | 36 ----------- packages/server-temp/src/index.ts | 98 ------------------------------ packages/server-temp/tsconfig.json | 12 ---- 4 files changed, 148 deletions(-) delete mode 100644 packages/server-temp/.npmignore delete mode 100644 packages/server-temp/package.json delete mode 100644 packages/server-temp/src/index.ts delete mode 100644 packages/server-temp/tsconfig.json diff --git a/packages/server-temp/.npmignore b/packages/server-temp/.npmignore deleted file mode 100644 index 7e5fcbc1..00000000 --- a/packages/server-temp/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -.DS_Store -tsconfig.tsbuildinfo diff --git a/packages/server-temp/package.json b/packages/server-temp/package.json deleted file mode 100644 index c0b0a57a..00000000 --- a/packages/server-temp/package.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "@satorijs/server-temp", - "description": "Temp server plugin for cordis", - "version": "1.2.2", - "main": "lib/index.js", - "types": "lib/index.d.ts", - "files": [ - "lib", - "src" - ], - "author": "Shigma ", - "license": "MIT", - "repository": { - "type": "git", - "url": "git+https://github.com/satorijs/satori.git", - "directory": "packages/server-temp" - }, - "bugs": { - "url": "https://github.com/satorijs/satori/issues" - }, - "homepage": "https://github.com/satorijs/satori/tree/master/packages/temp", - "keywords": [ - "cordis", - "router", - "http", - "temporary", - "server", - "service" - ], - "devDependencies": { - "@cordisjs/server": "^0.1.8" - }, - "peerDependencies": { - "@satorijs/satori": "^3.6.5" - } -} diff --git a/packages/server-temp/src/index.ts b/packages/server-temp/src/index.ts deleted file mode 100644 index c64f4162..00000000 --- a/packages/server-temp/src/index.ts +++ /dev/null @@ -1,98 +0,0 @@ -import { Context, Dict, sanitize, Schema, Time } from '@satorijs/satori' -import {} from '@cordisjs/server' -import { createReadStream } from 'fs' -import { fileURLToPath } from 'url' -import { mkdir, rm, writeFile } from 'fs/promises' -import internal from 'stream' - -declare module '@satorijs/core' { - interface Context { - 'server.temp': TempServer - } -} - -export interface Entry { - path: string - url: string - dispose?: () => void -} - -class TempServer { - static inject = ['server', 'http'] - - public path: string - public selfUrl!: string - public baseDir!: string - public entries: Dict = Object.create(null) - - constructor(protected ctx: Context, public config: TempServer.Config) { - const logger = ctx.logger('temp') - - this.path = sanitize(config.path) - this.selfUrl = config.selfUrl || ctx.server.config.selfUrl! - if (!this.selfUrl) { - logger.warn('missing selfUrl configuration') - } - - ctx.server.get(this.path + '/:name', async (koa) => { - logger.debug(koa.params.name) - const entry = this.entries[koa.params.name] - if (!entry) return koa.status = 404 - koa.body = createReadStream(entry.path) - }) - - ctx.on('ready', () => this.start()) - ctx.on('dispose', () => this.stop()) - } - - async start() { - this.baseDir = this.ctx.baseDir + '/temp/' + Math.random().toString(36).slice(2) + '/' - await mkdir(this.baseDir, { recursive: true }) - this.ctx.provide('server.temp', this) - } - - async stop() { - await rm(this.baseDir, { recursive: true }) - } - - async create(data: string | Buffer | internal.Readable): Promise { - const name = Math.random().toString(36).slice(2) - const url = this.selfUrl! + this.path + '/' + name - let path: string - if (typeof data === 'string') { - if (new URL(data).protocol === 'file:') { - path = fileURLToPath(data) - } else { - const stream = await this.ctx.http.get(data, { responseType: 'stream' }) - path = this.baseDir + name - await writeFile(path, internal.Readable.fromWeb(stream as any)) - } - } else { - path = this.baseDir + name - await writeFile(path, data) - } - const dispose = this[Context.current]?.collect('server.temp', async () => { - clearTimeout(timer) - delete this.entries[name] - if (path.startsWith(this.baseDir)) await rm(path) - }) - const timer = dispose && setTimeout(() => dispose(), this.config.maxAge) - return this.entries[name] = { path, url, dispose } - } -} - -namespace TempServer { - export interface Config { - path: string - selfUrl?: string - maxAge?: number - } - - export const Config: Schema = Schema.object({ - path: Schema.string().default('/temp'), - selfUrl: Schema.string().role('link').description('此服务暴露在公网的地址。缺省时将使用全局配置。'), - maxAge: Schema.number().default(Time.minute * 5).description('临时文件的默认最大存活时间。'), - }) -} - -export default TempServer diff --git a/packages/server-temp/tsconfig.json b/packages/server-temp/tsconfig.json deleted file mode 100644 index 6f11f324..00000000 --- a/packages/server-temp/tsconfig.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "extends": "../../tsconfig.base", - "compilerOptions": { - "rootDir": "src", - "outDir": "lib", - "strict": true, - "noImplicitAny": false, - }, - "include": [ - "src", - ], -}