From 8ad243b079330c4e75147ba468de1fbff38320c7 Mon Sep 17 00:00:00 2001 From: gwansikk Date: Tue, 19 Nov 2024 18:50:00 +0900 Subject: [PATCH 01/13] =?UTF-8?q?refactor:=20=ED=94=84=EB=A1=9C=EC=A0=9D?= =?UTF-8?q?=ED=8A=B8=20=EA=B5=AC=EC=A1=B0=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .prettierrc.js => .prettierrc.mjs | 0 src/App.tsx | 37 ++++++++++++-- src/{router => }/Layout.tsx | 4 +- src/api/acryl.ts | 2 +- src/api/scenario.ts | 4 +- .../{common => }/Button/Button.style.tsx | 2 +- src/components/{common => }/Button/Button.tsx | 8 ++- .../Button/Button.type.ts} | 0 .../{common => }/CaseElement/CaseElement.tsx | 0 .../{common => }/Element/Element.style.tsx | 0 .../{common => }/Element/Element.tsx | 0 .../{common => }/Element/Element.type.ts | 0 .../{common => }/ElementLine/ElementLine.tsx | 0 .../{common => }/ElementTree/ElementTree.tsx | 0 src/components/{common => }/Footer/Footer.tsx | 0 .../GroupElement/GroupElement.tsx | 0 src/components/{common => }/Input/Input.tsx | 0 .../LayerElement/LayerElement.tsx | 0 .../{common => }/Modal/AccidentModal.tsx | 10 ++-- .../{common => }/Modal/ApplyPresetModal.tsx | 6 +-- .../{common => }/Modal/ExtractCasesModal.tsx | 2 +- .../{common => }/Modal/LawModal.tsx | 8 +-- src/components/{common => }/Modal/Modal.tsx | 0 .../{common => }/Modal/RandomModal.tsx | 4 +- .../Modal/SelectedRandomModal.tsx | 4 +- src/components/{common => }/Navbar/Navbar.tsx | 0 .../{common => }/Spinner/Spinner.tsx | 0 src/components/common/Button/Button.type.ts | 1 - .../element-data.ts} | 14 +++--- src/constants/{element.ts => layer.ts} | 0 src/constants/preset.ts | 10 +++- src/constants/{header.ts => table-header.ts} | 0 src/main.tsx | 16 ++---- src/pages/HomePage/HomePage.tsx | 22 ++++---- .../CreateRandomButton.tsx | 2 +- .../CreateSelectRandomButton.tsx | 2 +- .../HandleScenarioButtons/DeleteButton.tsx | 15 +++--- .../HomePage/components}/Layer/Layer.tsx | 2 +- .../components}/LayerHeader/LayerHeader.tsx | 2 +- .../HomePage/components}/Modals/Modals.tsx | 12 ++--- .../components}/ResultTable/ResultTable.tsx | 50 ++++++++----------- .../components}/SaveButton/SaveButton.tsx | 12 ++--- .../TopControlPanel/TopButtons.tsx | 2 +- .../TopControlPanel/TopControlPanel.tsx | 0 src/pages/{SplashPage => }/SplashPage.tsx | 6 +-- src/router/Router.tsx | 21 -------- src/types/element.ts | 17 ++----- src/utils/element.ts | 14 +++--- src/utils/toast.ts | 9 ++-- 49 files changed, 149 insertions(+), 171 deletions(-) rename .prettierrc.js => .prettierrc.mjs (100%) rename src/{router => }/Layout.tsx (74%) rename src/components/{common => }/Button/Button.style.tsx (77%) rename src/components/{common => }/Button/Button.tsx (73%) rename src/{assets/.gitkeep => components/Button/Button.type.ts} (100%) rename src/components/{common => }/CaseElement/CaseElement.tsx (100%) rename src/components/{common => }/Element/Element.style.tsx (100%) rename src/components/{common => }/Element/Element.tsx (100%) rename src/components/{common => }/Element/Element.type.ts (100%) rename src/components/{common => }/ElementLine/ElementLine.tsx (100%) rename src/components/{common => }/ElementTree/ElementTree.tsx (100%) rename src/components/{common => }/Footer/Footer.tsx (100%) rename src/components/{common => }/GroupElement/GroupElement.tsx (100%) rename src/components/{common => }/Input/Input.tsx (100%) rename src/components/{common => }/LayerElement/LayerElement.tsx (100%) rename src/components/{common => }/Modal/AccidentModal.tsx (90%) rename src/components/{common => }/Modal/ApplyPresetModal.tsx (92%) rename src/components/{common => }/Modal/ExtractCasesModal.tsx (99%) rename src/components/{common => }/Modal/LawModal.tsx (91%) rename src/components/{common => }/Modal/Modal.tsx (100%) rename src/components/{common => }/Modal/RandomModal.tsx (96%) rename src/components/{common => }/Modal/SelectedRandomModal.tsx (96%) rename src/components/{common => }/Navbar/Navbar.tsx (100%) rename src/components/{common => }/Spinner/Spinner.tsx (100%) delete mode 100644 src/components/common/Button/Button.type.ts rename src/{mocks/elementData.ts => constants/element-data.ts} (99%) rename src/constants/{element.ts => layer.ts} (100%) rename src/constants/{header.ts => table-header.ts} (100%) rename src/{components/home => pages/HomePage/components}/HandleScenarioButtons/CreateRandomButton.tsx (93%) rename src/{components/home => pages/HomePage/components}/HandleScenarioButtons/CreateSelectRandomButton.tsx (93%) rename src/{components/home => pages/HomePage/components}/HandleScenarioButtons/DeleteButton.tsx (63%) rename src/{components/home => pages/HomePage/components}/Layer/Layer.tsx (97%) rename src/{components/home => pages/HomePage/components}/LayerHeader/LayerHeader.tsx (95%) rename src/{components/home => pages/HomePage/components}/Modals/Modals.tsx (56%) rename src/{components/home => pages/HomePage/components}/ResultTable/ResultTable.tsx (69%) rename src/{components/home => pages/HomePage/components}/SaveButton/SaveButton.tsx (78%) rename src/{components/home => pages/HomePage/components}/TopControlPanel/TopButtons.tsx (97%) rename src/{components/home => pages/HomePage/components}/TopControlPanel/TopControlPanel.tsx (100%) rename src/pages/{SplashPage => }/SplashPage.tsx (92%) delete mode 100644 src/router/Router.tsx diff --git a/.prettierrc.js b/.prettierrc.mjs similarity index 100% rename from .prettierrc.js rename to .prettierrc.mjs diff --git a/src/App.tsx b/src/App.tsx index f66f3f6..89d94bc 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,7 +1,34 @@ -import Router from '@router/Router'; +import { PATH } from '@constants/path'; +import HomePage from '@pages/HomePage/HomePage'; +import SplashPage from '@pages/SplashPage'; +import Layout from '@/Layout'; +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; +import { + createBrowserRouter, + Navigate, + RouterProvider, +} from 'react-router-dom'; +import { RecoilRoot } from 'recoil'; -function App() { - return ; -} +const queryClient = new QueryClient(); + +const router = createBrowserRouter([ + { + element: , + children: [ + { path: PATH.ROOT, element: }, + { path: PATH.HOME, element: }, + { path: '*', element: }, + ], + }, +]); -export default App; +export default function App() { + return ( + + + + + + ); +} diff --git a/src/router/Layout.tsx b/src/Layout.tsx similarity index 74% rename from src/router/Layout.tsx rename to src/Layout.tsx index 277ce54..b7c0aca 100644 --- a/src/router/Layout.tsx +++ b/src/Layout.tsx @@ -1,5 +1,5 @@ -import Footer from '@components/common/Footer/Footer'; -import Navbar from '@components/common/Navbar/Navbar'; +import Footer from '@components/Footer/Footer'; +import Navbar from '@components/Navbar/Navbar'; import { Outlet } from 'react-router-dom'; const Layout = () => { diff --git a/src/api/acryl.ts b/src/api/acryl.ts index 86a099e..a6c79ad 100644 --- a/src/api/acryl.ts +++ b/src/api/acryl.ts @@ -16,6 +16,6 @@ export const postAccidentData = async (data: string) => { return response; } catch (e) { - console.log(e); + console.error(e); } }; diff --git a/src/api/scenario.ts b/src/api/scenario.ts index 222d466..93f4d08 100644 --- a/src/api/scenario.ts +++ b/src/api/scenario.ts @@ -14,7 +14,7 @@ export const postSaveScenarios = async (data: string) => { return res; } catch (e) { - console.log(e); + console.error(e); } }; @@ -26,6 +26,6 @@ export const deleteScenarios = async () => { return res; } catch (e) { - console.log(e); + console.error(e); } }; diff --git a/src/components/common/Button/Button.style.tsx b/src/components/Button/Button.style.tsx similarity index 77% rename from src/components/common/Button/Button.style.tsx rename to src/components/Button/Button.style.tsx index 1123e73..9252d7b 100644 --- a/src/components/common/Button/Button.style.tsx +++ b/src/components/Button/Button.style.tsx @@ -4,6 +4,6 @@ export const buttonColors = { blue: 'border-blue-500 text-blue-500 hover:bg-blue-100 dark:hover:bg-blue-500/20', black: 'border-black bg-black text-white hover:bg-gray-900 dark:text-white/80 dark:hover:bg-gray-900', - red: 'border-red-500 bg-red-500 text-white hover:bg-red-900 border-red-900 dark:text-white/80 dark:hover:bg-red-900', + red: 'border-red-500 bg-red-500 text-white hover:bg-red-900 dark:text-white/80 dark:hover:bg-red-900', disabled: 'border bg-gray-200 text-white cursor-not-allowed', }; diff --git a/src/components/common/Button/Button.tsx b/src/components/Button/Button.tsx similarity index 73% rename from src/components/common/Button/Button.tsx rename to src/components/Button/Button.tsx index 999b2f1..d437bfa 100644 --- a/src/components/common/Button/Button.tsx +++ b/src/components/Button/Button.tsx @@ -1,15 +1,13 @@ import React, { forwardRef } from 'react'; import classNames from 'classnames'; -import type { ButtonColorType } from './Button.type'; import { buttonColors } from './Button.style'; -export interface ButtonProps - extends React.ButtonHTMLAttributes { - color?: ButtonColorType; +interface Props extends React.ButtonHTMLAttributes { icon?: React.ReactNode; + color?: 'default' | 'blue' | 'black' | 'disabled' | 'red'; } -const Button = forwardRef( +const Button = forwardRef( ({ children, className, color = 'default', icon, ...props }, ref) => { return ( diff --git a/src/components/home/Layer/Layer.tsx b/src/pages/HomePage/components/Layer/Layer.tsx similarity index 97% rename from src/components/home/Layer/Layer.tsx rename to src/pages/HomePage/components/Layer/Layer.tsx index 41acdac..2f9046b 100644 --- a/src/components/home/Layer/Layer.tsx +++ b/src/pages/HomePage/components/Layer/Layer.tsx @@ -5,7 +5,7 @@ import { ElementProps, ElementTree, ElementTreeWrapper, -} from '@components/common/ElementTree/ElementTree'; +} from '@components/ElementTree/ElementTree'; import ResultTable from '../ResultTable/ResultTable'; import SaveButton from '../SaveButton/SaveButton'; import CreateRandomButton from '../HandleScenarioButtons/CreateRandomButton'; diff --git a/src/components/home/LayerHeader/LayerHeader.tsx b/src/pages/HomePage/components/LayerHeader/LayerHeader.tsx similarity index 95% rename from src/components/home/LayerHeader/LayerHeader.tsx rename to src/pages/HomePage/components/LayerHeader/LayerHeader.tsx index 8e05a7e..3b8c1c3 100644 --- a/src/components/home/LayerHeader/LayerHeader.tsx +++ b/src/pages/HomePage/components/LayerHeader/LayerHeader.tsx @@ -1,4 +1,4 @@ -import { LAYER_LIST } from '@constants/element'; +import { LAYER_LIST } from '@constants/layer'; import classNames from 'classnames'; export interface LayerHeaderProps { diff --git a/src/components/home/Modals/Modals.tsx b/src/pages/HomePage/components/Modals/Modals.tsx similarity index 56% rename from src/components/home/Modals/Modals.tsx rename to src/pages/HomePage/components/Modals/Modals.tsx index 36bce89..23da1c4 100644 --- a/src/components/home/Modals/Modals.tsx +++ b/src/pages/HomePage/components/Modals/Modals.tsx @@ -1,8 +1,8 @@ -import AccidentModal from '@components/common/Modal/AccidentModal'; -import ApplyPresetModal from '@components/common/Modal/ApplyPresetModal'; -import LawModal from '@components/common/Modal/LawModal'; -import RandomModal from '@components/common/Modal/RandomModal'; -import SelectedRandomModal from '@components/common/Modal/SelectedRandomModal'; +import AccidentModal from '@components/Modal/AccidentModal'; +import ApplyPresetModal from '@components/Modal/ApplyPresetModal'; +import LawModal from '@components/Modal/LawModal'; +import RandomModal from '@components/Modal/RandomModal'; +import SelectedRandomModal from '@components/Modal/SelectedRandomModal'; import { Modal as ModalType } from '@type/common'; interface ModalsProps { @@ -21,6 +21,4 @@ const Modals = ({ modalType }: ModalsProps) => { ); }; -Modals.propTypes = {}; - export default Modals; diff --git a/src/components/home/ResultTable/ResultTable.tsx b/src/pages/HomePage/components/ResultTable/ResultTable.tsx similarity index 69% rename from src/components/home/ResultTable/ResultTable.tsx rename to src/pages/HomePage/components/ResultTable/ResultTable.tsx index cc6df37..9839883 100644 --- a/src/components/home/ResultTable/ResultTable.tsx +++ b/src/pages/HomePage/components/ResultTable/ResultTable.tsx @@ -1,14 +1,10 @@ import { useCallback, useEffect, useMemo, useState } from 'react'; -import { Button } from '@components/common/Button/Button'; -import { TABLE_HEADER } from '@constants/header'; -import { ElementType, TestCase } from '@type/element'; +import { Button } from '@components/Button/Button'; +import { TABLE_HEADER } from '@constants/table-header'; +import type { ElementType } from '@type/element'; import type { Step } from '@type/common'; import { useGetResultStore } from '@store/result'; -import ExtractCasesModal from '@components/common/Modal/ExtractCasesModal'; - -export interface ResultProps { - result: TestCase; -} +import ExtractCasesModal from '@components/Modal/ExtractCasesModal'; const limit = 20; @@ -69,27 +65,23 @@ const ResultTable = () => { {cases.length > 0 && currentPage.map((row, index) => ( - <> - handleRowClick(row)} - > - {TABLE_HEADER.map((header) => { - const element = row.find( - (el) => el.parentId === header.id, - ); - return ( - - {element?.value || '없음'} - - ); - })} - - + handleRowClick(row)} + > + {TABLE_HEADER.map((header) => { + const element = row.find((el) => el.parentId === header.id); + return ( + + {element?.value || '없음'} + + ); + })} + ))} diff --git a/src/components/home/SaveButton/SaveButton.tsx b/src/pages/HomePage/components/SaveButton/SaveButton.tsx similarity index 78% rename from src/components/home/SaveButton/SaveButton.tsx rename to src/pages/HomePage/components/SaveButton/SaveButton.tsx index a86f58f..4d2f619 100644 --- a/src/components/home/SaveButton/SaveButton.tsx +++ b/src/pages/HomePage/components/SaveButton/SaveButton.tsx @@ -1,11 +1,11 @@ import { postSaveScenarios } from '@api/scenario'; -import { Button } from '@components/common/Button/Button'; +import { Button } from '@components/Button/Button'; import { BsDatabaseFillAdd } from 'react-icons/bs'; import { useGetParsedDataStore } from '@store/parsedData'; import { useGetResultStore } from '@store/result'; -import { message } from '@utils/toast'; +import { toast } from '@utils/toast'; import { useMutation } from '@tanstack/react-query'; -import Spinner from '@components/common/Spinner/Spinner'; +import Spinner from '@components/Spinner/Spinner'; const SaveButton = () => { const parsedData = useGetParsedDataStore(); @@ -15,16 +15,16 @@ const SaveButton = () => { const mutation = useMutation({ mutationFn: postSaveScenarios, onSuccess: () => { - message('저장이 완료되었습니다!'); + toast('저장이 완료되었습니다!'); }, onError: () => { - message('오류가 발생했습니다.'); + toast('오류가 발생했습니다.'); }, }); const handleSaveButtonClick = () => { if (isEmpty) { - message('생성된 시나리오가 없습니다.'); + toast('생성된 시나리오가 없습니다.'); return; } diff --git a/src/components/home/TopControlPanel/TopButtons.tsx b/src/pages/HomePage/components/TopControlPanel/TopButtons.tsx similarity index 97% rename from src/components/home/TopControlPanel/TopButtons.tsx rename to src/pages/HomePage/components/TopControlPanel/TopButtons.tsx index 215e4dd..04db6d2 100644 --- a/src/components/home/TopControlPanel/TopButtons.tsx +++ b/src/pages/HomePage/components/TopControlPanel/TopButtons.tsx @@ -1,4 +1,4 @@ -import { Button } from '@components/common/Button/Button'; +import { Button } from '@components/Button/Button'; import { PiCircuitry, PiSirenFill } from 'react-icons/pi'; import { FaBook } from 'react-icons/fa6'; import { IoClose, IoFilter, IoReload } from 'react-icons/io5'; diff --git a/src/components/home/TopControlPanel/TopControlPanel.tsx b/src/pages/HomePage/components/TopControlPanel/TopControlPanel.tsx similarity index 100% rename from src/components/home/TopControlPanel/TopControlPanel.tsx rename to src/pages/HomePage/components/TopControlPanel/TopControlPanel.tsx diff --git a/src/pages/SplashPage/SplashPage.tsx b/src/pages/SplashPage.tsx similarity index 92% rename from src/pages/SplashPage/SplashPage.tsx rename to src/pages/SplashPage.tsx index 4f4793e..19306be 100644 --- a/src/pages/SplashPage/SplashPage.tsx +++ b/src/pages/SplashPage.tsx @@ -1,7 +1,7 @@ import { Link } from 'react-router-dom'; import { PATH } from '@constants/path'; -const SplashPage = () => { +export default function SplashPage() { return (
logo @@ -16,6 +16,4 @@ const SplashPage = () => {
); -}; - -export default SplashPage; +} diff --git a/src/router/Router.tsx b/src/router/Router.tsx deleted file mode 100644 index 1fa84be..0000000 --- a/src/router/Router.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import { RouterProvider, createBrowserRouter } from 'react-router-dom'; -import SplashPage from '@pages/SplashPage/SplashPage'; -import HomePage from '@pages/HomePage/HomePage'; -import { PATH } from '@constants/path'; -import Layout from './Layout'; - -const Router = () => ( - , - children: [ - { path: PATH.ROOT, element: }, - { path: PATH.HOME, element: }, - ], - }, - ])} - /> -); - -export default Router; diff --git a/src/types/element.ts b/src/types/element.ts index 3fb8700..e0dd365 100644 --- a/src/types/element.ts +++ b/src/types/element.ts @@ -8,12 +8,12 @@ export type ElementTypeType = 'layer' | 'group' | 'case'; */ export interface ElementType { id: number; - layer?: number; type: ElementTypeType; - name?: string; parentId: number | null; value: string; - content?: string | undefined; + name?: string; + layer?: number; + content?: string; } /** @@ -31,7 +31,7 @@ export type TestCase = { description: string; cases: ElementType[][] }; /** * @description 아크릴 통신에 사용되는 response의 형식 */ -export interface responseDataType { +export interface ResponseDataType { r: number; result: { [key: string]: { @@ -51,12 +51,3 @@ export interface ParsedElement { * @description 시나리오 결과를 파싱할 때, 전체 요소 */ export type ParsedTestCasesLayer = Record; - -/** - * @description 프리셋의 요소들 - */ -export interface Preset { - id: number; - name: string; - removalElements: ElementType[]; -} diff --git a/src/utils/element.ts b/src/utils/element.ts index d4b369e..0a8aa6c 100644 --- a/src/utils/element.ts +++ b/src/utils/element.ts @@ -1,13 +1,13 @@ import { Response } from '@tauri-apps/api/http'; import { ParsedElement } from './../types/element'; -import { elementData, memoCases } from '@mocks/elementData'; +import { ELEMENT_DATA, MEMO_PARENT_CASES } from '@constants/element-data'; import { RandomType } from '@type/common'; import type { ElementType, ElementWithChildrenType, ParsedTestCasesLayer, TestCase, - responseDataType, + ResponseDataType, } from '@type/element'; /** @@ -16,11 +16,11 @@ import type { * @returns 해당 레이어의 하위 레이어를 찾아서 트리 구조로 반환 */ export function treeParser(layer: number): ElementWithChildrenType { - const findLayer = elementData.find((item) => item.id === layer); + const findLayer = ELEMENT_DATA.find((item) => item.id === layer); if (findLayer) { // Layer가 존재하다면 해당 레이어의 하위 레이어를 찾아서 트리 구조로 반환 - const children = elementData.filter((item) => item.parentId === layer); + const children = ELEMENT_DATA.filter((item) => item.parentId === layer); const result = { ...findLayer, children: children.map((item) => { @@ -62,7 +62,7 @@ export async function createTestCases( parentIds.map(async (pid) => { const filteredCases = type === '랜덤' - ? memoCases[pid!] + ? MEMO_PARENT_CASES[pid!] : cases.filter((c) => c.parentId === pid); return filteredCases[ Math.floor(Math.random() * filteredCases.length) @@ -81,7 +81,7 @@ export async function createTestCases( * 입력받은 데이터를 아크릴 측으로 전송합니다 */ export function matchingCaseWithResponse( - res: Response, + res: Response, ): ElementType[] { const result: ElementType[] = []; @@ -96,7 +96,7 @@ export function matchingCaseWithResponse( }); // mocks 배열을 순회하며 name이 searchValues에 포함되는지 확인 - elementData.forEach((item) => { + ELEMENT_DATA.forEach((item) => { if (searchValues.includes(item.value) && item.type === 'case') { result.push(item); } diff --git a/src/utils/toast.ts b/src/utils/toast.ts index e0cb29b..90cd9d5 100644 --- a/src/utils/toast.ts +++ b/src/utils/toast.ts @@ -1,12 +1,11 @@ -import toast from 'react-hot-toast'; +import reactHotToast from 'react-hot-toast'; -export const message = (text: string) => { - toast(text, { +export const toast = (message: string) => { + reactHotToast(message, { duration: 1500, - position: 'bottom-right', + position: 'top-right', style: { width: 280, - height: 160, fontSize: 18, fontWeight: 700, }, From 78cf7934fe6ccdf743dca79400d9ed363655d788 Mon Sep 17 00:00:00 2001 From: gwansikk Date: Tue, 19 Nov 2024 19:05:01 +0900 Subject: [PATCH 02/13] chore: update yarn --- .yarn/sdks/eslint/bin/eslint.js | 14 +- .yarn/sdks/eslint/lib/api.js | 14 +- .yarn/sdks/eslint/lib/unsupported-api.js | 14 +- .yarn/sdks/typescript/lib/tsc.js | 14 +- .yarn/sdks/typescript/lib/tsserver.js | 201 +++++++------------ .yarn/sdks/typescript/lib/tsserverlibrary.js | 201 +++++++------------ .yarn/sdks/typescript/lib/typescript.js | 14 +- 7 files changed, 187 insertions(+), 285 deletions(-) diff --git a/.yarn/sdks/eslint/bin/eslint.js b/.yarn/sdks/eslint/bin/eslint.js index c3f6cda..e6604ff 100755 --- a/.yarn/sdks/eslint/bin/eslint.js +++ b/.yarn/sdks/eslint/bin/eslint.js @@ -1,11 +1,11 @@ #!/usr/bin/env node -const { existsSync } = require(`fs`); -const { createRequire, register } = require(`module`); -const { resolve } = require(`path`); -const { pathToFileURL } = require(`url`); +const {existsSync} = require(`fs`); +const {createRequire, register} = require(`module`); +const {resolve} = require(`path`); +const {pathToFileURL} = require(`url`); -const relPnpApiPath = '../../../../.pnp.cjs'; +const relPnpApiPath = "../../../../.pnp.cjs"; const absPnpApiPath = resolve(__dirname, relPnpApiPath); const absUserWrapperPath = resolve(__dirname, `./sdk.user.cjs`); @@ -25,8 +25,8 @@ if (existsSync(absPnpApiPath)) { } const wrapWithUserWrapper = existsSync(absUserWrapperPath) - ? (exports) => absRequire(absUserWrapperPath)(exports) - : (exports) => exports; + ? exports => absRequire(absUserWrapperPath)(exports) + : exports => exports; // Defer to the real eslint/bin/eslint.js your application uses module.exports = wrapWithUserWrapper(absRequire(`eslint/bin/eslint.js`)); diff --git a/.yarn/sdks/eslint/lib/api.js b/.yarn/sdks/eslint/lib/api.js index d30d393..8addf97 100644 --- a/.yarn/sdks/eslint/lib/api.js +++ b/.yarn/sdks/eslint/lib/api.js @@ -1,11 +1,11 @@ #!/usr/bin/env node -const { existsSync } = require(`fs`); -const { createRequire, register } = require(`module`); -const { resolve } = require(`path`); -const { pathToFileURL } = require(`url`); +const {existsSync} = require(`fs`); +const {createRequire, register} = require(`module`); +const {resolve} = require(`path`); +const {pathToFileURL} = require(`url`); -const relPnpApiPath = '../../../../.pnp.cjs'; +const relPnpApiPath = "../../../../.pnp.cjs"; const absPnpApiPath = resolve(__dirname, relPnpApiPath); const absUserWrapperPath = resolve(__dirname, `./sdk.user.cjs`); @@ -25,8 +25,8 @@ if (existsSync(absPnpApiPath)) { } const wrapWithUserWrapper = existsSync(absUserWrapperPath) - ? (exports) => absRequire(absUserWrapperPath)(exports) - : (exports) => exports; + ? exports => absRequire(absUserWrapperPath)(exports) + : exports => exports; // Defer to the real eslint your application uses module.exports = wrapWithUserWrapper(absRequire(`eslint`)); diff --git a/.yarn/sdks/eslint/lib/unsupported-api.js b/.yarn/sdks/eslint/lib/unsupported-api.js index ddc3d92..c2b464c 100644 --- a/.yarn/sdks/eslint/lib/unsupported-api.js +++ b/.yarn/sdks/eslint/lib/unsupported-api.js @@ -1,11 +1,11 @@ #!/usr/bin/env node -const { existsSync } = require(`fs`); -const { createRequire, register } = require(`module`); -const { resolve } = require(`path`); -const { pathToFileURL } = require(`url`); +const {existsSync} = require(`fs`); +const {createRequire, register} = require(`module`); +const {resolve} = require(`path`); +const {pathToFileURL} = require(`url`); -const relPnpApiPath = '../../../../.pnp.cjs'; +const relPnpApiPath = "../../../../.pnp.cjs"; const absPnpApiPath = resolve(__dirname, relPnpApiPath); const absUserWrapperPath = resolve(__dirname, `./sdk.user.cjs`); @@ -25,8 +25,8 @@ if (existsSync(absPnpApiPath)) { } const wrapWithUserWrapper = existsSync(absUserWrapperPath) - ? (exports) => absRequire(absUserWrapperPath)(exports) - : (exports) => exports; + ? exports => absRequire(absUserWrapperPath)(exports) + : exports => exports; // Defer to the real eslint/use-at-your-own-risk your application uses module.exports = wrapWithUserWrapper(absRequire(`eslint/use-at-your-own-risk`)); diff --git a/.yarn/sdks/typescript/lib/tsc.js b/.yarn/sdks/typescript/lib/tsc.js index 0312bae..da411bd 100644 --- a/.yarn/sdks/typescript/lib/tsc.js +++ b/.yarn/sdks/typescript/lib/tsc.js @@ -1,11 +1,11 @@ #!/usr/bin/env node -const { existsSync } = require(`fs`); -const { createRequire, register } = require(`module`); -const { resolve } = require(`path`); -const { pathToFileURL } = require(`url`); +const {existsSync} = require(`fs`); +const {createRequire, register} = require(`module`); +const {resolve} = require(`path`); +const {pathToFileURL} = require(`url`); -const relPnpApiPath = '../../../../.pnp.cjs'; +const relPnpApiPath = "../../../../.pnp.cjs"; const absPnpApiPath = resolve(__dirname, relPnpApiPath); const absUserWrapperPath = resolve(__dirname, `./sdk.user.cjs`); @@ -25,8 +25,8 @@ if (existsSync(absPnpApiPath)) { } const wrapWithUserWrapper = existsSync(absUserWrapperPath) - ? (exports) => absRequire(absUserWrapperPath)(exports) - : (exports) => exports; + ? exports => absRequire(absUserWrapperPath)(exports) + : exports => exports; // Defer to the real typescript/lib/tsc.js your application uses module.exports = wrapWithUserWrapper(absRequire(`typescript/lib/tsc.js`)); diff --git a/.yarn/sdks/typescript/lib/tsserver.js b/.yarn/sdks/typescript/lib/tsserver.js index fd31a48..6249c46 100644 --- a/.yarn/sdks/typescript/lib/tsserver.js +++ b/.yarn/sdks/typescript/lib/tsserver.js @@ -1,11 +1,11 @@ #!/usr/bin/env node -const { existsSync } = require(`fs`); -const { createRequire, register } = require(`module`); -const { resolve } = require(`path`); -const { pathToFileURL } = require(`url`); +const {existsSync} = require(`fs`); +const {createRequire, register} = require(`module`); +const {resolve} = require(`path`); +const {pathToFileURL} = require(`url`); -const relPnpApiPath = '../../../../.pnp.cjs'; +const relPnpApiPath = "../../../../.pnp.cjs"; const absPnpApiPath = resolve(__dirname, relPnpApiPath); const absUserWrapperPath = resolve(__dirname, `./sdk.user.cjs`); @@ -25,30 +25,28 @@ if (existsSync(absPnpApiPath)) { } const wrapWithUserWrapper = existsSync(absUserWrapperPath) - ? (exports) => absRequire(absUserWrapperPath)(exports) - : (exports) => exports; + ? exports => absRequire(absUserWrapperPath)(exports) + : exports => exports; -const moduleWrapper = (exports) => { +const moduleWrapper = exports => { return wrapWithUserWrapper(moduleWrapperFn(exports)); }; -const moduleWrapperFn = (tsserver) => { +const moduleWrapperFn = tsserver => { if (!process.versions.pnp) { return tsserver; } - const { isAbsolute } = require(`path`); + const {isAbsolute} = require(`path`); const pnpApi = require(`pnpapi`); - const isVirtual = (str) => str.match(/\/(\$\$virtual|__virtual__)\//); - const isPortal = (str) => str.startsWith('portal:/'); - const normalize = (str) => str.replace(/\\/g, `/`).replace(/^\/?/, `/`); + const isVirtual = str => str.match(/\/(\$\$virtual|__virtual__)\//); + const isPortal = str => str.startsWith("portal:/"); + const normalize = str => str.replace(/\\/g, `/`).replace(/^\/?/, `/`); - const dependencyTreeRoots = new Set( - pnpApi.getDependencyTreeRoots().map((locator) => { - return `${locator.name}@${locator.reference}`; - }), - ); + const dependencyTreeRoots = new Set(pnpApi.getDependencyTreeRoots().map(locator => { + return `${locator.name}@${locator.reference}`; + })); // VSCode sends the zip paths to TS using the "zip://" prefix, that TS // doesn't understand. This layer makes sure to remove the protocol @@ -56,11 +54,7 @@ const moduleWrapperFn = (tsserver) => { function toEditorPath(str) { // We add the `zip:` prefix to both `.zip/` paths and virtual paths - if ( - isAbsolute(str) && - !str.match(/^\^?(zip:|\/zip\/)/) && - (str.match(/\.zip\//) || isVirtual(str)) - ) { + if (isAbsolute(str) && !str.match(/^\^?(zip:|\/zip\/)/) && (str.match(/\.zip\//) || isVirtual(str))) { // We also take the opportunity to turn virtual paths into physical ones; // this makes it much easier to work with workspaces that list peer // dependencies, since otherwise Ctrl+Click would bring us to the virtual @@ -74,11 +68,7 @@ const moduleWrapperFn = (tsserver) => { const resolved = isVirtual(str) ? pnpApi.resolveVirtual(str) : str; if (resolved) { const locator = pnpApi.findPackageLocator(resolved); - if ( - locator && - (dependencyTreeRoots.has(`${locator.name}@${locator.reference}`) || - isPortal(locator.reference)) - ) { + if (locator && (dependencyTreeRoots.has(`${locator.name}@${locator.reference}`) || isPortal(locator.reference))) { str = resolved; } } @@ -106,55 +96,41 @@ const moduleWrapperFn = (tsserver) => { // Before | ^/zip/c:/foo/bar.zip/package.json // After | ^/zip//c:/foo/bar.zip/package.json // - case `vscode <1.61`: - { - str = `^zip:${str}`; - } - break; + case `vscode <1.61`: { + str = `^zip:${str}`; + } break; - case `vscode <1.66`: - { - str = `^/zip/${str}`; - } - break; + case `vscode <1.66`: { + str = `^/zip/${str}`; + } break; - case `vscode <1.68`: - { - str = `^/zip${str}`; - } - break; + case `vscode <1.68`: { + str = `^/zip${str}`; + } break; - case `vscode`: - { - str = `^/zip/${str}`; - } - break; + case `vscode`: { + str = `^/zip/${str}`; + } break; // To make "go to definition" work, // We have to resolve the actual file system path from virtual path // and convert scheme to supported by [vim-rzip](https://github.com/lbrayner/vim-rzip) - case `coc-nvim`: - { - str = normalize(resolved).replace(/\.zip\//, `.zip::`); - str = resolve(`zipfile:${str}`); - } - break; + case `coc-nvim`: { + str = normalize(resolved).replace(/\.zip\//, `.zip::`); + str = resolve(`zipfile:${str}`); + } break; // Support neovim native LSP and [typescript-language-server](https://github.com/theia-ide/typescript-language-server) // We have to resolve the actual file system path from virtual path, // everything else is up to neovim - case `neovim`: - { - str = normalize(resolved).replace(/\.zip\//, `.zip::`); - str = `zipfile://${str}`; - } - break; - - default: - { - str = `zip:${str}`; - } - break; + case `neovim`: { + str = normalize(resolved).replace(/\.zip\//, `.zip::`); + str = `zipfile://${str}`; + } break; + + default: { + str = `zip:${str}`; + } break; } } else { str = str.replace(/^\/?/, process.platform === `win32` ? `` : `/`); @@ -166,35 +142,26 @@ const moduleWrapperFn = (tsserver) => { function fromEditorPath(str) { switch (hostInfo) { - case `coc-nvim`: - { - str = str.replace(/\.zip::/, `.zip/`); - // The path for coc-nvim is in format of //zipfile://.yarn/... - // So in order to convert it back, we use .* to match all the thing - // before `zipfile:` - return process.platform === `win32` - ? str.replace(/^.*zipfile:\//, ``) - : str.replace(/^.*zipfile:/, ``); - } - break; - - case `neovim`: - { - str = str.replace(/\.zip::/, `.zip/`); - // The path for neovim is in format of zipfile:////.yarn/... - return str.replace(/^zipfile:\/\//, ``); - } - break; + case `coc-nvim`: { + str = str.replace(/\.zip::/, `.zip/`); + // The path for coc-nvim is in format of //zipfile://.yarn/... + // So in order to convert it back, we use .* to match all the thing + // before `zipfile:` + return process.platform === `win32` + ? str.replace(/^.*zipfile:\//, ``) + : str.replace(/^.*zipfile:/, ``); + } break; + + case `neovim`: { + str = str.replace(/\.zip::/, `.zip/`); + // The path for neovim is in format of zipfile:////.yarn/... + return str.replace(/^zipfile:\/\//, ``); + } break; case `vscode`: - default: - { - return str.replace( - /^\^?(zip:|\/zip(\/ts-nul-authority)?)\/+/, - process.platform === `win32` ? `` : `/`, - ); - } - break; + default: { + return str.replace(/^\^?(zip:|\/zip(\/ts-nul-authority)?)\/+/, process.platform === `win32` ? `` : `/`) + } break; } } @@ -206,9 +173,8 @@ const moduleWrapperFn = (tsserver) => { // TypeScript already does local loads and if this code is running the user trusts the workspace // https://github.com/microsoft/vscode/issues/45856 const ConfiguredProject = tsserver.server.ConfiguredProject; - const { enablePluginsWithOptions: originalEnablePluginsWithOptions } = - ConfiguredProject.prototype; - ConfiguredProject.prototype.enablePluginsWithOptions = function () { + const {enablePluginsWithOptions: originalEnablePluginsWithOptions} = ConfiguredProject.prototype; + ConfiguredProject.prototype.enablePluginsWithOptions = function() { this.projectService.allowLocalPluginLoads = true; return originalEnablePluginsWithOptions.apply(this, arguments); }; @@ -218,8 +184,7 @@ const moduleWrapperFn = (tsserver) => { // like an absolute path of ours and normalize it. const Session = tsserver.server.Session; - const { onMessage: originalOnMessage, send: originalSend } = - Session.prototype; + const {onMessage: originalOnMessage, send: originalSend} = Session.prototype; let hostInfo = `unknown`; Object.assign(Session.prototype, { @@ -235,12 +200,10 @@ const moduleWrapperFn = (tsserver) => { ) { hostInfo = parsedMessage.arguments.hostInfo; if (hostInfo === `vscode` && process.env.VSCODE_IPC_HOOK) { - const [, major, minor] = ( - process.env.VSCODE_IPC_HOOK.match( - // The RegExp from https://semver.org/ but without the caret at the start - /(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/, - ) ?? [] - ).map(Number); + const [, major, minor] = (process.env.VSCODE_IPC_HOOK.match( + // The RegExp from https://semver.org/ but without the caret at the start + /(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/ + ) ?? []).map(Number) if (major === 1) { if (minor < 61) { @@ -254,39 +217,27 @@ const moduleWrapperFn = (tsserver) => { } } - const processedMessageJSON = JSON.stringify( - parsedMessage, - (key, value) => { - return typeof value === 'string' ? fromEditorPath(value) : value; - }, - ); + const processedMessageJSON = JSON.stringify(parsedMessage, (key, value) => { + return typeof value === 'string' ? fromEditorPath(value) : value; + }); return originalOnMessage.call( this, - isStringMessage - ? processedMessageJSON - : JSON.parse(processedMessageJSON), + isStringMessage ? processedMessageJSON : JSON.parse(processedMessageJSON) ); }, send(/** @type {any} */ msg) { - return originalSend.call( - this, - JSON.parse( - JSON.stringify(msg, (key, value) => { - return typeof value === `string` ? toEditorPath(value) : value; - }), - ), - ); - }, + return originalSend.call(this, JSON.parse(JSON.stringify(msg, (key, value) => { + return typeof value === `string` ? toEditorPath(value) : value; + }))); + } }); return tsserver; }; -const [major, minor] = absRequire(`typescript/package.json`) - .version.split(`.`, 2) - .map((value) => parseInt(value, 10)); +const [major, minor] = absRequire(`typescript/package.json`).version.split(`.`, 2).map(value => parseInt(value, 10)); // In TypeScript@>=5.5 the tsserver uses the public TypeScript API so that needs to be patched as well. // Ref https://github.com/microsoft/TypeScript/pull/55326 if (major > 5 || (major === 5 && minor >= 5)) { diff --git a/.yarn/sdks/typescript/lib/tsserverlibrary.js b/.yarn/sdks/typescript/lib/tsserverlibrary.js index b13b8ab..0e50e0a 100644 --- a/.yarn/sdks/typescript/lib/tsserverlibrary.js +++ b/.yarn/sdks/typescript/lib/tsserverlibrary.js @@ -1,11 +1,11 @@ #!/usr/bin/env node -const { existsSync } = require(`fs`); -const { createRequire, register } = require(`module`); -const { resolve } = require(`path`); -const { pathToFileURL } = require(`url`); +const {existsSync} = require(`fs`); +const {createRequire, register} = require(`module`); +const {resolve} = require(`path`); +const {pathToFileURL} = require(`url`); -const relPnpApiPath = '../../../../.pnp.cjs'; +const relPnpApiPath = "../../../../.pnp.cjs"; const absPnpApiPath = resolve(__dirname, relPnpApiPath); const absUserWrapperPath = resolve(__dirname, `./sdk.user.cjs`); @@ -25,30 +25,28 @@ if (existsSync(absPnpApiPath)) { } const wrapWithUserWrapper = existsSync(absUserWrapperPath) - ? (exports) => absRequire(absUserWrapperPath)(exports) - : (exports) => exports; + ? exports => absRequire(absUserWrapperPath)(exports) + : exports => exports; -const moduleWrapper = (exports) => { +const moduleWrapper = exports => { return wrapWithUserWrapper(moduleWrapperFn(exports)); }; -const moduleWrapperFn = (tsserver) => { +const moduleWrapperFn = tsserver => { if (!process.versions.pnp) { return tsserver; } - const { isAbsolute } = require(`path`); + const {isAbsolute} = require(`path`); const pnpApi = require(`pnpapi`); - const isVirtual = (str) => str.match(/\/(\$\$virtual|__virtual__)\//); - const isPortal = (str) => str.startsWith('portal:/'); - const normalize = (str) => str.replace(/\\/g, `/`).replace(/^\/?/, `/`); + const isVirtual = str => str.match(/\/(\$\$virtual|__virtual__)\//); + const isPortal = str => str.startsWith("portal:/"); + const normalize = str => str.replace(/\\/g, `/`).replace(/^\/?/, `/`); - const dependencyTreeRoots = new Set( - pnpApi.getDependencyTreeRoots().map((locator) => { - return `${locator.name}@${locator.reference}`; - }), - ); + const dependencyTreeRoots = new Set(pnpApi.getDependencyTreeRoots().map(locator => { + return `${locator.name}@${locator.reference}`; + })); // VSCode sends the zip paths to TS using the "zip://" prefix, that TS // doesn't understand. This layer makes sure to remove the protocol @@ -56,11 +54,7 @@ const moduleWrapperFn = (tsserver) => { function toEditorPath(str) { // We add the `zip:` prefix to both `.zip/` paths and virtual paths - if ( - isAbsolute(str) && - !str.match(/^\^?(zip:|\/zip\/)/) && - (str.match(/\.zip\//) || isVirtual(str)) - ) { + if (isAbsolute(str) && !str.match(/^\^?(zip:|\/zip\/)/) && (str.match(/\.zip\//) || isVirtual(str))) { // We also take the opportunity to turn virtual paths into physical ones; // this makes it much easier to work with workspaces that list peer // dependencies, since otherwise Ctrl+Click would bring us to the virtual @@ -74,11 +68,7 @@ const moduleWrapperFn = (tsserver) => { const resolved = isVirtual(str) ? pnpApi.resolveVirtual(str) : str; if (resolved) { const locator = pnpApi.findPackageLocator(resolved); - if ( - locator && - (dependencyTreeRoots.has(`${locator.name}@${locator.reference}`) || - isPortal(locator.reference)) - ) { + if (locator && (dependencyTreeRoots.has(`${locator.name}@${locator.reference}`) || isPortal(locator.reference))) { str = resolved; } } @@ -106,55 +96,41 @@ const moduleWrapperFn = (tsserver) => { // Before | ^/zip/c:/foo/bar.zip/package.json // After | ^/zip//c:/foo/bar.zip/package.json // - case `vscode <1.61`: - { - str = `^zip:${str}`; - } - break; + case `vscode <1.61`: { + str = `^zip:${str}`; + } break; - case `vscode <1.66`: - { - str = `^/zip/${str}`; - } - break; + case `vscode <1.66`: { + str = `^/zip/${str}`; + } break; - case `vscode <1.68`: - { - str = `^/zip${str}`; - } - break; + case `vscode <1.68`: { + str = `^/zip${str}`; + } break; - case `vscode`: - { - str = `^/zip/${str}`; - } - break; + case `vscode`: { + str = `^/zip/${str}`; + } break; // To make "go to definition" work, // We have to resolve the actual file system path from virtual path // and convert scheme to supported by [vim-rzip](https://github.com/lbrayner/vim-rzip) - case `coc-nvim`: - { - str = normalize(resolved).replace(/\.zip\//, `.zip::`); - str = resolve(`zipfile:${str}`); - } - break; + case `coc-nvim`: { + str = normalize(resolved).replace(/\.zip\//, `.zip::`); + str = resolve(`zipfile:${str}`); + } break; // Support neovim native LSP and [typescript-language-server](https://github.com/theia-ide/typescript-language-server) // We have to resolve the actual file system path from virtual path, // everything else is up to neovim - case `neovim`: - { - str = normalize(resolved).replace(/\.zip\//, `.zip::`); - str = `zipfile://${str}`; - } - break; - - default: - { - str = `zip:${str}`; - } - break; + case `neovim`: { + str = normalize(resolved).replace(/\.zip\//, `.zip::`); + str = `zipfile://${str}`; + } break; + + default: { + str = `zip:${str}`; + } break; } } else { str = str.replace(/^\/?/, process.platform === `win32` ? `` : `/`); @@ -166,35 +142,26 @@ const moduleWrapperFn = (tsserver) => { function fromEditorPath(str) { switch (hostInfo) { - case `coc-nvim`: - { - str = str.replace(/\.zip::/, `.zip/`); - // The path for coc-nvim is in format of //zipfile://.yarn/... - // So in order to convert it back, we use .* to match all the thing - // before `zipfile:` - return process.platform === `win32` - ? str.replace(/^.*zipfile:\//, ``) - : str.replace(/^.*zipfile:/, ``); - } - break; - - case `neovim`: - { - str = str.replace(/\.zip::/, `.zip/`); - // The path for neovim is in format of zipfile:////.yarn/... - return str.replace(/^zipfile:\/\//, ``); - } - break; + case `coc-nvim`: { + str = str.replace(/\.zip::/, `.zip/`); + // The path for coc-nvim is in format of //zipfile://.yarn/... + // So in order to convert it back, we use .* to match all the thing + // before `zipfile:` + return process.platform === `win32` + ? str.replace(/^.*zipfile:\//, ``) + : str.replace(/^.*zipfile:/, ``); + } break; + + case `neovim`: { + str = str.replace(/\.zip::/, `.zip/`); + // The path for neovim is in format of zipfile:////.yarn/... + return str.replace(/^zipfile:\/\//, ``); + } break; case `vscode`: - default: - { - return str.replace( - /^\^?(zip:|\/zip(\/ts-nul-authority)?)\/+/, - process.platform === `win32` ? `` : `/`, - ); - } - break; + default: { + return str.replace(/^\^?(zip:|\/zip(\/ts-nul-authority)?)\/+/, process.platform === `win32` ? `` : `/`) + } break; } } @@ -206,9 +173,8 @@ const moduleWrapperFn = (tsserver) => { // TypeScript already does local loads and if this code is running the user trusts the workspace // https://github.com/microsoft/vscode/issues/45856 const ConfiguredProject = tsserver.server.ConfiguredProject; - const { enablePluginsWithOptions: originalEnablePluginsWithOptions } = - ConfiguredProject.prototype; - ConfiguredProject.prototype.enablePluginsWithOptions = function () { + const {enablePluginsWithOptions: originalEnablePluginsWithOptions} = ConfiguredProject.prototype; + ConfiguredProject.prototype.enablePluginsWithOptions = function() { this.projectService.allowLocalPluginLoads = true; return originalEnablePluginsWithOptions.apply(this, arguments); }; @@ -218,8 +184,7 @@ const moduleWrapperFn = (tsserver) => { // like an absolute path of ours and normalize it. const Session = tsserver.server.Session; - const { onMessage: originalOnMessage, send: originalSend } = - Session.prototype; + const {onMessage: originalOnMessage, send: originalSend} = Session.prototype; let hostInfo = `unknown`; Object.assign(Session.prototype, { @@ -235,12 +200,10 @@ const moduleWrapperFn = (tsserver) => { ) { hostInfo = parsedMessage.arguments.hostInfo; if (hostInfo === `vscode` && process.env.VSCODE_IPC_HOOK) { - const [, major, minor] = ( - process.env.VSCODE_IPC_HOOK.match( - // The RegExp from https://semver.org/ but without the caret at the start - /(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/, - ) ?? [] - ).map(Number); + const [, major, minor] = (process.env.VSCODE_IPC_HOOK.match( + // The RegExp from https://semver.org/ but without the caret at the start + /(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/ + ) ?? []).map(Number) if (major === 1) { if (minor < 61) { @@ -254,39 +217,27 @@ const moduleWrapperFn = (tsserver) => { } } - const processedMessageJSON = JSON.stringify( - parsedMessage, - (key, value) => { - return typeof value === 'string' ? fromEditorPath(value) : value; - }, - ); + const processedMessageJSON = JSON.stringify(parsedMessage, (key, value) => { + return typeof value === 'string' ? fromEditorPath(value) : value; + }); return originalOnMessage.call( this, - isStringMessage - ? processedMessageJSON - : JSON.parse(processedMessageJSON), + isStringMessage ? processedMessageJSON : JSON.parse(processedMessageJSON) ); }, send(/** @type {any} */ msg) { - return originalSend.call( - this, - JSON.parse( - JSON.stringify(msg, (key, value) => { - return typeof value === `string` ? toEditorPath(value) : value; - }), - ), - ); - }, + return originalSend.call(this, JSON.parse(JSON.stringify(msg, (key, value) => { + return typeof value === `string` ? toEditorPath(value) : value; + }))); + } }); return tsserver; }; -const [major, minor] = absRequire(`typescript/package.json`) - .version.split(`.`, 2) - .map((value) => parseInt(value, 10)); +const [major, minor] = absRequire(`typescript/package.json`).version.split(`.`, 2).map(value => parseInt(value, 10)); // In TypeScript@>=5.5 the tsserver uses the public TypeScript API so that needs to be patched as well. // Ref https://github.com/microsoft/TypeScript/pull/55326 if (major > 5 || (major === 5 && minor >= 5)) { diff --git a/.yarn/sdks/typescript/lib/typescript.js b/.yarn/sdks/typescript/lib/typescript.js index 20a78d4..7b6cc22 100644 --- a/.yarn/sdks/typescript/lib/typescript.js +++ b/.yarn/sdks/typescript/lib/typescript.js @@ -1,11 +1,11 @@ #!/usr/bin/env node -const { existsSync } = require(`fs`); -const { createRequire, register } = require(`module`); -const { resolve } = require(`path`); -const { pathToFileURL } = require(`url`); +const {existsSync} = require(`fs`); +const {createRequire, register} = require(`module`); +const {resolve} = require(`path`); +const {pathToFileURL} = require(`url`); -const relPnpApiPath = '../../../../.pnp.cjs'; +const relPnpApiPath = "../../../../.pnp.cjs"; const absPnpApiPath = resolve(__dirname, relPnpApiPath); const absUserWrapperPath = resolve(__dirname, `./sdk.user.cjs`); @@ -25,8 +25,8 @@ if (existsSync(absPnpApiPath)) { } const wrapWithUserWrapper = existsSync(absUserWrapperPath) - ? (exports) => absRequire(absUserWrapperPath)(exports) - : (exports) => exports; + ? exports => absRequire(absUserWrapperPath)(exports) + : exports => exports; // Defer to the real typescript your application uses module.exports = wrapWithUserWrapper(absRequire(`typescript`)); From 535bd33c8807afa006fb67781885823b1b7bede1 Mon Sep 17 00:00:00 2001 From: gwansikk Date: Tue, 19 Nov 2024 19:05:45 +0900 Subject: [PATCH 03/13] refactor: replace classnames to clsx --- package.json | 6 +++--- yarn.lock | 16 ++++++++-------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index df45bc0..f0b0e3d 100644 --- a/package.json +++ b/package.json @@ -5,12 +5,12 @@ "scripts": { "preinstall": "npx only-allow yarn", "dev": "vite --port 56320", + "dev:tauri": "tauri dev", "build": "tsc && vite build", "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", "preview": "vite preview", "lint-staged": "lint-staged", - "prepare": "husky", - "proxy": "http://118.67.131.212:9999" + "prepare": "husky" }, "lint-staged": { "*.{js,ts,jsx,tsx}": [ @@ -20,7 +20,7 @@ }, "dependencies": { "@tanstack/react-query": "^5.52.2", - "classnames": "^2.5.1", + "clsx": "^2.1.1", "date-fns": "^4.1.0", "react": "^18.2.0", "react-dom": "^18.2.0", diff --git a/yarn.lock b/yarn.lock index 5ece687..c90dd72 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1709,13 +1709,6 @@ __metadata: languageName: node linkType: hard -"classnames@npm:^2.5.1": - version: 2.5.1 - resolution: "classnames@npm:2.5.1" - checksum: 10c0/afff4f77e62cea2d79c39962980bf316bacb0d7c49e13a21adaadb9221e1c6b9d3cdb829d8bb1b23c406f4e740507f37e1dcf506f7e3b7113d17c5bab787aa69 - languageName: node - linkType: hard - "clean-stack@npm:^2.0.0": version: 2.2.0 resolution: "clean-stack@npm:2.2.0" @@ -1742,6 +1735,13 @@ __metadata: languageName: node linkType: hard +"clsx@npm:^2.1.1": + version: 2.1.1 + resolution: "clsx@npm:2.1.1" + checksum: 10c0/c4c8eb865f8c82baab07e71bfa8897c73454881c4f99d6bc81585aecd7c441746c1399d08363dc096c550cceaf97bd4ce1e8854e1771e9998d9f94c4fe075839 + languageName: node + linkType: hard + "color-convert@npm:^1.9.0": version: 1.9.3 resolution: "color-convert@npm:1.9.3" @@ -1988,7 +1988,7 @@ __metadata: "@typescript-eslint/parser": "npm:^7.0.2" "@vitejs/plugin-react": "npm:^4.2.1" autoprefixer: "npm:^10.4.17" - classnames: "npm:^2.5.1" + clsx: "npm:^2.1.1" date-fns: "npm:^4.1.0" eslint: "npm:^8.56.0" eslint-config-prettier: "npm:^9.1.0" From 0d793e88b48dfe0de697450cd3499a35c1c48c28 Mon Sep 17 00:00:00 2001 From: gwansikk Date: Tue, 19 Nov 2024 19:06:11 +0900 Subject: [PATCH 04/13] =?UTF-8?q?refactor:=20=ED=8E=98=EC=9D=B4=EC=A7=80?= =?UTF-8?q?=20=ED=94=84=EB=A1=9C=EC=A0=9D=ED=8A=B8=20=EA=B5=AC=EC=A1=B0=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.tsx | 2 +- src/Layout.tsx | 4 +-- src/components/{Button => }/Button.tsx | 19 +++++++--- src/components/Button/Button.style.tsx | 9 ----- src/components/Button/Button.type.ts | 0 .../{CaseElement => }/CaseElement.tsx | 4 +-- src/components/{Element => }/Element.tsx | 16 +++++---- src/components/Element/Element.style.tsx | 5 --- src/components/Element/Element.type.ts | 1 - .../{ElementLine => }/ElementLine.tsx | 0 .../{ElementTree => }/ElementTree.tsx | 35 +++++-------------- src/components/{Footer => }/Footer.tsx | 0 .../{GroupElement => }/GroupElement.tsx | 4 +-- src/components/{Input => }/Input.tsx | 4 +-- .../{LayerElement => }/LayerElement.tsx | 7 ++-- src/components/Modal/AccidentModal.tsx | 2 +- src/components/Modal/ApplyPresetModal.tsx | 2 +- src/components/Modal/ExtractCasesModal.tsx | 6 ++-- src/components/Modal/LawModal.tsx | 2 +- src/components/Modal/RandomModal.tsx | 4 +-- src/components/Modal/SelectedRandomModal.tsx | 4 +-- src/components/{Navbar => }/Navbar.tsx | 0 src/components/{Spinner => }/Spinner.tsx | 0 src/pages/HomePage/HomePage.tsx | 17 +++++---- .../CreateRandomButton.tsx | 2 +- .../CreateSelectRandomButton.tsx | 2 +- .../DeleteButton.tsx | 4 +-- .../HomePage/components/{Layer => }/Layer.tsx | 27 ++++++-------- .../{LayerHeader => }/LayerHeader.tsx | 4 +-- .../components/{Modals => }/Modals.tsx | 0 .../{ResultTable => }/ResultTable.tsx | 2 +- .../{SaveButton => }/SaveButton.tsx | 4 +-- .../{TopControlPanel => }/TopButtons.tsx | 2 +- .../{TopControlPanel => }/TopControlPanel.tsx | 0 src/pages/{ => SplashPage}/SplashPage.tsx | 0 35 files changed, 85 insertions(+), 109 deletions(-) rename src/components/{Button => }/Button.tsx (51%) delete mode 100644 src/components/Button/Button.style.tsx delete mode 100644 src/components/Button/Button.type.ts rename src/components/{CaseElement => }/CaseElement.tsx (96%) rename src/components/{Element => }/Element.tsx (62%) delete mode 100644 src/components/Element/Element.style.tsx delete mode 100644 src/components/Element/Element.type.ts rename src/components/{ElementLine => }/ElementLine.tsx (100%) rename src/components/{ElementTree => }/ElementTree.tsx (62%) rename src/components/{Footer => }/Footer.tsx (100%) rename src/components/{GroupElement => }/GroupElement.tsx (91%) rename src/components/{Input => }/Input.tsx (81%) rename src/components/{LayerElement => }/LayerElement.tsx (73%) rename src/components/{Navbar => }/Navbar.tsx (100%) rename src/components/{Spinner => }/Spinner.tsx (100%) rename src/pages/HomePage/components/{HandleScenarioButtons => }/CreateRandomButton.tsx (93%) rename src/pages/HomePage/components/{HandleScenarioButtons => }/CreateSelectRandomButton.tsx (93%) rename src/pages/HomePage/components/{HandleScenarioButtons => }/DeleteButton.tsx (88%) rename src/pages/HomePage/components/{Layer => }/Layer.tsx (66%) rename src/pages/HomePage/components/{LayerHeader => }/LayerHeader.tsx (93%) rename src/pages/HomePage/components/{Modals => }/Modals.tsx (100%) rename src/pages/HomePage/components/{ResultTable => }/ResultTable.tsx (98%) rename src/pages/HomePage/components/{SaveButton => }/SaveButton.tsx (92%) rename src/pages/HomePage/components/{TopControlPanel => }/TopButtons.tsx (97%) rename src/pages/HomePage/components/{TopControlPanel => }/TopControlPanel.tsx (100%) rename src/pages/{ => SplashPage}/SplashPage.tsx (100%) diff --git a/src/App.tsx b/src/App.tsx index 89d94bc..1e043b3 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,6 +1,6 @@ import { PATH } from '@constants/path'; import HomePage from '@pages/HomePage/HomePage'; -import SplashPage from '@pages/SplashPage'; +import SplashPage from '@pages/SplashPage/SplashPage'; import Layout from '@/Layout'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { diff --git a/src/Layout.tsx b/src/Layout.tsx index b7c0aca..50e85b0 100644 --- a/src/Layout.tsx +++ b/src/Layout.tsx @@ -1,5 +1,5 @@ -import Footer from '@components/Footer/Footer'; -import Navbar from '@components/Navbar/Navbar'; +import Footer from '@components/Footer'; +import Navbar from '@components/Navbar'; import { Outlet } from 'react-router-dom'; const Layout = () => { diff --git a/src/components/Button/Button.tsx b/src/components/Button.tsx similarity index 51% rename from src/components/Button/Button.tsx rename to src/components/Button.tsx index d437bfa..b9a7d02 100644 --- a/src/components/Button/Button.tsx +++ b/src/components/Button.tsx @@ -1,21 +1,30 @@ -import React, { forwardRef } from 'react'; -import classNames from 'classnames'; -import { buttonColors } from './Button.style'; +import { forwardRef } from 'react'; +import clsx from 'clsx'; interface Props extends React.ButtonHTMLAttributes { icon?: React.ReactNode; color?: 'default' | 'blue' | 'black' | 'disabled' | 'red'; } +const COLORS = { + default: + 'border-gray-500 text-gray-500 dark:text-white/80 hover:bg-gray-100 dark:hover:bg-gray-500/20', + blue: 'border-blue-500 text-blue-500 hover:bg-blue-100 dark:hover:bg-blue-500/20', + black: + 'border-black bg-black text-white hover:bg-gray-900 dark:text-white/80 dark:hover:bg-gray-900', + red: 'border-red-500 bg-red-500 text-white hover:bg-red-900 dark:text-white/80 dark:hover:bg-red-900', + disabled: 'border bg-gray-200 text-white cursor-not-allowed', +} as const; + const Button = forwardRef( ({ children, className, color = 'default', icon, ...props }, ref) => { return ( diff --git a/src/components/ElementTree.tsx b/src/components/ElementTree.tsx index f024518..825ac6e 100644 --- a/src/components/ElementTree.tsx +++ b/src/components/ElementTree.tsx @@ -1,4 +1,4 @@ -import { PropsWithChildren, useCallback, useState } from 'react'; +import { type PropsWithChildren, useState } from 'react'; import LayerElement from './LayerElement'; import GroupElement from './GroupElement'; import CaseElement from './CaseElement'; @@ -11,19 +11,17 @@ export interface ElementProps { } const ElementTree = ({ className, data }: ElementProps) => { - const [open, setOpen] = useState(true); + const [open, setOpen] = useState(true); - const handleOpenClick = useCallback(() => { + const handleOpenClick = () => { setOpen((prev) => !prev); - }, []); + }; let RenderElement = null; - let RenderElementStyle = ''; switch (data.type) { case 'layer': RenderElement = LayerElement; - RenderElementStyle = 'border-none'; break; case 'group': RenderElement = GroupElement; @@ -37,7 +35,7 @@ const ElementTree = ({ className, data }: ElementProps) => {
    diff --git a/src/components/Footer.tsx b/src/components/Footer.tsx index 9985bfe..1d1563c 100644 --- a/src/components/Footer.tsx +++ b/src/components/Footer.tsx @@ -1,10 +1,13 @@ const Footer = () => { return ( -