Miao-Yunzai/image/main.ts

89 lines
2.2 KiB
TypeScript

import '../src/init/require.js'
import '../src/init/config.js'
import '../src/init/logger.js'
import '../src/init/redis.js'
import './tailwindcss.js'
import Koa from 'koa'
import KoaStatic from 'koa-static'
import Router from 'koa-router'
import { Component } from 'yunzai/utils'
import { readdirSync } from 'fs'
import { join } from 'path'
import mount from 'koa-mount'
const Com = new Component()
const app = new Koa()
const router = new Router()
const Port = 8080
const PATH = process.cwd()
// 得到plugins目录
const flies = readdirSync(join(process.cwd(), 'plugins'), {
withFileTypes: true
}).filter(flie => !flie.isFile())
// 解析路由
for (const flie of flies) {
const dir = flie?.path ?? flie?.parentPath
if (!dir) {
console.log('flie.name', flie.name, '识别错误')
continue
}
/**
*
*/
const plugins = readdirSync(join(dir, flie.name), {
withFileTypes: true
}).filter(flie => flie.isFile())
for (const plugin of plugins) {
/**
*
*/
if (/^(routes.jsx|routes.tsx)$/.test(plugin.name)) {
const routes = (await import(`file://${join(plugin.path, plugin.name)}`))
?.default
if (!routes) continue
/**
*
*/
if (Array.isArray(routes)) {
/**
*
*/
for (const item of routes) {
const url = `/${flie.name}${item.url}`
console.log(`http://127.0.0.1:${Port}${url}`)
/**
* 推送接口
*/
router.get(url, ctx => {
const options = item?.options ?? {}
const HTML = Com.create(item.element, {
...options,
html_head: options?.html_head ?? '',
file_create: false
})
// 转义路径中的所有反斜杠
const escapedPath = PATH.replace(/\\/g, '\\\\')
// 创建一个正则表达式,'g' 表示全局匹配
const regex = new RegExp(escapedPath, 'g')
ctx.body = HTML.replace(regex, '/file')
})
}
}
}
}
}
// static
app.use(mount('/file', KoaStatic(PATH)))
// routes
app.use(router.routes())
// listen 8000
app.listen(Port, () => {
console.log('Server is running on port ' + Port)
console.log('默认浏览器尺寸 800 X 1280 100%')
})