diff --git a/urbanLifelineServ/.bin/database/postgres/bin.sh b/urbanLifelineServ/.bin/database/postgres/bin.sh index 36740189..c9e21826 100644 --- a/urbanLifelineServ/.bin/database/postgres/bin.sh +++ b/urbanLifelineServ/.bin/database/postgres/bin.sh @@ -31,7 +31,7 @@ log() { # 数据库连接信息(可通过环境变量覆盖) DB_HOST=${POSTGRES_HOST:-"localhost"} DB_PORT=${POSTGRES_PORT:-"5432"} -DB_NAME=${POSTGRES_DB:-"urban-lifeline"} +DB_NAME=${POSTGRES_DB:-"urban_lifeline"} DB_USER=${POSTGRES_USER:-"postgres"} DB_PASSWORD=${POSTGRES_PASSWORD:-"postgres"} diff --git a/urbanLifelineServ/.bin/database/postgres/sql/createDB.sql b/urbanLifelineServ/.bin/database/postgres/sql/createDB.sql index 19ad6024..5ff18039 100644 --- a/urbanLifelineServ/.bin/database/postgres/sql/createDB.sql +++ b/urbanLifelineServ/.bin/database/postgres/sql/createDB.sql @@ -12,12 +12,13 @@ CREATE DATABASE urban_lifeline LC_CTYPE 'zh_CN.UTF-8'; -- 连接到新创建的数据库 -\c urban-lifeline; +\c urban_lifeline; -- -- 创建扩展(如果需要) CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; -- UUID 支持 CREATE EXTENSION IF NOT EXISTS "pg_trgm"; -- 文本搜索支持 CREATE EXTENSION IF NOT EXISTS "btree_gist"; -- GiST 索引支持 +CREATE EXTENSION IF NOT EXISTS "vector"; -- 向量 -- 设置搜索路径(可选,但建议设置) -- ALTER DATABASE urban-lifeline SET search_path TO sys, public; diff --git a/urbanLifelineServ/.bin/database/postgres/sql/createTablePermission.sql b/urbanLifelineServ/.bin/database/postgres/sql/createTablePermission.sql index d319fb35..134b5dfd 100644 --- a/urbanLifelineServ/.bin/database/postgres/sql/createTablePermission.sql +++ b/urbanLifelineServ/.bin/database/postgres/sql/createTablePermission.sql @@ -158,8 +158,11 @@ CREATE TABLE sys.tb_sys_view ( url VARCHAR(255) DEFAULT NULL, -- 视图URL component VARCHAR(255) DEFAULT NULL, -- 视图组件 icon VARCHAR(100) DEFAULT NULL, -- 视图图标 - type INTEGER DEFAULT 0, -- 视图类型 - layout VARCHAR(100) DEFAULT NULL, -- 布局组件路径名称 + type INTEGER DEFAULT 0, -- 视图类型:0=目录 1=菜单页面 2=按钮 + view_type VARCHAR(20) DEFAULT 'route', -- 页面类型:route=路由页面 iframe=嵌入页面 + iframe_url VARCHAR(500) DEFAULT NULL, -- iframe URL(仅当view_type=iframe时有效) + service VARCHAR(20) DEFAULT 'platform', -- 所属服务:platform=平台应用 bidding=招标应用 workcase=客服应用 + layout VARCHAR(100) DEFAULT NULL, -- 布局组件路径名称 order_num INTEGER DEFAULT 0, -- 视图排序号 dept_path VARCHAR(255) DEFAULT NULL, -- 部门全路径 description VARCHAR(255) DEFAULT NULL, -- 视图描述 @@ -172,7 +175,11 @@ CREATE TABLE sys.tb_sys_view ( PRIMARY KEY (view_id), UNIQUE (optsn) ); -COMMENT ON TABLE sys.tb_sys_view IS '视图表'; +-- 创建索引 +CREATE INDEX idx_sys_view_parent ON sys.tb_sys_view USING btree (parent_id) WHERE deleted = false; +CREATE INDEX idx_sys_view_service ON sys.tb_sys_view USING btree (service) WHERE deleted = false; +CREATE INDEX idx_sys_view_type ON sys.tb_sys_view USING btree (view_type) WHERE deleted = false; +COMMENT ON TABLE sys.tb_sys_view IS '视图表(菜单表)'; COMMENT ON COLUMN sys.tb_sys_view.optsn IS '流水号'; COMMENT ON COLUMN sys.tb_sys_view.view_id IS '视图ID'; COMMENT ON COLUMN sys.tb_sys_view.name IS '视图名称'; @@ -180,7 +187,10 @@ COMMENT ON COLUMN sys.tb_sys_view.parent_id IS '父视图ID'; COMMENT ON COLUMN sys.tb_sys_view.url IS '视图URL'; COMMENT ON COLUMN sys.tb_sys_view.component IS '视图组件'; COMMENT ON COLUMN sys.tb_sys_view.icon IS '视图图标'; -COMMENT ON COLUMN sys.tb_sys_view.type IS '视图类型'; +COMMENT ON COLUMN sys.tb_sys_view.type IS '视图类型:0=目录 1=菜单页面 2=按钮'; +COMMENT ON COLUMN sys.tb_sys_view.view_type IS '页面类型:route=路由页面 iframe=嵌入页面'; +COMMENT ON COLUMN sys.tb_sys_view.iframe_url IS 'iframe URL(仅当view_type=iframe时有效)'; +COMMENT ON COLUMN sys.tb_sys_view.service IS '所属服务:platform=平台应用 bidding=招标应用 workcase=客服应用'; COMMENT ON COLUMN sys.tb_sys_view.layout IS '布局组件路径名称'; COMMENT ON COLUMN sys.tb_sys_view.order_num IS '视图排序号'; COMMENT ON COLUMN sys.tb_sys_view.description IS '视图描述'; diff --git a/urbanLifelineServ/.bin/database/postgres/sql/initAll.sql b/urbanLifelineServ/.bin/database/postgres/sql/initAll.sql index 4ba996b9..c0d81b5b 100644 --- a/urbanLifelineServ/.bin/database/postgres/sql/initAll.sql +++ b/urbanLifelineServ/.bin/database/postgres/sql/initAll.sql @@ -31,7 +31,7 @@ \i createTableBidding.sql -- 8. 智能客服业务模块 -\i createTableCustomerService.sql +\i createTableWorkcase.sql -- 9. 智能体模块(暂不启用) -- \i createTableAgent.sql diff --git a/urbanLifelineServ/.bin/database/postgres/sql/initDataPermission.sql b/urbanLifelineServ/.bin/database/postgres/sql/initDataPermission.sql index 3fc279fe..41802fc3 100644 --- a/urbanLifelineServ/.bin/database/postgres/sql/initDataPermission.sql +++ b/urbanLifelineServ/.bin/database/postgres/sql/initDataPermission.sql @@ -59,7 +59,7 @@ INSERT INTO sys.tb_sys_module ( ('MODULE-0006', 'module_bidding', '招投标', '招投标业务管理', 'system', NULL, now(), false), -('MODULE-0007', 'module_customer_service', '智能客服', '客服工单管理', +('MODULE-0007', 'module_workcase', '智能客服', '客服工单管理', 'system', NULL, now(), false); -- ============================= @@ -144,6 +144,18 @@ INSERT INTO sys.tb_sys_permission ( ('PERM-0401', 'perm_log_view', '日志查看', 'log:log:view', '查看系统日志', 'module_system', true, 'system', NULL, now(), false), ('PERM-0402', 'perm_log_export', '日志导出', 'log:log:export', '导出系统日志数据', 'module_system', + true, 'system', NULL, now(), false), + +-- 平台基础菜单访问权限(所有登录用户都有) +('PERM-0501', 'perm_platform_home', '工作台访问', 'platform:home:view', '访问平台工作台', 'module_system', + true, 'system', NULL, now(), false), +('PERM-0502', 'perm_platform_chat', 'AI助手访问', 'platform:chat:view', '访问AI助手', 'module_system', + true, 'system', NULL, now(), false), +('PERM-0503', 'perm_platform_bidding', '招标助手访问', 'platform:bidding:view', '访问招标助手(iframe)', 'module_bidding', + true, 'system', NULL, now(), false), +('PERM-0504', 'perm_platform_workcase', '泰豪小电访问', 'platform:workcase:view', '访问泰豪小电客服(iframe)', 'module_workcase', + true, 'system', NULL, now(), false), +('PERM-0505', 'perm_platform_workflow', '智能体编排访问', 'platform:workflow:view', '访问智能体编排(iframe)', 'module_system', true, 'system', NULL, now(), false); -- ============================= @@ -151,36 +163,84 @@ INSERT INTO sys.tb_sys_permission ( -- ============================= INSERT INTO sys.tb_sys_view ( optsn, view_id, name, parent_id, url, component, icon, type, - layout, order_num, description, creator, create_time, deleted + view_type, iframe_url, service, layout, order_num, description, + creator, create_time, deleted ) VALUES +-- ========================= +-- 平台应用菜单 (platform) +-- ========================= -- 一级菜单 -('VIEW-0001', 'view_system', '系统管理', NULL, '/system', NULL, 'Settings', 0, - 'MainLayout', 100, '系统管理菜单', 'system', now(), false), +('VIEW-P001', 'view_platform_home', '工作台', NULL, '/home', 'Home', 'Grid', 1, + 'route', NULL, 'platform', 'SidebarLayout', 10, '平台工作台首页', 'system', now(), false), -('VIEW-0002', 'view_business', '业务管理', NULL, '/business', NULL, 'Briefcase', 0, - 'MainLayout', 200, '业务管理菜单', 'system', now(), false), +('VIEW-P002', 'view_platform_chat', 'AI助手', NULL, '/chat', 'Chat', 'ChatDotRound', 1, + 'route', NULL, 'platform', 'SidebarLayout', 20, 'AI智能对话助手', 'system', now(), false), + +-- iframe 嵌入菜单 +('VIEW-P003', 'view_platform_bidding', '招标助手', NULL, NULL, NULL, 'Document', 1, + 'iframe', 'http://localhost:5002', 'platform', 'SidebarLayout', 30, '招标应用(iframe)', 'system', now(), false), + +('VIEW-P004', 'view_platform_workcase', '泰豪小电', NULL, NULL, NULL, 'Service', 1, + 'iframe', 'http://localhost:5003', 'platform', 'SidebarLayout', 40, '客服应用(iframe)', 'system', now(), false), + +('VIEW-P005', 'view_platform_workflow', '智能体编排', NULL, NULL, NULL, 'Connection', 1, + 'iframe', 'http://localhost:3000', 'platform', 'SidebarLayout', 50, 'Dify智能体编排(iframe)', 'system', now(), false), + +-- 系统管理目录 +('VIEW-P100', 'view_system', '系统管理', NULL, '/system', NULL, 'Settings', 0, + 'route', NULL, 'platform', 'SidebarLayout', 100, '系统管理目录', 'system', now(), false), -- 系统管理子菜单 -('VIEW-0101', 'view_user', '用户管理', 'view_system', '/system/user', 'system/UserList', 'Users', 1, - 'MainLayout', 10, '用户管理页面', 'system', now(), false), +('VIEW-P101', 'view_user', '用户管理', 'view_system', '/system/user', 'system/UserList', 'Users', 1, + 'route', NULL, 'platform', 'SidebarLayout', 10, '用户管理页面', 'system', now(), false), -('VIEW-0102', 'view_role', '角色管理', 'view_system', '/system/role', 'system/RoleList', 'Shield', 1, - 'MainLayout', 20, '角色管理页面', 'system', now(), false), +('VIEW-P102', 'view_role', '角色管理', 'view_system', '/system/role', 'system/RoleList', 'Shield', 1, + 'route', NULL, 'platform', 'SidebarLayout', 20, '角色管理页面', 'system', now(), false), -('VIEW-0103', 'view_dept', '部门管理', 'view_system', '/system/dept', 'system/DeptList', 'Building', 1, - 'MainLayout', 30, '部门管理页面', 'system', now(), false), +('VIEW-P103', 'view_dept', '部门管理', 'view_system', '/system/dept', 'system/DeptList', 'Building', 1, + 'route', NULL, 'platform', 'SidebarLayout', 30, '部门管理页面', 'system', now(), false), -('VIEW-0104', 'view_permission', '权限管理', 'view_system', '/system/permission', 'system/PermissionList', 'Lock', 1, - 'MainLayout', 40, '权限管理页面', 'system', now(), false), +('VIEW-P104', 'view_permission', '权限管理', 'view_system', '/system/permission', 'system/PermissionList', 'Lock', 1, + 'route', NULL, 'platform', 'SidebarLayout', 40, '权限管理页面', 'system', now(), false), -('VIEW-0105', 'view_config', '配置管理', 'view_system', '/system/config', 'system/ConfigList', 'Settings', 1, - 'MainLayout', 50, '配置管理页面', 'system', now(), false), +('VIEW-P105', 'view_config', '配置管理', 'view_system', '/system/config', 'system/ConfigList', 'Settings', 1, + 'route', NULL, 'platform', 'SidebarLayout', 50, '配置管理页面', 'system', now(), false), -('VIEW-0106', 'view_file', '文件管理', 'view_system', '/system/file', 'system/FileList', 'FileText', 1, - 'MainLayout', 60, '文件管理页面', 'system', now(), false), +('VIEW-P106', 'view_file', '文件管理', 'view_system', '/system/file', 'system/FileList', 'FileText', 1, + 'route', NULL, 'platform', 'SidebarLayout', 60, '文件管理页面', 'system', now(), false), -('VIEW-0107', 'view_message', '消息管理', 'view_system', '/system/message', 'system/MessageList', 'Mail', 1, - 'MainLayout', 70, '消息管理页面', 'system', now(), false); +('VIEW-P107', 'view_message', '消息管理', 'view_system', '/system/message', 'system/MessageList', 'Mail', 1, + 'route', NULL, 'platform', 'SidebarLayout', 70, '消息管理页面', 'system', now(), false), + +-- ========================= +-- 招标应用菜单 (bidding) +-- ========================= +('VIEW-B001', 'view_bidding_home', '首页', NULL, '/home', 'Home', 'House', 1, + 'route', NULL, 'bidding', 'DefaultLayout', 10, '招标应用首页', 'system', now(), false), + +('VIEW-B002', 'view_bidding_list', '招标列表', NULL, '/bidding/list', 'bidding/List', 'List', 1, + 'route', NULL, 'bidding', 'DefaultLayout', 20, '招标项目列表', 'system', now(), false), + +('VIEW-B003', 'view_bidding_detail', '招标详情', NULL, '/bidding/detail', 'bidding/Detail', 'Document', 1, + 'route', NULL, 'bidding', 'DefaultLayout', 30, '招标项目详情', 'system', now(), false), + +('VIEW-B004', 'view_bidding_offer', '投标管理', NULL, '/bidding/offer', 'bidding/Offer', 'Edit', 1, + 'route', NULL, 'bidding', 'DefaultLayout', 40, '投标管理页面', 'system', now(), false), + +-- ========================= +-- 客服应用菜单 (workcase) +-- ========================= +('VIEW-W001', 'view_workcase_home', '首页', NULL, '/home', 'Home', 'House', 1, + 'route', NULL, 'workcase', 'DefaultLayout', 10, '客服应用首页', 'system', now(), false), + +('VIEW-W002', 'view_workcase_list', '工单列表', NULL, '/workcase/list', 'workcase/List', 'Tickets', 1, + 'route', NULL, 'workcase', 'DefaultLayout', 20, '工单列表页面', 'system', now(), false), + +('VIEW-W003', 'view_workcase_detail', '工单详情', NULL, '/workcase/detail', 'workcase/Detail', 'Document', 1, + 'route', NULL, 'workcase', 'DefaultLayout', 30, '工单详情页面', 'system', now(), false), + +('VIEW-W004', 'view_workcase_chat', '智能客服', NULL, '/workcase/chat', 'workcase/Chat', 'ChatDotRound', 1, + 'route', NULL, 'workcase', 'DefaultLayout', 40, '智能客服聊天', 'system', now(), false); -- ============================= -- 6. 角色权限关联(超级管理员拥有所有权限) @@ -199,7 +259,7 @@ SELECT FROM sys.tb_sys_permission WHERE deleted = false; --- 系统管理员权限(除了用户删除外的系统管理权限) +-- 系统管理员权限(除了用户删除外的系统管理权限 + 所有平台基础菜单) INSERT INTO sys.tb_sys_role_permission ( optsn, role_id, permission_id, creator, dept_path, create_time, deleted ) @@ -214,73 +274,94 @@ SELECT FROM sys.tb_sys_permission WHERE deleted = false AND code NOT IN ('system:user:delete', 'system:role:delete', 'system:dept:delete') - AND module_id IN ('module_system', 'module_file', 'module_message', 'module_config'); + AND ( + module_id IN ('module_system', 'module_file', 'module_message', 'module_config', 'module_bidding', 'module_workcase') + OR code LIKE 'platform:%:view' -- 包含所有平台基础菜单权限 + ); --- 普通用户权限(基础查看和文件操作) +-- 普通用户权限(基础查看和文件操作 + 平台基础菜单访问) INSERT INTO sys.tb_sys_role_permission ( optsn, role_id, permission_id, creator, dept_path, create_time, deleted ) VALUES -('RP-U-0001', 'role_user', 'perm_user_view', 'system', NULL, now(), false), -('RP-U-0002', 'role_user', 'perm_file_view', 'system', NULL, now(), false), -('RP-U-0003', 'role_user', 'perm_file_upload', 'system', NULL, now(), false), -('RP-U-0004', 'role_user', 'perm_file_download', 'system', NULL, now(), false), -('RP-U-0005', 'role_user', 'perm_message_view', 'system', NULL, now(), false), -('RP-U-0006', 'role_user', 'perm_config_view', 'system', NULL, now(), false); +-- 平台基础菜单访问权限 +('RP-U-0001', 'role_user', 'perm_platform_home', 'system', NULL, now(), false), +('RP-U-0002', 'role_user', 'perm_platform_chat', 'system', NULL, now(), false), +('RP-U-0003', 'role_user', 'perm_platform_bidding', 'system', NULL, now(), false), +('RP-U-0004', 'role_user', 'perm_platform_workcase', 'system', NULL, now(), false), +('RP-U-0005', 'role_user', 'perm_platform_workflow', 'system', NULL, now(), false), +-- 系统功能权限 +('RP-U-0011', 'role_user', 'perm_user_view', 'system', NULL, now(), false), +('RP-U-0012', 'role_user', 'perm_file_view', 'system', NULL, now(), false), +('RP-U-0013', 'role_user', 'perm_file_upload', 'system', NULL, now(), false), +('RP-U-0014', 'role_user', 'perm_file_download', 'system', NULL, now(), false), +('RP-U-0015', 'role_user', 'perm_message_view', 'system', NULL, now(), false), +('RP-U-0016', 'role_user', 'perm_config_view', 'system', NULL, now(), false); --- 访客权限(仅查看) +-- 访客权限(仅查看 + 基础菜单访问) INSERT INTO sys.tb_sys_role_permission ( optsn, role_id, permission_id, creator, dept_path, create_time, deleted ) VALUES -('RP-G-0001', 'role_guest', 'perm_user_view', 'system', NULL, now(), false), -('RP-G-0002', 'role_guest', 'perm_file_view', 'system', NULL, now(), false), -('RP-G-0003', 'role_guest', 'perm_message_view', 'system', NULL, now(), false); +-- 平台基础菜单访问权限 +('RP-G-0001', 'role_guest', 'perm_platform_home', 'system', NULL, now(), false), +('RP-G-0002', 'role_guest', 'perm_platform_chat', 'system', NULL, now(), false), +-- 系统功能权限(仅查看) +('RP-G-0011', 'role_guest', 'perm_user_view', 'system', NULL, now(), false), +('RP-G-0012', 'role_guest', 'perm_file_view', 'system', NULL, now(), false), +('RP-G-0013', 'role_guest', 'perm_message_view', 'system', NULL, now(), false); -- ============================= -- 7. 视图权限关联 -- ============================= --- 将视图与对应模块的权限关联 +-- 将视图与对应模块的权限关联(使用新的 view_id) INSERT INTO sys.tb_sys_view_permission ( optsn, view_id, permission_id, creator, dept_path, create_time, deleted ) VALUES --- 用户管理视图关联用户权限 -('VP-0001', 'view_user', 'perm_user_view', 'system', NULL, now(), false), -('VP-0002', 'view_user', 'perm_user_create', 'system', NULL, now(), false), -('VP-0003', 'view_user', 'perm_user_edit', 'system', NULL, now(), false), -('VP-0004', 'view_user', 'perm_user_delete', 'system', NULL, now(), false), -('VP-0005', 'view_user', 'perm_user_export', 'system', NULL, now(), false), +-- 平台基础菜单权限关联(所有登录用户都可访问) +('VP-P001', 'VIEW-P001', 'perm_platform_home', 'system', NULL, now(), false), +('VP-P002', 'VIEW-P002', 'perm_platform_chat', 'system', NULL, now(), false), +('VP-P003', 'VIEW-P003', 'perm_platform_bidding', 'system', NULL, now(), false), +('VP-P004', 'VIEW-P004', 'perm_platform_workcase', 'system', NULL, now(), false), +('VP-P005', 'VIEW-P005', 'perm_platform_workflow', 'system', NULL, now(), false), --- 角色管理视图关联角色权限 -('VP-0011', 'view_role', 'perm_role_view', 'system', NULL, now(), false), -('VP-0012', 'view_role', 'perm_role_create', 'system', NULL, now(), false), -('VP-0013', 'view_role', 'perm_role_edit', 'system', NULL, now(), false), -('VP-0014', 'view_role', 'perm_role_delete', 'system', NULL, now(), false), -('VP-0015', 'view_role', 'perm_role_export', 'system', NULL, now(), false), +-- 用户管理视图关联用户权限(VIEW-P101) +('VP-0001', 'VIEW-P101', 'perm_user_view', 'system', NULL, now(), false), +('VP-0002', 'VIEW-P101', 'perm_user_create', 'system', NULL, now(), false), +('VP-0003', 'VIEW-P101', 'perm_user_edit', 'system', NULL, now(), false), +('VP-0004', 'VIEW-P101', 'perm_user_delete', 'system', NULL, now(), false), +('VP-0005', 'VIEW-P101', 'perm_user_export', 'system', NULL, now(), false), --- 部门管理视图关联部门权限 -('VP-0021', 'view_dept', 'perm_dept_view', 'system', NULL, now(), false), -('VP-0022', 'view_dept', 'perm_dept_create', 'system', NULL, now(), false), -('VP-0023', 'view_dept', 'perm_dept_edit', 'system', NULL, now(), false), -('VP-0024', 'view_dept', 'perm_dept_delete', 'system', NULL, now(), false), -('VP-0025', 'view_dept', 'perm_dept_export', 'system', NULL, now(), false), +-- 角色管理视图关联角色权限(VIEW-P102) +('VP-0011', 'VIEW-P102', 'perm_role_view', 'system', NULL, now(), false), +('VP-0012', 'VIEW-P102', 'perm_role_create', 'system', NULL, now(), false), +('VP-0013', 'VIEW-P102', 'perm_role_edit', 'system', NULL, now(), false), +('VP-0014', 'VIEW-P102', 'perm_role_delete', 'system', NULL, now(), false), +('VP-0015', 'VIEW-P102', 'perm_role_export', 'system', NULL, now(), false), --- 权限管理视图关联权限管理权限 -('VP-0031', 'view_permission', 'perm_permission_view', 'system', NULL, now(), false), -('VP-0032', 'view_permission', 'perm_permission_manage', 'system', NULL, now(), false), +-- 部门管理视图关联部门权限(VIEW-P103) +('VP-0021', 'VIEW-P103', 'perm_dept_view', 'system', NULL, now(), false), +('VP-0022', 'VIEW-P103', 'perm_dept_create', 'system', NULL, now(), false), +('VP-0023', 'VIEW-P103', 'perm_dept_edit', 'system', NULL, now(), false), +('VP-0024', 'VIEW-P103', 'perm_dept_delete', 'system', NULL, now(), false), +('VP-0025', 'VIEW-P103', 'perm_dept_export', 'system', NULL, now(), false), --- 配置管理视图关联配置权限 -('VP-0041', 'view_config', 'perm_config_view', 'system', NULL, now(), false), -('VP-0042', 'view_config', 'perm_config_edit', 'system', NULL, now(), false), -('VP-0043', 'view_config', 'perm_config_export', 'system', NULL, now(), false), +-- 权限管理视图关联权限管理权限(VIEW-P104) +('VP-0031', 'VIEW-P104', 'perm_permission_view', 'system', NULL, now(), false), +('VP-0032', 'VIEW-P104', 'perm_permission_manage', 'system', NULL, now(), false), --- 文件管理视图关联文件权限 -('VP-0051', 'view_file', 'perm_file_view', 'system', NULL, now(), false), -('VP-0052', 'view_file', 'perm_file_upload', 'system', NULL, now(), false), -('VP-0053', 'view_file', 'perm_file_download', 'system', NULL, now(), false), -('VP-0054', 'view_file', 'perm_file_delete', 'system', NULL, now(), false), -('VP-0055', 'view_file', 'perm_file_export', 'system', NULL, now(), false), +-- 配置管理视图关联配置权限(VIEW-P105) +('VP-0041', 'VIEW-P105', 'perm_config_view', 'system', NULL, now(), false), +('VP-0042', 'VIEW-P105', 'perm_config_edit', 'system', NULL, now(), false), +('VP-0043', 'VIEW-P105', 'perm_config_export', 'system', NULL, now(), false), --- 消息管理视图关联消息权限 -('VP-0061', 'view_message', 'perm_message_view', 'system', NULL, now(), false), -('VP-0062', 'view_message', 'perm_message_send', 'system', NULL, now(), false), -('VP-0063', 'view_message', 'perm_message_manage', 'system', NULL, now(), false), -('VP-0064', 'view_message', 'perm_message_export', 'system', NULL, now(), false); +-- 文件管理视图关联文件权限(VIEW-P106) +('VP-0051', 'VIEW-P106', 'perm_file_view', 'system', NULL, now(), false), +('VP-0052', 'VIEW-P106', 'perm_file_upload', 'system', NULL, now(), false), +('VP-0053', 'VIEW-P106', 'perm_file_download', 'system', NULL, now(), false), +('VP-0054', 'VIEW-P106', 'perm_file_delete', 'system', NULL, now(), false), +('VP-0055', 'VIEW-P106', 'perm_file_export', 'system', NULL, now(), false), + +-- 消息管理视图关联消息权限(VIEW-P107) +('VP-0061', 'VIEW-P107', 'perm_message_view', 'system', NULL, now(), false), +('VP-0062', 'VIEW-P107', 'perm_message_send', 'system', NULL, now(), false), +('VP-0063', 'VIEW-P107', 'perm_message_manage', 'system', NULL, now(), false), +('VP-0064', 'VIEW-P107', 'perm_message_export', 'system', NULL, now(), false); diff --git a/urbanLifelineServ/auth/src/main/resources/application.yml b/urbanLifelineServ/auth/src/main/resources/application.yml index 26597671..4c3c285f 100644 --- a/urbanLifelineServ/auth/src/main/resources/application.yml +++ b/urbanLifelineServ/auth/src/main/resources/application.yml @@ -12,7 +12,7 @@ urban-lifeline: - /** # 认证服务的所有接口都放行 security: aes: - secret-key: 1234567890qwer + secret-key: MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTI= # Base64 编码,32字节(256位) # ================== Spring ================== spring: application: diff --git a/urbanLifelineServ/common/common-dto/src/main/java/org/xyzh/common/dto/sys/TbSysViewDTO.java b/urbanLifelineServ/common/common-dto/src/main/java/org/xyzh/common/dto/sys/TbSysViewDTO.java index 1991bcf6..0ee70783 100644 --- a/urbanLifelineServ/common/common-dto/src/main/java/org/xyzh/common/dto/sys/TbSysViewDTO.java +++ b/urbanLifelineServ/common/common-dto/src/main/java/org/xyzh/common/dto/sys/TbSysViewDTO.java @@ -36,9 +36,18 @@ public class TbSysViewDTO extends BaseDTO { @Schema(description = "图标") private String icon; - @Schema(description = "类型") + @Schema(description = "类型:0=目录 1=菜单页面 2=按钮") private Integer type; + @Schema(description = "页面类型:route=路由页面 iframe=嵌入页面") + private String viewType; + + @Schema(description = "iframe URL(仅当viewType=iframe时有效)") + private String iframeUrl; + + @Schema(description = "所属服务:platform=平台应用 bidding=招标应用 workcase=客服应用") + private String service; + @Schema(description = "布局") private String layout; diff --git a/urbanLifelineServ/gateway/src/main/resources/application.yml b/urbanLifelineServ/gateway/src/main/resources/application.yml index 88c78a9b..1d5cef06 100644 --- a/urbanLifelineServ/gateway/src/main/resources/application.yml +++ b/urbanLifelineServ/gateway/src/main/resources/application.yml @@ -37,9 +37,9 @@ spring: - id: auth-service uri: lb://auth-service predicates: - - Path=/auth/** + - Path=/urban-lifeline/auth/** filters: - - RewritePath=/auth/(?.*), /urban-lifeline/auth/$\{segment} + # 不需要重写,直接转发保持原路径 - name: RequestRateLimiter args: redis-rate-limiter.replenishRate: 100 @@ -49,73 +49,55 @@ spring: - id: system-service uri: lb://system-service predicates: - - Path=/system/** - filters: - - RewritePath=/system/(?.*), /urban-lifeline/system/$\{segment} + - Path=/urban-lifeline/system/** # ==================== 日志服务路由 ==================== - id: log-service uri: lb://log-service predicates: - - Path=/log/** - filters: - - RewritePath=/log/(?.*), /urban-lifeline/log/$\{segment} + - Path=/urban-lifeline/log/** # ==================== 文件服务路由 ==================== - id: file-service uri: lb://file-service predicates: - - Path=/file/** - filters: - - RewritePath=/file/(?.*), /urban-lifeline/file/$\{segment} + - Path=/urban-lifeline/file/** # ==================== 消息服务路由 ==================== - id: message-service uri: lb://message-service predicates: - - Path=/message/** - filters: - - RewritePath=/message/(?.*), /urban-lifeline/message/$\{segment} + - Path=/urban-lifeline/message/** # ==================== 招投标服务路由 ==================== - id: bidding-service uri: lb://bidding-service predicates: - - Path=/bidding/** - filters: - - RewritePath=/bidding/(?.*), /urban-lifeline/bidding/$\{segment} + - Path=/urban-lifeline/bidding/** # ==================== 平台服务路由 ==================== - id: platform-service uri: lb://platform-service predicates: - - Path=/platform/** - filters: - - RewritePath=/platform/(?.*), /urban-lifeline/platform/$\{segment} + - Path=/urban-lifeline/platform/** # ==================== 工单服务路由 ==================== - id: workcase-service uri: lb://workcase-service predicates: - - Path=/workcase/** - filters: - - RewritePath=/workcase/(?.*), /urban-lifeline/workcase/$\{segment} + - Path=/urban-lifeline/workcase/** # ==================== 定时任务服务路由 ==================== - id: crontab-service uri: lb://crontab-service predicates: - - Path=/crontab/** - filters: - - RewritePath=/crontab/(?.*), /urban-lifeline/crontab/$\{segment} + - Path=/urban-lifeline/crontab/** # ==================== AI Agent 服务路由 ==================== - id: agent-service uri: lb://agent-service predicates: - - Path=/agent/** - filters: - - RewritePath=/agent/(?.*), /urban-lifeline/agent/$\{segment} + - Path=/urban-lifeline/agent/** # 全局跨域配置 globalcors: @@ -175,7 +157,7 @@ auth: - /error security: aes: - secret-key: 1234567890qwer + secret-key: MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTI= # Base64 编码,32字节(256位) # Actuator 监控端点 management: endpoints: diff --git a/urbanLifelineServ/system/src/main/resources/mapper/view/TbSysViewMapper.xml b/urbanLifelineServ/system/src/main/resources/mapper/view/TbSysViewMapper.xml index 90ca9ce5..5dbcba88 100644 --- a/urbanLifelineServ/system/src/main/resources/mapper/view/TbSysViewMapper.xml +++ b/urbanLifelineServ/system/src/main/resources/mapper/view/TbSysViewMapper.xml @@ -12,6 +12,9 @@ + + + @@ -29,7 +32,7 @@ - view_id, name, parent_id, url, component, icon, type, layout, order_num, description, + view_id, name, parent_id, url, component, icon, type, view_type, iframe_url, service, layout, order_num, description, optsn, creator, updater, dept_path, remark, create_time, update_time, delete_time, deleted @@ -44,11 +47,14 @@ layout, order_num, optsn, - + parent_id, url, component, icon, + view_type, + iframe_url, + service, description, creator, dept_path, @@ -72,6 +78,9 @@ #{url}, #{component}, #{icon}, + #{viewType}, + #{iframeUrl}, + #{service}, #{description}, #{creator}, #{deptPath}, @@ -105,6 +114,15 @@ type = #{type}, + + view_type = #{viewType}, + + + iframe_url = #{iframeUrl}, + + + service = #{service}, + layout = #{layout}, @@ -168,6 +186,12 @@ AND type = #{filter.type} + + AND view_type = #{filter.viewType} + + + AND service = #{filter.service} + AND dept_path LIKE CONCAT(#{filter.deptPath}, '%') @@ -194,6 +218,12 @@ AND type = #{filter.type} + + AND view_type = #{filter.viewType} + + + AND service = #{filter.service} + AND dept_path LIKE CONCAT(#{filter.deptPath}, '%') @@ -220,6 +250,12 @@ AND type = #{filter.type} + + AND view_type = #{filter.viewType} + + + AND service = #{filter.service} + AND dept_path LIKE CONCAT(#{filter.deptPath}, '%') diff --git a/urbanLifelineWeb/README.md b/urbanLifelineWeb/README.md index 4bf4f0c0..6be7dfc7 100644 --- a/urbanLifelineWeb/README.md +++ b/urbanLifelineWeb/README.md @@ -1,6 +1,8 @@ # Urban Lifeline Web 微前端项目 -基于 Import Maps 的微前端架构,包含共享模块和多个业务应用。 +基于 **@module-federation/vite** 的微前端架构,包含共享模块和多个业务应用。 + +> ✨ **v2.0 升级**:已从 `@originjs/vite-plugin-federation` 迁移到官方维护的 `@module-federation/vite`,获得更好的开发体验和稳定性! ## 📦 项目结构 @@ -19,40 +21,43 @@ urbanLifelineWeb/ ### 1. 安装依赖 ```bash -# 一键安装所有包的依赖 -npm run install:all +# 使用 pnpm 安装(推荐) +pnpm install -# 或单独安装 -npm run install:shared -npm run install:platform -npm run install:bidding -npm run install:workcase +# 或使用 install.bat 脚本 +install.bat ``` ### 2. 启动开发服务器 ```bash -# 同时启动所有服务 -npm run dev:all +# 方式1: 使用启动脚本(Windows,推荐) +start-all.bat -# 或单独启动 -npm run dev:shared # http://localhost:5000 -npm run dev:platform # http://localhost:5001 -npm run dev:bidding # http://localhost:5002 -npm run dev:workcase # http://localhost:5003 +# 方式2: 使用 pnpm 并行启动所有服务 +pnpm run dev + +# 方式3: 手动启动(需要两个终端) +# 终端1 - 启动 shared +cd packages/shared +pnpm run dev # http://localhost:5000 + +# 终端2 - 启动 platform +cd packages/platform +pnpm run dev # http://localhost:5001 ``` ### 3. 构建生产版本 ```bash # 构建所有应用 -npm run build:all +pnpm run build # 或单独构建 -npm run build:shared -npm run build:platform -npm run build:bidding -npm run build:workcase +cd packages/shared && pnpm run build +cd packages/platform && pnpm run build +cd packages/bidding && pnpm run build +cd packages/workcase && pnpm run build ``` ## 🌐 端口分配 @@ -73,24 +78,144 @@ npm run build:workcase - **路由**: Vue Router 4.5 - **工具库**: VueUse -## 📝 开发说明 +## 📝 Module Federation 配置 -### Import Maps +### Shared 配置 (packages/shared/vite.config.ts) -本项目使用 Import Maps 实现模块共享: +```typescript +import { federation } from '@module-federation/vite' -```html - ``` +### 优势 + +- ✅ **开发模式直接支持**:无需构建,直接 dev 即可 +- ✅ **完整的热更新**:修改 shared 代码自动更新到 platform +- ✅ **自动路径处理**:无需关心 shared 内部的 `@/` 路径 +- ✅ **依赖去重**:vue、element-plus 等只加载一次 +- ✅ **企业级稳定**:官方维护,支持 Vite 6 + +## 🎯 开发工作流 + +### 日常开发 + +1. **启动服务**(每天开始) + ```bash + # 使用脚本一键启动 + start-all.bat + + # 或手动启动 + cd packages/shared && pnpm run dev # 终端1 + cd packages/platform && pnpm run dev # 终端2 + ``` + +2. **修改代码** + - 修改 shared 组件 → 保存 → 自动热更新 ✨ + - 修改 platform 页面 → 保存 → 自动热更新 ✨ + +3. **结束开发** + - 按 Ctrl+C 停止所有服务 + +### 添加新的共享模块 + +1. **在 shared 中创建组件** + ```bash + # 例如创建新组件 + packages/shared/src/components/mynew/MyNewComponent.vue + ``` + +2. **在 shared/vite.config.ts 中暴露** + ```typescript + exposes: { + './MyNewComponent': './src/components/mynew/MyNewComponent.vue' + } + ``` + +3. **在 platform 中使用** + ```typescript + import MyNewComponent from 'shared/MyNewComponent' + ``` + ### API 代理 所有应用的 `/api` 请求会代理到后端服务 `http://localhost:8080` @@ -101,7 +226,8 @@ npm run build:workcase ## 🔥 注意事项 -1. **启动顺序**: 建议先启动 `shared` 服务,再启动其他应用 -2. **端口占用**: 确保 5000-5003 端口未被占用 -3. **Node 版本**: 建议使用 Node.js 18+ -4. **依赖安装**: 首次运行前必须执行 `npm run install:all` +1. **包管理器**: 必须使用 pnpm(项目使用 pnpm workspace) +2. **启动顺序**: 必须先启动 `shared` 服务(5000端口),再启动其他应用 +3. **端口占用**: 确保 5000-5003 端口未被占用,shared 使用 strictPort 模式 +4. **Node 版本**: 建议使用 Node.js 18+ +5. **Module Federation**: remoteEntry.js 路径为 `http://localhost:5000/remoteEntry.js`(不是 /assets/) diff --git a/urbanLifelineWeb/package-lock.json b/urbanLifelineWeb/package-lock.json index 0780fdc5..f6092b79 100644 --- a/urbanLifelineWeb/package-lock.json +++ b/urbanLifelineWeb/package-lock.json @@ -429,22 +429,6 @@ "node": ">=10" } }, - "node_modules/@dcloudio/uni-cli-shared": { - "version": "2.0.2-4080420251103001", - "resolved": "https://registry.npmmirror.com/@dcloudio/uni-cli-shared/-/uni-cli-shared-2.0.2-4080420251103001.tgz", - "integrity": "sha512-HZOtk1aufvntxfm8tkT4dFrWbLWaG8KetbOyDzlRQ/bEgPur0FQiQZux0KeLjq6HWGB/YgXDqsfoFp+rs3u28g==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "escape-string-regexp": "^4.0.0", - "fast-glob": "^3.2.11", - "fs-extra": "^10.0.0", - "glob-escape": "^0.0.2", - "hash-sum": "^1.0.2", - "postcss-urlrewrite": "^0.2.2", - "strip-json-comments": "^2.0.1" - } - }, "node_modules/@element-plus/icons-vue": { "version": "2.3.2", "resolved": "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.3.2.tgz", @@ -1073,42 +1057,57 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "node_modules/@module-federation/error-codes": { + "version": "0.21.6", + "resolved": "https://registry.npmmirror.com/@module-federation/error-codes/-/error-codes-0.21.6.tgz", + "integrity": "sha512-MLJUCQ05KnoVl8xd6xs9a5g2/8U+eWmVxg7xiBMeR0+7OjdWUbHwcwgVFatRIwSZvFgKHfWEiI7wsU1q1XbTRQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@module-federation/runtime": { + "version": "0.21.6", + "resolved": "https://registry.npmmirror.com/@module-federation/runtime/-/runtime-0.21.6.tgz", + "integrity": "sha512-+caXwaQqwTNh+CQqyb4mZmXq7iEemRDrTZQGD+zyeH454JAYnJ3s/3oDFizdH6245pk+NiqDyOOkHzzFQorKhQ==", "dev": true, "license": "MIT", "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" + "@module-federation/error-codes": "0.21.6", + "@module-federation/runtime-core": "0.21.6", + "@module-federation/sdk": "0.21.6" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "node_modules/@module-federation/runtime-core": { + "version": "0.21.6", + "resolved": "https://registry.npmmirror.com/@module-federation/runtime-core/-/runtime-core-0.21.6.tgz", + "integrity": "sha512-5Hd1Y5qp5lU/aTiK66lidMlM/4ji2gr3EXAtJdreJzkY+bKcI5+21GRcliZ4RAkICmvdxQU5PHPL71XmNc7Lsw==", "dev": true, "license": "MIT", "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" + "@module-federation/error-codes": "0.21.6", + "@module-federation/sdk": "0.21.6" + } + }, + "node_modules/@module-federation/sdk": { + "version": "0.21.6", + "resolved": "https://registry.npmmirror.com/@module-federation/sdk/-/sdk-0.21.6.tgz", + "integrity": "sha512-x6hARETb8iqHVhEsQBysuWpznNZViUh84qV2yE7AD+g7uIzHKiYdoWqj10posbo5XKf/147qgWDzKZoKoEP2dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@module-federation/vite": { + "version": "1.9.3", + "resolved": "https://registry.npmmirror.com/@module-federation/vite/-/vite-1.9.3.tgz", + "integrity": "sha512-MV6XI3FX6okEMJ7FdmvFmYuu7DygRoLljKT8atrBwFhlttsgBbswpqMj4P4Fs/X+pFmbIi/ntFzVhsrG0qQnGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@module-federation/runtime": "^0.21.6", + "@module-federation/sdk": "^0.21.6", + "@rollup/pluginutils": "^5.1.0", + "defu": "^6.1.4", + "estree-walker": "^2", + "magic-string": "^0.30.11", + "pathe": "^1.1.2" } }, "node_modules/@parcel/watcher": { @@ -1451,30 +1450,26 @@ "license": "MIT" }, "node_modules/@rollup/pluginutils": { - "version": "4.2.1", - "resolved": "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", - "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", + "version": "5.3.0", + "resolved": "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", + "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", "dev": true, "license": "MIT", "dependencies": { - "estree-walker": "^2.0.1", - "picomatch": "^2.2.2" + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" }, "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/@rollup/pluginutils/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" + "node": ">=14.0.0" }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, "node_modules/@rollup/rollup-android-arm-eabi": { @@ -1796,27 +1791,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/fs-extra": { - "version": "8.1.5", - "resolved": "https://registry.npmmirror.com/@types/fs-extra/-/fs-extra-8.1.5.tgz", - "integrity": "sha512-0dzKcwO+S8s2kuF5Z9oUWatQJj5Uq/iqphEtE3GQJVRRYm/tD1LglU2UnXi2A8jLq5umkGouOXOR9y0n613ZwQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmmirror.com/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, "node_modules/@types/lodash": { "version": "4.17.21", "resolved": "https://registry.npmmirror.com/@types/lodash/-/lodash-4.17.21.tgz", @@ -1832,13 +1806,6 @@ "@types/lodash": "*" } }, - "node_modules/@types/minimatch": { - "version": "5.1.2", - "resolved": "https://registry.npmmirror.com/@types/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/node": { "version": "22.19.1", "resolved": "https://registry.npmmirror.com/@types/node/-/node-22.19.1.tgz", @@ -2165,7 +2132,6 @@ "version": "1.3.8", "resolved": "https://registry.npmmirror.com/accepts/-/accepts-1.3.8.tgz", "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dev": true, "license": "MIT", "dependencies": { "mime-types": "~2.1.34", @@ -2212,19 +2178,8 @@ "version": "1.1.1", "resolved": "https://registry.npmmirror.com/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true, "license": "MIT" }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/async-validator": { "version": "4.2.5", "resolved": "https://registry.npmmirror.com/async-validator/-/async-validator-4.2.5.tgz", @@ -2237,54 +2192,6 @@ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "license": "MIT" }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/autoprefixer": { - "version": "10.4.22", - "resolved": "https://registry.npmmirror.com/autoprefixer/-/autoprefixer-10.4.22.tgz", - "integrity": "sha512-ARe0v/t9gO28Bznv6GgqARmVqcWOV3mfgUPn9becPHMiD3o9BwlRgaeccZnwTpZ7Zwqrm+c1sUSsMxIzQzc8Xg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "browserslist": "^4.27.0", - "caniuse-lite": "^1.0.30001754", - "fraction.js": "^5.3.4", - "normalize-range": "^0.1.2", - "picocolors": "^1.1.1", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, "node_modules/axios": { "version": "1.13.2", "resolved": "https://registry.npmmirror.com/axios/-/axios-1.13.2.tgz", @@ -2317,7 +2224,6 @@ "version": "1.20.4", "resolved": "https://registry.npmmirror.com/body-parser/-/body-parser-1.20.4.tgz", "integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==", - "dev": true, "license": "MIT", "dependencies": { "bytes": "~3.1.2", @@ -2342,7 +2248,6 @@ "version": "2.6.9", "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, "license": "MIT", "dependencies": { "ms": "2.0.0" @@ -2352,7 +2257,6 @@ "version": "2.0.0", "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, "license": "MIT" }, "node_modules/brace-expansion": { @@ -2371,6 +2275,7 @@ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "license": "MIT", + "optional": true, "dependencies": { "fill-range": "^7.1.1" }, @@ -2423,22 +2328,11 @@ "version": "3.1.2", "resolved": "https://registry.npmmirror.com/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" } }, - "node_modules/cac": { - "version": "6.7.14", - "resolved": "https://registry.npmmirror.com/cac/-/cac-6.7.14.tgz", - "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/call-bind-apply-helpers": { "version": "1.0.2", "resolved": "https://registry.npmmirror.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", @@ -2456,7 +2350,6 @@ "version": "1.0.4", "resolved": "https://registry.npmmirror.com/call-bound/-/call-bound-1.0.4.tgz", "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "dev": true, "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", @@ -2571,13 +2464,6 @@ "dev": true, "license": "MIT" }, - "node_modules/colorette": { - "version": "1.4.0", - "resolved": "https://registry.npmmirror.com/colorette/-/colorette-1.4.0.tgz", - "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", - "dev": true, - "license": "MIT" - }, "node_modules/colorjs.io": { "version": "0.5.2", "resolved": "https://registry.npmmirror.com/colorjs.io/-/colorjs.io-0.5.2.tgz", @@ -2633,7 +2519,6 @@ "version": "0.5.4", "resolved": "https://registry.npmmirror.com/content-disposition/-/content-disposition-0.5.4.tgz", "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dev": true, "license": "MIT", "dependencies": { "safe-buffer": "5.2.1" @@ -2646,7 +2531,6 @@ "version": "1.0.5", "resolved": "https://registry.npmmirror.com/content-type/-/content-type-1.0.5.tgz", "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -2663,7 +2547,6 @@ "version": "0.7.2", "resolved": "https://registry.npmmirror.com/cookie/-/cookie-0.7.2.tgz", "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -2673,9 +2556,21 @@ "version": "1.0.7", "resolved": "https://registry.npmmirror.com/cookie-signature/-/cookie-signature-1.0.7.tgz", "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", - "dev": true, "license": "MIT" }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmmirror.com/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.6.tgz", @@ -2691,19 +2586,6 @@ "node": ">= 8" } }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, - "license": "MIT", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/csstype": { "version": "3.2.3", "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.2.3.tgz", @@ -2741,6 +2623,13 @@ } } }, + "node_modules/defu": { + "version": "6.1.4", + "resolved": "https://registry.npmmirror.com/defu/-/defu-6.1.4.tgz", + "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", + "dev": true, + "license": "MIT" + }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -2754,7 +2643,6 @@ "version": "2.0.0", "resolved": "https://registry.npmmirror.com/depd/-/depd-2.0.0.tgz", "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -2770,7 +2658,6 @@ "version": "1.2.0", "resolved": "https://registry.npmmirror.com/destroy/-/destroy-1.2.0.tgz", "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.8", @@ -2791,19 +2678,6 @@ "node": ">=0.10" } }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmmirror.com/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmmirror.com/dunder-proto/-/dunder-proto-1.0.1.tgz", @@ -2829,7 +2703,6 @@ "version": "1.1.1", "resolved": "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true, "license": "MIT" }, "node_modules/electron-to-chromium": { @@ -2917,7 +2790,6 @@ "version": "2.0.0", "resolved": "https://registry.npmmirror.com/encodeurl/-/encodeurl-2.0.0.tgz", "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -3022,346 +2894,6 @@ "@esbuild/win32-x64": "0.25.12" } }, - "node_modules/esbuild-android-64": { - "version": "0.14.54", - "resolved": "https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz", - "integrity": "sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-android-arm64": { - "version": "0.14.54", - "resolved": "https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz", - "integrity": "sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-darwin-64": { - "version": "0.14.54", - "resolved": "https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz", - "integrity": "sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-darwin-arm64": { - "version": "0.14.54", - "resolved": "https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz", - "integrity": "sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-freebsd-64": { - "version": "0.14.54", - "resolved": "https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz", - "integrity": "sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-freebsd-arm64": { - "version": "0.14.54", - "resolved": "https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz", - "integrity": "sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-32": { - "version": "0.14.54", - "resolved": "https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz", - "integrity": "sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-64": { - "version": "0.14.54", - "resolved": "https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz", - "integrity": "sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-arm": { - "version": "0.14.54", - "resolved": "https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz", - "integrity": "sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-arm64": { - "version": "0.14.54", - "resolved": "https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz", - "integrity": "sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-mips64le": { - "version": "0.14.54", - "resolved": "https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz", - "integrity": "sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-ppc64le": { - "version": "0.14.54", - "resolved": "https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz", - "integrity": "sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-riscv64": { - "version": "0.14.54", - "resolved": "https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz", - "integrity": "sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-s390x": { - "version": "0.14.54", - "resolved": "https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz", - "integrity": "sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-netbsd-64": { - "version": "0.14.54", - "resolved": "https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz", - "integrity": "sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-openbsd-64": { - "version": "0.14.54", - "resolved": "https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz", - "integrity": "sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-sunos-64": { - "version": "0.14.54", - "resolved": "https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz", - "integrity": "sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-32": { - "version": "0.14.54", - "resolved": "https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz", - "integrity": "sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-64": { - "version": "0.14.54", - "resolved": "https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz", - "integrity": "sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-arm64": { - "version": "0.14.54", - "resolved": "https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz", - "integrity": "sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, "node_modules/escalade": { "version": "3.2.0", "resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.2.0.tgz", @@ -3376,22 +2908,8 @@ "version": "1.0.3", "resolved": "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz", "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true, "license": "MIT" }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/estree-walker": { "version": "2.0.2", "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz", @@ -3402,7 +2920,6 @@ "version": "1.8.1", "resolved": "https://registry.npmmirror.com/etag/-/etag-1.8.1.tgz", "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -3412,7 +2929,6 @@ "version": "4.22.1", "resolved": "https://registry.npmmirror.com/express/-/express-4.22.1.tgz", "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==", - "dev": true, "license": "MIT", "dependencies": { "accepts": "~1.3.8", @@ -3459,7 +2975,6 @@ "version": "2.6.9", "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, "license": "MIT", "dependencies": { "ms": "2.0.0" @@ -3469,36 +2984,8 @@ "version": "2.0.0", "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, "license": "MIT" }, - "node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fastq": { - "version": "1.19.1", - "resolved": "https://registry.npmmirror.com/fastq/-/fastq-1.19.1.tgz", - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, "node_modules/fdir": { "version": "6.5.0", "resolved": "https://registry.npmmirror.com/fdir/-/fdir-6.5.0.tgz", @@ -3523,6 +3010,7 @@ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "license": "MIT", + "optional": true, "dependencies": { "to-regex-range": "^5.0.1" }, @@ -3534,7 +3022,6 @@ "version": "1.3.2", "resolved": "https://registry.npmmirror.com/finalhandler/-/finalhandler-1.3.2.tgz", "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==", - "dev": true, "license": "MIT", "dependencies": { "debug": "2.6.9", @@ -3553,7 +3040,6 @@ "version": "2.6.9", "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, "license": "MIT", "dependencies": { "ms": "2.0.0" @@ -3563,7 +3049,6 @@ "version": "2.0.0", "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, "license": "MIT" }, "node_modules/follow-redirects": { @@ -3623,58 +3108,20 @@ "version": "0.2.0", "resolved": "https://registry.npmmirror.com/forwarded/-/forwarded-0.2.0.tgz", "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" } }, - "node_modules/fraction.js": { - "version": "5.3.4", - "resolved": "https://registry.npmmirror.com/fraction.js/-/fraction.js-5.3.4.tgz", - "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/rawify" - } - }, "node_modules/fresh": { "version": "0.5.2", "resolved": "https://registry.npmmirror.com/fresh/-/fresh-0.5.2.tgz", "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" } }, - "node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true, - "license": "ISC" - }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz", @@ -3777,95 +3224,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/glob-escape": { - "version": "0.0.2", - "resolved": "https://registry.npmmirror.com/glob-escape/-/glob-escape-0.0.2.tgz", - "integrity": "sha512-L/cXYz8x7qer1HAyUQ+mbjcUsJVdpRxpAf7CwqHoNBs9vTpABlGfNN4tzkDxt+u3Z7ZncVyKlCNPtzb0R/7WbA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/globby": { - "version": "10.0.1", - "resolved": "https://registry.npmmirror.com/globby/-/globby-10.0.1.tgz", - "integrity": "sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/glob": "^7.1.1", - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.0.3", - "glob": "^7.1.3", - "ignore": "^5.1.1", - "merge2": "^1.2.3", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/globby/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/globby/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/globby/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/gopd": { "version": "1.2.0", "resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz", @@ -3922,13 +3280,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/hash-sum": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/hash-sum/-/hash-sum-1.0.2.tgz", - "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==", - "dev": true, - "license": "MIT" - }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmmirror.com/hasown/-/hasown-2.0.2.tgz", @@ -3955,7 +3306,6 @@ "version": "2.0.1", "resolved": "https://registry.npmmirror.com/http-errors/-/http-errors-2.0.1.tgz", "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", - "dev": true, "license": "MIT", "dependencies": { "depd": "~2.0.0", @@ -3976,7 +3326,6 @@ "version": "0.4.24", "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" @@ -3985,16 +3334,6 @@ "node": ">=0.10.0" } }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmmirror.com/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, "node_modules/immutable": { "version": "5.1.4", "resolved": "https://registry.npmmirror.com/immutable/-/immutable-5.1.4.tgz", @@ -4002,30 +3341,16 @@ "dev": true, "license": "MIT" }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dev": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true, "license": "ISC" }, "node_modules/ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz", "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.10" @@ -4053,6 +3378,7 @@ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, "license": "MIT", + "optional": true, "engines": { "node": ">=0.10.0" } @@ -4073,6 +3399,7 @@ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "license": "MIT", + "optional": true, "dependencies": { "is-extglob": "^2.1.1" }, @@ -4086,20 +3413,11 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, "license": "MIT", + "optional": true, "engines": { "node": ">=0.12.0" } }, - "node_modules/is-plain-object": { - "version": "3.0.1", - "resolved": "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-3.0.1.tgz", - "integrity": "sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz", @@ -4156,26 +3474,6 @@ "node": ">=6" } }, - "node_modules/jsonc-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmmirror.com/jsonc-parser/-/jsonc-parser-3.3.1.tgz", - "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz", @@ -4231,7 +3529,6 @@ "version": "0.3.0", "resolved": "https://registry.npmmirror.com/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -4247,27 +3544,15 @@ "version": "1.0.3", "resolved": "https://registry.npmmirror.com/merge-descriptors/-/merge-descriptors-1.0.3.tgz", "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", - "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, "node_modules/methods": { "version": "1.1.2", "resolved": "https://registry.npmmirror.com/methods/-/methods-1.1.2.tgz", "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -4279,6 +3564,7 @@ "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "license": "MIT", + "optional": true, "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -4293,6 +3579,7 @@ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, "license": "MIT", + "optional": true, "engines": { "node": ">=8.6" }, @@ -4300,19 +3587,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/mime": { - "version": "2.6.0", - "resolved": "https://registry.npmmirror.com/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "dev": true, - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz", @@ -4360,18 +3634,10 @@ "node": ">=16 || 14 >=14.17" } }, - "node_modules/module-alias": { - "version": "2.2.3", - "resolved": "https://registry.npmmirror.com/module-alias/-/module-alias-2.2.3.tgz", - "integrity": "sha512-23g5BFj4zdQL/b6tor7Ji+QY4pEfNH784BMslY9Qb0UnJWRAt+lQGLYmRaM0KDBwIG23ffEBELhZDP2rhi9f/Q==", - "dev": true, - "license": "MIT" - }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, "license": "MIT" }, "node_modules/muggle-string": { @@ -4403,7 +3669,6 @@ "version": "0.6.3", "resolved": "https://registry.npmmirror.com/negotiator/-/negotiator-0.6.3.tgz", "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -4430,27 +3695,25 @@ "dev": true, "license": "MIT" }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmmirror.com/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/normalize-wheel-es": { "version": "1.2.0", "resolved": "https://registry.npmmirror.com/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz", "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==", "license": "BSD-3-Clause" }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/object-inspect": { "version": "1.13.4", "resolved": "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.13.4.tgz", "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -4474,7 +3737,6 @@ "version": "2.4.1", "resolved": "https://registry.npmmirror.com/on-finished/-/on-finished-2.4.1.tgz", "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, "license": "MIT", "dependencies": { "ee-first": "1.1.1" @@ -4483,16 +3745,6 @@ "node": ">= 0.8" } }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmmirror.com/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, "node_modules/package-json-from-dist": { "version": "1.0.1", "resolved": "https://registry.npmmirror.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", @@ -4504,7 +3756,6 @@ "version": "1.3.3", "resolved": "https://registry.npmmirror.com/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -4517,16 +3768,6 @@ "dev": true, "license": "MIT" }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz", @@ -4572,18 +3813,14 @@ "version": "0.1.12", "resolved": "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-0.1.12.tgz", "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", - "dev": true, "license": "MIT" }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } + "license": "MIT" }, "node_modules/picocolors": { "version": "1.1.1", @@ -4654,58 +3891,10 @@ "node": "^10 || ^12 || >=14" } }, - "node_modules/postcss-helpers": { - "version": "0.3.3", - "resolved": "https://registry.npmmirror.com/postcss-helpers/-/postcss-helpers-0.3.3.tgz", - "integrity": "sha512-VumiUcrpbxGlTBNQj6fUOkb/HNRUk/xYz8bNlhgVOdvk3yWEy4B+0nlDUZZM9mTVZ5bJoxUy7WT6z/4E7oMTgw==", - "dev": true, - "license": "MIT", - "dependencies": { - "urijs": "^1.18.12" - }, - "engines": { - "node": ">=0.12.9" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-urlrewrite": { - "version": "0.2.2", - "resolved": "https://registry.npmmirror.com/postcss-urlrewrite/-/postcss-urlrewrite-0.2.2.tgz", - "integrity": "sha512-DxPSgykgHjoV4Z+ygvq2C5HkiuiKQQD74xpoNQSQuyi8zab9nODVtNKfnCN6BEv9VZrjpOGLGAf8BDvgG6EtHg==", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss-helpers": "^0.3.2" - }, - "engines": { - "node": ">=0.12.9" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true, - "license": "MIT" - }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmmirror.com/proxy-addr/-/proxy-addr-2.0.7.tgz", "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dev": true, "license": "MIT", "dependencies": { "forwarded": "0.2.0", @@ -4725,7 +3914,6 @@ "version": "6.14.0", "resolved": "https://registry.npmmirror.com/qs/-/qs-6.14.0.tgz", "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", - "dev": true, "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.1.0" @@ -4737,32 +3925,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmmirror.com/range-parser/-/range-parser-1.2.1.tgz", "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -4772,7 +3938,6 @@ "version": "2.5.3", "resolved": "https://registry.npmmirror.com/raw-body/-/raw-body-2.5.3.tgz", "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", - "dev": true, "license": "MIT", "dependencies": { "bytes": "~3.1.2", @@ -4829,17 +3994,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, "node_modules/rimraf": { "version": "5.0.10", "resolved": "https://registry.npmmirror.com/rimraf/-/rimraf-5.0.10.tgz", @@ -4898,82 +4052,6 @@ "fsevents": "~2.3.2" } }, - "node_modules/rollup-plugin-copy": { - "version": "3.5.0", - "resolved": "https://registry.npmmirror.com/rollup-plugin-copy/-/rollup-plugin-copy-3.5.0.tgz", - "integrity": "sha512-wI8D5dvYovRMx/YYKtUNt3Yxaw4ORC9xo6Gt9t22kveWz1enG9QrhVlagzwrxSC455xD1dHMKhIJkbsQ7d48BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/fs-extra": "^8.0.1", - "colorette": "^1.1.0", - "fs-extra": "^8.1.0", - "globby": "10.0.1", - "is-plain-object": "^3.0.0" - }, - "engines": { - "node": ">=8.3" - } - }, - "node_modules/rollup-plugin-copy/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/rollup-plugin-copy/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/rollup-plugin-copy/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmmirror.com/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, "node_modules/rxjs": { "version": "7.8.2", "resolved": "https://registry.npmmirror.com/rxjs/-/rxjs-7.8.2.tgz", @@ -4988,7 +4066,6 @@ "version": "5.2.1", "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, "funding": [ { "type": "github", @@ -5009,7 +4086,6 @@ "version": "2.1.2", "resolved": "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true, "license": "MIT" }, "node_modules/sass": { @@ -5440,7 +4516,6 @@ "version": "0.19.1", "resolved": "https://registry.npmmirror.com/send/-/send-0.19.1.tgz", "integrity": "sha512-p4rRk4f23ynFEfcD9LA0xRYngj+IyGiEYyqqOak8kaN0TvNmuxC2dcVeBn62GpCeR2CpWqyHCNScTP91QbAVFg==", - "dev": true, "license": "MIT", "dependencies": { "debug": "2.6.9", @@ -5465,7 +4540,6 @@ "version": "2.6.9", "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, "license": "MIT", "dependencies": { "ms": "2.0.0" @@ -5475,14 +4549,12 @@ "version": "2.0.0", "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, "license": "MIT" }, "node_modules/send/node_modules/http-errors": { "version": "2.0.0", "resolved": "https://registry.npmmirror.com/http-errors/-/http-errors-2.0.0.tgz", "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, "license": "MIT", "dependencies": { "depd": "2.0.0", @@ -5499,7 +4571,6 @@ "version": "1.6.0", "resolved": "https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz", "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, "license": "MIT", "bin": { "mime": "cli.js" @@ -5512,7 +4583,6 @@ "version": "2.0.1", "resolved": "https://registry.npmmirror.com/statuses/-/statuses-2.0.1.tgz", "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -5522,7 +4592,6 @@ "version": "1.16.2", "resolved": "https://registry.npmmirror.com/serve-static/-/serve-static-1.16.2.tgz", "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", - "dev": true, "license": "MIT", "dependencies": { "encodeurl": "~2.0.0", @@ -5538,7 +4607,6 @@ "version": "2.6.9", "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, "license": "MIT", "dependencies": { "ms": "2.0.0" @@ -5548,14 +4616,12 @@ "version": "2.0.0", "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, "license": "MIT" }, "node_modules/serve-static/node_modules/http-errors": { "version": "2.0.0", "resolved": "https://registry.npmmirror.com/http-errors/-/http-errors-2.0.0.tgz", "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, "license": "MIT", "dependencies": { "depd": "2.0.0", @@ -5572,7 +4638,6 @@ "version": "1.6.0", "resolved": "https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz", "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, "license": "MIT", "bin": { "mime": "cli.js" @@ -5585,7 +4650,6 @@ "version": "0.19.0", "resolved": "https://registry.npmmirror.com/send/-/send-0.19.0.tgz", "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", - "dev": true, "license": "MIT", "dependencies": { "debug": "2.6.9", @@ -5610,7 +4674,6 @@ "version": "1.0.2", "resolved": "https://registry.npmmirror.com/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -5620,7 +4683,6 @@ "version": "2.0.1", "resolved": "https://registry.npmmirror.com/statuses/-/statuses-2.0.1.tgz", "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -5630,7 +4692,6 @@ "version": "1.2.0", "resolved": "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true, "license": "ISC" }, "node_modules/shebang-command": { @@ -5673,7 +4734,6 @@ "version": "1.1.0", "resolved": "https://registry.npmmirror.com/side-channel/-/side-channel-1.1.0.tgz", "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", - "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -5693,7 +4753,6 @@ "version": "1.0.0", "resolved": "https://registry.npmmirror.com/side-channel-list/-/side-channel-list-1.0.0.tgz", "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", - "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -5710,7 +4769,6 @@ "version": "1.0.1", "resolved": "https://registry.npmmirror.com/side-channel-map/-/side-channel-map-1.0.1.tgz", "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", - "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -5729,7 +4787,6 @@ "version": "1.0.2", "resolved": "https://registry.npmmirror.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", - "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -5758,16 +4815,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz", @@ -5781,7 +4828,6 @@ "version": "2.0.2", "resolved": "https://registry.npmmirror.com/statuses/-/statuses-2.0.2.tgz", "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -5845,16 +4891,6 @@ "node": ">=8" } }, - "node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-8.1.1.tgz", @@ -5930,6 +4966,7 @@ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "license": "MIT", + "optional": true, "dependencies": { "is-number": "^7.0.0" }, @@ -5941,7 +4978,6 @@ "version": "1.0.1", "resolved": "https://registry.npmmirror.com/toidentifier/-/toidentifier-1.0.1.tgz", "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.6" @@ -5968,7 +5004,6 @@ "version": "1.6.18", "resolved": "https://registry.npmmirror.com/type-is/-/type-is-1.6.18.tgz", "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, "license": "MIT", "dependencies": { "media-typer": "0.3.0", @@ -6005,21 +5040,10 @@ "dev": true, "license": "MIT" }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmmirror.com/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -6056,25 +5080,10 @@ "browserslist": ">= 4.21.0" } }, - "node_modules/urijs": { - "version": "1.19.11", - "resolved": "https://registry.npmmirror.com/urijs/-/urijs-1.19.11.tgz", - "integrity": "sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true, - "license": "MIT" - }, "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmmirror.com/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4.0" @@ -6091,7 +5100,6 @@ "version": "1.1.2", "resolved": "https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz", "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -6274,10 +5282,6 @@ "node": ">= 8" } }, - "node_modules/workcase-wechat": { - "resolved": "packages/workcase_wechat", - "link": true - }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -6315,13 +5319,6 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true, - "license": "ISC" - }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmmirror.com/y18n/-/y18n-5.0.8.tgz", @@ -6402,6 +5399,7 @@ "vue-router": "^4.5.0" }, "devDependencies": { + "@module-federation/vite": "^1.0.10", "@types/node": "^22.0.0", "@vitejs/plugin-vue": "^5.2.1", "@vitejs/plugin-vue-jsx": "^4.1.1", @@ -6415,13 +5413,15 @@ "version": "1.0.0", "dependencies": { "@element-plus/icons-vue": "^2.3.2", + "cors": "^2.8.5", "element-plus": "^2.12.0", + "express": "^4.18.2", "ofetch": "^1.4.1", "vue": "^3.5.13", "vue-router": "^4.5.0" }, "devDependencies": { - "@originjs/vite-plugin-federation": "^1.3.6", + "@module-federation/vite": "^1.9.3", "@types/node": "^20.10.0", "@vitejs/plugin-vue": "^5.2.1", "@vitejs/plugin-vue-jsx": "^4.1.1", @@ -6436,19 +5436,6 @@ "vue": "^3.5.13" } }, - "packages/shared/node_modules/@originjs/vite-plugin-federation": { - "version": "1.4.1", - "dev": true, - "license": "MulanPSL-2.0", - "dependencies": { - "estree-walker": "^3.0.2", - "magic-string": "^0.27.0" - }, - "engines": { - "node": ">=14.0.0", - "pnpm": ">=7.0.1" - } - }, "packages/shared/node_modules/@types/node": { "version": "20.19.25", "resolved": "https://registry.npmmirror.com/@types/node/-/node-20.19.25.tgz", @@ -6781,14 +5768,6 @@ "node": ">=0.8.0" } }, - "packages/shared/node_modules/estree-walker": { - "version": "3.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0" - } - }, "packages/shared/node_modules/for-each": { "version": "0.3.5", "dev": true, @@ -7261,17 +6240,6 @@ "node": ">=4" } }, - "packages/shared/node_modules/magic-string": { - "version": "0.27.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.13" - }, - "engines": { - "node": ">=12" - } - }, "packages/shared/node_modules/memorystream": { "version": "0.3.1", "dev": true, @@ -7944,6 +6912,7 @@ "packages/workcase_wechat": { "name": "workcase-wechat", "version": "1.0.0", + "extraneous": true, "dependencies": { "vue": "^3.0.0" }, @@ -7952,177 +6921,6 @@ "@dcloudio/vite-plugin-uni": "latest", "vite": "latest" } - }, - "packages/workcase_wechat/node_modules/@dcloudio/vite-plugin-uni": { - "version": "3.0.0-alpha-3000020210521001", - "resolved": "https://registry.npmmirror.com/@dcloudio/vite-plugin-uni/-/vite-plugin-uni-3.0.0-alpha-3000020210521001.tgz", - "integrity": "sha512-wJn71UxgqH55aFEiw0NOGFbEIGpAdp3NPiSPhMTqtJMhZSkQkfN3KnLEWm+/CFBVlqA2TCmjehFeO9U3Z3JQKQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@rollup/pluginutils": "^4.1.0", - "autoprefixer": "^10.2.5", - "cac": "^6.7.3", - "chalk": "^4.1.1", - "debug": "^4.3.1", - "estree-walker": "^2.0.1", - "express": "^4.17.1", - "fs-extra": "^9.0.1", - "jsonc-parser": "^3.0.0", - "mime": "^2.5.2", - "module-alias": "^2.2.2", - "postcss-selector-parser": "^6.0.4", - "rollup-plugin-copy": "^3.4.0", - "slash": "^3.0.0" - }, - "bin": { - "uni": "bin/uni.js" - }, - "peerDependencies": { - "@vitejs/plugin-vue": "^1.2.2", - "@vue/compiler-sfc": "^3.1.0-beta.3", - "@vue/server-renderer": "^3.1.0-beta.3", - "@vue/shared": "^3.1.0-beta.3", - "vite": "^2.3.0" - } - }, - "packages/workcase_wechat/node_modules/@esbuild/linux-loong64": { - "version": "0.14.54", - "resolved": "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz", - "integrity": "sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "packages/workcase_wechat/node_modules/@vitejs/plugin-vue": { - "version": "1.10.2", - "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-1.10.2.tgz", - "integrity": "sha512-/QJ0Z9qfhAFtKRY+r57ziY4BSbGUTGsPRMpB/Ron3QPwBZM4OZAZHdTa4a8PafCwU5DTatXG8TMDoP8z+oDqJw==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "vite": "^2.5.10" - } - }, - "packages/workcase_wechat/node_modules/esbuild": { - "version": "0.14.54", - "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.14.54.tgz", - "integrity": "sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/linux-loong64": "0.14.54", - "esbuild-android-64": "0.14.54", - "esbuild-android-arm64": "0.14.54", - "esbuild-darwin-64": "0.14.54", - "esbuild-darwin-arm64": "0.14.54", - "esbuild-freebsd-64": "0.14.54", - "esbuild-freebsd-arm64": "0.14.54", - "esbuild-linux-32": "0.14.54", - "esbuild-linux-64": "0.14.54", - "esbuild-linux-arm": "0.14.54", - "esbuild-linux-arm64": "0.14.54", - "esbuild-linux-mips64le": "0.14.54", - "esbuild-linux-ppc64le": "0.14.54", - "esbuild-linux-riscv64": "0.14.54", - "esbuild-linux-s390x": "0.14.54", - "esbuild-netbsd-64": "0.14.54", - "esbuild-openbsd-64": "0.14.54", - "esbuild-sunos-64": "0.14.54", - "esbuild-windows-32": "0.14.54", - "esbuild-windows-64": "0.14.54", - "esbuild-windows-arm64": "0.14.54" - } - }, - "packages/workcase_wechat/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "packages/workcase_wechat/node_modules/rollup": { - "version": "2.77.3", - "resolved": "https://registry.npmmirror.com/rollup/-/rollup-2.77.3.tgz", - "integrity": "sha512-/qxNTG7FbmefJWoeeYJFbHehJ2HNWnjkAFRKzWN/45eNBBF/r8lo992CwcJXEzyVxs5FmfId+vTSTQDb+bxA+g==", - "dev": true, - "license": "MIT", - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=10.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "packages/workcase_wechat/node_modules/vite": { - "version": "2.9.18", - "resolved": "https://registry.npmmirror.com/vite/-/vite-2.9.18.tgz", - "integrity": "sha512-sAOqI5wNM9QvSEE70W3UGMdT8cyEn0+PmJMTFvTB8wB0YbYUWw3gUbY62AOyrXosGieF2htmeLATvNxpv/zNyQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "esbuild": "^0.14.27", - "postcss": "^8.4.13", - "resolve": "^1.22.0", - "rollup": ">=2.59.0 <2.78.0" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": ">=12.2.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - }, - "peerDependencies": { - "less": "*", - "sass": "*", - "stylus": "*" - }, - "peerDependenciesMeta": { - "less": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - } - } } } } diff --git a/urbanLifelineWeb/packages/bidding/vite.config.ts b/urbanLifelineWeb/packages/bidding/vite.config.ts index cf436296..9097c969 100644 --- a/urbanLifelineWeb/packages/bidding/vite.config.ts +++ b/urbanLifelineWeb/packages/bidding/vite.config.ts @@ -8,7 +8,21 @@ const __filename = fileURLToPath(import.meta.url) const __dirname = dirname(__filename) export default defineConfig({ - plugins: [vue(), vueJsx()], + plugins: [ + vue({ + script: { + defineModel: true, + propsDestructure: true + } + }), + vueJsx() + ], + + define: { + __VUE_OPTIONS_API__: true, + __VUE_PROD_DEVTOOLS__: true, + __VUE_PROD_HYDRATION_MISMATCH_DETAILS__: true + }, resolve: { alias: { diff --git a/urbanLifelineWeb/packages/platform/.__mf__temp/platform/localSharedImportMap.js b/urbanLifelineWeb/packages/platform/.__mf__temp/platform/localSharedImportMap.js new file mode 100644 index 00000000..f8c1e80b --- /dev/null +++ b/urbanLifelineWeb/packages/platform/.__mf__temp/platform/localSharedImportMap.js @@ -0,0 +1,130 @@ + +// Windows temporarily needs this file, https://github.com/module-federation/vite/issues/68 + + import {loadShare} from "@module-federation/runtime"; + const importMap = { + + "element-plus": async () => { + let pkg = await import("__mf__virtual/platform__prebuild__element_mf_2_plus__prebuild__.js"); + return pkg; + } + , + "vue": async () => { + let pkg = await import("__mf__virtual/platform__prebuild__vue__prebuild__.js"); + return pkg; + } + , + "vue-router": async () => { + let pkg = await import("__mf__virtual/platform__prebuild__vue_mf_2_router__prebuild__.js"); + return pkg; + } + + } + const usedShared = { + + "element-plus": { + name: "element-plus", + version: "2.12.0", + scope: ["default"], + loaded: false, + from: "platform", + async get () { + if (false) { + throw new Error(`Shared module '${"element-plus"}' must be provided by host`); + } + usedShared["element-plus"].loaded = true + const {"element-plus": pkgDynamicImport} = importMap + const res = await pkgDynamicImport() + const exportModule = {...res} + // All npm packages pre-built by vite will be converted to esm + Object.defineProperty(exportModule, "__esModule", { + value: true, + enumerable: false + }) + return function () { + return exportModule + } + }, + shareConfig: { + singleton: false, + requiredVersion: "^2.12.0", + + } + } + , + "vue": { + name: "vue", + version: "3.5.25", + scope: ["default"], + loaded: false, + from: "platform", + async get () { + if (false) { + throw new Error(`Shared module '${"vue"}' must be provided by host`); + } + usedShared["vue"].loaded = true + const {"vue": pkgDynamicImport} = importMap + const res = await pkgDynamicImport() + const exportModule = {...res} + // All npm packages pre-built by vite will be converted to esm + Object.defineProperty(exportModule, "__esModule", { + value: true, + enumerable: false + }) + return function () { + return exportModule + } + }, + shareConfig: { + singleton: false, + requiredVersion: "^3.5.25", + + } + } + , + "vue-router": { + name: "vue-router", + version: "4.6.3", + scope: ["default"], + loaded: false, + from: "platform", + async get () { + if (false) { + throw new Error(`Shared module '${"vue-router"}' must be provided by host`); + } + usedShared["vue-router"].loaded = true + const {"vue-router": pkgDynamicImport} = importMap + const res = await pkgDynamicImport() + const exportModule = {...res} + // All npm packages pre-built by vite will be converted to esm + Object.defineProperty(exportModule, "__esModule", { + value: true, + enumerable: false + }) + return function () { + return exportModule + } + }, + shareConfig: { + singleton: false, + requiredVersion: "^4.6.3", + + } + } + + } + const usedRemotes = [ + { + entryGlobalName: "http://localhost:5000/remoteEntry.js", + name: "shared", + type: "var", + entry: "http://localhost:5000/remoteEntry.js", + shareScope: "default", + } + + ] + export { + usedShared, + usedRemotes + } + \ No newline at end of file diff --git a/urbanLifelineWeb/packages/platform/.env.example b/urbanLifelineWeb/packages/platform/.env.example new file mode 100644 index 00000000..7f7cbc86 --- /dev/null +++ b/urbanLifelineWeb/packages/platform/.env.example @@ -0,0 +1,9 @@ +# Platform 应用环境变量示例 +# 复制此文件为 .env.local 或 .env.production 使用 + +# API 基础地址(Gateway 地址) +VITE_API_BASE_URL=http://localhost:8180 + +# AES 加密密钥(可选,默认使用配置文件中的密钥) +# 生产环境建议通过环境变量配置 +# VUE_APP_AES_SECRET_KEY=1234567890qwer diff --git a/urbanLifelineWeb/packages/platform/index.html b/urbanLifelineWeb/packages/platform/index.html index ea947660..7c36ba4d 100644 --- a/urbanLifelineWeb/packages/platform/index.html +++ b/urbanLifelineWeb/packages/platform/index.html @@ -9,22 +9,8 @@ - - - - - - + +
diff --git a/urbanLifelineWeb/packages/platform/package.json b/urbanLifelineWeb/packages/platform/package.json index 2bc8f391..e7d3f995 100644 --- a/urbanLifelineWeb/packages/platform/package.json +++ b/urbanLifelineWeb/packages/platform/package.json @@ -21,6 +21,7 @@ "@types/node": "^22.0.0", "@vitejs/plugin-vue": "^5.2.1", "@vitejs/plugin-vue-jsx": "^4.1.1", + "@module-federation/vite": "^1.9.3", "typescript": "^5.7.2", "vite": "^6.0.3", "vue-tsc": "^2.2.0" diff --git a/urbanLifelineWeb/packages/platform/pnpm-lock.yaml b/urbanLifelineWeb/packages/platform/pnpm-lock.yaml index 6b03b240..5a1c1253 100644 --- a/urbanLifelineWeb/packages/platform/pnpm-lock.yaml +++ b/urbanLifelineWeb/packages/platform/pnpm-lock.yaml @@ -28,6 +28,9 @@ dependencies: version: 4.6.3(vue@3.5.25) devDependencies: + '@module-federation/vite': + specifier: ^1.9.3 + version: 1.9.3 '@types/node': specifier: ^22.0.0 version: 22.19.1 @@ -596,10 +599,61 @@ packages: '@jridgewell/sourcemap-codec': 1.5.5 dev: true + /@module-federation/error-codes@0.21.6: + resolution: {integrity: sha512-MLJUCQ05KnoVl8xd6xs9a5g2/8U+eWmVxg7xiBMeR0+7OjdWUbHwcwgVFatRIwSZvFgKHfWEiI7wsU1q1XbTRQ==} + dev: true + + /@module-federation/runtime-core@0.21.6: + resolution: {integrity: sha512-5Hd1Y5qp5lU/aTiK66lidMlM/4ji2gr3EXAtJdreJzkY+bKcI5+21GRcliZ4RAkICmvdxQU5PHPL71XmNc7Lsw==} + dependencies: + '@module-federation/error-codes': 0.21.6 + '@module-federation/sdk': 0.21.6 + dev: true + + /@module-federation/runtime@0.21.6: + resolution: {integrity: sha512-+caXwaQqwTNh+CQqyb4mZmXq7iEemRDrTZQGD+zyeH454JAYnJ3s/3oDFizdH6245pk+NiqDyOOkHzzFQorKhQ==} + dependencies: + '@module-federation/error-codes': 0.21.6 + '@module-federation/runtime-core': 0.21.6 + '@module-federation/sdk': 0.21.6 + dev: true + + /@module-federation/sdk@0.21.6: + resolution: {integrity: sha512-x6hARETb8iqHVhEsQBysuWpznNZViUh84qV2yE7AD+g7uIzHKiYdoWqj10posbo5XKf/147qgWDzKZoKoEP2dw==} + dev: true + + /@module-federation/vite@1.9.3: + resolution: {integrity: sha512-MV6XI3FX6okEMJ7FdmvFmYuu7DygRoLljKT8atrBwFhlttsgBbswpqMj4P4Fs/X+pFmbIi/ntFzVhsrG0qQnGQ==} + dependencies: + '@module-federation/runtime': 0.21.6 + '@module-federation/sdk': 0.21.6 + '@rollup/pluginutils': 5.3.0 + defu: 6.1.4 + estree-walker: 2.0.2 + magic-string: 0.30.21 + pathe: 1.1.2 + transitivePeerDependencies: + - rollup + dev: true + /@rolldown/pluginutils@1.0.0-beta.53: resolution: {integrity: sha512-vENRlFU4YbrwVqNDZ7fLvy+JR1CRkyr01jhSiDpE1u6py3OMzQfztQU2jxykW3ALNxO4kSlqIDeYyD0Y9RcQeQ==} dev: true + /@rollup/pluginutils@5.3.0: + resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + dependencies: + '@types/estree': 1.0.8 + estree-walker: 2.0.2 + picomatch: 4.0.3 + dev: true + /@rollup/rollup-android-arm-eabi@4.53.3: resolution: {integrity: sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w==} cpu: [arm] @@ -1146,6 +1200,10 @@ packages: ms: 2.1.3 dev: true + /defu@6.1.4: + resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + dev: true + /delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} @@ -1464,6 +1522,10 @@ packages: resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} dev: true + /pathe@1.1.2: + resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + dev: true + /picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} diff --git a/urbanLifelineWeb/packages/platform/public/avatar.svg b/urbanLifelineWeb/packages/platform/public/avatar.svg new file mode 100644 index 00000000..b537ce1d --- /dev/null +++ b/urbanLifelineWeb/packages/platform/public/avatar.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/urbanLifelineWeb/packages/platform/public/favicon.svg b/urbanLifelineWeb/packages/platform/public/favicon.svg new file mode 100644 index 00000000..0064d6fc --- /dev/null +++ b/urbanLifelineWeb/packages/platform/public/favicon.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/urbanLifelineWeb/packages/platform/public/logo.jpg b/urbanLifelineWeb/packages/platform/public/logo.jpg new file mode 100644 index 00000000..18b5da66 Binary files /dev/null and b/urbanLifelineWeb/packages/platform/public/logo.jpg differ diff --git a/urbanLifelineWeb/packages/platform/src/App.vue b/urbanLifelineWeb/packages/platform/src/App.vue new file mode 100644 index 00000000..6898edb1 --- /dev/null +++ b/urbanLifelineWeb/packages/platform/src/App.vue @@ -0,0 +1,27 @@ + + + + + diff --git a/urbanLifelineWeb/packages/platform/src/config/README.md b/urbanLifelineWeb/packages/platform/src/config/README.md new file mode 100644 index 00000000..41b691da --- /dev/null +++ b/urbanLifelineWeb/packages/platform/src/config/README.md @@ -0,0 +1,254 @@ +# Platform 应用配置说明 + +## AES 加密配置 + +### 密钥配置 + +**配置文件**:`src/config/index.ts` + +```typescript +export const AES_SECRET_KEY = '1234567890qwer' +``` + +**注意事项**: +1. ✅ 密钥已配置为 `1234567890qwer`,与后端保持一致 +2. ⚠️ 该密钥与后端 `application.yml` 中的 `security.aes.secret-key` 必须相同 +3. 🔒 生产环境应从环境变量或配置中心获取,不要硬编码 + +### 对应后端配置 + +**Gateway** (`gateway/src/main/resources/application.yml`): +```yaml +security: + aes: + secret-key: 1234567890qwer +``` + +**Auth Service** (`auth/src/main/resources/application.yml`): +```yaml +security: + aes: + secret-key: 1234567890qwer +``` + +## 使用示例 + +### 1. 登录时加密密码 + +```typescript +import { authAPI } from '@shared/api/auth' +import { getAesInstance } from '@shared/utils' + +async function handleLogin(username: string, password: string) { + try { + // 1. 获取 AES 加密实例 + const aes = getAesInstance() + + // 2. 加密密码 + const encryptedPassword = await aes.encryptPassword(password) + + // 3. 发送登录请求 + const response = await authAPI.login({ + username, + password: encryptedPassword, // 使用加密后的密码 + loginType: 'password' + }) + + if (response.data.success) { + console.log('登录成功') + // 保存 token 等操作 + } + } catch (error) { + console.error('登录失败:', error) + } +} +``` + +### 2. 注册时加密手机号和密码 + +```typescript +import { authAPI } from '@shared/api/auth' +import { getAesInstance } from '@shared/utils' + +async function handleRegister(phone: string, password: string, smsCode: string, sessionId: string) { + try { + const aes = getAesInstance() + + // 加密敏感信息 + const encryptedPhone = await aes.encryptPhone(phone) + const encryptedPassword = await aes.encryptPassword(password) + + // 发送注册请求 + const response = await authAPI.register({ + registerType: 'phone', + phone: encryptedPhone, + password: encryptedPassword, + confirmPassword: encryptedPassword, + smsCode, + smsSessionId: sessionId + }) + + if (response.data.success) { + console.log('注册成功') + } + } catch (error) { + console.error('注册失败:', error) + } +} +``` + +### 3. 数据脱敏显示 + +```typescript +import { AesUtils } from '@shared/utils' + +// 显示脱敏手机号 +const phone = '13812345678' +const maskedPhone = AesUtils.maskPhone(phone) +console.log(maskedPhone) // 输出:138****5678 + +// 显示脱敏身份证号 +const idCard = '110101199001011234' +const maskedIdCard = AesUtils.maskIdCard(idCard) +console.log(maskedIdCard) // 输出:110101********1234 +``` + +## 初始化流程 + +### 应用启动时自动初始化 + +**文件**:`src/main.ts` + +```typescript +import { AES_SECRET_KEY } from './config' +import { initAesEncrypt } from '@shared/utils' + +async function initApp() { + // 初始化 AES 加密工具 + await initAesEncrypt(AES_SECRET_KEY) + + // ... 其他初始化操作 +} + +initApp() +``` + +### 初始化状态检查 + +```typescript +import { getAesInstance } from '@shared/utils' + +try { + const aes = getAesInstance() + console.log('✅ AES 加密工具已初始化') +} catch (error) { + console.error('❌ AES 加密工具未初始化:', error) +} +``` + +## 加密流程图 + +``` +用户输入密码 + ↓ +前端 AES 加密 (1234567890qwer) + ↓ +发送加密后的密码 + ↓ +Gateway (不解密,直接转发) + ↓ +Auth Service 接收 + ↓ +AES 解密 (1234567890qwer) + ↓ +BCrypt 再次加密 + ↓ +存入数据库 +``` + +## 安全建议 + +### 开发环境 +- ✅ 使用固定密钥 `1234567890qwer` +- ✅ 密钥在代码中配置 + +### 生产环境 +- 🔒 从环境变量获取密钥 +- 🔒 使用配置中心(Nacos) +- 🔒 定期轮换密钥 +- 🔒 密钥长度至少 32 字符 + +### 示例:从环境变量获取 + +```typescript +// 生产环境配置 +export const AES_SECRET_KEY = process.env.VUE_APP_AES_SECRET_KEY || '1234567890qwer' +``` + +## 故障排查 + +### 问题:登录时提示"密码错误" + +**可能原因**:前后端密钥不一致 + +**排查步骤**: +1. 检查前端配置:`src/config/index.ts` 中的 `AES_SECRET_KEY` +2. 检查后端配置:`application.yml` 中的 `security.aes.secret-key` +3. 确保两者完全一致 + +**解决方案**: +```bash +# 前端 +export const AES_SECRET_KEY = '1234567890qwer' + +# 后端 +security: + aes: + secret-key: 1234567890qwer +``` + +### 问题:"AES 加密工具未初始化" + +**原因**:`initAesEncrypt()` 未被调用 + +**解决**:检查 `main.ts` 中是否正确调用初始化函数 + +### 问题:加密后的数据无法解密 + +**可能原因**: +1. 密钥不正确 +2. 数据被篡改 +3. Base64 编码问题 + +**调试方法**: +```typescript +const aes = getAesInstance() +const original = 'test123' +const encrypted = await aes.encrypt(original) +const decrypted = await aes.decrypt(encrypted) +console.log(original === decrypted) // 应该输出 true +``` + +## API 参考 + +### 配置项 + +| 配置项 | 类型 | 默认值 | 说明 | +|--------|------|--------|------| +| `AES_SECRET_KEY` | `string` | `'1234567890qwer'` | AES 加密密钥 | +| `API_BASE_URL` | `string` | `'http://localhost:8180'` | API 基础地址 | +| `APP_CONFIG.name` | `string` | `'泰豪电源 AI 数智化平台'` | 应用名称 | +| `APP_CONFIG.version` | `string` | `'1.0.0'` | 应用版本 | + +### 环境变量 + +| 变量名 | 说明 | 示例 | +|--------|------|------| +| `VITE_API_BASE_URL` | API 基础地址 | `https://api.example.com` | +| `VUE_APP_AES_SECRET_KEY` | AES 密钥(生产) | `your-secret-key-32-chars-long` | + +## 更多信息 + +- AES 加密工具详细文档:`@shared/utils/crypto/README.md` +- Auth API 文档:`@shared/api/auth/auth.ts` +- 后端 AES 实现:`urbanLifelineServ/common/common-utils/src/main/java/org/xyzh/common/utils/crypto/AesEncryptUtil.java` diff --git a/urbanLifelineWeb/packages/platform/src/config/index.ts b/urbanLifelineWeb/packages/platform/src/config/index.ts new file mode 100644 index 00000000..49490d2f --- /dev/null +++ b/urbanLifelineWeb/packages/platform/src/config/index.ts @@ -0,0 +1,24 @@ +/** + * Platform 应用配置 + */ + +/** + * AES 加密密钥(与后端保持一致) + * 对应后端配置:security.aes.secret-key + * Base64 编码的 32 字节密钥(256 位) + */ +export const AES_SECRET_KEY = 'MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTI=' // Base64 编码,解码后是 "12345678901234567890123456789012" (32字节) + +/** + * API 基础地址 + */ +export const API_BASE_URL = (import.meta as any).env?.VITE_API_BASE_URL || 'http://localhost:8180' + +/** + * 应用配置 + */ +export const APP_CONFIG = { + name: '泰豪电源 AI 数智化平台', + version: '1.0.0', + copyright: '泰豪电源' +} diff --git a/urbanLifelineWeb/packages/platform/src/layouts/SidebarLayout/README.md b/urbanLifelineWeb/packages/platform/src/layouts/SidebarLayout/README.md new file mode 100644 index 00000000..c05051ff --- /dev/null +++ b/urbanLifelineWeb/packages/platform/src/layouts/SidebarLayout/README.md @@ -0,0 +1,214 @@ +# SidebarLayout 侧边栏布局组件 + +## 功能特性 + +### 🎯 核心功能 +- **侧边栏菜单导航**:左侧固定侧边栏,支持折叠/展开 +- **双模式内容区**: + - **路由模式**:普通路由页面渲染 + - **iframe 模式**:嵌入外部应用(招标助手、泰豪小电、智能体编排) +- **用户信息展示**:底部用户头像和下拉菜单 +- **响应式设计**:支持移动端适配 + +### 📱 菜单配置 + +```typescript +const menuItems: MenuItem[] = [ + { + key: 'home', + label: '工作台', + icon: 'Grid', + path: '/home', + type: 'route' + }, + { + key: 'bidding', + label: '招标助手', + icon: 'Document', + iframeUrl: 'http://localhost:5002', + type: 'iframe' + }, + { + key: 'service', + label: '泰豪小电', + icon: 'Service', + iframeUrl: 'http://localhost:5003', + type: 'iframe' + }, + { + key: 'workflow', + label: '智能体编排', + icon: 'Connection', + iframeUrl: 'http://localhost:3000', // Dify 地址 + type: 'iframe' + } +] +``` + +## 使用方式 + +### 在路由中使用 + +```typescript +// router/index.ts +import { SidebarLayout } from '@/layouts' + +const routes = [ + { + path: '/', + component: SidebarLayout, + children: [ + { + path: '/home', + component: () => import('@/views/Home.vue') + }, + { + path: '/chat', + component: () => import('@/views/Chat.vue') + } + ] + } +] +``` + +### 在 App.vue 中使用 + +```vue + + + +``` + +## 菜单项类型 + +```typescript +interface MenuItem { + key: string // 唯一标识 + label: string // 显示名称 + icon: string // Element Plus 图标组件名 + path?: string // 路由路径(route 类型必需) + iframeUrl?: string // iframe URL(iframe 类型必需) + type: 'route' | 'iframe' // 菜单类型 +} +``` + +## iframe 应用说明 + +### 1. 招标助手 (Bidding) +- **端口**:5002 +- **URL**:http://localhost:5002 +- **说明**:招投标业务管理系统 + +### 2. 泰豪小电 (Service) +- **端口**:5003 +- **URL**:http://localhost:5003 +- **说明**:智能客服工单管理系统 + +### 3. 智能体编排 (Workflow) +- **端口**:3000 +- **URL**:http://localhost:3000 +- **说明**:Dify 智能体编排界面 + +## 样式自定义 + +### 主题色调整 + +```scss +// 修改侧边栏背景色 +.sidebar { + background: #F0EAF4; // 当前淡紫色背景 +} + +// 修改激活项颜色 +.nav-item.active { + background: rgba(124, 58, 237, 0.15); + color: #7c3aed; +} +``` + +### 侧边栏宽度 + +```scss +.sidebar { + width: 220px; // 展开宽度 + + &.collapsed { + width: 64px; // 折叠宽度 + } +} +``` + +## 功能说明 + +### 侧边栏折叠 +- 点击头部箭头图标可切换折叠/展开状态 +- 折叠后只显示图标,展开后显示图标+文字 + +### iframe 加载 +- 自动显示加载中状态 +- 支持刷新按钮重新加载 +- 显示当前应用标题 + +### 用户操作 +- **个人中心**:跳转到 /profile +- **系统设置**:跳转到 /settings +- **退出登录**:跳转到 /login + +## 注意事项 + +1. **跨域问题**:确保 iframe 应用允许被嵌入 + ```nginx + # nginx 配置 + add_header X-Frame-Options "SAMEORIGIN"; + # 或者 + add_header Content-Security-Policy "frame-ancestors 'self' http://localhost:5001"; + ``` + +2. **端口配置**:确保对应服务已启动 + - platform: 5001 + - bidding: 5002 + - workcase: 5003 + - dify: 3000 + +3. **路由同步**:iframe 模式不会改变浏览器 URL + +4. **通信机制**:如需与 iframe 通信,使用 postMessage API + +## 扩展建议 + +### 添加新菜单项 + +```typescript +// 在 menuItems 数组中添加 +{ + key: 'new-app', + label: '新应用', + icon: 'Plus', + iframeUrl: 'http://localhost:5004', + type: 'iframe' +} +``` + +### 动态菜单加载 + +```typescript +// 从 API 获取菜单配置 +const loadMenus = async () => { + const response = await fetch('/api/menus') + menuItems.value = await response.json() +} +``` + +### 权限控制 + +```typescript +const menuItems = computed(() => { + return allMenuItems.filter(item => + hasPermission(item.key) + ) +}) +``` diff --git a/urbanLifelineWeb/packages/platform/src/layouts/SidebarLayout/SidebarLayout.scss b/urbanLifelineWeb/packages/platform/src/layouts/SidebarLayout/SidebarLayout.scss new file mode 100644 index 00000000..c3a40ef7 --- /dev/null +++ b/urbanLifelineWeb/packages/platform/src/layouts/SidebarLayout/SidebarLayout.scss @@ -0,0 +1,264 @@ +.sidebar-layout { + display: flex; + width: 100%; + height: 100vh; + overflow: hidden; +} + +// ==================== 侧边栏 ==================== +.sidebar { + width: 220px; + height: 100%; + background: #F0EAF4; + display: flex; + flex-direction: column; + color: #333; + flex-shrink: 0; + transition: width 0.3s ease; + border-right: 1px solid rgba(0, 0, 0, 0.08); + + &.collapsed { + width: 64px; + + .sidebar-header { + padding: 16px 12px; + justify-content: center; + + .logo { + justify-content: center; + } + + .collapse-btn { + position: static; + margin-left: 0; + } + } + + .nav-item { + justify-content: center; + padding: 12px; + } + + .user-section { + justify-content: center; + padding: 16px 12px; + } + } +} + +// 侧边栏头部 +.sidebar-header { + padding: 16px 20px; + border-bottom: 1px solid rgba(0, 0, 0, 0.08); + display: flex; + align-items: center; + justify-content: space-between; +} + +.collapse-btn { + width: 28px; + height: 28px; + display: flex; + align-items: center; + justify-content: center; + border-radius: 6px; + cursor: pointer; + color: #888; + transition: all 0.2s; + + &:hover { + background: rgba(124, 58, 237, 0.1); + color: #7c3aed; + } +} + +.logo { + display: flex; + align-items: center; + gap: 10px; + + .logo-img { + width: 40px; + height: 40px; + border-radius: 6px; + object-fit: contain; + background: #fff; + padding: 2px; + } + + .logo-text { + font-size: 16px; + font-weight: 600; + color: #333; + } +} + +// 导航菜单 +.nav-menu { + flex: 1; + overflow-y: auto; + padding: 12px 0; + + &::-webkit-scrollbar { + width: 4px; + } + + &::-webkit-scrollbar-thumb { + background: rgba(0, 0, 0, 0.2); + border-radius: 4px; + } +} + +.nav-section { + padding: 8px 0; +} + +.nav-item { + display: flex; + align-items: center; + gap: 12px; + padding: 14px 20px; + margin-bottom: 4px; + cursor: pointer; + transition: all 0.2s ease; + color: #555; + font-size: 14px; + + &:hover { + background: rgba(124, 58, 237, 0.1); + color: #7c3aed; + } + + &.active { + background: rgba(124, 58, 237, 0.15); + color: #7c3aed; + font-weight: 500; + } + + .el-icon { + font-size: 18px; + flex-shrink: 0; + } + + span { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } +} + +// 用户信息 +.user-section { + padding: 16px 20px; + border-top: 1px solid rgba(0, 0, 0, 0.08); + cursor: pointer; + transition: background 0.2s; + + &:hover { + background: rgba(124, 58, 237, 0.05); + } + + .user-info-wrapper { + display: flex; + align-items: center; + gap: 12px; + } + + .user-avatar { + flex-shrink: 0; + } + + .user-name { + font-size: 14px; + font-weight: 500; + color: #333; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } +} + +// ==================== 主内容区 ==================== +.main-content { + flex: 1; + height: 100%; + overflow: hidden; + background: #fff; + position: relative; +} + +// iframe 容器 +.iframe-container { + width: 100%; + height: 100%; + display: flex; + flex-direction: column; + position: relative; +} + +.iframe-header { + height: 56px; + padding: 0 24px; + display: flex; + align-items: center; + justify-content: space-between; + border-bottom: 1px solid #e5e7eb; + background: #fafafa; + flex-shrink: 0; +} + +.iframe-title { + font-size: 16px; + font-weight: 600; + color: #333; +} + +.content-iframe { + flex: 1; + width: 100%; + height: 100%; + border: none; + background: #fff; +} + +.iframe-loading { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + display: flex; + flex-direction: column; + align-items: center; + gap: 12px; + color: #7c3aed; + font-size: 14px; + z-index: 10; + + .el-icon { + font-size: 32px; + } +} + +// ==================== 响应式 ==================== +@media (max-width: 768px) { + .sidebar { + width: 64px; + + &:not(.collapsed) { + width: 220px; + position: fixed; + left: 0; + top: 0; + z-index: 1000; + box-shadow: 2px 0 8px rgba(0, 0, 0, 0.1); + } + } + + .iframe-header { + padding: 0 16px; + + .iframe-title { + font-size: 14px; + } + } +} diff --git a/urbanLifelineWeb/packages/platform/src/layouts/SidebarLayout/SidebarLayout.vue b/urbanLifelineWeb/packages/platform/src/layouts/SidebarLayout/SidebarLayout.vue new file mode 100644 index 00000000..ce24499a --- /dev/null +++ b/urbanLifelineWeb/packages/platform/src/layouts/SidebarLayout/SidebarLayout.vue @@ -0,0 +1,248 @@ +