diff --git a/packages/analytics/nodemon.json b/packages/analytics/nodemon.json deleted file mode 100644 index 8d55d8a..0000000 --- a/packages/analytics/nodemon.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "watch": ["src", "views"], - "ext": "ts,handlebars,js", - "ignore": ["src/**/*.spec.ts"], - "exec": "node --loader ts-node/esm src/index.ts" -} diff --git a/packages/analytics/package.json b/packages/analytics/package.json index 60dccf6..4eeaf54 100644 --- a/packages/analytics/package.json +++ b/packages/analytics/package.json @@ -3,13 +3,12 @@ "version": "1.0.0", "main": "src/index.js", "private": true, - "type": "module", "license": "GPL", "scripts": { - "start": "node dist/index.js", - "build": "tsc -b -f", - "watch": "tsc -b --watch", - "dev": "nodemon" + "start": "node dist/analytics/src/index.js", + "build": "tsc", + "type-check": "tsc --noEmit", + "dev": "tsx watch src/index.ts" }, "dependencies": { "dotenv": "^16.4.5", @@ -23,9 +22,8 @@ "@swc/helpers": "^0.5.6", "@types/express": "^4.17.21", "@types/node": "^20.11.20", - "nodemon": "^3.1.0", "regenerator-runtime": "^0.14.1", - "ts-node": "^10.9.2", + "tsx": "^4.19.3", "typescript": "^5.3.3" } } diff --git a/packages/analytics/src/constants.ts b/packages/analytics/src/constants.ts deleted file mode 100644 index e69de29..0000000 diff --git a/packages/analytics/src/controllers/commands.ts b/packages/analytics/src/controllers/commands.ts index aa2f6d3..6418c3f 100644 --- a/packages/analytics/src/controllers/commands.ts +++ b/packages/analytics/src/controllers/commands.ts @@ -1,6 +1,6 @@ import type { Request, Response } from 'express' -import Pagination from '../models/pagination.js' -import { errorCommands } from '../models/commands.js' +import Pagination from '../models/pagination' +import { errorCommands } from '../models/commands' export async function commandListController( req: Request, diff --git a/packages/analytics/src/controllers/index.ts b/packages/analytics/src/controllers/index.ts index 27678fa..c505a7a 100644 --- a/packages/analytics/src/controllers/index.ts +++ b/packages/analytics/src/controllers/index.ts @@ -1,6 +1,6 @@ import { Request, Response } from 'express' -import { userCount } from '../models/users.js' -import { questList } from '../models/quests.js' +import { userCount } from '../models/users' +import { questList } from '../models/quests' export async function homeController(req: Request, res: Response) { const quests = await questList() diff --git a/packages/analytics/src/controllers/quests.ts b/packages/analytics/src/controllers/quests.ts index b6cb836..97f9602 100644 --- a/packages/analytics/src/controllers/quests.ts +++ b/packages/analytics/src/controllers/quests.ts @@ -1,5 +1,5 @@ import { Request, Response } from 'express' -import { questList } from '../models/quests.js' +import { questList } from '../models/quests' export async function questListController(req: Request, res: Response) { const quests = await questList() diff --git a/packages/analytics/src/controllers/sessions.ts b/packages/analytics/src/controllers/sessions.ts index 7506301..cf422c1 100644 --- a/packages/analytics/src/controllers/sessions.ts +++ b/packages/analytics/src/controllers/sessions.ts @@ -1,6 +1,6 @@ import { Request, Response } from 'express' -import Pagination from '../models/pagination.js' -import { sessionList, sessionDetail } from '../models/sessions.js' +import Pagination from '../models/pagination' +import { sessionList, sessionDetail } from '../models/sessions' export async function sessionListController(req: Request, res: Response) { const { nextKey, order } = req.query as { nextKey: string; order: string } diff --git a/packages/analytics/src/controllers/users.ts b/packages/analytics/src/controllers/users.ts index 2d08a40..bc08927 100644 --- a/packages/analytics/src/controllers/users.ts +++ b/packages/analytics/src/controllers/users.ts @@ -1,7 +1,7 @@ import { Request, Response } from 'express' import mongoose from 'mongoose' -import Pagination from '../models/pagination.js' -import { userList, userDetail, idToUser } from '../models/users.js' +import Pagination from '../models/pagination' +import { userList, userDetail, idToUser } from '../models/users' export async function userListController(req: Request, res: Response) { const { nextKey, order } = req.query as { nextKey: string; order: string } diff --git a/packages/analytics/src/index.ts b/packages/analytics/src/index.ts index e0f1891..3f12d0a 100644 --- a/packages/analytics/src/index.ts +++ b/packages/analytics/src/index.ts @@ -1,9 +1,9 @@ -import connectDB from '@models' +import { connectDB } from '../../models' import express from 'express' import { engine } from 'express-handlebars' import basicAuth from 'express-basic-auth' -import config from './config.js' -import router from './router.js' +import config from './config' +import router from './router' async function main() { await connectDB(config.db) diff --git a/packages/analytics/src/models/commands.ts b/packages/analytics/src/models/commands.ts index fe9d5c9..faebf9a 100644 --- a/packages/analytics/src/models/commands.ts +++ b/packages/analytics/src/models/commands.ts @@ -1,5 +1,5 @@ -import { Command } from '@models' -import Pagination from './pagination.js' +import { Command } from '../../../models' +import Pagination from './pagination' // eslint-disable-next-line import/prefer-default-export export async function errorCommands(pagination: Pagination) { diff --git a/packages/analytics/src/models/pagination.ts b/packages/analytics/src/models/pagination.ts index 173f02f..8251a41 100644 --- a/packages/analytics/src/models/pagination.ts +++ b/packages/analytics/src/models/pagination.ts @@ -1,5 +1,3 @@ -/* eslint-disable class-methods-use-this */ -// eslint-disable-next-line max-classes-per-file import mongoose, { Types } from 'mongoose' export const DESC: string = 'desc' diff --git a/packages/analytics/src/models/quests.ts b/packages/analytics/src/models/quests.ts index 148e159..be8dbf8 100644 --- a/packages/analytics/src/models/quests.ts +++ b/packages/analytics/src/models/quests.ts @@ -1,8 +1,14 @@ -/* eslint-disable object-shorthand */ -/* eslint-disable func-names */ -import { UserProfile } from '@models' +import { UserProfile } from '../../../models' -export function questList() { +export interface QuestProgress { + _id: string + started: number + completed: number + completedRate: number + failed: number +} + +export function questList(): Promise { return UserProfile.aggregate([ { $project: { diff --git a/packages/analytics/src/models/sessions.ts b/packages/analytics/src/models/sessions.ts index a32e28d..7107b87 100644 --- a/packages/analytics/src/models/sessions.ts +++ b/packages/analytics/src/models/sessions.ts @@ -1,5 +1,5 @@ -import { Command, Session } from '@models' -import Pagination from './pagination.js' +import { Command, Session } from '../../../models' +import Pagination from './pagination' import { CommandObject, SessionDetail, diff --git a/packages/analytics/src/models/users.ts b/packages/analytics/src/models/users.ts index 0d82ded..970815f 100644 --- a/packages/analytics/src/models/users.ts +++ b/packages/analytics/src/models/users.ts @@ -1,7 +1,7 @@ -import { Session, User } from '@models' -import { Types } from 'mongoose' -import Pagination from './pagination.js' -import { IUser, UserSessionDetail } from '../interface.js' +import { Session, User, IUser, ISession } from '../../../models' +import { HydratedDocument, Types } from 'mongoose' +import Pagination from './pagination' +import { UserSessionDetail } from '../interface' function loginMethods(user: IUser): string[] { const methods: string[] = [] @@ -23,7 +23,11 @@ export function userCount() { } export async function userList(pagination: Pagination) { - const users = await Session.aggregate([ + const users: { + userData: HydratedDocument + count: number + lastActivityAt: Date + }[] = await Session.aggregate([ pagination.match('user'), { $group: { @@ -62,7 +66,7 @@ export async function userList(pagination: Pagination) { export async function userDetail( id: Types.ObjectId ): Promise { - const sessions = await Session.find({ + const sessions: HydratedDocument[] = await Session.find({ user: id, }) return sessions.map((session): UserSessionDetail => { diff --git a/packages/analytics/src/router.ts b/packages/analytics/src/router.ts index 9f50043..d102be0 100644 --- a/packages/analytics/src/router.ts +++ b/packages/analytics/src/router.ts @@ -1,16 +1,13 @@ import { Router } from 'express' -import { homeController } from './controllers/index.js' -import { - userListController, - userDetailController, -} from './controllers/users.js' -import { questListController } from './controllers/quests.js' -import { commandListController } from './controllers/commands.js' +import { homeController } from './controllers/index' +import { userListController, userDetailController } from './controllers/users' +import { questListController } from './controllers/quests' +import { commandListController } from './controllers/commands' import { sessionDetailController, sessionListController, -} from './controllers/sessions.js' +} from './controllers/sessions' const router = Router() diff --git a/packages/analytics/tsconfig.json b/packages/analytics/tsconfig.json index 4c10bb4..12aea0e 100644 --- a/packages/analytics/tsconfig.json +++ b/packages/analytics/tsconfig.json @@ -1,11 +1,9 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "rootDir": "src", "outDir": "./dist" }, - "include": ["src"], - "references": [{ "path": "../models" }], + "include": ["src", "../models"], "ts-node": { "swc": true } diff --git a/packages/constants/index.ts b/packages/constants/index.ts index c6628e4..c555e8e 100644 --- a/packages/constants/index.ts +++ b/packages/constants/index.ts @@ -1,7 +1,5 @@ import { z } from 'zod' -export * from './session.js' - export const passwordPolicy = { minLength: 8, minNumbers: 1, diff --git a/packages/constants/session.ts b/packages/constants/session.ts deleted file mode 100644 index 4dba430..0000000 --- a/packages/constants/session.ts +++ /dev/null @@ -1,15 +0,0 @@ -export interface SessionSummaryResponse { - _id: string - user: string - quest: string - status: string - createdAt: Date - lastActivityAt: Date -} - -export interface SessionDetailResponse extends SessionSummaryResponse { - hints: string[][] - tasks: string[][] - responses: string[][] - graph: any -} diff --git a/packages/constants/tests/parseAll.test.ts b/packages/constants/tests/parseAll.test.ts deleted file mode 100644 index 14dc818..0000000 --- a/packages/constants/tests/parseAll.test.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { describe, it, expect, beforeAll } from '@jest/globals' -import fs from 'fs/promises' -import path from 'path' -import yaml from 'yaml' -import { questSchema } from '../src/quest/quest.js' - -describe('Parse all quests', () => { - let quests: any[] = [] - - test('should parse all quests', async () => { - const questDirectory = path.join(process.cwd(), 'quests') - - const loadQuests = async () => { - const questNames = await fs.readdir(questDirectory, { - withFileTypes: true, - }) - - return Promise.all( - questNames - .filter( - (dirent) => dirent.isDirectory() && !dirent.name.startsWith('.') - ) - .map(async (dirent) => { - const id = dirent.name - const questPath = path.join(questDirectory, id) - const files = await fs.readdir(questPath) - if (!files.includes('game.yml')) { - throw new Error(`Missing game.yml in quest ${id}`) - } - - const body = await fs.readFile( - path.join(questPath, 'game.yml'), - 'utf-8' - ) - const questData = yaml.parse(body, { merge: true }) - const image = files.includes('Dockerfile') ? id : 'base' - return { - id, - image, - ...questData, - } - }) - ) - } - - quests = await loadQuests() - quests.forEach((quest) => { - console.log(`Quest ID: ${quest.id}`) - expect(questSchema.safeParse(quest).error).toBeUndefined() - }) - }) -}) diff --git a/packages/constants/tests/quest.test.ts b/packages/constants/tests/quest.test.ts deleted file mode 100644 index bccc3b5..0000000 --- a/packages/constants/tests/quest.test.ts +++ /dev/null @@ -1,93 +0,0 @@ -import { describe, it, expect } from '@jest/globals' -import { questSchema } from '../src/index.js' - -describe('Test quest schema', () => { - it('should parse quest schema', () => { - const sampleQuest = { - id: 'get-started', - image: 'base', - title: '終端機的基本知識', - instruction: `歡迎來到 Linux Odyssey! - 在這個關卡中,你將會學到: - 1. 如何使用這個網站 - 2. 如何使用終端機`, - stages: [ - { - id: 'start', - task: '按下 `開始` ����開始', - condition: { - command: ['^echo start$'], - }, - responses: [ - { - content: `在畫面的中下方的區��是終端機,你可以在終端機��輸入指令來操作電��。 - 在終端機中,你所看到的 \`commander:~ $\` 叫做命令提示字串。 - ��令提示字串最後的��字號 \`$\` 叫命令提示符,你必須將指令輸入在它的後方。 - ��你輸入完指令並按下 Enter 之後,終端機會��行你輸入的指令,並且會從終端機的下一行開始輸出指令的��行結果。 - 直到你看到新的 \`commander:~ $\` 出現時,代表你可以輸入下一個指令了。 - ��在請你輸入 \`echo hello\` 來看看會發生什麼事。`, - }, - ], - hints: ['�� 在 `commander:~ $` ��面輸入 `echo hello` ��按下 Enter'], - }, - { - id: 'echo-hello', - task: '在終端機輸入 `echo hello`', - requirements: ['start'], - condition: { - command: ['^echo hello$'], - }, - responses: [ - { - content: `你應��可以看到終端機上��示了以下內容: - \`\`\` - commander:~ $ echo hello - hello - \`\`\` - 第一行的 \`commander:~ $\` 是命令提示字串,接在後方的 \`echo hello\` 是你輸入的指令。 - 第二行的 \`hello\` ��是終端機的輸出結果。 - 你現在知道了如何在終端機上輸入指令,以及查看終端機輸出的位置。 - ��在請輸入 \`echo next\` 來��續下一個步��。`, - }, - ], - hints: ['�� ���入 `echo next` ���續下一個步��'], - }, - { - id: 'echo-next', - task: '在終端機輸入 `echo next`', - requirements: ['echo-hello'], - condition: { - command: ['^echo next$'], - }, - responses: [ - { - content: `\`Ctrl + C\` 在終端機中是一個很重要的快捷鍵,它可以用來中��正在��行的指令,並產生一個新的命令提示字串,讓你可以��續輸入指令。 - 如果指令��行很久沒有反應,或你因為其他原因想要中��指令,你可以按下 \`Ctrl + C\` 來中��指令。 - 又或者你輸入了錯��的指令,����得慢慢��除,你也可以按下 \`Ctrl + C\` 來產生新的命令提示字串重新輸入指令。 - 如果你已經理解了��才的說明,請輸入 \`echo finish\` 來結束這一關。`, - }, - ], - hints: [ - '�� ��下 `Ctrl + C` 能��中��正在��行的指令', - '�� ��下 `Ctrl + C` 能��產生新的命令提示字串', - '�� ���入 `echo finish` 來結束這一關', - ], - }, - { - id: 'END', - task: '結束關卡', - requirements: ['echo-next'], - condition: { - command: ['^echo finish$'], - }, - responses: [ - { - content: '恭喜你完成了這個關卡!', - }, - ], - }, - ], - } - expect(questSchema.safeParse(sampleQuest).error).toBeUndefined() - }) -}) diff --git a/packages/constants/tests/response.test.ts b/packages/constants/tests/response.test.ts deleted file mode 100644 index eb3eb15..0000000 --- a/packages/constants/tests/response.test.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { describe, it, expect } from '@jest/globals' -import { responseSchema } from '../src/quest/response.js' - -describe('parsing response', () => { - it('should parse valid response', () => { - const response = { - type: 'narrative', - content: 'This is a response content', - } - const result = responseSchema.safeParse(response) - expect(result.error).toBeUndefined() - }) - - it('should fail to parse invalid response', () => { - const response = { - type: 'dialogue', - content: 'This is a response content', - } - const result = responseSchema.safeParse(response) - expect(result.error).toBeUndefined() - }) -}) diff --git a/packages/constants/tests/stage.test.ts b/packages/constants/tests/stage.test.ts deleted file mode 100644 index 60b8297..0000000 --- a/packages/constants/tests/stage.test.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { describe, it, expect } from '@jest/globals' -import { stageSchema } from '../src/quest/stage.js' - -describe('parsing stage', () => { - it('should parse valid stage', () => { - const stage = { - id: 'start', - task: '按下 `開始` ����開始', - requirements: ['start'], - condition: { - command: ['^echo start$'], - }, - responses: [ - { - type: 'text', - content: `在畫面的中下方的區��是終端機,你可以在終端機��輸入指令來操作電��。 - 在終端機中,你所看到的 \`commander:~ $\` 叫做命令提示字串。 - ��令提示字串最後的��字號 \`$\` 叫命令提示符,你必須將指令輸入在它的後方。 - ��你輸入完指令並按下 Enter 之後,終端機會��行你輸入的指令,並且會從終端機的下一行開始輸出指令的��行結果。 - 直到你看到新的 \`commander:~ $\` 出現時,代表你可以輸入下一個指令了。 - ��在請你輸入 \`echo hello\` 來看看會發生什麼事。`, - }, - ], - hints: ['�� 在 `commander:~ $` ��面輸入 `echo hello` ��按下 Enter'], - } - const result = stageSchema.safeParse(stage) - expect(result.error).toBeUndefined() - }) -}) diff --git a/packages/models/index.ts b/packages/models/index.ts index 2427bde..c812f75 100644 --- a/packages/models/index.ts +++ b/packages/models/index.ts @@ -5,7 +5,7 @@ export { Session, ISession } from './session.js' export { Command, ICommand } from './command.js' export { UserProfile, IUserProfile, IProgress } from './userProfile.js' -export default async function connectDB(uri: string) { +export async function connectDB(uri: string) { const db = await mongoose.connect(uri) return db.connection.getClient() } diff --git a/server/src/index.ts b/server/src/index.ts index 95e3e56..f9c703b 100644 --- a/server/src/index.ts +++ b/server/src/index.ts @@ -5,7 +5,7 @@ import YAML from 'yaml' import swaggerUI from 'swagger-ui-express' import passport from 'passport' import * as trpcExpress from '@trpc/server/adapters/express' -import connectDB from '../../packages/models' +import { connectDB } from '../../packages/models' import './auth/passport.js' import socketServer from './api/socket.js' diff --git a/tsconfig.json b/tsconfig.json index ccd1a35..bcf7b78 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,6 +1,7 @@ { "compilerOptions": { "forceConsistentCasingInFileNames": true, + "esModuleInterop": true, "strict": true, "skipLibCheck": true, "sourceMap": true, diff --git a/yarn.lock b/yarn.lock index 6804277..5510f76 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3441,7 +3441,7 @@ chmodr@~1.0.2: resolved "https://registry.yarnpkg.com/chmodr/-/chmodr-1.0.2.tgz#04662b932d0f02ec66deaa2b0ea42811968e3eb9" integrity sha512-oHosCxCZpaI/Db320r8M5SHHZuVfnFJVwkSGkI81QLnnVg25pDw//NgD4fy1WvvydhZNi2G+jrbNSprRkfbRYA== -chokidar@^3.5.2, chokidar@^3.5.3: +chokidar@^3.5.3: version "3.6.0" resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz" integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== @@ -3922,7 +3922,7 @@ debug@2.6.9: dependencies: ms "2.0.0" -debug@4, debug@4.x, debug@^4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2, debug@~4.3.4: +debug@4, debug@4.x, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2, debug@~4.3.4: version "4.3.4" resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -5590,11 +5590,6 @@ iferr@^0.1.5: resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" integrity sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA== -ignore-by-default@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz" - integrity sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA== - ignore@^5.1.1, ignore@^5.2.0, ignore@^5.2.4: version "5.3.1" resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz" @@ -7123,22 +7118,6 @@ node-uuid@~1.4.7: resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.8.tgz#b040eb0923968afabf8d32fb1f17f1167fdab907" integrity sha512-TkCET/3rr9mUuRp+CpO7qfgT++aAxfDRaalQhwPFzI9BY/2rCDn6OfpZOVggi1AXfTPpfkTrg5f5WQx5G1uLxA== -nodemon@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/nodemon/-/nodemon-3.1.0.tgz" - integrity sha512-xqlktYlDMCepBJd43ZQhjWwMw2obW/JRvkrLxq5RCNcuDDX1DbcPT+qT1IlIIdf+DhnWs90JpTMe+Y5KxOchvA== - dependencies: - chokidar "^3.5.2" - debug "^4" - ignore-by-default "^1.0.1" - minimatch "^3.1.2" - pstree.remy "^1.1.8" - semver "^7.5.3" - simple-update-notifier "^2.0.0" - supports-color "^5.5.0" - touch "^3.1.0" - undefsafe "^2.0.5" - "nopt@2 || 3", nopt@~3.0.6: version "3.0.6" resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" @@ -7153,13 +7132,6 @@ nopt@^5.0.0: dependencies: abbrev "1" -nopt@~1.0.10: - version "1.0.10" - resolved "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz" - integrity sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg== - dependencies: - abbrev "1" - normalize-git-url@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/normalize-git-url/-/normalize-git-url-3.0.2.tgz#8e5f14be0bdaedb73e07200310aa416c27350fc4" @@ -7977,11 +7949,6 @@ psl@^1.1.28, psl@^1.1.33: resolved "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz" integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== -pstree.remy@^1.1.8: - version "1.1.8" - resolved "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz" - integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== - pump@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" @@ -8659,13 +8626,6 @@ simple-swizzle@^0.2.2: dependencies: is-arrayish "^0.3.1" -simple-update-notifier@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz" - integrity sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w== - dependencies: - semver "^7.5.3" - sisteransi@^1.0.5: version "1.0.5" resolved "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz" @@ -9066,7 +9026,7 @@ supports-color@^2.0.0: resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" integrity sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g== -supports-color@^5.3.0, supports-color@^5.5.0: +supports-color@^5.3.0: version "5.5.0" resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== @@ -9267,13 +9227,6 @@ toidentifier@1.0.1: resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== -touch@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz" - integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA== - dependencies: - nopt "~1.0.10" - tough-cookie@^4.1.3: version "4.1.3" resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz" @@ -9532,11 +9485,6 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" -undefsafe@^2.0.5: - version "2.0.5" - resolved "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz" - integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA== - undici-types@~5.26.4: version "5.26.5" resolved "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz"