Compare commits

..

1 Commits

Author SHA1 Message Date
whyour a3cbf8cdf4 迁移文件 2023-01-04 17:04:02 +08:00
199 changed files with 7485 additions and 6346 deletions
+1 -2
View File
@@ -9,5 +9,4 @@ SECRET='whyour'
QINIU_AK=''
QINIU_SK=''
QINIU_SCOPE=''
TEMP=''
QINIU_SCOPE=''
+9 -11
View File
@@ -5,11 +5,15 @@ on:
branches:
- 'master'
- 'develop'
# Sequence of patterns matched against refs/tags
tags:
- 'v*' # Push events to matching v*, i.e. v1.0, v20.15.10
schedule:
# 参考 https://jasonet.co/posts/scheduled-actions/
- cron: '00 14 * * *' # GMT 15:00 => 北京时间 23:00
# note: 这里是GMT时间,北京时间减去八小时即可。如北京时间 22:30 => GMT 14:30
# minute hour day month dayOfWeek
- cron: '00 14 * * *' # GMT 14:00 => 北京时间 22:00
#- cron: '30 16 * * *' # GMT 16:30(前一天) => 北京时间 00:30
workflow_dispatch:
jobs:
@@ -45,7 +49,7 @@ jobs:
- uses: actions/checkout@v3
- uses: pnpm/action-setup@v2
with:
version: 7
version: latest
- uses: actions/setup-node@v3
with:
@@ -85,8 +89,6 @@ jobs:
git push --force --quiet gitlab ${GITHUB_BRANCH}:${GITHUB_BRANCH}
build:
if: github.ref != 'refs/heads/master'
needs: build-static
runs-on: ubuntu-latest
@@ -99,7 +101,7 @@ jobs:
- uses: actions/checkout@v3
- uses: pnpm/action-setup@v2
with:
version: 7
version: latest
- uses: actions/setup-node@v3
with:
cache: 'pnpm'
@@ -153,16 +155,12 @@ jobs:
build-args: |
MAINTAINER=${{ github.repository_owner }}
QL_BRANCH=${{ github.ref_name }}
SOURCE_COMMIT=${{ github.sha }}
network: host
platforms: linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64,linux/ppc64le,linux/s390x,linux/386
context: .
file: ./docker/Dockerfile
platforms: linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64
context: docker/
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=registry,ref=whyour/qinglong:cache
cache-to: type=registry,ref=whyour/qinglong:cache,mode=max
- name: Image digest
run: echo ${{ steps.docker_build.outputs.digest }}
+2 -1
View File
@@ -28,4 +28,5 @@
/db
/manual_log
/scripts
/bak
/bak
node_modules
-7
View File
@@ -1,7 +0,0 @@
export const LOG_END_SYMBOL = '     ';
export const TASK_COMMAND = 'task';
export const QL_COMMAND = 'ql';
export const TASK_PREFIX = `${TASK_COMMAND} `;
export const QL_PREFIX = `${QL_COMMAND} `;
-42
View File
@@ -1,42 +0,0 @@
import { Subscription } from '../data/subscription';
import isNil from 'lodash/isNil';
export function formatUrl(doc: Subscription) {
let url = doc.url;
let host = '';
if (doc.type === 'private-repo') {
if (doc.pull_type === 'ssh-key') {
host = doc.url!.replace(/.*\@([^\:]+)\:.*/, '$1');
url = doc.url!.replace(host, doc.alias);
} else {
host = doc.url!.replace(/.*\:\/\/([^\/]+)\/.*/, '$1');
const { username, password } = doc.pull_option as any;
url = doc.url!.replace(host, `${username}:${password}@${host}`);
}
}
return { url, host };
}
export function formatCommand(doc: Subscription, url?: string) {
let command = `SUB_ID=${doc.id} ql `;
let _url = url || formatUrl(doc).url;
const {
type,
whitelist,
blacklist,
dependences,
branch,
extensions,
proxy,
autoAddCron,
autoDelCron,
} = doc;
if (type === 'file') {
command += `raw "${_url}"`;
} else {
command += `repo "${_url}" "${whitelist || ''}" "${blacklist || ''}" "${dependences || ''
}" "${branch || ''}" "${extensions || ''}" "${proxy || ''}" "${isNil(autoAddCron) ? true : Boolean(autoAddCron)
}" "${isNil(autoDelCron) ? true : Boolean(autoDelCron)}"`;
}
return command;
}
-27
View File
@@ -1,27 +0,0 @@
import express from 'express';
import { exec } from 'child_process';
import Logger from './loaders/logger';
import config from './config';
const app = express();
app.get('/api/public/panel/log', (req, res) => {
exec('tail -n 300 ~/.pm2/logs/panel-error.log', (err, stdout, stderr) => {
if (err || stderr) {
return res.send({ code: 400, message: (err && err.message) || stderr });
}
return res.send({ code: 200, data: stdout });
});
});
app
.listen(config.publicPort, async () => {
await require('./loaders/sentry').default({ expressApp: app });
await require('./loaders/db').default();
Logger.debug(`✌️ 公共服务启动成功!`);
})
.on('error', (err) => {
Logger.error(err);
process.exit(1);
});
+9 -22
View File
@@ -1,12 +1,3 @@
FROM python:3.10-alpine as builder
COPY package.json .npmrc pnpm-lock.yaml /tmp/build/
RUN set -x \
&& apk update \
&& apk add nodejs npm git \
&& npm i -g pnpm \
&& cd /tmp/build \
&& pnpm install --prod
FROM python:3.10-alpine
ARG QL_MAINTAINER="whyour"
@@ -16,13 +7,14 @@ ARG QL_BRANCH=develop
ENV PNPM_HOME=/root/.local/share/pnpm \
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/root/.local/share/pnpm:/root/.local/share/pnpm/global/5/node_modules:$PNPM_HOME \
NODE_PATH=/usr/local/bin:/usr/local/pnpm-global/5/node_modules:/usr/local/lib/node_modules:/root/.local/share/pnpm/global/5/node_modules \
LANG=zh_CN.UTF-8 \
SHELL=/bin/bash \
PS1="\u@\h:\w \$ " \
QL_DIR=/ql \
QL_BRANCH=${QL_BRANCH}
WORKDIR ${QL_DIR}
RUN set -x \
&& sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories \
&& apk update -f \
@@ -49,25 +41,20 @@ RUN set -x \
&& git config --global user.name "qinglong" \
&& git config --global http.postBuffer 524288000 \
&& npm install -g pnpm \
&& pnpm add -g pm2 tsx \
&& rm -rf /root/.pnpm-store \
&& rm -rf /root/.local/share/pnpm/store \
&& rm -rf /root/.cache \
&& rm -rf /root/.npm
ARG SOURCE_COMMIT
RUN git clone -b ${QL_BRANCH} ${QL_URL} ${QL_DIR} \
&& pnpm add -g pm2 ts-node typescript tslib \
&& git clone -b ${QL_BRANCH} ${QL_URL} ${QL_DIR} \
&& cd ${QL_DIR} \
&& cp -f .env.example .env \
&& chmod 777 ${QL_DIR}/shell/*.sh \
&& chmod 777 ${QL_DIR}/docker/*.sh \
&& pnpm install --prod \
&& rm -rf /root/.pnpm-store \
&& rm -rf /root/.local/share/pnpm/store \
&& rm -rf /root/.cache \
&& rm -rf /root/.npm \
&& git clone -b ${QL_BRANCH} https://github.com/${QL_MAINTAINER}/qinglong-static.git /static \
&& mkdir -p ${QL_DIR}/static \
&& cp -rf /static/* ${QL_DIR}/static \
&& rm -rf /static
COPY --from=builder /tmp/build/node_modules/. /ql/node_modules/
WORKDIR ${QL_DIR}
ENTRYPOINT ["./docker/docker-entrypoint.sh"]
+5 -4
View File
@@ -9,8 +9,9 @@ export isFirstStartServer=true
echo -e "======================1. 检测配置文件========================\n"
make_dir /etc/nginx/conf.d
make_dir /run/nginx
init_nginx
cp -fv $nginx_conf /etc/nginx/nginx.conf
cp -fv $nginx_app_conf /etc/nginx/conf.d/front.conf
sed -i "s,QL_BASE_URL,${qlBaseUrl},g" /etc/nginx/conf.d/front.conf
pm2 l &>/dev/null
patch_version &>/dev/null
@@ -41,13 +42,13 @@ echo -e "定时任务启动成功...\n"
if [[ $AutoStartBot == true ]]; then
echo -e "======================7. 启动bot========================\n"
nohup ql -l bot >$dir_log/bot.log 2>&1 &
nohup ql bot >$dir_log/bot.log 2>&1 &
echo -e "bot后台启动中...\n"
fi
if [[ $EnableExtraShell == true ]]; then
echo -e "======================8. 执行自定义脚本========================\n"
nohup ql -l extra >$dir_log/extra.log 2>&1 &
nohup ql extra >$dir_log/extra.log 2>&1 &
echo -e "自定义脚本后台执行中...\n"
fi
-1
View File
@@ -13,7 +13,6 @@ map $http_upgrade $connection_upgrade {
server {
listen 5700;
IPV6_CONFIG
root /ql/static/dist;
ssl_session_timeout 5m;
-6
View File
@@ -1,6 +0,0 @@
{
"watch": ["back", ".env"],
"ext": "js,ts,json",
"ignore": ["src/**/*.spec.ts"],
"exec": "ts-node --transpile-only ./back/app.ts"
}
+11 -16
View File
@@ -2,10 +2,10 @@
"private": true,
"scripts": {
"start": "concurrently -n w: npm:start:*",
"start:front": "max dev",
"start:back": "nodemon",
"start:public": "ts-node --transpile-only ./back/public.ts",
"start:schedule": "ts-node --transpile-only ./back/schedule.ts",
"start:env": "pnpm run --filter @qinglong/env start",
"start:front": "pnpm run --filter @qinglong/web start",
"start:back": "pnpm run --filter @qinglong/back start",
"start:public": "pnpm run --filter @qinglong/public start",
"build:front": "max build",
"build:back": "tsc -p tsconfig.back.json",
"panel": "npm run build:back && node static/build/app.js",
@@ -43,8 +43,7 @@
"monaco-editor",
"rc-field-form",
"@types/lodash.merge",
"rollup",
"styled-components"
"rollup"
],
"allowedVersions": {
"react": "18",
@@ -83,7 +82,7 @@
"sequelize": "^6.25.5",
"serve-handler": "^6.1.3",
"sockjs": "^0.3.24",
"sqlite3": "git+https://github.com/whyour/node-sqlite3.git#v1.0.2",
"sqlite3": "npm:@louislam/sqlite3@^15.0.6",
"toad-scheduler": "^1.6.0",
"typedi": "^0.10.0",
"uuid": "^8.3.2",
@@ -92,8 +91,8 @@
},
"devDependencies": {
"@ant-design/icons": "^4.7.0",
"@ant-design/pro-layout": "6.38.22",
"@monaco-editor/react": "4.2.1",
"@ant-design/pro-layout": "^6.33.1",
"@monaco-editor/react": "4.4.6",
"@react-hook/resize-observer": "^1.2.6",
"@sentry/react": "^7.12.1",
"@types/body-parser": "^1.19.2",
@@ -110,22 +109,21 @@
"@types/nodemailer": "^6.4.4",
"@types/qrcode.react": "^1.0.2",
"@types/react": "^18.0.20",
"@types/react-copy-to-clipboard": "^5.0.4",
"@types/react-dom": "^18.0.6",
"@types/serve-handler": "^6.1.1",
"@types/sockjs": "^0.3.33",
"@types/sockjs-client": "^1.5.1",
"@types/uuid": "^8.3.4",
"@umijs/max": "^4.0.55",
"@umijs/max": "^4.0.21",
"@umijs/ssr-darkreader": "^4.9.45",
"ansi-to-react": "^6.1.6",
"antd": "^4.24.8",
"antd": "^4.23.0",
"antd-img-crop": "^4.2.3",
"codemirror": "^5.65.2",
"compression-webpack-plugin": "9.2.0",
"concurrently": "^7.0.0",
"lint-staged": "^13.0.3",
"monaco-editor": "0.33.0",
"monaco-editor": "^0.34.1",
"nodemon": "^2.0.15",
"prettier": "^2.5.1",
"qiniu": "^7.4.0",
@@ -134,7 +132,6 @@
"rc-tween-one": "^3.0.6",
"react": "18.2.0",
"react-codemirror2": "^7.2.1",
"react-copy-to-clipboard": "^5.1.0",
"react-diff-viewer": "^3.1.1",
"react-dnd": "^14.0.2",
"react-dnd-html5-backend": "^14.0.0",
@@ -143,11 +140,9 @@
"sockjs-client": "^1.6.0",
"ts-node": "^10.6.0",
"tslib": "^2.4.0",
"tsx": "^3.12.3",
"typescript": "4.8.4",
"umi-request": "^1.4.0",
"vh-check": "^2.0.5",
"virtualizedtableforantd4": "1.3.0",
"webpack": "^5.70.0",
"yorkie": "^2.0.0"
}
+6
View File
@@ -0,0 +1,6 @@
{
"watch": ["src", ".env"],
"ext": "js,ts,json",
"ignore": ["src/**/*.spec.ts"],
"exec": "ts-node --transpile-only ./src/app.ts"
}
+138
View File
@@ -0,0 +1,138 @@
{
"name": "@qinglong/back",
"private": true,
"scripts": {
"start": "nodemon",
"build": "tsc"
},
"gitHooks": {
"pre-commit": "lint-staged"
},
"lint-staged": {
"*.{js,jsx,less,md,json}": [
"prettier --write"
],
"*.ts?(x)": [
"prettier --parser=typescript --write"
]
},
"pnpm": {
"peerDependencyRules": {
"ignoreMissing": [
"react",
"react-dom",
"antd",
"dva",
"postcss",
"webpack",
"eslint",
"stylelint",
"redux",
"@babel/core",
"monaco-editor",
"rc-field-form",
"@types/lodash.merge",
"rollup"
],
"allowedVersions": {
"react": "18",
"react-dom": "18",
"dva-core": "2"
}
}
},
"dependencies": {
"@otplib/preset-default": "^12.0.1",
"@sentry/node": "^7.12.1",
"@sentry/tracing": "^7.12.1",
"body-parser": "^1.19.2",
"celebrate": "^15.0.1",
"chokidar": "^3.5.3",
"cors": "^2.8.5",
"cron-parser": "^4.2.1",
"dayjs": "^1.11.2",
"dotenv": "^16.0.0",
"express": "^4.17.3",
"express-jwt": "^6.1.1",
"express-urlrewrite": "^1.4.0",
"form-data": "^4.0.0",
"got": "^11.8.2",
"hpagent": "^0.1.2",
"iconv-lite": "^0.6.3",
"js-yaml": "^4.1.0",
"jsonwebtoken": "^8.5.1",
"lodash": "^4.17.21",
"multer": "^1.4.4",
"nedb": "^1.8.0",
"node-schedule": "^2.1.0",
"nodemailer": "^6.7.2",
"pstree.remy": "^1.1.8",
"reflect-metadata": "^0.1.13",
"sequelize": "^6.25.5",
"serve-handler": "^6.1.3",
"sockjs": "^0.3.24",
"sqlite3": "npm:@louislam/sqlite3@^15.0.6",
"toad-scheduler": "^1.6.0",
"typedi": "^0.10.0",
"uuid": "^8.3.2",
"winston": "^3.6.0",
"yargs": "^17.3.1"
},
"devDependencies": {
"@ant-design/icons": "^4.7.0",
"@ant-design/pro-layout": "^6.33.1",
"@monaco-editor/react": "4.4.6",
"@react-hook/resize-observer": "^1.2.6",
"@sentry/react": "^7.12.1",
"@types/body-parser": "^1.19.2",
"@types/cors": "^2.8.12",
"@types/express": "^4.17.13",
"@types/express-jwt": "^6.0.4",
"@types/js-yaml": "^4.0.5",
"@types/jsonwebtoken": "^8.5.8",
"@types/lodash": "^4.14.185",
"@types/multer": "^1.4.7",
"@types/nedb": "^1.8.12",
"@types/node": "^17.0.21",
"@types/node-schedule": "^1.3.2",
"@types/nodemailer": "^6.4.4",
"@types/qrcode.react": "^1.0.2",
"@types/react": "^18.0.20",
"@types/react-dom": "^18.0.6",
"@types/serve-handler": "^6.1.1",
"@types/sockjs": "^0.3.33",
"@types/sockjs-client": "^1.5.1",
"@types/uuid": "^8.3.4",
"@umijs/max": "^4.0.21",
"@umijs/ssr-darkreader": "^4.9.45",
"ansi-to-react": "^6.1.6",
"antd": "^4.23.0",
"antd-img-crop": "^4.2.3",
"codemirror": "^5.65.2",
"compression-webpack-plugin": "9.2.0",
"concurrently": "^7.0.0",
"lint-staged": "^13.0.3",
"monaco-editor": "^0.34.1",
"nodemon": "^2.0.15",
"prettier": "^2.5.1",
"qiniu": "^7.4.0",
"qrcode.react": "^1.0.1",
"query-string": "^7.1.1",
"rc-tween-one": "^3.0.6",
"react": "18.2.0",
"react-codemirror2": "^7.2.1",
"react-diff-viewer": "^3.1.1",
"react-dnd": "^14.0.2",
"react-dnd-html5-backend": "^14.0.0",
"react-dom": "18.2.0",
"react-split-pane": "^0.1.92",
"sockjs-client": "^1.6.0",
"ts-node": "^10.6.0",
"tslib": "^2.4.0",
"typescript": "4.8.4",
"umi-request": "^1.4.0",
"vh-check": "^2.0.5",
"webpack": "^5.70.0",
"yorkie": "^2.0.0"
}
}
@@ -152,21 +152,6 @@ export default (app: Router) => {
}
});
route.get(
'/detail',
async (req: Request, res: Response, next: NextFunction) => {
const logger: Logger = Container.get('logger');
try {
const cronService = Container.get(CronService);
const data = await cronService.find(req.query as any);
return res.send({ code: 200, data });
} catch (e) {
logger.error('🔥 error: %o', e);
return next(e);
}
},
);
route.post(
'/',
celebrate({
@@ -175,7 +160,6 @@ export default (app: Router) => {
schedule: Joi.string().required(),
name: Joi.string().optional(),
labels: Joi.array().optional(),
sub_id: Joi.number().optional().allow(null),
}),
}),
async (req: Request, res: Response, next: NextFunction) => {
@@ -332,7 +316,6 @@ export default (app: Router) => {
command: Joi.string().required(),
schedule: Joi.string().required(),
name: Joi.string().optional().allow(null),
sub_id: Joi.number().optional().allow(null),
id: Joi.number().required(),
}),
}),
@@ -53,7 +53,7 @@ export default (app: Router) => {
body: Joi.object({
filename: Joi.string().required(),
path: Joi.string().allow(''),
type: Joi.string().optional()
type: Joi.string().optional(),
}),
}),
async (req: Request, res: Response, next: NextFunction) => {
@@ -65,7 +65,7 @@ export default (app: Router) => {
};
const filePath = join(config.logPath, path, filename);
if (type === 'directory') {
emptyDir(filePath);
emptyDir(filePath);
} else {
fs.unlinkSync(filePath);
}
@@ -75,5 +75,4 @@ export default (app: Router) => {
}
},
);
};
@@ -50,8 +50,6 @@ export default (app: Router) => {
schedule_type: Joi.string().required(),
alias: Joi.string().required(),
proxy: Joi.string().optional().allow('').allow(null),
autoAddCron: Joi.boolean().optional().allow('').allow(null),
autoDelCron: Joi.boolean().optional().allow('').allow(null),
}),
}),
async (req: Request, res: Response, next: NextFunction) => {
@@ -181,8 +179,6 @@ export default (app: Router) => {
sub_after: Joi.string().optional().allow('').allow(null),
alias: Joi.string().required(),
proxy: Joi.string().optional().allow('').allow(null),
autoAddCron: Joi.boolean().optional().allow('').allow(null),
autoDelCron: Joi.boolean().optional().allow('').allow(null),
id: Joi.number().required(),
}),
}),
+1
View File
@@ -0,0 +1 @@
export const LOG_END_SYMBOL = '\n          ';
@@ -6,7 +6,7 @@ process.env.NODE_ENV = process.env.NODE_ENV || 'development';
if (!process.env.QL_DIR) {
// 声明QL_DIR环境变量
let qlHomePath = path.join(__dirname, '../../');
let qlHomePath = path.join(__dirname, '../../../../');
// 生产环境
if (qlHomePath.endsWith('/static/')) {
qlHomePath = path.join(qlHomePath, '../');
@@ -17,7 +17,6 @@ export class Crontab {
labels?: string[];
last_running_time?: number;
last_execution_time?: number;
sub_id?: number;
constructor(options: Crontab) {
this.name = options.name;
@@ -38,7 +37,6 @@ export class Crontab {
this.labels = options.labels || [];
this.last_running_time = options.last_running_time || 0;
this.last_execution_time = options.last_execution_time || 0;
this.sub_id = options.sub_id;
}
}
@@ -74,5 +72,4 @@ export const CrontabModel = sequelize.define<CronInstance>('Crontab', {
labels: DataTypes.JSON,
last_running_time: DataTypes.NUMBER,
last_execution_time: DataTypes.NUMBER,
sub_id: { type: DataTypes.NUMBER, allowNull: true },
});
@@ -28,7 +28,7 @@ export enum EnvStatus {
export const maxPosition = 9000000000000000;
export const initPosition = 4500000000000000;
export const stepPosition = 10000000000;
export const stepPosition = 10000000;
export const minPosition = 100;
interface EnvInstance extends Model<Env, Env>, Env {}
@@ -29,8 +29,6 @@ export class Subscription {
sub_before?: string;
sub_after?: string;
proxy?: string;
autoAddCron?: 1 | 0;
autoDelCron?: 1 | 0;
constructor(options: Subscription) {
this.id = options.id;
@@ -58,8 +56,6 @@ export class Subscription {
this.sub_before = options.sub_before;
this.sub_after = options.sub_after;
this.proxy = options.proxy;
this.autoAddCron = options.autoAddCron ? 1 : 0;
this.autoDelCron = options.autoDelCron ? 1 : 0;
}
}
@@ -109,7 +105,5 @@ export const SubscriptionModel = sequelize.define<SubscriptionInstance>(
schedule_type: DataTypes.STRING,
alias: { type: DataTypes.STRING, unique: 'alias' },
proxy: { type: DataTypes.STRING, allowNull: true },
autoAddCron: { type: DataTypes.NUMBER, allowNull: true },
autoDelCron: { type: DataTypes.NUMBER, allowNull: true },
},
);
View File
@@ -36,19 +36,6 @@ export default async () => {
try {
await sequelize.query('alter table CrontabViews add column type NUMBER');
} catch (error) {}
try {
await sequelize.query(
'alter table Subscriptions add column autoAddCron NUMBER',
);
} catch (error) {}
try {
await sequelize.query(
'alter table Subscriptions add column autoDelCron NUMBER',
);
} catch (error) {}
try {
await sequelize.query('alter table Crontabs add column sub_id NUMBER');
} catch (error) {}
// 2.10-2.11 升级
const cronDbFile = path.join(config.rootPath, 'db/crontab.db');
@@ -4,7 +4,8 @@ import { Container } from 'typedi';
import { Crontab, CrontabModel, CrontabStatus } from '../data/cron';
import CronService from '../services/cron';
import EnvService from '../services/env';
import { DependenceModel, DependenceStatus } from '../data/dependence';
import groupBy from 'lodash/groupBy';
import { DependenceModel } from '../data/dependence';
import { Op } from 'sequelize';
import config from '../config';
import { CrontabViewModel, CronViewType } from '../data/cronView';
@@ -41,14 +42,16 @@ export default async () => {
order: [['type', 'DESC']],
raw: true,
}).then(async (docs) => {
await DependenceModel.update(
{ status: DependenceStatus.installing, log: [] },
{ where: { id: docs.map((x) => x.id!) } },
);
dependenceService.installDependenceOneByOne(docs);
const groups = groupBy(docs, 'type');
const keys = Object.keys(groups).sort((a, b) => parseInt(b) - parseInt(a));
for (const key of keys) {
const group = groups[key];
const depIds = group.map((x) => x.id);
await dependenceService.reInstall(depIds as number[]);
}
});
// 初始化时执行一次所有的 ql repo 任务
// 初始化时执行一次所有的ql repo 任务
CrontabModel.findAll({
where: {
isDisabled: { [Op.ne]: 1 },
@@ -4,8 +4,7 @@ import os from 'os';
import dotenv from 'dotenv';
import Logger from './logger';
import { fileExist } from '../config/util';
const rootPath = process.env.QL_DIR as string;;
const rootPath = process.env.QL_DIR as string;
const dataPath = path.join(rootPath, 'data/');
const configPath = path.join(dataPath, 'config/');
const scriptPath = path.join(dataPath, 'scripts/');
@@ -11,7 +11,7 @@ export default async () => {
const subscriptionService = Container.get(SubscriptionService);
// 生成内置token
let tokenCommand = `tsx ${config.rootPath}/back/token.ts`;
let tokenCommand = `ts-node-transpile-only ${config.rootPath}/back/token.ts`;
const tokenFile = `${config.rootPath}static/build/token.js`;
if (await fileExist(tokenFile)) {
tokenCommand = `node ${tokenFile}`;
@@ -21,7 +21,6 @@ export default async () => {
name: '生成token',
command: tokenCommand,
};
await scheduleService.cancelIntervalTask(cron);
scheduleService.createIntervalTask(cron, {
days: 28,
});
@@ -29,21 +28,24 @@ export default async () => {
// 运行删除日志任务
const data = await systemService.getLogRemoveFrequency();
if (data && data.info && data.info.frequency) {
const rmlogCron = {
const cron = {
id: data.id,
name: '删除日志',
command: `ql rmlog ${data.info.frequency}`,
};
await scheduleService.cancelIntervalTask(rmlogCron);
scheduleService.createIntervalTask(rmlogCron, {
scheduleService.createIntervalTask(cron, {
days: data.info.frequency,
});
}
// 运行所有订阅
await subscriptionService.setSshConfig();
const subs = await subscriptionService.list();
for (const sub of subs) {
subscriptionService.handleTask(sub, !sub.is_disabled, !sub.is_disabled);
await subscriptionService.handleTask(
sub,
!sub.is_disabled,
true,
!sub.is_disabled,
);
}
};
@@ -14,11 +14,10 @@ import {
import { promises, existsSync } from 'fs';
import { Op, where, col as colFn } from 'sequelize';
import path from 'path';
import { TASK_PREFIX, QL_PREFIX } from '../config/const';
@Service()
export default class CronService {
constructor(@Inject('logger') private logger: winston.Logger) { }
constructor(@Inject('logger') private logger: winston.Logger) {}
private isSixCron(cron: Crontab) {
const { schedule } = cron;
@@ -32,7 +31,7 @@ export default class CronService {
const tab = new Crontab(payload);
tab.saved = false;
const doc = await this.insert(tab);
await this.set_crontab();
await this.set_crontab(this.isSixCron(doc));
return doc;
}
@@ -41,10 +40,9 @@ export default class CronService {
}
public async update(payload: Crontab): Promise<Crontab> {
const tab = new Crontab(payload);
tab.saved = false;
const newDoc = await this.updateDb(tab);
await this.set_crontab();
payload.saved = false;
const newDoc = await this.updateDb(payload);
await this.set_crontab(this.isSixCron(newDoc));
return newDoc;
}
@@ -83,7 +81,7 @@ export default class CronService {
public async remove(ids: number[]) {
await CrontabModel.destroy({ where: { id: ids } });
await this.set_crontab();
await this.set_crontab(true);
}
public async pin(ids: number[]) {
@@ -245,11 +243,8 @@ export default class CronService {
const filterKeys: any = Object.keys(filterQuery);
for (const key of filterKeys) {
let q: any = {};
if (!filterQuery[key]) continue;
if (key === 'status' && filterQuery[key].includes(2)) {
q = { [Op.or]: [{ [key]: filterQuery[key] }, { isDisabled: 1 }] };
} else {
q[key] = filterQuery[key];
if (filterKeys[key]) {
q[key] = filterKeys[key];
}
query[Op.and].push(q);
}
@@ -264,15 +259,6 @@ export default class CronService {
}
}
public async find({ log_path }: { log_path: string }): Promise<Crontab | null> {
try {
const result = await CrontabModel.findOne({ where: { log_path } });
return result;
} catch (error) {
throw error;
}
}
public async crontabs(params?: {
searchValue: string;
page: string;
@@ -375,8 +361,8 @@ export default class CronService {
this.logger.silly('Original command: ' + command);
let cmdStr = command;
if (!cmdStr.startsWith(TASK_PREFIX) && !cmdStr.startsWith(QL_PREFIX)) {
cmdStr = `${TASK_PREFIX}${cmdStr}`;
if (!cmdStr.includes('task ') && !cmdStr.includes('ql ')) {
cmdStr = `task ${cmdStr}`;
}
if (
cmdStr.endsWith('.js') ||
@@ -422,12 +408,12 @@ export default class CronService {
public async disabled(ids: number[]) {
await CrontabModel.update({ isDisabled: 1 }, { where: { id: ids } });
await this.set_crontab();
await this.set_crontab(true);
}
public async enabled(ids: number[]) {
await CrontabModel.update({ isDisabled: 0 }, { where: { id: ids } });
await this.set_crontab();
await this.set_crontab(true);
}
public async log(id: number) {
@@ -440,26 +426,69 @@ export default class CronService {
const logFileExist = doc.log_path && (await fileExist(absolutePath));
if (logFileExist) {
return getFileContentByName(`${absolutePath}`);
}
const [, commandStr, url] = doc.command.split(/ +/);
let logPath = this.getKey(commandStr);
const isQlCommand = doc.command.startsWith('ql ');
const key =
(url && ['repo', 'raw'].includes(commandStr) && this.getKey(url)) ||
logPath;
if (isQlCommand) {
logPath = 'update';
}
let logDir = `${config.logPath}${logPath}`;
if (existsSync(logDir)) {
let files = await promises.readdir(logDir);
if (isQlCommand) {
files = files.filter((x) => x.includes(key));
}
return getFileContentByName(`${logDir}/${files[files.length - 1]}`);
} else {
return '任务未运行';
return '';
}
}
public async logs(id: number) {
const doc = await this.getDb({ id });
if (!doc || !doc.log_path) {
if (!doc) {
return [];
}
const relativeDir = path.dirname(`${doc.log_path}`);
const dir = path.resolve(config.logPath, relativeDir);
if (existsSync(dir)) {
let files = await promises.readdir(dir);
if (doc.log_path) {
const relativeDir = path.dirname(`${doc.log_path}`);
const dir = path.resolve(config.logPath, relativeDir);
if (existsSync(dir)) {
let files = await promises.readdir(dir);
return files
.map((x) => ({
filename: x,
directory: relativeDir.replace(config.logPath, ''),
time: fs.statSync(`${dir}/${x}`).mtime.getTime(),
}))
.sort((a, b) => b.time - a.time);
}
}
const [, commandStr, url] = doc.command.split(/ +/);
let logPath = this.getKey(commandStr);
const isQlCommand = doc.command.startsWith('ql ');
const key =
(url && ['repo', 'raw'].includes(commandStr) && this.getKey(url)) ||
logPath;
if (isQlCommand) {
logPath = 'update';
}
let logDir = `${config.logPath}${logPath}`;
if (existsSync(logDir)) {
let files = await promises.readdir(logDir);
if (isQlCommand) {
files = files.filter((x) => x.includes(key));
}
return files
.map((x) => ({
filename: x,
directory: relativeDir.replace(config.logPath, ''),
time: fs.statSync(`${dir}/${x}`).mtime.getTime(),
directory: logPath,
time: fs.statSync(`${logDir}/${x}`).mtime.getTime(),
}))
.sort((a, b) => b.time - a.time);
} else {
@@ -467,18 +496,34 @@ export default class CronService {
}
}
private make_command(tab: Crontab) {
if (
!tab.command.startsWith(TASK_PREFIX) &&
!tab.command.startsWith(QL_PREFIX)
) {
tab.command = `${TASK_PREFIX}${tab.command}`;
private getKey(command: string): string {
const start =
command.lastIndexOf('/') !== -1 ? command.lastIndexOf('/') + 1 : 0;
const end =
command.lastIndexOf('.') !== -1
? command.lastIndexOf('.')
: command.length;
const tmpStr = command.substring(0, start - 1);
let index = 0;
if (tmpStr.lastIndexOf('/') !== -1 && tmpStr.startsWith('http')) {
index = tmpStr.lastIndexOf('/');
} else if (tmpStr.lastIndexOf(':') !== -1 && tmpStr.startsWith('git@')) {
index = tmpStr.lastIndexOf(':');
}
if (index) {
return `${tmpStr.substring(index + 1)}_${command.substring(start, end)}`;
} else {
return command.substring(start, end);
}
}
private make_command(tab: Crontab) {
const crontab_job_string = `ID=${tab.id} ${tab.command}`;
return crontab_job_string;
}
private async set_crontab() {
private async set_crontab(needReloadSchedule: boolean = false) {
const tabs = await this.crontabs();
var crontab_string = '';
tabs.data.forEach((tab) => {
@@ -501,7 +546,9 @@ export default class CronService {
fs.writeFileSync(config.crontabFile, crontab_string);
execSync(`crontab ${config.crontabFile}`);
exec(`pm2 reload schedule`);
if (needReloadSchedule) {
exec(`pm2 reload schedule`);
}
await CrontabModel.update({ saved: true }, { where: {} });
}
@@ -31,7 +31,7 @@ export default class CronViewService {
}
public async update(payload: CrontabView): Promise<CrontabView> {
const newDoc = await this.updateDb(new CrontabView(payload));
const newDoc = await this.updateDb(payload);
return newDoc;
}
@@ -99,7 +99,7 @@ export default class DependenceService {
}
}
public installDependenceOneByOne(
private installDependenceOneByOne(
docs: Dependence[],
isInstall: boolean = true,
force: boolean = false,
@@ -49,7 +49,7 @@ export default class EnvService {
}
public async update(payload: Env): Promise<Env> {
const newDoc = await this.updateDb(new Env(payload));
const newDoc = await this.updateDb(payload);
await this.set_envs();
return newDoc;
}
@@ -92,17 +92,13 @@ export default class EnvService {
position: this.getPrecisionPosition(targetPosition),
});
await this.checkPosition(targetPosition, envs[toIndex].position!);
await this.checkPosition(targetPosition);
return newDoc;
}
private async checkPosition(position: number, edge: number = 0) {
private async checkPosition(position: number) {
const precisionPosition = parseFloat(position.toPrecision(16));
if (
precisionPosition < minPosition ||
precisionPosition > maxPosition ||
Math.abs(precisionPosition - edge) < minPosition
) {
if (precisionPosition < minPosition || precisionPosition > maxPosition) {
const envs = await this.envs();
let position = initPosition;
for (const env of envs) {
@@ -161,7 +161,7 @@ export default class NotificationService {
this.title,
)}/${encodeURIComponent(
this.content,
)}?icon=${barkIcon}&sound=${barkSound}&group=${barkGroup}`;
)}?icon=${barkIcon}?sound=${barkSound}&group=${barkGroup}`;
const res: any = await got
.get(url, {
...this.gotOption,
@@ -484,11 +484,11 @@ export default class NotificationService {
return {
formatUrl: url
?.replaceAll('$title', encodeURIComponent(this.title))
?.replaceAll('$content', encodeURIComponent(this.content)),
.replaceAll('$title', encodeURIComponent(this.title))
.replaceAll('$content', encodeURIComponent(this.content)),
formatBody: body
?.replaceAll('$title', this.title)
?.replaceAll('$content', this.content),
.replaceAll('$title', this.title)
.replaceAll('$content', this.content),
};
}
}
@@ -5,8 +5,8 @@ import { ChildProcessWithoutNullStreams, exec, spawn } from 'child_process';
import {
ToadScheduler,
LongIntervalJob,
AsyncTask,
SimpleIntervalSchedule,
Task,
} from 'toad-scheduler';
import dayjs from 'dayjs';
@@ -63,8 +63,8 @@ export default class ScheduleService {
});
cp.stderr.on('data', async (data) => {
this.logger.info(
'[执行任务失败] %s,时间:%s, 错误信息:%j',
this.logger.error(
'执行任务 %s 失败,时间:%s, 错误信息:%j',
command,
new Date().toLocaleString(),
data.toString(),
@@ -74,7 +74,7 @@ export default class ScheduleService {
cp.on('error', async (err) => {
this.logger.error(
'[创建任务失败] %s,时间:%s, 错误信息:%j',
'创建任务 %s 失败,时间:%s, 错误信息:%j',
command,
new Date().toLocaleString(),
err,
@@ -84,7 +84,7 @@ export default class ScheduleService {
cp.on('exit', async (code, signal) => {
this.logger.info(
`[任务退出] ${command} 进程id: ${cp.pid},退出码 ${code}`,
`任务 ${command} 进程id: ${cp.pid} 退出,退出码 ${code}`,
);
});
@@ -154,10 +154,12 @@ export default class ScheduleService {
name,
command,
);
const task = new Task(
const task = new AsyncTask(
name,
() => {
this.runTask(command, callbacks);
async () => {
return new Promise(async (resolve, reject) => {
await this.runTask(command, callbacks);
});
},
(err) => {
this.logger.error(
@@ -178,7 +180,7 @@ export default class ScheduleService {
this.intervalSchedule.addIntervalJob(job);
if (runImmediately) {
this.runTask(command, callbacks);
await this.runTask(command, callbacks);
}
}
@@ -6,7 +6,7 @@ import SockService from './sock';
import CronService from './cron';
import ScheduleService, { TaskCallbacks } from './schedule';
import config from '../config';
import { TASK_COMMAND } from '../config/const';
import { LOG_END_SYMBOL } from '../config/const';
import { getPid, killTask } from '../config/util';
@Service()
@@ -42,7 +42,7 @@ export default class ScriptService {
public async runScript(filePath: string) {
const relativePath = path.relative(config.scriptPath, filePath);
const command = `${TASK_COMMAND} -l ${relativePath} now`;
const command = `task -l ${relativePath} now`;
const pid = await this.scheduleService.runTask(
command,
this.taskCallbacks(filePath),
@@ -56,7 +56,7 @@ export default class ScriptService {
let str = '';
if (!pid) {
const relativePath = path.relative(config.scriptPath, filePath);
pid = await getPid(`${TASK_COMMAND} -l ${relativePath} now`);
pid = await getPid(`task -l ${relativePath} now`);
}
try {
await killTask(pid);
@@ -1,10 +1,8 @@
import { Service, Inject } from 'typedi';
import winston from 'winston';
import fs, { existsSync } from 'fs';
import fs from 'fs';
import os from 'os';
import path from 'path';
import { Subscription } from '../data/subscription';
import { formatUrl } from '../config/subscription';
@Service()
export default class SshKeyService {
@@ -34,10 +32,7 @@ export default class SshKeyService {
private removePrivateKeyFile(alias: string): void {
try {
const filePath = path.join(this.sshPath, alias);
if (existsSync(filePath)) {
fs.unlinkSync(`${this.sshPath}/${alias}`);
}
fs.unlinkSync(`${this.sshPath}/${alias}`);
} catch (error) {
this.logger.error('删除私钥文件失败', error);
}
@@ -52,14 +47,16 @@ export default class SshKeyService {
host = `ssh.github.com\n Port 443\n HostkeyAlgorithms +ssh-rsa\n PubkeyAcceptedAlgorithms +ssh-rsa`;
}
const proxyStr = proxy ? ` ProxyCommand nc -v -x ${proxy} %h %p\n` : '';
return `Host ${alias}\n Hostname ${host}\n IdentityFile ${this.sshPath}/${alias}\n StrictHostKeyChecking no\n${proxyStr}`;
return `\nHost ${alias}\n Hostname ${host}\n IdentityFile ${this.sshPath}/${alias}\n StrictHostKeyChecking no\n${proxyStr}`;
}
private generateSshConfig(configs: string[]) {
try {
fs.writeFileSync(this.sshConfigFilePath, configs.join('\n'), {
encoding: 'utf8',
});
for (const config of configs) {
fs.appendFileSync(this.sshConfigFilePath, config, {
encoding: 'utf8',
});
}
} catch (error) {
this.logger.error('写入ssh配置文件失败', error);
}
@@ -97,22 +94,4 @@ export default class SshKeyService {
const config = this.generateSingleSshConfig(alias, host, proxy);
this.removeSshConfig(config);
}
public setSshConfig(docs: Subscription[]) {
let result = [];
for (const doc of docs) {
if (doc.type === 'private-repo' && doc.pull_type === 'ssh-key') {
const { alias, proxy } = doc;
const { host } = formatUrl(doc);
this.removePrivateKeyFile(alias);
this.generatePrivateKeyFile(
alias,
(doc.pull_option as any).private_key,
);
const config = this.generateSingleSshConfig(alias, host, proxy);
result.push(config);
}
}
this.generateSshConfig(result);
}
}
@@ -13,6 +13,7 @@ import {
spawn,
} from 'child_process';
import fs from 'fs';
import cron_parser from 'cron-parser';
import {
getFileContentByName,
concurrentRun,
@@ -29,7 +30,6 @@ import SockService from './sock';
import SshKeyService from './sshKey';
import dayjs from 'dayjs';
import { LOG_END_SYMBOL } from '../config/const';
import { formatCommand, formatUrl } from '../config/subscription';
@Service()
export default class SubscriptionService {
@@ -68,20 +68,71 @@ export default class SubscriptionService {
['createdAt', 'DESC'],
],
});
return result;
return result as any;
} catch (error) {
throw error;
}
}
private formatCommand(doc: Subscription, url?: string) {
let command = 'ql ';
let _url = url || this.formatUrl(doc).url;
const {
type,
whitelist,
blacklist,
dependences,
branch,
extensions,
proxy,
} = doc;
if (type === 'file') {
command += `raw "${_url}"`;
} else {
command += `repo "${_url}" "${whitelist || ''}" "${blacklist || ''}" "${
dependences || ''
}" "${branch || ''}" "${extensions || ''}" "${proxy || ''}"`;
}
return command;
}
private formatUrl(doc: Subscription) {
let url = doc.url;
let host = '';
if (doc.type === 'private-repo') {
if (doc.pull_type === 'ssh-key') {
host = doc.url!.replace(/.*\@([^\:]+)\:.*/, '$1');
url = doc.url!.replace(host, doc.alias);
} else {
host = doc.url!.replace(/.*\:\/\/([^\/]+)\/.*/, '$1');
const { username, password } = doc.pull_option as any;
url = doc.url!.replace(host, `${username}:${password}@${host}`);
}
}
return { url, host };
}
public async handleTask(
doc: Subscription,
needCreate = true,
needAddKey = true,
runImmediately = false,
) {
const { url } = formatUrl(doc);
const { url, host } = this.formatUrl(doc);
if (doc.type === 'private-repo' && doc.pull_type === 'ssh-key') {
if (needAddKey) {
this.sshKeyService.addSSHKey(
(doc.pull_option as any).private_key,
doc.alias,
host,
doc.proxy,
);
} else {
this.sshKeyService.removeSSHKey(doc.alias, host, doc.proxy);
}
}
doc.command = formatCommand(doc, url as string);
doc.command = this.formatCommand(doc, url as string);
if (doc.schedule_type === 'crontab') {
this.scheduleService.cancelCronTask(doc as any);
@@ -104,11 +155,6 @@ export default class SubscriptionService {
}
}
public async setSshConfig() {
const docs = await SubscriptionModel.findAll();
this.sshKeyService.setSshConfig(docs);
}
private async promiseExec(command: string): Promise<string> {
return new Promise((resolve, reject) => {
exec(
@@ -227,7 +273,6 @@ export default class SubscriptionService {
const tab = new Subscription(payload);
const doc = await this.insert(tab);
await this.handleTask(doc);
await this.setSshConfig();
return doc;
}
@@ -236,10 +281,8 @@ export default class SubscriptionService {
}
public async update(payload: Subscription): Promise<Subscription> {
const tab = new Subscription(payload);
const newDoc = await this.updateDb(tab);
const newDoc = await this.updateDb(payload);
await this.handleTask(newDoc, !newDoc.is_disabled);
await this.setSshConfig();
return newDoc;
}
@@ -282,10 +325,9 @@ export default class SubscriptionService {
public async remove(ids: number[]) {
const docs = await SubscriptionModel.findAll({ where: { id: ids } });
for (const doc of docs) {
await this.handleTask(doc, false);
await this.handleTask(doc, false, false);
}
await SubscriptionModel.destroy({ where: { id: ids } });
await this.setSshConfig();
}
public async getDb(query: any): Promise<Subscription> {
@@ -336,7 +378,7 @@ export default class SubscriptionService {
return;
}
const command = formatCommand(subscription);
const command = this.formatCommand(subscription);
await this.scheduleService.runTask(
command,
@@ -345,21 +387,19 @@ export default class SubscriptionService {
}
public async disabled(ids: number[]) {
await SubscriptionModel.update({ is_disabled: 1 }, { where: { id: ids } });
const docs = await SubscriptionModel.findAll({ where: { id: ids } });
await this.setSshConfig();
for (const doc of docs) {
await this.handleTask(doc, false);
}
await SubscriptionModel.update({ is_disabled: 1 }, { where: { id: ids } });
}
public async enabled(ids: number[]) {
await SubscriptionModel.update({ is_disabled: 0 }, { where: { id: ids } });
const docs = await SubscriptionModel.findAll({ where: { id: ids } });
await this.setSshConfig();
for (const doc of docs) {
await this.handleTask(doc);
}
await SubscriptionModel.update({ is_disabled: 0 }, { where: { id: ids } });
}
public async log(id: number) {
@@ -8,7 +8,7 @@
"./node_modules/celebrate/lib/index.d.ts"
],
"paths": {
"@/*": ["./back/*"],
"@/*": ["./back/*"]
},
"allowSyntheticDefaultImports": true,
"experimentalDecorators": true,
View File
+6
View File
@@ -0,0 +1,6 @@
{
"watch": ["src"],
"ext": "js,ts,json",
"ignore": ["src/**/*.spec.ts"],
"exec": "ts-node --transpile-only ./src/env.ts"
}
+16
View File
@@ -0,0 +1,16 @@
{
"name": "@qinglong/env",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"start": "nodemon",
"build": "tsc"
},
"dependencies": {
"dotenv": "^16.0.0"
},
"keywords": [],
"author": "",
"license": "ISC"
}
+22
View File
@@ -0,0 +1,22 @@
import dotenv from 'dotenv';
import path from 'path';
if (!process.env.QL_DIR) {
// 声明QL_DIR环境变量
let qlHomePath = path.join(__dirname, '../../../');
// 生产环境
if (qlHomePath.endsWith('/static/')) {
qlHomePath = path.join(qlHomePath, '../');
}
process.env.QL_DIR = qlHomePath.replace(/\/$/g, '');
}
const rootPath = process.env.QL_DIR as string;
const envFound = dotenv.config({ path: path.join(rootPath, '.env') });
if (envFound.error) {
throw new Error("⚠️ Couldn't find .env file ⚠️");
}
const envs = process.env;
console.log(envs);
export default { ...envs };
+28
View File
@@ -0,0 +1,28 @@
{
"compilerOptions": {
"target": "es2017",
"lib": ["es2021", "esnext.asynciterable", "DOM"],
"typeRoots": [
"./node_modules/@types",
"./src/types",
"./node_modules/celebrate/lib/index.d.ts"
],
"paths": {
"@/*": ["./src/*"]
},
"allowSyntheticDefaultImports": true,
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"forceConsistentCasingInFileNames": true,
"moduleResolution": "node",
"module": "commonjs",
"pretty": true,
"sourceMap": true,
"outDir": "./lib",
"allowJs": true,
"noEmit": false,
"esModuleInterop": true
},
"include": ["./src/**/*"],
"exclude": ["node_modules", "tests"]
}
+6
View File
@@ -0,0 +1,6 @@
{
"watch": ["src"],
"ext": "js,ts,json",
"ignore": ["src/**/*.spec.ts"],
"exec": "ts-node --transpile-only ./src/public.ts"
}
+11
View File
@@ -0,0 +1,11 @@
{
"name": "@qinglong/public",
"private": true,
"scripts": {
"start": "nodemon",
"build": "tsc"
},
"dependencies": {
"@qinglong/env": "workspace:*"
}
}
+25
View File
@@ -0,0 +1,25 @@
import express from 'express';
import { exec } from 'child_process';
import env from '@qinglong/env';
const app = express();
app.get('/api/public/panel/log', (req, res) => {
exec(
'pm2 logs panel --lines 500 --nostream --timestamp',
(err, stdout, stderr) => {
if (err || stderr) {
return res.send({ code: 400, message: (err && err.message) || stderr });
}
return res.send({ code: 200, data: stdout });
},
);
});
console.log(env);
app
.listen(env.PUBLIC_PORT, async () => {
console.log('启动成功');
})
.on('error', (err) => {
process.exit(1);
});
+28
View File
@@ -0,0 +1,28 @@
{
"compilerOptions": {
"target": "es2017",
"lib": ["es2021", "esnext.asynciterable", "DOM"],
"typeRoots": [
"./node_modules/@types",
"./src/types",
"./node_modules/celebrate/lib/index.d.ts"
],
"paths": {
"@/*": ["./back/*"]
},
"allowSyntheticDefaultImports": true,
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"forceConsistentCasingInFileNames": true,
"moduleResolution": "node",
"module": "commonjs",
"pretty": true,
"sourceMap": true,
"outDir": "./static/build",
"allowJs": true,
"noEmit": false,
"esModuleInterop": true
},
"include": ["./back/**/*"],
"exclude": ["node_modules", "tests"]
}
+6
View File
@@ -0,0 +1,6 @@
{
"watch": ["src"],
"ext": "js,ts,json",
"ignore": ["src/**/*.spec.ts"],
"exec": "ts-node --transpile-only ./src/public.ts"
}
+138
View File
@@ -0,0 +1,138 @@
{
"name": "@qinglong/schedule",
"private": true,
"scripts": {
"start": "nodemon",
"build": "tsc"
},
"gitHooks": {
"pre-commit": "lint-staged"
},
"lint-staged": {
"*.{js,jsx,less,md,json}": [
"prettier --write"
],
"*.ts?(x)": [
"prettier --parser=typescript --write"
]
},
"pnpm": {
"peerDependencyRules": {
"ignoreMissing": [
"react",
"react-dom",
"antd",
"dva",
"postcss",
"webpack",
"eslint",
"stylelint",
"redux",
"@babel/core",
"monaco-editor",
"rc-field-form",
"@types/lodash.merge",
"rollup"
],
"allowedVersions": {
"react": "18",
"react-dom": "18",
"dva-core": "2"
}
}
},
"dependencies": {
"@otplib/preset-default": "^12.0.1",
"@sentry/node": "^7.12.1",
"@sentry/tracing": "^7.12.1",
"body-parser": "^1.19.2",
"celebrate": "^15.0.1",
"chokidar": "^3.5.3",
"cors": "^2.8.5",
"cron-parser": "^4.2.1",
"dayjs": "^1.11.2",
"dotenv": "^16.0.0",
"express": "^4.17.3",
"express-jwt": "^6.1.1",
"express-urlrewrite": "^1.4.0",
"form-data": "^4.0.0",
"got": "^11.8.2",
"hpagent": "^0.1.2",
"iconv-lite": "^0.6.3",
"js-yaml": "^4.1.0",
"jsonwebtoken": "^8.5.1",
"lodash": "^4.17.21",
"multer": "^1.4.4",
"nedb": "^1.8.0",
"node-schedule": "^2.1.0",
"nodemailer": "^6.7.2",
"pstree.remy": "^1.1.8",
"reflect-metadata": "^0.1.13",
"sequelize": "^6.25.5",
"serve-handler": "^6.1.3",
"sockjs": "^0.3.24",
"sqlite3": "npm:@louislam/sqlite3@^15.0.6",
"toad-scheduler": "^1.6.0",
"typedi": "^0.10.0",
"uuid": "^8.3.2",
"winston": "^3.6.0",
"yargs": "^17.3.1"
},
"devDependencies": {
"@ant-design/icons": "^4.7.0",
"@ant-design/pro-layout": "^6.33.1",
"@monaco-editor/react": "4.4.6",
"@react-hook/resize-observer": "^1.2.6",
"@sentry/react": "^7.12.1",
"@types/body-parser": "^1.19.2",
"@types/cors": "^2.8.12",
"@types/express": "^4.17.13",
"@types/express-jwt": "^6.0.4",
"@types/js-yaml": "^4.0.5",
"@types/jsonwebtoken": "^8.5.8",
"@types/lodash": "^4.14.185",
"@types/multer": "^1.4.7",
"@types/nedb": "^1.8.12",
"@types/node": "^17.0.21",
"@types/node-schedule": "^1.3.2",
"@types/nodemailer": "^6.4.4",
"@types/qrcode.react": "^1.0.2",
"@types/react": "^18.0.20",
"@types/react-dom": "^18.0.6",
"@types/serve-handler": "^6.1.1",
"@types/sockjs": "^0.3.33",
"@types/sockjs-client": "^1.5.1",
"@types/uuid": "^8.3.4",
"@umijs/max": "^4.0.21",
"@umijs/ssr-darkreader": "^4.9.45",
"ansi-to-react": "^6.1.6",
"antd": "^4.23.0",
"antd-img-crop": "^4.2.3",
"codemirror": "^5.65.2",
"compression-webpack-plugin": "9.2.0",
"concurrently": "^7.0.0",
"lint-staged": "^13.0.3",
"monaco-editor": "^0.34.1",
"nodemon": "^2.0.15",
"prettier": "^2.5.1",
"qiniu": "^7.4.0",
"qrcode.react": "^1.0.1",
"query-string": "^7.1.1",
"rc-tween-one": "^3.0.6",
"react": "18.2.0",
"react-codemirror2": "^7.2.1",
"react-diff-viewer": "^3.1.1",
"react-dnd": "^14.0.2",
"react-dnd-html5-backend": "^14.0.0",
"react-dom": "18.2.0",
"react-split-pane": "^0.1.92",
"sockjs-client": "^1.6.0",
"ts-node": "^10.6.0",
"tslib": "^2.4.0",
"typescript": "4.8.4",
"umi-request": "^1.4.0",
"vh-check": "^2.0.5",
"webpack": "^5.70.0",
"yorkie": "^2.0.0"
}
}
@@ -4,7 +4,6 @@ import { exec } from 'child_process';
import Logger from './loaders/logger';
import { CrontabModel, CrontabStatus } from './data/cron';
import config from './config';
import { QL_PREFIX, TASK_PREFIX } from './config/const';
const app = express();
@@ -24,11 +23,8 @@ const run = async () => {
) {
schedule.scheduleJob(task.schedule, function () {
let command = task.command as string;
if (
!command.startsWith(TASK_PREFIX) &&
!command.startsWith(QL_PREFIX)
) {
command = `${TASK_PREFIX}${command}`;
if (!command.includes('task ') && !command.includes('ql ')) {
command = `task ${command}`;
}
exec(`ID=${task.id} ${command}`);
});
+28
View File
@@ -0,0 +1,28 @@
{
"compilerOptions": {
"target": "es2017",
"lib": ["es2021", "esnext.asynciterable", "DOM"],
"typeRoots": [
"./node_modules/@types",
"./src/types",
"./node_modules/celebrate/lib/index.d.ts"
],
"paths": {
"@/*": ["./back/*"]
},
"allowSyntheticDefaultImports": true,
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"forceConsistentCasingInFileNames": true,
"moduleResolution": "node",
"module": "commonjs",
"pretty": true,
"sourceMap": true,
"outDir": "./static/build",
"allowJs": true,
"noEmit": false,
"esModuleInterop": true
},
"include": ["./back/**/*"],
"exclude": ["node_modules", "tests"]
}
+1 -2
View File
@@ -6,11 +6,10 @@ export default defineConfig({
antd: {},
outputPath: 'static/dist',
fastRefresh: true,
favicons: ['./images/favicon.svg'],
favicons: ['/images/favicon.svg'],
mfsu: {
strategy: 'eager',
},
publicPath: process.env.NODE_ENV === 'production' ? './' : '/',
proxy: {
'/api/public': {
target: 'http://127.0.0.1:5400/',
+138
View File
@@ -0,0 +1,138 @@
{
"name": "@qinglong/web",
"private": true,
"scripts": {
"start": "max dev",
"build": "max build"
},
"gitHooks": {
"pre-commit": "lint-staged"
},
"lint-staged": {
"*.{js,jsx,less,md,json}": [
"prettier --write"
],
"*.ts?(x)": [
"prettier --parser=typescript --write"
]
},
"pnpm": {
"peerDependencyRules": {
"ignoreMissing": [
"react",
"react-dom",
"antd",
"dva",
"postcss",
"webpack",
"eslint",
"stylelint",
"redux",
"@babel/core",
"monaco-editor",
"rc-field-form",
"@types/lodash.merge",
"rollup"
],
"allowedVersions": {
"react": "18",
"react-dom": "18",
"dva-core": "2"
}
}
},
"dependencies": {
"@otplib/preset-default": "^12.0.1",
"@sentry/node": "^7.12.1",
"@sentry/tracing": "^7.12.1",
"body-parser": "^1.19.2",
"celebrate": "^15.0.1",
"chokidar": "^3.5.3",
"cors": "^2.8.5",
"cron-parser": "^4.2.1",
"dayjs": "^1.11.2",
"dotenv": "^16.0.0",
"express": "^4.17.3",
"express-jwt": "^6.1.1",
"express-urlrewrite": "^1.4.0",
"form-data": "^4.0.0",
"got": "^11.8.2",
"hpagent": "^0.1.2",
"iconv-lite": "^0.6.3",
"js-yaml": "^4.1.0",
"jsonwebtoken": "^8.5.1",
"lodash": "^4.17.21",
"multer": "^1.4.4",
"nedb": "^1.8.0",
"node-schedule": "^2.1.0",
"nodemailer": "^6.7.2",
"pstree.remy": "^1.1.8",
"reflect-metadata": "^0.1.13",
"sequelize": "^6.25.5",
"serve-handler": "^6.1.3",
"sockjs": "^0.3.24",
"sqlite3": "npm:@louislam/sqlite3@^15.0.6",
"toad-scheduler": "^1.6.0",
"typedi": "^0.10.0",
"uuid": "^8.3.2",
"winston": "^3.6.0",
"yargs": "^17.3.1"
},
"devDependencies": {
"@ant-design/icons": "^4.7.0",
"@ant-design/pro-layout": "^6.33.1",
"@monaco-editor/react": "4.4.6",
"@react-hook/resize-observer": "^1.2.6",
"@sentry/react": "^7.12.1",
"@types/body-parser": "^1.19.2",
"@types/cors": "^2.8.12",
"@types/express": "^4.17.13",
"@types/express-jwt": "^6.0.4",
"@types/js-yaml": "^4.0.5",
"@types/jsonwebtoken": "^8.5.8",
"@types/lodash": "^4.14.185",
"@types/multer": "^1.4.7",
"@types/nedb": "^1.8.12",
"@types/node": "^17.0.21",
"@types/node-schedule": "^1.3.2",
"@types/nodemailer": "^6.4.4",
"@types/qrcode.react": "^1.0.2",
"@types/react": "^18.0.20",
"@types/react-dom": "^18.0.6",
"@types/serve-handler": "^6.1.1",
"@types/sockjs": "^0.3.33",
"@types/sockjs-client": "^1.5.1",
"@types/uuid": "^8.3.4",
"@umijs/max": "^4.0.21",
"@umijs/ssr-darkreader": "^4.9.45",
"ansi-to-react": "^6.1.6",
"antd": "^4.23.0",
"antd-img-crop": "^4.2.3",
"codemirror": "^5.65.2",
"compression-webpack-plugin": "9.2.0",
"concurrently": "^7.0.0",
"lint-staged": "^13.0.3",
"monaco-editor": "^0.34.1",
"nodemon": "^2.0.15",
"prettier": "^2.5.1",
"qiniu": "^7.4.0",
"qrcode.react": "^1.0.1",
"query-string": "^7.1.1",
"rc-tween-one": "^3.0.6",
"react": "18.2.0",
"react-codemirror2": "^7.2.1",
"react-diff-viewer": "^3.1.1",
"react-dnd": "^14.0.2",
"react-dnd-html5-backend": "^14.0.0",
"react-dom": "18.2.0",
"react-split-pane": "^0.1.92",
"sockjs-client": "^1.6.0",
"ts-node": "^10.6.0",
"tslib": "^2.4.0",
"typescript": "4.8.4",
"umi-request": "^1.4.0",
"vh-check": "^2.0.5",
"webpack": "^5.70.0",
"yorkie": "^2.0.0"
}
}

Before

Width:  |  Height:  |  Size: 6.8 KiB

After

Width:  |  Height:  |  Size: 6.8 KiB

@@ -0,0 +1,9 @@
// @ts-nocheck
// This file is generated by Umi automatically
// DO NOT CHANGE IT MANUALLY!
import React from 'react';
import { Outlet, useOutletContext } from 'umi';
export default function EmptyRoute() {
const context = useOutletContext();
return <Outlet context={context} />;
}
@@ -0,0 +1,21 @@
// @ts-nocheck
// This file is generated by Umi automatically
// DO NOT CHANGE IT MANUALLY!
interface IDefaultRuntimeConfig {
onRouteChange?: (props: {
routes: any;
clientRoutes: any;
location: any;
action: any;
}) => void;
patchRoutes?: (props: { routes: any }) => void;
patchClientRoutes?: (props: { routes: any }) => void;
render?: (oldRender: () => void) => void;
rootContainer?: (lastRootContainer: JSX.Element, args?: any) => void;
[key: string]: any;
}
export type RuntimeConfig = IDefaultRuntimeConfig;
export function defineApp(config: RuntimeConfig): RuntimeConfig {
return config;
}
@@ -0,0 +1,66 @@
// @ts-nocheck
// This file is generated by Umi automatically
// DO NOT CHANGE IT MANUALLY!
import {
createHashHistory,
createMemoryHistory,
createBrowserHistory,
History,
} from '/Users/whyour/resp/qinglong/node_modules/.pnpm/@umijs+renderer-react@4.0.21_ef5jwxihqo6n7gxfmzogljlgcm/node_modules/@umijs/renderer-react';
let history: History;
let basename: string = '/';
export function createHistory(opts: any) {
let h;
if (opts.type === 'hash') {
h = createHashHistory();
} else if (opts.type === 'memory') {
h = createMemoryHistory(opts);
} else {
h = createBrowserHistory();
}
if (opts.basename) {
basename = opts.basename;
}
history = {
...h,
push(to, state) {
h.push(patchTo(to), state);
},
replace(to, state) {
h.replace(patchTo(to), state);
},
get location() {
return h.location;
},
get action() {
return h.action;
},
};
return h;
}
// Patch `to` to support basename
// Refs:
// https://github.com/remix-run/history/blob/3e9dab4/packages/history/index.ts#L484
// https://github.com/remix-run/history/blob/dev/docs/api-reference.md#to
function patchTo(to: any) {
if (typeof to === 'string') {
return `${stripLastSlash(basename)}${to}`;
} else if (typeof to === 'object' && to.pathname) {
return {
...to,
pathname: `${stripLastSlash(basename)}${to.pathname}`,
};
} else {
throw new Error(`Unexpected to: ${to}`);
}
}
function stripLastSlash(path) {
return path.slice(-1) === '/' ? path.slice(0, -1) : path;
}
export { history };
@@ -0,0 +1,44 @@
// @ts-nocheck
// This file is generated by Umi automatically
// DO NOT CHANGE IT MANUALLY!
import { PluginManager } from 'umi';
function __defaultExport(obj) {
if (obj.default) {
return typeof obj.default === 'function' ? obj.default() : obj.default;
}
return obj;
}
export function getPlugins() {
return [];
}
export function getValidKeys() {
return [
'patchRoutes',
'patchClientRoutes',
'modifyContextOpts',
'rootContainer',
'innerProvider',
'i18nProvider',
'accessProvider',
'dataflowProvider',
'outerProvider',
'render',
'onRouteChange',
'qiankun',
];
}
let pluginManager = null;
export function createPluginManager() {
pluginManager = PluginManager.create({
plugins: getPlugins(),
validKeys: getValidKeys(),
});
return pluginManager;
}
export function getPluginManager() {
return pluginManager;
}
+217
View File
@@ -0,0 +1,217 @@
// This file is generated by Umi automatically
// DO NOT CHANGE IT MANUALLY!
// Created by Umi Plugin
export interface IConfigFromPlugins {
clientLoader?: {};
title?: string;
styles?: any[];
scripts?: any[];
routes?: {}[];
reactRouter5Compat?: {};
presets?: string[];
plugins?: string[];
npmClient?: 'pnpm' | 'tnpm' | 'cnpm' | 'yarn' | 'npm';
mountElementId?: string;
metas?: any[];
links?: any[];
historyWithQuery?: {};
history?: {
type?: 'browser' | 'hash' | 'memory';
};
headScripts?: any[];
conventionRoutes?: {
base?: string;
exclude?: any[];
};
base?: string;
writeToDisk?: boolean;
theme?: {};
targets?: {};
svgr?: {};
svgo?: {} | boolean;
styleLoader?: {};
srcTranspiler?: 'babel' | 'esbuild' | 'swc' | 'none';
sassLoader?: {};
runtimePublicPath?: {};
purgeCSS?: {};
publicPath?: string;
proxy?: {} | any[];
postcssLoader?: {};
outputPath?: string;
mfsu?:
| {
cacheDirectory?: string;
chainWebpack?: () => any;
esbuild?: boolean;
exclude?: any[];
include?: string[];
mfName?: string;
remoteAliases?: string[];
remoteName?: string;
runtimePublicPath?: boolean;
shared?: {};
strategy?: 'eager' | 'normal';
}
| boolean;
mdx?: {
loader?: string;
loaderOptions?: {};
};
manifest?: {};
lessLoader?: {};
jsMinifierOptions?: {};
jsMinifier?: 'esbuild' | 'swc' | 'terser' | 'uglifyJs' | 'none';
inlineLimit?: number;
ignoreMomentLocale?: boolean;
https?: {};
hash?: boolean;
forkTSChecker?: {};
fastRefresh?: boolean;
extraPostCSSPlugins?: any[];
extraBabelPresets?: any[];
extraBabelPlugins?: any[];
extraBabelIncludes?: any[];
externals?: {} | string | (() => any);
esm?: {};
devtool?: string | boolean;
depTranspiler?: 'babel' | 'esbuild' | 'swc' | 'none';
define?: {};
deadCode?: {};
cssMinifierOptions?: {};
cssMinifier?: 'cssnano' | 'esbuild' | 'parcelCSS' | 'none';
cssLoaderModules?: {};
cssLoader?: {};
copy?: any[];
chainWebpack?: () => any;
cacheDirectoryPath?: string;
babelLoaderCustomize?: string;
autoprefixer?: {};
autoCSSModules?: boolean;
alias?: {};
crossorigin?:
| boolean
| {
include?: {}[];
};
esmi?: {
cdnOrigin?: string;
shimUrl?: string;
};
favicons?: string[];
mock?: {
exclude?: string[];
include?: string[];
};
mpa?: {
template?: string;
getConfigFromEntryFile?: boolean;
};
polyfill?: {
imports?: string[];
};
routePrefetch?: {};
ssr?: {
serverBuildPath?: string;
platform?: string;
};
terminal?: {};
tmpFiles?: boolean;
lowImport?: {
libs?: any[];
css?: string;
};
vite?: {};
apiRoute?: {
platform?: string;
};
monorepoRedirect?:
| boolean
| {
srcDir?: string[];
exclude?: {}[];
};
clickToComponent?: {
editor?: string;
};
legacy?: {
buildOnly?: boolean;
nodeModulesTransform?: boolean;
};
verifyCommit?: {
scope?: string[];
allowEmoji?: boolean;
};
run?: {
globals?: string[];
};
access?: {} | boolean;
analytics?: {} | boolean;
antd?:
| {
configProvider?: {};
dark?: boolean;
compact?: boolean;
import?: boolean;
style?: 'less' | 'css';
}
| boolean;
dva?:
| {
extraModels?: string[];
immer?: {};
}
| boolean;
initialState?:
| {
loading?: string;
}
| boolean;
layout?: {} | boolean;
locale?:
| {
default?: string;
useLocalStorage?: boolean;
baseNavigator?: boolean;
title?: boolean;
antd?: boolean;
baseSeparator?: string;
}
| boolean;
mf?: {
name?: string;
remotes?: {
aliasName?: string;
name?: string;
entry?: string;
entries?: {};
keyResolver?: string;
}[];
shared?: {};
library?: {};
};
model?:
| {
extraModels?: string[];
}
| boolean;
moment2dayjs?:
| {
preset?: string;
plugins?: any[];
}
| boolean;
qiankun?:
| {
slave?: {};
master?: {};
externalQiankun?: boolean;
}
| boolean;
request?:
| {
dataField?: '';
}
| boolean;
tailwindcss?: {} | boolean;
}
@@ -0,0 +1,392 @@
// @ts-nocheck
// This file is generated by Umi automatically
// DO NOT CHANGE IT MANUALLY!
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.symbol.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.symbol.description.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.symbol.async-iterator.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.symbol.has-instance.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.symbol.is-concat-spreadable.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.symbol.iterator.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.symbol.match.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.symbol.match-all.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.symbol.replace.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.symbol.search.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.symbol.species.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.symbol.split.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.symbol.to-primitive.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.symbol.to-string-tag.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.symbol.unscopables.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.error.cause.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.error.to-string.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.aggregate-error.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.aggregate-error.cause.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.array.at.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.array.concat.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.array.copy-within.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.array.every.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.array.fill.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.array.filter.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.array.find.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.array.find-index.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.array.flat.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.array.flat-map.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.array.for-each.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.array.from.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.array.includes.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.array.index-of.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.array.is-array.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.array.iterator.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.array.join.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.array.last-index-of.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.array.map.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.array.of.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.array.reduce.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.array.reduce-right.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.array.reverse.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.array.slice.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.array.some.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.array.sort.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.array.species.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.array.splice.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.array.unscopables.flat.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.array.unscopables.flat-map.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.array-buffer.constructor.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.array-buffer.is-view.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.array-buffer.slice.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.data-view.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.date.get-year.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.date.now.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.date.set-year.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.date.to-gmt-string.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.date.to-iso-string.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.date.to-json.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.date.to-primitive.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.date.to-string.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.escape.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.function.bind.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.function.has-instance.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.function.name.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.global-this.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.json.stringify.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.json.to-string-tag.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.map.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.math.acosh.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.math.asinh.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.math.atanh.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.math.cbrt.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.math.clz32.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.math.cosh.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.math.expm1.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.math.fround.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.math.hypot.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.math.imul.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.math.log10.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.math.log1p.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.math.log2.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.math.sign.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.math.sinh.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.math.tanh.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.math.to-string-tag.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.math.trunc.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.number.constructor.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.number.epsilon.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.number.is-finite.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.number.is-integer.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.number.is-nan.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.number.is-safe-integer.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.number.max-safe-integer.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.number.min-safe-integer.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.number.parse-float.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.number.parse-int.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.number.to-exponential.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.number.to-fixed.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.number.to-precision.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.object.assign.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.object.create.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.object.define-getter.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.object.define-properties.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.object.define-property.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.object.define-setter.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.object.entries.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.object.freeze.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.object.from-entries.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.object.get-own-property-descriptor.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.object.get-own-property-descriptors.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.object.get-own-property-names.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.object.get-prototype-of.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.object.has-own.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.object.is.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.object.is-extensible.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.object.is-frozen.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.object.is-sealed.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.object.keys.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.object.lookup-getter.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.object.lookup-setter.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.object.prevent-extensions.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.object.seal.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.object.set-prototype-of.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.object.to-string.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.object.values.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.parse-float.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.parse-int.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.promise.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.promise.all-settled.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.promise.any.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.promise.finally.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.reflect.apply.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.reflect.construct.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.reflect.define-property.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.reflect.delete-property.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.reflect.get.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.reflect.get-own-property-descriptor.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.reflect.get-prototype-of.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.reflect.has.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.reflect.is-extensible.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.reflect.own-keys.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.reflect.prevent-extensions.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.reflect.set.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.reflect.set-prototype-of.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.reflect.to-string-tag.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.regexp.constructor.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.regexp.dot-all.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.regexp.exec.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.regexp.flags.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.regexp.sticky.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.regexp.test.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.regexp.to-string.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.set.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.string.at-alternative.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.string.code-point-at.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.string.ends-with.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.string.from-code-point.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.string.includes.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.string.iterator.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.string.match.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.string.match-all.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.string.pad-end.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.string.pad-start.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.string.raw.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.string.repeat.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.string.replace.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.string.replace-all.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.string.search.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.string.split.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.string.starts-with.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.string.substr.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.string.trim.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.string.trim-end.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.string.trim-start.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.string.anchor.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.string.big.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.string.blink.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.string.bold.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.string.fixed.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.string.fontcolor.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.string.fontsize.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.string.italics.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.string.link.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.string.small.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.string.strike.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.string.sub.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.string.sup.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.typed-array.float32-array.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.typed-array.float64-array.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.typed-array.int8-array.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.typed-array.int16-array.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.typed-array.int32-array.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.typed-array.uint8-array.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.typed-array.uint8-clamped-array.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.typed-array.uint16-array.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.typed-array.uint32-array.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.typed-array.at.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.typed-array.copy-within.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.typed-array.every.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.typed-array.fill.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.typed-array.filter.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.typed-array.find.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.typed-array.find-index.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.typed-array.for-each.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.typed-array.from.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.typed-array.includes.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.typed-array.index-of.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.typed-array.iterator.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.typed-array.join.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.typed-array.last-index-of.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.typed-array.map.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.typed-array.of.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.typed-array.reduce.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.typed-array.reduce-right.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.typed-array.reverse.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.typed-array.set.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.typed-array.slice.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.typed-array.some.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.typed-array.sort.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.typed-array.subarray.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.typed-array.to-locale-string.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.typed-array.to-string.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.unescape.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.weak-map.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/es.weak-set.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.array.from-async.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.array.filter-out.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.array.filter-reject.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.array.find-last.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.array.find-last-index.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.array.group-by.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.array.group-by-to-map.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.array.is-template-object.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.array.last-index.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.array.last-item.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.array.to-reversed.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.array.to-sorted.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.array.to-spliced.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.array.unique-by.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.array.with.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.async-iterator.constructor.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.async-iterator.as-indexed-pairs.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.async-iterator.drop.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.async-iterator.every.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.async-iterator.filter.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.async-iterator.find.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.async-iterator.flat-map.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.async-iterator.for-each.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.async-iterator.from.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.async-iterator.map.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.async-iterator.reduce.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.async-iterator.some.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.async-iterator.take.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.async-iterator.to-array.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.bigint.range.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.composite-key.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.composite-symbol.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.function.is-callable.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.function.is-constructor.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.function.un-this.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.iterator.constructor.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.iterator.as-indexed-pairs.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.iterator.drop.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.iterator.every.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.iterator.filter.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.iterator.find.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.iterator.flat-map.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.iterator.for-each.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.iterator.from.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.iterator.map.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.iterator.reduce.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.iterator.some.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.iterator.take.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.iterator.to-array.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.iterator.to-async.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.map.delete-all.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.map.emplace.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.map.every.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.map.filter.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.map.find.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.map.find-key.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.map.from.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.map.group-by.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.map.includes.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.map.key-by.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.map.key-of.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.map.map-keys.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.map.map-values.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.map.merge.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.map.of.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.map.reduce.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.map.some.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.map.update.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.map.update-or-insert.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.map.upsert.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.math.clamp.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.math.deg-per-rad.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.math.degrees.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.math.fscale.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.math.iaddh.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.math.imulh.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.math.isubh.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.math.rad-per-deg.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.math.radians.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.math.scale.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.math.seeded-prng.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.math.signbit.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.math.umulh.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.number.from-string.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.number.range.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.object.iterate-entries.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.object.iterate-keys.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.object.iterate-values.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.observable.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.promise.try.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.reflect.define-metadata.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.reflect.delete-metadata.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.reflect.get-metadata.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.reflect.get-metadata-keys.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.reflect.get-own-metadata.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.reflect.get-own-metadata-keys.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.reflect.has-metadata.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.reflect.has-own-metadata.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.reflect.metadata.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.set.add-all.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.set.delete-all.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.set.difference.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.set.every.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.set.filter.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.set.find.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.set.from.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.set.intersection.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.set.is-disjoint-from.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.set.is-subset-of.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.set.is-superset-of.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.set.join.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.set.map.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.set.of.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.set.reduce.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.set.some.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.set.symmetric-difference.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.set.union.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.string.at.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.string.cooked.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.string.code-points.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.symbol.async-dispose.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.symbol.dispose.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.symbol.matcher.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.symbol.metadata.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.symbol.observable.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.symbol.pattern-match.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.symbol.replace-all.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.typed-array.from-async.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.typed-array.filter-out.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.typed-array.filter-reject.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.typed-array.find-last.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.typed-array.find-last-index.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.typed-array.group-by.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.typed-array.to-reversed.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.typed-array.to-sorted.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.typed-array.to-spliced.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.typed-array.unique-by.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.typed-array.with.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.weak-map.delete-all.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.weak-map.from.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.weak-map.of.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.weak-map.emplace.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.weak-map.upsert.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.weak-set.add-all.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.weak-set.delete-all.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.weak-set.from.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/esnext.weak-set.of.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/web.atob.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/web.btoa.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/web.dom-collections.for-each.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/web.dom-collections.iterator.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/web.dom-exception.constructor.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/web.dom-exception.stack.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/web.dom-exception.to-string-tag.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/web.immediate.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/web.queue-microtask.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/web.structured-clone.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/web.timers.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/web.url.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/web.url.to-json.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/core-js@3.22.4/node_modules/core-js/modules/web.url-search-params.js';
import '/Users/whyour/resp/qinglong/node_modules/.pnpm/regenerator-runtime@0.13.9/node_modules/regenerator-runtime/runtime.js';
export {};
@@ -0,0 +1,421 @@
// @ts-nocheck
// This file is generated by Umi automatically
// DO NOT CHANGE IT MANUALLY!
import React from 'react';
export async function getRoutes() {
return {
routes: {
'crontab/viewCreateModal': {
path: 'crontab/viewCreateModal',
id: 'crontab/viewCreateModal',
parentId: '@@/global-layout',
file: 'crontab/viewCreateModal.tsx',
},
'crontab/viewManageModal': {
path: 'crontab/viewManageModal',
id: 'crontab/viewManageModal',
parentId: '@@/global-layout',
file: 'crontab/viewManageModal.tsx',
},
'subscription/logModal': {
path: 'subscription/logModal',
id: 'subscription/logModal',
parentId: '@@/global-layout',
file: 'subscription/logModal.tsx',
},
'initialization/index': {
path: 'initialization',
id: 'initialization/index',
parentId: '@@/global-layout',
file: 'initialization/index.tsx',
},
'script/editNameModal': {
path: 'script/editNameModal',
id: 'script/editNameModal',
parentId: '@@/global-layout',
file: 'script/editNameModal.tsx',
},
'setting/notification': {
path: 'setting/notification',
id: 'setting/notification',
parentId: '@@/global-layout',
file: 'setting/notification.tsx',
},
'dependence/logModal': {
path: 'dependence/logModal',
id: 'dependence/logModal',
parentId: '@@/global-layout',
file: 'dependence/logModal.tsx',
},
'setting/checkUpdate': {
path: 'setting/checkUpdate',
id: 'setting/checkUpdate',
parentId: '@@/global-layout',
file: 'setting/checkUpdate.tsx',
},
'subscription/index': {
path: 'subscription',
id: 'subscription/index',
parentId: '@@/global-layout',
file: 'subscription/index.tsx',
},
'subscription/modal': {
path: 'subscription/modal',
id: 'subscription/modal',
parentId: '@@/global-layout',
file: 'subscription/modal.tsx',
},
'env/editNameModal': {
path: 'env/editNameModal',
id: 'env/editNameModal',
parentId: '@@/global-layout',
file: 'env/editNameModal.tsx',
},
'crontab/logModal': {
path: 'crontab/logModal',
id: 'crontab/logModal',
parentId: '@@/global-layout',
file: 'crontab/logModal.tsx',
},
'dependence/index': {
path: 'dependence',
id: 'dependence/index',
parentId: '@@/global-layout',
file: 'dependence/index.tsx',
},
'dependence/modal': {
path: 'dependence/modal',
id: 'dependence/modal',
parentId: '@@/global-layout',
file: 'dependence/modal.tsx',
},
'script/editModal': {
path: 'script/editModal',
id: 'script/editModal',
parentId: '@@/global-layout',
file: 'script/editModal.tsx',
},
'script/saveModal': {
path: 'script/saveModal',
id: 'script/saveModal',
parentId: '@@/global-layout',
file: 'script/saveModal.tsx',
},
'setting/appModal': {
path: 'setting/appModal',
id: 'setting/appModal',
parentId: '@@/global-layout',
file: 'setting/appModal.tsx',
},
'setting/loginLog': {
path: 'setting/loginLog',
id: 'setting/loginLog',
parentId: '@@/global-layout',
file: 'setting/loginLog.tsx',
},
'setting/security': {
path: 'setting/security',
id: 'setting/security',
parentId: '@@/global-layout',
file: 'setting/security.tsx',
},
'crontab/detail': {
path: 'crontab/detail',
id: 'crontab/detail',
parentId: '@@/global-layout',
file: 'crontab/detail.tsx',
},
'script/setting': {
path: 'script/setting',
id: 'script/setting',
parentId: '@@/global-layout',
file: 'script/setting.tsx',
},
'crontab/index': {
path: 'crontab',
id: 'crontab/index',
parentId: '@@/global-layout',
file: 'crontab/index.tsx',
},
'crontab/modal': {
path: 'crontab/modal',
id: 'crontab/modal',
parentId: '@@/global-layout',
file: 'crontab/modal.tsx',
},
'setting/about': {
path: 'setting/about',
id: 'setting/about',
parentId: '@@/global-layout',
file: 'setting/about.tsx',
},
'setting/index': {
path: 'setting',
id: 'setting/index',
parentId: '@@/global-layout',
file: 'setting/index.tsx',
},
'config/index': {
path: 'config',
id: 'config/index',
parentId: '@@/global-layout',
file: 'config/index.tsx',
},
'script/index': {
path: 'script',
id: 'script/index',
parentId: '@@/global-layout',
file: 'script/index.tsx',
},
'error/index': {
path: 'error',
id: 'error/index',
parentId: '@@/global-layout',
file: 'error/index.tsx',
},
'login/index': {
path: 'login',
id: 'login/index',
parentId: '@@/global-layout',
file: 'login/index.tsx',
},
'diff/index': {
path: 'diff',
id: 'diff/index',
parentId: '@@/global-layout',
file: 'diff/index.tsx',
},
'env/index': {
path: 'env',
id: 'env/index',
parentId: '@@/global-layout',
file: 'env/index.tsx',
},
'env/modal': {
path: 'env/modal',
id: 'env/modal',
parentId: '@@/global-layout',
file: 'env/modal.tsx',
},
'log/index': {
path: 'log',
id: 'log/index',
parentId: '@@/global-layout',
file: 'log/index.tsx',
},
'@@/global-layout': {
id: '@@/global-layout',
path: '/',
file: '@/layouts/index.tsx',
isLayout: true,
},
},
routeComponents: {
'crontab/viewCreateModal': React.lazy(
() =>
import(
/* webpackChunkName: "src__pages__crontab__viewCreateModal" */ '../../../src/pages/crontab/viewCreateModal.tsx'
),
),
'crontab/viewManageModal': React.lazy(
() =>
import(
/* webpackChunkName: "src__pages__crontab__viewManageModal" */ '../../../src/pages/crontab/viewManageModal.tsx'
),
),
'subscription/logModal': React.lazy(
() =>
import(
/* webpackChunkName: "src__pages__subscription__logModal" */ '../../../src/pages/subscription/logModal.tsx'
),
),
'initialization/index': React.lazy(
() =>
import(
/* webpackChunkName: "src__pages__initialization__index" */ '../../../src/pages/initialization/index.tsx'
),
),
'script/editNameModal': React.lazy(
() =>
import(
/* webpackChunkName: "src__pages__script__editNameModal" */ '../../../src/pages/script/editNameModal.tsx'
),
),
'setting/notification': React.lazy(
() =>
import(
/* webpackChunkName: "src__pages__setting__notification" */ '../../../src/pages/setting/notification.tsx'
),
),
'dependence/logModal': React.lazy(
() =>
import(
/* webpackChunkName: "src__pages__dependence__logModal" */ '../../../src/pages/dependence/logModal.tsx'
),
),
'setting/checkUpdate': React.lazy(
() =>
import(
/* webpackChunkName: "src__pages__setting__checkUpdate" */ '../../../src/pages/setting/checkUpdate.tsx'
),
),
'subscription/index': React.lazy(
() =>
import(
/* webpackChunkName: "src__pages__subscription__index" */ '../../../src/pages/subscription/index.tsx'
),
),
'subscription/modal': React.lazy(
() =>
import(
/* webpackChunkName: "src__pages__subscription__modal" */ '../../../src/pages/subscription/modal.tsx'
),
),
'env/editNameModal': React.lazy(
() =>
import(
/* webpackChunkName: "src__pages__env__editNameModal" */ '../../../src/pages/env/editNameModal.tsx'
),
),
'crontab/logModal': React.lazy(
() =>
import(
/* webpackChunkName: "src__pages__crontab__logModal" */ '../../../src/pages/crontab/logModal.tsx'
),
),
'dependence/index': React.lazy(
() =>
import(
/* webpackChunkName: "src__pages__dependence__index" */ '../../../src/pages/dependence/index.tsx'
),
),
'dependence/modal': React.lazy(
() =>
import(
/* webpackChunkName: "src__pages__dependence__modal" */ '../../../src/pages/dependence/modal.tsx'
),
),
'script/editModal': React.lazy(
() =>
import(
/* webpackChunkName: "src__pages__script__editModal" */ '../../../src/pages/script/editModal.tsx'
),
),
'script/saveModal': React.lazy(
() =>
import(
/* webpackChunkName: "src__pages__script__saveModal" */ '../../../src/pages/script/saveModal.tsx'
),
),
'setting/appModal': React.lazy(
() =>
import(
/* webpackChunkName: "src__pages__setting__appModal" */ '../../../src/pages/setting/appModal.tsx'
),
),
'setting/loginLog': React.lazy(
() =>
import(
/* webpackChunkName: "src__pages__setting__loginLog" */ '../../../src/pages/setting/loginLog.tsx'
),
),
'setting/security': React.lazy(
() =>
import(
/* webpackChunkName: "src__pages__setting__security" */ '../../../src/pages/setting/security.tsx'
),
),
'crontab/detail': React.lazy(
() =>
import(
/* webpackChunkName: "src__pages__crontab__detail" */ '../../../src/pages/crontab/detail.tsx'
),
),
'script/setting': React.lazy(
() =>
import(
/* webpackChunkName: "src__pages__script__setting" */ '../../../src/pages/script/setting.tsx'
),
),
'crontab/index': React.lazy(
() =>
import(
/* webpackChunkName: "src__pages__crontab__index" */ '../../../src/pages/crontab/index.tsx'
),
),
'crontab/modal': React.lazy(
() =>
import(
/* webpackChunkName: "src__pages__crontab__modal" */ '../../../src/pages/crontab/modal.tsx'
),
),
'setting/about': React.lazy(
() =>
import(
/* webpackChunkName: "src__pages__setting__about" */ '../../../src/pages/setting/about.tsx'
),
),
'setting/index': React.lazy(
() =>
import(
/* webpackChunkName: "src__pages__setting__index" */ '../../../src/pages/setting/index.tsx'
),
),
'config/index': React.lazy(
() =>
import(
/* webpackChunkName: "src__pages__config__index" */ '../../../src/pages/config/index.tsx'
),
),
'script/index': React.lazy(
() =>
import(
/* webpackChunkName: "src__pages__script__index" */ '../../../src/pages/script/index.tsx'
),
),
'error/index': React.lazy(
() =>
import(
/* webpackChunkName: "src__pages__error__index" */ '../../../src/pages/error/index.tsx'
),
),
'login/index': React.lazy(
() =>
import(
/* webpackChunkName: "src__pages__login__index" */ '../../../src/pages/login/index.tsx'
),
),
'diff/index': React.lazy(
() =>
import(
/* webpackChunkName: "src__pages__diff__index" */ '../../../src/pages/diff/index.tsx'
),
),
'env/index': React.lazy(
() =>
import(
/* webpackChunkName: "src__pages__env__index" */ '../../../src/pages/env/index.tsx'
),
),
'env/modal': React.lazy(
() =>
import(
/* webpackChunkName: "src__pages__env__modal" */ '../../../src/pages/env/modal.tsx'
),
),
'log/index': React.lazy(
() =>
import(
/* webpackChunkName: "src__pages__log__index" */ '../../../src/pages/log/index.tsx'
),
),
'@@/global-layout': React.lazy(
() =>
import(
/* webpackChunkName: "layouts__index" */ '@/layouts/index.tsx'
),
),
},
};
}
@@ -0,0 +1,63 @@
// @ts-nocheck
// This file is generated by Umi automatically
// DO NOT CHANGE IT MANUALLY!
const console = globalThis.console;
let count = 0;
let groupLevel = 0;
function send(type: string, message?: string) {
if (process.env.NODE_ENV === 'production') {
return;
} else {
const encodedMessage = message ? `&m=${encodeURI(message)}` : '';
fetch(
`/__umi/api/terminal?type=${type}&t=${Date.now()}&c=${count++}&g=${groupLevel}${encodedMessage}`,
{ mode: 'no-cors' },
);
}
}
function prettyPrint(obj: any) {
return JSON.stringify(obj, null, 2);
}
function stringifyObjs(objs: any[]) {
const obj = objs.length > 1 ? objs.map(stringify).join(' ') : objs[0];
return typeof obj === 'object' ? `${prettyPrint(obj)}` : obj.toString();
}
function stringify(obj: any) {
return typeof obj === 'object' ? `${JSON.stringify(obj)}` : obj.toString();
}
const terminal = {
log(...objs: any[]) {
send('log', stringifyObjs(objs));
},
info(...objs: any[]) {
send('info', stringifyObjs(objs));
},
warn(...objs: any[]) {
send('warn', stringifyObjs(objs));
},
error(...objs: any[]) {
send('error', stringifyObjs(objs));
},
group() {
groupLevel++;
},
groupCollapsed() {
groupLevel++;
},
groupEnd() {
groupLevel && --groupLevel;
},
clear() {
send('clear');
},
trace(...args: any[]) {
console.trace(...args);
},
profile(...args: any[]) {
console.profile(...args);
},
profileEnd(...args: any[]) {
console.profileEnd(...args);
},
};
export { terminal };
@@ -0,0 +1,46 @@
// @ts-nocheck
// This file is generated by Umi automatically
// DO NOT CHANGE IT MANUALLY!
// @umijs/renderer-*
export {
createBrowserHistory,
createHashHistory,
createMemoryHistory,
createSearchParams,
generatePath,
matchPath,
matchRoutes,
Navigate,
NavLink,
Outlet,
resolvePath,
useLocation,
useMatch,
useNavigate,
useOutlet,
useOutletContext,
useParams,
useResolvedPath,
useRoutes,
useSearchParams,
useAppData,
useClientLoaderData,
useServerLoaderData,
renderClient,
__getRoot,
Link,
useRouteData,
__useFetcher,
withRouter,
} from '/Users/whyour/resp/qinglong/node_modules/.pnpm/@umijs+renderer-react@4.0.21_ef5jwxihqo6n7gxfmzogljlgcm/node_modules/@umijs/renderer-react';
// umi/client/client/plugin
export {
ApplyPluginsType,
PluginManager,
} from '/Users/whyour/resp/qinglong/node_modules/.pnpm/umi@4.0.21_cuhbl366s6fdg3i7ra7vd4alre/node_modules/umi/client/client/plugin.js';
export { history, createHistory } from './core/history';
export { terminal } from './core/terminal';
// plugins
// plugins types.d.ts
export { defineApp } from './core/defineApp';
export type { RuntimeConfig } from './core/defineApp';
@@ -0,0 +1,29 @@
{
"compilerOptions": {
"target": "esnext",
"module": "esnext",
"moduleResolution": "node",
"importHelpers": true,
"jsx": "react-jsx",
"esModuleInterop": true,
"sourceMap": true,
"baseUrl": "../../",
"strict": true,
"resolveJsonModule": true,
"allowSyntheticDefaultImports": true,
"paths": {
"@/*": ["src/*"],
"@@/*": ["src/.umi/*"],
"@umijs/max": [
"/Users/whyour/resp/qinglong/node_modules/.pnpm/umi@4.0.21_cuhbl366s6fdg3i7ra7vd4alre/node_modules/umi"
],
"@umijs/max/typings": ["src/.umi/typings"]
}
},
"include": [
"../../.umirc.ts",
"../../**/*.d.ts",
"../../**/*.ts",
"../../**/*.tsx"
]
}
+138
View File
@@ -0,0 +1,138 @@
// This file is generated by Umi automatically
// DO NOT CHANGE IT MANUALLY!
type CSSModuleClasses = { readonly [key: string]: string };
declare module '*.css' {
const classes: CSSModuleClasses;
export default classes;
}
declare module '*.scss' {
const classes: CSSModuleClasses;
export default classes;
}
declare module '*.sass' {
const classes: CSSModuleClasses;
export default classes;
}
declare module '*.less' {
const classes: CSSModuleClasses;
export default classes;
}
declare module '*.styl' {
const classes: CSSModuleClasses;
export default classes;
}
declare module '*.stylus' {
const classes: CSSModuleClasses;
export default classes;
}
// images
declare module '*.jpg' {
const src: string;
export default src;
}
declare module '*.jpeg' {
const src: string;
export default src;
}
declare module '*.png' {
const src: string;
export default src;
}
declare module '*.gif' {
const src: string;
export default src;
}
declare module '*.svg' {
import * as React from 'react';
export const ReactComponent: React.FunctionComponent<
React.SVGProps<SVGSVGElement> & { title?: string }
>;
const src: string;
export default src;
}
declare module '*.ico' {
const src: string;
export default src;
}
declare module '*.webp' {
const src: string;
export default src;
}
declare module '*.avif' {
const src: string;
export default src;
}
// media
declare module '*.mp4' {
const src: string;
export default src;
}
declare module '*.webm' {
const src: string;
export default src;
}
declare module '*.ogg' {
const src: string;
export default src;
}
declare module '*.mp3' {
const src: string;
export default src;
}
declare module '*.wav' {
const src: string;
export default src;
}
declare module '*.flac' {
const src: string;
export default src;
}
declare module '*.aac' {
const src: string;
export default src;
}
// fonts
declare module '*.woff' {
const src: string;
export default src;
}
declare module '*.woff2' {
const src: string;
export default src;
}
declare module '*.eot' {
const src: string;
export default src;
}
declare module '*.ttf' {
const src: string;
export default src;
}
declare module '*.otf' {
const src: string;
export default src;
}
// other
declare module '*.wasm' {
const initWasm: (
options: WebAssembly.Imports,
) => Promise<WebAssembly.Exports>;
export default initWasm;
}
declare module '*.webmanifest' {
const src: string;
export default src;
}
declare module '*.pdf' {
const src: string;
export default src;
}
declare module '*.txt' {
const src: string;
export default src;
}
+60
View File
@@ -0,0 +1,60 @@
// @ts-nocheck
// This file is generated by Umi automatically
// DO NOT CHANGE IT MANUALLY!
import './core/polyfill';
import 'antd/dist/antd.less';
import { renderClient } from '/Users/whyour/resp/qinglong/node_modules/.pnpm/@umijs+renderer-react@4.0.21_ef5jwxihqo6n7gxfmzogljlgcm/node_modules/@umijs/renderer-react';
import { getRoutes } from './core/route';
import { createPluginManager } from './core/plugin';
import { createHistory } from './core/history';
import Loading from '@/loading';
import { ApplyPluginsType } from 'umi';
const publicPath = '/';
const runtimePublicPath = false;
async function render() {
const pluginManager = createPluginManager();
const { routes, routeComponents } = await getRoutes(pluginManager);
// allow user to extend routes
await pluginManager.applyPlugins({
key: 'patchRoutes',
type: ApplyPluginsType.event,
args: {
routes,
routeComponents,
},
});
return pluginManager.applyPlugins({
key: 'render',
type: ApplyPluginsType.compose,
initialValue() {
const contextOpts = pluginManager.applyPlugins({
key: 'modifyContextOpts',
type: ApplyPluginsType.modify,
initialValue: {},
});
const basename = contextOpts.basename || '/';
const context = {
routes,
routeComponents,
pluginManager,
rootElement: contextOpts.rootElement || document.getElementById('root'),
loadingComponent: Loading,
publicPath,
runtimePublicPath,
history: createHistory({
type: contextOpts.historyType || 'browser',
basename,
...contextOpts.historyOpts,
}),
basename,
};
return renderClient(context);
},
})();
}
render();
@@ -0,0 +1,9 @@
// @ts-nocheck
// This file is generated by Umi automatically
// DO NOT CHANGE IT MANUALLY!
import React from 'react';
import { Outlet, useOutletContext } from 'umi';
export default function EmptyRoute() {
const context = useOutletContext();
return <Outlet context={context} />;
}
+21
View File
@@ -0,0 +1,21 @@
// @ts-nocheck
// This file is generated by Umi automatically
// DO NOT CHANGE IT MANUALLY!
interface IDefaultRuntimeConfig {
onRouteChange?: (props: {
routes: any;
clientRoutes: any;
location: any;
action: any;
}) => void;
patchRoutes?: (props: { routes: any }) => void;
patchClientRoutes?: (props: { routes: any }) => void;
render?: (oldRender: () => void) => void;
rootContainer?: (lastRootContainer: JSX.Element, args?: any) => void;
[key: string]: any;
}
export type RuntimeConfig = IDefaultRuntimeConfig;
export function defineApp(config: RuntimeConfig): RuntimeConfig {
return config;
}
+66
View File
@@ -0,0 +1,66 @@
// @ts-nocheck
// This file is generated by Umi automatically
// DO NOT CHANGE IT MANUALLY!
import {
createHashHistory,
createMemoryHistory,
createBrowserHistory,
History,
} from '/Users/whyour/resp/qinglong/node_modules/.pnpm/@umijs+renderer-react@4.0.22_ef5jwxihqo6n7gxfmzogljlgcm/node_modules/@umijs/renderer-react';
let history: History;
let basename: string = '/';
export function createHistory(opts: any) {
let h;
if (opts.type === 'hash') {
h = createHashHistory();
} else if (opts.type === 'memory') {
h = createMemoryHistory(opts);
} else {
h = createBrowserHistory();
}
if (opts.basename) {
basename = opts.basename;
}
history = {
...h,
push(to, state) {
h.push(patchTo(to), state);
},
replace(to, state) {
h.replace(patchTo(to), state);
},
get location() {
return h.location;
},
get action() {
return h.action;
},
};
return h;
}
// Patch `to` to support basename
// Refs:
// https://github.com/remix-run/history/blob/3e9dab4/packages/history/index.ts#L484
// https://github.com/remix-run/history/blob/dev/docs/api-reference.md#to
function patchTo(to: any) {
if (typeof to === 'string') {
return `${stripLastSlash(basename)}${to}`;
} else if (typeof to === 'object' && to.pathname) {
return {
...to,
pathname: `${stripLastSlash(basename)}${to.pathname}`,
};
} else {
throw new Error(`Unexpected to: ${to}`);
}
}
function stripLastSlash(path) {
return path.slice(-1) === '/' ? path.slice(0, -1) : path;
}
export { history };
+44
View File
@@ -0,0 +1,44 @@
// @ts-nocheck
// This file is generated by Umi automatically
// DO NOT CHANGE IT MANUALLY!
import { PluginManager } from 'umi';
function __defaultExport(obj) {
if (obj.default) {
return typeof obj.default === 'function' ? obj.default() : obj.default;
}
return obj;
}
export function getPlugins() {
return [];
}
export function getValidKeys() {
return [
'patchRoutes',
'patchClientRoutes',
'modifyContextOpts',
'rootContainer',
'innerProvider',
'i18nProvider',
'accessProvider',
'dataflowProvider',
'outerProvider',
'render',
'onRouteChange',
'qiankun',
];
}
let pluginManager = null;
export function createPluginManager() {
pluginManager = PluginManager.create({
plugins: getPlugins(),
validKeys: getValidKeys(),
});
return pluginManager;
}
export function getPluginManager() {
return pluginManager;
}

Some files were not shown because too many files have changed in this diff Show More