feat: add code-flow base load
This commit is contained in:
parent
5118891c41
commit
776c1287b8
24
dockerfile
Normal file
24
dockerfile
Normal file
@ -0,0 +1,24 @@
|
||||
# 使用官方 Node.js 运行时镜像作为基础镜像
|
||||
FROM node:22-alpine
|
||||
|
||||
# 设置工作目录
|
||||
WORKDIR /app
|
||||
|
||||
# 复制 package.json 和 package-lock.json
|
||||
COPY package*.json ./
|
||||
|
||||
# 安装依赖
|
||||
# RUN npm install --production
|
||||
|
||||
# 复制 dist 文件夹
|
||||
COPY dist ./dist
|
||||
COPY app.config.json5 ./dist/app.config.json5
|
||||
|
||||
# 如果有其他静态资源文件夹,也可以一并复制
|
||||
# COPY public ./public
|
||||
|
||||
# 暴露应用运行的端口(假设应用运行在 3000 端口)
|
||||
EXPOSE 4000
|
||||
|
||||
# 启动应用
|
||||
CMD ["node", "dist/app.cjs"]
|
13
package.json
13
package.json
@ -10,16 +10,20 @@
|
||||
"test": "NODE_ENV=development node --experimental-vm-modules node_modules/jest/bin/jest.js --detectOpenHandles ",
|
||||
"build": "cross-env ENV=production webpack --mode=production",
|
||||
"build:sh": "cross-env webpack --mode=production -c ./webpack.shell.config.cjs",
|
||||
"deploy": "scp ./dist/app.js light:~/apps/x2025/back-end",
|
||||
"deploy": "scp ./dist/app.cjs light:~/apps/codeflow/backend",
|
||||
"deploy:sh": "",
|
||||
"clean": "rm -rf dist",
|
||||
"reload": "ssh light pm2 restart x2025"
|
||||
"reload": "ssh light pm2 restart codeflow",
|
||||
"docker:build": "docker build -t docker.xiongxiao.me/code-flow:v0.0.1 .",
|
||||
"docker:push": "docker push docker.xiongxiao.me/code-flow:v0.0.1",
|
||||
"docker:build:gitea": "docker build -t git.xiongxiao.me/abearxiong/code-flow:v0.0.1 .",
|
||||
"docker:push:gitea": "docker push git.xiongxiao.me/abearxiong/code-flow:v0.0.1"
|
||||
},
|
||||
"keywords": [],
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"@abearxiong/router": "^0.0.1-alpha.4",
|
||||
"@abearxiong/router": "^0.0.1-alpha.6",
|
||||
"@abearxiong/use-config": "^0.0.1",
|
||||
"dayjs": "^1.11.11",
|
||||
"json5": "^2.2.3",
|
||||
@ -53,5 +57,6 @@
|
||||
"webpack": "^5.92.1",
|
||||
"webpack-cli": "^5.1.4",
|
||||
"webpack-node-externals": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"packageManager": "yarn@1.22.19+sha1.4ba7fc5c6e704fce2066ecbfb0b0d8976fe62447"
|
||||
}
|
||||
|
@ -2,9 +2,10 @@ import { router } from '../../modules/router.ts';
|
||||
import { Route } from '@abearxiong/router';
|
||||
import { RouterCodeModel, RouterCode } from '../../models/code.ts';
|
||||
|
||||
enum CodeStatus {
|
||||
success = 0,
|
||||
fail = 1,
|
||||
export enum CodeStatus {
|
||||
running = 'running',
|
||||
stop = 'stop',
|
||||
fail = 'fail',
|
||||
}
|
||||
|
||||
export type CodeManager = {
|
||||
@ -16,11 +17,8 @@ const codeDemoRun = `async function run(ctx) {
|
||||
ctx.body = 'test js';
|
||||
return ctx;
|
||||
}`;
|
||||
export const load = async function () {
|
||||
const codes = await RouterCodeModel.findAll();
|
||||
const codeManager: CodeManager[] = codes.map((item) => {
|
||||
export const loadOne = async (item: RouterCodeModel) => {
|
||||
const { path, key, id, code, project } = item.toJSON();
|
||||
console.log('item', item, 'code', item.code);
|
||||
try {
|
||||
const fn: any = new Function(
|
||||
'ctx',
|
||||
@ -39,7 +37,7 @@ export const load = async function () {
|
||||
id,
|
||||
project,
|
||||
fn,
|
||||
status: CodeStatus.success,
|
||||
status: CodeStatus.running,
|
||||
};
|
||||
} catch (e) {
|
||||
console.error('error id:', id, '\n', e);
|
||||
@ -52,6 +50,56 @@ export const load = async function () {
|
||||
errorMsg: e.message.toString(),
|
||||
};
|
||||
}
|
||||
};
|
||||
export const load = async function () {
|
||||
const codes = await RouterCodeModel.findAll();
|
||||
const codeManager: CodeManager[] = codes.map((item) => {
|
||||
const { path, key, id, code, project, active } = item.toJSON();
|
||||
if (!active) {
|
||||
return {
|
||||
path,
|
||||
key,
|
||||
id,
|
||||
code,
|
||||
project,
|
||||
status: CodeStatus.stop,
|
||||
};
|
||||
}
|
||||
try {
|
||||
const fn: any = new Function(
|
||||
'ctx',
|
||||
`
|
||||
${code}
|
||||
return run(ctx);
|
||||
`,
|
||||
);
|
||||
// run code
|
||||
const codeRunRoute = new Route(path, key, { id });
|
||||
codeRunRoute.run = fn;
|
||||
router.add(codeRunRoute);
|
||||
return {
|
||||
path,
|
||||
key,
|
||||
id,
|
||||
code,
|
||||
project,
|
||||
type: item.type,
|
||||
fn,
|
||||
status: CodeStatus.running,
|
||||
};
|
||||
} catch (e) {
|
||||
console.error('error id:', id, '\n', e);
|
||||
return {
|
||||
path,
|
||||
key,
|
||||
id,
|
||||
code,
|
||||
project,
|
||||
type: item.type,
|
||||
status: CodeStatus.fail,
|
||||
errorMsg: e.message.toString(),
|
||||
};
|
||||
}
|
||||
});
|
||||
return codeManager;
|
||||
};
|
||||
|
@ -1,5 +1,5 @@
|
||||
import { EventEmitter, once } from 'stream';
|
||||
import { load, CodeManager } from './load.ts';
|
||||
import { load, CodeManager, CodeStatus } from './load.ts';
|
||||
|
||||
export enum LoadStatus {
|
||||
LOADING = 'loading',
|
||||
@ -11,6 +11,30 @@ export const manager = {
|
||||
list: [] as CodeManager[],
|
||||
};
|
||||
|
||||
// 更新
|
||||
export const updateNewCode = (code: CodeManager) => {
|
||||
const index = manager.list.findIndex((item) => item.id === code.id);
|
||||
if (index === -1) {
|
||||
manager.list.push(code);
|
||||
} else {
|
||||
manager.list[index] = code;
|
||||
}
|
||||
};
|
||||
// 删除
|
||||
export const removeCode = (id: string) => {
|
||||
const index = manager.list.findIndex((item) => item.id === id);
|
||||
if (index !== -1) {
|
||||
manager.list.splice(index, 1);
|
||||
}
|
||||
};
|
||||
export const stopCode = (id: string) => {
|
||||
const index = manager.list.findIndex((item) => item.id === id);
|
||||
if (index !== -1) {
|
||||
manager.list[index].status = CodeStatus.stop;
|
||||
}
|
||||
};
|
||||
|
||||
// 事件
|
||||
export const events = new EventEmitter();
|
||||
|
||||
once(events, 'loaded')
|
||||
|
@ -1,13 +1,16 @@
|
||||
// admin 需要最后运行,并在route中进行过滤。
|
||||
import { Route } from '@abearxiong/router';
|
||||
import { router } from '../modules/router.ts';
|
||||
import { manager } from './dashboard/manager.ts';
|
||||
import { manager, updateNewCode, removeCode, stopCode } from './dashboard/manager.ts';
|
||||
import { loadOne } from './dashboard/load.ts';
|
||||
import { RouterCodeModel } from '../models/code.ts';
|
||||
import { nanoid } from 'nanoid';
|
||||
|
||||
export const getRouterList = new Route('admin', 'getRouterList');
|
||||
|
||||
getRouterList.run = async (ctx) => {
|
||||
ctx.body = router.getList().filter((r) => !r.path.startsWith('admin'));
|
||||
// ctx.body = router.getList().filter((r) => r.path.startsWith('admin'));
|
||||
ctx.body = router.getList().filter((r) => r.path.startsWith('admin'));
|
||||
return ctx;
|
||||
};
|
||||
|
||||
@ -28,27 +31,56 @@ export const removeRouterById = new Route('admin', 'removeRouterById');
|
||||
removeRouterById.run = async (ctx) => {
|
||||
const { id } = ctx.query;
|
||||
router.removeById(id);
|
||||
removeCode(id);
|
||||
await RouterCodeModel.destroy({ where: { id } });
|
||||
ctx.body = 'success';
|
||||
return ctx;
|
||||
};
|
||||
router.add(removeRouterById);
|
||||
|
||||
// add router
|
||||
export const addRouter = new Route('admin', 'addRouter');
|
||||
|
||||
addRouter.run = async (ctx) => {
|
||||
const { path, key } = ctx.query;
|
||||
router.add(new Route(path, key));
|
||||
// stop router by id
|
||||
export const stopRouterById = new Route('admin', 'stopRouterById');
|
||||
stopRouterById.run = async (ctx) => {
|
||||
const { id } = ctx.query;
|
||||
router.removeById(id);
|
||||
const routerCode = await RouterCodeModel.findByPk(id);
|
||||
if (routerCode) {
|
||||
routerCode.active = false;
|
||||
await routerCode.save();
|
||||
}
|
||||
stopCode(id);
|
||||
ctx.body = 'success';
|
||||
return ctx;
|
||||
};
|
||||
router.add(addRouter);
|
||||
|
||||
// update router
|
||||
// add or update router
|
||||
export const updateRouter = new Route('admin', 'updateRouter');
|
||||
updateRouter.run = async (ctx) => {
|
||||
const { path, key } = ctx.query;
|
||||
router.add(new Route(path, key));
|
||||
let { path, key, id, code } = ctx.query;
|
||||
if (!path && !key) {
|
||||
ctx.body = 'path and key is required';
|
||||
ctx.code = 500;
|
||||
return ctx;
|
||||
}
|
||||
let codeRouter: RouterCodeModel | null = null;
|
||||
const codeRouteCheck = await RouterCodeModel.findOne({ where: { path, key } }); // 检查是否存在
|
||||
if (codeRouteCheck && codeRouteCheck.id !== id) {
|
||||
key = `${key}-${nanoid(6)}`;
|
||||
}
|
||||
if (id) {
|
||||
codeRouter = await RouterCodeModel.findByPk(id);
|
||||
codeRouter.path = path;
|
||||
codeRouter.key = key;
|
||||
codeRouter.code = code;
|
||||
await codeRouter.save();
|
||||
} else {
|
||||
const newCodeRouter = new RouterCodeModel({ path, key, code });
|
||||
await newCodeRouter.save();
|
||||
codeRouter = newCodeRouter;
|
||||
}
|
||||
|
||||
const codeOne = await loadOne(codeRouter);
|
||||
updateNewCode(codeOne);
|
||||
|
||||
ctx.body = 'success';
|
||||
return ctx;
|
||||
};
|
||||
@ -57,7 +89,10 @@ router.add(updateRouter);
|
||||
// get manager status
|
||||
export const managerRouter = new Route('admin', 'getManagerStatus');
|
||||
managerRouter.run = async (ctx) => {
|
||||
ctx.body = manager.loaded;
|
||||
ctx.body = {
|
||||
status: manager.loaded,
|
||||
msg: 'system is running, and load manager success.',
|
||||
};
|
||||
return ctx;
|
||||
};
|
||||
router.add(managerRouter);
|
||||
|
11
src/app.ts
11
src/app.ts
@ -6,7 +6,16 @@ import http from 'http';
|
||||
const config = useConfig();
|
||||
routerServer.setHandle(handleMessage);
|
||||
|
||||
const server = http.createServer(routerServer.callback());
|
||||
const server = http.createServer((req, res) => {
|
||||
// 设置跨域
|
||||
res.setHeader('Access-Control-Allow-Origin', '*');
|
||||
res.setHeader('Access-Control-Allow-Methods', 'GET, POST');
|
||||
res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
|
||||
res.setHeader('Access-Control-Max-Age', '86400');
|
||||
res.setHeader('Content-Type', 'application/json');
|
||||
// routerServer.handle(req, res);
|
||||
return routerServer.callback()(req, res);
|
||||
});
|
||||
|
||||
server.listen(config.port, () => {
|
||||
console.log(`Server running at http://localhost:${config.port}/`);
|
||||
|
@ -8,15 +8,21 @@ export type RouterCode = {
|
||||
active: boolean;
|
||||
project: string;
|
||||
code: string;
|
||||
type: RouterCodeType;
|
||||
};
|
||||
export enum RouterCodeType {
|
||||
route = 'route',
|
||||
middleware = 'middleware',
|
||||
}
|
||||
|
||||
export class RouterCodeModel extends Model {
|
||||
declare id: string;
|
||||
path: string;
|
||||
key: string;
|
||||
active: boolean;
|
||||
project: string;
|
||||
public code: string;
|
||||
declare path: string;
|
||||
declare key: string;
|
||||
declare active: boolean;
|
||||
declare project: string;
|
||||
declare code: string;
|
||||
declare type: RouterCodeType;
|
||||
}
|
||||
RouterCodeModel.init(
|
||||
{
|
||||
@ -46,6 +52,18 @@ RouterCodeModel.init(
|
||||
type: DataTypes.STRING,
|
||||
defaultValue: '',
|
||||
},
|
||||
type: {
|
||||
type: DataTypes.ENUM(RouterCodeType.route, RouterCodeType.middleware),
|
||||
defaultValue: RouterCodeType.route,
|
||||
},
|
||||
middleware: {
|
||||
type: DataTypes.ARRAY(DataTypes.STRING),
|
||||
defaultValue: [],
|
||||
},
|
||||
next: {
|
||||
type: DataTypes.STRING,
|
||||
defaultValue: '',
|
||||
},
|
||||
},
|
||||
{
|
||||
sequelize,
|
||||
@ -53,3 +71,4 @@ RouterCodeModel.init(
|
||||
},
|
||||
);
|
||||
// RouterCodeModel.sync({ alter: true });
|
||||
// RouterCodeModel.sync({force: true});
|
||||
|
@ -41,13 +41,9 @@ User.init(
|
||||
|
||||
export const initializeUser = async () => {
|
||||
const w = await User.findOne();
|
||||
const password = '2e8a305521bba54f49638ed25e46adf3';
|
||||
const password = '2e8a305521bba54f49638ed25e46adf3'; //123456
|
||||
const salt = '123';
|
||||
const users = [
|
||||
{ username: 'admin' },
|
||||
{ username: 'user' },
|
||||
{ username: 'root' },
|
||||
];
|
||||
const users = [{ username: 'admin' }, { username: 'user' }, { username: 'root' }];
|
||||
if (!w) {
|
||||
const newUsers = await User.bulkCreate(
|
||||
users.map((user) => {
|
||||
|
@ -15,6 +15,16 @@ describe('RouterCodeModel', () => {
|
||||
console.error('connect error', error);
|
||||
}
|
||||
});
|
||||
// yarn test --testNamePattern='RouterCodeModel:sync'
|
||||
test('RouterCodeModel:sync', async () => {
|
||||
try {
|
||||
RouterCodeModel.sync({ alter: true });
|
||||
console.log('connect success');
|
||||
await sleep(2000);
|
||||
} catch (error) {
|
||||
console.error('connect error', error);
|
||||
}
|
||||
});
|
||||
// yarn test --testNamePattern='RouterCodeModel:create'
|
||||
test('RouterCodeModel:create', async () => {
|
||||
try {
|
||||
|
145
yarn.lock
145
yarn.lock
@ -2,10 +2,10 @@
|
||||
# yarn lockfile v1
|
||||
|
||||
|
||||
"@abearxiong/router@^0.0.1-alpha.4":
|
||||
version "0.0.1-alpha.4"
|
||||
resolved "https://npm.pkg.github.com/download/@abearxiong/router/0.0.1-alpha.4/4890036c8d5623d4d0173a052caa8b49b484fe7c"
|
||||
integrity sha512-Uaelc/RRhh9bC/OBh3CvASCyEiNIF9TR4QVlHzm7kBxkHb0vR4K58jUS8lcq5AtAYCwhIZpHZT+FSSrmbvfh0Q==
|
||||
"@abearxiong/router@^0.0.1-alpha.6":
|
||||
version "0.0.1-alpha.6"
|
||||
resolved "https://npm.pkg.github.com/download/@abearxiong/router/0.0.1-alpha.6/2009ce380ff3d1d205ed6ae3cc6b884503fb6b9f#2009ce380ff3d1d205ed6ae3cc6b884503fb6b9f"
|
||||
integrity sha512-NINt44Sw9rNAP+SxMlwd0qQfUt1sfBLniMV8/kWuRVfwIirhtWq0Pp4C9auxDHJUR56EO6Z8XV6DYejhtpphgw==
|
||||
dependencies:
|
||||
nanoid "^5.0.6"
|
||||
|
||||
@ -39,7 +39,7 @@
|
||||
resolved "https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.24.7.tgz"
|
||||
integrity sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==
|
||||
|
||||
"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.23.9", "@babel/core@^7.8.0", "@babel/core@>=7.0.0-beta.0 <8":
|
||||
"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.23.9":
|
||||
version "7.24.7"
|
||||
resolved "https://registry.npmmirror.com/@babel/core/-/core-7.24.7.tgz"
|
||||
integrity sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==
|
||||
@ -511,7 +511,7 @@
|
||||
jest-haste-map "^29.7.0"
|
||||
slash "^3.0.0"
|
||||
|
||||
"@jest/transform@^29.0.0", "@jest/transform@^29.7.0":
|
||||
"@jest/transform@^29.7.0":
|
||||
version "29.7.0"
|
||||
resolved "https://registry.npmmirror.com/@jest/transform/-/transform-29.7.0.tgz"
|
||||
integrity sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==
|
||||
@ -532,7 +532,7 @@
|
||||
slash "^3.0.0"
|
||||
write-file-atomic "^4.0.2"
|
||||
|
||||
"@jest/types@^29.0.0", "@jest/types@^29.6.3":
|
||||
"@jest/types@^29.6.3":
|
||||
version "29.6.3"
|
||||
resolved "https://registry.npmmirror.com/@jest/types/-/types-29.6.3.tgz"
|
||||
integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==
|
||||
@ -576,14 +576,6 @@
|
||||
resolved "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz"
|
||||
integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
|
||||
|
||||
"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.20", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25":
|
||||
version "0.3.25"
|
||||
resolved "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz"
|
||||
integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==
|
||||
dependencies:
|
||||
"@jridgewell/resolve-uri" "^3.1.0"
|
||||
"@jridgewell/sourcemap-codec" "^1.4.14"
|
||||
|
||||
"@jridgewell/trace-mapping@0.3.9":
|
||||
version "0.3.9"
|
||||
resolved "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz"
|
||||
@ -592,6 +584,14 @@
|
||||
"@jridgewell/resolve-uri" "^3.0.3"
|
||||
"@jridgewell/sourcemap-codec" "^1.4.10"
|
||||
|
||||
"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.20", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25":
|
||||
version "0.3.25"
|
||||
resolved "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz"
|
||||
integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==
|
||||
dependencies:
|
||||
"@jridgewell/resolve-uri" "^3.1.0"
|
||||
"@jridgewell/sourcemap-codec" "^1.4.14"
|
||||
|
||||
"@nodelib/fs.scandir@2.1.5":
|
||||
version "2.1.5"
|
||||
resolved "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz"
|
||||
@ -600,7 +600,7 @@
|
||||
"@nodelib/fs.stat" "2.0.5"
|
||||
run-parallel "^1.1.9"
|
||||
|
||||
"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5":
|
||||
"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2":
|
||||
version "2.0.5"
|
||||
resolved "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz"
|
||||
integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
|
||||
@ -813,7 +813,7 @@
|
||||
resolved "https://registry.npmmirror.com/@types/ms/-/ms-0.7.34.tgz"
|
||||
integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==
|
||||
|
||||
"@types/node@*", "@types/node@^20.14.8", "@types/node@>=10.0.0":
|
||||
"@types/node@*", "@types/node@>=10.0.0", "@types/node@^20.14.8":
|
||||
version "20.14.8"
|
||||
resolved "https://registry.npmmirror.com/@types/node/-/node-20.14.8.tgz"
|
||||
integrity sha512-DO+2/jZinXfROG7j7WKFn/3C6nFwxy2lLpgLjEXJz+0XKphZlTLJ14mo8Vfg8X5BWN6XjyESXq+LcYdT7tR3bA==
|
||||
@ -864,7 +864,7 @@
|
||||
dependencies:
|
||||
"@types/yargs-parser" "*"
|
||||
|
||||
"@webassemblyjs/ast@^1.12.1", "@webassemblyjs/ast@1.12.1":
|
||||
"@webassemblyjs/ast@1.12.1", "@webassemblyjs/ast@^1.12.1":
|
||||
version "1.12.1"
|
||||
resolved "https://registry.npmmirror.com/@webassemblyjs/ast/-/ast-1.12.1.tgz"
|
||||
integrity sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==
|
||||
@ -965,7 +965,7 @@
|
||||
"@webassemblyjs/wasm-gen" "1.12.1"
|
||||
"@webassemblyjs/wasm-parser" "1.12.1"
|
||||
|
||||
"@webassemblyjs/wasm-parser@^1.12.1", "@webassemblyjs/wasm-parser@1.12.1":
|
||||
"@webassemblyjs/wasm-parser@1.12.1", "@webassemblyjs/wasm-parser@^1.12.1":
|
||||
version "1.12.1"
|
||||
resolved "https://registry.npmmirror.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz"
|
||||
integrity sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==
|
||||
@ -1030,7 +1030,7 @@ acorn-walk@^8.1.1:
|
||||
dependencies:
|
||||
acorn "^8.11.0"
|
||||
|
||||
acorn@^8, acorn@^8.11.0, acorn@^8.4.1, acorn@^8.7.1, acorn@^8.8.2:
|
||||
acorn@^8.11.0, acorn@^8.4.1, acorn@^8.7.1, acorn@^8.8.2:
|
||||
version "8.12.0"
|
||||
resolved "https://registry.npmmirror.com/acorn/-/acorn-8.12.0.tgz"
|
||||
integrity sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==
|
||||
@ -1054,7 +1054,7 @@ ajv-keywords@^5.1.0:
|
||||
dependencies:
|
||||
fast-deep-equal "^3.1.3"
|
||||
|
||||
ajv@^6.12.5, ajv@^6.9.1:
|
||||
ajv@^6.12.5:
|
||||
version "6.12.6"
|
||||
resolved "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz"
|
||||
integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
|
||||
@ -1064,17 +1064,7 @@ ajv@^6.12.5, ajv@^6.9.1:
|
||||
json-schema-traverse "^0.4.1"
|
||||
uri-js "^4.2.2"
|
||||
|
||||
ajv@^8.0.0:
|
||||
version "8.16.0"
|
||||
resolved "https://registry.npmmirror.com/ajv/-/ajv-8.16.0.tgz"
|
||||
integrity sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==
|
||||
dependencies:
|
||||
fast-deep-equal "^3.1.3"
|
||||
json-schema-traverse "^1.0.0"
|
||||
require-from-string "^2.0.2"
|
||||
uri-js "^4.4.1"
|
||||
|
||||
ajv@^8.8.2, ajv@^8.9.0:
|
||||
ajv@^8.0.0, ajv@^8.9.0:
|
||||
version "8.16.0"
|
||||
resolved "https://registry.npmmirror.com/ajv/-/ajv-8.16.0.tgz"
|
||||
integrity sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==
|
||||
@ -1150,7 +1140,7 @@ asynckit@^0.4.0:
|
||||
resolved "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz"
|
||||
integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
|
||||
|
||||
babel-jest@^29.0.0, babel-jest@^29.7.0:
|
||||
babel-jest@^29.7.0:
|
||||
version "29.7.0"
|
||||
resolved "https://registry.npmmirror.com/babel-jest/-/babel-jest-29.7.0.tgz"
|
||||
integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==
|
||||
@ -1215,7 +1205,7 @@ balanced-match@^1.0.0:
|
||||
resolved "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz"
|
||||
integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
|
||||
|
||||
base64id@~2.0.0, base64id@2.0.0:
|
||||
base64id@2.0.0, base64id@~2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.npmmirror.com/base64id/-/base64id-2.0.0.tgz"
|
||||
integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==
|
||||
@ -1240,7 +1230,7 @@ braces@^3.0.3, braces@~3.0.2:
|
||||
dependencies:
|
||||
fill-range "^7.1.1"
|
||||
|
||||
browserslist@^4.21.10, browserslist@^4.22.2, "browserslist@>= 4.21.0":
|
||||
browserslist@^4.21.10, browserslist@^4.22.2:
|
||||
version "4.23.1"
|
||||
resolved "https://registry.npmmirror.com/browserslist/-/browserslist-4.23.1.tgz"
|
||||
integrity sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==
|
||||
@ -1399,16 +1389,16 @@ color-convert@^2.0.1:
|
||||
dependencies:
|
||||
color-name "~1.1.4"
|
||||
|
||||
color-name@~1.1.4:
|
||||
version "1.1.4"
|
||||
resolved "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz"
|
||||
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
|
||||
|
||||
color-name@1.1.3:
|
||||
version "1.1.3"
|
||||
resolved "https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz"
|
||||
integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==
|
||||
|
||||
color-name@~1.1.4:
|
||||
version "1.1.4"
|
||||
resolved "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz"
|
||||
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
|
||||
|
||||
colorette@^2.0.14:
|
||||
version "2.0.20"
|
||||
resolved "https://registry.npmmirror.com/colorette/-/colorette-2.0.20.tgz"
|
||||
@ -1783,7 +1773,7 @@ fast-glob@^3.3.2:
|
||||
merge2 "^1.3.0"
|
||||
micromatch "^4.0.4"
|
||||
|
||||
fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0, fast-json-stable-stringify@2.x:
|
||||
fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz"
|
||||
integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
|
||||
@ -1928,7 +1918,7 @@ get-stream@^6.0.0:
|
||||
resolved "https://registry.npmmirror.com/get-stream/-/get-stream-6.0.1.tgz"
|
||||
integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==
|
||||
|
||||
glob-parent@^5.1.2:
|
||||
glob-parent@^5.1.2, glob-parent@~5.1.2:
|
||||
version "5.1.2"
|
||||
resolved "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz"
|
||||
integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
|
||||
@ -1942,13 +1932,6 @@ glob-parent@^6.0.1:
|
||||
dependencies:
|
||||
is-glob "^4.0.3"
|
||||
|
||||
glob-parent@~5.1.2:
|
||||
version "5.1.2"
|
||||
resolved "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz"
|
||||
integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
|
||||
dependencies:
|
||||
is-glob "^4.0.1"
|
||||
|
||||
glob-to-regexp@^0.4.1:
|
||||
version "0.4.1"
|
||||
resolved "https://registry.npmmirror.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz"
|
||||
@ -2423,7 +2406,7 @@ jest-resolve-dependencies@^29.7.0:
|
||||
jest-regex-util "^29.6.3"
|
||||
jest-snapshot "^29.7.0"
|
||||
|
||||
jest-resolve@*, jest-resolve@^29.7.0:
|
||||
jest-resolve@^29.7.0:
|
||||
version "29.7.0"
|
||||
resolved "https://registry.npmmirror.com/jest-resolve/-/jest-resolve-29.7.0.tgz"
|
||||
integrity sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==
|
||||
@ -2576,7 +2559,7 @@ jest-worker@^29.7.0:
|
||||
merge-stream "^2.0.0"
|
||||
supports-color "^8.0.0"
|
||||
|
||||
jest@^29.0.0, jest@^29.7.0:
|
||||
jest@^29.7.0:
|
||||
version "29.7.0"
|
||||
resolved "https://registry.npmmirror.com/jest/-/jest-29.7.0.tgz"
|
||||
integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==
|
||||
@ -2769,7 +2752,7 @@ make-dir@^4.0.0:
|
||||
dependencies:
|
||||
semver "^7.5.3"
|
||||
|
||||
make-error@^1.1.1, make-error@1.x:
|
||||
make-error@1.x, make-error@^1.1.1:
|
||||
version "1.3.6"
|
||||
resolved "https://registry.npmmirror.com/make-error/-/make-error-1.3.6.tgz"
|
||||
integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==
|
||||
@ -2852,7 +2835,7 @@ moment@^2.29.4:
|
||||
resolved "https://registry.npmmirror.com/moment/-/moment-2.30.1.tgz"
|
||||
integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==
|
||||
|
||||
ms@^2.1.1, ms@2.1.2:
|
||||
ms@2.1.2, ms@^2.1.1:
|
||||
version "2.1.2"
|
||||
resolved "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz"
|
||||
integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
|
||||
@ -3053,7 +3036,7 @@ pg-types@^2.1.0:
|
||||
postgres-date "~1.0.4"
|
||||
postgres-interval "^1.1.0"
|
||||
|
||||
pg@^8.12.0, pg@>=8.0:
|
||||
pg@^8.12.0:
|
||||
version "8.12.0"
|
||||
resolved "https://registry.npmmirror.com/pg/-/pg-8.12.0.tgz"
|
||||
integrity sha512-A+LHUSnwnxrnL/tZ+OLfqR1SxLN3c/pgDztZ47Rpbsd4jUytsTtwQo/TLPRzPJMp/1pbhYVhH9cuSZLAajNfjQ==
|
||||
@ -3281,12 +3264,7 @@ schema-utils@^4.2.0:
|
||||
ajv-formats "^2.1.1"
|
||||
ajv-keywords "^5.1.0"
|
||||
|
||||
semver@^6.3.0:
|
||||
version "6.3.1"
|
||||
resolved "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz"
|
||||
integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
|
||||
|
||||
semver@^6.3.1:
|
||||
semver@^6.3.0, semver@^6.3.1:
|
||||
version "6.3.1"
|
||||
resolved "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz"
|
||||
integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
|
||||
@ -3432,14 +3410,6 @@ socket.io@^4.7.5:
|
||||
socket.io-adapter "~2.5.2"
|
||||
socket.io-parser "~4.2.4"
|
||||
|
||||
source-map-support@~0.5.20:
|
||||
version "0.5.21"
|
||||
resolved "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz"
|
||||
integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==
|
||||
dependencies:
|
||||
buffer-from "^1.0.0"
|
||||
source-map "^0.6.0"
|
||||
|
||||
source-map-support@0.5.13:
|
||||
version "0.5.13"
|
||||
resolved "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.13.tgz"
|
||||
@ -3448,12 +3418,15 @@ source-map-support@0.5.13:
|
||||
buffer-from "^1.0.0"
|
||||
source-map "^0.6.0"
|
||||
|
||||
source-map@^0.6.0:
|
||||
version "0.6.1"
|
||||
resolved "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz"
|
||||
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
|
||||
source-map-support@~0.5.20:
|
||||
version "0.5.21"
|
||||
resolved "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz"
|
||||
integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==
|
||||
dependencies:
|
||||
buffer-from "^1.0.0"
|
||||
source-map "^0.6.0"
|
||||
|
||||
source-map@^0.6.1:
|
||||
source-map@^0.6.0, source-map@^0.6.1:
|
||||
version "0.6.1"
|
||||
resolved "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz"
|
||||
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
|
||||
@ -3547,14 +3520,7 @@ supertest@^7.0.0:
|
||||
methods "^1.1.2"
|
||||
superagent "^9.0.1"
|
||||
|
||||
supports-color@^5.3.0:
|
||||
version "5.5.0"
|
||||
resolved "https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz"
|
||||
integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
|
||||
dependencies:
|
||||
has-flag "^3.0.0"
|
||||
|
||||
supports-color@^5.5.0:
|
||||
supports-color@^5.3.0, supports-color@^5.5.0:
|
||||
version "5.5.0"
|
||||
resolved "https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz"
|
||||
integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
|
||||
@ -3568,14 +3534,7 @@ supports-color@^7.1.0:
|
||||
dependencies:
|
||||
has-flag "^4.0.0"
|
||||
|
||||
supports-color@^8.0.0:
|
||||
version "8.1.1"
|
||||
resolved "https://registry.npmmirror.com/supports-color/-/supports-color-8.1.1.tgz"
|
||||
integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==
|
||||
dependencies:
|
||||
has-flag "^4.0.0"
|
||||
|
||||
supports-color@^8.1.1:
|
||||
supports-color@^8.0.0, supports-color@^8.1.1:
|
||||
version "8.1.1"
|
||||
resolved "https://registry.npmmirror.com/supports-color/-/supports-color-8.1.1.tgz"
|
||||
integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==
|
||||
@ -3679,7 +3638,7 @@ ts-loader@^9.5.1:
|
||||
semver "^7.3.4"
|
||||
source-map "^0.7.4"
|
||||
|
||||
ts-node@^10.9.2, ts-node@>=9.0.0:
|
||||
ts-node@^10.9.2:
|
||||
version "10.9.2"
|
||||
resolved "https://registry.npmmirror.com/ts-node/-/ts-node-10.9.2.tgz"
|
||||
integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==
|
||||
@ -3713,7 +3672,7 @@ type-fest@^0.21.3:
|
||||
resolved "https://registry.npmmirror.com/type-fest/-/type-fest-0.21.3.tgz"
|
||||
integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==
|
||||
|
||||
typescript@*, typescript@^5.5.2, typescript@>=2.7, "typescript@>=4.3 <6", typescript@>=4.9.5, typescript@>3.6.0:
|
||||
typescript@^5.5.2:
|
||||
version "5.5.2"
|
||||
resolved "https://registry.npmmirror.com/typescript/-/typescript-5.5.2.tgz"
|
||||
integrity sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew==
|
||||
@ -3797,7 +3756,7 @@ watchpack@^2.4.1:
|
||||
glob-to-regexp "^0.4.1"
|
||||
graceful-fs "^4.1.2"
|
||||
|
||||
webpack-cli@^5.1.4, webpack-cli@5.x.x:
|
||||
webpack-cli@^5.1.4:
|
||||
version "5.1.4"
|
||||
resolved "https://registry.npmmirror.com/webpack-cli/-/webpack-cli-5.1.4.tgz"
|
||||
integrity sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==
|
||||
@ -3835,7 +3794,7 @@ webpack-sources@^3.2.3:
|
||||
resolved "https://registry.npmmirror.com/webpack-sources/-/webpack-sources-3.2.3.tgz"
|
||||
integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==
|
||||
|
||||
webpack@^5.0.0, webpack@^5.1.0, webpack@^5.11.0, webpack@^5.90.3, webpack@^5.92.1, webpack@5.x.x:
|
||||
webpack@^5.90.3, webpack@^5.92.1:
|
||||
version "5.92.1"
|
||||
resolved "https://registry.npmmirror.com/webpack/-/webpack-5.92.1.tgz"
|
||||
integrity sha512-JECQ7IwJb+7fgUFBlrJzbyu3GEuNBcdqr1LD7IbSzwkSmIevTm8PF+wej3Oxuz/JFBUZ6O1o43zsPkwm1C4TmA==
|
||||
|
Loading…
x
Reference in New Issue
Block a user