From f3802c3bd859b66c2f2580b8571299f12ee7f0c1 Mon Sep 17 00:00:00 2001 From: GreenAppers Date: Fri, 15 Nov 2024 19:45:52 -0800 Subject: [PATCH] Begin waypoints --- package.json | 7 +- src/components/App.tsx | 2 + src/components/PieRayHelper.tsx | 53 ++--------- src/components/Waypoints.tsx | 60 ++++++++++++ src/constants.ts | 26 ++++-- src/store.ts | 53 ++++------- src/utils/auth.ts | 4 +- src/utils/coords.ts | 54 +++++++++++ src/utils/launcher.ts | 3 +- yarn.lock | 161 ++++++++++++++++++++++++++++---- 10 files changed, 305 insertions(+), 118 deletions(-) create mode 100644 src/components/Waypoints.tsx create mode 100644 src/utils/coords.ts diff --git a/package.json b/package.json index 2fe736b..ff4ff2b 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,6 @@ "electron-is-dev": "^3.0.1", "electron-log": "^5.2.0", "electron-squirrel-startup": "^1.0.1", - "electron-store": "^8.2.0", "framer-motion": "^11.5.6", "p-settle": "^5.1.1", "react": "^18.3.1", @@ -41,7 +40,8 @@ "recharts": "^2.13.0", "split2": "^4.2.0", "tail": "^2.1.1", - "zod": "^3.23.8" + "zod": "^3.23.8", + "zod-electron-store": "^1.0.5" }, "devDependencies": { "@babel/core": "^7.25.2", @@ -80,5 +80,8 @@ }, "engines": { "node": "v20.16.0" + }, + "resolutions": { + "superagent": "6.0.0" } } diff --git a/src/components/App.tsx b/src/components/App.tsx index 2e72175..076bac6 100644 --- a/src/components/App.tsx +++ b/src/components/App.tsx @@ -18,6 +18,7 @@ import React from 'react' import { Analytics } from './Analytics' import { Launcher } from './Launcher' import { PieRayHelper } from './PieRayHelper' +import { Waypoints } from './Waypoints' function App() { const [selectedTab, setSelectedTab] = React.useState(2) @@ -58,6 +59,7 @@ function App() { {selectedTab === 1 && } {selectedTab === 2 && } + {selectedTab === 4 && } ) diff --git a/src/components/PieRayHelper.tsx b/src/components/PieRayHelper.tsx index beb5db7..0e05b6c 100644 --- a/src/components/PieRayHelper.tsx +++ b/src/components/PieRayHelper.tsx @@ -46,37 +46,7 @@ import type { PieRaySample, PieRaySolution, } from '../types' - -const vanillaCoords = - /tp @s (-?\d+\.\d+) (-?\d+\.\d+) (-?\d+\.\d+) (-?\d+\.\d+)/ -const lunarClientCoords = /X: (-?\d+) Y: (-?\d+) Z: (-?\d+)/ - -function getDirectionFromRotation( - rotation?: number -): ChunkDirection | undefined { - if (typeof rotation !== 'number') return undefined - const angleInRadians = rotation * (Math.PI / 180) - const x = -Math.sin(angleInRadians) - const z = Math.cos(angleInRadians) - return { - x: Math.abs(x) > 0.5 ? (x > 0 ? 1 : -1) : 0, - z: Math.abs(z) > 0.5 ? (z > 0 ? 1 : -1) : 0, - } -} - -function getDirectionArrow(direction?: ChunkDirection) { - if (!direction) return '' - switch (direction.z) { - case 1: - return direction.x === 1 ? '↗' : direction.x === -1 ? '↖' : '↑' - case -1: - return direction.x === 1 ? '↘' : direction.x === -1 ? '↙' : '↓' - case 0: - return direction.x === 1 ? '→' : direction.x === -1 ? '←' : '' - } -} - -const lerp = (a: number, b: number, t: number) => a + (b - a) * t +import { getDirectionArrow, getDirectionFromRotation, lerp, usePastedCoordinates } from '../utils/coords' const ScatterArrow = ( props: ScatterPointItem & { fill?: string; direction?: ChunkDirection } @@ -138,19 +108,8 @@ export function PieRayHelper() { window.api.getLogfilePath().then(setLogfilePath) }, [setLogfilePath]) - useEffect(() => { - const handle = window.api.onClipboardTextUpdated((text: string) => { - let rotation: number | undefined - let match = text.match(vanillaCoords) - if (match) rotation = parseFloat(match[4]) - - if (!match) match = text.match(lunarClientCoords) - if (!match) return - - const x = parseInt(match[1]) - const y = parseInt(match[2]) - const z = parseInt(match[3]) - + usePastedCoordinates( + (x, y, z, rotation) => { const sample: PieRaySample = { chunk: { x: Math.floor(x / 16), z: Math.floor(z / 16) }, position: { x, y, z }, @@ -181,9 +140,9 @@ export function PieRayHelper() { log.info(`Added sample: ${x}, ${y}, ${z}`) return [...samples, sample] }) - }) - return () => window.api.removeListener(handle) - }, [setSamples]) + }, + [setSamples] + ) useEffect(() => { let minX, maxX, minZ, maxZ diff --git a/src/components/Waypoints.tsx b/src/components/Waypoints.tsx new file mode 100644 index 0000000..1d848db --- /dev/null +++ b/src/components/Waypoints.tsx @@ -0,0 +1,60 @@ +import { + Flex, + Heading, + Table, + TableContainer, + Tbody, + Td, + Th, + Thead, + Tr, +} from '@chakra-ui/react' + +import { QUERY_KEYS, STORE_KEYS, Waypoint } from '../constants' +import { useQuery } from '@tanstack/react-query' + +export const useWaypointsQuery = () => + useQuery({ + queryKey: [QUERY_KEYS.useWaypoints], + queryFn: () => window.api.store.get(STORE_KEYS.waypoints), + refetchOnMount: false, + refetchOnWindowFocus: false, + refetchOnReconnect: false, + }) + +export function Waypoints() { + const waypoints = useWaypointsQuery() + + return ( + <> + + Waypoints + + + + + + + + + + + + + + + {(waypoints.data ?? []).map((waypoint, i) => ( + + + + + + + + ))} + +
NameDateXYZ
{waypoint.name}{waypoint.date.toLocaleDateString()}{waypoint.x}{waypoint.y}{waypoint.z}
+
+ + ) +} diff --git a/src/constants.ts b/src/constants.ts index 27d59e0..47e23e7 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -14,7 +14,7 @@ export const minecraftLoginResponse = z.object({ }) export const minecraftProfileState = z.enum(['ACTIVE', 'INACTIVE']) -export const minecraftSkinVariant = z.enum(['SLIM', 'CLASSIC']) +export const minecraftSkinVariant = z.enum(['CLASSIC', 'SLIM']) export const minecraftSkin = z.object({ id: z.string(), @@ -194,9 +194,16 @@ export const gameInstall = z.object({ mods: z.optional(z.array(z.string())), }) -export type MinecraftLoginResponse = z.infer< - typeof minecraftLoginResponse -> +export const waypoint = z.object({ + name: z.string(), + date: z.coerce.date(), + x: z.number(), + y: z.number(), + z: z.number(), +}) + +export type MinecraftLoginResponse = z.infer +export type MinecraftProfile = z.infer export type MojangLibrary = z.infer export type MojangRule = z.infer export type MojangVersionDetails = z.infer @@ -207,21 +214,20 @@ export type XSTSAuthorizeResponse = z.infer export type GameAccount = z.infer export type GameInstall = z.infer +export type Waypoint = z.infer -export type StoreSchema = { - gameInstalls: GameInstall[] - gameLogDirectories: string[] -} - -export const STORE_KEYS: { [key: string]: keyof StoreSchema } = { +export const STORE_KEYS = { + gameAccounts: 'gameAccounts', gameInstalls: 'gameInstalls', gameLogDirectories: 'gameLogDirectories', + waypoints: 'waypoints', } export const QUERY_KEYS = { useGameInstalls: 'useGameInstalls', useGameLogDirectories: 'useGameLogDirectories', useMojangVersionManifests: 'useMojangVersionManifests', + useWaypoints: 'useWaypoints', } export const CHANNELS = { diff --git a/src/store.ts b/src/store.ts index 37d7f32..be9094f 100644 --- a/src/store.ts +++ b/src/store.ts @@ -1,45 +1,28 @@ -import Store, { Schema } from 'electron-store' +import { z } from 'zod' +import Store from 'zod-electron-store' + +import { getDefaultGameLogDirectories } from './utils/gamelog' import { + gameAccount, GameAccount, + gameInstall, GameInstall, STORE_KEYS, - type StoreSchema, + waypoint, } from './constants' -import { getDefaultGameLogDirectories } from './utils/gamelog' -export const schema: Schema = { - gameInstalls: { - type: 'array', - items: { - type: 'object', - properties: { - name: { type: 'string' }, - path: { type: 'string' }, - uuid: { type: 'string' }, - versionManifest: { - type: 'object', - properties: { - id: { type: 'string' }, - type: { type: 'string' }, - url: { type: 'string' }, - time: { type: 'string' }, - releaseTime: { type: 'string' }, - }, - }, - fabricLoaderVersion: { type: 'string', default: '' }, - mods: { type: 'array', items: { type: 'string' }, default: [] }, - }, - }, - default: [], - }, - gameLogDirectories: { - type: 'array', - items: { type: 'string' }, - default: getDefaultGameLogDirectories(), - }, -} +export { Store } + +export const storeSchema = z.object({ + gameAccounts: z.array(gameAccount).default([]), + gameInstalls: z.array(gameInstall).default([]), + gameLogDirectories: z.array(z.string()).default(getDefaultGameLogDirectories()), + waypoints: z.array(waypoint).default([]), +}) + +export type StoreSchema = z.infer -export const newStore = () => new Store({ schema }) +export const newStore = () => new Store({ schema: storeSchema }) export const updateGameAccount = ( store: Store, diff --git a/src/utils/auth.ts b/src/utils/auth.ts index 1494cd2..ffe9850 100644 --- a/src/utils/auth.ts +++ b/src/utils/auth.ts @@ -1,14 +1,12 @@ import axios from 'axios' -import Store from 'electron-store' import { GameAccount, minecraftLoginResponse, minecraftProfile, - StoreSchema, xboxLiveProfile, xstsAuthorizeResponse, } from '../constants' -import { updateGameAccount } from '../store' +import { Store, StoreSchema, updateGameAccount } from '../store' // References: // - https://mojang-api-docs.gapple.pw/ diff --git a/src/utils/coords.ts b/src/utils/coords.ts new file mode 100644 index 0000000..0d88ab8 --- /dev/null +++ b/src/utils/coords.ts @@ -0,0 +1,54 @@ +import { DependencyList, useEffect } from 'react' +import type { ChunkDirection } from '../types' + +const vanillaCoords = + /tp @s (-?\d+\.\d+) (-?\d+\.\d+) (-?\d+\.\d+) (-?\d+\.\d+)/ +const lunarClientCoords = /X: (-?\d+) Y: (-?\d+) Z: (-?\d+)/ + +export const lerp = (a: number, b: number, t: number) => a + (b - a) * t + +export function getDirectionFromRotation( + rotation?: number +): ChunkDirection | undefined { + if (typeof rotation !== 'number') return undefined + const angleInRadians = rotation * (Math.PI / 180) + const x = -Math.sin(angleInRadians) + const z = Math.cos(angleInRadians) + return { + x: Math.abs(x) > 0.5 ? (x > 0 ? 1 : -1) : 0, + z: Math.abs(z) > 0.5 ? (z > 0 ? 1 : -1) : 0, + } +} + +export function getDirectionArrow(direction?: ChunkDirection) { + if (!direction) return '' + switch (direction.z) { + case 1: + return direction.x === 1 ? '↗' : direction.x === -1 ? '↖' : '↑' + case -1: + return direction.x === 1 ? '↘' : direction.x === -1 ? '↙' : '↓' + case 0: + return direction.x === 1 ? '→' : direction.x === -1 ? '←' : '' + } +} + +export const usePastedCoordinates = ( + cb: (x: number, y: number, z: number, rotation?: number) => void, + deps?: DependencyList +) => + useEffect(() => { + const handle = window.api.onClipboardTextUpdated((text: string) => { + let rotation: number | undefined + let match = text.match(vanillaCoords) + if (match) rotation = parseFloat(match[4]) + + if (!match) match = text.match(lunarClientCoords) + if (!match) return + + const x = parseInt(match[1]) + const y = parseInt(match[2]) + const z = parseInt(match[3]) + cb(x, y, z, rotation) + }) + return () => window.api.removeListener(handle) + }, deps) diff --git a/src/utils/launcher.ts b/src/utils/launcher.ts index a319596..584a622 100644 --- a/src/utils/launcher.ts +++ b/src/utils/launcher.ts @@ -1,5 +1,4 @@ import axios from 'axios' -import Store from 'electron-store' import { spawn } from 'child_process' import { app } from 'electron' import fs from 'fs' @@ -12,10 +11,10 @@ import { GameInstall, mojangVersionDetails, parseLibraryName, - StoreSchema, updateVersionDetailsLibrary, } from '../constants' import { AuthProvider } from '../msal/AuthProvider' +import { Store, StoreSchema } from '../store' import { loginToMinecraft } from './auth' import { checkFileExists, diff --git a/yarn.lock b/yarn.lock index 051b385..e460c78 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2598,7 +2598,7 @@ ajv@^6.12.4, ajv@^6.12.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.0, ajv@^8.6.3, ajv@^8.9.0: +ajv@^8.0.0, ajv@^8.9.0: version "8.17.1" resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== @@ -2675,6 +2675,13 @@ arg@^4.1.0: resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + argparse@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" @@ -3245,7 +3252,7 @@ commander@^2.20.0: resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -commander@^4.1.1: +commander@^4.1.1, commander@~4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== @@ -3275,6 +3282,11 @@ compare-version@^0.1.2: resolved "https://registry.yarnpkg.com/compare-version/-/compare-version-0.1.2.tgz#0162ec2d9351f5ddd59a9202cba935366a725080" integrity sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A== +component-emitter@^1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.1.tgz#ef1d5796f7d93f135ee6fb684340b26403c97d17" + integrity sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ== + compressible@~2.0.16: version "2.0.18" resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" @@ -3305,21 +3317,21 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== -conf@^10.2.0: - version "10.2.0" - resolved "https://registry.yarnpkg.com/conf/-/conf-10.2.0.tgz#838e757be963f1a2386dfe048a98f8f69f7b55d6" - integrity sha512-8fLl9F04EJqjSqH+QjITQfJF8BrOVaYr1jewVgSRAEWePfxT0sku4w2hrGQ60BC/TNLGQ2pgxNlTbWQmMPFvXg== +conf-with-zod@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/conf-with-zod/-/conf-with-zod-1.0.5.tgz#6e6f00c4ff5fadf761eafc8cb2e8cf4fffde096b" + integrity sha512-5s7FDVqFERaX47mxAAvD5QjX7HVE9Iv0XEKy1jh3UtXEiW9INp9W9rInP4naPZmJIQsR6bC5jGdSl+HiLNFStw== dependencies: - ajv "^8.6.3" - ajv-formats "^2.1.1" atomically "^1.7.0" debounce-fn "^4.0.0" dot-prop "^6.0.1" env-paths "^2.2.1" + json-schema-to-zod "^1.1.1" json-schema-typed "^7.0.3" onetime "^5.1.2" pkg-up "^3.1.0" - semver "^7.3.5" + semver "^7.5.4" + zod "^3.23.8" connect-history-api-fallback@^2.0.0: version "2.0.0" @@ -3363,6 +3375,11 @@ cookie@0.6.0: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.6.0.tgz#2798b04b071b0ecbff0dbb62a505a8efa4e19051" integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw== +cookiejar@^2.1.2: + version "2.1.4" + resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.4.tgz#ee669c1fea2cf42dc31585469d193fef0d65771b" + integrity sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw== + copy-to-clipboard@3.3.3: version "3.3.3" resolved "https://registry.yarnpkg.com/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz#55ac43a1db8ae639a4bd99511c148cdd1b83a1b0" @@ -3901,14 +3918,6 @@ electron-squirrel-startup@^1.0.1: dependencies: debug "^2.2.0" -electron-store@^8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/electron-store/-/electron-store-8.2.0.tgz#114e6e453e8bb746ab4ccb542424d8c881ad2ca1" - integrity sha512-ukLL5Bevdil6oieAOXz3CMy+OgaItMiVBg701MNlG6W5RaC0AHN7rvlqTCmeb6O7jP0Qa1KKYTE0xV0xbhF4Hw== - dependencies: - conf "^10.2.0" - type-fest "^2.17.0" - electron-to-chromium@^1.5.4: version "1.5.27" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.27.tgz#5203ce5d6054857d84ba84d3681cbe59132ade78" @@ -4250,6 +4259,11 @@ espree@^9.6.0, espree@^9.6.1: acorn-jsx "^5.3.2" eslint-visitor-keys "^3.4.1" +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + esquery@^1.4.2: version "1.6.0" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" @@ -4425,6 +4439,11 @@ fast-levenshtein@^2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== +fast-safe-stringify@^2.0.7: + version "2.1.1" + resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884" + integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== + fast-uri@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.1.tgz#cddd2eecfc83a71c1be2cc2ef2061331be8a7134" @@ -4607,6 +4626,15 @@ fork-ts-checker-webpack-plugin@^7.2.13: semver "^7.3.5" tapable "^2.2.1" +form-data@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.2.tgz#83ad9ced7c03feaad97e293d6f6091011e1659c8" + integrity sha512-sJe+TQb2vIaIyO783qN6BlMYWMw3WBOHA1Ay2qxsnjuafEOQFJ2JakedOQirT6D5XPRxDvS7AHYyem9fTpb4LQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + form-data@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.1.tgz#ba1076daaaa5bfd7e99c1a6cb02aa0a5cff90d48" @@ -4616,6 +4644,11 @@ form-data@^4.0.0: combined-stream "^1.0.8" mime-types "^2.1.12" +formidable@^1.2.2: + version "1.2.6" + resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.2.6.tgz#d2a51d60162bbc9b4a055d8457a7c75315d1a168" + integrity sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ== + forwarded@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" @@ -4975,6 +5008,13 @@ graphemer@^1.4.0: resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== +graphlib@^2.1.8: + version "2.1.8" + resolved "https://registry.yarnpkg.com/graphlib/-/graphlib-2.1.8.tgz#5761d414737870084c92ec7b5dbcb0592c9d35da" + integrity sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A== + dependencies: + lodash "^4.17.15" + handle-thing@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" @@ -5567,6 +5607,14 @@ jest-worker@^27.4.5: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== +js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + js-yaml@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" @@ -5594,6 +5642,28 @@ json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== +json-refs@^3.0.15: + version "3.0.15" + resolved "https://registry.yarnpkg.com/json-refs/-/json-refs-3.0.15.tgz#1089f4acf263a3152c790479485195cd6449e855" + integrity sha512-0vOQd9eLNBL18EGl5yYaO44GhixmImes2wiYn9Z3sag3QnehWrYWlB9AFtMxCL2Bj3fyxgDYkxGFEU/chlYssw== + dependencies: + commander "~4.1.1" + graphlib "^2.1.8" + js-yaml "^3.13.1" + lodash "^4.17.15" + native-promise-only "^0.8.1" + path-loader "^1.0.10" + slash "^3.0.0" + uri-js "^4.2.2" + +json-schema-to-zod@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/json-schema-to-zod/-/json-schema-to-zod-1.2.0.tgz#18568f79407996bd65b85dde349d6fa461468b11" + integrity sha512-fC0JgINgkh1RWHbOonzrxP+221/oGwPE014bJxWRsdK6TqC7vLtx9t4l5dlKXzFR9o35/s0v/qgb15Bfwkm2xA== + dependencies: + json-refs "^3.0.15" + prettier "^2.4.1" + json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" @@ -5973,7 +6043,7 @@ merge2@^1.3.0, merge2@^1.4.1: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -methods@~1.1.2: +methods@^1.1.2, methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== @@ -6008,6 +6078,11 @@ mime@1.6.0: resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== +mime@^2.4.6: + version "2.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" + integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== + mimic-fn@^2.0.0, mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" @@ -6153,6 +6228,11 @@ nanoid@^3.3.7: resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== +native-promise-only@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/native-promise-only/-/native-promise-only-0.8.1.tgz#20a318c30cb45f71fe7adfbf7b21c99c1472ef11" + integrity sha512-zkVhZUA3y8mbz652WrL5x0fB0ehrBkulWT3TomAQ9iDtyXZvzKeEA6GPxAItBYeNYl5yngKRX612qHOhvMkDeg== + natural-compare-lite@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" @@ -6632,6 +6712,14 @@ path-key@^3.0.0, path-key@^3.1.0: resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== +path-loader@^1.0.10: + version "1.0.12" + resolved "https://registry.yarnpkg.com/path-loader/-/path-loader-1.0.12.tgz#c5a99d464da27cfde5891d158a68807abbdfa5f5" + integrity sha512-n7oDG8B+k/p818uweWrOixY9/Dsr89o2TkCm6tOTex3fpdo2+BFDgR+KpB37mGKBRsBAlR8CIJMFN0OEy/7hIQ== + dependencies: + native-promise-only "^0.8.1" + superagent "^7.1.6" + path-parse@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" @@ -6776,6 +6864,11 @@ prelude-ls@^1.2.1: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== +prettier@^2.4.1: + version "2.8.8" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" + integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== + pretty-error@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6" @@ -6842,7 +6935,7 @@ punycode@^2.1.0: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== -qs@6.13.0: +qs@6.13.0, qs@^6.9.4: version "6.13.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.0.tgz#6ca3bd58439f7e245655798997787b0d88a51906" integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg== @@ -7589,6 +7682,11 @@ sprintf-js@^1.1.2, sprintf-js@^1.1.3: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a" integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + ssri@^9.0.0: version "9.0.1" resolved "https://registry.yarnpkg.com/ssri/-/ssri-9.0.1.tgz#544d4c357a8d7b71a19700074b6883fcb4eae057" @@ -7729,6 +7827,23 @@ sumchecker@^3.0.1: dependencies: debug "^4.1.0" +superagent@6.0.0, superagent@^7.1.6: + version "6.0.0" + resolved "https://registry.yarnpkg.com/superagent/-/superagent-6.0.0.tgz#882a73dcdf4ce2b9f5abaea01e9064585d5c7072" + integrity sha512-gBiyDSUR3zbYO8za+MudSNxMFSOhKcZfQ1Anya1DWzk9R32zl++cYUFHXzP3VnyvQO8h/1/uPPA9FUDDtE+qdA== + dependencies: + component-emitter "^1.3.0" + cookiejar "^2.1.2" + debug "^4.1.1" + fast-safe-stringify "^2.0.7" + form-data "^3.0.0" + formidable "^1.2.2" + methods "^1.1.2" + mime "^2.4.6" + qs "^6.9.4" + readable-stream "^3.6.0" + semver "^7.3.2" + supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -8532,6 +8647,14 @@ yocto-queue@^1.0.0: resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.1.1.tgz#fef65ce3ac9f8a32ceac5a634f74e17e5b232110" integrity sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g== +zod-electron-store@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/zod-electron-store/-/zod-electron-store-1.0.5.tgz#694d7394d6dcb36841b212d31c05ca45ba79388e" + integrity sha512-1H2x3C2W47CXDgdMPLKLY2jnHVQDq9ipNOFOf5Hk5n+gkmgOzDgG/JjkgRdsVwgtRWZtoS31YqKE6vRX1/CVXg== + dependencies: + conf-with-zod "^1.0.5" + type-fest "^2.17.0" + zod@^3.23.8: version "3.23.8" resolved "https://registry.yarnpkg.com/zod/-/zod-3.23.8.tgz#e37b957b5d52079769fb8097099b592f0ef4067d"