├── .dockerignore ├── .github ├── pull_request_template.md └── workflows │ ├── _backend_api.yml │ ├── _frontend-backend_api.yml │ ├── _judge_api.yml │ └── vitepress.yml ├── .gitignore ├── LICENSE ├── README.md ├── api ├── back-judge.proto ├── backend │ ├── frontend-backend.Dockerfile │ ├── frontend-backend.yaml │ ├── to_judge.Dockerfile │ └── to_judge.yaml └── judge │ ├── exec │ └── to_control.yaml │ ├── to_backend.Dockerfile │ └── to_backend.yaml ├── onboarding └── git.md ├── pnpm-lock.yaml ├── pnpm-workspace.yaml └── publishing-docs └── writer-docs ├── Dockerfile ├── package.json └── src ├── .vitepress ├── config.mts └── theme │ ├── index.ts │ └── style.css ├── api-examples.md ├── index.md ├── job-overview.md └── markdown-examples.md /.dockerignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | **/node_modules 3 | **/.vitepress/cache 4 | **/.vitepress/dist 5 | -------------------------------------------------------------------------------- /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | ## issue 2 | 3 | close # 4 | -------------------------------------------------------------------------------- /.github/workflows/_backend_api.yml: -------------------------------------------------------------------------------- 1 | name: test-backend-api 2 | 3 | on: 4 | push: 5 | branches: [ "develop" ] 6 | pull_request: 7 | branches: [ "develop" ] 8 | 9 | 10 | jobs: 11 | test: 12 | runs-on: ubuntu-latest 13 | defaults: 14 | run: 15 | working-directory: ./api/backend 16 | steps: 17 | - name: Checkout 18 | uses: actions/checkout@v4 19 | 20 | - name: Generate API test 21 | run: docker run --rm 22 | -v ${PWD}:/local 23 | openapitools/openapi-generator-cli validate 24 | -i /local/to_judge.yaml -------------------------------------------------------------------------------- /.github/workflows/_frontend-backend_api.yml: -------------------------------------------------------------------------------- 1 | name: test-front-back-api 2 | 3 | on: 4 | push: 5 | branches: ["develop"] 6 | pull_request: 7 | branches: ["develop"] 8 | 9 | jobs: 10 | test: 11 | runs-on: ubuntu-latest 12 | defaults: 13 | run: 14 | working-directory: ./api/backend 15 | steps: 16 | - name: Checkout 17 | uses: actions/checkout@v4 18 | 19 | - name: Generate API test 20 | run: docker run --rm 21 | -v ${PWD}:/local 22 | openapitools/openapi-generator-cli validate 23 | -i /local/frontend-backend.yaml 24 | -------------------------------------------------------------------------------- /.github/workflows/_judge_api.yml: -------------------------------------------------------------------------------- 1 | name: test-judge-api 2 | 3 | on: 4 | push: 5 | branches: [ "develop" ] 6 | pull_request: 7 | branches: [ "develop" ] 8 | 9 | 10 | jobs: 11 | test: 12 | runs-on: ubuntu-latest 13 | defaults: 14 | run: 15 | working-directory: ./api/judge 16 | steps: 17 | - name: Checkout 18 | uses: actions/checkout@v4 19 | 20 | - name: Generate API test 21 | run: docker run --rm 22 | -v ${PWD}:/local 23 | openapitools/openapi-generator-cli validate 24 | -i /local/to_backend.yaml -------------------------------------------------------------------------------- /.github/workflows/vitepress.yml: -------------------------------------------------------------------------------- 1 | name: vitepress-buildcheck 2 | 3 | on: 4 | push: 5 | branches: [ "develop" ] 6 | pull_request: 7 | branches: [ "develop" ] 8 | 9 | permissions: 10 | contents: read 11 | 12 | jobs: 13 | tests: 14 | runs-on: ubuntu-latest 15 | strategy: 16 | matrix: 17 | node-version: [20] 18 | steps: 19 | - uses: actions/checkout@v4 20 | - name: Install pnpm 21 | uses: pnpm/action-setup@v4 22 | with: 23 | version: 10 24 | - name: Use Node.js ${{ matrix.node-version }} 25 | uses: actions/setup-node@v4 26 | with: 27 | node-version: ${{ matrix.node-version }} 28 | cache: 'pnpm' 29 | - name: Install dependencies 30 | run: pnpm install 31 | - name: Build 32 | run: pnpm -F writer-docs docs:build 33 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .vscode 2 | node_modules 3 | **/node_modules 4 | **/.vitepress/cache 5 | **/.vitepress/dist 6 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 traP Community 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # traO-Judge-docs 2 | 3 | traO Judge ドキュメント 4 | 5 | 実行環境開発はリポジトリを移動しました。移動先 →[traP-jp/traO-Judge-exec](https://github.com/traP-jp/traO-Judge-exec) 6 | -------------------------------------------------------------------------------- /api/back-judge.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | 4 | service JudgeService { 5 | rpc Judge(JudgeRequest) returns (JudgeResult) {} 6 | } 7 | 8 | message Unit {} 9 | 10 | message UUID { 11 | uint64 high = 1; 12 | uint64 low = 2; 13 | } 14 | 15 | message OptionalInfo { 16 | optional float time_limit = 1; 17 | optional float memory_limit = 2; 18 | optional string language = 3; 19 | } 20 | 21 | 22 | message Execution { 23 | OptionalInfo optional_info = 1; 24 | UUID script_id = 2; 25 | int64 directory_count = 3; 26 | int64 text_resource_count = 4; 27 | int64 onetime_text_count = 5; 28 | } 29 | 30 | message ExecutionInstance { 31 | repeated UUID text_resource_ids = 1; 32 | repeated string onetime_texts = 2; 33 | } 34 | 35 | message JudgeRequest { 36 | UUID judge_id = 1; 37 | int64 test_count = 2; 38 | Execution before_test_execution = 3; 39 | Execution on_test_execution = 4; 40 | Execution after_test_execution = 5; 41 | ExecutionInstance before_test_execution_instance = 6; 42 | repeated ExecutionInstance on_test_execution_instances = 7; 43 | ExecutionInstance after_test_execution_instance = 8; 44 | } 45 | 46 | enum JudgeStatus { 47 | AC = 0; 48 | WA = 1; 49 | TLE = 2; 50 | MLE = 3; 51 | OLE = 4; 52 | RE = 5; 53 | CE = 6; 54 | } 55 | 56 | message ExecutionResult { 57 | JudgeStatus status = 1; 58 | optional string message = 2; 59 | float score = 3; 60 | float execution_time = 4; 61 | float used_memory = 5; 62 | } 63 | 64 | 65 | message TerminatedInBeforeTestPhase { 66 | ExecutionResult before_test_execution_result = 1; 67 | } 68 | 69 | message TerminatedInOnTestPhase { 70 | ExecutionResult before_test_execution_result = 1; 71 | repeated ExecutionResult on_test_execution_results = 2; 72 | } 73 | 74 | message Completed { 75 | ExecutionResult before_test_execution_result = 1; 76 | repeated ExecutionResult on_test_execution_results = 2; 77 | ExecutionResult after_test_execution_result = 3; 78 | } 79 | 80 | message JudgeSucceed { 81 | oneof result { 82 | TerminatedInBeforeTestPhase terminated_in_before_test_phase = 1; 83 | TerminatedInOnTestPhase terminated_in_on_test_phase = 2; 84 | Completed completed = 4; 85 | } 86 | } 87 | 88 | message FailedInBeforeTestPhase {} 89 | 90 | message FailedInOnTestPhase { 91 | ExecutionResult before_test_execution_result = 1; 92 | } 93 | 94 | message FailedInAfterTestPhase { 95 | ExecutionResult before_test_execution_result = 1; 96 | repeated ExecutionResult on_test_execution_results = 2; 97 | } 98 | 99 | message JudgeFailed { 100 | oneof result { 101 | FailedInBeforeTestPhase failed_in_before_test_phase = 1; 102 | FailedInOnTestPhase failed_in_on_test_phase = 2; 103 | FailedInAfterTestPhase failed_in_after_test_phase = 3; 104 | } 105 | string message = 4; 106 | } 107 | 108 | message JudgeResult { 109 | UUID judge_id = 1; 110 | oneof result { 111 | JudgeSucceed judge_succeed = 2; 112 | JudgeFailed judge_failed = 3; 113 | } 114 | } 115 | -------------------------------------------------------------------------------- /api/backend/frontend-backend.Dockerfile: -------------------------------------------------------------------------------- 1 | FROM swaggerapi/swagger-ui:v5.3.1 2 | COPY api/backend/frontend-backend.yaml /openapi.yaml 3 | ENV SWAGGER_JSON=/openapi.yaml -------------------------------------------------------------------------------- /api/backend/frontend-backend.yaml: -------------------------------------------------------------------------------- 1 | openapi: 3.0.3 2 | info: 3 | title: traO Judge API 4 | description: traO Judge API (front ↔ back) 5 | version: 0.1.0 6 | tags: 7 | - name: authentication 8 | - name: editorials 9 | - name: email 10 | - name: language 11 | - name: me 12 | - name: oauth2 13 | - name: problems 14 | - name: submissions 15 | - name: testcases 16 | - name: users 17 | paths: 18 | "/editorials/{editorialId}": 19 | parameters: 20 | - $ref: "#/components/parameters/editorialIdInPath" 21 | get: 22 | summary: getEditorial 23 | operationId: getEditorial 24 | tags: 25 | - editorials 26 | responses: 27 | "200": 28 | description: OK 29 | content: 30 | application/json: 31 | schema: 32 | $ref: "#/components/schemas/Editorial" 33 | "404": 34 | description: 解説が存在しません(または解説の閲覧権限がありません) 35 | description: 個別の解説を取得する 36 | put: 37 | summary: putEditorial 38 | operationId: putEditorial 39 | tags: 40 | - editorials 41 | requestBody: 42 | content: 43 | application/json: 44 | schema: 45 | $ref: "#/components/schemas/PutEditorialRequest" 46 | responses: 47 | "204": 48 | description: 正常に変更されました 49 | "400": 50 | description: Bad Request 51 | "403": 52 | description: |- 53 | Forbidden 54 | 解説を変更する権限がありません. 55 | "404": 56 | description: |- 57 | Not Found 58 | 解説が存在しません. (または解説の閲覧権限がありません.) 59 | description: 個別の解説を変更する 60 | delete: 61 | summary: deleteEditorial 62 | operationId: deleteEditorial 63 | tags: 64 | - editorials 65 | responses: 66 | "204": 67 | description: 正常に削除されました. 68 | "403": 69 | description: |- 70 | Forbidden 71 | 解説を削除する権限がありません. 72 | "404": 73 | description: |- 74 | Not Found 75 | 解説が存在しません. (または解説の閲覧権限がありません.) 76 | description: 個別の解説を削除する 77 | "/testcases/{testcaseId}": 78 | parameters: 79 | - $ref: "#/components/parameters/testcaseIdInPath" 80 | get: 81 | summary: getTestcase 82 | tags: 83 | - testcases 84 | responses: 85 | "200": 86 | description: OK 87 | content: 88 | application/json: 89 | schema: 90 | $ref: "#/components/schemas/Testcase" 91 | "400": 92 | description: Bad Request 93 | "404": 94 | description: Not Found 95 | operationId: getTestcase 96 | description: あるidのテストケースを取得 97 | put: 98 | summary: putTestcase 99 | operationId: putTestcase 100 | responses: 101 | "204": 102 | description: 正常に変更されました 103 | content: {} 104 | "400": 105 | description: Bad Request 106 | "403": 107 | description: Forbidden 108 | "404": 109 | description: Not Found 110 | description: 単体のテストケースの編集 111 | requestBody: 112 | required: true 113 | content: 114 | application/json: 115 | schema: 116 | $ref: "#/components/schemas/PutTestcaseRequest" 117 | tags: 118 | - testcases 119 | delete: 120 | summary: deleteTestcase 121 | operationId: deleteTestcase 122 | responses: 123 | "204": 124 | description: 正常に削除されました 125 | "403": 126 | description: Forbidden 127 | "404": 128 | description: Not Found 129 | description: 単一のテストケースの削除 130 | tags: 131 | - testcases 132 | /problems: 133 | post: 134 | summary: postProblem 135 | description: |- 136 | 問題を新規作成・投稿する 137 | このとき作成された問題は必ず非公開になる 138 | 公開する場合は PUT で変更する必要がある 139 | operationId: postProblem 140 | tags: 141 | - problems 142 | requestBody: 143 | content: 144 | application/json: 145 | schema: 146 | $ref: "#/components/schemas/PostProblemRequest" 147 | responses: 148 | "201": 149 | description: |- 150 | Created 151 | 問題が投稿されました. 152 | content: 153 | application/json: 154 | schema: 155 | $ref: "#/components/schemas/Problem" 156 | "400": 157 | description: Bad Request 158 | get: 159 | summary: getProblems 160 | operationId: getProblems 161 | responses: 162 | "200": 163 | description: OK 164 | content: 165 | application/json: 166 | schema: 167 | $ref: "#/components/schemas/ProblemSummaries" 168 | "400": 169 | description: Bad Request 170 | "404": 171 | description: Not Found 172 | description: 問題一覧を取得する 173 | tags: 174 | - problems 175 | parameters: 176 | - $ref: "#/components/parameters/limitInQuery" 177 | - $ref: "#/components/parameters/offsetInQuery" 178 | - $ref: "#/components/parameters/problemsOrderByInQuery" 179 | - $ref: "#/components/parameters/userNameInQuery" 180 | - $ref: "#/components/parameters/userIdInQuery" 181 | "/problems/{problemId}": 182 | parameters: 183 | - $ref: "#/components/parameters/problemIdInPath" 184 | get: 185 | summary: getProblem 186 | operationId: getProblem 187 | tags: 188 | - problems 189 | responses: 190 | "200": 191 | description: OK 192 | content: 193 | application/json: 194 | schema: 195 | $ref: "#/components/schemas/Problem" 196 | "404": 197 | description: |- 198 | Not Found 199 | 問題が存在しません. (または問題の閲覧権限がありません.) 200 | description: 個別の問題を取得する 201 | put: 202 | summary: putProblem 203 | operationId: putProblem 204 | tags: 205 | - problems 206 | responses: 207 | "204": 208 | description: 正常に変更されました 209 | content: {} 210 | "400": 211 | description: Bad Request 212 | "403": 213 | description: |- 214 | Forbidden 215 | 問題を編集する権限がありません. 216 | "404": 217 | description: |- 218 | Not Found 219 | 問題が存在しません. (または問題の閲覧権限がありません.) 220 | description: 問題を修正する 221 | requestBody: 222 | content: 223 | application/json: 224 | schema: 225 | $ref: "#/components/schemas/PutProblemRequest" 226 | delete: 227 | summary: deleteProblem 228 | operationId: deleteProblem 229 | tags: 230 | - problems 231 | responses: 232 | "204": 233 | description: 正常に削除されました. 234 | "403": 235 | description: |- 236 | Forbidden 237 | 問題を削除する権限がありません. 238 | "404": 239 | description: |- 240 | Not Found 241 | 問題が存在しません. (または問題の閲覧権限がありません.) 242 | description: 問題を削除する 243 | "/problems/{problemId}/editorials": 244 | parameters: 245 | - $ref: "#/components/parameters/problemIdInPath" 246 | get: 247 | summary: getEditorialsOnProblem 248 | operationId: getEditorialsOnProblem 249 | tags: 250 | - editorials 251 | responses: 252 | "200": 253 | description: OK 254 | content: 255 | application/json: 256 | schema: 257 | $ref: "#/components/schemas/EditorialSummaries" 258 | "404": 259 | description: |- 260 | Not Found 261 | 問題が存在しません. (または問題の閲覧権限がありません.) 262 | description: ある問題の全ての解説を取得する 263 | post: 264 | summary: postEditorial 265 | operationId: postEditorial 266 | tags: 267 | - editorials 268 | requestBody: 269 | content: 270 | application/json: 271 | schema: 272 | $ref: "#/components/schemas/PostEditorialRequest" 273 | responses: 274 | "201": 275 | description: Created 276 | content: 277 | application/json: 278 | schema: 279 | $ref: "#/components/schemas/Editorial" 280 | "400": 281 | description: Bad Request 282 | "403": 283 | description: |- 284 | Forbidden 285 | 解説を投稿する権限がありません. 286 | "404": 287 | description: |- 288 | Not Found 289 | 問題が存在しません. (または問題の閲覧権限がありません.) 290 | description: 解説を投稿する 291 | "/problems/{problemId}/testcases": 292 | parameters: 293 | - $ref: "#/components/parameters/problemIdInPath" 294 | post: 295 | summary: postTestcases 296 | operationId: postTestcases 297 | tags: 298 | - testcases 299 | requestBody: 300 | content: 301 | application/json: 302 | schema: 303 | $ref: "#/components/schemas/PostTestcaseRequest" 304 | responses: 305 | "201": 306 | description: Created 307 | content: 308 | application/json: 309 | schema: 310 | $ref: "#/components/schemas/TestcaseSummaries" 311 | "400": 312 | description: Bad Request 313 | "403": 314 | description: |- 315 | Forbidden 316 | 解説を投稿する権限がありません. 317 | "404": 318 | description: |- 319 | Not Found 320 | 問題が存在しません. (または問題の閲覧権限がありません.) 321 | description: テストケースを投稿する 322 | get: 323 | summary: getTestcases 324 | operationId: getTestcases 325 | responses: 326 | "200": 327 | description: OK 328 | content: 329 | application/json: 330 | schema: 331 | $ref: "#/components/schemas/TestcaseSummaries" 332 | "404": 333 | description: Not Found 334 | description: 全てのテストケースを取得 335 | tags: 336 | - testcases 337 | "/problems/{problemId}/submissions": 338 | parameters: 339 | - name: problemId 340 | in: path 341 | description: 問題ID 342 | required: true 343 | schema: 344 | type: number 345 | post: 346 | summary: postSubmission 347 | operationId: postSubmission 348 | tags: 349 | - submissions 350 | requestBody: 351 | content: 352 | application/json: 353 | schema: 354 | $ref: "#/components/schemas/PostSubmissionRequest" 355 | responses: 356 | "201": 357 | description: Created 358 | content: 359 | application/json: 360 | schema: 361 | $ref: "#/components/schemas/Submission" 362 | "400": 363 | description: Bad Request 364 | "403": 365 | description: |- 366 | Forbidden 367 | ソースコードを提出する権限がありません. 368 | "404": 369 | description: |- 370 | Not Found 371 | 提出が存在しません. (または提出の閲覧権限がありません.) 372 | description: ソースコードを提出する 373 | /submissions: 374 | get: 375 | summary: getSubmissions 376 | tags: 377 | - submissions 378 | responses: 379 | "200": 380 | description: OK 381 | content: 382 | application/json: 383 | schema: 384 | $ref: "#/components/schemas/SubmissionSummaries" 385 | "400": 386 | description: Bad Request 387 | "404": 388 | description: Not Found 389 | operationId: getSubmissions 390 | parameters: 391 | - $ref: "#/components/parameters/submissionsOrderByInQuery" 392 | - $ref: "#/components/parameters/judgeStatusInQuery" 393 | - $ref: "#/components/parameters/codeLanguageInQuery" 394 | - $ref: "#/components/parameters/userNameInQuery" 395 | - $ref: "#/components/parameters/userIdInQuery" 396 | - $ref: "#/components/parameters/limitInQuery" 397 | - $ref: "#/components/parameters/offsetInQuery" 398 | - $ref: "#/components/parameters/problemIdInQuery" 399 | description: 全ての提出を取得 400 | "/submissions/{submissionId}": 401 | parameters: 402 | - $ref: "#/components/parameters/submissionIdInPath" 403 | get: 404 | summary: getSubmission 405 | operationId: getSubmission 406 | tags: 407 | - submissions 408 | responses: 409 | "200": 410 | description: OK 411 | content: 412 | application/json: 413 | schema: 414 | $ref: "#/components/schemas/Submission" 415 | "404": 416 | description: |- 417 | Not Found 418 | 提出が存在しません. (または提出の閲覧権限がありません.) 419 | description: 個別の提出を取得する 420 | "/users/{userId}": 421 | parameters: 422 | - $ref: "#/components/parameters/userIdInPath" 423 | get: 424 | summary: getUser 425 | operationId: getUser 426 | tags: 427 | - users 428 | responses: 429 | "200": 430 | description: OK 431 | content: 432 | application/json: 433 | schema: 434 | $ref: "#/components/schemas/User" 435 | "404": 436 | description: |- 437 | Not Found 438 | ユーザーが存在しません. 439 | description: 個別のユーザー情報を取得する 440 | /users/me: 441 | get: 442 | summary: getMe 443 | operationId: getMe 444 | tags: 445 | - me 446 | responses: 447 | "200": 448 | description: OK 449 | content: 450 | application/json: 451 | schema: 452 | $ref: "#/components/schemas/Me" 453 | "401": 454 | description: |- 455 | Unauthorized 456 | ログインしていません. 457 | description: 自身の情報を取得する 458 | 459 | put: 460 | summary: putMe 461 | operationId: putMe 462 | responses: 463 | "200": 464 | description: 正常に更新されました 465 | content: 466 | application/json: 467 | schema: 468 | $ref: "#/components/schemas/Me" 469 | "400": 470 | description: 不正なリクエストです 471 | tags: 472 | - me 473 | requestBody: 474 | content: 475 | application/json: 476 | schema: 477 | $ref: "#/components/schemas/PutMeRequest" 478 | description: アイコンなど自身に関連する情報の編集をします 479 | /users/me/email: 480 | put: 481 | summary: putMeEmail 482 | operationId: putMeEmail 483 | responses: 484 | "204": 485 | description: 正常に更新されました メール認証を行なってください 486 | "400": 487 | description: 不正なリクエストです 488 | "409": 489 | description: メールアドレスが既に使用されています 490 | tags: 491 | - me 492 | requestBody: 493 | content: 494 | application/json: 495 | schema: 496 | $ref: "#/components/schemas/Email" 497 | description: メール情報を書き換える メール情報を書き換えた後はメール認証が必要である 498 | /users/me/password: 499 | put: 500 | summary: putUserMePassword 501 | operationId: putUsersMePassword 502 | responses: 503 | "204": 504 | description: 正常に更新されました 505 | "400": 506 | description: 不正なリクエストです 507 | "401": 508 | description: Unauthorized 509 | 510 | tags: 511 | - me 512 | requestBody: 513 | content: 514 | application/json: 515 | schema: 516 | $ref: "#/components/schemas/PutPasswordRequest" 517 | description: ログイン後にパスワードを変更する 518 | /signup/request: 519 | post: 520 | summary: postSignupRequest 521 | operationId: postSignupRequest 522 | responses: 523 | "201": 524 | description: 認証用のURLを送信しました メール認証を行なってください 525 | "400": 526 | description: 不正なリクエストです メールアドレスの形式を確認してください 527 | requestBody: 528 | content: 529 | application/json: 530 | schema: 531 | $ref: "#/components/schemas/SignupRequest" 532 | tags: 533 | - authentication 534 | description: メールアドレスを渡し,そこに認証用のリンクを送る。 535 | /signup: 536 | post: 537 | summary: postSignup 538 | operationId: postSignup 539 | responses: 540 | "201": 541 | description: 正常にユーザーを作成できました 542 | "400": 543 | description: 不正なリクエストです 544 | "401": 545 | description: Unauthorized 546 | "500": 547 | description: Internal server error 548 | requestBody: 549 | content: 550 | application/json: 551 | schema: 552 | $ref: "#/components/schemas/Signup" 553 | tags: 554 | - authentication 555 | description: |- 556 | ユーザー登録 557 | tokenでメールまたはOAuth情報を管理する 558 | OAuthの場合、パスワードは不要 559 | /login: 560 | post: 561 | summary: postLogin 562 | operationId: postLogin 563 | responses: 564 | "204": 565 | description: No Content 566 | "400": 567 | description: 不正なリクエストです ユーザー名とパスワードを確認してください 568 | "401": 569 | description: Unauthorized 570 | tags: 571 | - authentication 572 | requestBody: 573 | content: 574 | application/json: 575 | schema: 576 | $ref: "#/components/schemas/UserEmailAndPassword" 577 | description: ログイン 578 | /logout: 579 | post: 580 | summary: postLogout 581 | operationId: postLogout 582 | responses: 583 | "204": 584 | description: No Content 585 | description: ログアウト 586 | tags: 587 | - authentication 588 | /reset-password/request: 589 | post: 590 | summary: postResetPasswordReset 591 | tags: 592 | - authentication 593 | responses: 594 | "204": 595 | description: 正常にリセットメールを送信しました 596 | "400": 597 | description: Bad Request 598 | operationId: postRequestResetPassword 599 | description: |- 600 | パスワード変更のリクエスト 601 | リクエストを受け取ったら`/reset-password?token=JWT`のような形式のエンドポイントを含むメールをバックエンドからユーザーに送る。 602 | ユーザーがそれをクリックするとリセット用画面に遷移する。 603 | requestBody: 604 | content: 605 | application/json: 606 | schema: 607 | $ref: "#/components/schemas/Email" 608 | /reset-password: 609 | post: 610 | summary: postResetPassword 611 | operationId: postResetPassword 612 | responses: 613 | "204": 614 | description: 正常に更新されました 615 | "400": 616 | description: Bad Request 617 | description: 新しいパスワードをPOSTする 618 | requestBody: 619 | content: 620 | application/json: 621 | schema: 622 | $ref: "#/components/schemas/ResetPasswordRequest" 623 | tags: 624 | - authentication 625 | parameters: 626 | - $ref: "#/components/parameters/JWTWithUserId" 627 | /activate: 628 | get: 629 | summary: getActivateEmailAddress 630 | parameters: 631 | - $ref: "#/components/parameters/JWTWithUserId" 632 | - $ref: "#/components/parameters/JWTWithoutUserId" 633 | responses: 634 | "200": 635 | description: メールアドレスが正常に有効化されました 636 | "400": 637 | description: Invalid token or bad request 638 | "401": 639 | description: Unauthorized or expired token 640 | "404": 641 | description: User not found 642 | operationId: getActivate 643 | description: メールアドレスの有効化 644 | tags: 645 | - email 646 | "/google-oauth2/{oauthAction}/params": 647 | parameters: 648 | - $ref: "#/components/parameters/oauthActionInPath" 649 | get: 650 | summary: getGoogleOAuth2Params 651 | operationId: getGoogleAuthParams 652 | responses: 653 | "200": 654 | description: 正しいURLが返されました 655 | content: 656 | application/json: 657 | schema: 658 | type: object 659 | properties: 660 | url: 661 | type: string 662 | required: 663 | - url 664 | "500": 665 | description: Internal server error 666 | content: 667 | application/json: 668 | schema: 669 | type: object 670 | properties: 671 | message: 672 | type: string 673 | description: GoogleOAuthのためのエンドポイント 674 | tags: 675 | - oauth2 676 | "/github-oauth2/{oauthAction}/params": 677 | parameters: 678 | - $ref: "#/components/parameters/oauthActionInPath" 679 | get: 680 | summary: getGithubOAuth2Params 681 | operationId: getgithubAuthParams 682 | responses: 683 | "200": 684 | description: 正しいURLが返されました 685 | content: 686 | application/json: 687 | schema: 688 | type: object 689 | properties: 690 | url: 691 | type: string 692 | required: 693 | - url 694 | "500": 695 | description: Internal server error 696 | content: 697 | application/json: 698 | schema: 699 | type: object 700 | properties: 701 | message: 702 | type: string 703 | description: GitHubOAuthのためのエンドポイント 704 | tags: 705 | - oauth2 706 | "/google-oauth2/{oauthAction}/authorize": 707 | parameters: 708 | - $ref: "#/components/parameters/oauthActionInPath" 709 | post: 710 | summary: postGoogleOAuth2Authorize 711 | operationId: postGoogleOAuthAuthorize 712 | requestBody: 713 | content: 714 | application/json: 715 | schema: 716 | $ref: "#/components/schemas/OAuthAuthorizationCode" 717 | responses: 718 | "200": 719 | description: OK(only when oauthAction is 'signup' or 'login' and no account is binded to the oauth account) 720 | content: 721 | application/json: 722 | schema: 723 | type: object 724 | properties: 725 | token: 726 | type: string 727 | required: 728 | - token 729 | "204": 730 | description: No content 731 | "400": 732 | description: Invalid authorization code 733 | "401": 734 | description: Unauthorized(only when oauthAction is 'bind') 735 | "500": 736 | description: Internal server error 737 | description: GoogleOAuthのためのエンドポイント 738 | tags: 739 | - oauth2 740 | "/github-oauth2/{oauthAction}/authorize": 741 | parameters: 742 | - $ref: "#/components/parameters/oauthActionInPath" 743 | post: 744 | summary: postGithubOAuth2Authorize 745 | operationId: postGithubOAuthAuthorize 746 | requestBody: 747 | content: 748 | application/json: 749 | schema: 750 | $ref: "#/components/schemas/OAuthAuthorizationCode" 751 | responses: 752 | "200": 753 | description: OK(only when oauthAction is 'signup' or 'login' and no account is binded to the oauth account) 754 | content: 755 | application/json: 756 | schema: 757 | type: object 758 | properties: 759 | token: 760 | type: string 761 | required: 762 | - token 763 | "204": 764 | description: No content 765 | "400": 766 | description: Invalid authorization code 767 | "401": 768 | description: Unauthorized(only when oauthAction is 'bind') 769 | "500": 770 | description: Internal server error 771 | description: GithubOAuthのためのエンドポイント 772 | tags: 773 | - oauth2 774 | /traq-oauth2/revoke: 775 | post: 776 | summary: postTraqOAuth2Revoke 777 | operationId: revokeTraqAuth 778 | tags: 779 | - oauth2 780 | requestBody: 781 | description: Access token to be revoked 782 | required: true 783 | content: 784 | application/json: 785 | schema: 786 | type: object 787 | properties: 788 | token: 789 | type: string 790 | description: The access token to revoke 791 | required: 792 | - token 793 | responses: 794 | "201": 795 | description: トークンは正常に削除されました 796 | content: {} 797 | "400": 798 | description: Invalid request or token 799 | content: 800 | application/json: 801 | schema: 802 | type: object 803 | properties: 804 | message: 805 | type: string 806 | example: Invalid token or request 807 | "500": 808 | description: Internal server error 809 | content: 810 | application/json: 811 | schema: 812 | type: object 813 | properties: 814 | message: 815 | type: string 816 | description: traQOAuthのトークンを削除する 817 | /google-oauth2/revoke: 818 | post: 819 | summary: postGoogleOAuth2Revoke 820 | operationId: revokeGoogleAuth 821 | tags: 822 | - oauth2 823 | responses: 824 | "201": 825 | description: トークンは正常に削除されました 826 | content: {} 827 | "400": 828 | description: Bad request 829 | content: 830 | application/json: 831 | schema: 832 | type: object 833 | properties: 834 | message: 835 | type: string 836 | example: Cannot revoke OAuth account because no other authentication method is available 837 | "401": 838 | description: Unauthorized 839 | content: 840 | application/json: 841 | schema: 842 | type: object 843 | properties: 844 | message: 845 | type: string 846 | example: Invalid token or request 847 | "500": 848 | description: Internal server error 849 | content: 850 | application/json: 851 | schema: 852 | type: object 853 | properties: 854 | message: 855 | type: string 856 | description: GoogleOAuthのトークンを削除する 857 | /github-oauth2/revoke: 858 | post: 859 | summary: postGithubOAuth2Revoke 860 | operationId: revokeGithubAuth 861 | tags: 862 | - oauth2 863 | responses: 864 | "201": 865 | description: トークンは正常に削除されました 866 | content: {} 867 | "400": 868 | description: Bad request 869 | content: 870 | application/json: 871 | schema: 872 | type: object 873 | properties: 874 | message: 875 | type: string 876 | example: Cannot revoke OAuth account because no other authentication method is available 877 | "401": 878 | description: Unauthorized 879 | content: 880 | application/json: 881 | schema: 882 | type: object 883 | properties: 884 | message: 885 | type: string 886 | example: Invalid token or request 887 | "500": 888 | description: Internal server error 889 | content: 890 | application/json: 891 | schema: 892 | type: object 893 | properties: 894 | message: 895 | type: string 896 | description: GithubOAuthのトークンを削除する 897 | /languages: 898 | get: 899 | summary: getLanguages 900 | tags: 901 | - language 902 | responses: 903 | "200": 904 | description: OK 905 | content: 906 | application/json: 907 | schema: 908 | type: array 909 | items: 910 | $ref: "#/components/schemas/Language" 911 | "400": 912 | description: Bad Request 913 | "404": 914 | description: Not Found 915 | operationId: getLanguages 916 | description: 使用できる言語の一覧 917 | components: 918 | schemas: 919 | Problem: 920 | title: Problem 921 | type: object 922 | description: 問題の詳細 923 | properties: 924 | id: 925 | type: string 926 | description: 問題ID 927 | title: 928 | type: string 929 | description: 問題タイトル 930 | authorId: 931 | type: integer 932 | description: 作問者のユーザーID 933 | isPublic: 934 | type: boolean 935 | description: |- 936 | 問題が全体公開かどうか. 937 | 938 | * `true` - 公開 939 | * `false` - 非公開 (問題の作者のみ閲覧可) 940 | difficulty: 941 | type: integer 942 | description: 難易度 943 | statement: 944 | type: string 945 | description: 問題文 (HTML形式) 946 | timeLimit: 947 | type: integer 948 | description: 実行時間制限 (ms) 949 | memoryLimit: 950 | type: integer 951 | description: メモリ制限 (MiB) 952 | solvedCount: 953 | type: integer 954 | testcases: 955 | $ref: "#/components/schemas/TestcaseSummaries" 956 | createdAt: 957 | type: string 958 | format: date-time 959 | updatedAt: 960 | type: string 961 | format: date-time 962 | required: 963 | - id 964 | - title 965 | - authorId 966 | - isPublic 967 | - difficulty 968 | - statement 969 | - timeLimit 970 | - memoryLimit 971 | - solvedCount 972 | - testcases 973 | - createdAt 974 | - updatedAt 975 | ProblemSummary: 976 | title: ProblemSummary 977 | type: object 978 | description: 問題の要約 979 | properties: 980 | id: 981 | type: string 982 | description: 問題ID 983 | title: 984 | type: string 985 | description: 問題タイトル 986 | authorId: 987 | type: integer 988 | description: 作問者のユーザーID 989 | isPublic: 990 | type: boolean 991 | description: |- 992 | 問題が全体公開かどうか. 993 | 994 | * `true` - 公開 995 | * `false` - 非公開 (問題の作者のみ閲覧可) 996 | difficulty: 997 | type: integer 998 | description: 難易度 999 | timeLimit: 1000 | type: integer 1001 | description: 実行時間制限 (ms) 1002 | memoryLimit: 1003 | type: integer 1004 | description: メモリ制限 (MiB) 1005 | solvedCount: 1006 | type: integer 1007 | createdAt: 1008 | type: string 1009 | format: date-time 1010 | updatedAt: 1011 | type: string 1012 | format: date-time 1013 | required: 1014 | - id 1015 | - title 1016 | - authorId 1017 | - isPublic 1018 | - difficulty 1019 | - timeLimit 1020 | - memoryLimit 1021 | - solvedCount 1022 | - createdAt 1023 | - updatedAt 1024 | ProblemSummaries: 1025 | title: Problems 1026 | type: object 1027 | properties: 1028 | total: 1029 | type: integer 1030 | problems: 1031 | type: array 1032 | items: 1033 | $ref: "#/components/schemas/ProblemSummary" 1034 | required: 1035 | - total 1036 | - problems 1037 | PostProblemRequest: 1038 | title: PostProblemRequest 1039 | type: object 1040 | description: 問題の投稿リクエスト 1041 | properties: 1042 | title: 1043 | type: string 1044 | description: 問題タイトル 1045 | difficulty: 1046 | type: integer 1047 | description: 難易度 1048 | statement: 1049 | type: string 1050 | description: 問題文 (HTML形式) 1051 | timeLimit: 1052 | type: integer 1053 | description: 実行時間制限 (ms) 1054 | memoryLimit: 1055 | type: integer 1056 | description: メモリ制限 (MiB) 1057 | required: 1058 | - title 1059 | - difficulty 1060 | - statement 1061 | - timeLimit 1062 | - memoryLimit 1063 | PutProblemRequest: 1064 | title: PutProblemRequest 1065 | type: object 1066 | description: 問題の変更リクエスト 1067 | properties: 1068 | title: 1069 | type: string 1070 | description: 問題タイトル 1071 | isPublic: 1072 | type: boolean 1073 | description: |- 1074 | 問題が全体公開かどうか. 1075 | 1076 | * `true` - 公開 1077 | * `false` - 非公開 (問題の作者のみ閲覧可) 1078 | difficulty: 1079 | type: integer 1080 | description: 難易度 1081 | statement: 1082 | type: string 1083 | description: 問題文 (HTML形式) 1084 | timeLimit: 1085 | type: integer 1086 | description: 実行時間制限 (ms) 1087 | memoryLimit: 1088 | type: integer 1089 | description: メモリ制限 (MiB) 1090 | required: 1091 | - title 1092 | - isPublic 1093 | - difficulty 1094 | - timeLimit 1095 | - memoryLimit 1096 | User: 1097 | title: User 1098 | type: object 1099 | description: ユーザー情報 1100 | properties: 1101 | id: 1102 | type: string 1103 | description: ユーザーID 1104 | name: 1105 | type: string 1106 | description: ユーザー名 1107 | traqId: 1108 | type: string 1109 | description: traQのID 1110 | githubId: 1111 | type: string 1112 | description: GitHubのID 1113 | iconUrl: 1114 | type: string 1115 | postProblems: 1116 | $ref: "#/components/schemas/ProblemSummaries" 1117 | submitProblems: 1118 | $ref: "#/components/schemas/SubmissionSummaries" 1119 | xId: 1120 | type: string 1121 | selfIntroduction: 1122 | type: string 1123 | role: 1124 | $ref: "#/components/schemas/Role" 1125 | createdAt: 1126 | type: string 1127 | format: date-time 1128 | updatedAt: 1129 | type: string 1130 | format: date-time 1131 | required: 1132 | - id 1133 | - name 1134 | - role 1135 | - createdAt 1136 | - updatedAt 1137 | UserAuthentication: 1138 | title: UserAuthentication 1139 | type: object 1140 | description: ユーザーの認証情報 1141 | properties: 1142 | emailAuth: 1143 | type: string 1144 | format: email 1145 | description: メール認証用のアドレス(存在すればメール認証可能) 1146 | nullable: true 1147 | googleAuth: 1148 | type: string 1149 | format: email 1150 | description: Google認証に使用されているメールアドレス(存在すればGoogle認証済み) 1151 | nullable: true 1152 | githubAuth: 1153 | type: string 1154 | description: GitHub認証に使用されている識別子(存在すればGitHub認証済み) 1155 | nullable: true 1156 | traqAuth: 1157 | type: string 1158 | description: traQ認証に使用されている識別子(存在すればtraQ認証済み) 1159 | nullable: true 1160 | Me: 1161 | title: Me 1162 | type: object 1163 | description: ログインユーザー自身の詳細情報 1164 | allOf: 1165 | - $ref: "#/components/schemas/User" 1166 | - type: object 1167 | properties: 1168 | authentication: 1169 | $ref: "#/components/schemas/UserAuthentication" 1170 | required: 1171 | - authentication 1172 | PutMeRequest: 1173 | title: PutMeRequest 1174 | type: object 1175 | properties: 1176 | userName: 1177 | type: string 1178 | icon: 1179 | type: string 1180 | format: binary 1181 | xId: 1182 | type: string 1183 | x-stoplight: 1184 | id: f3asn9h8jlzvr 1185 | githubId: 1186 | type: string 1187 | x-stoplight: 1188 | id: e0hrxedlfimd4 1189 | selfIntroduction: 1190 | type: string 1191 | PutPasswordRequest: 1192 | title: PutPasswordRequest 1193 | type: object 1194 | description: ログイン後のパスワード変更用 1195 | properties: 1196 | oldPassword: 1197 | type: string 1198 | format: password 1199 | newPassword: 1200 | type: string 1201 | format: password 1202 | required: 1203 | - oldPassword 1204 | - newPassword 1205 | SubmissionSummary: 1206 | title: SubmissionSummary 1207 | type: object 1208 | description: 提出 1209 | properties: 1210 | id: 1211 | type: string 1212 | description: 提出ID 1213 | problemId: 1214 | type: integer 1215 | description: 問題ID 1216 | userId: 1217 | type: integer 1218 | description: 提出ユーザーID 1219 | userName: 1220 | type: string 1221 | submittedAt: 1222 | type: string 1223 | format: date-time 1224 | description: 提出日時 1225 | languageId: 1226 | type: integer 1227 | description: 提出コードの言語ID 1228 | totalScore: 1229 | type: integer 1230 | description: スコアの合計 1231 | maxTime: 1232 | type: integer 1233 | description: 実行時間の最大値 (ms) 1234 | maxMemory: 1235 | type: number 1236 | description: メモリ使用量の最大値 (MiB) 1237 | codeLength: 1238 | type: number 1239 | judgeStatus: 1240 | $ref: "#/components/schemas/JudgeStatus" 1241 | required: 1242 | - id 1243 | - problemId 1244 | - userId 1245 | - userName 1246 | - submittedAt 1247 | - languageId 1248 | - totalScore 1249 | - maxTime 1250 | - maxMemory 1251 | - codeLength 1252 | - judgeStatus 1253 | SubmissionSummaries: 1254 | title: SubmissionSummaries 1255 | description: 提出一覧 1256 | type: object 1257 | properties: 1258 | total: 1259 | type: integer 1260 | submissions: 1261 | type: array 1262 | items: 1263 | $ref: "#/components/schemas/SubmissionSummary" 1264 | Submission: 1265 | title: Submission 1266 | type: object 1267 | description: 提出の詳細 1268 | properties: 1269 | id: 1270 | type: string 1271 | description: 提出ID 1272 | userId: 1273 | type: integer 1274 | description: 提出ユーザーID 1275 | userName: 1276 | type: string 1277 | problemId: 1278 | type: integer 1279 | description: 問題ID 1280 | submittedAt: 1281 | type: string 1282 | format: date-time 1283 | description: 提出日時 1284 | languageId: 1285 | type: integer 1286 | description: 提出コードの言語ID 1287 | totalScore: 1288 | type: integer 1289 | description: スコアの合計 1290 | maxTime: 1291 | type: integer 1292 | description: 実行時間の最大値 (ms) 1293 | maxMemory: 1294 | type: number 1295 | description: メモリ使用量の最大値 (MiB) 1296 | codeLength: 1297 | type: number 1298 | overallJudgeStatus: 1299 | $ref: "#/components/schemas/JudgeStatus" 1300 | judgeResults: 1301 | type: array 1302 | items: 1303 | $ref: "#/components/schemas/JudgeResult" 1304 | required: 1305 | - id 1306 | - userId 1307 | - userName 1308 | - problemId 1309 | - submittedAt 1310 | - languageId 1311 | - totalScore 1312 | - maxTime 1313 | - maxMemory 1314 | PostSubmissionRequest: 1315 | title: PostProblemRequest 1316 | type: object 1317 | description: 回答の提出リクエスト 1318 | properties: 1319 | languageId: 1320 | type: integer 1321 | description: 提出コードの言語ID 1322 | source: 1323 | type: string 1324 | description: ソースコード 1325 | required: 1326 | - languageId 1327 | EditorialSummary: 1328 | title: EditorialSummary 1329 | description: 解説 1330 | type: object 1331 | properties: 1332 | id: 1333 | description: 解説ID 1334 | type: integer 1335 | createdAt: 1336 | description: 作成日時 1337 | type: string 1338 | format: date-time 1339 | updatedAt: 1340 | description: 更新日時 1341 | type: string 1342 | format: date-time 1343 | authorId: 1344 | description: 投稿者のユーザーID 1345 | type: integer 1346 | isPublic: 1347 | description: |- 1348 | 解説が全体公開かどうか. 1349 | 1350 | * `true` - 公開 1351 | * `false` - 非公開 (問題の作者のみ閲覧可) 1352 | type: boolean 1353 | EditorialSummaries: 1354 | title: EditorialSummaries 1355 | description: 解説一覧 1356 | type: array 1357 | items: 1358 | $ref: "#/components/schemas/EditorialSummary" 1359 | Editorial: 1360 | title: Editorial 1361 | description: 解説の詳細 1362 | type: object 1363 | properties: 1364 | id: 1365 | description: 解説ID 1366 | type: integer 1367 | createdAt: 1368 | description: 作成日時 1369 | type: string 1370 | format: date-time 1371 | updatedAt: 1372 | description: 更新日時 1373 | type: string 1374 | format: date-time 1375 | authorId: 1376 | description: 投稿者のユーザーID 1377 | type: integer 1378 | statement: 1379 | description: 解説本文 (HTML) 1380 | type: string 1381 | isPublic: 1382 | description: |- 1383 | 解説が全体公開かどうか. 1384 | 1385 | * `true` - 公開 1386 | * `false` - 非公開 (問題の作者のみ閲覧可) 1387 | type: boolean 1388 | required: 1389 | - id 1390 | - createdAt 1391 | - authorId 1392 | - statement 1393 | - isPublic 1394 | PostEditorialRequest: 1395 | title: PostEditorialRequest 1396 | description: 解説の作成リクエスト 1397 | type: object 1398 | properties: 1399 | statement: 1400 | description: 解説本文 (HTML) 1401 | type: string 1402 | isPublic: 1403 | description: |- 1404 | 解説が全体公開かどうか. 1405 | 1406 | * `true` - 公開 1407 | * `false` - 非公開 (問題の作者のみ閲覧可) 1408 | type: boolean 1409 | required: 1410 | - statement 1411 | - isPublic 1412 | PutEditorialRequest: 1413 | title: PutEditorialRequest 1414 | description: 解説の変更リクエスト. 1415 | type: object 1416 | properties: 1417 | statement: 1418 | description: 解説本文 (HTML) 1419 | type: string 1420 | isPublic: 1421 | description: 公開されているかどうか 1422 | type: boolean 1423 | Signup: 1424 | title: Signup 1425 | type: object 1426 | description: email+password登録 1427 | properties: 1428 | userName: 1429 | type: string 1430 | password: 1431 | type: string 1432 | token: 1433 | type: string 1434 | required: 1435 | - userName 1436 | - token 1437 | SignupRequest: 1438 | title: SignupRequest 1439 | type: object 1440 | description: Signupのリクエスト 1441 | properties: 1442 | email: 1443 | type: string 1444 | format: email 1445 | required: 1446 | - email 1447 | Email: 1448 | title: Email 1449 | type: object 1450 | properties: 1451 | email: 1452 | type: string 1453 | format: email 1454 | required: 1455 | - email 1456 | UserEmailAndPassword: 1457 | title: UserEmailAndPassword 1458 | type: object 1459 | description: login 1460 | properties: 1461 | email: 1462 | type: string 1463 | format: email 1464 | password: 1465 | type: string 1466 | required: 1467 | - email 1468 | - password 1469 | ResetPasswordRequest: 1470 | title: ResetPasswordRequest 1471 | type: object 1472 | properties: 1473 | password: 1474 | type: string 1475 | token: 1476 | type: string 1477 | required: 1478 | - password 1479 | - token 1480 | description: "" 1481 | JudgeStatus: 1482 | title: JudgeStatus 1483 | description: |- 1484 | ジャッジの状態 1485 | 1486 | * `AC` - 正解 1487 | * `WA` - 不正解 1488 | * `CE` - コンパイルエラー 1489 | * `IE` - 内部エラー 1490 | * `MLE` - メモリ制限超過 1491 | * `RE` - 実行時エラー 1492 | * `TLE` - 実行時間超過 1493 | * `WJ` - ジャッジ待ち 1494 | type: string 1495 | enum: 1496 | - AC 1497 | - WA 1498 | - CE 1499 | - IE 1500 | - MLE 1501 | - RE 1502 | - TLE 1503 | - WJ 1504 | JudgeResult: 1505 | title: JudgeResult 1506 | type: object 1507 | description: ジャッジ結果 1508 | properties: 1509 | testcaseId: 1510 | type: string 1511 | testcaseName: 1512 | type: string 1513 | judgeStatus: 1514 | $ref: "#/components/schemas/JudgeStatus" 1515 | score: 1516 | type: integer 1517 | time: 1518 | type: integer 1519 | memory: 1520 | type: number 1521 | required: 1522 | - testcaseId 1523 | - judgeStatus 1524 | - score 1525 | - time 1526 | - memory 1527 | Role: 1528 | title: Role 1529 | description: |- 1530 | ユーザの役割 1531 | 1532 | * `Admin` - Admin 1533 | * `traPUser` - AdminでないtraP部員 1534 | * `CommonUser` - Adminでない一般ユーザー(traP部員以外のユーザー) 1535 | type: string 1536 | enum: 1537 | - Admin 1538 | - traPUser 1539 | - CommonUser 1540 | Testcase: 1541 | title: Testcase 1542 | type: object 1543 | description: テストケース 1544 | properties: 1545 | name: 1546 | type: string 1547 | id: 1548 | type: string 1549 | testInput: 1550 | type: string 1551 | testOutput: 1552 | type: string 1553 | createdAt: 1554 | type: string 1555 | format: date-time 1556 | updatedAt: 1557 | type: string 1558 | format: date-time 1559 | required: 1560 | - name 1561 | - id 1562 | - testInput 1563 | - testOutput 1564 | - createdAt 1565 | - updatedAt 1566 | PostTestcaseRequest: 1567 | title: PostTestcasesRequest 1568 | type: array 1569 | description: テストケースの投稿 1570 | items: 1571 | type: object 1572 | properties: 1573 | name: 1574 | type: string 1575 | testInput: 1576 | type: string 1577 | testOutput: 1578 | type: string 1579 | required: 1580 | - name 1581 | - testInput 1582 | - testOutput 1583 | PutTestcaseRequest: 1584 | title: PutTestcaseRequest 1585 | type: object 1586 | description: 単体のテストケースの編集 1587 | properties: 1588 | name: 1589 | type: string 1590 | testInput: 1591 | type: string 1592 | testOutput: 1593 | type: string 1594 | required: 1595 | - name 1596 | - testInput 1597 | - testOutput 1598 | TestcaseSummary: 1599 | title: TestcaseSummary 1600 | type: object 1601 | properties: 1602 | id: 1603 | type: string 1604 | name: 1605 | type: string 1606 | createdAt: 1607 | type: string 1608 | format: date-time 1609 | updatedAt: 1610 | type: string 1611 | format: date-time 1612 | TestcaseSummaries: 1613 | title: TestcaseSummaries 1614 | type: array 1615 | items: 1616 | $ref: "#/components/schemas/TestcaseSummary" 1617 | Language: 1618 | title: Language 1619 | type: object 1620 | description: プログラミング言語についての情報 1621 | properties: 1622 | id: 1623 | type: integer 1624 | name: 1625 | type: string 1626 | required: 1627 | - id 1628 | - name 1629 | OAuthAuthorizationCode: 1630 | title: OAuthAuthorizationCode 1631 | description: OAuth先から返される認可コード 1632 | type: object 1633 | properties: 1634 | code: 1635 | type: string 1636 | required: 1637 | - code 1638 | parameters: 1639 | problemIdInPath: 1640 | name: problemId 1641 | in: path 1642 | description: 問題ID 1643 | required: true 1644 | schema: 1645 | type: string 1646 | problemsOrderByInQuery: 1647 | name: orderBy 1648 | in: query 1649 | description: |- 1650 | 問題一覧の並び替え 1651 | 1652 | `Asc` は昇順, `Desc` は降順を示す. 1653 | 1654 | * `createdAtAsc` - 提出日時の昇順 1655 | * `createdAtDesc` - 提出日時の降順 1656 | * `updatedAtAsc` - 更新日時の昇順 1657 | * `updatedAtDesc` - 更新日時の降順 1658 | * `difficultyAsc` - 難易度の昇順 1659 | * `difficultyDesc` - 難易度の降順 1660 | required: false 1661 | schema: 1662 | type: string 1663 | default: createdAtDesc 1664 | enum: 1665 | - createdAtAsc 1666 | - createdAtDesc 1667 | - updatedAtAsc 1668 | - updatedAtDesc 1669 | - difficultyAsc 1670 | - difficultyDesc 1671 | submissionIdInPath: 1672 | name: submissionId 1673 | in: path 1674 | description: 提出ID 1675 | required: true 1676 | schema: 1677 | type: number 1678 | submissionsOrderByInQuery: 1679 | name: orderBy 1680 | in: query 1681 | description: |- 1682 | 提出一覧の並び替え 1683 | 1684 | `Asc` は昇順, `Desc` は降順を示す. 1685 | 1686 | * `submittedAtAsc` - 提出日時(昇順) 1687 | * `submittedAtDesc` - 提出日時(降順) 1688 | * `timeConsumptionAsc` - 実行時間(昇順) 1689 | * `timeConsumptionDesc` - 実行時間(降順) 1690 | * `scoreAsc` - スコア(昇順) 1691 | * `scoreDesc` - スコア(降順) 1692 | * `memoryConsumptionAsc` - メモリ量(昇順) 1693 | * `memoryConsumptionDesc` - メモリ量(降順) 1694 | * `codeLengthAsc` - コード長(昇順) 1695 | * `codeLengthDesc` - コード長(降順) 1696 | schema: 1697 | type: string 1698 | default: submittedAtDesc 1699 | enum: 1700 | - submittedAtAsc 1701 | - submittedAtDesc 1702 | - timeConsumptionAsc 1703 | - timeConsumptionDesc 1704 | - scoreAsc 1705 | - scoreDesc 1706 | - memoryConsumptionAsc 1707 | - memoryConsumptionDesc 1708 | - codeLengthAsc 1709 | - codeLengthDesc 1710 | limitInQuery: 1711 | name: limit 1712 | in: query 1713 | description: 取得数の上限 1714 | required: false 1715 | schema: 1716 | type: integer 1717 | maximum: 100 1718 | minimum: 0 1719 | offsetInQuery: 1720 | name: offset 1721 | in: query 1722 | description: 取得の開始位置 1723 | required: false 1724 | schema: 1725 | type: integer 1726 | minimum: 0 1727 | judgeStatusInQuery: 1728 | name: status 1729 | in: query 1730 | description: ジャッジ結果 1731 | required: false 1732 | schema: 1733 | $ref: "#/components/schemas/JudgeStatus" 1734 | codeLanguageInQuery: 1735 | name: language 1736 | in: query 1737 | description: ソースコードの言語 1738 | required: false 1739 | schema: 1740 | type: string 1741 | userNameInQuery: 1742 | name: username 1743 | in: query 1744 | description: ユーザー名 1745 | schema: 1746 | type: string 1747 | userIdInQuery: 1748 | name: userId 1749 | in: query 1750 | description: ユーザーID 1751 | schema: 1752 | type: string 1753 | userIdInPath: 1754 | name: userId 1755 | in: path 1756 | description: ユーザーID 1757 | required: true 1758 | schema: 1759 | type: string 1760 | editorialIdInPath: 1761 | name: editorialId 1762 | in: path 1763 | description: 解説ID 1764 | required: true 1765 | schema: 1766 | type: string 1767 | JWTWithUserId: 1768 | name: token-with-userid 1769 | in: query 1770 | required: false 1771 | schema: 1772 | type: string 1773 | description: |- 1774 | パスワードリセットまたはメールアドレス変更の際に使われるJWT。 1775 | 次のフィールドを持つ: 1776 | - `exp` (int): トークンの有効期限(UNIXタイムスタンプ)。 1777 | - `iat` (int): トークンが発行された時刻(UNIXタイムスタンプ)。 1778 | - `nbf` (int): トークンが有効となる最早時刻(UNIXタイムスタンプ)。 1779 | - `userId` (string): ユーザーのID。 1780 | - `email` (string): ユーザーのメールアドレス。 1781 | - `action` (string): トークンのアクションタイプ。`reset_password`または`change_email`。 1782 | JWTWithoutUserId: 1783 | name: token-without-userid 1784 | in: query 1785 | required: false 1786 | schema: 1787 | type: string 1788 | description: |- 1789 | 初回のユーザー登録(メールアドレスの登録)の際に使われるJWT。 1790 | 次のフィールドを持つ: 1791 | - `exp` (int): トークンの有効期限(UNIXタイムスタンプ)。 1792 | - `iat` (int): トークンが発行された時刻(UNIXタイムスタンプ)。 1793 | - `nbf` (int): トークンが有効となる最早時刻(UNIXタイムスタンプ)。 1794 | - `email` (string): ユーザーのメールアドレス。 1795 | - `action` (string): トークンのアクションタイプ。`register_email`。 1796 | testcaseIdInPath: 1797 | name: testcaseId 1798 | in: path 1799 | required: true 1800 | schema: 1801 | type: string 1802 | description: テストケースID 1803 | problemIdInQuery: 1804 | name: problemIdInQuery 1805 | in: query 1806 | required: false 1807 | schema: 1808 | type: string 1809 | description: 問題のID 1810 | oauthActionInPath: 1811 | name: oauthAction 1812 | in: path 1813 | required: true 1814 | schema: 1815 | type: string 1816 | enum: 1817 | - login 1818 | - signup 1819 | - bind 1820 | description: "OAuthのアクション(login, signup, bind)" 1821 | -------------------------------------------------------------------------------- /api/backend/to_judge.Dockerfile: -------------------------------------------------------------------------------- 1 | FROM swaggerapi/swagger-ui:v5.3.1 2 | COPY api/backend/to_judge.yaml /openapi.yaml 3 | ENV SWAGGER_JSON=/openapi.yaml -------------------------------------------------------------------------------- /api/backend/to_judge.yaml: -------------------------------------------------------------------------------- 1 | openapi: "3.0.3" 2 | info: 3 | title: Backend to Judge API 4 | version: "0.1" 5 | license: 6 | name: MIT 7 | url: "https://github.com/traP-jp/traO-Judge-docs/blob/main/LICENSE" 8 | servers: 9 | - url: https://api.server.test/v1 10 | paths: 11 | "/submit-result": 12 | post: 13 | operationId: submitResult 14 | description: ジャッジ結果 15 | tags: 16 | - submit result 17 | requestBody: 18 | content: 19 | application/json: 20 | schema: 21 | $ref: "#/components/schemas/SubmitResult" 22 | required: true 23 | summary: 通常のテストケースのジャッジ 24 | responses: 25 | "200": 26 | description: OK 27 | '400': 28 | description: Bad Request 29 | security: 30 | - bearerAuth: [] 31 | 32 | components: 33 | securitySchemes: 34 | bearerAuth: 35 | type: http 36 | scheme: bearer 37 | bearerFormat: JWT 38 | schemas: 39 | JudgeStatus: 40 | title: JudgeStatus 41 | type: string 42 | description: ジャッジの結果 43 | enum: 44 | - AC 45 | - WA 46 | - TLE 47 | - MLE 48 | - OLE 49 | - RE 50 | - CE 51 | - IE 52 | TestResult: 53 | title: TestResult 54 | type: object 55 | description: テストケースの結果 56 | properties: 57 | status: 58 | title: status 59 | $ref: "#/components/schemas/JudgeStatus" 60 | text: 61 | title: text 62 | type: string 63 | description: 追加情報 64 | example: "Alice win" 65 | score: 66 | title: score 67 | type: number 68 | description: スコア 69 | example: 100 70 | execTime: 71 | title: execTime 72 | type: number 73 | description: 実行時間 74 | example: 1.23 75 | memorySize: 76 | title: memorySize 77 | type: number 78 | description: メモリ使用量(byte) 79 | example: 1234567 80 | required: 81 | - status 82 | - score 83 | - execTime 84 | - memorySize 85 | SubmitResult: 86 | type: object 87 | title: JudgeResult 88 | description: テストケースのジャッジ結果 89 | properties: 90 | judgeId: 91 | title: judgeId 92 | type: string 93 | description: ジャッジID 94 | format: uuid 95 | example: 01234567-89ab-cdef-0123-456789abcdef 96 | testResults: 97 | title: testResults 98 | type: array 99 | description: テストケースのリスト 100 | items: 101 | $ref: "#/components/schemas/TestResult" 102 | totalResult: 103 | title: totalResult 104 | $ref: "#/components/schemas/TestResult" 105 | required: 106 | - judgeId 107 | - testResults 108 | - totalResult 109 | -------------------------------------------------------------------------------- /api/judge/exec/to_control.yaml: -------------------------------------------------------------------------------- 1 | openapi: "3.0.3" 2 | info: 3 | title: exec to control API 4 | version: "0.1" 5 | license: 6 | name: MIT 7 | url: "https://github.com/traP-jp/traO-Judge-docs/blob/main/LICENSE" 8 | servers: 9 | - url: https://api.server.test/v1 10 | paths: 11 | "/execute": 12 | post: 13 | operationId: execute 14 | description: control container から file placed message を受け取り,ジャッジの実行を開始する. 15 | tags: 16 | - judge 17 | requestBody: 18 | content: 19 | application/json: 20 | schema: 21 | $ref: "#/components/schemas/FilePlacedMessage" 22 | required: true 23 | summary: ジャッジの実行を開始 24 | responses: 25 | "200": 26 | description: OK 27 | content: 28 | application/json: 29 | schema: 30 | $ref: "#/components/schemas/JudgeResultMessage" 31 | "400": 32 | description: Bad Request 33 | components: 34 | schemas: 35 | File: 36 | title: File 37 | type: object 38 | description: ファイル 39 | properties: 40 | fileId: 41 | title: fileId 42 | type: string 43 | description: ファイルの UUID 44 | format: uuid 45 | example: 01234567-89ab-cdef-0123-456789abcdef 46 | filePath: 47 | title: filePath 48 | type: string 49 | description: ファイルのパス 50 | example: "/path/to/file" 51 | required: 52 | - fileId 53 | - filePath 54 | FilePlacedMessage: 55 | title: FilePlacedMessage 56 | type: object 57 | description: ジャッジの実行を開始するトリガーとなるメッセージ 58 | properties: 59 | cmd: 60 | title: cmd 61 | type: string 62 | description: コマンド 63 | example: cmd 64 | envs: 65 | title: envs 66 | type: object 67 | description: 環境たち 68 | additionalProperties: 69 | title: env 70 | type: string 71 | description: 環境 72 | example: env 73 | optionalInfo: 74 | title: optionalInfo 75 | type: object 76 | description: 任意の情報 77 | properties: 78 | execTime: 79 | title: execTime 80 | type: number 81 | description: 実行時間 82 | example: 1.23 83 | memorySize: 84 | title: memorySize 85 | type: number 86 | description: メモリ使用量(byte) 87 | example: 123456789 88 | language: 89 | title: language 90 | type: string 91 | description: 使用言語 92 | example: python 93 | required: 94 | - cmd 95 | - envs 96 | JudgeResultMessage: 97 | title: JudgeResultMessage 98 | type: object 99 | description: ジャッジの実行を終了したコンテナから受け取るメッセージ 100 | properties: 101 | exitCode: 102 | title: exitCode 103 | type: integer 104 | description: 終了コード 105 | example: 0 106 | stdout: 107 | $ref: "#/components/schemas/File" 108 | stderr: 109 | $ref: "#/components/schemas/File" 110 | required: 111 | - exitCode 112 | - stdout 113 | - stderr 114 | -------------------------------------------------------------------------------- /api/judge/to_backend.Dockerfile: -------------------------------------------------------------------------------- 1 | FROM swaggerapi/swagger-ui:v5.3.1 2 | COPY api/judge/to_backend.yaml /openapi.yaml 3 | ENV SWAGGER_JSON=/openapi.yaml -------------------------------------------------------------------------------- /api/judge/to_backend.yaml: -------------------------------------------------------------------------------- 1 | openapi: "3.0.3" 2 | info: 3 | title: Judge to Backend API 4 | version: "0.1" 5 | license: 6 | name: MIT 7 | url: "https://github.com/traP-jp/traO-Judge-docs/blob/main/LICENSE" 8 | servers: 9 | - url: https://api.server.test/v1 10 | paths: 11 | "/judge": 12 | post: 13 | operationId: judge 14 | description: 全てのジャッジ 15 | tags: 16 | - judge 17 | requestBody: 18 | content: 19 | application/json: 20 | schema: 21 | $ref: "#/components/schemas/Judge" 22 | required: true 23 | summary: 全てのジャッジ 24 | responses: 25 | "200": 26 | description: OK 27 | "400": 28 | description: Bad Request 29 | security: 30 | - bearerAuth: [] 31 | components: 32 | securitySchemes: 33 | bearerAuth: 34 | type: http 35 | scheme: bearer 36 | bearerFormat: JWT 37 | schemas: 38 | Execution: 39 | title: Execution 40 | type: object 41 | description: テストケース実行時の実行時間など 42 | properties: 43 | optionalInfo: 44 | title: optionalInfo 45 | type: object 46 | description: 任意の情報 47 | properties: 48 | execTime: 49 | title: execTime 50 | type: number 51 | description: 実行時間 52 | example: 1.23 53 | memorySize: 54 | title: memorySize 55 | type: number 56 | description: メモリ使用量(byte) 57 | example: 123456789 58 | language: 59 | title: language 60 | type: string 61 | description: 使用言語 62 | example: python 63 | shellScriptId: 64 | title: shellScriptId 65 | type: string 66 | format: uuid 67 | description: シェルスクリプトのID 68 | example: 68ffddc4-adc6-4f93-9ff2-d862ee6cce7a 69 | directoryCount: 70 | title: directoryCount 71 | type: number 72 | description: ディレクトリの数 73 | example: 3 74 | textResourceCount: 75 | title: textResourceCount 76 | type: number 77 | description: テキストリソースの数 78 | example: 3 79 | oneTimeTextCount: 80 | title: oneTimeTextCount 81 | type: number 82 | description: テキストの数 83 | example: 3 84 | required: 85 | - shellScriptId 86 | - directoryCount 87 | - textResourceCount 88 | - oneTimeTextCount 89 | ExecutionConfigMap: 90 | title: ExecutionConfigMap 91 | type: object 92 | description: ジャッジの設定 93 | properties: 94 | textResourceIds: 95 | title: textResourceIds 96 | type: array 97 | description: 静的なテキストリソースのID 98 | items: 99 | type: string 100 | format: uuid 101 | example: 68ffddc4-adc6-4f93-9ff2-d862ee6cce7a 102 | oneTimeTextContents: 103 | title: oneTimeTextContents 104 | type: array 105 | description: 動的に変化するテキストデータ 106 | items: 107 | type: string 108 | example: | 109 | user-1: 100 110 | user-2: 200 111 | Judge: 112 | title: JudgeConfig 113 | type: object 114 | description: ジャッジの設定 115 | properties: 116 | judgeId: 117 | title: JudgeId 118 | type: string 119 | format: uuid 120 | description: ジャッジのID 121 | example: 68ffddc4-adc6-4f93-9ff2-d862ee6cce7a 122 | testCount: 123 | title: testCount 124 | type: number 125 | description: テストケースの数 126 | example: 3 127 | beforeTestExecs: 128 | $ref: "#/components/schemas/Execution" 129 | onTestExecs: 130 | $ref: "#/components/schemas/Execution" 131 | afterTestExecs: 132 | $ref: "#/components/schemas/Execution" 133 | beforeTestConfigMap: 134 | $ref: "#/components/schemas/ExecutionConfigMap" 135 | onTestConfigMaps: 136 | title: onTestConfigMaps 137 | type: array 138 | description: テストケース実行時に実行されるコマンドの設定 139 | items: 140 | $ref: "#/components/schemas/ExecutionConfigMap" 141 | afterTestConfigMap: 142 | $ref: "#/components/schemas/ExecutionConfigMap" 143 | required: 144 | - judgeId 145 | - testCount 146 | - beforeTestExecs 147 | - onTestExecs 148 | - afterTestExecs 149 | - beforeTestConfigMap 150 | - onTestConfigMaps 151 | - afterTestConfigMap 152 | -------------------------------------------------------------------------------- /onboarding/git.md: -------------------------------------------------------------------------------- 1 | # オンボーディング資料 2 | 3 | ## はじめに 4 | 5 | このドキュメントは、traOJudgeプロジェクトにおけるGit/GitHubの使い方をまとめたものです。traOJudgeプロジェクトではGit Workflowを用いてissueドリブンな開発をします。 6 | 7 | ## Git Workflow 8 | 9 | Git Workflowでは以下のブランチを使用します。 10 | 11 | - **main**: 本番環境にデプロイされる安定版コード。 12 | - **develop**: 次のリリースに向けた開発中のコード。 13 | - **release/\***: リリース前の最終調整を行うブランチ。 14 | - **feature/\***: 新機能や改善点を開発するためのブランチ。 15 | - **hotfix/\***: 本番環境の緊急バグ修正を行うブランチ。 16 | 17 | ![image alt](https://anarsolutions.com/wp-content/uploads/2019/11/Gitflow.png "title") 18 | *Git-Workflow のブランチツリーの概略図* [出典](https://anarsolutions.com/gitflow-branching-model/) 19 | 20 | 21 | ## 開発手順 22 | 23 | ### 1. Issue の作成 24 | 25 | - 新しいタスクやバグ報告、機能追加の要望は、すべてGitHubのIssueとして作成します。 26 | - Issueには詳細な説明を記載してください。 27 | - 適切なラベルを付与し、担当者をアサインします。 28 | 29 | ### 2. ブランチの作成 30 | 31 | - 対応するIssueが作成されたら、以下の命名規則でブランチを作成します。 32 | - **機能追加・改善**: `feature/#issue番号-簡潔な説明` 33 | - 例: `feature/#45-add-login-function` 34 | - **バグ修正**: `hotfix/#issue番号-簡潔な説明` 35 | - 例: `hotfix/#32-fix-login-error` 36 | 37 | ### 3. 開発作業 38 | 39 | - 作成したブランチ上で開発を行います。 40 | - コミットは小さく、論理的な単位で行ってください。 41 | - コミットメッセージは以下の形式で記述します。 42 | - 例: `Add user authentication feature` 43 | 44 | ### 4. プルリクエストの作成 45 | 46 | - 開発が完了したら、`develop`ブランチに向けてプルリクエスト(PR)を作成します。 47 | - PRのタイトルにはIssue番号と概要を含めます。 48 | - 例: `Issue #45: Add user authentication feature` 49 | - PRの説明欄に変更内容や注意点を記載し、レビュアーを指定します。 50 | 51 | ### 5. コードレビュー 52 | 53 | - 指定されたレビュアーがコードレビューを行います。 54 | - レビューで指摘された点は修正し、再度レビューを依頼します。 55 | 56 | ### 6. マージとブランチの削除 57 | 58 | - レビューが承認されたら、`develop`ブランチにマージします。 59 | - マージ後、対応するIssueをクローズし、開発ブランチを削除します。 60 | 61 | ## 参考リンク 62 | 63 | - [Git Workflow の詳細解説](https://nvie.com/posts/a-successful-git-branching-model/) 64 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | publishing-docs/writer-docs: 10 | devDependencies: 11 | vitepress: 12 | specifier: 1.6.3 13 | version: 1.6.3(@algolia/client-search@5.24.0)(postcss@8.5.3)(search-insights@2.17.3) 14 | 15 | packages: 16 | 17 | '@algolia/autocomplete-core@1.17.7': 18 | resolution: {integrity: sha512-BjiPOW6ks90UKl7TwMv7oNQMnzU+t/wk9mgIDi6b1tXpUek7MW0lbNOUHpvam9pe3lVCf4xPFT+lK7s+e+fs7Q==} 19 | 20 | '@algolia/autocomplete-plugin-algolia-insights@1.17.7': 21 | resolution: {integrity: sha512-Jca5Ude6yUOuyzjnz57og7Et3aXjbwCSDf/8onLHSQgw1qW3ALl9mrMWaXb5FmPVkV3EtkD2F/+NkT6VHyPu9A==} 22 | peerDependencies: 23 | search-insights: '>= 1 < 3' 24 | 25 | '@algolia/autocomplete-preset-algolia@1.17.7': 26 | resolution: {integrity: sha512-ggOQ950+nwbWROq2MOCIL71RE0DdQZsceqrg32UqnhDz8FlO9rL8ONHNsI2R1MH0tkgVIDKI/D0sMiUchsFdWA==} 27 | peerDependencies: 28 | '@algolia/client-search': '>= 4.9.1 < 6' 29 | algoliasearch: '>= 4.9.1 < 6' 30 | 31 | '@algolia/autocomplete-shared@1.17.7': 32 | resolution: {integrity: sha512-o/1Vurr42U/qskRSuhBH+VKxMvkkUVTLU6WZQr+L5lGZZLYWyhdzWjW0iGXY7EkwRTjBqvN2EsR81yCTGV/kmg==} 33 | peerDependencies: 34 | '@algolia/client-search': '>= 4.9.1 < 6' 35 | algoliasearch: '>= 4.9.1 < 6' 36 | 37 | '@algolia/client-abtesting@5.24.0': 38 | resolution: {integrity: sha512-pNTIB5YqVVwu6UogvdX8TqsRZENaflqMMjdY7/XIPMNGrBoNH9tewINLI7+qc9tIaOLcAp3ZldqoEwAihZZ3ig==} 39 | engines: {node: '>= 14.0.0'} 40 | 41 | '@algolia/client-analytics@5.24.0': 42 | resolution: {integrity: sha512-IF+r9RRQsIf0ylIBNFxo7c6hDxxuhIfIbffhBXEF1HD13rjhP5AVfiaea9RzbsAZoySkm318plDpH/nlGIjbRA==} 43 | engines: {node: '>= 14.0.0'} 44 | 45 | '@algolia/client-common@5.24.0': 46 | resolution: {integrity: sha512-p8K6tiXQTebRBxbrzWIfGCvfkT+Umml+2lzI92acZjHsvl6KYH6igOfVstKqXJRei9pvRzEEvVDNDLXDVleGTA==} 47 | engines: {node: '>= 14.0.0'} 48 | 49 | '@algolia/client-insights@5.24.0': 50 | resolution: {integrity: sha512-jOHF0+tixR3IZJMhZPquFNdCVPzwzzXoiqVsbTvfKojeaY6ZXybgUiTSB8JNX+YpsUT8Ebhu3UvRy4mw2PbEzw==} 51 | engines: {node: '>= 14.0.0'} 52 | 53 | '@algolia/client-personalization@5.24.0': 54 | resolution: {integrity: sha512-Fx/Fp6d8UmDBHecTt0XYF8C9TAaA3qeCQortfGSZzWp4gVmtrUCFNZ1SUwb8ULREnO9DanVrM5hGE8R8C4zZTQ==} 55 | engines: {node: '>= 14.0.0'} 56 | 57 | '@algolia/client-query-suggestions@5.24.0': 58 | resolution: {integrity: sha512-F8ypOedSMhz6W7zuT5O1SXXsdXSOVhY2U6GkRbYk/mzrhs3jWFR3uQIfeQVWmsJjUwIGZmPoAr9E+T/Zm2M4wA==} 59 | engines: {node: '>= 14.0.0'} 60 | 61 | '@algolia/client-search@5.24.0': 62 | resolution: {integrity: sha512-k+nuciQuq7WERNNE+hsx3DX636zIy+9R4xdtvW3PANT2a2BDGOv3fv2mta8+QUMcVTVcGe/Mo3QCb4pc1HNoxA==} 63 | engines: {node: '>= 14.0.0'} 64 | 65 | '@algolia/ingestion@1.24.0': 66 | resolution: {integrity: sha512-/lqVxmrvwoA+OyVK4XLMdz/PJaCTW4qYchX1AZ+98fdnH3K6XM/kMydQLfP0bUNGBQbmVrF88MqhqZRnZEn/MA==} 67 | engines: {node: '>= 14.0.0'} 68 | 69 | '@algolia/monitoring@1.24.0': 70 | resolution: {integrity: sha512-cRisDXQJhvfZCXL4hD22qca2CmW52TniOx6L7pvkaBDx0oQk1k9o+3w11fgfcCG+47OndMeNx5CMpu+K+COMzg==} 71 | engines: {node: '>= 14.0.0'} 72 | 73 | '@algolia/recommend@5.24.0': 74 | resolution: {integrity: sha512-JTMz0JqN2gidvKa2QCF/rMe8LNtdHaght03px2cluZaZfBRYy8TgHgkCeBspKKvV/abWJwl7J0FzWThCshqT3w==} 75 | engines: {node: '>= 14.0.0'} 76 | 77 | '@algolia/requester-browser-xhr@5.24.0': 78 | resolution: {integrity: sha512-B2Gc+iSxct1WSza5CF6AgfNgmLvVb61d5bqmIWUZixtJIhyAC6lSQZuF+nvt+lmKhQwuY2gYjGGClil8onQvKQ==} 79 | engines: {node: '>= 14.0.0'} 80 | 81 | '@algolia/requester-fetch@5.24.0': 82 | resolution: {integrity: sha512-6E5+hliqGc5w8ZbyTAQ+C3IGLZ/GiX623Jl2bgHA974RPyFWzVSj4rKqkboUAxQmrFY7Z02ybJWVZS5OhPQocA==} 83 | engines: {node: '>= 14.0.0'} 84 | 85 | '@algolia/requester-node-http@5.24.0': 86 | resolution: {integrity: sha512-zM+nnqZpiQj20PyAh6uvgdSz+hD7Rj7UfAZwizqNP+bLvcbGXZwABERobuilkCQqyDBBH4uv0yqIcPRl8dSBEg==} 87 | engines: {node: '>= 14.0.0'} 88 | 89 | '@babel/helper-string-parser@7.27.1': 90 | resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} 91 | engines: {node: '>=6.9.0'} 92 | 93 | '@babel/helper-validator-identifier@7.27.1': 94 | resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} 95 | engines: {node: '>=6.9.0'} 96 | 97 | '@babel/parser@7.27.2': 98 | resolution: {integrity: sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw==} 99 | engines: {node: '>=6.0.0'} 100 | hasBin: true 101 | 102 | '@babel/types@7.27.1': 103 | resolution: {integrity: sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==} 104 | engines: {node: '>=6.9.0'} 105 | 106 | '@docsearch/css@3.8.2': 107 | resolution: {integrity: sha512-y05ayQFyUmCXze79+56v/4HpycYF3uFqB78pLPrSV5ZKAlDuIAAJNhaRi8tTdRNXh05yxX/TyNnzD6LwSM89vQ==} 108 | 109 | '@docsearch/js@3.8.2': 110 | resolution: {integrity: sha512-Q5wY66qHn0SwA7Taa0aDbHiJvaFJLOJyHmooQ7y8hlwwQLQ/5WwCcoX0g7ii04Qi2DJlHsd0XXzJ8Ypw9+9YmQ==} 111 | 112 | '@docsearch/react@3.8.2': 113 | resolution: {integrity: sha512-xCRrJQlTt8N9GU0DG4ptwHRkfnSnD/YpdeaXe02iKfqs97TkZJv60yE+1eq/tjPcVnTW8dP5qLP7itifFVV5eg==} 114 | peerDependencies: 115 | '@types/react': '>= 16.8.0 < 19.0.0' 116 | react: '>= 16.8.0 < 19.0.0' 117 | react-dom: '>= 16.8.0 < 19.0.0' 118 | search-insights: '>= 1 < 3' 119 | peerDependenciesMeta: 120 | '@types/react': 121 | optional: true 122 | react: 123 | optional: true 124 | react-dom: 125 | optional: true 126 | search-insights: 127 | optional: true 128 | 129 | '@esbuild/aix-ppc64@0.21.5': 130 | resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} 131 | engines: {node: '>=12'} 132 | cpu: [ppc64] 133 | os: [aix] 134 | 135 | '@esbuild/android-arm64@0.21.5': 136 | resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} 137 | engines: {node: '>=12'} 138 | cpu: [arm64] 139 | os: [android] 140 | 141 | '@esbuild/android-arm@0.21.5': 142 | resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} 143 | engines: {node: '>=12'} 144 | cpu: [arm] 145 | os: [android] 146 | 147 | '@esbuild/android-x64@0.21.5': 148 | resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} 149 | engines: {node: '>=12'} 150 | cpu: [x64] 151 | os: [android] 152 | 153 | '@esbuild/darwin-arm64@0.21.5': 154 | resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} 155 | engines: {node: '>=12'} 156 | cpu: [arm64] 157 | os: [darwin] 158 | 159 | '@esbuild/darwin-x64@0.21.5': 160 | resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} 161 | engines: {node: '>=12'} 162 | cpu: [x64] 163 | os: [darwin] 164 | 165 | '@esbuild/freebsd-arm64@0.21.5': 166 | resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} 167 | engines: {node: '>=12'} 168 | cpu: [arm64] 169 | os: [freebsd] 170 | 171 | '@esbuild/freebsd-x64@0.21.5': 172 | resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} 173 | engines: {node: '>=12'} 174 | cpu: [x64] 175 | os: [freebsd] 176 | 177 | '@esbuild/linux-arm64@0.21.5': 178 | resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} 179 | engines: {node: '>=12'} 180 | cpu: [arm64] 181 | os: [linux] 182 | 183 | '@esbuild/linux-arm@0.21.5': 184 | resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} 185 | engines: {node: '>=12'} 186 | cpu: [arm] 187 | os: [linux] 188 | 189 | '@esbuild/linux-ia32@0.21.5': 190 | resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} 191 | engines: {node: '>=12'} 192 | cpu: [ia32] 193 | os: [linux] 194 | 195 | '@esbuild/linux-loong64@0.21.5': 196 | resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} 197 | engines: {node: '>=12'} 198 | cpu: [loong64] 199 | os: [linux] 200 | 201 | '@esbuild/linux-mips64el@0.21.5': 202 | resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} 203 | engines: {node: '>=12'} 204 | cpu: [mips64el] 205 | os: [linux] 206 | 207 | '@esbuild/linux-ppc64@0.21.5': 208 | resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} 209 | engines: {node: '>=12'} 210 | cpu: [ppc64] 211 | os: [linux] 212 | 213 | '@esbuild/linux-riscv64@0.21.5': 214 | resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} 215 | engines: {node: '>=12'} 216 | cpu: [riscv64] 217 | os: [linux] 218 | 219 | '@esbuild/linux-s390x@0.21.5': 220 | resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} 221 | engines: {node: '>=12'} 222 | cpu: [s390x] 223 | os: [linux] 224 | 225 | '@esbuild/linux-x64@0.21.5': 226 | resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} 227 | engines: {node: '>=12'} 228 | cpu: [x64] 229 | os: [linux] 230 | 231 | '@esbuild/netbsd-x64@0.21.5': 232 | resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} 233 | engines: {node: '>=12'} 234 | cpu: [x64] 235 | os: [netbsd] 236 | 237 | '@esbuild/openbsd-x64@0.21.5': 238 | resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} 239 | engines: {node: '>=12'} 240 | cpu: [x64] 241 | os: [openbsd] 242 | 243 | '@esbuild/sunos-x64@0.21.5': 244 | resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} 245 | engines: {node: '>=12'} 246 | cpu: [x64] 247 | os: [sunos] 248 | 249 | '@esbuild/win32-arm64@0.21.5': 250 | resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} 251 | engines: {node: '>=12'} 252 | cpu: [arm64] 253 | os: [win32] 254 | 255 | '@esbuild/win32-ia32@0.21.5': 256 | resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} 257 | engines: {node: '>=12'} 258 | cpu: [ia32] 259 | os: [win32] 260 | 261 | '@esbuild/win32-x64@0.21.5': 262 | resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} 263 | engines: {node: '>=12'} 264 | cpu: [x64] 265 | os: [win32] 266 | 267 | '@iconify-json/simple-icons@1.2.33': 268 | resolution: {integrity: sha512-nL5/UmI9x5PQ/AHv6bOaL2pH6twEdEz4pI89efB/K7HFn5etQnxMtGx9DFlOg/sRA2/yFpX8KXvc95CSDv5bJA==} 269 | 270 | '@iconify/types@2.0.0': 271 | resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} 272 | 273 | '@jridgewell/sourcemap-codec@1.5.0': 274 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} 275 | 276 | '@rollup/rollup-android-arm-eabi@4.40.2': 277 | resolution: {integrity: sha512-JkdNEq+DFxZfUwxvB58tHMHBHVgX23ew41g1OQinthJ+ryhdRk67O31S7sYw8u2lTjHUPFxwar07BBt1KHp/hg==} 278 | cpu: [arm] 279 | os: [android] 280 | 281 | '@rollup/rollup-android-arm64@4.40.2': 282 | resolution: {integrity: sha512-13unNoZ8NzUmnndhPTkWPWbX3vtHodYmy+I9kuLxN+F+l+x3LdVF7UCu8TWVMt1POHLh6oDHhnOA04n8oJZhBw==} 283 | cpu: [arm64] 284 | os: [android] 285 | 286 | '@rollup/rollup-darwin-arm64@4.40.2': 287 | resolution: {integrity: sha512-Gzf1Hn2Aoe8VZzevHostPX23U7N5+4D36WJNHK88NZHCJr7aVMG4fadqkIf72eqVPGjGc0HJHNuUaUcxiR+N/w==} 288 | cpu: [arm64] 289 | os: [darwin] 290 | 291 | '@rollup/rollup-darwin-x64@4.40.2': 292 | resolution: {integrity: sha512-47N4hxa01a4x6XnJoskMKTS8XZ0CZMd8YTbINbi+w03A2w4j1RTlnGHOz/P0+Bg1LaVL6ufZyNprSg+fW5nYQQ==} 293 | cpu: [x64] 294 | os: [darwin] 295 | 296 | '@rollup/rollup-freebsd-arm64@4.40.2': 297 | resolution: {integrity: sha512-8t6aL4MD+rXSHHZUR1z19+9OFJ2rl1wGKvckN47XFRVO+QL/dUSpKA2SLRo4vMg7ELA8pzGpC+W9OEd1Z/ZqoQ==} 298 | cpu: [arm64] 299 | os: [freebsd] 300 | 301 | '@rollup/rollup-freebsd-x64@4.40.2': 302 | resolution: {integrity: sha512-C+AyHBzfpsOEYRFjztcYUFsH4S7UsE9cDtHCtma5BK8+ydOZYgMmWg1d/4KBytQspJCld8ZIujFMAdKG1xyr4Q==} 303 | cpu: [x64] 304 | os: [freebsd] 305 | 306 | '@rollup/rollup-linux-arm-gnueabihf@4.40.2': 307 | resolution: {integrity: sha512-de6TFZYIvJwRNjmW3+gaXiZ2DaWL5D5yGmSYzkdzjBDS3W+B9JQ48oZEsmMvemqjtAFzE16DIBLqd6IQQRuG9Q==} 308 | cpu: [arm] 309 | os: [linux] 310 | 311 | '@rollup/rollup-linux-arm-musleabihf@4.40.2': 312 | resolution: {integrity: sha512-urjaEZubdIkacKc930hUDOfQPysezKla/O9qV+O89enqsqUmQm8Xj8O/vh0gHg4LYfv7Y7UsE3QjzLQzDYN1qg==} 313 | cpu: [arm] 314 | os: [linux] 315 | 316 | '@rollup/rollup-linux-arm64-gnu@4.40.2': 317 | resolution: {integrity: sha512-KlE8IC0HFOC33taNt1zR8qNlBYHj31qGT1UqWqtvR/+NuCVhfufAq9fxO8BMFC22Wu0rxOwGVWxtCMvZVLmhQg==} 318 | cpu: [arm64] 319 | os: [linux] 320 | 321 | '@rollup/rollup-linux-arm64-musl@4.40.2': 322 | resolution: {integrity: sha512-j8CgxvfM0kbnhu4XgjnCWJQyyBOeBI1Zq91Z850aUddUmPeQvuAy6OiMdPS46gNFgy8gN1xkYyLgwLYZG3rBOg==} 323 | cpu: [arm64] 324 | os: [linux] 325 | 326 | '@rollup/rollup-linux-loongarch64-gnu@4.40.2': 327 | resolution: {integrity: sha512-Ybc/1qUampKuRF4tQXc7G7QY9YRyeVSykfK36Y5Qc5dmrIxwFhrOzqaVTNoZygqZ1ZieSWTibfFhQ5qK8jpWxw==} 328 | cpu: [loong64] 329 | os: [linux] 330 | 331 | '@rollup/rollup-linux-powerpc64le-gnu@4.40.2': 332 | resolution: {integrity: sha512-3FCIrnrt03CCsZqSYAOW/k9n625pjpuMzVfeI+ZBUSDT3MVIFDSPfSUgIl9FqUftxcUXInvFah79hE1c9abD+Q==} 333 | cpu: [ppc64] 334 | os: [linux] 335 | 336 | '@rollup/rollup-linux-riscv64-gnu@4.40.2': 337 | resolution: {integrity: sha512-QNU7BFHEvHMp2ESSY3SozIkBPaPBDTsfVNGx3Xhv+TdvWXFGOSH2NJvhD1zKAT6AyuuErJgbdvaJhYVhVqrWTg==} 338 | cpu: [riscv64] 339 | os: [linux] 340 | 341 | '@rollup/rollup-linux-riscv64-musl@4.40.2': 342 | resolution: {integrity: sha512-5W6vNYkhgfh7URiXTO1E9a0cy4fSgfE4+Hl5agb/U1sa0kjOLMLC1wObxwKxecE17j0URxuTrYZZME4/VH57Hg==} 343 | cpu: [riscv64] 344 | os: [linux] 345 | 346 | '@rollup/rollup-linux-s390x-gnu@4.40.2': 347 | resolution: {integrity: sha512-B7LKIz+0+p348JoAL4X/YxGx9zOx3sR+o6Hj15Y3aaApNfAshK8+mWZEf759DXfRLeL2vg5LYJBB7DdcleYCoQ==} 348 | cpu: [s390x] 349 | os: [linux] 350 | 351 | '@rollup/rollup-linux-x64-gnu@4.40.2': 352 | resolution: {integrity: sha512-lG7Xa+BmBNwpjmVUbmyKxdQJ3Q6whHjMjzQplOs5Z+Gj7mxPtWakGHqzMqNER68G67kmCX9qX57aRsW5V0VOng==} 353 | cpu: [x64] 354 | os: [linux] 355 | 356 | '@rollup/rollup-linux-x64-musl@4.40.2': 357 | resolution: {integrity: sha512-tD46wKHd+KJvsmije4bUskNuvWKFcTOIM9tZ/RrmIvcXnbi0YK/cKS9FzFtAm7Oxi2EhV5N2OpfFB348vSQRXA==} 358 | cpu: [x64] 359 | os: [linux] 360 | 361 | '@rollup/rollup-win32-arm64-msvc@4.40.2': 362 | resolution: {integrity: sha512-Bjv/HG8RRWLNkXwQQemdsWw4Mg+IJ29LK+bJPW2SCzPKOUaMmPEppQlu/Fqk1d7+DX3V7JbFdbkh/NMmurT6Pg==} 363 | cpu: [arm64] 364 | os: [win32] 365 | 366 | '@rollup/rollup-win32-ia32-msvc@4.40.2': 367 | resolution: {integrity: sha512-dt1llVSGEsGKvzeIO76HToiYPNPYPkmjhMHhP00T9S4rDern8P2ZWvWAQUEJ+R1UdMWJ/42i/QqJ2WV765GZcA==} 368 | cpu: [ia32] 369 | os: [win32] 370 | 371 | '@rollup/rollup-win32-x64-msvc@4.40.2': 372 | resolution: {integrity: sha512-bwspbWB04XJpeElvsp+DCylKfF4trJDa2Y9Go8O6A7YLX2LIKGcNK/CYImJN6ZP4DcuOHB4Utl3iCbnR62DudA==} 373 | cpu: [x64] 374 | os: [win32] 375 | 376 | '@shikijs/core@2.5.0': 377 | resolution: {integrity: sha512-uu/8RExTKtavlpH7XqnVYBrfBkUc20ngXiX9NSrBhOVZYv/7XQRKUyhtkeflY5QsxC0GbJThCerruZfsUaSldg==} 378 | 379 | '@shikijs/engine-javascript@2.5.0': 380 | resolution: {integrity: sha512-VjnOpnQf8WuCEZtNUdjjwGUbtAVKuZkVQ/5cHy/tojVVRIRtlWMYVjyWhxOmIq05AlSOv72z7hRNRGVBgQOl0w==} 381 | 382 | '@shikijs/engine-oniguruma@2.5.0': 383 | resolution: {integrity: sha512-pGd1wRATzbo/uatrCIILlAdFVKdxImWJGQ5rFiB5VZi2ve5xj3Ax9jny8QvkaV93btQEwR/rSz5ERFpC5mKNIw==} 384 | 385 | '@shikijs/langs@2.5.0': 386 | resolution: {integrity: sha512-Qfrrt5OsNH5R+5tJ/3uYBBZv3SuGmnRPejV9IlIbFH3HTGLDlkqgHymAlzklVmKBjAaVmkPkyikAV/sQ1wSL+w==} 387 | 388 | '@shikijs/themes@2.5.0': 389 | resolution: {integrity: sha512-wGrk+R8tJnO0VMzmUExHR+QdSaPUl/NKs+a4cQQRWyoc3YFbUzuLEi/KWK1hj+8BfHRKm2jNhhJck1dfstJpiw==} 390 | 391 | '@shikijs/transformers@2.5.0': 392 | resolution: {integrity: sha512-SI494W5X60CaUwgi8u4q4m4s3YAFSxln3tzNjOSYqq54wlVgz0/NbbXEb3mdLbqMBztcmS7bVTaEd2w0qMmfeg==} 393 | 394 | '@shikijs/types@2.5.0': 395 | resolution: {integrity: sha512-ygl5yhxki9ZLNuNpPitBWvcy9fsSKKaRuO4BAlMyagszQidxcpLAr0qiW/q43DtSIDxO6hEbtYLiFZNXO/hdGw==} 396 | 397 | '@shikijs/vscode-textmate@10.0.2': 398 | resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} 399 | 400 | '@types/estree@1.0.7': 401 | resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} 402 | 403 | '@types/hast@3.0.4': 404 | resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} 405 | 406 | '@types/linkify-it@5.0.0': 407 | resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==} 408 | 409 | '@types/markdown-it@14.1.2': 410 | resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==} 411 | 412 | '@types/mdast@4.0.4': 413 | resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} 414 | 415 | '@types/mdurl@2.0.0': 416 | resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==} 417 | 418 | '@types/unist@3.0.3': 419 | resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} 420 | 421 | '@types/web-bluetooth@0.0.21': 422 | resolution: {integrity: sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==} 423 | 424 | '@ungap/structured-clone@1.3.0': 425 | resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} 426 | 427 | '@vitejs/plugin-vue@5.2.4': 428 | resolution: {integrity: sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==} 429 | engines: {node: ^18.0.0 || >=20.0.0} 430 | peerDependencies: 431 | vite: ^5.0.0 || ^6.0.0 432 | vue: ^3.2.25 433 | 434 | '@vue/compiler-core@3.5.13': 435 | resolution: {integrity: sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==} 436 | 437 | '@vue/compiler-dom@3.5.13': 438 | resolution: {integrity: sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==} 439 | 440 | '@vue/compiler-sfc@3.5.13': 441 | resolution: {integrity: sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==} 442 | 443 | '@vue/compiler-ssr@3.5.13': 444 | resolution: {integrity: sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==} 445 | 446 | '@vue/devtools-api@7.7.6': 447 | resolution: {integrity: sha512-b2Xx0KvXZObePpXPYHvBRRJLDQn5nhKjXh7vUhMEtWxz1AYNFOVIsh5+HLP8xDGL7sy+Q7hXeUxPHB/KgbtsPw==} 448 | 449 | '@vue/devtools-kit@7.7.6': 450 | resolution: {integrity: sha512-geu7ds7tem2Y7Wz+WgbnbZ6T5eadOvozHZ23Atk/8tksHMFOFylKi1xgGlQlVn0wlkEf4hu+vd5ctj1G4kFtwA==} 451 | 452 | '@vue/devtools-shared@7.7.6': 453 | resolution: {integrity: sha512-yFEgJZ/WblEsojQQceuyK6FzpFDx4kqrz2ohInxNj5/DnhoX023upTv4OD6lNPLAA5LLkbwPVb10o/7b+Y4FVA==} 454 | 455 | '@vue/reactivity@3.5.13': 456 | resolution: {integrity: sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==} 457 | 458 | '@vue/runtime-core@3.5.13': 459 | resolution: {integrity: sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==} 460 | 461 | '@vue/runtime-dom@3.5.13': 462 | resolution: {integrity: sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==} 463 | 464 | '@vue/server-renderer@3.5.13': 465 | resolution: {integrity: sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==} 466 | peerDependencies: 467 | vue: 3.5.13 468 | 469 | '@vue/shared@3.5.13': 470 | resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==} 471 | 472 | '@vueuse/core@12.8.2': 473 | resolution: {integrity: sha512-HbvCmZdzAu3VGi/pWYm5Ut+Kd9mn1ZHnn4L5G8kOQTPs/IwIAmJoBrmYk2ckLArgMXZj0AW3n5CAejLUO+PhdQ==} 474 | 475 | '@vueuse/integrations@12.8.2': 476 | resolution: {integrity: sha512-fbGYivgK5uBTRt7p5F3zy6VrETlV9RtZjBqd1/HxGdjdckBgBM4ugP8LHpjolqTj14TXTxSK1ZfgPbHYyGuH7g==} 477 | peerDependencies: 478 | async-validator: ^4 479 | axios: ^1 480 | change-case: ^5 481 | drauu: ^0.4 482 | focus-trap: ^7 483 | fuse.js: ^7 484 | idb-keyval: ^6 485 | jwt-decode: ^4 486 | nprogress: ^0.2 487 | qrcode: ^1.5 488 | sortablejs: ^1 489 | universal-cookie: ^7 490 | peerDependenciesMeta: 491 | async-validator: 492 | optional: true 493 | axios: 494 | optional: true 495 | change-case: 496 | optional: true 497 | drauu: 498 | optional: true 499 | focus-trap: 500 | optional: true 501 | fuse.js: 502 | optional: true 503 | idb-keyval: 504 | optional: true 505 | jwt-decode: 506 | optional: true 507 | nprogress: 508 | optional: true 509 | qrcode: 510 | optional: true 511 | sortablejs: 512 | optional: true 513 | universal-cookie: 514 | optional: true 515 | 516 | '@vueuse/metadata@12.8.2': 517 | resolution: {integrity: sha512-rAyLGEuoBJ/Il5AmFHiziCPdQzRt88VxR+Y/A/QhJ1EWtWqPBBAxTAFaSkviwEuOEZNtW8pvkPgoCZQ+HxqW1A==} 518 | 519 | '@vueuse/shared@12.8.2': 520 | resolution: {integrity: sha512-dznP38YzxZoNloI0qpEfpkms8knDtaoQ6Y/sfS0L7Yki4zh40LFHEhur0odJC6xTHG5dxWVPiUWBXn+wCG2s5w==} 521 | 522 | algoliasearch@5.24.0: 523 | resolution: {integrity: sha512-CkaUygzZ91Xbw11s0CsHMawrK3tl+Ue57725HGRgRzKgt2Z4wvXVXRCtQfvzh8K7Tp4Zp7f1pyHAtMROtTJHxg==} 524 | engines: {node: '>= 14.0.0'} 525 | 526 | birpc@2.3.0: 527 | resolution: {integrity: sha512-ijbtkn/F3Pvzb6jHypHRyve2QApOCZDR25D/VnkY2G/lBNcXCTsnsCxgY4k4PkVB7zfwzYbY3O9Lcqe3xufS5g==} 528 | 529 | ccount@2.0.1: 530 | resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} 531 | 532 | character-entities-html4@2.1.0: 533 | resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} 534 | 535 | character-entities-legacy@3.0.0: 536 | resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} 537 | 538 | comma-separated-tokens@2.0.3: 539 | resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} 540 | 541 | copy-anything@3.0.5: 542 | resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==} 543 | engines: {node: '>=12.13'} 544 | 545 | csstype@3.1.3: 546 | resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} 547 | 548 | dequal@2.0.3: 549 | resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} 550 | engines: {node: '>=6'} 551 | 552 | devlop@1.1.0: 553 | resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} 554 | 555 | emoji-regex-xs@1.0.0: 556 | resolution: {integrity: sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==} 557 | 558 | entities@4.5.0: 559 | resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} 560 | engines: {node: '>=0.12'} 561 | 562 | esbuild@0.21.5: 563 | resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} 564 | engines: {node: '>=12'} 565 | hasBin: true 566 | 567 | estree-walker@2.0.2: 568 | resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} 569 | 570 | focus-trap@7.6.4: 571 | resolution: {integrity: sha512-xx560wGBk7seZ6y933idtjJQc1l+ck+pI3sKvhKozdBV1dRZoKhkW5xoCaFv9tQiX5RH1xfSxjuNu6g+lmN/gw==} 572 | 573 | fsevents@2.3.3: 574 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 575 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 576 | os: [darwin] 577 | 578 | hast-util-to-html@9.0.5: 579 | resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==} 580 | 581 | hast-util-whitespace@3.0.0: 582 | resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} 583 | 584 | hookable@5.5.3: 585 | resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} 586 | 587 | html-void-elements@3.0.0: 588 | resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} 589 | 590 | is-what@4.1.16: 591 | resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} 592 | engines: {node: '>=12.13'} 593 | 594 | magic-string@0.30.17: 595 | resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} 596 | 597 | mark.js@8.11.1: 598 | resolution: {integrity: sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==} 599 | 600 | mdast-util-to-hast@13.2.0: 601 | resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==} 602 | 603 | micromark-util-character@2.1.1: 604 | resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} 605 | 606 | micromark-util-encode@2.0.1: 607 | resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} 608 | 609 | micromark-util-sanitize-uri@2.0.1: 610 | resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} 611 | 612 | micromark-util-symbol@2.0.1: 613 | resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} 614 | 615 | micromark-util-types@2.0.2: 616 | resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} 617 | 618 | minisearch@7.1.2: 619 | resolution: {integrity: sha512-R1Pd9eF+MD5JYDDSPAp/q1ougKglm14uEkPMvQ/05RGmx6G9wvmLTrTI/Q5iPNJLYqNdsDQ7qTGIcNWR+FrHmA==} 620 | 621 | mitt@3.0.1: 622 | resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} 623 | 624 | nanoid@3.3.11: 625 | resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} 626 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 627 | hasBin: true 628 | 629 | oniguruma-to-es@3.1.1: 630 | resolution: {integrity: sha512-bUH8SDvPkH3ho3dvwJwfonjlQ4R80vjyvrU8YpxuROddv55vAEJrTuCuCVUhhsHbtlD9tGGbaNApGQckXhS8iQ==} 631 | 632 | perfect-debounce@1.0.0: 633 | resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} 634 | 635 | picocolors@1.1.1: 636 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 637 | 638 | postcss@8.5.3: 639 | resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} 640 | engines: {node: ^10 || ^12 || >=14} 641 | 642 | preact@10.26.6: 643 | resolution: {integrity: sha512-5SRRBinwpwkaD+OqlBDeITlRgvd8I8QlxHJw9AxSdMNV6O+LodN9nUyYGpSF7sadHjs6RzeFShMexC6DbtWr9g==} 644 | 645 | property-information@7.1.0: 646 | resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} 647 | 648 | regex-recursion@6.0.2: 649 | resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==} 650 | 651 | regex-utilities@2.3.0: 652 | resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} 653 | 654 | regex@6.0.1: 655 | resolution: {integrity: sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==} 656 | 657 | rfdc@1.4.1: 658 | resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} 659 | 660 | rollup@4.40.2: 661 | resolution: {integrity: sha512-tfUOg6DTP4rhQ3VjOO6B4wyrJnGOX85requAXvqYTHsOgb2TFJdZ3aWpT8W2kPoypSGP7dZUyzxJ9ee4buM5Fg==} 662 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 663 | hasBin: true 664 | 665 | search-insights@2.17.3: 666 | resolution: {integrity: sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ==} 667 | 668 | shiki@2.5.0: 669 | resolution: {integrity: sha512-mI//trrsaiCIPsja5CNfsyNOqgAZUb6VpJA+340toL42UpzQlXpwRV9nch69X6gaUxrr9kaOOa6e3y3uAkGFxQ==} 670 | 671 | source-map-js@1.2.1: 672 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 673 | engines: {node: '>=0.10.0'} 674 | 675 | space-separated-tokens@2.0.2: 676 | resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} 677 | 678 | speakingurl@14.0.1: 679 | resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==} 680 | engines: {node: '>=0.10.0'} 681 | 682 | stringify-entities@4.0.4: 683 | resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} 684 | 685 | superjson@2.2.2: 686 | resolution: {integrity: sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==} 687 | engines: {node: '>=16'} 688 | 689 | tabbable@6.2.0: 690 | resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} 691 | 692 | trim-lines@3.0.1: 693 | resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} 694 | 695 | unist-util-is@6.0.0: 696 | resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} 697 | 698 | unist-util-position@5.0.0: 699 | resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} 700 | 701 | unist-util-stringify-position@4.0.0: 702 | resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} 703 | 704 | unist-util-visit-parents@6.0.1: 705 | resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} 706 | 707 | unist-util-visit@5.0.0: 708 | resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} 709 | 710 | vfile-message@4.0.2: 711 | resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} 712 | 713 | vfile@6.0.3: 714 | resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} 715 | 716 | vite@5.4.19: 717 | resolution: {integrity: sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==} 718 | engines: {node: ^18.0.0 || >=20.0.0} 719 | hasBin: true 720 | peerDependencies: 721 | '@types/node': ^18.0.0 || >=20.0.0 722 | less: '*' 723 | lightningcss: ^1.21.0 724 | sass: '*' 725 | sass-embedded: '*' 726 | stylus: '*' 727 | sugarss: '*' 728 | terser: ^5.4.0 729 | peerDependenciesMeta: 730 | '@types/node': 731 | optional: true 732 | less: 733 | optional: true 734 | lightningcss: 735 | optional: true 736 | sass: 737 | optional: true 738 | sass-embedded: 739 | optional: true 740 | stylus: 741 | optional: true 742 | sugarss: 743 | optional: true 744 | terser: 745 | optional: true 746 | 747 | vitepress@1.6.3: 748 | resolution: {integrity: sha512-fCkfdOk8yRZT8GD9BFqusW3+GggWYZ/rYncOfmgcDtP3ualNHCAg+Robxp2/6xfH1WwPHtGpPwv7mbA3qomtBw==} 749 | hasBin: true 750 | peerDependencies: 751 | markdown-it-mathjax3: ^4 752 | postcss: ^8 753 | peerDependenciesMeta: 754 | markdown-it-mathjax3: 755 | optional: true 756 | postcss: 757 | optional: true 758 | 759 | vue@3.5.13: 760 | resolution: {integrity: sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==} 761 | peerDependencies: 762 | typescript: '*' 763 | peerDependenciesMeta: 764 | typescript: 765 | optional: true 766 | 767 | zwitch@2.0.4: 768 | resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} 769 | 770 | snapshots: 771 | 772 | '@algolia/autocomplete-core@1.17.7(@algolia/client-search@5.24.0)(algoliasearch@5.24.0)(search-insights@2.17.3)': 773 | dependencies: 774 | '@algolia/autocomplete-plugin-algolia-insights': 1.17.7(@algolia/client-search@5.24.0)(algoliasearch@5.24.0)(search-insights@2.17.3) 775 | '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.24.0)(algoliasearch@5.24.0) 776 | transitivePeerDependencies: 777 | - '@algolia/client-search' 778 | - algoliasearch 779 | - search-insights 780 | 781 | '@algolia/autocomplete-plugin-algolia-insights@1.17.7(@algolia/client-search@5.24.0)(algoliasearch@5.24.0)(search-insights@2.17.3)': 782 | dependencies: 783 | '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.24.0)(algoliasearch@5.24.0) 784 | search-insights: 2.17.3 785 | transitivePeerDependencies: 786 | - '@algolia/client-search' 787 | - algoliasearch 788 | 789 | '@algolia/autocomplete-preset-algolia@1.17.7(@algolia/client-search@5.24.0)(algoliasearch@5.24.0)': 790 | dependencies: 791 | '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.24.0)(algoliasearch@5.24.0) 792 | '@algolia/client-search': 5.24.0 793 | algoliasearch: 5.24.0 794 | 795 | '@algolia/autocomplete-shared@1.17.7(@algolia/client-search@5.24.0)(algoliasearch@5.24.0)': 796 | dependencies: 797 | '@algolia/client-search': 5.24.0 798 | algoliasearch: 5.24.0 799 | 800 | '@algolia/client-abtesting@5.24.0': 801 | dependencies: 802 | '@algolia/client-common': 5.24.0 803 | '@algolia/requester-browser-xhr': 5.24.0 804 | '@algolia/requester-fetch': 5.24.0 805 | '@algolia/requester-node-http': 5.24.0 806 | 807 | '@algolia/client-analytics@5.24.0': 808 | dependencies: 809 | '@algolia/client-common': 5.24.0 810 | '@algolia/requester-browser-xhr': 5.24.0 811 | '@algolia/requester-fetch': 5.24.0 812 | '@algolia/requester-node-http': 5.24.0 813 | 814 | '@algolia/client-common@5.24.0': {} 815 | 816 | '@algolia/client-insights@5.24.0': 817 | dependencies: 818 | '@algolia/client-common': 5.24.0 819 | '@algolia/requester-browser-xhr': 5.24.0 820 | '@algolia/requester-fetch': 5.24.0 821 | '@algolia/requester-node-http': 5.24.0 822 | 823 | '@algolia/client-personalization@5.24.0': 824 | dependencies: 825 | '@algolia/client-common': 5.24.0 826 | '@algolia/requester-browser-xhr': 5.24.0 827 | '@algolia/requester-fetch': 5.24.0 828 | '@algolia/requester-node-http': 5.24.0 829 | 830 | '@algolia/client-query-suggestions@5.24.0': 831 | dependencies: 832 | '@algolia/client-common': 5.24.0 833 | '@algolia/requester-browser-xhr': 5.24.0 834 | '@algolia/requester-fetch': 5.24.0 835 | '@algolia/requester-node-http': 5.24.0 836 | 837 | '@algolia/client-search@5.24.0': 838 | dependencies: 839 | '@algolia/client-common': 5.24.0 840 | '@algolia/requester-browser-xhr': 5.24.0 841 | '@algolia/requester-fetch': 5.24.0 842 | '@algolia/requester-node-http': 5.24.0 843 | 844 | '@algolia/ingestion@1.24.0': 845 | dependencies: 846 | '@algolia/client-common': 5.24.0 847 | '@algolia/requester-browser-xhr': 5.24.0 848 | '@algolia/requester-fetch': 5.24.0 849 | '@algolia/requester-node-http': 5.24.0 850 | 851 | '@algolia/monitoring@1.24.0': 852 | dependencies: 853 | '@algolia/client-common': 5.24.0 854 | '@algolia/requester-browser-xhr': 5.24.0 855 | '@algolia/requester-fetch': 5.24.0 856 | '@algolia/requester-node-http': 5.24.0 857 | 858 | '@algolia/recommend@5.24.0': 859 | dependencies: 860 | '@algolia/client-common': 5.24.0 861 | '@algolia/requester-browser-xhr': 5.24.0 862 | '@algolia/requester-fetch': 5.24.0 863 | '@algolia/requester-node-http': 5.24.0 864 | 865 | '@algolia/requester-browser-xhr@5.24.0': 866 | dependencies: 867 | '@algolia/client-common': 5.24.0 868 | 869 | '@algolia/requester-fetch@5.24.0': 870 | dependencies: 871 | '@algolia/client-common': 5.24.0 872 | 873 | '@algolia/requester-node-http@5.24.0': 874 | dependencies: 875 | '@algolia/client-common': 5.24.0 876 | 877 | '@babel/helper-string-parser@7.27.1': {} 878 | 879 | '@babel/helper-validator-identifier@7.27.1': {} 880 | 881 | '@babel/parser@7.27.2': 882 | dependencies: 883 | '@babel/types': 7.27.1 884 | 885 | '@babel/types@7.27.1': 886 | dependencies: 887 | '@babel/helper-string-parser': 7.27.1 888 | '@babel/helper-validator-identifier': 7.27.1 889 | 890 | '@docsearch/css@3.8.2': {} 891 | 892 | '@docsearch/js@3.8.2(@algolia/client-search@5.24.0)(search-insights@2.17.3)': 893 | dependencies: 894 | '@docsearch/react': 3.8.2(@algolia/client-search@5.24.0)(search-insights@2.17.3) 895 | preact: 10.26.6 896 | transitivePeerDependencies: 897 | - '@algolia/client-search' 898 | - '@types/react' 899 | - react 900 | - react-dom 901 | - search-insights 902 | 903 | '@docsearch/react@3.8.2(@algolia/client-search@5.24.0)(search-insights@2.17.3)': 904 | dependencies: 905 | '@algolia/autocomplete-core': 1.17.7(@algolia/client-search@5.24.0)(algoliasearch@5.24.0)(search-insights@2.17.3) 906 | '@algolia/autocomplete-preset-algolia': 1.17.7(@algolia/client-search@5.24.0)(algoliasearch@5.24.0) 907 | '@docsearch/css': 3.8.2 908 | algoliasearch: 5.24.0 909 | optionalDependencies: 910 | search-insights: 2.17.3 911 | transitivePeerDependencies: 912 | - '@algolia/client-search' 913 | 914 | '@esbuild/aix-ppc64@0.21.5': 915 | optional: true 916 | 917 | '@esbuild/android-arm64@0.21.5': 918 | optional: true 919 | 920 | '@esbuild/android-arm@0.21.5': 921 | optional: true 922 | 923 | '@esbuild/android-x64@0.21.5': 924 | optional: true 925 | 926 | '@esbuild/darwin-arm64@0.21.5': 927 | optional: true 928 | 929 | '@esbuild/darwin-x64@0.21.5': 930 | optional: true 931 | 932 | '@esbuild/freebsd-arm64@0.21.5': 933 | optional: true 934 | 935 | '@esbuild/freebsd-x64@0.21.5': 936 | optional: true 937 | 938 | '@esbuild/linux-arm64@0.21.5': 939 | optional: true 940 | 941 | '@esbuild/linux-arm@0.21.5': 942 | optional: true 943 | 944 | '@esbuild/linux-ia32@0.21.5': 945 | optional: true 946 | 947 | '@esbuild/linux-loong64@0.21.5': 948 | optional: true 949 | 950 | '@esbuild/linux-mips64el@0.21.5': 951 | optional: true 952 | 953 | '@esbuild/linux-ppc64@0.21.5': 954 | optional: true 955 | 956 | '@esbuild/linux-riscv64@0.21.5': 957 | optional: true 958 | 959 | '@esbuild/linux-s390x@0.21.5': 960 | optional: true 961 | 962 | '@esbuild/linux-x64@0.21.5': 963 | optional: true 964 | 965 | '@esbuild/netbsd-x64@0.21.5': 966 | optional: true 967 | 968 | '@esbuild/openbsd-x64@0.21.5': 969 | optional: true 970 | 971 | '@esbuild/sunos-x64@0.21.5': 972 | optional: true 973 | 974 | '@esbuild/win32-arm64@0.21.5': 975 | optional: true 976 | 977 | '@esbuild/win32-ia32@0.21.5': 978 | optional: true 979 | 980 | '@esbuild/win32-x64@0.21.5': 981 | optional: true 982 | 983 | '@iconify-json/simple-icons@1.2.33': 984 | dependencies: 985 | '@iconify/types': 2.0.0 986 | 987 | '@iconify/types@2.0.0': {} 988 | 989 | '@jridgewell/sourcemap-codec@1.5.0': {} 990 | 991 | '@rollup/rollup-android-arm-eabi@4.40.2': 992 | optional: true 993 | 994 | '@rollup/rollup-android-arm64@4.40.2': 995 | optional: true 996 | 997 | '@rollup/rollup-darwin-arm64@4.40.2': 998 | optional: true 999 | 1000 | '@rollup/rollup-darwin-x64@4.40.2': 1001 | optional: true 1002 | 1003 | '@rollup/rollup-freebsd-arm64@4.40.2': 1004 | optional: true 1005 | 1006 | '@rollup/rollup-freebsd-x64@4.40.2': 1007 | optional: true 1008 | 1009 | '@rollup/rollup-linux-arm-gnueabihf@4.40.2': 1010 | optional: true 1011 | 1012 | '@rollup/rollup-linux-arm-musleabihf@4.40.2': 1013 | optional: true 1014 | 1015 | '@rollup/rollup-linux-arm64-gnu@4.40.2': 1016 | optional: true 1017 | 1018 | '@rollup/rollup-linux-arm64-musl@4.40.2': 1019 | optional: true 1020 | 1021 | '@rollup/rollup-linux-loongarch64-gnu@4.40.2': 1022 | optional: true 1023 | 1024 | '@rollup/rollup-linux-powerpc64le-gnu@4.40.2': 1025 | optional: true 1026 | 1027 | '@rollup/rollup-linux-riscv64-gnu@4.40.2': 1028 | optional: true 1029 | 1030 | '@rollup/rollup-linux-riscv64-musl@4.40.2': 1031 | optional: true 1032 | 1033 | '@rollup/rollup-linux-s390x-gnu@4.40.2': 1034 | optional: true 1035 | 1036 | '@rollup/rollup-linux-x64-gnu@4.40.2': 1037 | optional: true 1038 | 1039 | '@rollup/rollup-linux-x64-musl@4.40.2': 1040 | optional: true 1041 | 1042 | '@rollup/rollup-win32-arm64-msvc@4.40.2': 1043 | optional: true 1044 | 1045 | '@rollup/rollup-win32-ia32-msvc@4.40.2': 1046 | optional: true 1047 | 1048 | '@rollup/rollup-win32-x64-msvc@4.40.2': 1049 | optional: true 1050 | 1051 | '@shikijs/core@2.5.0': 1052 | dependencies: 1053 | '@shikijs/engine-javascript': 2.5.0 1054 | '@shikijs/engine-oniguruma': 2.5.0 1055 | '@shikijs/types': 2.5.0 1056 | '@shikijs/vscode-textmate': 10.0.2 1057 | '@types/hast': 3.0.4 1058 | hast-util-to-html: 9.0.5 1059 | 1060 | '@shikijs/engine-javascript@2.5.0': 1061 | dependencies: 1062 | '@shikijs/types': 2.5.0 1063 | '@shikijs/vscode-textmate': 10.0.2 1064 | oniguruma-to-es: 3.1.1 1065 | 1066 | '@shikijs/engine-oniguruma@2.5.0': 1067 | dependencies: 1068 | '@shikijs/types': 2.5.0 1069 | '@shikijs/vscode-textmate': 10.0.2 1070 | 1071 | '@shikijs/langs@2.5.0': 1072 | dependencies: 1073 | '@shikijs/types': 2.5.0 1074 | 1075 | '@shikijs/themes@2.5.0': 1076 | dependencies: 1077 | '@shikijs/types': 2.5.0 1078 | 1079 | '@shikijs/transformers@2.5.0': 1080 | dependencies: 1081 | '@shikijs/core': 2.5.0 1082 | '@shikijs/types': 2.5.0 1083 | 1084 | '@shikijs/types@2.5.0': 1085 | dependencies: 1086 | '@shikijs/vscode-textmate': 10.0.2 1087 | '@types/hast': 3.0.4 1088 | 1089 | '@shikijs/vscode-textmate@10.0.2': {} 1090 | 1091 | '@types/estree@1.0.7': {} 1092 | 1093 | '@types/hast@3.0.4': 1094 | dependencies: 1095 | '@types/unist': 3.0.3 1096 | 1097 | '@types/linkify-it@5.0.0': {} 1098 | 1099 | '@types/markdown-it@14.1.2': 1100 | dependencies: 1101 | '@types/linkify-it': 5.0.0 1102 | '@types/mdurl': 2.0.0 1103 | 1104 | '@types/mdast@4.0.4': 1105 | dependencies: 1106 | '@types/unist': 3.0.3 1107 | 1108 | '@types/mdurl@2.0.0': {} 1109 | 1110 | '@types/unist@3.0.3': {} 1111 | 1112 | '@types/web-bluetooth@0.0.21': {} 1113 | 1114 | '@ungap/structured-clone@1.3.0': {} 1115 | 1116 | '@vitejs/plugin-vue@5.2.4(vite@5.4.19)(vue@3.5.13)': 1117 | dependencies: 1118 | vite: 5.4.19 1119 | vue: 3.5.13 1120 | 1121 | '@vue/compiler-core@3.5.13': 1122 | dependencies: 1123 | '@babel/parser': 7.27.2 1124 | '@vue/shared': 3.5.13 1125 | entities: 4.5.0 1126 | estree-walker: 2.0.2 1127 | source-map-js: 1.2.1 1128 | 1129 | '@vue/compiler-dom@3.5.13': 1130 | dependencies: 1131 | '@vue/compiler-core': 3.5.13 1132 | '@vue/shared': 3.5.13 1133 | 1134 | '@vue/compiler-sfc@3.5.13': 1135 | dependencies: 1136 | '@babel/parser': 7.27.2 1137 | '@vue/compiler-core': 3.5.13 1138 | '@vue/compiler-dom': 3.5.13 1139 | '@vue/compiler-ssr': 3.5.13 1140 | '@vue/shared': 3.5.13 1141 | estree-walker: 2.0.2 1142 | magic-string: 0.30.17 1143 | postcss: 8.5.3 1144 | source-map-js: 1.2.1 1145 | 1146 | '@vue/compiler-ssr@3.5.13': 1147 | dependencies: 1148 | '@vue/compiler-dom': 3.5.13 1149 | '@vue/shared': 3.5.13 1150 | 1151 | '@vue/devtools-api@7.7.6': 1152 | dependencies: 1153 | '@vue/devtools-kit': 7.7.6 1154 | 1155 | '@vue/devtools-kit@7.7.6': 1156 | dependencies: 1157 | '@vue/devtools-shared': 7.7.6 1158 | birpc: 2.3.0 1159 | hookable: 5.5.3 1160 | mitt: 3.0.1 1161 | perfect-debounce: 1.0.0 1162 | speakingurl: 14.0.1 1163 | superjson: 2.2.2 1164 | 1165 | '@vue/devtools-shared@7.7.6': 1166 | dependencies: 1167 | rfdc: 1.4.1 1168 | 1169 | '@vue/reactivity@3.5.13': 1170 | dependencies: 1171 | '@vue/shared': 3.5.13 1172 | 1173 | '@vue/runtime-core@3.5.13': 1174 | dependencies: 1175 | '@vue/reactivity': 3.5.13 1176 | '@vue/shared': 3.5.13 1177 | 1178 | '@vue/runtime-dom@3.5.13': 1179 | dependencies: 1180 | '@vue/reactivity': 3.5.13 1181 | '@vue/runtime-core': 3.5.13 1182 | '@vue/shared': 3.5.13 1183 | csstype: 3.1.3 1184 | 1185 | '@vue/server-renderer@3.5.13(vue@3.5.13)': 1186 | dependencies: 1187 | '@vue/compiler-ssr': 3.5.13 1188 | '@vue/shared': 3.5.13 1189 | vue: 3.5.13 1190 | 1191 | '@vue/shared@3.5.13': {} 1192 | 1193 | '@vueuse/core@12.8.2': 1194 | dependencies: 1195 | '@types/web-bluetooth': 0.0.21 1196 | '@vueuse/metadata': 12.8.2 1197 | '@vueuse/shared': 12.8.2 1198 | vue: 3.5.13 1199 | transitivePeerDependencies: 1200 | - typescript 1201 | 1202 | '@vueuse/integrations@12.8.2(focus-trap@7.6.4)': 1203 | dependencies: 1204 | '@vueuse/core': 12.8.2 1205 | '@vueuse/shared': 12.8.2 1206 | vue: 3.5.13 1207 | optionalDependencies: 1208 | focus-trap: 7.6.4 1209 | transitivePeerDependencies: 1210 | - typescript 1211 | 1212 | '@vueuse/metadata@12.8.2': {} 1213 | 1214 | '@vueuse/shared@12.8.2': 1215 | dependencies: 1216 | vue: 3.5.13 1217 | transitivePeerDependencies: 1218 | - typescript 1219 | 1220 | algoliasearch@5.24.0: 1221 | dependencies: 1222 | '@algolia/client-abtesting': 5.24.0 1223 | '@algolia/client-analytics': 5.24.0 1224 | '@algolia/client-common': 5.24.0 1225 | '@algolia/client-insights': 5.24.0 1226 | '@algolia/client-personalization': 5.24.0 1227 | '@algolia/client-query-suggestions': 5.24.0 1228 | '@algolia/client-search': 5.24.0 1229 | '@algolia/ingestion': 1.24.0 1230 | '@algolia/monitoring': 1.24.0 1231 | '@algolia/recommend': 5.24.0 1232 | '@algolia/requester-browser-xhr': 5.24.0 1233 | '@algolia/requester-fetch': 5.24.0 1234 | '@algolia/requester-node-http': 5.24.0 1235 | 1236 | birpc@2.3.0: {} 1237 | 1238 | ccount@2.0.1: {} 1239 | 1240 | character-entities-html4@2.1.0: {} 1241 | 1242 | character-entities-legacy@3.0.0: {} 1243 | 1244 | comma-separated-tokens@2.0.3: {} 1245 | 1246 | copy-anything@3.0.5: 1247 | dependencies: 1248 | is-what: 4.1.16 1249 | 1250 | csstype@3.1.3: {} 1251 | 1252 | dequal@2.0.3: {} 1253 | 1254 | devlop@1.1.0: 1255 | dependencies: 1256 | dequal: 2.0.3 1257 | 1258 | emoji-regex-xs@1.0.0: {} 1259 | 1260 | entities@4.5.0: {} 1261 | 1262 | esbuild@0.21.5: 1263 | optionalDependencies: 1264 | '@esbuild/aix-ppc64': 0.21.5 1265 | '@esbuild/android-arm': 0.21.5 1266 | '@esbuild/android-arm64': 0.21.5 1267 | '@esbuild/android-x64': 0.21.5 1268 | '@esbuild/darwin-arm64': 0.21.5 1269 | '@esbuild/darwin-x64': 0.21.5 1270 | '@esbuild/freebsd-arm64': 0.21.5 1271 | '@esbuild/freebsd-x64': 0.21.5 1272 | '@esbuild/linux-arm': 0.21.5 1273 | '@esbuild/linux-arm64': 0.21.5 1274 | '@esbuild/linux-ia32': 0.21.5 1275 | '@esbuild/linux-loong64': 0.21.5 1276 | '@esbuild/linux-mips64el': 0.21.5 1277 | '@esbuild/linux-ppc64': 0.21.5 1278 | '@esbuild/linux-riscv64': 0.21.5 1279 | '@esbuild/linux-s390x': 0.21.5 1280 | '@esbuild/linux-x64': 0.21.5 1281 | '@esbuild/netbsd-x64': 0.21.5 1282 | '@esbuild/openbsd-x64': 0.21.5 1283 | '@esbuild/sunos-x64': 0.21.5 1284 | '@esbuild/win32-arm64': 0.21.5 1285 | '@esbuild/win32-ia32': 0.21.5 1286 | '@esbuild/win32-x64': 0.21.5 1287 | 1288 | estree-walker@2.0.2: {} 1289 | 1290 | focus-trap@7.6.4: 1291 | dependencies: 1292 | tabbable: 6.2.0 1293 | 1294 | fsevents@2.3.3: 1295 | optional: true 1296 | 1297 | hast-util-to-html@9.0.5: 1298 | dependencies: 1299 | '@types/hast': 3.0.4 1300 | '@types/unist': 3.0.3 1301 | ccount: 2.0.1 1302 | comma-separated-tokens: 2.0.3 1303 | hast-util-whitespace: 3.0.0 1304 | html-void-elements: 3.0.0 1305 | mdast-util-to-hast: 13.2.0 1306 | property-information: 7.1.0 1307 | space-separated-tokens: 2.0.2 1308 | stringify-entities: 4.0.4 1309 | zwitch: 2.0.4 1310 | 1311 | hast-util-whitespace@3.0.0: 1312 | dependencies: 1313 | '@types/hast': 3.0.4 1314 | 1315 | hookable@5.5.3: {} 1316 | 1317 | html-void-elements@3.0.0: {} 1318 | 1319 | is-what@4.1.16: {} 1320 | 1321 | magic-string@0.30.17: 1322 | dependencies: 1323 | '@jridgewell/sourcemap-codec': 1.5.0 1324 | 1325 | mark.js@8.11.1: {} 1326 | 1327 | mdast-util-to-hast@13.2.0: 1328 | dependencies: 1329 | '@types/hast': 3.0.4 1330 | '@types/mdast': 4.0.4 1331 | '@ungap/structured-clone': 1.3.0 1332 | devlop: 1.1.0 1333 | micromark-util-sanitize-uri: 2.0.1 1334 | trim-lines: 3.0.1 1335 | unist-util-position: 5.0.0 1336 | unist-util-visit: 5.0.0 1337 | vfile: 6.0.3 1338 | 1339 | micromark-util-character@2.1.1: 1340 | dependencies: 1341 | micromark-util-symbol: 2.0.1 1342 | micromark-util-types: 2.0.2 1343 | 1344 | micromark-util-encode@2.0.1: {} 1345 | 1346 | micromark-util-sanitize-uri@2.0.1: 1347 | dependencies: 1348 | micromark-util-character: 2.1.1 1349 | micromark-util-encode: 2.0.1 1350 | micromark-util-symbol: 2.0.1 1351 | 1352 | micromark-util-symbol@2.0.1: {} 1353 | 1354 | micromark-util-types@2.0.2: {} 1355 | 1356 | minisearch@7.1.2: {} 1357 | 1358 | mitt@3.0.1: {} 1359 | 1360 | nanoid@3.3.11: {} 1361 | 1362 | oniguruma-to-es@3.1.1: 1363 | dependencies: 1364 | emoji-regex-xs: 1.0.0 1365 | regex: 6.0.1 1366 | regex-recursion: 6.0.2 1367 | 1368 | perfect-debounce@1.0.0: {} 1369 | 1370 | picocolors@1.1.1: {} 1371 | 1372 | postcss@8.5.3: 1373 | dependencies: 1374 | nanoid: 3.3.11 1375 | picocolors: 1.1.1 1376 | source-map-js: 1.2.1 1377 | 1378 | preact@10.26.6: {} 1379 | 1380 | property-information@7.1.0: {} 1381 | 1382 | regex-recursion@6.0.2: 1383 | dependencies: 1384 | regex-utilities: 2.3.0 1385 | 1386 | regex-utilities@2.3.0: {} 1387 | 1388 | regex@6.0.1: 1389 | dependencies: 1390 | regex-utilities: 2.3.0 1391 | 1392 | rfdc@1.4.1: {} 1393 | 1394 | rollup@4.40.2: 1395 | dependencies: 1396 | '@types/estree': 1.0.7 1397 | optionalDependencies: 1398 | '@rollup/rollup-android-arm-eabi': 4.40.2 1399 | '@rollup/rollup-android-arm64': 4.40.2 1400 | '@rollup/rollup-darwin-arm64': 4.40.2 1401 | '@rollup/rollup-darwin-x64': 4.40.2 1402 | '@rollup/rollup-freebsd-arm64': 4.40.2 1403 | '@rollup/rollup-freebsd-x64': 4.40.2 1404 | '@rollup/rollup-linux-arm-gnueabihf': 4.40.2 1405 | '@rollup/rollup-linux-arm-musleabihf': 4.40.2 1406 | '@rollup/rollup-linux-arm64-gnu': 4.40.2 1407 | '@rollup/rollup-linux-arm64-musl': 4.40.2 1408 | '@rollup/rollup-linux-loongarch64-gnu': 4.40.2 1409 | '@rollup/rollup-linux-powerpc64le-gnu': 4.40.2 1410 | '@rollup/rollup-linux-riscv64-gnu': 4.40.2 1411 | '@rollup/rollup-linux-riscv64-musl': 4.40.2 1412 | '@rollup/rollup-linux-s390x-gnu': 4.40.2 1413 | '@rollup/rollup-linux-x64-gnu': 4.40.2 1414 | '@rollup/rollup-linux-x64-musl': 4.40.2 1415 | '@rollup/rollup-win32-arm64-msvc': 4.40.2 1416 | '@rollup/rollup-win32-ia32-msvc': 4.40.2 1417 | '@rollup/rollup-win32-x64-msvc': 4.40.2 1418 | fsevents: 2.3.3 1419 | 1420 | search-insights@2.17.3: {} 1421 | 1422 | shiki@2.5.0: 1423 | dependencies: 1424 | '@shikijs/core': 2.5.0 1425 | '@shikijs/engine-javascript': 2.5.0 1426 | '@shikijs/engine-oniguruma': 2.5.0 1427 | '@shikijs/langs': 2.5.0 1428 | '@shikijs/themes': 2.5.0 1429 | '@shikijs/types': 2.5.0 1430 | '@shikijs/vscode-textmate': 10.0.2 1431 | '@types/hast': 3.0.4 1432 | 1433 | source-map-js@1.2.1: {} 1434 | 1435 | space-separated-tokens@2.0.2: {} 1436 | 1437 | speakingurl@14.0.1: {} 1438 | 1439 | stringify-entities@4.0.4: 1440 | dependencies: 1441 | character-entities-html4: 2.1.0 1442 | character-entities-legacy: 3.0.0 1443 | 1444 | superjson@2.2.2: 1445 | dependencies: 1446 | copy-anything: 3.0.5 1447 | 1448 | tabbable@6.2.0: {} 1449 | 1450 | trim-lines@3.0.1: {} 1451 | 1452 | unist-util-is@6.0.0: 1453 | dependencies: 1454 | '@types/unist': 3.0.3 1455 | 1456 | unist-util-position@5.0.0: 1457 | dependencies: 1458 | '@types/unist': 3.0.3 1459 | 1460 | unist-util-stringify-position@4.0.0: 1461 | dependencies: 1462 | '@types/unist': 3.0.3 1463 | 1464 | unist-util-visit-parents@6.0.1: 1465 | dependencies: 1466 | '@types/unist': 3.0.3 1467 | unist-util-is: 6.0.0 1468 | 1469 | unist-util-visit@5.0.0: 1470 | dependencies: 1471 | '@types/unist': 3.0.3 1472 | unist-util-is: 6.0.0 1473 | unist-util-visit-parents: 6.0.1 1474 | 1475 | vfile-message@4.0.2: 1476 | dependencies: 1477 | '@types/unist': 3.0.3 1478 | unist-util-stringify-position: 4.0.0 1479 | 1480 | vfile@6.0.3: 1481 | dependencies: 1482 | '@types/unist': 3.0.3 1483 | vfile-message: 4.0.2 1484 | 1485 | vite@5.4.19: 1486 | dependencies: 1487 | esbuild: 0.21.5 1488 | postcss: 8.5.3 1489 | rollup: 4.40.2 1490 | optionalDependencies: 1491 | fsevents: 2.3.3 1492 | 1493 | vitepress@1.6.3(@algolia/client-search@5.24.0)(postcss@8.5.3)(search-insights@2.17.3): 1494 | dependencies: 1495 | '@docsearch/css': 3.8.2 1496 | '@docsearch/js': 3.8.2(@algolia/client-search@5.24.0)(search-insights@2.17.3) 1497 | '@iconify-json/simple-icons': 1.2.33 1498 | '@shikijs/core': 2.5.0 1499 | '@shikijs/transformers': 2.5.0 1500 | '@shikijs/types': 2.5.0 1501 | '@types/markdown-it': 14.1.2 1502 | '@vitejs/plugin-vue': 5.2.4(vite@5.4.19)(vue@3.5.13) 1503 | '@vue/devtools-api': 7.7.6 1504 | '@vue/shared': 3.5.13 1505 | '@vueuse/core': 12.8.2 1506 | '@vueuse/integrations': 12.8.2(focus-trap@7.6.4) 1507 | focus-trap: 7.6.4 1508 | mark.js: 8.11.1 1509 | minisearch: 7.1.2 1510 | shiki: 2.5.0 1511 | vite: 5.4.19 1512 | vue: 3.5.13 1513 | optionalDependencies: 1514 | postcss: 8.5.3 1515 | transitivePeerDependencies: 1516 | - '@algolia/client-search' 1517 | - '@types/node' 1518 | - '@types/react' 1519 | - async-validator 1520 | - axios 1521 | - change-case 1522 | - drauu 1523 | - fuse.js 1524 | - idb-keyval 1525 | - jwt-decode 1526 | - less 1527 | - lightningcss 1528 | - nprogress 1529 | - qrcode 1530 | - react 1531 | - react-dom 1532 | - sass 1533 | - sass-embedded 1534 | - search-insights 1535 | - sortablejs 1536 | - stylus 1537 | - sugarss 1538 | - terser 1539 | - typescript 1540 | - universal-cookie 1541 | 1542 | vue@3.5.13: 1543 | dependencies: 1544 | '@vue/compiler-dom': 3.5.13 1545 | '@vue/compiler-sfc': 3.5.13 1546 | '@vue/runtime-dom': 3.5.13 1547 | '@vue/server-renderer': 3.5.13(vue@3.5.13) 1548 | '@vue/shared': 3.5.13 1549 | 1550 | zwitch@2.0.4: {} 1551 | -------------------------------------------------------------------------------- /pnpm-workspace.yaml: -------------------------------------------------------------------------------- 1 | packages: 2 | - 'publishing-docs/*' -------------------------------------------------------------------------------- /publishing-docs/writer-docs/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:23-slim AS builder 2 | ENV PNPM_HOME="/pnpm" 3 | ENV PATH="$PNPM_HOME:$PATH" 4 | RUN corepack enable 5 | RUN corepack prepare pnpm@latest --activate 6 | COPY . /app 7 | WORKDIR /app 8 | RUN pnpm install 9 | RUN pnpm -F writer-docs docs:build 10 | -------------------------------------------------------------------------------- /publishing-docs/writer-docs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "writer-docs", 3 | "scripts": { 4 | "docs:dev": "vitepress dev src", 5 | "docs:build": "vitepress build src", 6 | "docs:preview": "vitepress preview src" 7 | }, 8 | "devDependencies": { 9 | "vitepress": "1.6.3" 10 | } 11 | } -------------------------------------------------------------------------------- /publishing-docs/writer-docs/src/.vitepress/config.mts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vitepress' 2 | 3 | // https://vitepress.dev/reference/site-config 4 | export default defineConfig({ 5 | title: "traOJudge writer's guide", 6 | description: "A VitePress Site", 7 | themeConfig: { 8 | // https://vitepress.dev/reference/default-theme-config 9 | nav: [ 10 | { text: 'Home', link: '/' }, 11 | { text: 'Examples', link: '/markdown-examples' } 12 | ], 13 | 14 | sidebar: [ 15 | { 16 | text: 'Examples', 17 | items: [ 18 | { text: 'Markdown Examples', link: '/markdown-examples' }, 19 | { text: 'Runtime API Examples', link: '/api-examples' }, 20 | { text: 'Jobの概要', link: '/job-overview' }, 21 | ] 22 | } 23 | ], 24 | 25 | socialLinks: [ 26 | { icon: 'github', link: 'https://github.com/vuejs/vitepress' } 27 | ] 28 | } 29 | }) 30 | -------------------------------------------------------------------------------- /publishing-docs/writer-docs/src/.vitepress/theme/index.ts: -------------------------------------------------------------------------------- 1 | // https://vitepress.dev/guide/custom-theme 2 | import { h } from 'vue' 3 | import type { Theme } from 'vitepress' 4 | import DefaultTheme from 'vitepress/theme' 5 | import './style.css' 6 | 7 | export default { 8 | extends: DefaultTheme, 9 | Layout: () => { 10 | return h(DefaultTheme.Layout, null, { 11 | // https://vitepress.dev/guide/extending-default-theme#layout-slots 12 | }) 13 | }, 14 | enhanceApp({ app, router, siteData }) { 15 | // ... 16 | } 17 | } satisfies Theme 18 | -------------------------------------------------------------------------------- /publishing-docs/writer-docs/src/.vitepress/theme/style.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Customize default theme styling by overriding CSS variables: 3 | * https://github.com/vuejs/vitepress/blob/main/src/client/theme-default/styles/vars.css 4 | */ 5 | 6 | /** 7 | * Colors 8 | * 9 | * Each colors have exact same color scale system with 3 levels of solid 10 | * colors with different brightness, and 1 soft color. 11 | * 12 | * - `XXX-1`: The most solid color used mainly for colored text. It must 13 | * satisfy the contrast ratio against when used on top of `XXX-soft`. 14 | * 15 | * - `XXX-2`: The color used mainly for hover state of the button. 16 | * 17 | * - `XXX-3`: The color for solid background, such as bg color of the button. 18 | * It must satisfy the contrast ratio with pure white (#ffffff) text on 19 | * top of it. 20 | * 21 | * - `XXX-soft`: The color used for subtle background such as custom container 22 | * or badges. It must satisfy the contrast ratio when putting `XXX-1` colors 23 | * on top of it. 24 | * 25 | * The soft color must be semi transparent alpha channel. This is crucial 26 | * because it allows adding multiple "soft" colors on top of each other 27 | * to create a accent, such as when having inline code block inside 28 | * custom containers. 29 | * 30 | * - `default`: The color used purely for subtle indication without any 31 | * special meanings attached to it such as bg color for menu hover state. 32 | * 33 | * - `brand`: Used for primary brand colors, such as link text, button with 34 | * brand theme, etc. 35 | * 36 | * - `tip`: Used to indicate useful information. The default theme uses the 37 | * brand color for this by default. 38 | * 39 | * - `warning`: Used to indicate warning to the users. Used in custom 40 | * container, badges, etc. 41 | * 42 | * - `danger`: Used to show error, or dangerous message to the users. Used 43 | * in custom container, badges, etc. 44 | * -------------------------------------------------------------------------- */ 45 | 46 | :root { 47 | --vp-c-default-1: var(--vp-c-gray-1); 48 | --vp-c-default-2: var(--vp-c-gray-2); 49 | --vp-c-default-3: var(--vp-c-gray-3); 50 | --vp-c-default-soft: var(--vp-c-gray-soft); 51 | 52 | --vp-c-brand-1: var(--vp-c-indigo-1); 53 | --vp-c-brand-2: var(--vp-c-indigo-2); 54 | --vp-c-brand-3: var(--vp-c-indigo-3); 55 | --vp-c-brand-soft: var(--vp-c-indigo-soft); 56 | 57 | --vp-c-tip-1: var(--vp-c-brand-1); 58 | --vp-c-tip-2: var(--vp-c-brand-2); 59 | --vp-c-tip-3: var(--vp-c-brand-3); 60 | --vp-c-tip-soft: var(--vp-c-brand-soft); 61 | 62 | --vp-c-warning-1: var(--vp-c-yellow-1); 63 | --vp-c-warning-2: var(--vp-c-yellow-2); 64 | --vp-c-warning-3: var(--vp-c-yellow-3); 65 | --vp-c-warning-soft: var(--vp-c-yellow-soft); 66 | 67 | --vp-c-danger-1: var(--vp-c-red-1); 68 | --vp-c-danger-2: var(--vp-c-red-2); 69 | --vp-c-danger-3: var(--vp-c-red-3); 70 | --vp-c-danger-soft: var(--vp-c-red-soft); 71 | } 72 | 73 | /** 74 | * Component: Button 75 | * -------------------------------------------------------------------------- */ 76 | 77 | :root { 78 | --vp-button-brand-border: transparent; 79 | --vp-button-brand-text: var(--vp-c-white); 80 | --vp-button-brand-bg: var(--vp-c-brand-3); 81 | --vp-button-brand-hover-border: transparent; 82 | --vp-button-brand-hover-text: var(--vp-c-white); 83 | --vp-button-brand-hover-bg: var(--vp-c-brand-2); 84 | --vp-button-brand-active-border: transparent; 85 | --vp-button-brand-active-text: var(--vp-c-white); 86 | --vp-button-brand-active-bg: var(--vp-c-brand-1); 87 | } 88 | 89 | /** 90 | * Component: Home 91 | * -------------------------------------------------------------------------- */ 92 | 93 | :root { 94 | --vp-home-hero-name-color: transparent; 95 | --vp-home-hero-name-background: -webkit-linear-gradient( 96 | 120deg, 97 | #bd34fe 30%, 98 | #41d1ff 99 | ); 100 | 101 | --vp-home-hero-image-background-image: linear-gradient( 102 | -45deg, 103 | #bd34fe 50%, 104 | #47caff 50% 105 | ); 106 | --vp-home-hero-image-filter: blur(44px); 107 | } 108 | 109 | @media (min-width: 640px) { 110 | :root { 111 | --vp-home-hero-image-filter: blur(56px); 112 | } 113 | } 114 | 115 | @media (min-width: 960px) { 116 | :root { 117 | --vp-home-hero-image-filter: blur(68px); 118 | } 119 | } 120 | 121 | /** 122 | * Component: Custom Block 123 | * -------------------------------------------------------------------------- */ 124 | 125 | :root { 126 | --vp-custom-block-tip-border: transparent; 127 | --vp-custom-block-tip-text: var(--vp-c-text-1); 128 | --vp-custom-block-tip-bg: var(--vp-c-brand-soft); 129 | --vp-custom-block-tip-code-bg: var(--vp-c-brand-soft); 130 | } 131 | 132 | /** 133 | * Component: Algolia 134 | * -------------------------------------------------------------------------- */ 135 | 136 | .DocSearch { 137 | --docsearch-primary-color: var(--vp-c-brand-1) !important; 138 | } 139 | 140 | -------------------------------------------------------------------------------- /publishing-docs/writer-docs/src/api-examples.md: -------------------------------------------------------------------------------- 1 | --- 2 | outline: deep 3 | --- 4 | 5 | # Runtime API Examples 6 | 7 | This page demonstrates usage of some of the runtime APIs provided by VitePress. 8 | 9 | The main `useData()` API can be used to access site, theme, and page data for the current page. It works in both `.md` and `.vue` files: 10 | 11 | ```md 12 | 17 | 18 | ## Results 19 | 20 | ### Theme Data 21 |
{{ theme }}
22 | 23 | ### Page Data 24 |
{{ page }}
25 | 26 | ### Page Frontmatter 27 |
{{ frontmatter }}
28 | ``` 29 | 30 | 35 | 36 | ## Results 37 | 38 | ### Theme Data 39 |
{{ theme }}
40 | 41 | ### Page Data 42 |
{{ page }}
43 | 44 | ### Page Frontmatter 45 |
{{ frontmatter }}
46 | 47 | ## More 48 | 49 | Check out the documentation for the [full list of runtime APIs](https://vitepress.dev/reference/runtime-api#usedata). 50 | -------------------------------------------------------------------------------- /publishing-docs/writer-docs/src/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | # https://vitepress.dev/reference/default-theme-home-page 3 | layout: home 4 | 5 | hero: 6 | name: "traOJudge writer's guide" 7 | text: "A VitePress Site" 8 | tagline: My great project tagline 9 | actions: 10 | - theme: brand 11 | text: Markdown Examples 12 | link: /markdown-examples 13 | - theme: alt 14 | text: API Examples 15 | link: /api-examples 16 | 17 | features: 18 | - title: Feature A 19 | details: Lorem ipsum dolor sit amet, consectetur adipiscing elit 20 | - title: Feature B 21 | details: Lorem ipsum dolor sit amet, consectetur adipiscing elit 22 | - title: Feature C 23 | details: Lorem ipsum dolor sit amet, consectetur adipiscing elit 24 | --- 25 | 26 | -------------------------------------------------------------------------------- /publishing-docs/writer-docs/src/job-overview.md: -------------------------------------------------------------------------------- 1 | # Jobの概要 2 | traOJudgeでは、提出に対するジャッジへの入力(テストケースや提出言語など)やジャッジ処理はすべてJobとして扱われます。Jobは、処理結果としてファイルを出力します。このファイルをOutcomeと呼びます。Jobには、 3 | - StaticText 4 | - RuntimeText 5 | - EmptyDirectory 6 | - Execution 7 | 8 | の4種類があります。 9 | 10 | ## StaticText Job 11 | StaticText Jobは作問に作問者が決めるテキスト(テストケースやジャッジ用のスクリプトなど)を配置するためのJobです。Outcomeはテキストファイルです。 12 | 13 | ## RuntimeText Job 14 | RuntimeText Jobは提出時に決まりジャッジシステムから与えられるテキスト(提出言語など)を配置するためのJobです。Outcomeはテキストファイルです。 15 | 16 | ## EmptyDirectory Job 17 | EmptyDirectory Jobは後述するExecution Jobで一時ディレクトリとして利用できるからのディレクトリを配置するためのJobです。Outcomeは空のディレクトリです。 18 | 19 | ## Execution Job 20 | Execution Jobはジャッジの処理を行うためのJobです。このJobは(Execution Jobを含む)他のJobのOutcomeを参照することができます。この参照関係はOutcomeとOutcomeのパスを指定する環境変数の名前の組として指定することができ、これをDependencyと呼びます。Execution JobはDependencyの配列とExecutionのエントリーポイントとなるスクリプトで構成されます。また、Execution JobのOutcomeは処理終了後に環境変数`TRAOJUDGE_EXEC_OUTPUT`で与えられるパスのファイルです。 -------------------------------------------------------------------------------- /publishing-docs/writer-docs/src/markdown-examples.md: -------------------------------------------------------------------------------- 1 | # Markdown Extension Examples 2 | 3 | This page demonstrates some of the built-in markdown extensions provided by VitePress. 4 | 5 | ## Syntax Highlighting 6 | 7 | VitePress provides Syntax Highlighting powered by [Shiki](https://github.com/shikijs/shiki), with additional features like line-highlighting: 8 | 9 | **Input** 10 | 11 | ````md 12 | ```js{4} 13 | export default { 14 | data () { 15 | return { 16 | msg: 'Highlighted!' 17 | } 18 | } 19 | } 20 | ``` 21 | ```` 22 | 23 | **Output** 24 | 25 | ```js{4} 26 | export default { 27 | data () { 28 | return { 29 | msg: 'Highlighted!' 30 | } 31 | } 32 | } 33 | ``` 34 | 35 | ## Custom Containers 36 | 37 | **Input** 38 | 39 | ```md 40 | ::: info 41 | This is an info box. 42 | ::: 43 | 44 | ::: tip 45 | This is a tip. 46 | ::: 47 | 48 | ::: warning 49 | This is a warning. 50 | ::: 51 | 52 | ::: danger 53 | This is a dangerous warning. 54 | ::: 55 | 56 | ::: details 57 | This is a details block. 58 | ::: 59 | ``` 60 | 61 | **Output** 62 | 63 | ::: info 64 | This is an info box. 65 | ::: 66 | 67 | ::: tip 68 | This is a tip. 69 | ::: 70 | 71 | ::: warning 72 | This is a warning. 73 | ::: 74 | 75 | ::: danger 76 | This is a dangerous warning. 77 | ::: 78 | 79 | ::: details 80 | This is a details block. 81 | ::: 82 | 83 | ## More 84 | 85 | Check out the documentation for the [full list of markdown extensions](https://vitepress.dev/guide/markdown). 86 | --------------------------------------------------------------------------------