diff --git a/apps/admin/Dockerfile b/apps/admin/Dockerfile index 3541db4..c6a674a 100644 --- a/apps/admin/Dockerfile +++ b/apps/admin/Dockerfile @@ -1,12 +1,14 @@ FROM node:22-alpine AS builder WORKDIR /app COPY package*.json ./ +COPY apps/admin/package.json ./apps/admin/package.json +COPY packages/typescript-config/package.json ./packages/typescript-config/package.json RUN npm ci COPY . . -RUN npm run build +RUN npm run build -w @gongxue/admin FROM nginx:alpine -COPY --from=builder /app/dist /usr/share/nginx/html -COPY nginx.conf /etc/nginx/conf.d/default.conf +COPY --from=builder /app/apps/admin/dist /usr/share/nginx/html +COPY apps/admin/nginx.conf /etc/nginx/conf.d/default.conf EXPOSE 80 CMD ["nginx", "-g", "daemon off;"] diff --git a/apps/server/Dockerfile b/apps/server/Dockerfile index ed3c893..59b46ac 100644 --- a/apps/server/Dockerfile +++ b/apps/server/Dockerfile @@ -1,14 +1,16 @@ FROM node:22-alpine AS builder WORKDIR /app COPY package*.json ./ -RUN npm ci +COPY apps/server/package.json ./apps/server/package.json +COPY packages/typescript-config/package.json ./packages/typescript-config/package.json +RUN npm ci --no-optional COPY . . -RUN npm run build +RUN npm run build -w @gongxue/server FROM node:22-alpine WORKDIR /app -COPY --from=builder /app/dist ./dist +COPY --from=builder /app/apps/server/dist ./dist +COPY --from=builder /app/apps/server/package.json ./ COPY --from=builder /app/node_modules ./node_modules -COPY --from=builder /app/package.json ./ EXPOSE 3000 CMD ["node", "dist/main.js"] diff --git a/apps/server/package.json b/apps/server/package.json index 8099c4b..2ca0a5f 100644 --- a/apps/server/package.json +++ b/apps/server/package.json @@ -34,7 +34,6 @@ "@nestjs/typeorm": "^11.0.1", "@types/multer": "^2.1.0", "bcryptjs": "^3.0.3", - "better-sqlite3": "^12.9.0", "class-transformer": "^0.5.1", "class-validator": "^0.15.1", "exceljs": "^4.4.0", @@ -48,6 +47,9 @@ "rxjs": "^7.8.1", "typeorm": "^0.3.28" }, + "optionalDependencies": { + "better-sqlite3": "^12.9.0" + }, "devDependencies": { "@eslint/eslintrc": "^3.2.0", "@eslint/js": "^9.18.0", diff --git a/apps/server/src/app.module.ts b/apps/server/src/app.module.ts index a2aa7b7..546072c 100644 --- a/apps/server/src/app.module.ts +++ b/apps/server/src/app.module.ts @@ -54,7 +54,7 @@ import { ClassroomRentalsModule } from './classroom-rentals/classroom-rentals.mo import { SyncModule } from './sync/sync.module'; import { NotificationsModule } from './notifications/notifications.module'; import { DepartmentsModule } from './departments/departments.module'; -import { CampusScope } from './common/campus-scope'; +import { CommonModule } from './common/common.module'; import { CampusScopeMiddleware } from './common/campus-scope.middleware'; @Module({ @@ -139,9 +139,9 @@ import { CampusScopeMiddleware } from './common/campus-scope.middleware'; SyncModule, NotificationsModule, DepartmentsModule, + CommonModule, ], providers: [ - CampusScope, { provide: APP_GUARD, useClass: ThrottlerGuard }, { provide: APP_GUARD, useClass: JwtAuthGuard }, { provide: APP_GUARD, useClass: PermissionGuard }, diff --git a/apps/server/src/attendance/attendance.module.ts b/apps/server/src/attendance/attendance.module.ts index 6620b20..199bcfa 100644 --- a/apps/server/src/attendance/attendance.module.ts +++ b/apps/server/src/attendance/attendance.module.ts @@ -4,12 +4,12 @@ import { AttendanceRecord, DingAttendanceRaw, Student, Class } from '../entities import { AttendanceService } from './attendance.service'; import { AttendanceController } from './attendance.controller'; import { OperationLogsModule } from '../operation-logs/operation-logs.module'; -import { DepartmentsModule } from '../departments/departments.module'; +import { CommonModule } from '../common/common.module'; @Module({ imports: [ TypeOrmModule.forFeature([AttendanceRecord, DingAttendanceRaw, Student, Class]), OperationLogsModule, - DepartmentsModule, + CommonModule, ], controllers: [AttendanceController], providers: [AttendanceService], diff --git a/apps/server/src/attendance/attendance.service.spec.ts b/apps/server/src/attendance/attendance.service.spec.ts index 19be663..db0f496 100644 --- a/apps/server/src/attendance/attendance.service.spec.ts +++ b/apps/server/src/attendance/attendance.service.spec.ts @@ -5,6 +5,9 @@ import { Repository } from 'typeorm'; import { AttendanceService } from './attendance.service'; import { AttendanceRecord } from '../entities/attendance-record.entity'; import { DingAttendanceRaw } from '../entities/ding-attendance-raw.entity'; +import { Class } from '../entities/class.entity'; +import { Student } from '../entities/student.entity'; +import { CampusScope } from '../common/campus-scope'; import { BatchCreateAttendanceDto } from './dto/attendance.dto'; describe('AttendanceService — batchCreate', () => { @@ -29,12 +32,18 @@ describe('AttendanceService — batchCreate', () => { }; const mockDingRepo = {}; + const mockClassRepo = { find: jest.fn().mockResolvedValue([]) }; + const mockStudentRepo = { find: jest.fn().mockResolvedValue([]) }; + const mockCampusScope = { getScopeDepartmentIds: jest.fn().mockResolvedValue(null), filter: jest.fn((w: any) => w) }; const module: TestingModule = await Test.createTestingModule({ providers: [ AttendanceService, { provide: getRepositoryToken(AttendanceRecord), useValue: mockRepo }, { provide: getRepositoryToken(DingAttendanceRaw), useValue: mockDingRepo }, + { provide: getRepositoryToken(Class), useValue: mockClassRepo }, + { provide: getRepositoryToken(Student), useValue: mockStudentRepo }, + { provide: CampusScope, useValue: mockCampusScope }, ], }).compile(); diff --git a/apps/server/src/bills/bills.module.ts b/apps/server/src/bills/bills.module.ts index d7e3217..239a7dc 100644 --- a/apps/server/src/bills/bills.module.ts +++ b/apps/server/src/bills/bills.module.ts @@ -1,6 +1,6 @@ import { Module } from '@nestjs/common'; import { NotificationsModule } from '../notifications/notifications.module'; -import { DepartmentsModule } from '../departments/departments.module'; +import { CommonModule } from '../common/common.module'; import { TypeOrmModule } from '@nestjs/typeorm'; import { Bill } from '../entities/bill.entity'; import { BillItem } from '../entities/bill-item.entity'; @@ -27,7 +27,7 @@ import { BillsController } from './bills.controller'; Student, ]), NotificationsModule, - DepartmentsModule, + CommonModule, ], controllers: [BillsController], providers: [BillsService, BillsExportService], diff --git a/apps/server/src/bills/bills.service.spec.ts b/apps/server/src/bills/bills.service.spec.ts index 94a4504..cdabc48 100644 --- a/apps/server/src/bills/bills.service.spec.ts +++ b/apps/server/src/bills/bills.service.spec.ts @@ -9,6 +9,7 @@ import { PersonalExpense } from '../entities/personal-expense.entity'; import { Occupancy } from '../entities/occupancy.entity'; import { Room } from '../entities/room.entity'; import { Deposit } from '../entities/deposit.entity'; +import { CampusScope } from '../common/campus-scope'; type MockRepository = Partial, jest.Mock>>; @@ -56,7 +57,7 @@ describe('BillsService — generateBills', () => { occRepo = mockRepo(); roomRepo = mockRepo(); depositRepo = mockRepo(); - dataSource = { transaction: jest.fn() }; + dataSource = { transaction: jest.fn(), query: jest.fn().mockResolvedValue([]) }; const module: TestingModule = await Test.createTestingModule({ providers: [ @@ -69,6 +70,7 @@ describe('BillsService — generateBills', () => { { provide: getRepositoryToken(Room), useValue: roomRepo }, { provide: getRepositoryToken(Deposit), useValue: depositRepo }, { provide: DataSource, useValue: dataSource }, + { provide: CampusScope, useValue: { getScopeDepartmentIds: jest.fn().mockResolvedValue(null), filter: jest.fn((w: any) => w) } }, ], }).compile(); diff --git a/apps/server/src/classes/classes.module.ts b/apps/server/src/classes/classes.module.ts index 29d92f0..6bebbce 100644 --- a/apps/server/src/classes/classes.module.ts +++ b/apps/server/src/classes/classes.module.ts @@ -1,6 +1,6 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; -import { DepartmentsModule } from '../departments/departments.module'; +import { CommonModule } from '../common/common.module'; import { Class, ClassStudent, ClassTeacher } from '../entities'; import { ClassesService } from './classes.service'; import { ClassesController } from './classes.controller'; @@ -8,7 +8,7 @@ import { OperationLogsModule } from '../operation-logs/operation-logs.module'; import { NotificationsModule } from '../notifications/notifications.module'; @Module({ - imports: [TypeOrmModule.forFeature([Class, ClassStudent, ClassTeacher]), OperationLogsModule, NotificationsModule, DepartmentsModule], + imports: [TypeOrmModule.forFeature([Class, ClassStudent, ClassTeacher]), OperationLogsModule, NotificationsModule, CommonModule], controllers: [ClassesController], providers: [ClassesService], exports: [ClassesService], diff --git a/apps/server/src/classroom-rentals/classroom-rentals.module.ts b/apps/server/src/classroom-rentals/classroom-rentals.module.ts index ab1bb71..1319e22 100644 --- a/apps/server/src/classroom-rentals/classroom-rentals.module.ts +++ b/apps/server/src/classroom-rentals/classroom-rentals.module.ts @@ -7,10 +7,10 @@ import { ClassSchedule } from '../entities/class-schedule.entity'; import { ClassroomRentalsService } from './classroom-rentals.service'; import { ClassroomRentalsController } from './classroom-rentals.controller'; import { OperationLogsModule } from '../operation-logs/operation-logs.module'; -import { DepartmentsModule } from '../departments/departments.module'; +import { CommonModule } from '../common/common.module'; @Module({ - imports: [TypeOrmModule.forFeature([ClassroomRental, Classroom, Tenant, ClassSchedule]), OperationLogsModule, DepartmentsModule], + imports: [TypeOrmModule.forFeature([ClassroomRental, Classroom, Tenant, ClassSchedule]), OperationLogsModule, CommonModule], controllers: [ClassroomRentalsController], providers: [ClassroomRentalsService], exports: [ClassroomRentalsService], diff --git a/apps/server/src/classrooms/classrooms.module.ts b/apps/server/src/classrooms/classrooms.module.ts index c01f36e..e77f72d 100644 --- a/apps/server/src/classrooms/classrooms.module.ts +++ b/apps/server/src/classrooms/classrooms.module.ts @@ -6,10 +6,10 @@ import { ClassSchedule } from '../entities/class-schedule.entity'; import { ClassroomsService } from './classrooms.service'; import { ClassroomsController } from './classrooms.controller'; import { OperationLogsModule } from '../operation-logs/operation-logs.module'; -import { DepartmentsModule } from '../departments/departments.module'; +import { CommonModule } from '../common/common.module'; @Module({ - imports: [TypeOrmModule.forFeature([Classroom, ClassroomRental, ClassSchedule]), OperationLogsModule, DepartmentsModule], + imports: [TypeOrmModule.forFeature([Classroom, ClassroomRental, ClassSchedule]), OperationLogsModule, CommonModule], controllers: [ClassroomsController], providers: [ClassroomsService], exports: [ClassroomsService], diff --git a/apps/server/src/common/common.module.ts b/apps/server/src/common/common.module.ts new file mode 100644 index 0000000..5dacf41 --- /dev/null +++ b/apps/server/src/common/common.module.ts @@ -0,0 +1,11 @@ +import { Module } from '@nestjs/common'; +import { CampusScope } from './campus-scope'; +import { CampusScopeMiddleware } from './campus-scope.middleware'; +import { DepartmentsModule } from '../departments/departments.module'; + +@Module({ + imports: [DepartmentsModule], + providers: [CampusScope, CampusScopeMiddleware], + exports: [CampusScope, CampusScopeMiddleware, DepartmentsModule], +}) +export class CommonModule {} diff --git a/apps/server/src/dashboard/dashboard.module.ts b/apps/server/src/dashboard/dashboard.module.ts index 1760794..26da52f 100644 --- a/apps/server/src/dashboard/dashboard.module.ts +++ b/apps/server/src/dashboard/dashboard.module.ts @@ -13,11 +13,11 @@ import { Deposit } from '../entities/deposit.entity'; import { ClassroomRental } from '../entities/classroom-rental.entity'; import { ClassTeacher } from '../entities/class-teacher.entity'; import { DashboardService } from './dashboard.service'; -import { DepartmentsModule } from '../departments/departments.module'; +import { CommonModule } from '../common/common.module'; import { DashboardController } from './dashboard.controller'; @Module({ - imports: [TypeOrmModule.forFeature([Room, Student, Occupancy, Bill, RoomExpense, Classroom, ClassSchedule, AttendanceRecord, Class, Deposit, ClassroomRental, ClassTeacher]), DepartmentsModule], + imports: [TypeOrmModule.forFeature([Room, Student, Occupancy, Bill, RoomExpense, Classroom, ClassSchedule, AttendanceRecord, Class, Deposit, ClassroomRental, ClassTeacher]), CommonModule], controllers: [DashboardController], providers: [DashboardService], }) diff --git a/apps/server/src/deposits/deposits.module.ts b/apps/server/src/deposits/deposits.module.ts index edecac5..f7a9f6c 100644 --- a/apps/server/src/deposits/deposits.module.ts +++ b/apps/server/src/deposits/deposits.module.ts @@ -4,13 +4,13 @@ import { Student } from '../entities/student.entity'; import { Deposit } from '../entities/deposit.entity'; import { DepositInstallment } from '../entities/deposit-installment.entity'; import { DepositsService } from './deposits.service'; -import { DepartmentsModule } from '../departments/departments.module'; +import { CommonModule } from '../common/common.module'; import { DepositsController } from './deposits.controller'; import { OperationLogsModule } from '../operation-logs/operation-logs.module'; import { NotificationsModule } from '../notifications/notifications.module'; @Module({ - imports: [TypeOrmModule.forFeature([Deposit, DepositInstallment, Student]), OperationLogsModule, NotificationsModule, DepartmentsModule], + imports: [TypeOrmModule.forFeature([Deposit, DepositInstallment, Student]), OperationLogsModule, NotificationsModule, CommonModule], controllers: [DepositsController], providers: [DepositsService], exports: [DepositsService], diff --git a/apps/server/src/expenses/expenses.module.ts b/apps/server/src/expenses/expenses.module.ts index d8fa3ab..3e172f6 100644 --- a/apps/server/src/expenses/expenses.module.ts +++ b/apps/server/src/expenses/expenses.module.ts @@ -1,6 +1,6 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; -import { DepartmentsModule } from '../departments/departments.module'; +import { CommonModule } from '../common/common.module'; import { RoomExpense } from '../entities/room-expense.entity'; import { PersonalExpense } from '../entities/personal-expense.entity'; import { Room } from '../entities/room.entity'; @@ -13,7 +13,7 @@ import { OperationLogsModule } from '../operation-logs/operation-logs.module'; imports: [ TypeOrmModule.forFeature([RoomExpense, PersonalExpense, Room, Student]), OperationLogsModule, - DepartmentsModule, + CommonModule, ], controllers: [ExpensesController], providers: [ExpensesService], diff --git a/apps/server/src/occupancies/occupancies.module.ts b/apps/server/src/occupancies/occupancies.module.ts index 41a6427..efad34f 100644 --- a/apps/server/src/occupancies/occupancies.module.ts +++ b/apps/server/src/occupancies/occupancies.module.ts @@ -8,10 +8,10 @@ import { OccupanciesService } from './occupancies.service'; import { OccupanciesController } from './occupancies.controller'; import { OperationLogsModule } from '../operation-logs/operation-logs.module'; import { NotificationsModule } from '../notifications/notifications.module'; -import { DepartmentsModule } from '../departments/departments.module'; +import { CommonModule } from '../common/common.module'; @Module({ - imports: [TypeOrmModule.forFeature([Occupancy, Room, Student, Deposit]), OperationLogsModule, NotificationsModule, DepartmentsModule], + imports: [TypeOrmModule.forFeature([Occupancy, Room, Student, Deposit]), OperationLogsModule, NotificationsModule, CommonModule], controllers: [OccupanciesController], providers: [OccupanciesService], exports: [OccupanciesService], diff --git a/apps/server/src/rooms/rooms.module.ts b/apps/server/src/rooms/rooms.module.ts index 0ee6446..7c18d45 100644 --- a/apps/server/src/rooms/rooms.module.ts +++ b/apps/server/src/rooms/rooms.module.ts @@ -6,10 +6,10 @@ import { RoomExpense } from '../entities/room-expense.entity'; import { RoomsService } from './rooms.service'; import { RoomsController } from './rooms.controller'; import { OperationLogsModule } from '../operation-logs/operation-logs.module'; -import { DepartmentsModule } from '../departments/departments.module'; +import { CommonModule } from '../common/common.module'; @Module({ - imports: [TypeOrmModule.forFeature([Room, Occupancy, RoomExpense]), OperationLogsModule, DepartmentsModule], + imports: [TypeOrmModule.forFeature([Room, Occupancy, RoomExpense]), OperationLogsModule, CommonModule], controllers: [RoomsController], providers: [RoomsService], exports: [RoomsService], diff --git a/apps/server/src/schedules/schedules.module.ts b/apps/server/src/schedules/schedules.module.ts index 4b66e5a..faadc7e 100644 --- a/apps/server/src/schedules/schedules.module.ts +++ b/apps/server/src/schedules/schedules.module.ts @@ -1,14 +1,14 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; -import { ClassSchedule } from '../entities'; +import { ClassSchedule, Class } from '../entities'; import { SchedulesService } from './schedules.service'; import { SchedulesController } from './schedules.controller'; import { OperationLogsModule } from '../operation-logs/operation-logs.module'; import { NotificationsModule } from '../notifications/notifications.module'; -import { DepartmentsModule } from '../departments/departments.module'; +import { CommonModule } from '../common/common.module'; @Module({ - imports: [TypeOrmModule.forFeature([ClassSchedule]), OperationLogsModule, NotificationsModule, DepartmentsModule], + imports: [TypeOrmModule.forFeature([ClassSchedule, Class]), OperationLogsModule, NotificationsModule, CommonModule], controllers: [SchedulesController], providers: [SchedulesService], exports: [SchedulesService], diff --git a/apps/server/src/schedules/schedules.service.spec.ts b/apps/server/src/schedules/schedules.service.spec.ts index 4b2c149..3c17c87 100644 --- a/apps/server/src/schedules/schedules.service.spec.ts +++ b/apps/server/src/schedules/schedules.service.spec.ts @@ -4,6 +4,8 @@ import { ConflictException } from '@nestjs/common'; import { Repository } from 'typeorm'; import { SchedulesService } from './schedules.service'; import { ClassSchedule } from '../entities/class-schedule.entity'; +import { Class } from '../entities/class.entity'; +import { CampusScope } from '../common/campus-scope'; /** Build a mock query-builder where each chain method returns `this`. */ function mockQueryBuilder(results: T[] = []) { @@ -28,6 +30,8 @@ describe('SchedulesService — checkConflict', () => { providers: [ SchedulesService, { provide: getRepositoryToken(ClassSchedule), useValue: mockRepo }, + { provide: getRepositoryToken(Class), useValue: { find: jest.fn().mockResolvedValue([]) } }, + { provide: CampusScope, useValue: { getScopeDepartmentIds: jest.fn().mockResolvedValue(null), filter: jest.fn((w: any) => w) } }, ], }).compile(); diff --git a/apps/server/src/students/students.module.ts b/apps/server/src/students/students.module.ts index 781ecca..05d961a 100644 --- a/apps/server/src/students/students.module.ts +++ b/apps/server/src/students/students.module.ts @@ -1,14 +1,16 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { Student } from '../entities/student.entity'; -import { DepartmentsModule } from '../departments/departments.module'; +import { Class } from '../entities/class.entity'; +import { Tenant } from '../entities/tenant.entity'; +import { CommonModule } from '../common/common.module'; import { ClassStudent } from '../entities/class-student.entity'; import { AttendanceRecord } from '../entities/attendance-record.entity'; import { StudentsService } from './students.service'; import { StudentsController } from './students.controller'; @Module({ - imports: [TypeOrmModule.forFeature([Student, ClassStudent, AttendanceRecord]), DepartmentsModule], + imports: [TypeOrmModule.forFeature([Student, Class, ClassStudent, AttendanceRecord, Tenant]), CommonModule], controllers: [StudentsController], providers: [StudentsService], exports: [StudentsService], diff --git a/docker-compose.yml b/docker-compose.yml index c0a03a8..0af190b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -17,7 +17,9 @@ services: command: --default-authentication-plugin=mysql_native_password --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci backend: - build: ./apps/server + build: + context: . + dockerfile: apps/server/Dockerfile container_name: dorm_billing_backend restart: always ports: @@ -34,7 +36,9 @@ services: - mysql frontend: - build: ./apps/admin + build: + context: . + dockerfile: apps/admin/Dockerfile container_name: dorm_billing_frontend restart: always ports: diff --git a/package-lock.json b/package-lock.json index d3efd66..fe6be6c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -60,7 +60,6 @@ "@nestjs/typeorm": "^11.0.1", "@types/multer": "^2.1.0", "bcryptjs": "^3.0.3", - "better-sqlite3": "^12.9.0", "class-transformer": "^0.5.1", "class-validator": "^0.15.1", "exceljs": "^4.4.0", @@ -100,6 +99,9 @@ "tsconfig-paths": "^4.2.0", "typescript": "~6.0.2", "typescript-eslint": "^8.20.0" + }, + "optionalDependencies": { + "better-sqlite3": "^12.9.0" } }, "node_modules/@angular-devkit/core": { @@ -7225,6 +7227,7 @@ "integrity": "sha512-dq9AtApgg5PGFtBzPFSBl3HZQjHok5gaQCM6zh2Yk0aSmDCs1CbnVI8/HgASQkNKsWFpseIO9beg5xxpYhbIfA==", "hasInstallScript": true, "license": "MIT", + "optional": true, "dependencies": { "bindings": "^1.5.0", "prebuild-install": "^7.1.1" @@ -7260,6 +7263,7 @@ "resolved": "https://registry.npmmirror.com/bindings/-/bindings-1.5.0.tgz", "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", "license": "MIT", + "optional": true, "dependencies": { "file-uri-to-path": "1.0.0" } @@ -7645,7 +7649,8 @@ "version": "1.1.4", "resolved": "https://registry.npmmirror.com/chownr/-/chownr-1.1.4.tgz", "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "license": "ISC" + "license": "ISC", + "optional": true }, "node_modules/chrome-trace-event": { "version": "1.0.4", @@ -8208,6 +8213,7 @@ "resolved": "https://registry.npmmirror.com/decompress-response/-/decompress-response-6.0.0.tgz", "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "license": "MIT", + "optional": true, "dependencies": { "mimic-response": "^3.1.0" }, @@ -8237,6 +8243,7 @@ "resolved": "https://registry.npmmirror.com/deep-extend/-/deep-extend-0.6.0.tgz", "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "license": "MIT", + "optional": true, "engines": { "node": ">=4.0.0" } @@ -8329,6 +8336,7 @@ "version": "2.1.2", "resolved": "https://registry.npmmirror.com/detect-libc/-/detect-libc-2.1.2.tgz", "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "devOptional": true, "license": "Apache-2.0", "engines": { "node": ">=8" @@ -8973,6 +8981,7 @@ "resolved": "https://registry.npmmirror.com/expand-template/-/expand-template-2.0.3.tgz", "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", "license": "(MIT OR WTFPL)", + "optional": true, "engines": { "node": ">=6" } @@ -9164,7 +9173,8 @@ "version": "1.0.0", "resolved": "https://registry.npmmirror.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "license": "MIT" + "license": "MIT", + "optional": true }, "node_modules/fill-range": { "version": "7.1.1", @@ -9614,7 +9624,8 @@ "version": "0.0.0", "resolved": "https://registry.npmmirror.com/github-from-package/-/github-from-package-0.0.0.tgz", "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", - "license": "MIT" + "license": "MIT", + "optional": true }, "node_modules/glob": { "version": "13.0.6", @@ -9986,7 +9997,8 @@ "version": "1.3.8", "resolved": "https://registry.npmmirror.com/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "license": "ISC" + "license": "ISC", + "optional": true }, "node_modules/ipaddr.js": { "version": "1.9.1", @@ -12351,6 +12363,7 @@ "resolved": "https://registry.npmmirror.com/mimic-response/-/mimic-response-3.1.0.tgz", "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", "license": "MIT", + "optional": true, "engines": { "node": ">=10" }, @@ -12579,7 +12592,8 @@ "version": "0.5.3", "resolved": "https://registry.npmmirror.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "license": "MIT" + "license": "MIT", + "optional": true }, "node_modules/ms": { "version": "2.1.3", @@ -12715,7 +12729,8 @@ "version": "1.0.2", "resolved": "https://registry.npmmirror.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz", "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", - "license": "MIT" + "license": "MIT", + "optional": true }, "node_modules/napi-postinstall": { "version": "0.3.4", @@ -12761,6 +12776,7 @@ "resolved": "https://registry.npmmirror.com/node-abi/-/node-abi-3.93.0.tgz", "integrity": "sha512-Cu6yUpX5Iavugm8BeX7c0wgU9CvOqfd1yM6A1d2q2ZMjym7GjpASv2GdRcTq3Fx+Sb5OgBkEEpw4VnAbY6Y5RA==", "license": "MIT", + "optional": true, "dependencies": { "semver": "^7.3.5" }, @@ -12773,6 +12789,7 @@ "resolved": "https://registry.npmmirror.com/semver/-/semver-7.8.5.tgz", "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "license": "ISC", + "optional": true, "bin": { "semver": "bin/semver.js" }, @@ -13450,6 +13467,7 @@ "resolved": "https://registry.npmmirror.com/prebuild-install/-/prebuild-install-7.1.2.tgz", "integrity": "sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==", "license": "MIT", + "optional": true, "dependencies": { "detect-libc": "^2.0.0", "expand-template": "^2.0.3", @@ -13543,6 +13561,7 @@ "resolved": "https://registry.npmmirror.com/pump/-/pump-3.0.4.tgz", "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", "license": "MIT", + "optional": true, "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -13644,6 +13663,7 @@ "resolved": "https://registry.npmmirror.com/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "optional": true, "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -13659,6 +13679,7 @@ "resolved": "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz", "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "license": "MIT", + "optional": true, "engines": { "node": ">=0.10.0" } @@ -14326,7 +14347,8 @@ "url": "https://feross.org/support" } ], - "license": "MIT" + "license": "MIT", + "optional": true }, "node_modules/simple-get": { "version": "4.0.1", @@ -14347,6 +14369,7 @@ } ], "license": "MIT", + "optional": true, "dependencies": { "decompress-response": "^6.0.0", "once": "^1.3.1", @@ -14797,6 +14820,7 @@ "resolved": "https://registry.npmmirror.com/tar-fs/-/tar-fs-2.1.5.tgz", "integrity": "sha512-OboTd8mmMhZDNPV+UjQcK9yKAatXu2aJ+r1w4im1Otd4M4fl2hwvdoXUxIYHFTHWK/3y3FarBP70v3vwmGlOxw==", "license": "MIT", + "optional": true, "dependencies": { "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", @@ -15461,6 +15485,7 @@ "resolved": "https://registry.npmmirror.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", "license": "Apache-2.0", + "optional": true, "dependencies": { "safe-buffer": "^5.0.1" },