{"version":3,"file":"static/chunks/app/page-746b77a8422021fd.js","mappings":"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","sources":["webpack://_N_E/?db85","webpack://_N_E/../../../src/shared/lib/router-context.shared-runtime.ts","webpack://_N_E/./src/app/lib/definitions.ts","webpack://_N_E/./src/app/lib/utils.ts","webpack://_N_E/./src/app/ui/dateToLocaleString.tsx","webpack://_N_E/./src/app/ui/realTime.tsx","webpack://_N_E/./src/app/ui/tooltip.tsx","webpack://_N_E/./src/app/page.module.css","webpack://_N_E/./src/app/ui/rating.module.css","webpack://_N_E/./src/app/ui/tooltip.module.css"],"sourcesContent":["import(/* webpackMode: \"eager\" */ \"/codebuild/output/src2723861806/src/boj-random-defense-client/node_modules/next/dist/client/link.js\");\n;\nimport(/* webpackMode: \"eager\" */ \"/codebuild/output/src2723861806/src/boj-random-defense-client/node_modules/next/dist/shared/lib/lazy-dynamic/dynamic-bailout-to-csr.js\");\n;\nimport(/* webpackMode: \"eager\" */ \"/codebuild/output/src2723861806/src/boj-random-defense-client/node_modules/next/dist/shared/lib/lazy-dynamic/preload-css.js\");\n;\nimport(/* webpackMode: \"eager\" */ \"/codebuild/output/src2723861806/src/boj-random-defense-client/src/app/page.module.css\");\n;\nimport(/* webpackMode: \"eager\", webpackExports: [\"default\"] */ \"/codebuild/output/src2723861806/src/boj-random-defense-client/src/app/ui/dateToLocaleString.tsx\");\n;\nimport(/* webpackMode: \"eager\" */ \"/codebuild/output/src2723861806/src/boj-random-defense-client/src/app/ui/rating.module.css\");\n;\nimport(/* webpackMode: \"eager\" */ \"/codebuild/output/src2723861806/src/boj-random-defense-client/src/app/ui/realTime.tsx\");\n;\nimport(/* webpackMode: \"eager\", webpackExports: [\"default\"] */ \"/codebuild/output/src2723861806/src/boj-random-defense-client/src/app/ui/tooltip.tsx\");\n",null,"export enum Status {\n ACCEPTED = \"ACCEPTED\",\n PASSED = \"PASSED\",\n WAITING = \"WAITING\",\n NONE = \"NONE\",\n}\n\nexport enum Defense {\n RANGE = \"RANGE\",\n RANK = \"RANK\",\n NONE = \"NONE\",\n}\n\nexport enum Display {\n ELAPSED_TIME = 'elapsed',\n LAST_TIME = 'last',\n}\n\nexport type User = {\n handle: string\n rating: number\n topRating: number\n problemId: number\n problemName: string\n problemLevel: number\n defense: Defense\n status: Status\n updatedAt: Date\n}\n\nexport type Log = {\n id: string\n handle: string\n problemId: number\n problemName: string\n problemLevel: number\n rating: number\n defense: Defense\n status: Status\n elapsedTime: string\n createdAt: Date\n}\n\nexport type LogLastEvaluatedKey = {\n handle: string,\n 'problemId#status': string\n}","import { \n differenceInYears,\n differenceInMonths,\n differenceInDays,\n differenceInHours,\n differenceInMinutes,\n differenceInSeconds,\n} from \"date-fns\"\nimport { Status } from \"./definitions\"\n\nconst LEVEL_COLOR = [\n 'rgb(45, 45, 45)',\n\n 'rgb(157, 73, 0)',\n 'rgb(165, 79, 0)',\n 'rgb(173, 85, 0)',\n 'rgb(181, 93, 10)',\n 'rgb(198, 119, 57)',\n\n 'rgb(56, 84, 110)',\n 'rgb(61, 90, 116)',\n 'rgb(67, 95, 122)',\n 'rgb(73, 101, 128)',\n 'rgb(78, 106, 134)',\n\n 'rgb(210, 133, 0)',\n 'rgb(223, 143, 0)',\n 'rgb(236, 154, 0)',\n 'rgb(249, 165, 24)',\n 'rgb(255, 176, 40)',\n\n 'rgb(0, 199, 139)',\n 'rgb(0, 212, 151)',\n 'rgb(39, 226, 164)',\n 'rgb(62, 240, 177)',\n 'rgb(81, 253, 189)',\n\n 'rgb(0, 158, 229)',\n 'rgb(0, 169, 240)',\n 'rgb(0, 180, 252)',\n 'rgb(43, 191, 255)',\n 'rgb(65, 202, 255)',\n\n 'rgb(224, 0, 76)',\n 'rgb(234, 0, 83)',\n 'rgb(245, 0, 90)',\n 'rgb(255, 0, 98)',\n 'rgb(255, 48, 113)',\n\n 'rgb(180, 145, 255)',\n]\n\nexport const getLevelColor = (level: number) => {\n if (level >= 31) {\n return LEVEL_COLOR[31]\n }\n return LEVEL_COLOR[level]\n}\n\nconst LEVEL_GRAPH_COLOR = [\n 'rgb(45, 45, 45)',\n\n 'rgb(157, 73, 0)',\n 'rgb(165, 79, 0)',\n 'rgb(173, 85, 0)',\n 'rgb(181, 93, 10)',\n 'rgb(198, 119, 57)',\n\n 'rgb(56, 84, 110)',\n 'rgb(61, 90, 116)',\n 'rgb(67, 95, 122)',\n 'rgb(73, 101, 128)',\n 'rgb(78, 106, 134)',\n\n 'rgb(210, 133, 0)',\n 'rgb(223, 143, 0)',\n 'rgb(236, 154, 0)',\n 'rgb(249, 165, 24)',\n 'rgb(255, 176, 40)',\n\n 'rgb(0, 199, 139)',\n 'rgb(0, 212, 151)',\n 'rgb(39, 226, 164)',\n 'rgb(62, 240, 177)',\n 'rgb(81, 253, 189)',\n\n 'rgb(0, 158, 229)',\n 'rgb(0, 169, 240)',\n 'rgb(0, 180, 252)',\n 'rgb(43, 191, 255)',\n 'rgb(65, 202, 255)',\n\n 'rgb(224, 0, 76)',\n 'rgb(234, 0, 83)',\n 'rgb(245, 0, 90)',\n 'rgb(255, 0, 98)',\n 'rgb(255, 48, 113)',\n\n 'rgb(179, 0, 224)',\n]\n\nexport const getGraphColor = (rating: number) => {\n const level = Math.ceil((rating + 0.5) / 100)\n if (level >= 31) {\n return LEVEL_GRAPH_COLOR[31]\n }\n return LEVEL_GRAPH_COLOR[level]\n}\n\nconst LEVEL_TEXT = [\n 'Unrated',\n\n 'Bronze V',\n 'Bronze IV',\n 'Bronze III',\n 'Bronze II',\n 'Bronze I',\n\n 'Silver V',\n 'Silver IV',\n 'Silver III',\n 'Silver II',\n 'Silver I',\n\n 'Gold V',\n 'Gold IV',\n 'Gold III',\n 'Gold II',\n 'Gold I',\n\n 'Platinum V',\n 'Platinum IV',\n 'Platinum III',\n 'Platinum II',\n 'Platinum I',\n\n 'Diamond V',\n 'Diamond IV',\n 'Diamond III',\n 'Diamond II',\n 'Diamond I',\n\n 'Ruby V',\n 'Ruby IV',\n 'Ruby III',\n 'Ruby II',\n 'Ruby I',\n]\n\nexport const getLevelText = (level: number) => {\n return LEVEL_TEXT[level]\n}\n\nexport const getLowLevelByRating = (rating: number) => {\n const diff = 200;\n return Math.max(Math.round((rating - diff) / 100), 1);\n};\n\nexport const getStatusColor = (status: Status) => {\n switch (status) {\n case Status.ACCEPTED:\n return 'green'\n case Status.PASSED:\n return 'red'\n case Status.WAITING:\n return 'gray'\n case Status.NONE:\n return 'black'\n }\n}\n\nexport const getLastTime = (date: Date) => {\n const year = differenceInYears(new Date(), date)\n if (year > 0) {\n return `${year}년 전`\n }\n const month = differenceInMonths(new Date(), date)\n if (month > 0) {\n return `${month}개월 전`\n }\n const day = differenceInDays(new Date(), date)\n if (day > 0) {\n return `${day}일 전`\n }\n const hour = differenceInHours(new Date(), date)\n if (hour > 0) {\n return `${hour}시간 전`\n }\n const minute = differenceInMinutes(new Date(), date)\n if (minute > 0) {\n return `${minute}분 전`\n }\n const second = differenceInSeconds(new Date(), date)\n return `${second}초 전`\n}\n\nexport const getElapsedTime = (date: Date) => {\n const diff = new Date().getTime() - new Date(date).getTime()\n const minute = Math.floor(diff / 1000 / 60)\n const second = Math.floor(diff / 1000) % 60\n return `${minute}분 ${second}초`\n}","'use client'\n\ntype Props = {\n date: Date\n}\nconst DateToLocaleString = ({ date }: Props) => {\n return (\n
{date.toLocaleString()}
\n )\n}\n\nexport default DateToLocaleString","\"use client\"\n\nimport { useEffect, useState } from 'react'\nimport { getElapsedTime, getLastTime } from '../lib/utils'\nimport { Display } from '../lib/definitions'\n\ntype Props = {\n date: Date\n displayType: Display\n}\nconst RealTime = ({ date, displayType }: Props) => {\n const getTextToDate = displayType === Display.ELAPSED_TIME ? getElapsedTime : getLastTime\n const [text, setText] = useState(getTextToDate(date))\n\n useEffect(() => {\n const intervalId = setInterval(() => {\n setText(getTextToDate(date))\n }, 1000)\n\n return () => {\n clearInterval(intervalId)\n }\n }, [date, getTextToDate])\n\n return (\n{text}
\n