├── .gitignore ├── .npmignore ├── Budfile ├── README.md ├── _definitions.json ├── compose-spec.json ├── jest.config.js ├── kube-spec.json ├── package.json ├── src ├── cli.ts ├── composeTypes.ts ├── helpers.ts ├── index.d.ts ├── index.ts └── kubeTypes.ts ├── test ├── __snapshots__ │ └── index.test.ts.snap ├── index.test.js └── index.test.ts ├── tsconfig.json └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | dist/ 3 | yarn-error.log 4 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .idea 3 | .vscode 4 | npm-debug.log 5 | yarn-error.log 6 | node_modules 7 | *.map 8 | example 9 | test 10 | dist 11 | dist/* 12 | circle.yml 13 | ARCHITECTURE.md 14 | CONTRIBUTING.md 15 | .editorconfig 16 | package-lock.json 17 | yarn.lock 18 | -------------------------------------------------------------------------------- /Budfile: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Convert the JSON schema to a TypeScript interface 4 | function convert_kube_json_schema() { 5 | rm _definitions.json 6 | wget https://raw.githubusercontent.com/yannh/kubernetes-json-schema/master/v1.27.2/_definitions.json 7 | sed -i 's/\(io.k8s[^"]*\)\(\"\)/\1\.\2/' _definitions.json # Append a dot to all io.k8s definitions so that interface names are generated correctly 8 | ./node_modules/json-schema-to-typescript/dist/src/cli.js kube-spec.json > kubeTypes.ts 9 | } 10 | 11 | # Convert the JSON schema to a TypeScript interface 12 | function convert_compose_json_schema() { 13 | ./node_modules/json-schema-to-typescript/dist/src/cli.js compose-spec.json > composeTypes.ts 14 | } 15 | 16 | publish() { 17 | echo "Bump patch version?" 18 | read -r 19 | npm version patch # bump version 20 | echo "Publish?" 21 | read -r 22 | npm publish 23 | } 24 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # docker2kube (d2k) 2 | 3 | d2k is a typescript library that converts docker-compose YAML files to Kubernetes YAML file. The goal is to make it easy to deploy docker project on Kubernetes. 4 | 5 | # UI 6 | Visit https://docker2kube.app.enting.org/ to perform conversion online. 7 | 8 | # Installation 9 | NPM: `npm i docker2kube` 10 | 11 | YARN: `yarn add docker2kube` 12 | 13 | # Usage 14 | ```javascript 15 | import { convert } from 'docker2kube'; 16 | 17 | const composeYaml = `\ 18 | version: '3' 19 | 20 | services: 21 | nginx: 22 | image: nginx:latest 23 | ports: 24 | - "80:80" 25 | volumes: 26 | - ./nginx.conf:/etc/nginx/nginx.conf 27 | restart: always 28 | `; 29 | 30 | const output = convert(composeYaml); 31 | console.log(output); 32 | ``` 33 | 34 | 35 | # Acknowledgment 36 | 37 | * [kompose](https://github.com/kubernetes/kompose) is the canonical tool for converting docker-compose templates. And inspired this project. 38 | * [json-schema-to-typescript](https://github.com/bcherny/json-schema-to-typescript) makes working with JSON schema a dream. 39 | * [composerize](https://github.com/magicmark/composerize) for converting docker command. 40 | -------------------------------------------------------------------------------- /compose-spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft/2019-09/schema#", 3 | "id": "compose_spec.json", 4 | "type": "object", 5 | "title": "Compose Specification", 6 | "description": "The Compose file is a YAML file defining a multi-containers based application.", 7 | 8 | "properties": { 9 | "version": { 10 | "type": "string", 11 | "description": "declared for backward compatibility, ignored." 12 | }, 13 | 14 | "name": { 15 | "type": "string", 16 | "pattern": "^[a-z0-9][a-z0-9_-]*$", 17 | "description": "define the Compose project name, until user defines one explicitly." 18 | }, 19 | 20 | "services": { 21 | "id": "#/properties/services", 22 | "type": "object", 23 | "patternProperties": { 24 | "^[a-zA-Z0-9._-]+$": { 25 | "$ref": "#/definitions/service" 26 | } 27 | }, 28 | "additionalProperties": false 29 | }, 30 | 31 | "networks": { 32 | "id": "#/properties/networks", 33 | "type": "object", 34 | "patternProperties": { 35 | "^[a-zA-Z0-9._-]+$": { 36 | "$ref": "#/definitions/network" 37 | } 38 | } 39 | }, 40 | 41 | "volumes": { 42 | "id": "#/properties/volumes", 43 | "type": "object", 44 | "patternProperties": { 45 | "^[a-zA-Z0-9._-]+$": { 46 | "$ref": "#/definitions/volume" 47 | } 48 | }, 49 | "additionalProperties": false 50 | }, 51 | 52 | "secrets": { 53 | "id": "#/properties/secrets", 54 | "type": "object", 55 | "patternProperties": { 56 | "^[a-zA-Z0-9._-]+$": { 57 | "$ref": "#/definitions/secret" 58 | } 59 | }, 60 | "additionalProperties": false 61 | }, 62 | 63 | "configs": { 64 | "id": "#/properties/configs", 65 | "type": "object", 66 | "patternProperties": { 67 | "^[a-zA-Z0-9._-]+$": { 68 | "$ref": "#/definitions/config" 69 | } 70 | }, 71 | "additionalProperties": false 72 | } 73 | }, 74 | 75 | "patternProperties": {"^x-": {}}, 76 | "additionalProperties": false, 77 | 78 | "definitions": { 79 | 80 | "service": { 81 | "id": "#/definitions/service", 82 | "type": "object", 83 | 84 | "properties": { 85 | "deploy": {"$ref": "#/definitions/deployment"}, 86 | "annotations": {"$ref": "#/definitions/list_or_dict"}, 87 | "build": { 88 | "oneOf": [ 89 | {"type": "string"}, 90 | { 91 | "type": "object", 92 | "properties": { 93 | "context": {"type": "string"}, 94 | "dockerfile": {"type": "string"}, 95 | "dockerfile_inline": {"type": "string"}, 96 | "args": {"$ref": "#/definitions/list_or_dict"}, 97 | "ssh": {"$ref": "#/definitions/list_or_dict"}, 98 | "labels": {"$ref": "#/definitions/list_or_dict"}, 99 | "cache_from": {"type": "array", "items": {"type": "string"}}, 100 | "cache_to": {"type": "array", "items": {"type": "string"}}, 101 | "no_cache": {"type": "boolean"}, 102 | "additional_contexts": {"$ref": "#/definitions/list_or_dict"}, 103 | "network": {"type": "string"}, 104 | "pull": {"type": "boolean"}, 105 | "target": {"type": "string"}, 106 | "shm_size": {"type": ["integer", "string"]}, 107 | "extra_hosts": {"$ref": "#/definitions/list_or_dict"}, 108 | "isolation": {"type": "string"}, 109 | "privileged": {"type": "boolean"}, 110 | "secrets": {"$ref": "#/definitions/service_config_or_secret"}, 111 | "tags": {"type": "array", "items": {"type": "string"}}, 112 | "platforms": {"type": "array", "items": {"type": "string"}} 113 | }, 114 | "additionalProperties": false, 115 | "patternProperties": {"^x-": {}} 116 | } 117 | ] 118 | }, 119 | "blkio_config": { 120 | "type": "object", 121 | "properties": { 122 | "device_read_bps": { 123 | "type": "array", 124 | "items": {"$ref": "#/definitions/blkio_limit"} 125 | }, 126 | "device_read_iops": { 127 | "type": "array", 128 | "items": {"$ref": "#/definitions/blkio_limit"} 129 | }, 130 | "device_write_bps": { 131 | "type": "array", 132 | "items": {"$ref": "#/definitions/blkio_limit"} 133 | }, 134 | "device_write_iops": { 135 | "type": "array", 136 | "items": {"$ref": "#/definitions/blkio_limit"} 137 | }, 138 | "weight": {"type": "integer"}, 139 | "weight_device": { 140 | "type": "array", 141 | "items": {"$ref": "#/definitions/blkio_weight"} 142 | } 143 | }, 144 | "additionalProperties": false 145 | }, 146 | "cap_add": {"type": "array", "items": {"type": "string"}, "uniqueItems": true}, 147 | "cap_drop": {"type": "array", "items": {"type": "string"}, "uniqueItems": true}, 148 | "cgroup": {"type": "string", "enum": ["host", "private"]}, 149 | "cgroup_parent": {"type": "string"}, 150 | "command": {"$ref": "#/definitions/command"}, 151 | "configs": {"$ref": "#/definitions/service_config_or_secret"}, 152 | "container_name": {"type": "string"}, 153 | "cpu_count": {"type": "integer", "minimum": 0}, 154 | "cpu_percent": {"type": "integer", "minimum": 0, "maximum": 100}, 155 | "cpu_shares": {"type": ["number", "string"]}, 156 | "cpu_quota": {"type": ["number", "string"]}, 157 | "cpu_period": {"type": ["number", "string"]}, 158 | "cpu_rt_period": {"type": ["number", "string"]}, 159 | "cpu_rt_runtime": {"type": ["number", "string"]}, 160 | "cpus": {"type": ["number", "string"]}, 161 | "cpuset": {"type": "string"}, 162 | "credential_spec": { 163 | "type": "object", 164 | "properties": { 165 | "config": {"type": "string"}, 166 | "file": {"type": "string"}, 167 | "registry": {"type": "string"} 168 | }, 169 | "additionalProperties": false, 170 | "patternProperties": {"^x-": {}} 171 | }, 172 | "depends_on": { 173 | "oneOf": [ 174 | {"$ref": "#/definitions/list_of_strings"}, 175 | { 176 | "type": "object", 177 | "additionalProperties": false, 178 | "patternProperties": { 179 | "^[a-zA-Z0-9._-]+$": { 180 | "type": "object", 181 | "additionalProperties": false, 182 | "properties": { 183 | "restart": {"type": "boolean"}, 184 | "condition": { 185 | "type": "string", 186 | "enum": ["service_started", "service_healthy", "service_completed_successfully"] 187 | } 188 | }, 189 | "required": ["condition"] 190 | } 191 | } 192 | } 193 | ] 194 | }, 195 | "device_cgroup_rules": {"$ref": "#/definitions/list_of_strings"}, 196 | "devices": {"type": "array", "items": {"type": "string"}, "uniqueItems": true}, 197 | "dns": {"$ref": "#/definitions/string_or_list"}, 198 | "dns_opt": {"type": "array","items": {"type": "string"}, "uniqueItems": true}, 199 | "dns_search": {"$ref": "#/definitions/string_or_list"}, 200 | "domainname": {"type": "string"}, 201 | "entrypoint": {"$ref": "#/definitions/command"}, 202 | "env_file": {"$ref": "#/definitions/string_or_list"}, 203 | "environment": {"$ref": "#/definitions/list_or_dict"}, 204 | 205 | "expose": { 206 | "type": "array", 207 | "items": { 208 | "type": ["string", "number"], 209 | "format": "expose" 210 | }, 211 | "uniqueItems": true 212 | }, 213 | "extends": { 214 | "oneOf": [ 215 | {"type": "string"}, 216 | { 217 | "type": "object", 218 | 219 | "properties": { 220 | "service": {"type": "string"}, 221 | "file": {"type": "string"} 222 | }, 223 | "required": ["service"], 224 | "additionalProperties": false 225 | } 226 | ] 227 | }, 228 | "external_links": {"type": "array", "items": {"type": "string"}, "uniqueItems": true}, 229 | "extra_hosts": {"$ref": "#/definitions/list_or_dict"}, 230 | "group_add": { 231 | "type": "array", 232 | "items": { 233 | "type": ["string", "number"] 234 | }, 235 | "uniqueItems": true 236 | }, 237 | "healthcheck": {"$ref": "#/definitions/healthcheck"}, 238 | "hostname": {"type": "string"}, 239 | "image": {"type": "string"}, 240 | "init": {"type": "boolean"}, 241 | "ipc": {"type": "string"}, 242 | "isolation": {"type": "string"}, 243 | "labels": {"$ref": "#/definitions/list_or_dict"}, 244 | "links": {"type": "array", "items": {"type": "string"}, "uniqueItems": true}, 245 | "logging": { 246 | "type": "object", 247 | 248 | "properties": { 249 | "driver": {"type": "string"}, 250 | "options": { 251 | "type": "object", 252 | "patternProperties": { 253 | "^.+$": {"type": ["string", "number", "null"]} 254 | } 255 | } 256 | }, 257 | "additionalProperties": false, 258 | "patternProperties": {"^x-": {}} 259 | }, 260 | "mac_address": {"type": "string"}, 261 | "mem_limit": {"type": ["number", "string"]}, 262 | "mem_reservation": {"type": ["string", "integer"]}, 263 | "mem_swappiness": {"type": "integer"}, 264 | "memswap_limit": {"type": ["number", "string"]}, 265 | "network_mode": {"type": "string"}, 266 | "networks": { 267 | "oneOf": [ 268 | {"$ref": "#/definitions/list_of_strings"}, 269 | { 270 | "type": "object", 271 | "patternProperties": { 272 | "^[a-zA-Z0-9._-]+$": { 273 | "oneOf": [ 274 | { 275 | "type": "object", 276 | "properties": { 277 | "aliases": {"$ref": "#/definitions/list_of_strings"}, 278 | "ipv4_address": {"type": "string"}, 279 | "ipv6_address": {"type": "string"}, 280 | "link_local_ips": {"$ref": "#/definitions/list_of_strings"}, 281 | "priority": {"type": "number"} 282 | }, 283 | "additionalProperties": false, 284 | "patternProperties": {"^x-": {}} 285 | }, 286 | {"type": "null"} 287 | ] 288 | } 289 | }, 290 | "additionalProperties": false 291 | } 292 | ] 293 | }, 294 | "oom_kill_disable": {"type": "boolean"}, 295 | "oom_score_adj": {"type": "integer", "minimum": -1000, "maximum": 1000}, 296 | "pid": {"type": ["string", "null"]}, 297 | "pids_limit": {"type": ["number", "string"]}, 298 | "platform": {"type": "string"}, 299 | "ports": { 300 | "type": "array", 301 | "items": { 302 | "oneOf": [ 303 | {"type": "number", "format": "ports"}, 304 | {"type": "string", "format": "ports"}, 305 | { 306 | "type": "object", 307 | "properties": { 308 | "mode": {"type": "string"}, 309 | "host_ip": {"type": "string"}, 310 | "target": {"type": "integer"}, 311 | "published": {"type": ["string", "integer"]}, 312 | "protocol": {"type": "string"} 313 | }, 314 | "additionalProperties": false, 315 | "patternProperties": {"^x-": {}} 316 | } 317 | ] 318 | }, 319 | "uniqueItems": true 320 | }, 321 | "privileged": {"type": "boolean"}, 322 | "profiles": {"$ref": "#/definitions/list_of_strings"}, 323 | "pull_policy": {"type": "string", "enum": [ 324 | "always", "never", "if_not_present", "build", "missing" 325 | ]}, 326 | "read_only": {"type": "boolean"}, 327 | "restart": {"type": "string"}, 328 | "runtime": { 329 | "type": "string" 330 | }, 331 | "scale": { 332 | "type": "integer" 333 | }, 334 | "security_opt": {"type": "array", "items": {"type": "string"}, "uniqueItems": true}, 335 | "shm_size": {"type": ["number", "string"]}, 336 | "secrets": {"$ref": "#/definitions/service_config_or_secret"}, 337 | "sysctls": {"$ref": "#/definitions/list_or_dict"}, 338 | "stdin_open": {"type": "boolean"}, 339 | "stop_grace_period": {"type": "string", "format": "duration"}, 340 | "stop_signal": {"type": "string"}, 341 | "storage_opt": {"type": "object"}, 342 | "tmpfs": {"$ref": "#/definitions/string_or_list"}, 343 | "tty": {"type": "boolean"}, 344 | "ulimits": { 345 | "type": "object", 346 | "patternProperties": { 347 | "^[a-z]+$": { 348 | "oneOf": [ 349 | {"type": "integer"}, 350 | { 351 | "type": "object", 352 | "properties": { 353 | "hard": {"type": "integer"}, 354 | "soft": {"type": "integer"} 355 | }, 356 | "required": ["soft", "hard"], 357 | "additionalProperties": false, 358 | "patternProperties": {"^x-": {}} 359 | } 360 | ] 361 | } 362 | } 363 | }, 364 | "user": {"type": "string"}, 365 | "uts": {"type": "string"}, 366 | "userns_mode": {"type": "string"}, 367 | "volumes": { 368 | "type": "array", 369 | "items": { 370 | "oneOf": [ 371 | {"type": "string"}, 372 | { 373 | "type": "object", 374 | "required": ["type"], 375 | "properties": { 376 | "type": {"type": "string"}, 377 | "source": {"type": "string"}, 378 | "target": {"type": "string"}, 379 | "read_only": {"type": "boolean"}, 380 | "consistency": {"type": "string"}, 381 | "bind": { 382 | "type": "object", 383 | "properties": { 384 | "propagation": {"type": "string"}, 385 | "create_host_path": {"type": "boolean"}, 386 | "selinux": {"type": "string", "enum": ["z", "Z"]} 387 | }, 388 | "additionalProperties": false, 389 | "patternProperties": {"^x-": {}} 390 | }, 391 | "volume": { 392 | "type": "object", 393 | "properties": { 394 | "nocopy": {"type": "boolean"} 395 | }, 396 | "additionalProperties": false, 397 | "patternProperties": {"^x-": {}} 398 | }, 399 | "tmpfs": { 400 | "type": "object", 401 | "properties": { 402 | "size": { 403 | "oneOf": [ 404 | {"type": "integer", "minimum": 0}, 405 | {"type": "string"} 406 | ] 407 | }, 408 | "mode": {"type": "number"} 409 | }, 410 | "additionalProperties": false, 411 | "patternProperties": {"^x-": {}} 412 | } 413 | }, 414 | "additionalProperties": false, 415 | "patternProperties": {"^x-": {}} 416 | } 417 | ] 418 | }, 419 | "uniqueItems": true 420 | }, 421 | "volumes_from": { 422 | "type": "array", 423 | "items": {"type": "string"}, 424 | "uniqueItems": true 425 | }, 426 | "working_dir": {"type": "string"} 427 | }, 428 | "patternProperties": {"^x-": {}}, 429 | "additionalProperties": false 430 | }, 431 | 432 | "healthcheck": { 433 | "id": "#/definitions/healthcheck", 434 | "type": "object", 435 | "properties": { 436 | "disable": {"type": "boolean"}, 437 | "interval": {"type": "string", "format": "duration"}, 438 | "retries": {"type": "number"}, 439 | "test": { 440 | "oneOf": [ 441 | {"type": "string"}, 442 | {"type": "array", "items": {"type": "string"}} 443 | ] 444 | }, 445 | "timeout": {"type": "string", "format": "duration"}, 446 | "start_period": {"type": "string", "format": "duration"} 447 | }, 448 | "additionalProperties": false, 449 | "patternProperties": {"^x-": {}} 450 | }, 451 | "deployment": { 452 | "id": "#/definitions/deployment", 453 | "type": ["object", "null"], 454 | "properties": { 455 | "mode": {"type": "string"}, 456 | "endpoint_mode": {"type": "string"}, 457 | "replicas": {"type": "integer"}, 458 | "labels": {"$ref": "#/definitions/list_or_dict"}, 459 | "rollback_config": { 460 | "type": "object", 461 | "properties": { 462 | "parallelism": {"type": "integer"}, 463 | "delay": {"type": "string", "format": "duration"}, 464 | "failure_action": {"type": "string"}, 465 | "monitor": {"type": "string", "format": "duration"}, 466 | "max_failure_ratio": {"type": "number"}, 467 | "order": {"type": "string", "enum": [ 468 | "start-first", "stop-first" 469 | ]} 470 | }, 471 | "additionalProperties": false, 472 | "patternProperties": {"^x-": {}} 473 | }, 474 | "update_config": { 475 | "type": "object", 476 | "properties": { 477 | "parallelism": {"type": "integer"}, 478 | "delay": {"type": "string", "format": "duration"}, 479 | "failure_action": {"type": "string"}, 480 | "monitor": {"type": "string", "format": "duration"}, 481 | "max_failure_ratio": {"type": "number"}, 482 | "order": {"type": "string", "enum": [ 483 | "start-first", "stop-first" 484 | ]} 485 | }, 486 | "additionalProperties": false, 487 | "patternProperties": {"^x-": {}} 488 | }, 489 | "resources": { 490 | "type": "object", 491 | "properties": { 492 | "limits": { 493 | "type": "object", 494 | "properties": { 495 | "cpus": {"type": ["number", "string"]}, 496 | "memory": {"type": "string"}, 497 | "pids": {"type": "integer"} 498 | }, 499 | "additionalProperties": false, 500 | "patternProperties": {"^x-": {}} 501 | }, 502 | "reservations": { 503 | "type": "object", 504 | "properties": { 505 | "cpus": {"type": ["number", "string"]}, 506 | "memory": {"type": "string"}, 507 | "generic_resources": {"$ref": "#/definitions/generic_resources"}, 508 | "devices": {"$ref": "#/definitions/devices"} 509 | }, 510 | "additionalProperties": false, 511 | "patternProperties": {"^x-": {}} 512 | } 513 | }, 514 | "additionalProperties": false, 515 | "patternProperties": {"^x-": {}} 516 | }, 517 | "restart_policy": { 518 | "type": "object", 519 | "properties": { 520 | "condition": {"type": "string"}, 521 | "delay": {"type": "string", "format": "duration"}, 522 | "max_attempts": {"type": "integer"}, 523 | "window": {"type": "string", "format": "duration"} 524 | }, 525 | "additionalProperties": false, 526 | "patternProperties": {"^x-": {}} 527 | }, 528 | "placement": { 529 | "type": "object", 530 | "properties": { 531 | "constraints": {"type": "array", "items": {"type": "string"}}, 532 | "preferences": { 533 | "type": "array", 534 | "items": { 535 | "type": "object", 536 | "properties": { 537 | "spread": {"type": "string"} 538 | }, 539 | "additionalProperties": false, 540 | "patternProperties": {"^x-": {}} 541 | } 542 | }, 543 | "max_replicas_per_node": {"type": "integer"} 544 | }, 545 | "additionalProperties": false, 546 | "patternProperties": {"^x-": {}} 547 | } 548 | }, 549 | "additionalProperties": false, 550 | "patternProperties": {"^x-": {}} 551 | }, 552 | 553 | "generic_resources": { 554 | "id": "#/definitions/generic_resources", 555 | "type": "array", 556 | "items": { 557 | "type": "object", 558 | "properties": { 559 | "discrete_resource_spec": { 560 | "type": "object", 561 | "properties": { 562 | "kind": {"type": "string"}, 563 | "value": {"type": "number"} 564 | }, 565 | "additionalProperties": false, 566 | "patternProperties": {"^x-": {}} 567 | } 568 | }, 569 | "additionalProperties": false, 570 | "patternProperties": {"^x-": {}} 571 | } 572 | }, 573 | 574 | "devices": { 575 | "id": "#/definitions/devices", 576 | "type": "array", 577 | "items": { 578 | "type": "object", 579 | "properties": { 580 | "capabilities": {"$ref": "#/definitions/list_of_strings"}, 581 | "count": {"type": ["string", "integer"]}, 582 | "device_ids": {"$ref": "#/definitions/list_of_strings"}, 583 | "driver":{"type": "string"}, 584 | "options":{"$ref": "#/definitions/list_or_dict"} 585 | }, 586 | "additionalProperties": false, 587 | "patternProperties": {"^x-": {}} 588 | } 589 | }, 590 | 591 | "network": { 592 | "id": "#/definitions/network", 593 | "type": ["object", "null"], 594 | "properties": { 595 | "name": {"type": "string"}, 596 | "driver": {"type": "string"}, 597 | "driver_opts": { 598 | "type": "object", 599 | "patternProperties": { 600 | "^.+$": {"type": ["string", "number"]} 601 | } 602 | }, 603 | "ipam": { 604 | "type": "object", 605 | "properties": { 606 | "driver": {"type": "string"}, 607 | "config": { 608 | "type": "array", 609 | "items": { 610 | "type": "object", 611 | "properties": { 612 | "subnet": {"type": "string", "format": "subnet_ip_address"}, 613 | "ip_range": {"type": "string"}, 614 | "gateway": {"type": "string"}, 615 | "aux_addresses": { 616 | "type": "object", 617 | "additionalProperties": false, 618 | "patternProperties": {"^.+$": {"type": "string"}} 619 | } 620 | }, 621 | "additionalProperties": false, 622 | "patternProperties": {"^x-": {}} 623 | } 624 | }, 625 | "options": { 626 | "type": "object", 627 | "additionalProperties": false, 628 | "patternProperties": {"^.+$": {"type": "string"}} 629 | } 630 | }, 631 | "additionalProperties": false, 632 | "patternProperties": {"^x-": {}} 633 | }, 634 | "external": { 635 | "type": ["boolean", "object"], 636 | "properties": { 637 | "name": { 638 | "deprecated": true, 639 | "type": "string" 640 | } 641 | }, 642 | "additionalProperties": false, 643 | "patternProperties": {"^x-": {}} 644 | }, 645 | "internal": {"type": "boolean"}, 646 | "enable_ipv6": {"type": "boolean"}, 647 | "attachable": {"type": "boolean"}, 648 | "labels": {"$ref": "#/definitions/list_or_dict"} 649 | }, 650 | "additionalProperties": false, 651 | "patternProperties": {"^x-": {}} 652 | }, 653 | 654 | "volume": { 655 | "id": "#/definitions/volume", 656 | "type": ["object", "null"], 657 | "properties": { 658 | "name": {"type": "string"}, 659 | "driver": {"type": "string"}, 660 | "driver_opts": { 661 | "type": "object", 662 | "patternProperties": { 663 | "^.+$": {"type": ["string", "number"]} 664 | } 665 | }, 666 | "external": { 667 | "type": ["boolean", "object"], 668 | "properties": { 669 | "name": { 670 | "deprecated": true, 671 | "type": "string" 672 | } 673 | }, 674 | "additionalProperties": false, 675 | "patternProperties": {"^x-": {}} 676 | }, 677 | "labels": {"$ref": "#/definitions/list_or_dict"} 678 | }, 679 | "additionalProperties": false, 680 | "patternProperties": {"^x-": {}} 681 | }, 682 | 683 | "secret": { 684 | "id": "#/definitions/secret", 685 | "type": "object", 686 | "properties": { 687 | "name": {"type": "string"}, 688 | "environment": {"type": "string"}, 689 | "file": {"type": "string"}, 690 | "external": { 691 | "type": ["boolean", "object"], 692 | "properties": { 693 | "name": {"type": "string"} 694 | } 695 | }, 696 | "labels": {"$ref": "#/definitions/list_or_dict"}, 697 | "driver": {"type": "string"}, 698 | "driver_opts": { 699 | "type": "object", 700 | "patternProperties": { 701 | "^.+$": {"type": ["string", "number"]} 702 | } 703 | }, 704 | "template_driver": {"type": "string"} 705 | }, 706 | "additionalProperties": false, 707 | "patternProperties": {"^x-": {}} 708 | }, 709 | 710 | "config": { 711 | "id": "#/definitions/config", 712 | "type": "object", 713 | "properties": { 714 | "name": {"type": "string"}, 715 | "file": {"type": "string"}, 716 | "external": { 717 | "type": ["boolean", "object"], 718 | "properties": { 719 | "name": { 720 | "deprecated": true, 721 | "type": "string" 722 | } 723 | } 724 | }, 725 | "labels": {"$ref": "#/definitions/list_or_dict"}, 726 | "template_driver": {"type": "string"} 727 | }, 728 | "additionalProperties": false, 729 | "patternProperties": {"^x-": {}} 730 | }, 731 | 732 | "command": { 733 | "oneOf": [ 734 | {"type": "null"}, 735 | {"type": "string"}, 736 | {"type": "array","items": {"type": "string"}} 737 | ] 738 | }, 739 | 740 | "string_or_list": { 741 | "oneOf": [ 742 | {"type": "string"}, 743 | {"$ref": "#/definitions/list_of_strings"} 744 | ] 745 | }, 746 | 747 | "list_of_strings": { 748 | "type": "array", 749 | "items": {"type": "string"}, 750 | "uniqueItems": true 751 | }, 752 | 753 | "list_or_dict": { 754 | "oneOf": [ 755 | { 756 | "type": "object", 757 | "patternProperties": { 758 | ".+": { 759 | "type": ["string", "number", "boolean", "null"] 760 | } 761 | }, 762 | "additionalProperties": false 763 | }, 764 | {"type": "array", "items": {"type": "string"}, "uniqueItems": true} 765 | ] 766 | }, 767 | 768 | "blkio_limit": { 769 | "type": "object", 770 | "properties": { 771 | "path": {"type": "string"}, 772 | "rate": {"type": ["integer", "string"]} 773 | }, 774 | "additionalProperties": false 775 | }, 776 | "blkio_weight": { 777 | "type": "object", 778 | "properties": { 779 | "path": {"type": "string"}, 780 | "weight": {"type": "integer"} 781 | }, 782 | "additionalProperties": false 783 | }, 784 | 785 | "service_config_or_secret": { 786 | "type": "array", 787 | "items": { 788 | "oneOf": [ 789 | {"type": "string"}, 790 | { 791 | "type": "object", 792 | "properties": { 793 | "source": {"type": "string"}, 794 | "target": {"type": "string"}, 795 | "uid": {"type": "string"}, 796 | "gid": {"type": "string"}, 797 | "mode": {"type": "number"} 798 | }, 799 | "additionalProperties": false, 800 | "patternProperties": {"^x-": {}} 801 | } 802 | ] 803 | } 804 | }, 805 | 806 | "constraints": { 807 | "service": { 808 | "id": "#/definitions/constraints/service", 809 | "anyOf": [ 810 | {"required": ["build"]}, 811 | {"required": ["image"]} 812 | ], 813 | "properties": { 814 | "build": { 815 | "required": ["context"] 816 | } 817 | } 818 | } 819 | } 820 | } 821 | } 822 | -------------------------------------------------------------------------------- /jest.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('ts-jest').JestConfigWithTsJest} */ 2 | module.exports = { 3 | preset: 'ts-jest', 4 | testEnvironment: 'node', 5 | transform: { 6 | '^.+\\.ts?$': 'ts-jest', 7 | }, 8 | testRegex: 'test/.*\\.test\\.ts$', 9 | }; 10 | -------------------------------------------------------------------------------- /kube-spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "oneOf": [ 3 | { 4 | "$ref": "_definitions.json#/definitions/io.k8s.api.apps.v1.Deployment." 5 | }, 6 | { 7 | "$ref": "_definitions.json#/definitions/io.k8s.api.core.v1.Service." 8 | } 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "docker2kube", 3 | "version": "0.0.14", 4 | "scripts": { 5 | "build": "tsc", 6 | "start": "ts-node src/cli.ts", 7 | "test": "jest", 8 | "prepublish": "tsc" 9 | }, 10 | "module": "dist/index.js", 11 | "author": "dohsimpson", 12 | "license": "MIT", 13 | "dependencies": { 14 | "yaml": "^2.3.1" 15 | }, 16 | "devDependencies": { 17 | "@types/jest": "^29.5.3", 18 | "jest": "^29.6.1", 19 | "json-schema-to-typescript": "^13.0.1", 20 | "ts-jest": "^29.1.1", 21 | "typescript": "^5.1.6" 22 | }, 23 | "types": "dist/index.d.ts", 24 | "files": [ 25 | "dist" 26 | ] 27 | } 28 | -------------------------------------------------------------------------------- /src/cli.ts: -------------------------------------------------------------------------------- 1 | import convert from './index'; 2 | import fs from 'fs'; 3 | 4 | function main() { 5 | // read from file 6 | const yaml = fs.readFileSync("/tmp/compose.yaml").toString(); 7 | const ret = convert(yaml); 8 | console.log(ret); 9 | } 10 | 11 | main(); 12 | -------------------------------------------------------------------------------- /src/composeTypes.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | /** 3 | * This file was automatically generated by json-schema-to-typescript. 4 | * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file, 5 | * and run json-schema-to-typescript to regenerate this file. 6 | */ 7 | 8 | export type DefinitionsDeployment = { 9 | mode?: string; 10 | endpoint_mode?: string; 11 | replicas?: number; 12 | labels?: ListOrDict; 13 | rollback_config?: { 14 | parallelism?: number; 15 | delay?: string; 16 | failure_action?: string; 17 | monitor?: string; 18 | max_failure_ratio?: number; 19 | order?: "start-first" | "stop-first"; 20 | /** 21 | * This interface was referenced by `undefined`'s JSON-Schema definition 22 | * via the `patternProperty` "^x-". 23 | */ 24 | [k: string]: unknown; 25 | }; 26 | update_config?: { 27 | parallelism?: number; 28 | delay?: string; 29 | failure_action?: string; 30 | monitor?: string; 31 | max_failure_ratio?: number; 32 | order?: "start-first" | "stop-first"; 33 | /** 34 | * This interface was referenced by `undefined`'s JSON-Schema definition 35 | * via the `patternProperty` "^x-". 36 | */ 37 | [k: string]: unknown; 38 | }; 39 | resources?: { 40 | limits?: { 41 | cpus?: number | string; 42 | memory?: string; 43 | pids?: number; 44 | /** 45 | * This interface was referenced by `undefined`'s JSON-Schema definition 46 | * via the `patternProperty` "^x-". 47 | */ 48 | [k: string]: unknown; 49 | }; 50 | reservations?: { 51 | cpus?: number | string; 52 | memory?: string; 53 | generic_resources?: DefinitionsGenericResources; 54 | devices?: DefinitionsDevices; 55 | /** 56 | * This interface was referenced by `undefined`'s JSON-Schema definition 57 | * via the `patternProperty` "^x-". 58 | */ 59 | [k: string]: unknown; 60 | }; 61 | /** 62 | * This interface was referenced by `undefined`'s JSON-Schema definition 63 | * via the `patternProperty` "^x-". 64 | */ 65 | [k: string]: unknown; 66 | }; 67 | restart_policy?: { 68 | condition?: string; 69 | delay?: string; 70 | max_attempts?: number; 71 | window?: string; 72 | /** 73 | * This interface was referenced by `undefined`'s JSON-Schema definition 74 | * via the `patternProperty` "^x-". 75 | */ 76 | [k: string]: unknown; 77 | }; 78 | placement?: { 79 | constraints?: string[]; 80 | preferences?: { 81 | spread?: string; 82 | /** 83 | * This interface was referenced by `undefined`'s JSON-Schema definition 84 | * via the `patternProperty` "^x-". 85 | */ 86 | [k: string]: unknown; 87 | }[]; 88 | max_replicas_per_node?: number; 89 | /** 90 | * This interface was referenced by `undefined`'s JSON-Schema definition 91 | * via the `patternProperty` "^x-". 92 | */ 93 | [k: string]: unknown; 94 | }; 95 | /** 96 | * This interface was referenced by `undefined`'s JSON-Schema definition 97 | * via the `patternProperty` "^x-". 98 | * 99 | * This interface was referenced by `undefined`'s JSON-Schema definition 100 | * via the `patternProperty` "^x-". 101 | */ 102 | [k: string]: unknown; 103 | } & Deployment; 104 | export type ListOrDict = 105 | | { 106 | /** 107 | * This interface was referenced by `undefined`'s JSON-Schema definition 108 | * via the `patternProperty` ".+". 109 | */ 110 | [k: string]: string | number | boolean | null; 111 | } 112 | | string[]; 113 | export type DefinitionsGenericResources = { 114 | discrete_resource_spec?: { 115 | kind?: string; 116 | value?: number; 117 | /** 118 | * This interface was referenced by `undefined`'s JSON-Schema definition 119 | * via the `patternProperty` "^x-". 120 | */ 121 | [k: string]: unknown; 122 | }; 123 | /** 124 | * This interface was referenced by `undefined`'s JSON-Schema definition 125 | * via the `patternProperty` "^x-". 126 | */ 127 | [k: string]: unknown; 128 | }[]; 129 | export type ListOfStrings = string[]; 130 | export type DefinitionsDevices = { 131 | capabilities?: ListOfStrings; 132 | count?: string | number; 133 | device_ids?: ListOfStrings; 134 | driver?: string; 135 | options?: ListOrDict; 136 | /** 137 | * This interface was referenced by `undefined`'s JSON-Schema definition 138 | * via the `patternProperty` "^x-". 139 | */ 140 | [k: string]: unknown; 141 | }[]; 142 | export type Deployment = { 143 | mode?: string; 144 | endpoint_mode?: string; 145 | replicas?: number; 146 | labels?: ListOrDict; 147 | rollback_config?: { 148 | parallelism?: number; 149 | delay?: string; 150 | failure_action?: string; 151 | monitor?: string; 152 | max_failure_ratio?: number; 153 | order?: "start-first" | "stop-first"; 154 | /** 155 | * This interface was referenced by `undefined`'s JSON-Schema definition 156 | * via the `patternProperty` "^x-". 157 | */ 158 | [k: string]: unknown; 159 | }; 160 | update_config?: { 161 | parallelism?: number; 162 | delay?: string; 163 | failure_action?: string; 164 | monitor?: string; 165 | max_failure_ratio?: number; 166 | order?: "start-first" | "stop-first"; 167 | /** 168 | * This interface was referenced by `undefined`'s JSON-Schema definition 169 | * via the `patternProperty` "^x-". 170 | */ 171 | [k: string]: unknown; 172 | }; 173 | resources?: { 174 | limits?: { 175 | cpus?: number | string; 176 | memory?: string; 177 | pids?: number; 178 | /** 179 | * This interface was referenced by `undefined`'s JSON-Schema definition 180 | * via the `patternProperty` "^x-". 181 | */ 182 | [k: string]: unknown; 183 | }; 184 | reservations?: { 185 | cpus?: number | string; 186 | memory?: string; 187 | generic_resources?: DefinitionsGenericResources; 188 | devices?: DefinitionsDevices; 189 | /** 190 | * This interface was referenced by `undefined`'s JSON-Schema definition 191 | * via the `patternProperty` "^x-". 192 | */ 193 | [k: string]: unknown; 194 | }; 195 | /** 196 | * This interface was referenced by `undefined`'s JSON-Schema definition 197 | * via the `patternProperty` "^x-". 198 | */ 199 | [k: string]: unknown; 200 | }; 201 | restart_policy?: { 202 | condition?: string; 203 | delay?: string; 204 | max_attempts?: number; 205 | window?: string; 206 | /** 207 | * This interface was referenced by `undefined`'s JSON-Schema definition 208 | * via the `patternProperty` "^x-". 209 | */ 210 | [k: string]: unknown; 211 | }; 212 | placement?: { 213 | constraints?: string[]; 214 | preferences?: { 215 | spread?: string; 216 | /** 217 | * This interface was referenced by `undefined`'s JSON-Schema definition 218 | * via the `patternProperty` "^x-". 219 | */ 220 | [k: string]: unknown; 221 | }[]; 222 | max_replicas_per_node?: number; 223 | /** 224 | * This interface was referenced by `undefined`'s JSON-Schema definition 225 | * via the `patternProperty` "^x-". 226 | */ 227 | [k: string]: unknown; 228 | }; 229 | /** 230 | * This interface was referenced by `undefined`'s JSON-Schema definition 231 | * via the `patternProperty` "^x-". 232 | * 233 | * This interface was referenced by `undefined`'s JSON-Schema definition 234 | * via the `patternProperty` "^x-". 235 | */ 236 | [k: string]: unknown; 237 | } | null; 238 | export type ServiceConfigOrSecret = ( 239 | | string 240 | | { 241 | source?: string; 242 | target?: string; 243 | uid?: string; 244 | gid?: string; 245 | mode?: number; 246 | /** 247 | * This interface was referenced by `undefined`'s JSON-Schema definition 248 | * via the `patternProperty` "^x-". 249 | */ 250 | [k: string]: unknown; 251 | } 252 | )[]; 253 | export type Command = null | string | string[]; 254 | export type StringOrList = string | ListOfStrings; 255 | /** 256 | * This interface was referenced by `PropertiesNetworks`'s JSON-Schema definition 257 | * via the `patternProperty` "^[a-zA-Z0-9._-]+$". 258 | */ 259 | export type DefinitionsNetwork = { 260 | name?: string; 261 | driver?: string; 262 | driver_opts?: { 263 | /** 264 | * This interface was referenced by `undefined`'s JSON-Schema definition 265 | * via the `patternProperty` "^.+$". 266 | */ 267 | [k: string]: string | number; 268 | }; 269 | ipam?: { 270 | driver?: string; 271 | config?: { 272 | subnet?: string; 273 | ip_range?: string; 274 | gateway?: string; 275 | aux_addresses?: { 276 | /** 277 | * This interface was referenced by `undefined`'s JSON-Schema definition 278 | * via the `patternProperty` "^.+$". 279 | */ 280 | [k: string]: string; 281 | }; 282 | /** 283 | * This interface was referenced by `undefined`'s JSON-Schema definition 284 | * via the `patternProperty` "^x-". 285 | */ 286 | [k: string]: unknown; 287 | }[]; 288 | options?: { 289 | /** 290 | * This interface was referenced by `undefined`'s JSON-Schema definition 291 | * via the `patternProperty` "^.+$". 292 | */ 293 | [k: string]: string; 294 | }; 295 | /** 296 | * This interface was referenced by `undefined`'s JSON-Schema definition 297 | * via the `patternProperty` "^x-". 298 | */ 299 | [k: string]: unknown; 300 | }; 301 | external?: 302 | | boolean 303 | | { 304 | name?: string; 305 | /** 306 | * This interface was referenced by `undefined`'s JSON-Schema definition 307 | * via the `patternProperty` "^x-". 308 | */ 309 | [k: string]: unknown; 310 | }; 311 | internal?: boolean; 312 | enable_ipv6?: boolean; 313 | attachable?: boolean; 314 | labels?: ListOrDict; 315 | /** 316 | * This interface was referenced by `undefined`'s JSON-Schema definition 317 | * via the `patternProperty` "^x-". 318 | * 319 | * This interface was referenced by `undefined`'s JSON-Schema definition 320 | * via the `patternProperty` "^x-". 321 | */ 322 | [k: string]: unknown; 323 | } & Network; 324 | export type Network = { 325 | name?: string; 326 | driver?: string; 327 | driver_opts?: { 328 | /** 329 | * This interface was referenced by `undefined`'s JSON-Schema definition 330 | * via the `patternProperty` "^.+$". 331 | */ 332 | [k: string]: string | number; 333 | }; 334 | ipam?: { 335 | driver?: string; 336 | config?: { 337 | subnet?: string; 338 | ip_range?: string; 339 | gateway?: string; 340 | aux_addresses?: { 341 | /** 342 | * This interface was referenced by `undefined`'s JSON-Schema definition 343 | * via the `patternProperty` "^.+$". 344 | */ 345 | [k: string]: string; 346 | }; 347 | /** 348 | * This interface was referenced by `undefined`'s JSON-Schema definition 349 | * via the `patternProperty` "^x-". 350 | */ 351 | [k: string]: unknown; 352 | }[]; 353 | options?: { 354 | /** 355 | * This interface was referenced by `undefined`'s JSON-Schema definition 356 | * via the `patternProperty` "^.+$". 357 | */ 358 | [k: string]: string; 359 | }; 360 | /** 361 | * This interface was referenced by `undefined`'s JSON-Schema definition 362 | * via the `patternProperty` "^x-". 363 | */ 364 | [k: string]: unknown; 365 | }; 366 | external?: 367 | | boolean 368 | | { 369 | name?: string; 370 | /** 371 | * This interface was referenced by `undefined`'s JSON-Schema definition 372 | * via the `patternProperty` "^x-". 373 | */ 374 | [k: string]: unknown; 375 | }; 376 | internal?: boolean; 377 | enable_ipv6?: boolean; 378 | attachable?: boolean; 379 | labels?: ListOrDict; 380 | /** 381 | * This interface was referenced by `undefined`'s JSON-Schema definition 382 | * via the `patternProperty` "^x-". 383 | * 384 | * This interface was referenced by `undefined`'s JSON-Schema definition 385 | * via the `patternProperty` "^x-". 386 | */ 387 | [k: string]: unknown; 388 | } | null; 389 | /** 390 | * This interface was referenced by `PropertiesVolumes`'s JSON-Schema definition 391 | * via the `patternProperty` "^[a-zA-Z0-9._-]+$". 392 | */ 393 | export type DefinitionsVolume = { 394 | name?: string; 395 | driver?: string; 396 | driver_opts?: { 397 | /** 398 | * This interface was referenced by `undefined`'s JSON-Schema definition 399 | * via the `patternProperty` "^.+$". 400 | */ 401 | [k: string]: string | number; 402 | }; 403 | external?: 404 | | boolean 405 | | { 406 | name?: string; 407 | /** 408 | * This interface was referenced by `undefined`'s JSON-Schema definition 409 | * via the `patternProperty` "^x-". 410 | */ 411 | [k: string]: unknown; 412 | }; 413 | labels?: ListOrDict; 414 | /** 415 | * This interface was referenced by `undefined`'s JSON-Schema definition 416 | * via the `patternProperty` "^x-". 417 | * 418 | * This interface was referenced by `undefined`'s JSON-Schema definition 419 | * via the `patternProperty` "^x-". 420 | */ 421 | [k: string]: unknown; 422 | } & Volume; 423 | export type Volume = { 424 | name?: string; 425 | driver?: string; 426 | driver_opts?: { 427 | /** 428 | * This interface was referenced by `undefined`'s JSON-Schema definition 429 | * via the `patternProperty` "^.+$". 430 | */ 431 | [k: string]: string | number; 432 | }; 433 | external?: 434 | | boolean 435 | | { 436 | name?: string; 437 | /** 438 | * This interface was referenced by `undefined`'s JSON-Schema definition 439 | * via the `patternProperty` "^x-". 440 | */ 441 | [k: string]: unknown; 442 | }; 443 | labels?: ListOrDict; 444 | /** 445 | * This interface was referenced by `undefined`'s JSON-Schema definition 446 | * via the `patternProperty` "^x-". 447 | * 448 | * This interface was referenced by `undefined`'s JSON-Schema definition 449 | * via the `patternProperty` "^x-". 450 | */ 451 | [k: string]: unknown; 452 | } | null; 453 | 454 | /** 455 | * The Compose file is a YAML file defining a multi-containers based application. 456 | */ 457 | export interface ComposeSpecification { 458 | /** 459 | * declared for backward compatibility, ignored. 460 | */ 461 | version?: string; 462 | /** 463 | * define the Compose project name, until user defines one explicitly. 464 | */ 465 | name?: string; 466 | services?: PropertiesServices; 467 | networks?: PropertiesNetworks; 468 | volumes?: PropertiesVolumes; 469 | secrets?: PropertiesSecrets; 470 | configs?: PropertiesConfigs; 471 | /** 472 | * This interface was referenced by `ComposeSpecification`'s JSON-Schema definition 473 | * via the `patternProperty` "^x-". 474 | */ 475 | [k: string]: unknown; 476 | } 477 | export interface PropertiesServices { 478 | [k: string]: DefinitionsService; 479 | } 480 | /** 481 | * This interface was referenced by `PropertiesServices`'s JSON-Schema definition 482 | * via the `patternProperty` "^[a-zA-Z0-9._-]+$". 483 | */ 484 | export interface DefinitionsService { 485 | deploy?: DefinitionsDeployment; 486 | annotations?: ListOrDict; 487 | build?: 488 | | string 489 | | { 490 | context?: string; 491 | dockerfile?: string; 492 | dockerfile_inline?: string; 493 | args?: ListOrDict; 494 | ssh?: ListOrDict; 495 | labels?: ListOrDict; 496 | cache_from?: string[]; 497 | cache_to?: string[]; 498 | no_cache?: boolean; 499 | additional_contexts?: ListOrDict; 500 | network?: string; 501 | pull?: boolean; 502 | target?: string; 503 | shm_size?: number | string; 504 | extra_hosts?: ListOrDict; 505 | isolation?: string; 506 | privileged?: boolean; 507 | secrets?: ServiceConfigOrSecret; 508 | tags?: string[]; 509 | platforms?: string[]; 510 | /** 511 | * This interface was referenced by `undefined`'s JSON-Schema definition 512 | * via the `patternProperty` "^x-". 513 | */ 514 | [k: string]: unknown; 515 | }; 516 | blkio_config?: { 517 | device_read_bps?: BlkioLimit[]; 518 | device_read_iops?: BlkioLimit[]; 519 | device_write_bps?: BlkioLimit[]; 520 | device_write_iops?: BlkioLimit[]; 521 | weight?: number; 522 | weight_device?: BlkioWeight[]; 523 | }; 524 | cap_add?: string[]; 525 | cap_drop?: string[]; 526 | cgroup?: "host" | "private"; 527 | cgroup_parent?: string; 528 | command?: Command; 529 | configs?: ServiceConfigOrSecret; 530 | container_name?: string; 531 | cpu_count?: number; 532 | cpu_percent?: number; 533 | cpu_shares?: number | string; 534 | cpu_quota?: number | string; 535 | cpu_period?: number | string; 536 | cpu_rt_period?: number | string; 537 | cpu_rt_runtime?: number | string; 538 | cpus?: number | string; 539 | cpuset?: string; 540 | credential_spec?: { 541 | config?: string; 542 | file?: string; 543 | registry?: string; 544 | /** 545 | * This interface was referenced by `undefined`'s JSON-Schema definition 546 | * via the `patternProperty` "^x-". 547 | */ 548 | [k: string]: unknown; 549 | }; 550 | depends_on?: 551 | | ListOfStrings 552 | | { 553 | /** 554 | * This interface was referenced by `undefined`'s JSON-Schema definition 555 | * via the `patternProperty` "^[a-zA-Z0-9._-]+$". 556 | */ 557 | [k: string]: { 558 | restart?: boolean; 559 | condition: "service_started" | "service_healthy" | "service_completed_successfully"; 560 | }; 561 | }; 562 | device_cgroup_rules?: ListOfStrings; 563 | devices?: string[]; 564 | dns?: StringOrList; 565 | dns_opt?: string[]; 566 | dns_search?: StringOrList; 567 | domainname?: string; 568 | entrypoint?: Command; 569 | env_file?: StringOrList; 570 | environment?: ListOrDict; 571 | expose?: (string | number)[]; 572 | extends?: 573 | | string 574 | | { 575 | service: string; 576 | file?: string; 577 | }; 578 | external_links?: string[]; 579 | extra_hosts?: ListOrDict; 580 | group_add?: (string | number)[]; 581 | healthcheck?: DefinitionsHealthcheck; 582 | hostname?: string; 583 | image?: string; 584 | init?: boolean; 585 | ipc?: string; 586 | isolation?: string; 587 | labels?: ListOrDict; 588 | links?: string[]; 589 | logging?: { 590 | driver?: string; 591 | options?: { 592 | /** 593 | * This interface was referenced by `undefined`'s JSON-Schema definition 594 | * via the `patternProperty` "^.+$". 595 | */ 596 | [k: string]: string | number | null; 597 | }; 598 | /** 599 | * This interface was referenced by `undefined`'s JSON-Schema definition 600 | * via the `patternProperty` "^x-". 601 | */ 602 | [k: string]: unknown; 603 | }; 604 | mac_address?: string; 605 | mem_limit?: number | string; 606 | mem_reservation?: string | number; 607 | mem_swappiness?: number; 608 | memswap_limit?: number | string; 609 | network_mode?: string; 610 | networks?: 611 | | ListOfStrings 612 | | { 613 | /** 614 | * This interface was referenced by `undefined`'s JSON-Schema definition 615 | * via the `patternProperty` "^[a-zA-Z0-9._-]+$". 616 | */ 617 | [k: string]: { 618 | aliases?: ListOfStrings; 619 | ipv4_address?: string; 620 | ipv6_address?: string; 621 | link_local_ips?: ListOfStrings; 622 | priority?: number; 623 | /** 624 | * This interface was referenced by `undefined`'s JSON-Schema definition 625 | * via the `patternProperty` "^x-". 626 | */ 627 | [k: string]: unknown; 628 | } | null; 629 | }; 630 | oom_kill_disable?: boolean; 631 | oom_score_adj?: number; 632 | pid?: string | null; 633 | pids_limit?: number | string; 634 | platform?: string; 635 | ports?: ( 636 | | number 637 | | string 638 | | { 639 | mode?: string; 640 | host_ip?: string; 641 | target?: number; 642 | published?: string | number; 643 | protocol?: string; 644 | /** 645 | * This interface was referenced by `undefined`'s JSON-Schema definition 646 | * via the `patternProperty` "^x-". 647 | */ 648 | [k: string]: unknown; 649 | } 650 | )[]; 651 | privileged?: boolean; 652 | profiles?: ListOfStrings; 653 | pull_policy?: "always" | "never" | "if_not_present" | "build" | "missing"; 654 | read_only?: boolean; 655 | restart?: string; 656 | runtime?: string; 657 | scale?: number; 658 | security_opt?: string[]; 659 | shm_size?: number | string; 660 | secrets?: ServiceConfigOrSecret; 661 | sysctls?: ListOrDict; 662 | stdin_open?: boolean; 663 | stop_grace_period?: string; 664 | stop_signal?: string; 665 | storage_opt?: { 666 | [k: string]: unknown; 667 | }; 668 | tmpfs?: StringOrList; 669 | tty?: boolean; 670 | ulimits?: { 671 | /** 672 | * This interface was referenced by `undefined`'s JSON-Schema definition 673 | * via the `patternProperty` "^[a-z]+$". 674 | */ 675 | [k: string]: 676 | | number 677 | | { 678 | hard: number; 679 | soft: number; 680 | /** 681 | * This interface was referenced by `undefined`'s JSON-Schema definition 682 | * via the `patternProperty` "^x-". 683 | */ 684 | [k: string]: unknown; 685 | }; 686 | }; 687 | user?: string; 688 | uts?: string; 689 | userns_mode?: string; 690 | volumes?: ( 691 | | string 692 | | { 693 | type: string; 694 | source?: string; 695 | target?: string; 696 | read_only?: boolean; 697 | consistency?: string; 698 | bind?: { 699 | propagation?: string; 700 | create_host_path?: boolean; 701 | selinux?: "z" | "Z"; 702 | /** 703 | * This interface was referenced by `undefined`'s JSON-Schema definition 704 | * via the `patternProperty` "^x-". 705 | */ 706 | [k: string]: unknown; 707 | }; 708 | volume?: { 709 | nocopy?: boolean; 710 | /** 711 | * This interface was referenced by `undefined`'s JSON-Schema definition 712 | * via the `patternProperty` "^x-". 713 | */ 714 | [k: string]: unknown; 715 | }; 716 | tmpfs?: { 717 | size?: number | string; 718 | mode?: number; 719 | /** 720 | * This interface was referenced by `undefined`'s JSON-Schema definition 721 | * via the `patternProperty` "^x-". 722 | */ 723 | [k: string]: unknown; 724 | }; 725 | /** 726 | * This interface was referenced by `undefined`'s JSON-Schema definition 727 | * via the `patternProperty` "^x-". 728 | */ 729 | [k: string]: unknown; 730 | } 731 | )[]; 732 | volumes_from?: string[]; 733 | working_dir?: string; 734 | /** 735 | * This interface was referenced by `DefinitionsService`'s JSON-Schema definition 736 | * via the `patternProperty` "^x-". 737 | */ 738 | [k: string]: unknown; 739 | } 740 | export interface BlkioLimit { 741 | path?: string; 742 | rate?: number | string; 743 | } 744 | export interface BlkioWeight { 745 | path?: string; 746 | weight?: number; 747 | } 748 | export interface DefinitionsHealthcheck { 749 | disable?: boolean; 750 | interval?: string; 751 | retries?: number; 752 | test?: string | string[]; 753 | timeout?: string; 754 | start_period?: string; 755 | /** 756 | * This interface was referenced by `DefinitionsHealthcheck`'s JSON-Schema definition 757 | * via the `patternProperty` "^x-". 758 | */ 759 | [k: string]: unknown; 760 | } 761 | export interface PropertiesNetworks { 762 | [k: string]: DefinitionsNetwork; 763 | } 764 | export interface PropertiesVolumes { 765 | [k: string]: DefinitionsVolume; 766 | } 767 | export interface PropertiesSecrets { 768 | [k: string]: DefinitionsSecret; 769 | } 770 | /** 771 | * This interface was referenced by `PropertiesSecrets`'s JSON-Schema definition 772 | * via the `patternProperty` "^[a-zA-Z0-9._-]+$". 773 | */ 774 | export interface DefinitionsSecret { 775 | name?: string; 776 | environment?: string; 777 | file?: string; 778 | external?: 779 | | boolean 780 | | { 781 | name?: string; 782 | [k: string]: unknown; 783 | }; 784 | labels?: ListOrDict; 785 | driver?: string; 786 | driver_opts?: { 787 | /** 788 | * This interface was referenced by `undefined`'s JSON-Schema definition 789 | * via the `patternProperty` "^.+$". 790 | */ 791 | [k: string]: string | number; 792 | }; 793 | template_driver?: string; 794 | /** 795 | * This interface was referenced by `DefinitionsSecret`'s JSON-Schema definition 796 | * via the `patternProperty` "^x-". 797 | */ 798 | [k: string]: unknown; 799 | } 800 | export interface PropertiesConfigs { 801 | [k: string]: DefinitionsConfig; 802 | } 803 | /** 804 | * This interface was referenced by `PropertiesConfigs`'s JSON-Schema definition 805 | * via the `patternProperty` "^[a-zA-Z0-9._-]+$". 806 | */ 807 | export interface DefinitionsConfig { 808 | name?: string; 809 | file?: string; 810 | external?: 811 | | boolean 812 | | { 813 | name?: string; 814 | [k: string]: unknown; 815 | }; 816 | labels?: ListOrDict; 817 | template_driver?: string; 818 | /** 819 | * This interface was referenced by `DefinitionsConfig`'s JSON-Schema definition 820 | * via the `patternProperty` "^x-". 821 | */ 822 | [k: string]: unknown; 823 | } 824 | -------------------------------------------------------------------------------- /src/helpers.ts: -------------------------------------------------------------------------------- 1 | export function convertDurationToNumber(duration: string): number { 2 | // Values express a duration as a string in the form of {value}{unit}. The supported units are us (microseconds), ms (milliseconds), s (seconds), m (minutes) and h (hours). Values can combine multiple values without separator. 3 | // https://github.com/compose-spec/compose-spec/blob/master/11-extension.md#specifying-durations 4 | // e.g. 1h5m30s20ms 5 | const regex = /(?\d+)(?[a-z]+)/g; 6 | const matches = Array.from(duration.matchAll(regex)); 7 | const multipliers: {[k: string]: number} = { 8 | us: 1, 9 | ms: 1000, 10 | s: 1000 * 1000, 11 | m: 1000 * 1000 * 60, 12 | h: 1000 * 1000 * 60 * 60, 13 | } 14 | const total = matches.reduce((acc, match) => { 15 | const { value, unit } = match.groups!; 16 | const multiplier = multipliers[unit as string]; 17 | if (!multiplier) { 18 | throw new Error(`unexpected unit: ${unit}`); 19 | } 20 | return acc + parseInt(value) * multiplier; 21 | } , 0); 22 | // convert microseconds to seconds 23 | return total / 1000 / 1000; 24 | } 25 | 26 | export function convertName(name: string): string { 27 | // convert a string to a valid RFC 1123 hostname, compliant with Kubernetes naming requirements 28 | let result = name.toLowerCase(); 29 | result = result.replace(/[^a-z0-9-]/g, '-'); 30 | // must start and end with alphanumeric characters 31 | result = result.replace(/^-+/, ''); 32 | result = result.replace(/-+$/, ''); 33 | return result; 34 | } 35 | 36 | export function generateRandomString(): string { 37 | const result = 'generated-' + Math.random().toString(36).substring(2, 15); 38 | return result; 39 | } 40 | 41 | export function parseCommand(command: string): string[] { 42 | // parse a command string into an array of strings 43 | // e.g. "echo hello" => ["echo", "hello"] 44 | // e.g. "echo 'hello world'" => ["echo", "hello world"] 45 | // e.g. "echo \"hello world\"" => ["echo", "hello world"] 46 | // e.g. "echo \"hello 'world'\"" => ["echo", "hello 'world'"] 47 | 48 | const result: string[] = []; 49 | let current = ''; 50 | let quote = ''; 51 | for (let i = 0; i < command.length; i++) { 52 | const char = command[i]; 53 | if (char === ' ' && !quote) { 54 | if (current) { 55 | result.push(current); 56 | current = ''; 57 | } 58 | } else if (char === '"' || char === "'") { 59 | if (quote === char) { 60 | quote = ''; 61 | } else if (!quote) { 62 | quote = char; 63 | } else { 64 | current += char; 65 | } 66 | } else { 67 | current += char; 68 | } 69 | } 70 | if (current) { 71 | result.push(current); 72 | } 73 | return result; 74 | } 75 | 76 | export function splitOnFirst(str: string, separator: string): [string, string] { 77 | const index = str.indexOf(separator); 78 | if (index === -1) { 79 | return [str, '']; 80 | } 81 | return [str.slice(0, index), str.slice(index + 1)]; 82 | } 83 | 84 | export function fail(): never { 85 | throw new Error('unexpected error') 86 | }; 87 | -------------------------------------------------------------------------------- /src/index.d.ts: -------------------------------------------------------------------------------- 1 | export * from './index'; 2 | export as namespace docker2kube; 3 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import { parse, stringify } from 'yaml' 2 | 3 | import { Iok8SApiAppsV1Deployment, Iok8SApiCoreV1Capabilities, Iok8SApiCoreV1Container, Iok8SApiCoreV1ContainerPort, Iok8SApiCoreV1EnvVar, Iok8SApiCoreV1ExecAction, Iok8SApiCoreV1PodSecurityContext, Iok8SApiCoreV1Probe, Iok8SApiCoreV1ResourceRequirements, Iok8SApiCoreV1SecurityContext, Iok8SApiCoreV1Service, Iok8SApiCoreV1ServicePort, Iok8SApiCoreV1ServiceSpec, Iok8SApiCoreV1Volume, Iok8SApiCoreV1VolumeMount, Iok8SApimachineryPkgApisMetaV1ObjectMeta3, KubeSpec } from './kubeTypes' 4 | import { ComposeSpecification } from './composeTypes' 5 | 6 | import { fail, convertDurationToNumber, convertName, generateRandomString, parseCommand, splitOnFirst } from './helpers' 7 | 8 | export function convert(yaml: string): string { 9 | interface D2KConfig { 10 | namespace?: string; 11 | } 12 | 13 | const config: D2KConfig = { namespace: 'default' }; 14 | 15 | const obj = parse(yaml) 16 | 17 | const composeObj: ComposeSpecification = obj as ComposeSpecification; 18 | 19 | const kubeSpecList: KubeSpec[] = [] as KubeSpec[]; 20 | 21 | // build compose service 22 | for (let name in composeObj.services) { 23 | const kubeDeployObj: Iok8SApiAppsV1Deployment = {} as Iok8SApiAppsV1Deployment; 24 | kubeDeployObj.apiVersion = 'apps/v1'; 25 | kubeDeployObj.kind = 'Deployment'; 26 | 27 | const service = composeObj.services[name]; 28 | name = service.container_name || name; // use container_name as name if it exists 29 | 30 | name = convertName(name); 31 | 32 | // deployment.metadata 33 | kubeDeployObj.metadata = kubeDeployObj.metadata || {}; 34 | kubeDeployObj.metadata.name = name; 35 | kubeDeployObj.metadata.namespace = config.namespace; 36 | kubeDeployObj.metadata.labels = kubeDeployObj.metadata.labels || {}; 37 | kubeDeployObj.metadata.labels.app = name; 38 | kubeDeployObj.metadata.annotations = kubeDeployObj.metadata.annotations || {}; 39 | if (service.labels) { 40 | if (Array.isArray(service.labels)) { 41 | for (const label of service.labels) { 42 | const [key, value] = label.split('='); 43 | kubeDeployObj.metadata.annotations[key] = value || ''; 44 | } 45 | } else { 46 | for (const key in service.labels) { 47 | kubeDeployObj.metadata.annotations[key] = service.labels[key]?.toString() || ''; 48 | } 49 | } 50 | } 51 | 52 | 53 | // deployment.spec 54 | kubeDeployObj.spec = kubeDeployObj.spec || {selector: {}, template: {}}; 55 | 56 | // deployment.spec.replicas 57 | kubeDeployObj.spec.replicas = service.deploy?.replicas || 1; 58 | 59 | // deployment.spec.selector 60 | kubeDeployObj.spec.selector.matchLabels = kubeDeployObj.spec.selector.matchLabels || {}; 61 | kubeDeployObj.spec.selector.matchLabels.app = name; 62 | 63 | // deployment.spec.template 64 | kubeDeployObj.spec.template.metadata = kubeDeployObj.spec.template.metadata || {}; 65 | kubeDeployObj.spec.template.metadata.labels = kubeDeployObj.spec.template.metadata.labels || {}; 66 | kubeDeployObj.spec.template.metadata.labels.app = name; 67 | 68 | // deployment.spec.template.spec 69 | kubeDeployObj.spec.template.spec = kubeDeployObj.spec.template.spec || {containers: []}; 70 | 71 | // deployment.spec.template.spec.hostname 72 | kubeDeployObj.spec.template.spec.hostname = service.hostname; 73 | 74 | // deployment.spec.template.spec.hostPID 75 | if (service.pid) { 76 | kubeDeployObj.spec.template.spec.hostPID = service.pid === 'host'; 77 | } 78 | 79 | // deployment.spec.template.spec.terminateGracePeriodSeconds 80 | if (service.stop_grace_period) { 81 | kubeDeployObj.spec.template.spec.terminationGracePeriodSeconds = convertDurationToNumber(service.stop_grace_period); 82 | } 83 | 84 | // deployment.spec.template.spec.containers 85 | const container: Iok8SApiCoreV1Container = {} as Iok8SApiCoreV1Container; 86 | container.name = name; 87 | container.image = service.image || 'PLACEHOLDER'; 88 | container.args = typeof service.command === 'string' ? 89 | parseCommand(service.command) : 90 | service.command === null ? undefined : service.command; 91 | container.command = typeof service.entrypoint === 'string' ? 92 | service.entrypoint.split(/\s+/) : 93 | service.entrypoint === null ? undefined : service.entrypoint; 94 | 95 | // deployment.spec.template.spec.volumes and deployment.spec.template.spec.containers.volumeMounts 96 | if (service.volumes) { 97 | kubeDeployObj.spec.template.spec.volumes = []; 98 | for (let volume of service.volumes) { 99 | const kubeVolume: Iok8SApiCoreV1Volume = {} as Iok8SApiCoreV1Volume; 100 | if (typeof volume === 'string') { 101 | // short syntax: NAME:PATH[:MODE] 102 | const [name, path, mode] = volume.split(':'); 103 | kubeVolume.name = convertName(name) || generateRandomString(); 104 | // TODO supports other types of volumes 105 | kubeVolume.emptyDir = {}; 106 | 107 | container.volumeMounts = container.volumeMounts || []; 108 | const kubeVolumeMount: Iok8SApiCoreV1VolumeMount = {} as Iok8SApiCoreV1VolumeMount; 109 | kubeVolumeMount.name = kubeVolume.name; 110 | kubeVolumeMount.mountPath = path || name; 111 | 112 | if (mode) { 113 | kubeVolumeMount.readOnly = mode === 'ro'; 114 | } 115 | container.volumeMounts.push(kubeVolumeMount); 116 | } else if (typeof volume === 'object') { 117 | // long syntax 118 | if (volume.type === 'volume' && volume.source && volume.target) { 119 | kubeVolume.name = convertName(volume.source); 120 | // TODO supports other types of volumes 121 | kubeVolume.emptyDir = {}; 122 | 123 | container.volumeMounts = container.volumeMounts || []; 124 | const kubeVolumeMount: Iok8SApiCoreV1VolumeMount = {} as Iok8SApiCoreV1VolumeMount; 125 | kubeVolumeMount.name = kubeVolume.name; 126 | kubeVolumeMount.mountPath = volume.target; 127 | } 128 | } 129 | kubeDeployObj.spec.template.spec.volumes.push(kubeVolume); 130 | } 131 | } 132 | if (service.configs) { 133 | kubeDeployObj.spec.template.spec.volumes = kubeDeployObj.spec.template.spec.volumes || []; 134 | for (let config of service.configs) { 135 | // short syntax 136 | if (typeof config === 'string') { 137 | // search for the config in the top-level configs 138 | const configObj = composeObj.configs?.[config]; 139 | if (configObj && configObj.file) { 140 | const kubeVolume: Iok8SApiCoreV1Volume = {} as Iok8SApiCoreV1Volume; 141 | kubeVolume.name = convertName(config); 142 | // TODO we need to populate this config map with the file content 143 | kubeVolume.configMap = {name: convertName(config)}; 144 | 145 | container.volumeMounts = container.volumeMounts || []; 146 | const kubeVolumeMount: Iok8SApiCoreV1VolumeMount = {} as Iok8SApiCoreV1VolumeMount; 147 | kubeVolumeMount.name = kubeVolume.name; 148 | kubeVolumeMount.mountPath = `/${config}`; 149 | kubeVolumeMount.readOnly = true; 150 | container.volumeMounts.push(kubeVolumeMount); 151 | 152 | kubeDeployObj.spec.template.spec.volumes.push(kubeVolume); 153 | } 154 | } else if (typeof config === 'object') { 155 | // long syntax 156 | if (config.source) { 157 | // search for the config in the top-level configs 158 | const configObj = composeObj.configs?.[config.source]; 159 | if (configObj && configObj.file) { 160 | const kubeVolume: Iok8SApiCoreV1Volume = {} as Iok8SApiCoreV1Volume; 161 | kubeVolume.name = convertName(config.source); 162 | // TODO we need to populate this config map with the file content 163 | kubeVolume.configMap = {name: convertName(config.source)}; 164 | 165 | container.volumeMounts = container.volumeMounts || []; 166 | const kubeVolumeMount: Iok8SApiCoreV1VolumeMount = {} as Iok8SApiCoreV1VolumeMount; 167 | kubeVolumeMount.name = kubeVolume.name; 168 | kubeVolumeMount.mountPath = config.target || `/${config.source}`; 169 | kubeVolumeMount.readOnly = true; 170 | container.volumeMounts.push(kubeVolumeMount); 171 | 172 | kubeDeployObj.spec.template.spec.volumes.push(kubeVolume); 173 | } 174 | } 175 | } 176 | } 177 | } 178 | if (service.secrets) { 179 | kubeDeployObj.spec.template.spec.volumes = kubeDeployObj.spec.template.spec.volumes || []; 180 | for (let secret of service.secrets) { 181 | // short syntax 182 | if (typeof secret === 'string') { 183 | // search for the secret in the top-level secrets 184 | const secretObj = composeObj.secrets?.[secret]; 185 | if (secretObj && secretObj.file) { 186 | const kubeVolume: Iok8SApiCoreV1Volume = {} as Iok8SApiCoreV1Volume; 187 | kubeVolume.name = convertName(secret); 188 | // TODO we need to populate this secret with the file content 189 | kubeVolume.secret = {secretName: convertName(secret)}; 190 | 191 | container.volumeMounts = container.volumeMounts || []; 192 | const kubeVolumeMount: Iok8SApiCoreV1VolumeMount = {} as Iok8SApiCoreV1VolumeMount; 193 | kubeVolumeMount.name = kubeVolume.name; 194 | kubeVolumeMount.mountPath = `/run/secrets/${secret}`; 195 | kubeVolumeMount.readOnly = true; 196 | container.volumeMounts.push(kubeVolumeMount); 197 | 198 | kubeDeployObj.spec.template.spec.volumes.push(kubeVolume); 199 | } 200 | } else if (typeof secret === 'object') { 201 | // long syntax 202 | if (secret.source) { 203 | // search for the secret in the top-level secrets 204 | const secretObj = composeObj.secrets?.[secret.source]; 205 | if (secretObj && secretObj.file) { 206 | const kubeVolume: Iok8SApiCoreV1Volume = {} as Iok8SApiCoreV1Volume; 207 | kubeVolume.name = convertName(secret.source); 208 | // TODO we need to populate this secret with the file content 209 | kubeVolume.secret = {secretName: convertName(secret.source)}; 210 | 211 | container.volumeMounts = container.volumeMounts || []; 212 | const kubeVolumeMount: Iok8SApiCoreV1VolumeMount = {} as Iok8SApiCoreV1VolumeMount; 213 | kubeVolumeMount.name = kubeVolume.name; 214 | if (secret.target) { 215 | kubeVolumeMount.mountPath = secret.target.startsWith('/') ? secret.target : `/run/secrets/${secret.target}`; 216 | } else { 217 | kubeVolumeMount.mountPath = `/run/secrets/${secret.source}`; 218 | } 219 | kubeVolumeMount.readOnly = true; 220 | container.volumeMounts.push(kubeVolumeMount); 221 | 222 | kubeDeployObj.spec.template.spec.volumes.push(kubeVolume); 223 | } 224 | } 225 | } 226 | } 227 | } 228 | if (service.tmpfs) { 229 | kubeDeployObj.spec.template.spec.volumes = kubeDeployObj.spec.template.spec.volumes || []; 230 | if (typeof service.tmpfs === 'string') { 231 | const kubeVolume: Iok8SApiCoreV1Volume = {} as Iok8SApiCoreV1Volume; 232 | kubeVolume.name = convertName(service.tmpfs); 233 | kubeVolume.emptyDir = {}; 234 | container.volumeMounts = container.volumeMounts || []; 235 | const kubeVolumeMount: Iok8SApiCoreV1VolumeMount = {} as Iok8SApiCoreV1VolumeMount; 236 | kubeVolumeMount.name = kubeVolume.name; 237 | kubeVolumeMount.mountPath = service.tmpfs; 238 | container.volumeMounts.push(kubeVolumeMount); 239 | kubeDeployObj.spec.template.spec.volumes.push(kubeVolume); 240 | } else if (Array.isArray(service.tmpfs)) { 241 | for (let tmpfs of service.tmpfs) { 242 | const kubeVolume: Iok8SApiCoreV1Volume = {} as Iok8SApiCoreV1Volume; 243 | kubeVolume.name = convertName(tmpfs); 244 | kubeVolume.emptyDir = {}; 245 | container.volumeMounts = container.volumeMounts || []; 246 | const kubeVolumeMount: Iok8SApiCoreV1VolumeMount = {} as Iok8SApiCoreV1VolumeMount; 247 | kubeVolumeMount.name = kubeVolume.name; 248 | kubeVolumeMount.mountPath = tmpfs; 249 | container.volumeMounts.push(kubeVolumeMount); 250 | kubeDeployObj.spec.template.spec.volumes.push(kubeVolume); 251 | } 252 | } 253 | } 254 | 255 | // deployment.spec.template.spec.containers.ports 256 | container.ports = []; 257 | 258 | const servicePorts = service.ports; 259 | // service.expose is the same as service.ports 260 | service.expose?.map((port) => { servicePorts?.push(port) }); 261 | if (servicePorts) { 262 | const ports: Iok8SApiCoreV1ContainerPort[] = []; 263 | for (let port of servicePorts) { 264 | const ports1: Iok8SApiCoreV1ContainerPort[] = []; 265 | if (typeof port === 'string') { 266 | // syntax: [HOST:]CONTAINER[/PROTOCOL], where HOST is [IP:](port | range), and CONTAINER is port | range, and PROTOCOL is tcp | udp 267 | const protocol = port.split('/')[1] || 'TCP'; 268 | port = port.split('/')[0]; 269 | const splitted = port.split(':'); 270 | // get the last item 271 | const containerPortOrRange = splitted.pop() || fail(); 272 | const hostPortOrRange = splitted.pop(); 273 | const hostIp = splitted.pop(); 274 | const [min, max] = containerPortOrRange.includes('-') ? containerPortOrRange.split('-') : [containerPortOrRange, containerPortOrRange]; 275 | for (let i = parseInt(min); i <= parseInt(max); i++) { 276 | const containerPort: Iok8SApiCoreV1ContainerPort = {} as Iok8SApiCoreV1ContainerPort; 277 | containerPort.containerPort = i; 278 | containerPort.protocol = protocol; 279 | ports1.push(containerPort); 280 | } 281 | if (hostPortOrRange) { 282 | const [min, max] = hostPortOrRange.includes('-') ? hostPortOrRange.split('-') : [hostPortOrRange, hostPortOrRange]; 283 | const hostPorts: number[] = []; 284 | for (let i = parseInt(min); i <= parseInt(max); i++) { 285 | hostPorts.push(i); 286 | } 287 | // match each ports1 to each hostPorts 288 | for (let i = 0; i < ports1.length; i++) { 289 | const kubeService: Iok8SApiCoreV1Service = {} as Iok8SApiCoreV1Service; 290 | kubeService.apiVersion = 'v1'; 291 | kubeService.kind = 'Service'; 292 | kubeService.metadata = {} as Iok8SApimachineryPkgApisMetaV1ObjectMeta3; 293 | kubeService.metadata.namespace = config.namespace; 294 | kubeService.metadata.name = `${name}-${hostPorts[i]}`; 295 | kubeService.metadata.namespace = config.namespace; 296 | kubeService.metadata.labels = {}; 297 | kubeService.metadata.labels.app = name; 298 | 299 | kubeService.spec = {} as Iok8SApiCoreV1ServiceSpec; 300 | kubeService.spec.ports = [] as Iok8SApiCoreV1ServicePort[]; 301 | const servicePort: Iok8SApiCoreV1ServicePort = {} as Iok8SApiCoreV1ServicePort; 302 | servicePort.appProtocol = protocol; 303 | servicePort.targetPort = ports1[i].containerPort; 304 | servicePort.port = hostPorts[i]; 305 | kubeService.spec.ports.push(servicePort); 306 | 307 | kubeService.spec.selector = {}; 308 | kubeService.spec.selector.app = name; 309 | kubeSpecList.push(kubeService); 310 | } 311 | } 312 | ports.push(...ports1); 313 | } else if (typeof port === 'number') { 314 | const containerPort: Iok8SApiCoreV1ContainerPort = {} as Iok8SApiCoreV1ContainerPort; 315 | containerPort.containerPort = port; 316 | containerPort.protocol = 'TCP'; 317 | ports.push(containerPort); 318 | } else if (typeof port === 'object') { 319 | const containerPort: Iok8SApiCoreV1ContainerPort = {} as Iok8SApiCoreV1ContainerPort; 320 | containerPort.containerPort = port.target || fail(); 321 | containerPort.protocol = port.protocol || 'TCP'; 322 | ports.push(containerPort); 323 | } 324 | } 325 | container.ports = ports; 326 | } 327 | 328 | // deployment.spec.template.spec.containers.env 329 | container.env = []; 330 | if (service.environment) { 331 | // check if it's an array 332 | if (Array.isArray(service.environment)) { 333 | // array of strings 334 | for (let env of service.environment) { 335 | const [name, value] = splitOnFirst(env, '='); 336 | if (!value) continue; 337 | const envVar: Iok8SApiCoreV1EnvVar = {} as Iok8SApiCoreV1EnvVar; 338 | envVar.name = name; 339 | envVar.value = value; 340 | container.env.push(envVar); 341 | } 342 | } else { 343 | // object 344 | for (let name in service.environment) { 345 | const envVar: Iok8SApiCoreV1EnvVar = {} as Iok8SApiCoreV1EnvVar; 346 | envVar.name = name; 347 | envVar.value = service.environment[name]?.toString(); 348 | container.env.push(envVar); 349 | } 350 | } 351 | } 352 | 353 | // deployment.spec.template.spec.securityContext 354 | if (service.group_add) { 355 | const securityContext: Iok8SApiCoreV1PodSecurityContext = {} as Iok8SApiCoreV1PodSecurityContext; 356 | securityContext.supplementalGroups = []; 357 | for (let group of service.group_add) { 358 | if (typeof group === 'string') { 359 | // TODO: should report warning if it's not a number 360 | group = parseInt(group); 361 | } 362 | if (group) { 363 | securityContext.supplementalGroups.push(group); 364 | } 365 | } 366 | kubeDeployObj.spec.template.spec.securityContext = securityContext; 367 | } 368 | 369 | // deployment.spec.template.spec.containers.securityContext 370 | if (service.cap_add || service.cap_drop) { 371 | container.securityContext = {} as Iok8SApiCoreV1SecurityContext; 372 | container.securityContext.capabilities = {} as Iok8SApiCoreV1Capabilities; 373 | if (service.cap_add) { 374 | container.securityContext.capabilities.add = []; 375 | for (let cap of service.cap_add) { 376 | container.securityContext.capabilities.add.push(cap); 377 | } 378 | } 379 | if (service.cap_drop) { 380 | container.securityContext.capabilities.drop = []; 381 | for (let cap of service.cap_drop) { 382 | container.securityContext.capabilities.drop.push(cap); 383 | } 384 | } 385 | } 386 | 387 | // deployment.spec.template.spec.containers.resources 388 | if (service.deploy && service.deploy.resources) { 389 | container.resources = {} as Iok8SApiCoreV1ResourceRequirements; 390 | container.resources.limits = {}; 391 | container.resources.requests = {}; 392 | if (service.deploy.resources.reservations) { 393 | if (service.deploy.resources.reservations.cpus) { 394 | container.resources.requests.cpu = `${parseFloat(service.deploy.resources.reservations.cpus.toString()) * 1000}m`; 395 | } 396 | if (service.deploy.resources.reservations.memory) { 397 | container.resources.requests.memory = service.deploy.resources.reservations.memory; 398 | } 399 | } 400 | if (service.deploy.resources.limits) { 401 | if (service.deploy.resources.limits.cpus) { 402 | container.resources.limits.cpu = `${parseFloat(service.deploy.resources.limits.cpus.toString()) * 1000}m`; 403 | } 404 | if (service.deploy.resources.limits.memory) { 405 | container.resources.limits.memory = service.deploy.resources.limits.memory; 406 | } 407 | } 408 | } 409 | 410 | // deployment.spec.template.spec.containers.livenessProbe 411 | if (service.healthcheck) { 412 | const livenessProbe = {} as Iok8SApiCoreV1Probe; 413 | if (service.healthcheck.start_period) { 414 | livenessProbe.initialDelaySeconds = convertDurationToNumber(service.healthcheck.start_period); 415 | } 416 | if (service.healthcheck.interval) { 417 | livenessProbe.periodSeconds = convertDurationToNumber(service.healthcheck.interval); 418 | } 419 | if (service.healthcheck.timeout) { 420 | livenessProbe.timeoutSeconds = convertDurationToNumber(service.healthcheck.timeout); 421 | } 422 | if (service.healthcheck.retries) { 423 | livenessProbe.failureThreshold = service.healthcheck.retries; 424 | } 425 | if (service.healthcheck.test) { 426 | livenessProbe.exec = {} as Iok8SApiCoreV1ExecAction; 427 | // CMD-SHELL 428 | if (typeof service.healthcheck.test === 'string') { 429 | livenessProbe.exec.command = ['/bin/sh', '-c', service.healthcheck.test]; 430 | } else { 431 | // CMD 432 | if (service.healthcheck.test[0] === 'CMD') { 433 | livenessProbe.exec.command = service.healthcheck.test.slice(1); 434 | } 435 | // CMD-SHELL 436 | else if (service.healthcheck.test[0] === 'CMD-SHELL') { 437 | livenessProbe.exec.command = ['/bin/sh', '-c', service.healthcheck.test.slice(1).join(' ')]; 438 | } 439 | } 440 | } 441 | // is exec defined? 442 | if (livenessProbe.exec && livenessProbe.exec.command) { 443 | container.livenessProbe = livenessProbe; 444 | } 445 | } 446 | 447 | kubeDeployObj.spec.template.spec.containers.push(container); 448 | 449 | kubeSpecList.push(kubeDeployObj); 450 | } 451 | 452 | let ret = ""; 453 | for (let kubeSpec of kubeSpecList) { 454 | ret += '---\n' + stringify(kubeSpec); 455 | } 456 | return ret; 457 | } 458 | 459 | export default convert; 460 | -------------------------------------------------------------------------------- /test/__snapshots__/index.test.ts.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`convert should work 1`] = ` 4 | "--- 5 | apiVersion: v1 6 | kind: Service 7 | metadata: 8 | namespace: default 9 | name: frontend-443 10 | labels: 11 | app: frontend 12 | spec: 13 | ports: 14 | - appProtocol: TCP 15 | targetPort: 8043 16 | port: 443 17 | selector: 18 | app: frontend 19 | --- 20 | apiVersion: apps/v1 21 | kind: Deployment 22 | metadata: 23 | name: frontend 24 | namespace: default 25 | labels: 26 | app: frontend 27 | annotations: 28 | com.example.description: Accounting webapp 29 | com.example.department: Finance 30 | com.example.label-with-empty-value: "" 31 | spec: 32 | selector: 33 | matchLabels: 34 | app: frontend 35 | template: 36 | metadata: 37 | labels: 38 | app: frontend 39 | spec: 40 | containers: 41 | - name: frontend 42 | image: awesome/webapp 43 | args: 44 | - hello 45 | - world 46 | command: 47 | - echo 48 | volumeMounts: 49 | - name: httpd-config 50 | mountPath: /httpd-config 51 | readOnly: true 52 | - name: tmp 53 | mountPath: /tmp 54 | - name: run 55 | mountPath: /run 56 | ports: 57 | - containerPort: 8043 58 | protocol: TCP 59 | - containerPort: 3000 60 | protocol: TCP 61 | env: 62 | - name: RACK_ENV 63 | value: development 64 | - name: SHOW 65 | value: "true" 66 | - name: USER_INPUT 67 | securityContext: 68 | capabilities: 69 | add: 70 | - ALL 71 | resources: 72 | limits: 73 | cpu: 1m 74 | memory: 50M 75 | requests: 76 | cpu: 0.1m 77 | memory: 20M 78 | livenessProbe: 79 | periodSeconds: 30 80 | timeoutSeconds: 10 81 | failureThreshold: 3 82 | exec: 83 | command: 84 | - curl 85 | - -f 86 | - http://localhost:8080 87 | hostname: my-frontend 88 | terminationGracePeriodSeconds: 90 89 | volumes: 90 | - name: httpd-config 91 | configMap: 92 | name: httpd-config 93 | - name: tmp 94 | emptyDir: {} 95 | - name: run 96 | emptyDir: {} 97 | replicas: 3 98 | --- 99 | apiVersion: apps/v1 100 | kind: Deployment 101 | metadata: 102 | name: my-backend 103 | namespace: default 104 | labels: 105 | app: my-backend 106 | annotations: {} 107 | spec: 108 | selector: 109 | matchLabels: 110 | app: my-backend 111 | template: 112 | metadata: 113 | labels: 114 | app: my-backend 115 | spec: 116 | containers: 117 | - name: my-backend 118 | image: awesome/database 119 | volumeMounts: 120 | - name: db-data 121 | mountPath: /etc/data 122 | - name: httpd-config 123 | mountPath: /etc/apache2/httpd.conf 124 | readOnly: true 125 | ports: [] 126 | env: 127 | - name: RACK_ENV 128 | value: development 129 | - name: SHOW 130 | value: "true" 131 | volumes: 132 | - name: db-data 133 | emptyDir: {} 134 | - name: httpd-config 135 | configMap: 136 | name: httpd-config 137 | replicas: 1 138 | " 139 | `; 140 | 141 | exports[`convert will convert name to valid RFC 1123 hostname 1`] = ` 142 | "--- 143 | apiVersion: apps/v1 144 | kind: Deployment 145 | metadata: 146 | name: name-with-underscores 147 | namespace: default 148 | labels: 149 | app: name-with-underscores 150 | annotations: {} 151 | spec: 152 | selector: 153 | matchLabels: 154 | app: name-with-underscores 155 | template: 156 | metadata: 157 | labels: 158 | app: name-with-underscores 159 | spec: 160 | containers: 161 | - name: name-with-underscores 162 | image: awesome/webapp 163 | ports: [] 164 | env: [] 165 | replicas: 1 166 | " 167 | `; 168 | -------------------------------------------------------------------------------- /test/index.test.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __importDefault = (this && this.__importDefault) || function (mod) { 3 | return (mod && mod.__esModule) ? mod : { "default": mod }; 4 | }; 5 | Object.defineProperty(exports, "__esModule", { value: true }); 6 | var index_1 = __importDefault(require("../src/index")); 7 | describe('convert', function () { 8 | it('should work', function () { 9 | var yaml = "\n services:\n frontend:\n labels:\n - \"com.example.description=Accounting webapp\"\n - \"com.example.department=Finance\"\n - \"com.example.label-with-empty-value\"\n image: awesome/webapp\n ports:\n - \"443:8043\"\n expose:\n - \"3000\"\n hostname: my-frontend\n networks:\n - front-tier\n - back-tier\n configs:\n - httpd-config\n secrets:\n - server-certificate\n command: echo hello world\n deploy:\n replicas: 3\n resources:\n limits:\n cpus: '0.001'\n memory: 50M\n reservations:\n cpus: '0.0001'\n memory: 20M\n restart_policy:\n condition: on-failure\n delay: 5s\n max_attempts: 3\n window: 120s\n placement:\n constraints:\n - node.role == manager\n - engine.labels.operatingsystem == ubuntu 14.04\n environment:\n RACK_ENV: development\n SHOW: \"true\"\n USER_INPUT:\n cap_add:\n - ALL\n tmpfs:\n - /tmp\n - /run\n stop_grace_period: 1m30s\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:8080\"]\n interval: 30s\n timeout: 10s\n retries: 3\n\n backend:\n container_name: my-backend\n image: awesome/database\n volumes:\n - db-data:/etc/data\n networks:\n - back-tier\n environment:\n - RACK_ENV=development\n - SHOW=true\n - USER_INPUT\n configs:\n - source: httpd-config\n target: /etc/apache2/httpd.conf\n uid: '1000'\n gid: '1000'\n mode: 0440\n\n volumes:\n db-data:\n driver: flocker\n driver_opts:\n size: \"10GiB\"\n\n configs:\n httpd-config:\n file: ./httpd.conf\n\n secrets:\n server-certificate:\n external: true\n\n networks:\n # The presence of these objects is sufficient to define them\n front-tier: {}\n back-tier: {}\n "; 10 | var result = (0, index_1.default)(yaml); 11 | expect(result).toMatchSnapshot(); 12 | }); 13 | }); 14 | -------------------------------------------------------------------------------- /test/index.test.ts: -------------------------------------------------------------------------------- 1 | import convert from '../src/index' 2 | import { parse, stringify } from 'yaml'; 3 | 4 | describe('convert', () => { 5 | it('should work', () => { 6 | const yaml = ` 7 | services: 8 | frontend: 9 | labels: 10 | - "com.example.description=Accounting webapp" 11 | - "com.example.department=Finance" 12 | - "com.example.label-with-empty-value" 13 | image: awesome/webapp 14 | ports: 15 | - "443:8043" 16 | expose: 17 | - "3000" 18 | hostname: my-frontend 19 | networks: 20 | - front-tier 21 | - back-tier 22 | configs: 23 | - httpd-config 24 | secrets: 25 | - server-certificate 26 | entrypoint: echo 27 | command: hello world 28 | deploy: 29 | replicas: 3 30 | resources: 31 | limits: 32 | cpus: '0.001' 33 | memory: 50M 34 | reservations: 35 | cpus: '0.0001' 36 | memory: 20M 37 | restart_policy: 38 | condition: on-failure 39 | delay: 5s 40 | max_attempts: 3 41 | window: 120s 42 | placement: 43 | constraints: 44 | - node.role == manager 45 | - engine.labels.operatingsystem == ubuntu 14.04 46 | environment: 47 | RACK_ENV: development 48 | SHOW: "true" 49 | USER_INPUT: 50 | cap_add: 51 | - ALL 52 | tmpfs: 53 | - /tmp 54 | - /run 55 | stop_grace_period: 1m30s 56 | healthcheck: 57 | test: ["CMD", "curl", "-f", "http://localhost:8080"] 58 | interval: 30s 59 | timeout: 10s 60 | retries: 3 61 | 62 | backend: 63 | container_name: my-backend 64 | image: awesome/database 65 | volumes: 66 | - db-data:/etc/data 67 | networks: 68 | - back-tier 69 | environment: 70 | - RACK_ENV=development 71 | - SHOW=true 72 | - USER_INPUT 73 | configs: 74 | - source: httpd-config 75 | target: /etc/apache2/httpd.conf 76 | uid: '1000' 77 | gid: '1000' 78 | mode: 0440 79 | 80 | volumes: 81 | db-data: 82 | driver: flocker 83 | driver_opts: 84 | size: "10GiB" 85 | 86 | configs: 87 | httpd-config: 88 | file: ./httpd.conf 89 | 90 | secrets: 91 | server-certificate: 92 | external: true 93 | 94 | networks: 95 | # The presence of these objects is sufficient to define them 96 | front-tier: {} 97 | back-tier: {} 98 | ` 99 | const result = convert(yaml); 100 | expect(result).toMatchSnapshot(); 101 | }); 102 | 103 | it("will convert name to valid RFC 1123 hostname", () => { 104 | const result = convert(`\ 105 | services: 106 | name_with_underscores: 107 | image: awesome/webapp 108 | `); 109 | expect(result).toMatchSnapshot(); 110 | }); 111 | 112 | it("handles base64 encoded env var correctly", () => { 113 | const result = convert(`\ 114 | services: 115 | frontend: 116 | image: awesome/webapp 117 | environment: 118 | - BAR=Zm9vCg== 119 | `); 120 | const v = parse(result).spec.template.spec.containers[0].env[0].value; 121 | expect(v).toEqual("Zm9vCg=="); 122 | }); 123 | }) 124 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "module": "commonjs", 5 | "outDir": "dist", 6 | "strict": true, 7 | "declaration": true, 8 | "esModuleInterop": true, 9 | "forceConsistentCasingInFileNames": true, 10 | "moduleResolution": "node", 11 | "paths": { 12 | "@/*": ["./src/*"] 13 | } 14 | }, 15 | "include": ["src/**/*"] 16 | } 17 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@ampproject/remapping@^2.2.0": 6 | version "2.2.1" 7 | resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" 8 | integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== 9 | dependencies: 10 | "@jridgewell/gen-mapping" "^0.3.0" 11 | "@jridgewell/trace-mapping" "^0.3.9" 12 | 13 | "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.5": 14 | version "7.22.5" 15 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.5.tgz#234d98e1551960604f1246e6475891a570ad5658" 16 | integrity sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ== 17 | dependencies: 18 | "@babel/highlight" "^7.22.5" 19 | 20 | "@babel/compat-data@^7.22.6": 21 | version "7.22.6" 22 | resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.6.tgz#15606a20341de59ba02cd2fcc5086fcbe73bf544" 23 | integrity sha512-29tfsWTq2Ftu7MXmimyC0C5FDZv5DYxOZkh3XD3+QW4V/BYuv/LyEsjj3c0hqedEaDt6DBfDvexMKU8YevdqFg== 24 | 25 | "@babel/core@^7.11.6", "@babel/core@^7.12.3": 26 | version "7.22.8" 27 | resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.8.tgz#386470abe884302db9c82e8e5e87be9e46c86785" 28 | integrity sha512-75+KxFB4CZqYRXjx4NlR4J7yGvKumBuZTmV4NV6v09dVXXkuYVYLT68N6HCzLvfJ+fWCxQsntNzKwwIXL4bHnw== 29 | dependencies: 30 | "@ampproject/remapping" "^2.2.0" 31 | "@babel/code-frame" "^7.22.5" 32 | "@babel/generator" "^7.22.7" 33 | "@babel/helper-compilation-targets" "^7.22.6" 34 | "@babel/helper-module-transforms" "^7.22.5" 35 | "@babel/helpers" "^7.22.6" 36 | "@babel/parser" "^7.22.7" 37 | "@babel/template" "^7.22.5" 38 | "@babel/traverse" "^7.22.8" 39 | "@babel/types" "^7.22.5" 40 | "@nicolo-ribaudo/semver-v6" "^6.3.3" 41 | convert-source-map "^1.7.0" 42 | debug "^4.1.0" 43 | gensync "^1.0.0-beta.2" 44 | json5 "^2.2.2" 45 | 46 | "@babel/generator@^7.22.7", "@babel/generator@^7.7.2": 47 | version "7.22.7" 48 | resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.7.tgz#a6b8152d5a621893f2c9dacf9a4e286d520633d5" 49 | integrity sha512-p+jPjMG+SI8yvIaxGgeW24u7q9+5+TGpZh8/CuB7RhBKd7RCy8FayNEFNNKrNK/eUcY/4ExQqLmyrvBXKsIcwQ== 50 | dependencies: 51 | "@babel/types" "^7.22.5" 52 | "@jridgewell/gen-mapping" "^0.3.2" 53 | "@jridgewell/trace-mapping" "^0.3.17" 54 | jsesc "^2.5.1" 55 | 56 | "@babel/helper-compilation-targets@^7.22.6": 57 | version "7.22.6" 58 | resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.6.tgz#e30d61abe9480aa5a83232eb31c111be922d2e52" 59 | integrity sha512-534sYEqWD9VfUm3IPn2SLcH4Q3P86XL+QvqdC7ZsFrzyyPF3T4XGiVghF6PTYNdWg6pXuoqXxNQAhbYeEInTzA== 60 | dependencies: 61 | "@babel/compat-data" "^7.22.6" 62 | "@babel/helper-validator-option" "^7.22.5" 63 | "@nicolo-ribaudo/semver-v6" "^6.3.3" 64 | browserslist "^4.21.9" 65 | lru-cache "^5.1.1" 66 | 67 | "@babel/helper-environment-visitor@^7.22.5": 68 | version "7.22.5" 69 | resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz#f06dd41b7c1f44e1f8da6c4055b41ab3a09a7e98" 70 | integrity sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q== 71 | 72 | "@babel/helper-function-name@^7.22.5": 73 | version "7.22.5" 74 | resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz#ede300828905bb15e582c037162f99d5183af1be" 75 | integrity sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ== 76 | dependencies: 77 | "@babel/template" "^7.22.5" 78 | "@babel/types" "^7.22.5" 79 | 80 | "@babel/helper-hoist-variables@^7.22.5": 81 | version "7.22.5" 82 | resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" 83 | integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== 84 | dependencies: 85 | "@babel/types" "^7.22.5" 86 | 87 | "@babel/helper-module-imports@^7.22.5": 88 | version "7.22.5" 89 | resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz#1a8f4c9f4027d23f520bd76b364d44434a72660c" 90 | integrity sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg== 91 | dependencies: 92 | "@babel/types" "^7.22.5" 93 | 94 | "@babel/helper-module-transforms@^7.22.5": 95 | version "7.22.5" 96 | resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz#0f65daa0716961b6e96b164034e737f60a80d2ef" 97 | integrity sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw== 98 | dependencies: 99 | "@babel/helper-environment-visitor" "^7.22.5" 100 | "@babel/helper-module-imports" "^7.22.5" 101 | "@babel/helper-simple-access" "^7.22.5" 102 | "@babel/helper-split-export-declaration" "^7.22.5" 103 | "@babel/helper-validator-identifier" "^7.22.5" 104 | "@babel/template" "^7.22.5" 105 | "@babel/traverse" "^7.22.5" 106 | "@babel/types" "^7.22.5" 107 | 108 | "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0": 109 | version "7.22.5" 110 | resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" 111 | integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== 112 | 113 | "@babel/helper-simple-access@^7.22.5": 114 | version "7.22.5" 115 | resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" 116 | integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== 117 | dependencies: 118 | "@babel/types" "^7.22.5" 119 | 120 | "@babel/helper-split-export-declaration@^7.22.5", "@babel/helper-split-export-declaration@^7.22.6": 121 | version "7.22.6" 122 | resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" 123 | integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== 124 | dependencies: 125 | "@babel/types" "^7.22.5" 126 | 127 | "@babel/helper-string-parser@^7.22.5": 128 | version "7.22.5" 129 | resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" 130 | integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== 131 | 132 | "@babel/helper-validator-identifier@^7.22.5": 133 | version "7.22.5" 134 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz#9544ef6a33999343c8740fa51350f30eeaaaf193" 135 | integrity sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ== 136 | 137 | "@babel/helper-validator-option@^7.22.5": 138 | version "7.22.5" 139 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz#de52000a15a177413c8234fa3a8af4ee8102d0ac" 140 | integrity sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw== 141 | 142 | "@babel/helpers@^7.22.6": 143 | version "7.22.6" 144 | resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.6.tgz#8e61d3395a4f0c5a8060f309fb008200969b5ecd" 145 | integrity sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA== 146 | dependencies: 147 | "@babel/template" "^7.22.5" 148 | "@babel/traverse" "^7.22.6" 149 | "@babel/types" "^7.22.5" 150 | 151 | "@babel/highlight@^7.22.5": 152 | version "7.22.5" 153 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.5.tgz#aa6c05c5407a67ebce408162b7ede789b4d22031" 154 | integrity sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw== 155 | dependencies: 156 | "@babel/helper-validator-identifier" "^7.22.5" 157 | chalk "^2.0.0" 158 | js-tokens "^4.0.0" 159 | 160 | "@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.5", "@babel/parser@^7.22.7": 161 | version "7.22.7" 162 | resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.7.tgz#df8cf085ce92ddbdbf668a7f186ce848c9036cae" 163 | integrity sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q== 164 | 165 | "@babel/plugin-syntax-async-generators@^7.8.4": 166 | version "7.8.4" 167 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" 168 | integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== 169 | dependencies: 170 | "@babel/helper-plugin-utils" "^7.8.0" 171 | 172 | "@babel/plugin-syntax-bigint@^7.8.3": 173 | version "7.8.3" 174 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" 175 | integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== 176 | dependencies: 177 | "@babel/helper-plugin-utils" "^7.8.0" 178 | 179 | "@babel/plugin-syntax-class-properties@^7.8.3": 180 | version "7.12.13" 181 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" 182 | integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== 183 | dependencies: 184 | "@babel/helper-plugin-utils" "^7.12.13" 185 | 186 | "@babel/plugin-syntax-import-meta@^7.8.3": 187 | version "7.10.4" 188 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" 189 | integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== 190 | dependencies: 191 | "@babel/helper-plugin-utils" "^7.10.4" 192 | 193 | "@babel/plugin-syntax-json-strings@^7.8.3": 194 | version "7.8.3" 195 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" 196 | integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== 197 | dependencies: 198 | "@babel/helper-plugin-utils" "^7.8.0" 199 | 200 | "@babel/plugin-syntax-jsx@^7.7.2": 201 | version "7.22.5" 202 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz#a6b68e84fb76e759fc3b93e901876ffabbe1d918" 203 | integrity sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg== 204 | dependencies: 205 | "@babel/helper-plugin-utils" "^7.22.5" 206 | 207 | "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": 208 | version "7.10.4" 209 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" 210 | integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== 211 | dependencies: 212 | "@babel/helper-plugin-utils" "^7.10.4" 213 | 214 | "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": 215 | version "7.8.3" 216 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" 217 | integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== 218 | dependencies: 219 | "@babel/helper-plugin-utils" "^7.8.0" 220 | 221 | "@babel/plugin-syntax-numeric-separator@^7.8.3": 222 | version "7.10.4" 223 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" 224 | integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== 225 | dependencies: 226 | "@babel/helper-plugin-utils" "^7.10.4" 227 | 228 | "@babel/plugin-syntax-object-rest-spread@^7.8.3": 229 | version "7.8.3" 230 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" 231 | integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== 232 | dependencies: 233 | "@babel/helper-plugin-utils" "^7.8.0" 234 | 235 | "@babel/plugin-syntax-optional-catch-binding@^7.8.3": 236 | version "7.8.3" 237 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" 238 | integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== 239 | dependencies: 240 | "@babel/helper-plugin-utils" "^7.8.0" 241 | 242 | "@babel/plugin-syntax-optional-chaining@^7.8.3": 243 | version "7.8.3" 244 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" 245 | integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== 246 | dependencies: 247 | "@babel/helper-plugin-utils" "^7.8.0" 248 | 249 | "@babel/plugin-syntax-top-level-await@^7.8.3": 250 | version "7.14.5" 251 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" 252 | integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== 253 | dependencies: 254 | "@babel/helper-plugin-utils" "^7.14.5" 255 | 256 | "@babel/plugin-syntax-typescript@^7.7.2": 257 | version "7.22.5" 258 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz#aac8d383b062c5072c647a31ef990c1d0af90272" 259 | integrity sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ== 260 | dependencies: 261 | "@babel/helper-plugin-utils" "^7.22.5" 262 | 263 | "@babel/template@^7.22.5", "@babel/template@^7.3.3": 264 | version "7.22.5" 265 | resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.5.tgz#0c8c4d944509875849bd0344ff0050756eefc6ec" 266 | integrity sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw== 267 | dependencies: 268 | "@babel/code-frame" "^7.22.5" 269 | "@babel/parser" "^7.22.5" 270 | "@babel/types" "^7.22.5" 271 | 272 | "@babel/traverse@^7.22.5", "@babel/traverse@^7.22.6", "@babel/traverse@^7.22.8": 273 | version "7.22.8" 274 | resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.8.tgz#4d4451d31bc34efeae01eac222b514a77aa4000e" 275 | integrity sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw== 276 | dependencies: 277 | "@babel/code-frame" "^7.22.5" 278 | "@babel/generator" "^7.22.7" 279 | "@babel/helper-environment-visitor" "^7.22.5" 280 | "@babel/helper-function-name" "^7.22.5" 281 | "@babel/helper-hoist-variables" "^7.22.5" 282 | "@babel/helper-split-export-declaration" "^7.22.6" 283 | "@babel/parser" "^7.22.7" 284 | "@babel/types" "^7.22.5" 285 | debug "^4.1.0" 286 | globals "^11.1.0" 287 | 288 | "@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.5", "@babel/types@^7.3.3": 289 | version "7.22.5" 290 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.5.tgz#cd93eeaab025880a3a47ec881f4b096a5b786fbe" 291 | integrity sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA== 292 | dependencies: 293 | "@babel/helper-string-parser" "^7.22.5" 294 | "@babel/helper-validator-identifier" "^7.22.5" 295 | to-fast-properties "^2.0.0" 296 | 297 | "@bcherny/json-schema-ref-parser@10.0.5-fork": 298 | version "10.0.5-fork" 299 | resolved "https://registry.yarnpkg.com/@bcherny/json-schema-ref-parser/-/json-schema-ref-parser-10.0.5-fork.tgz#9b5e1e7e07964ea61840174098e634edbe8197bc" 300 | integrity sha512-E/jKbPoca1tfUPj3iSbitDZTGnq6FUFjkH6L8U2oDwSuwK1WhnnVtCG7oFOTg/DDnyoXbQYUiUiGOibHqaGVnw== 301 | dependencies: 302 | "@jsdevtools/ono" "^7.1.3" 303 | "@types/json-schema" "^7.0.6" 304 | call-me-maybe "^1.0.1" 305 | js-yaml "^4.1.0" 306 | 307 | "@bcoe/v8-coverage@^0.2.3": 308 | version "0.2.3" 309 | resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" 310 | integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== 311 | 312 | "@istanbuljs/load-nyc-config@^1.0.0": 313 | version "1.1.0" 314 | resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" 315 | integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== 316 | dependencies: 317 | camelcase "^5.3.1" 318 | find-up "^4.1.0" 319 | get-package-type "^0.1.0" 320 | js-yaml "^3.13.1" 321 | resolve-from "^5.0.0" 322 | 323 | "@istanbuljs/schema@^0.1.2": 324 | version "0.1.3" 325 | resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" 326 | integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== 327 | 328 | "@jest/console@^29.6.1": 329 | version "29.6.1" 330 | resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.6.1.tgz#b48ba7b9c34b51483e6d590f46e5837f1ab5f639" 331 | integrity sha512-Aj772AYgwTSr5w8qnyoJ0eDYvN6bMsH3ORH1ivMotrInHLKdUz6BDlaEXHdM6kODaBIkNIyQGzsMvRdOv7VG7Q== 332 | dependencies: 333 | "@jest/types" "^29.6.1" 334 | "@types/node" "*" 335 | chalk "^4.0.0" 336 | jest-message-util "^29.6.1" 337 | jest-util "^29.6.1" 338 | slash "^3.0.0" 339 | 340 | "@jest/core@^29.6.1": 341 | version "29.6.1" 342 | resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.6.1.tgz#fac0d9ddf320490c93356ba201451825231e95f6" 343 | integrity sha512-CcowHypRSm5oYQ1obz1wfvkjZZ2qoQlrKKvlfPwh5jUXVU12TWr2qMeH8chLMuTFzHh5a1g2yaqlqDICbr+ukQ== 344 | dependencies: 345 | "@jest/console" "^29.6.1" 346 | "@jest/reporters" "^29.6.1" 347 | "@jest/test-result" "^29.6.1" 348 | "@jest/transform" "^29.6.1" 349 | "@jest/types" "^29.6.1" 350 | "@types/node" "*" 351 | ansi-escapes "^4.2.1" 352 | chalk "^4.0.0" 353 | ci-info "^3.2.0" 354 | exit "^0.1.2" 355 | graceful-fs "^4.2.9" 356 | jest-changed-files "^29.5.0" 357 | jest-config "^29.6.1" 358 | jest-haste-map "^29.6.1" 359 | jest-message-util "^29.6.1" 360 | jest-regex-util "^29.4.3" 361 | jest-resolve "^29.6.1" 362 | jest-resolve-dependencies "^29.6.1" 363 | jest-runner "^29.6.1" 364 | jest-runtime "^29.6.1" 365 | jest-snapshot "^29.6.1" 366 | jest-util "^29.6.1" 367 | jest-validate "^29.6.1" 368 | jest-watcher "^29.6.1" 369 | micromatch "^4.0.4" 370 | pretty-format "^29.6.1" 371 | slash "^3.0.0" 372 | strip-ansi "^6.0.0" 373 | 374 | "@jest/environment@^29.6.1": 375 | version "29.6.1" 376 | resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.6.1.tgz#ee358fff2f68168394b4a50f18c68278a21fe82f" 377 | integrity sha512-RMMXx4ws+Gbvw3DfLSuo2cfQlK7IwGbpuEWXCqyYDcqYTI+9Ju3a5hDnXaxjNsa6uKh9PQF2v+qg+RLe63tz5A== 378 | dependencies: 379 | "@jest/fake-timers" "^29.6.1" 380 | "@jest/types" "^29.6.1" 381 | "@types/node" "*" 382 | jest-mock "^29.6.1" 383 | 384 | "@jest/expect-utils@^29.6.1": 385 | version "29.6.1" 386 | resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.6.1.tgz#ab83b27a15cdd203fe5f68230ea22767d5c3acc5" 387 | integrity sha512-o319vIf5pEMx0LmzSxxkYYxo4wrRLKHq9dP1yJU7FoPTB0LfAKSz8SWD6D/6U3v/O52t9cF5t+MeJiRsfk7zMw== 388 | dependencies: 389 | jest-get-type "^29.4.3" 390 | 391 | "@jest/expect@^29.6.1": 392 | version "29.6.1" 393 | resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.6.1.tgz#fef18265188f6a97601f1ea0a2912d81a85b4657" 394 | integrity sha512-N5xlPrAYaRNyFgVf2s9Uyyvr795jnB6rObuPx4QFvNJz8aAjpZUDfO4bh5G/xuplMID8PrnuF1+SfSyDxhsgYg== 395 | dependencies: 396 | expect "^29.6.1" 397 | jest-snapshot "^29.6.1" 398 | 399 | "@jest/fake-timers@^29.6.1": 400 | version "29.6.1" 401 | resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.6.1.tgz#c773efddbc61e1d2efcccac008139f621de57c69" 402 | integrity sha512-RdgHgbXyosCDMVYmj7lLpUwXA4c69vcNzhrt69dJJdf8azUrpRh3ckFCaTPNjsEeRi27Cig0oKDGxy5j7hOgHg== 403 | dependencies: 404 | "@jest/types" "^29.6.1" 405 | "@sinonjs/fake-timers" "^10.0.2" 406 | "@types/node" "*" 407 | jest-message-util "^29.6.1" 408 | jest-mock "^29.6.1" 409 | jest-util "^29.6.1" 410 | 411 | "@jest/globals@^29.6.1": 412 | version "29.6.1" 413 | resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.6.1.tgz#c8a8923e05efd757308082cc22893d82b8aa138f" 414 | integrity sha512-2VjpaGy78JY9n9370H8zGRCFbYVWwjY6RdDMhoJHa1sYfwe6XM/azGN0SjY8kk7BOZApIejQ1BFPyH7FPG0w3A== 415 | dependencies: 416 | "@jest/environment" "^29.6.1" 417 | "@jest/expect" "^29.6.1" 418 | "@jest/types" "^29.6.1" 419 | jest-mock "^29.6.1" 420 | 421 | "@jest/reporters@^29.6.1": 422 | version "29.6.1" 423 | resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.6.1.tgz#3325a89c9ead3cf97ad93df3a427549d16179863" 424 | integrity sha512-9zuaI9QKr9JnoZtFQlw4GREQbxgmNYXU6QuWtmuODvk5nvPUeBYapVR/VYMyi2WSx3jXTLJTJji8rN6+Cm4+FA== 425 | dependencies: 426 | "@bcoe/v8-coverage" "^0.2.3" 427 | "@jest/console" "^29.6.1" 428 | "@jest/test-result" "^29.6.1" 429 | "@jest/transform" "^29.6.1" 430 | "@jest/types" "^29.6.1" 431 | "@jridgewell/trace-mapping" "^0.3.18" 432 | "@types/node" "*" 433 | chalk "^4.0.0" 434 | collect-v8-coverage "^1.0.0" 435 | exit "^0.1.2" 436 | glob "^7.1.3" 437 | graceful-fs "^4.2.9" 438 | istanbul-lib-coverage "^3.0.0" 439 | istanbul-lib-instrument "^5.1.0" 440 | istanbul-lib-report "^3.0.0" 441 | istanbul-lib-source-maps "^4.0.0" 442 | istanbul-reports "^3.1.3" 443 | jest-message-util "^29.6.1" 444 | jest-util "^29.6.1" 445 | jest-worker "^29.6.1" 446 | slash "^3.0.0" 447 | string-length "^4.0.1" 448 | strip-ansi "^6.0.0" 449 | v8-to-istanbul "^9.0.1" 450 | 451 | "@jest/schemas@^29.6.0": 452 | version "29.6.0" 453 | resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.0.tgz#0f4cb2c8e3dca80c135507ba5635a4fd755b0040" 454 | integrity sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ== 455 | dependencies: 456 | "@sinclair/typebox" "^0.27.8" 457 | 458 | "@jest/source-map@^29.6.0": 459 | version "29.6.0" 460 | resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.6.0.tgz#bd34a05b5737cb1a99d43e1957020ac8e5b9ddb1" 461 | integrity sha512-oA+I2SHHQGxDCZpbrsCQSoMLb3Bz547JnM+jUr9qEbuw0vQlWZfpPS7CO9J7XiwKicEz9OFn/IYoLkkiUD7bzA== 462 | dependencies: 463 | "@jridgewell/trace-mapping" "^0.3.18" 464 | callsites "^3.0.0" 465 | graceful-fs "^4.2.9" 466 | 467 | "@jest/test-result@^29.6.1": 468 | version "29.6.1" 469 | resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.6.1.tgz#850e565a3f58ee8ca6ec424db00cb0f2d83c36ba" 470 | integrity sha512-Ynr13ZRcpX6INak0TPUukU8GWRfm/vAytE3JbJNGAvINySWYdfE7dGZMbk36oVuK4CigpbhMn8eg1dixZ7ZJOw== 471 | dependencies: 472 | "@jest/console" "^29.6.1" 473 | "@jest/types" "^29.6.1" 474 | "@types/istanbul-lib-coverage" "^2.0.0" 475 | collect-v8-coverage "^1.0.0" 476 | 477 | "@jest/test-sequencer@^29.6.1": 478 | version "29.6.1" 479 | resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.6.1.tgz#e3e582ee074dd24ea9687d7d1aaf05ee3a9b068e" 480 | integrity sha512-oBkC36PCDf/wb6dWeQIhaviU0l5u6VCsXa119yqdUosYAt7/FbQU2M2UoziO3igj/HBDEgp57ONQ3fm0v9uyyg== 481 | dependencies: 482 | "@jest/test-result" "^29.6.1" 483 | graceful-fs "^4.2.9" 484 | jest-haste-map "^29.6.1" 485 | slash "^3.0.0" 486 | 487 | "@jest/transform@^29.6.1": 488 | version "29.6.1" 489 | resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.6.1.tgz#acb5606019a197cb99beda3c05404b851f441c92" 490 | integrity sha512-URnTneIU3ZjRSaf906cvf6Hpox3hIeJXRnz3VDSw5/X93gR8ycdfSIEy19FlVx8NFmpN7fe3Gb1xF+NjXaQLWg== 491 | dependencies: 492 | "@babel/core" "^7.11.6" 493 | "@jest/types" "^29.6.1" 494 | "@jridgewell/trace-mapping" "^0.3.18" 495 | babel-plugin-istanbul "^6.1.1" 496 | chalk "^4.0.0" 497 | convert-source-map "^2.0.0" 498 | fast-json-stable-stringify "^2.1.0" 499 | graceful-fs "^4.2.9" 500 | jest-haste-map "^29.6.1" 501 | jest-regex-util "^29.4.3" 502 | jest-util "^29.6.1" 503 | micromatch "^4.0.4" 504 | pirates "^4.0.4" 505 | slash "^3.0.0" 506 | write-file-atomic "^4.0.2" 507 | 508 | "@jest/types@^29.6.1": 509 | version "29.6.1" 510 | resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.1.tgz#ae79080278acff0a6af5eb49d063385aaa897bf2" 511 | integrity sha512-tPKQNMPuXgvdOn2/Lg9HNfUvjYVGolt04Hp03f5hAk878uwOLikN+JzeLY0HcVgKgFl9Hs3EIqpu3WX27XNhnw== 512 | dependencies: 513 | "@jest/schemas" "^29.6.0" 514 | "@types/istanbul-lib-coverage" "^2.0.0" 515 | "@types/istanbul-reports" "^3.0.0" 516 | "@types/node" "*" 517 | "@types/yargs" "^17.0.8" 518 | chalk "^4.0.0" 519 | 520 | "@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": 521 | version "0.3.3" 522 | resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" 523 | integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== 524 | dependencies: 525 | "@jridgewell/set-array" "^1.0.1" 526 | "@jridgewell/sourcemap-codec" "^1.4.10" 527 | "@jridgewell/trace-mapping" "^0.3.9" 528 | 529 | "@jridgewell/resolve-uri@3.1.0": 530 | version "3.1.0" 531 | resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" 532 | integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== 533 | 534 | "@jridgewell/set-array@^1.0.1": 535 | version "1.1.2" 536 | resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" 537 | integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== 538 | 539 | "@jridgewell/sourcemap-codec@1.4.14": 540 | version "1.4.14" 541 | resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" 542 | integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== 543 | 544 | "@jridgewell/sourcemap-codec@^1.4.10": 545 | version "1.4.15" 546 | resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" 547 | integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== 548 | 549 | "@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.9": 550 | version "0.3.18" 551 | resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6" 552 | integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA== 553 | dependencies: 554 | "@jridgewell/resolve-uri" "3.1.0" 555 | "@jridgewell/sourcemap-codec" "1.4.14" 556 | 557 | "@jsdevtools/ono@^7.1.3": 558 | version "7.1.3" 559 | resolved "https://registry.yarnpkg.com/@jsdevtools/ono/-/ono-7.1.3.tgz#9df03bbd7c696a5c58885c34aa06da41c8543796" 560 | integrity sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg== 561 | 562 | "@nicolo-ribaudo/semver-v6@^6.3.3": 563 | version "6.3.3" 564 | resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/semver-v6/-/semver-v6-6.3.3.tgz#ea6d23ade78a325f7a52750aab1526b02b628c29" 565 | integrity sha512-3Yc1fUTs69MG/uZbJlLSI3JISMn2UV2rg+1D/vROUqZyh3l6iYHCs7GMp+M40ZD7yOdDbYjJcU1oTJhrc+dGKg== 566 | 567 | "@sinclair/typebox@^0.27.8": 568 | version "0.27.8" 569 | resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" 570 | integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== 571 | 572 | "@sinonjs/commons@^3.0.0": 573 | version "3.0.0" 574 | resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.0.tgz#beb434fe875d965265e04722ccfc21df7f755d72" 575 | integrity sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA== 576 | dependencies: 577 | type-detect "4.0.8" 578 | 579 | "@sinonjs/fake-timers@^10.0.2": 580 | version "10.3.0" 581 | resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66" 582 | integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA== 583 | dependencies: 584 | "@sinonjs/commons" "^3.0.0" 585 | 586 | "@types/babel__core@^7.1.14": 587 | version "7.20.1" 588 | resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.1.tgz#916ecea274b0c776fec721e333e55762d3a9614b" 589 | integrity sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw== 590 | dependencies: 591 | "@babel/parser" "^7.20.7" 592 | "@babel/types" "^7.20.7" 593 | "@types/babel__generator" "*" 594 | "@types/babel__template" "*" 595 | "@types/babel__traverse" "*" 596 | 597 | "@types/babel__generator@*": 598 | version "7.6.4" 599 | resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.4.tgz#1f20ce4c5b1990b37900b63f050182d28c2439b7" 600 | integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg== 601 | dependencies: 602 | "@babel/types" "^7.0.0" 603 | 604 | "@types/babel__template@*": 605 | version "7.4.1" 606 | resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969" 607 | integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== 608 | dependencies: 609 | "@babel/parser" "^7.1.0" 610 | "@babel/types" "^7.0.0" 611 | 612 | "@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": 613 | version "7.20.1" 614 | resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.1.tgz#dd6f1d2411ae677dcb2db008c962598be31d6acf" 615 | integrity sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg== 616 | dependencies: 617 | "@babel/types" "^7.20.7" 618 | 619 | "@types/glob@^7.1.3": 620 | version "7.2.0" 621 | resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" 622 | integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== 623 | dependencies: 624 | "@types/minimatch" "*" 625 | "@types/node" "*" 626 | 627 | "@types/graceful-fs@^4.1.3": 628 | version "4.1.6" 629 | resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.6.tgz#e14b2576a1c25026b7f02ede1de3b84c3a1efeae" 630 | integrity sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw== 631 | dependencies: 632 | "@types/node" "*" 633 | 634 | "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": 635 | version "2.0.4" 636 | resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" 637 | integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== 638 | 639 | "@types/istanbul-lib-report@*": 640 | version "3.0.0" 641 | resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" 642 | integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== 643 | dependencies: 644 | "@types/istanbul-lib-coverage" "*" 645 | 646 | "@types/istanbul-reports@^3.0.0": 647 | version "3.0.1" 648 | resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" 649 | integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== 650 | dependencies: 651 | "@types/istanbul-lib-report" "*" 652 | 653 | "@types/jest@^29.5.3": 654 | version "29.5.3" 655 | resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.3.tgz#7a35dc0044ffb8b56325c6802a4781a626b05777" 656 | integrity sha512-1Nq7YrO/vJE/FYnqYyw0FS8LdrjExSgIiHyKg7xPpn+yi8Q4huZryKnkJatN1ZRH89Kw2v33/8ZMB7DuZeSLlA== 657 | dependencies: 658 | expect "^29.0.0" 659 | pretty-format "^29.0.0" 660 | 661 | "@types/json-schema@^7.0.11", "@types/json-schema@^7.0.6": 662 | version "7.0.12" 663 | resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb" 664 | integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA== 665 | 666 | "@types/lodash@^4.14.182": 667 | version "4.14.195" 668 | resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.195.tgz#bafc975b252eb6cea78882ce8a7b6bf22a6de632" 669 | integrity sha512-Hwx9EUgdwf2GLarOjQp5ZH8ZmblzcbTBC2wtQWNKARBSxM9ezRIAUpeDTgoQRAFB0+8CNWXVA9+MaSOzOF3nPg== 670 | 671 | "@types/minimatch@*": 672 | version "5.1.2" 673 | resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" 674 | integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== 675 | 676 | "@types/node@*": 677 | version "20.2.5" 678 | resolved "https://registry.yarnpkg.com/@types/node/-/node-20.2.5.tgz#26d295f3570323b2837d322180dfbf1ba156fefb" 679 | integrity sha512-JJulVEQXmiY9Px5axXHeYGLSjhkZEnD+MDPDGbCbIAbMslkKwmygtZFy1X6s/075Yo94sf8GuSlFfPzysQrWZQ== 680 | 681 | "@types/prettier@^2.1.5", "@types/prettier@^2.6.1": 682 | version "2.7.3" 683 | resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" 684 | integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== 685 | 686 | "@types/stack-utils@^2.0.0": 687 | version "2.0.1" 688 | resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" 689 | integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== 690 | 691 | "@types/yargs-parser@*": 692 | version "21.0.0" 693 | resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" 694 | integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== 695 | 696 | "@types/yargs@^17.0.8": 697 | version "17.0.24" 698 | resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.24.tgz#b3ef8d50ad4aa6aecf6ddc97c580a00f5aa11902" 699 | integrity sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw== 700 | dependencies: 701 | "@types/yargs-parser" "*" 702 | 703 | ansi-escapes@^4.2.1: 704 | version "4.3.2" 705 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" 706 | integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== 707 | dependencies: 708 | type-fest "^0.21.3" 709 | 710 | ansi-regex@^5.0.1: 711 | version "5.0.1" 712 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" 713 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 714 | 715 | ansi-styles@^3.2.1: 716 | version "3.2.1" 717 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 718 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 719 | dependencies: 720 | color-convert "^1.9.0" 721 | 722 | ansi-styles@^4.0.0, ansi-styles@^4.1.0: 723 | version "4.3.0" 724 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 725 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 726 | dependencies: 727 | color-convert "^2.0.1" 728 | 729 | ansi-styles@^5.0.0: 730 | version "5.2.0" 731 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" 732 | integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== 733 | 734 | any-promise@^1.0.0: 735 | version "1.3.0" 736 | resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" 737 | integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== 738 | 739 | anymatch@^3.0.3: 740 | version "3.1.3" 741 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" 742 | integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== 743 | dependencies: 744 | normalize-path "^3.0.0" 745 | picomatch "^2.0.4" 746 | 747 | argparse@^1.0.7: 748 | version "1.0.10" 749 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" 750 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== 751 | dependencies: 752 | sprintf-js "~1.0.2" 753 | 754 | argparse@^2.0.1: 755 | version "2.0.1" 756 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" 757 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== 758 | 759 | babel-jest@^29.6.1: 760 | version "29.6.1" 761 | resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.6.1.tgz#a7141ad1ed5ec50238f3cd36127636823111233a" 762 | integrity sha512-qu+3bdPEQC6KZSPz+4Fyjbga5OODNcp49j6GKzG1EKbkfyJBxEYGVUmVGpwCSeGouG52R4EgYMLb6p9YeEEQ4A== 763 | dependencies: 764 | "@jest/transform" "^29.6.1" 765 | "@types/babel__core" "^7.1.14" 766 | babel-plugin-istanbul "^6.1.1" 767 | babel-preset-jest "^29.5.0" 768 | chalk "^4.0.0" 769 | graceful-fs "^4.2.9" 770 | slash "^3.0.0" 771 | 772 | babel-plugin-istanbul@^6.1.1: 773 | version "6.1.1" 774 | resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" 775 | integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== 776 | dependencies: 777 | "@babel/helper-plugin-utils" "^7.0.0" 778 | "@istanbuljs/load-nyc-config" "^1.0.0" 779 | "@istanbuljs/schema" "^0.1.2" 780 | istanbul-lib-instrument "^5.0.4" 781 | test-exclude "^6.0.0" 782 | 783 | babel-plugin-jest-hoist@^29.5.0: 784 | version "29.5.0" 785 | resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz#a97db437936f441ec196990c9738d4b88538618a" 786 | integrity sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w== 787 | dependencies: 788 | "@babel/template" "^7.3.3" 789 | "@babel/types" "^7.3.3" 790 | "@types/babel__core" "^7.1.14" 791 | "@types/babel__traverse" "^7.0.6" 792 | 793 | babel-preset-current-node-syntax@^1.0.0: 794 | version "1.0.1" 795 | resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" 796 | integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== 797 | dependencies: 798 | "@babel/plugin-syntax-async-generators" "^7.8.4" 799 | "@babel/plugin-syntax-bigint" "^7.8.3" 800 | "@babel/plugin-syntax-class-properties" "^7.8.3" 801 | "@babel/plugin-syntax-import-meta" "^7.8.3" 802 | "@babel/plugin-syntax-json-strings" "^7.8.3" 803 | "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" 804 | "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" 805 | "@babel/plugin-syntax-numeric-separator" "^7.8.3" 806 | "@babel/plugin-syntax-object-rest-spread" "^7.8.3" 807 | "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" 808 | "@babel/plugin-syntax-optional-chaining" "^7.8.3" 809 | "@babel/plugin-syntax-top-level-await" "^7.8.3" 810 | 811 | babel-preset-jest@^29.5.0: 812 | version "29.5.0" 813 | resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz#57bc8cc88097af7ff6a5ab59d1cd29d52a5916e2" 814 | integrity sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg== 815 | dependencies: 816 | babel-plugin-jest-hoist "^29.5.0" 817 | babel-preset-current-node-syntax "^1.0.0" 818 | 819 | balanced-match@^1.0.0: 820 | version "1.0.2" 821 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 822 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 823 | 824 | brace-expansion@^1.1.7: 825 | version "1.1.11" 826 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 827 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 828 | dependencies: 829 | balanced-match "^1.0.0" 830 | concat-map "0.0.1" 831 | 832 | braces@^3.0.2: 833 | version "3.0.2" 834 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 835 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 836 | dependencies: 837 | fill-range "^7.0.1" 838 | 839 | browserslist@^4.21.9: 840 | version "4.21.9" 841 | resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.9.tgz#e11bdd3c313d7e2a9e87e8b4b0c7872b13897635" 842 | integrity sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg== 843 | dependencies: 844 | caniuse-lite "^1.0.30001503" 845 | electron-to-chromium "^1.4.431" 846 | node-releases "^2.0.12" 847 | update-browserslist-db "^1.0.11" 848 | 849 | bs-logger@0.x: 850 | version "0.2.6" 851 | resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" 852 | integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== 853 | dependencies: 854 | fast-json-stable-stringify "2.x" 855 | 856 | bser@2.1.1: 857 | version "2.1.1" 858 | resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" 859 | integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== 860 | dependencies: 861 | node-int64 "^0.4.0" 862 | 863 | buffer-from@^1.0.0: 864 | version "1.1.2" 865 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" 866 | integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== 867 | 868 | call-me-maybe@^1.0.1: 869 | version "1.0.2" 870 | resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.2.tgz#03f964f19522ba643b1b0693acb9152fe2074baa" 871 | integrity sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ== 872 | 873 | callsites@^3.0.0: 874 | version "3.1.0" 875 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 876 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 877 | 878 | camelcase@^5.3.1: 879 | version "5.3.1" 880 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" 881 | integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== 882 | 883 | camelcase@^6.2.0: 884 | version "6.3.0" 885 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" 886 | integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== 887 | 888 | caniuse-lite@^1.0.30001503: 889 | version "1.0.30001515" 890 | resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001515.tgz#418aefeed9d024cd3129bfae0ccc782d4cb8f12b" 891 | integrity sha512-eEFDwUOZbE24sb+Ecsx3+OvNETqjWIdabMy52oOkIgcUtAsQifjUG9q4U9dgTHJM2mfk4uEPxc0+xuFdJ629QA== 892 | 893 | chalk@^2.0.0: 894 | version "2.4.2" 895 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 896 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 897 | dependencies: 898 | ansi-styles "^3.2.1" 899 | escape-string-regexp "^1.0.5" 900 | supports-color "^5.3.0" 901 | 902 | chalk@^4.0.0: 903 | version "4.1.2" 904 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" 905 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 906 | dependencies: 907 | ansi-styles "^4.1.0" 908 | supports-color "^7.1.0" 909 | 910 | char-regex@^1.0.2: 911 | version "1.0.2" 912 | resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" 913 | integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== 914 | 915 | ci-info@^3.2.0: 916 | version "3.8.0" 917 | resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" 918 | integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== 919 | 920 | cjs-module-lexer@^1.0.0: 921 | version "1.2.3" 922 | resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107" 923 | integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== 924 | 925 | cli-color@^2.0.2: 926 | version "2.0.3" 927 | resolved "https://registry.yarnpkg.com/cli-color/-/cli-color-2.0.3.tgz#73769ba969080629670f3f2ef69a4bf4e7cc1879" 928 | integrity sha512-OkoZnxyC4ERN3zLzZaY9Emb7f/MhBOIpePv0Ycok0fJYT+Ouo00UBEIwsVsr0yoow++n5YWlSUgST9GKhNHiRQ== 929 | dependencies: 930 | d "^1.0.1" 931 | es5-ext "^0.10.61" 932 | es6-iterator "^2.0.3" 933 | memoizee "^0.4.15" 934 | timers-ext "^0.1.7" 935 | 936 | cliui@^8.0.1: 937 | version "8.0.1" 938 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" 939 | integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== 940 | dependencies: 941 | string-width "^4.2.0" 942 | strip-ansi "^6.0.1" 943 | wrap-ansi "^7.0.0" 944 | 945 | co@^4.6.0: 946 | version "4.6.0" 947 | resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" 948 | integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== 949 | 950 | collect-v8-coverage@^1.0.0: 951 | version "1.0.2" 952 | resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz#c0b29bcd33bcd0779a1344c2136051e6afd3d9e9" 953 | integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q== 954 | 955 | color-convert@^1.9.0: 956 | version "1.9.3" 957 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 958 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 959 | dependencies: 960 | color-name "1.1.3" 961 | 962 | color-convert@^2.0.1: 963 | version "2.0.1" 964 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 965 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 966 | dependencies: 967 | color-name "~1.1.4" 968 | 969 | color-name@1.1.3: 970 | version "1.1.3" 971 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 972 | integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== 973 | 974 | color-name@~1.1.4: 975 | version "1.1.4" 976 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 977 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 978 | 979 | concat-map@0.0.1: 980 | version "0.0.1" 981 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 982 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== 983 | 984 | convert-source-map@^1.6.0, convert-source-map@^1.7.0: 985 | version "1.9.0" 986 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" 987 | integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== 988 | 989 | convert-source-map@^2.0.0: 990 | version "2.0.0" 991 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" 992 | integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== 993 | 994 | cross-spawn@^7.0.3: 995 | version "7.0.3" 996 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" 997 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 998 | dependencies: 999 | path-key "^3.1.0" 1000 | shebang-command "^2.0.0" 1001 | which "^2.0.1" 1002 | 1003 | d@1, d@^1.0.1: 1004 | version "1.0.1" 1005 | resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" 1006 | integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== 1007 | dependencies: 1008 | es5-ext "^0.10.50" 1009 | type "^1.0.1" 1010 | 1011 | debug@^4.1.0, debug@^4.1.1: 1012 | version "4.3.4" 1013 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" 1014 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== 1015 | dependencies: 1016 | ms "2.1.2" 1017 | 1018 | dedent@^0.7.0: 1019 | version "0.7.0" 1020 | resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" 1021 | integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== 1022 | 1023 | deepmerge@^4.2.2: 1024 | version "4.3.1" 1025 | resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" 1026 | integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== 1027 | 1028 | detect-newline@^3.0.0: 1029 | version "3.1.0" 1030 | resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" 1031 | integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== 1032 | 1033 | diff-sequences@^29.4.3: 1034 | version "29.4.3" 1035 | resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.4.3.tgz#9314bc1fabe09267ffeca9cbafc457d8499a13f2" 1036 | integrity sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA== 1037 | 1038 | electron-to-chromium@^1.4.431: 1039 | version "1.4.457" 1040 | resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.457.tgz#3fdc7b4f97d628ac6b51e8b4b385befb362fe343" 1041 | integrity sha512-/g3UyNDmDd6ebeWapmAoiyy+Sy2HyJ+/X8KyvNeHfKRFfHaA2W8oF5fxD5F3tjBDcjpwo0iek6YNgxNXDBoEtA== 1042 | 1043 | emittery@^0.13.1: 1044 | version "0.13.1" 1045 | resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" 1046 | integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== 1047 | 1048 | emoji-regex@^8.0.0: 1049 | version "8.0.0" 1050 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 1051 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 1052 | 1053 | error-ex@^1.3.1: 1054 | version "1.3.2" 1055 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" 1056 | integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== 1057 | dependencies: 1058 | is-arrayish "^0.2.1" 1059 | 1060 | es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.50, es5-ext@^0.10.53, es5-ext@^0.10.61, es5-ext@~0.10.14, es5-ext@~0.10.2, es5-ext@~0.10.46: 1061 | version "0.10.62" 1062 | resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.62.tgz#5e6adc19a6da524bf3d1e02bbc8960e5eb49a9a5" 1063 | integrity sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA== 1064 | dependencies: 1065 | es6-iterator "^2.0.3" 1066 | es6-symbol "^3.1.3" 1067 | next-tick "^1.1.0" 1068 | 1069 | es6-iterator@^2.0.3: 1070 | version "2.0.3" 1071 | resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" 1072 | integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g== 1073 | dependencies: 1074 | d "1" 1075 | es5-ext "^0.10.35" 1076 | es6-symbol "^3.1.1" 1077 | 1078 | es6-symbol@^3.1.1, es6-symbol@^3.1.3: 1079 | version "3.1.3" 1080 | resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" 1081 | integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== 1082 | dependencies: 1083 | d "^1.0.1" 1084 | ext "^1.1.2" 1085 | 1086 | es6-weak-map@^2.0.3: 1087 | version "2.0.3" 1088 | resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.3.tgz#b6da1f16cc2cc0d9be43e6bdbfc5e7dfcdf31d53" 1089 | integrity sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA== 1090 | dependencies: 1091 | d "1" 1092 | es5-ext "^0.10.46" 1093 | es6-iterator "^2.0.3" 1094 | es6-symbol "^3.1.1" 1095 | 1096 | escalade@^3.1.1: 1097 | version "3.1.1" 1098 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" 1099 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== 1100 | 1101 | escape-string-regexp@^1.0.5: 1102 | version "1.0.5" 1103 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 1104 | integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== 1105 | 1106 | escape-string-regexp@^2.0.0: 1107 | version "2.0.0" 1108 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" 1109 | integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== 1110 | 1111 | esprima@^4.0.0: 1112 | version "4.0.1" 1113 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" 1114 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== 1115 | 1116 | event-emitter@^0.3.5: 1117 | version "0.3.5" 1118 | resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" 1119 | integrity sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA== 1120 | dependencies: 1121 | d "1" 1122 | es5-ext "~0.10.14" 1123 | 1124 | execa@^5.0.0: 1125 | version "5.1.1" 1126 | resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" 1127 | integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== 1128 | dependencies: 1129 | cross-spawn "^7.0.3" 1130 | get-stream "^6.0.0" 1131 | human-signals "^2.1.0" 1132 | is-stream "^2.0.0" 1133 | merge-stream "^2.0.0" 1134 | npm-run-path "^4.0.1" 1135 | onetime "^5.1.2" 1136 | signal-exit "^3.0.3" 1137 | strip-final-newline "^2.0.0" 1138 | 1139 | exit@^0.1.2: 1140 | version "0.1.2" 1141 | resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" 1142 | integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== 1143 | 1144 | expect@^29.0.0, expect@^29.6.1: 1145 | version "29.6.1" 1146 | resolved "https://registry.yarnpkg.com/expect/-/expect-29.6.1.tgz#64dd1c8f75e2c0b209418f2b8d36a07921adfdf1" 1147 | integrity sha512-XEdDLonERCU1n9uR56/Stx9OqojaLAQtZf9PrCHH9Hl8YXiEIka3H4NXJ3NOIBmQJTg7+j7buh34PMHfJujc8g== 1148 | dependencies: 1149 | "@jest/expect-utils" "^29.6.1" 1150 | "@types/node" "*" 1151 | jest-get-type "^29.4.3" 1152 | jest-matcher-utils "^29.6.1" 1153 | jest-message-util "^29.6.1" 1154 | jest-util "^29.6.1" 1155 | 1156 | ext@^1.1.2: 1157 | version "1.7.0" 1158 | resolved "https://registry.yarnpkg.com/ext/-/ext-1.7.0.tgz#0ea4383c0103d60e70be99e9a7f11027a33c4f5f" 1159 | integrity sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw== 1160 | dependencies: 1161 | type "^2.7.2" 1162 | 1163 | fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.1.0: 1164 | version "2.1.0" 1165 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 1166 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 1167 | 1168 | fb-watchman@^2.0.0: 1169 | version "2.0.2" 1170 | resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" 1171 | integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== 1172 | dependencies: 1173 | bser "2.1.1" 1174 | 1175 | fill-range@^7.0.1: 1176 | version "7.0.1" 1177 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 1178 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 1179 | dependencies: 1180 | to-regex-range "^5.0.1" 1181 | 1182 | find-up@^4.0.0, find-up@^4.1.0: 1183 | version "4.1.0" 1184 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" 1185 | integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== 1186 | dependencies: 1187 | locate-path "^5.0.0" 1188 | path-exists "^4.0.0" 1189 | 1190 | fs.realpath@^1.0.0: 1191 | version "1.0.0" 1192 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 1193 | integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== 1194 | 1195 | fsevents@^2.3.2: 1196 | version "2.3.2" 1197 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 1198 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 1199 | 1200 | function-bind@^1.1.1: 1201 | version "1.1.1" 1202 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 1203 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 1204 | 1205 | gensync@^1.0.0-beta.2: 1206 | version "1.0.0-beta.2" 1207 | resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" 1208 | integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== 1209 | 1210 | get-caller-file@^2.0.5: 1211 | version "2.0.5" 1212 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" 1213 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== 1214 | 1215 | get-package-type@^0.1.0: 1216 | version "0.1.0" 1217 | resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" 1218 | integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== 1219 | 1220 | get-stdin@^8.0.0: 1221 | version "8.0.0" 1222 | resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-8.0.0.tgz#cbad6a73feb75f6eeb22ba9e01f89aa28aa97a53" 1223 | integrity sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg== 1224 | 1225 | get-stream@^6.0.0: 1226 | version "6.0.1" 1227 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" 1228 | integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== 1229 | 1230 | glob-promise@^4.2.2: 1231 | version "4.2.2" 1232 | resolved "https://registry.yarnpkg.com/glob-promise/-/glob-promise-4.2.2.tgz#15f44bcba0e14219cd93af36da6bb905ff007877" 1233 | integrity sha512-xcUzJ8NWN5bktoTIX7eOclO1Npxd/dyVqUJxlLIDasT4C7KZyqlPIwkdJ0Ypiy3p2ZKahTjK4M9uC3sNSfNMzw== 1234 | dependencies: 1235 | "@types/glob" "^7.1.3" 1236 | 1237 | glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: 1238 | version "7.2.3" 1239 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" 1240 | integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== 1241 | dependencies: 1242 | fs.realpath "^1.0.0" 1243 | inflight "^1.0.4" 1244 | inherits "2" 1245 | minimatch "^3.1.1" 1246 | once "^1.3.0" 1247 | path-is-absolute "^1.0.0" 1248 | 1249 | globals@^11.1.0: 1250 | version "11.12.0" 1251 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" 1252 | integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== 1253 | 1254 | graceful-fs@^4.2.9: 1255 | version "4.2.11" 1256 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" 1257 | integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== 1258 | 1259 | has-flag@^3.0.0: 1260 | version "3.0.0" 1261 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 1262 | integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== 1263 | 1264 | has-flag@^4.0.0: 1265 | version "4.0.0" 1266 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 1267 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 1268 | 1269 | has@^1.0.3: 1270 | version "1.0.3" 1271 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 1272 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 1273 | dependencies: 1274 | function-bind "^1.1.1" 1275 | 1276 | html-escaper@^2.0.0: 1277 | version "2.0.2" 1278 | resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" 1279 | integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== 1280 | 1281 | human-signals@^2.1.0: 1282 | version "2.1.0" 1283 | resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" 1284 | integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== 1285 | 1286 | import-local@^3.0.2: 1287 | version "3.1.0" 1288 | resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" 1289 | integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== 1290 | dependencies: 1291 | pkg-dir "^4.2.0" 1292 | resolve-cwd "^3.0.0" 1293 | 1294 | imurmurhash@^0.1.4: 1295 | version "0.1.4" 1296 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 1297 | integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== 1298 | 1299 | inflight@^1.0.4: 1300 | version "1.0.6" 1301 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 1302 | integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== 1303 | dependencies: 1304 | once "^1.3.0" 1305 | wrappy "1" 1306 | 1307 | inherits@2: 1308 | version "2.0.4" 1309 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 1310 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 1311 | 1312 | is-arrayish@^0.2.1: 1313 | version "0.2.1" 1314 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 1315 | integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== 1316 | 1317 | is-core-module@^2.11.0: 1318 | version "2.12.1" 1319 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd" 1320 | integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg== 1321 | dependencies: 1322 | has "^1.0.3" 1323 | 1324 | is-extglob@^2.1.1: 1325 | version "2.1.1" 1326 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 1327 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== 1328 | 1329 | is-fullwidth-code-point@^3.0.0: 1330 | version "3.0.0" 1331 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" 1332 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 1333 | 1334 | is-generator-fn@^2.0.0: 1335 | version "2.1.0" 1336 | resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" 1337 | integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== 1338 | 1339 | is-glob@^4.0.3: 1340 | version "4.0.3" 1341 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" 1342 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 1343 | dependencies: 1344 | is-extglob "^2.1.1" 1345 | 1346 | is-number@^7.0.0: 1347 | version "7.0.0" 1348 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 1349 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 1350 | 1351 | is-promise@^2.2.2: 1352 | version "2.2.2" 1353 | resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" 1354 | integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== 1355 | 1356 | is-stream@^2.0.0: 1357 | version "2.0.1" 1358 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" 1359 | integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== 1360 | 1361 | isexe@^2.0.0: 1362 | version "2.0.0" 1363 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 1364 | integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== 1365 | 1366 | istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: 1367 | version "3.2.0" 1368 | resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" 1369 | integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== 1370 | 1371 | istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: 1372 | version "5.2.1" 1373 | resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" 1374 | integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== 1375 | dependencies: 1376 | "@babel/core" "^7.12.3" 1377 | "@babel/parser" "^7.14.7" 1378 | "@istanbuljs/schema" "^0.1.2" 1379 | istanbul-lib-coverage "^3.2.0" 1380 | semver "^6.3.0" 1381 | 1382 | istanbul-lib-report@^3.0.0: 1383 | version "3.0.0" 1384 | resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" 1385 | integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== 1386 | dependencies: 1387 | istanbul-lib-coverage "^3.0.0" 1388 | make-dir "^3.0.0" 1389 | supports-color "^7.1.0" 1390 | 1391 | istanbul-lib-source-maps@^4.0.0: 1392 | version "4.0.1" 1393 | resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" 1394 | integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== 1395 | dependencies: 1396 | debug "^4.1.1" 1397 | istanbul-lib-coverage "^3.0.0" 1398 | source-map "^0.6.1" 1399 | 1400 | istanbul-reports@^3.1.3: 1401 | version "3.1.5" 1402 | resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.5.tgz#cc9a6ab25cb25659810e4785ed9d9fb742578bae" 1403 | integrity sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w== 1404 | dependencies: 1405 | html-escaper "^2.0.0" 1406 | istanbul-lib-report "^3.0.0" 1407 | 1408 | jest-changed-files@^29.5.0: 1409 | version "29.5.0" 1410 | resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.5.0.tgz#e88786dca8bf2aa899ec4af7644e16d9dcf9b23e" 1411 | integrity sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag== 1412 | dependencies: 1413 | execa "^5.0.0" 1414 | p-limit "^3.1.0" 1415 | 1416 | jest-circus@^29.6.1: 1417 | version "29.6.1" 1418 | resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.6.1.tgz#861dab37e71a89907d1c0fabc54a0019738ed824" 1419 | integrity sha512-tPbYLEiBU4MYAL2XoZme/bgfUeotpDBd81lgHLCbDZZFaGmECk0b+/xejPFtmiBP87GgP/y4jplcRpbH+fgCzQ== 1420 | dependencies: 1421 | "@jest/environment" "^29.6.1" 1422 | "@jest/expect" "^29.6.1" 1423 | "@jest/test-result" "^29.6.1" 1424 | "@jest/types" "^29.6.1" 1425 | "@types/node" "*" 1426 | chalk "^4.0.0" 1427 | co "^4.6.0" 1428 | dedent "^0.7.0" 1429 | is-generator-fn "^2.0.0" 1430 | jest-each "^29.6.1" 1431 | jest-matcher-utils "^29.6.1" 1432 | jest-message-util "^29.6.1" 1433 | jest-runtime "^29.6.1" 1434 | jest-snapshot "^29.6.1" 1435 | jest-util "^29.6.1" 1436 | p-limit "^3.1.0" 1437 | pretty-format "^29.6.1" 1438 | pure-rand "^6.0.0" 1439 | slash "^3.0.0" 1440 | stack-utils "^2.0.3" 1441 | 1442 | jest-cli@^29.6.1: 1443 | version "29.6.1" 1444 | resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.6.1.tgz#99d9afa7449538221c71f358f0fdd3e9c6e89f72" 1445 | integrity sha512-607dSgTA4ODIN6go9w6xY3EYkyPFGicx51a69H7yfvt7lN53xNswEVLovq+E77VsTRi5fWprLH0yl4DJgE8Ing== 1446 | dependencies: 1447 | "@jest/core" "^29.6.1" 1448 | "@jest/test-result" "^29.6.1" 1449 | "@jest/types" "^29.6.1" 1450 | chalk "^4.0.0" 1451 | exit "^0.1.2" 1452 | graceful-fs "^4.2.9" 1453 | import-local "^3.0.2" 1454 | jest-config "^29.6.1" 1455 | jest-util "^29.6.1" 1456 | jest-validate "^29.6.1" 1457 | prompts "^2.0.1" 1458 | yargs "^17.3.1" 1459 | 1460 | jest-config@^29.6.1: 1461 | version "29.6.1" 1462 | resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.6.1.tgz#d785344509065d53a238224c6cdc0ed8e2f2f0dd" 1463 | integrity sha512-XdjYV2fy2xYixUiV2Wc54t3Z4oxYPAELUzWnV6+mcbq0rh742X2p52pii5A3oeRzYjLnQxCsZmp0qpI6klE2cQ== 1464 | dependencies: 1465 | "@babel/core" "^7.11.6" 1466 | "@jest/test-sequencer" "^29.6.1" 1467 | "@jest/types" "^29.6.1" 1468 | babel-jest "^29.6.1" 1469 | chalk "^4.0.0" 1470 | ci-info "^3.2.0" 1471 | deepmerge "^4.2.2" 1472 | glob "^7.1.3" 1473 | graceful-fs "^4.2.9" 1474 | jest-circus "^29.6.1" 1475 | jest-environment-node "^29.6.1" 1476 | jest-get-type "^29.4.3" 1477 | jest-regex-util "^29.4.3" 1478 | jest-resolve "^29.6.1" 1479 | jest-runner "^29.6.1" 1480 | jest-util "^29.6.1" 1481 | jest-validate "^29.6.1" 1482 | micromatch "^4.0.4" 1483 | parse-json "^5.2.0" 1484 | pretty-format "^29.6.1" 1485 | slash "^3.0.0" 1486 | strip-json-comments "^3.1.1" 1487 | 1488 | jest-diff@^29.6.1: 1489 | version "29.6.1" 1490 | resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.6.1.tgz#13df6db0a89ee6ad93c747c75c85c70ba941e545" 1491 | integrity sha512-FsNCvinvl8oVxpNLttNQX7FAq7vR+gMDGj90tiP7siWw1UdakWUGqrylpsYrpvj908IYckm5Y0Q7azNAozU1Kg== 1492 | dependencies: 1493 | chalk "^4.0.0" 1494 | diff-sequences "^29.4.3" 1495 | jest-get-type "^29.4.3" 1496 | pretty-format "^29.6.1" 1497 | 1498 | jest-docblock@^29.4.3: 1499 | version "29.4.3" 1500 | resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.4.3.tgz#90505aa89514a1c7dceeac1123df79e414636ea8" 1501 | integrity sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg== 1502 | dependencies: 1503 | detect-newline "^3.0.0" 1504 | 1505 | jest-each@^29.6.1: 1506 | version "29.6.1" 1507 | resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.6.1.tgz#975058e5b8f55c6780beab8b6ab214921815c89c" 1508 | integrity sha512-n5eoj5eiTHpKQCAVcNTT7DRqeUmJ01hsAL0Q1SMiBHcBcvTKDELixQOGMCpqhbIuTcfC4kMfSnpmDqRgRJcLNQ== 1509 | dependencies: 1510 | "@jest/types" "^29.6.1" 1511 | chalk "^4.0.0" 1512 | jest-get-type "^29.4.3" 1513 | jest-util "^29.6.1" 1514 | pretty-format "^29.6.1" 1515 | 1516 | jest-environment-node@^29.6.1: 1517 | version "29.6.1" 1518 | resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.6.1.tgz#08a122dece39e58bc388da815a2166c58b4abec6" 1519 | integrity sha512-ZNIfAiE+foBog24W+2caIldl4Irh8Lx1PUhg/GZ0odM1d/h2qORAsejiFc7zb+SEmYPn1yDZzEDSU5PmDkmVLQ== 1520 | dependencies: 1521 | "@jest/environment" "^29.6.1" 1522 | "@jest/fake-timers" "^29.6.1" 1523 | "@jest/types" "^29.6.1" 1524 | "@types/node" "*" 1525 | jest-mock "^29.6.1" 1526 | jest-util "^29.6.1" 1527 | 1528 | jest-get-type@^29.4.3: 1529 | version "29.4.3" 1530 | resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.4.3.tgz#1ab7a5207c995161100b5187159ca82dd48b3dd5" 1531 | integrity sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg== 1532 | 1533 | jest-haste-map@^29.6.1: 1534 | version "29.6.1" 1535 | resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.6.1.tgz#62655c7a1c1b349a3206441330fb2dbdb4b63803" 1536 | integrity sha512-0m7f9PZXxOCk1gRACiVgX85knUKPKLPg4oRCjLoqIm9brTHXaorMA0JpmtmVkQiT8nmXyIVoZd/nnH1cfC33ig== 1537 | dependencies: 1538 | "@jest/types" "^29.6.1" 1539 | "@types/graceful-fs" "^4.1.3" 1540 | "@types/node" "*" 1541 | anymatch "^3.0.3" 1542 | fb-watchman "^2.0.0" 1543 | graceful-fs "^4.2.9" 1544 | jest-regex-util "^29.4.3" 1545 | jest-util "^29.6.1" 1546 | jest-worker "^29.6.1" 1547 | micromatch "^4.0.4" 1548 | walker "^1.0.8" 1549 | optionalDependencies: 1550 | fsevents "^2.3.2" 1551 | 1552 | jest-leak-detector@^29.6.1: 1553 | version "29.6.1" 1554 | resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.6.1.tgz#66a902c81318e66e694df7d096a95466cb962f8e" 1555 | integrity sha512-OrxMNyZirpOEwkF3UHnIkAiZbtkBWiye+hhBweCHkVbCgyEy71Mwbb5zgeTNYWJBi1qgDVfPC1IwO9dVEeTLwQ== 1556 | dependencies: 1557 | jest-get-type "^29.4.3" 1558 | pretty-format "^29.6.1" 1559 | 1560 | jest-matcher-utils@^29.6.1: 1561 | version "29.6.1" 1562 | resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.6.1.tgz#6c60075d84655d6300c5d5128f46531848160b53" 1563 | integrity sha512-SLaztw9d2mfQQKHmJXKM0HCbl2PPVld/t9Xa6P9sgiExijviSp7TnZZpw2Fpt+OI3nwUO/slJbOfzfUMKKC5QA== 1564 | dependencies: 1565 | chalk "^4.0.0" 1566 | jest-diff "^29.6.1" 1567 | jest-get-type "^29.4.3" 1568 | pretty-format "^29.6.1" 1569 | 1570 | jest-message-util@^29.6.1: 1571 | version "29.6.1" 1572 | resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.6.1.tgz#d0b21d87f117e1b9e165e24f245befd2ff34ff8d" 1573 | integrity sha512-KoAW2zAmNSd3Gk88uJ56qXUWbFk787QKmjjJVOjtGFmmGSZgDBrlIL4AfQw1xyMYPNVD7dNInfIbur9B2rd/wQ== 1574 | dependencies: 1575 | "@babel/code-frame" "^7.12.13" 1576 | "@jest/types" "^29.6.1" 1577 | "@types/stack-utils" "^2.0.0" 1578 | chalk "^4.0.0" 1579 | graceful-fs "^4.2.9" 1580 | micromatch "^4.0.4" 1581 | pretty-format "^29.6.1" 1582 | slash "^3.0.0" 1583 | stack-utils "^2.0.3" 1584 | 1585 | jest-mock@^29.6.1: 1586 | version "29.6.1" 1587 | resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.6.1.tgz#049ee26aea8cbf54c764af649070910607316517" 1588 | integrity sha512-brovyV9HBkjXAEdRooaTQK42n8usKoSRR3gihzUpYeV/vwqgSoNfrksO7UfSACnPmxasO/8TmHM3w9Hp3G1dgw== 1589 | dependencies: 1590 | "@jest/types" "^29.6.1" 1591 | "@types/node" "*" 1592 | jest-util "^29.6.1" 1593 | 1594 | jest-pnp-resolver@^1.2.2: 1595 | version "1.2.3" 1596 | resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" 1597 | integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== 1598 | 1599 | jest-regex-util@^29.4.3: 1600 | version "29.4.3" 1601 | resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.4.3.tgz#a42616141e0cae052cfa32c169945d00c0aa0bb8" 1602 | integrity sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg== 1603 | 1604 | jest-resolve-dependencies@^29.6.1: 1605 | version "29.6.1" 1606 | resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.6.1.tgz#b85b06670f987a62515bbf625d54a499e3d708f5" 1607 | integrity sha512-BbFvxLXtcldaFOhNMXmHRWx1nXQO5LoXiKSGQcA1LxxirYceZT6ch8KTE1bK3X31TNG/JbkI7OkS/ABexVahiw== 1608 | dependencies: 1609 | jest-regex-util "^29.4.3" 1610 | jest-snapshot "^29.6.1" 1611 | 1612 | jest-resolve@^29.6.1: 1613 | version "29.6.1" 1614 | resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.6.1.tgz#4c3324b993a85e300add2f8609f51b80ddea39ee" 1615 | integrity sha512-AeRkyS8g37UyJiP9w3mmI/VXU/q8l/IH52vj/cDAyScDcemRbSBhfX/NMYIGilQgSVwsjxrCHf3XJu4f+lxCMg== 1616 | dependencies: 1617 | chalk "^4.0.0" 1618 | graceful-fs "^4.2.9" 1619 | jest-haste-map "^29.6.1" 1620 | jest-pnp-resolver "^1.2.2" 1621 | jest-util "^29.6.1" 1622 | jest-validate "^29.6.1" 1623 | resolve "^1.20.0" 1624 | resolve.exports "^2.0.0" 1625 | slash "^3.0.0" 1626 | 1627 | jest-runner@^29.6.1: 1628 | version "29.6.1" 1629 | resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.6.1.tgz#54557087e7972d345540d622ab5bfc3d8f34688c" 1630 | integrity sha512-tw0wb2Q9yhjAQ2w8rHRDxteryyIck7gIzQE4Reu3JuOBpGp96xWgF0nY8MDdejzrLCZKDcp8JlZrBN/EtkQvPQ== 1631 | dependencies: 1632 | "@jest/console" "^29.6.1" 1633 | "@jest/environment" "^29.6.1" 1634 | "@jest/test-result" "^29.6.1" 1635 | "@jest/transform" "^29.6.1" 1636 | "@jest/types" "^29.6.1" 1637 | "@types/node" "*" 1638 | chalk "^4.0.0" 1639 | emittery "^0.13.1" 1640 | graceful-fs "^4.2.9" 1641 | jest-docblock "^29.4.3" 1642 | jest-environment-node "^29.6.1" 1643 | jest-haste-map "^29.6.1" 1644 | jest-leak-detector "^29.6.1" 1645 | jest-message-util "^29.6.1" 1646 | jest-resolve "^29.6.1" 1647 | jest-runtime "^29.6.1" 1648 | jest-util "^29.6.1" 1649 | jest-watcher "^29.6.1" 1650 | jest-worker "^29.6.1" 1651 | p-limit "^3.1.0" 1652 | source-map-support "0.5.13" 1653 | 1654 | jest-runtime@^29.6.1: 1655 | version "29.6.1" 1656 | resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.6.1.tgz#8a0fc9274ef277f3d70ba19d238e64334958a0dc" 1657 | integrity sha512-D6/AYOA+Lhs5e5il8+5pSLemjtJezUr+8zx+Sn8xlmOux3XOqx4d8l/2udBea8CRPqqrzhsKUsN/gBDE/IcaPQ== 1658 | dependencies: 1659 | "@jest/environment" "^29.6.1" 1660 | "@jest/fake-timers" "^29.6.1" 1661 | "@jest/globals" "^29.6.1" 1662 | "@jest/source-map" "^29.6.0" 1663 | "@jest/test-result" "^29.6.1" 1664 | "@jest/transform" "^29.6.1" 1665 | "@jest/types" "^29.6.1" 1666 | "@types/node" "*" 1667 | chalk "^4.0.0" 1668 | cjs-module-lexer "^1.0.0" 1669 | collect-v8-coverage "^1.0.0" 1670 | glob "^7.1.3" 1671 | graceful-fs "^4.2.9" 1672 | jest-haste-map "^29.6.1" 1673 | jest-message-util "^29.6.1" 1674 | jest-mock "^29.6.1" 1675 | jest-regex-util "^29.4.3" 1676 | jest-resolve "^29.6.1" 1677 | jest-snapshot "^29.6.1" 1678 | jest-util "^29.6.1" 1679 | slash "^3.0.0" 1680 | strip-bom "^4.0.0" 1681 | 1682 | jest-snapshot@^29.6.1: 1683 | version "29.6.1" 1684 | resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.6.1.tgz#0d083cb7de716d5d5cdbe80d598ed2fbafac0239" 1685 | integrity sha512-G4UQE1QQ6OaCgfY+A0uR1W2AY0tGXUPQpoUClhWHq1Xdnx1H6JOrC2nH5lqnOEqaDgbHFgIwZ7bNq24HpB180A== 1686 | dependencies: 1687 | "@babel/core" "^7.11.6" 1688 | "@babel/generator" "^7.7.2" 1689 | "@babel/plugin-syntax-jsx" "^7.7.2" 1690 | "@babel/plugin-syntax-typescript" "^7.7.2" 1691 | "@babel/types" "^7.3.3" 1692 | "@jest/expect-utils" "^29.6.1" 1693 | "@jest/transform" "^29.6.1" 1694 | "@jest/types" "^29.6.1" 1695 | "@types/prettier" "^2.1.5" 1696 | babel-preset-current-node-syntax "^1.0.0" 1697 | chalk "^4.0.0" 1698 | expect "^29.6.1" 1699 | graceful-fs "^4.2.9" 1700 | jest-diff "^29.6.1" 1701 | jest-get-type "^29.4.3" 1702 | jest-matcher-utils "^29.6.1" 1703 | jest-message-util "^29.6.1" 1704 | jest-util "^29.6.1" 1705 | natural-compare "^1.4.0" 1706 | pretty-format "^29.6.1" 1707 | semver "^7.5.3" 1708 | 1709 | jest-util@^29.0.0, jest-util@^29.6.1: 1710 | version "29.6.1" 1711 | resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.6.1.tgz#c9e29a87a6edbf1e39e6dee2b4689b8a146679cb" 1712 | integrity sha512-NRFCcjc+/uO3ijUVyNOQJluf8PtGCe/W6cix36+M3cTFgiYqFOOW5MgN4JOOcvbUhcKTYVd1CvHz/LWi8d16Mg== 1713 | dependencies: 1714 | "@jest/types" "^29.6.1" 1715 | "@types/node" "*" 1716 | chalk "^4.0.0" 1717 | ci-info "^3.2.0" 1718 | graceful-fs "^4.2.9" 1719 | picomatch "^2.2.3" 1720 | 1721 | jest-validate@^29.6.1: 1722 | version "29.6.1" 1723 | resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.6.1.tgz#765e684af6e2c86dce950aebefbbcd4546d69f7b" 1724 | integrity sha512-r3Ds69/0KCN4vx4sYAbGL1EVpZ7MSS0vLmd3gV78O+NAx3PDQQukRU5hNHPXlyqCgFY8XUk7EuTMLugh0KzahA== 1725 | dependencies: 1726 | "@jest/types" "^29.6.1" 1727 | camelcase "^6.2.0" 1728 | chalk "^4.0.0" 1729 | jest-get-type "^29.4.3" 1730 | leven "^3.1.0" 1731 | pretty-format "^29.6.1" 1732 | 1733 | jest-watcher@^29.6.1: 1734 | version "29.6.1" 1735 | resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.6.1.tgz#7c0c43ddd52418af134c551c92c9ea31e5ec942e" 1736 | integrity sha512-d4wpjWTS7HEZPaaj8m36QiaP856JthRZkrgcIY/7ISoUWPIillrXM23WPboZVLbiwZBt4/qn2Jke84Sla6JhFA== 1737 | dependencies: 1738 | "@jest/test-result" "^29.6.1" 1739 | "@jest/types" "^29.6.1" 1740 | "@types/node" "*" 1741 | ansi-escapes "^4.2.1" 1742 | chalk "^4.0.0" 1743 | emittery "^0.13.1" 1744 | jest-util "^29.6.1" 1745 | string-length "^4.0.1" 1746 | 1747 | jest-worker@^29.6.1: 1748 | version "29.6.1" 1749 | resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.6.1.tgz#64b015f0e985ef3a8ad049b61fe92b3db74a5319" 1750 | integrity sha512-U+Wrbca7S8ZAxAe9L6nb6g8kPdia5hj32Puu5iOqBCMTMWFHXuK6dOV2IFrpedbTV8fjMFLdWNttQTBL6u2MRA== 1751 | dependencies: 1752 | "@types/node" "*" 1753 | jest-util "^29.6.1" 1754 | merge-stream "^2.0.0" 1755 | supports-color "^8.0.0" 1756 | 1757 | jest@^29.6.1: 1758 | version "29.6.1" 1759 | resolved "https://registry.yarnpkg.com/jest/-/jest-29.6.1.tgz#74be1cb719c3abe439f2d94aeb18e6540a5b02ad" 1760 | integrity sha512-Nirw5B4nn69rVUZtemCQhwxOBhm0nsp3hmtF4rzCeWD7BkjAXRIji7xWQfnTNbz9g0aVsBX6aZK3n+23LM6uDw== 1761 | dependencies: 1762 | "@jest/core" "^29.6.1" 1763 | "@jest/types" "^29.6.1" 1764 | import-local "^3.0.2" 1765 | jest-cli "^29.6.1" 1766 | 1767 | js-tokens@^4.0.0: 1768 | version "4.0.0" 1769 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 1770 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 1771 | 1772 | js-yaml@^3.13.1: 1773 | version "3.14.1" 1774 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" 1775 | integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== 1776 | dependencies: 1777 | argparse "^1.0.7" 1778 | esprima "^4.0.0" 1779 | 1780 | js-yaml@^4.1.0: 1781 | version "4.1.0" 1782 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" 1783 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== 1784 | dependencies: 1785 | argparse "^2.0.1" 1786 | 1787 | jsesc@^2.5.1: 1788 | version "2.5.2" 1789 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" 1790 | integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== 1791 | 1792 | json-parse-even-better-errors@^2.3.0: 1793 | version "2.3.1" 1794 | resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" 1795 | integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== 1796 | 1797 | json-schema-to-typescript@^13.0.1: 1798 | version "13.0.1" 1799 | resolved "https://registry.yarnpkg.com/json-schema-to-typescript/-/json-schema-to-typescript-13.0.1.tgz#efcde0733dd9d3b535ffd66a444526d9ab6de70e" 1800 | integrity sha512-VU+Spn84eLJyt8R0Bmg2soTwHQFgvrGrU7V8mXbhqWFdEYCFekSYk4JcpCzx0i/WzjEVJKAU7r0y0PVYT14E6Q== 1801 | dependencies: 1802 | "@bcherny/json-schema-ref-parser" "10.0.5-fork" 1803 | "@types/json-schema" "^7.0.11" 1804 | "@types/lodash" "^4.14.182" 1805 | "@types/prettier" "^2.6.1" 1806 | cli-color "^2.0.2" 1807 | get-stdin "^8.0.0" 1808 | glob "^7.1.6" 1809 | glob-promise "^4.2.2" 1810 | is-glob "^4.0.3" 1811 | lodash "^4.17.21" 1812 | minimist "^1.2.6" 1813 | mkdirp "^1.0.4" 1814 | mz "^2.7.0" 1815 | prettier "^2.6.2" 1816 | 1817 | json5@^2.2.2, json5@^2.2.3: 1818 | version "2.2.3" 1819 | resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" 1820 | integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== 1821 | 1822 | kleur@^3.0.3: 1823 | version "3.0.3" 1824 | resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" 1825 | integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== 1826 | 1827 | leven@^3.1.0: 1828 | version "3.1.0" 1829 | resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" 1830 | integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== 1831 | 1832 | lines-and-columns@^1.1.6: 1833 | version "1.2.4" 1834 | resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" 1835 | integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== 1836 | 1837 | locate-path@^5.0.0: 1838 | version "5.0.0" 1839 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" 1840 | integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== 1841 | dependencies: 1842 | p-locate "^4.1.0" 1843 | 1844 | lodash.memoize@4.x: 1845 | version "4.1.2" 1846 | resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" 1847 | integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== 1848 | 1849 | lodash@^4.17.21: 1850 | version "4.17.21" 1851 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" 1852 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 1853 | 1854 | lru-cache@^5.1.1: 1855 | version "5.1.1" 1856 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" 1857 | integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== 1858 | dependencies: 1859 | yallist "^3.0.2" 1860 | 1861 | lru-cache@^6.0.0: 1862 | version "6.0.0" 1863 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" 1864 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 1865 | dependencies: 1866 | yallist "^4.0.0" 1867 | 1868 | lru-queue@^0.1.0: 1869 | version "0.1.0" 1870 | resolved "https://registry.yarnpkg.com/lru-queue/-/lru-queue-0.1.0.tgz#2738bd9f0d3cf4f84490c5736c48699ac632cda3" 1871 | integrity sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ== 1872 | dependencies: 1873 | es5-ext "~0.10.2" 1874 | 1875 | make-dir@^3.0.0: 1876 | version "3.1.0" 1877 | resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" 1878 | integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== 1879 | dependencies: 1880 | semver "^6.0.0" 1881 | 1882 | make-error@1.x: 1883 | version "1.3.6" 1884 | resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" 1885 | integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== 1886 | 1887 | makeerror@1.0.12: 1888 | version "1.0.12" 1889 | resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" 1890 | integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== 1891 | dependencies: 1892 | tmpl "1.0.5" 1893 | 1894 | memoizee@^0.4.15: 1895 | version "0.4.15" 1896 | resolved "https://registry.yarnpkg.com/memoizee/-/memoizee-0.4.15.tgz#e6f3d2da863f318d02225391829a6c5956555b72" 1897 | integrity sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ== 1898 | dependencies: 1899 | d "^1.0.1" 1900 | es5-ext "^0.10.53" 1901 | es6-weak-map "^2.0.3" 1902 | event-emitter "^0.3.5" 1903 | is-promise "^2.2.2" 1904 | lru-queue "^0.1.0" 1905 | next-tick "^1.1.0" 1906 | timers-ext "^0.1.7" 1907 | 1908 | merge-stream@^2.0.0: 1909 | version "2.0.0" 1910 | resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" 1911 | integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== 1912 | 1913 | micromatch@^4.0.4: 1914 | version "4.0.5" 1915 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" 1916 | integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== 1917 | dependencies: 1918 | braces "^3.0.2" 1919 | picomatch "^2.3.1" 1920 | 1921 | mimic-fn@^2.1.0: 1922 | version "2.1.0" 1923 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" 1924 | integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== 1925 | 1926 | minimatch@^3.0.4, minimatch@^3.1.1: 1927 | version "3.1.2" 1928 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" 1929 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 1930 | dependencies: 1931 | brace-expansion "^1.1.7" 1932 | 1933 | minimist@^1.2.6: 1934 | version "1.2.8" 1935 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" 1936 | integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== 1937 | 1938 | mkdirp@^1.0.4: 1939 | version "1.0.4" 1940 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" 1941 | integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== 1942 | 1943 | ms@2.1.2: 1944 | version "2.1.2" 1945 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 1946 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 1947 | 1948 | mz@^2.7.0: 1949 | version "2.7.0" 1950 | resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" 1951 | integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== 1952 | dependencies: 1953 | any-promise "^1.0.0" 1954 | object-assign "^4.0.1" 1955 | thenify-all "^1.0.0" 1956 | 1957 | natural-compare@^1.4.0: 1958 | version "1.4.0" 1959 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 1960 | integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== 1961 | 1962 | next-tick@1, next-tick@^1.1.0: 1963 | version "1.1.0" 1964 | resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" 1965 | integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== 1966 | 1967 | node-int64@^0.4.0: 1968 | version "0.4.0" 1969 | resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" 1970 | integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== 1971 | 1972 | node-releases@^2.0.12: 1973 | version "2.0.13" 1974 | resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" 1975 | integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== 1976 | 1977 | normalize-path@^3.0.0: 1978 | version "3.0.0" 1979 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 1980 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 1981 | 1982 | npm-run-path@^4.0.1: 1983 | version "4.0.1" 1984 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" 1985 | integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== 1986 | dependencies: 1987 | path-key "^3.0.0" 1988 | 1989 | object-assign@^4.0.1: 1990 | version "4.1.1" 1991 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 1992 | integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== 1993 | 1994 | once@^1.3.0: 1995 | version "1.4.0" 1996 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1997 | integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== 1998 | dependencies: 1999 | wrappy "1" 2000 | 2001 | onetime@^5.1.2: 2002 | version "5.1.2" 2003 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" 2004 | integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== 2005 | dependencies: 2006 | mimic-fn "^2.1.0" 2007 | 2008 | p-limit@^2.2.0: 2009 | version "2.3.0" 2010 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" 2011 | integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== 2012 | dependencies: 2013 | p-try "^2.0.0" 2014 | 2015 | p-limit@^3.1.0: 2016 | version "3.1.0" 2017 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" 2018 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== 2019 | dependencies: 2020 | yocto-queue "^0.1.0" 2021 | 2022 | p-locate@^4.1.0: 2023 | version "4.1.0" 2024 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" 2025 | integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== 2026 | dependencies: 2027 | p-limit "^2.2.0" 2028 | 2029 | p-try@^2.0.0: 2030 | version "2.2.0" 2031 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" 2032 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== 2033 | 2034 | parse-json@^5.2.0: 2035 | version "5.2.0" 2036 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" 2037 | integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== 2038 | dependencies: 2039 | "@babel/code-frame" "^7.0.0" 2040 | error-ex "^1.3.1" 2041 | json-parse-even-better-errors "^2.3.0" 2042 | lines-and-columns "^1.1.6" 2043 | 2044 | path-exists@^4.0.0: 2045 | version "4.0.0" 2046 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" 2047 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 2048 | 2049 | path-is-absolute@^1.0.0: 2050 | version "1.0.1" 2051 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 2052 | integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== 2053 | 2054 | path-key@^3.0.0, path-key@^3.1.0: 2055 | version "3.1.1" 2056 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 2057 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 2058 | 2059 | path-parse@^1.0.7: 2060 | version "1.0.7" 2061 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" 2062 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 2063 | 2064 | picocolors@^1.0.0: 2065 | version "1.0.0" 2066 | resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" 2067 | integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== 2068 | 2069 | picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1: 2070 | version "2.3.1" 2071 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 2072 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 2073 | 2074 | pirates@^4.0.4: 2075 | version "4.0.6" 2076 | resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" 2077 | integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== 2078 | 2079 | pkg-dir@^4.2.0: 2080 | version "4.2.0" 2081 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" 2082 | integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== 2083 | dependencies: 2084 | find-up "^4.0.0" 2085 | 2086 | prettier@^2.6.2: 2087 | version "2.8.8" 2088 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" 2089 | integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== 2090 | 2091 | pretty-format@^29.0.0, pretty-format@^29.6.1: 2092 | version "29.6.1" 2093 | resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.6.1.tgz#ec838c288850b7c4f9090b867c2d4f4edbfb0f3e" 2094 | integrity sha512-7jRj+yXO0W7e4/tSJKoR7HRIHLPPjtNaUGG2xxKQnGvPNRkgWcQ0AZX6P4KBRJN4FcTBWb3sa7DVUJmocYuoog== 2095 | dependencies: 2096 | "@jest/schemas" "^29.6.0" 2097 | ansi-styles "^5.0.0" 2098 | react-is "^18.0.0" 2099 | 2100 | prompts@^2.0.1: 2101 | version "2.4.2" 2102 | resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" 2103 | integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== 2104 | dependencies: 2105 | kleur "^3.0.3" 2106 | sisteransi "^1.0.5" 2107 | 2108 | pure-rand@^6.0.0: 2109 | version "6.0.2" 2110 | resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.0.2.tgz#a9c2ddcae9b68d736a8163036f088a2781c8b306" 2111 | integrity sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ== 2112 | 2113 | react-is@^18.0.0: 2114 | version "18.2.0" 2115 | resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" 2116 | integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== 2117 | 2118 | require-directory@^2.1.1: 2119 | version "2.1.1" 2120 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 2121 | integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== 2122 | 2123 | resolve-cwd@^3.0.0: 2124 | version "3.0.0" 2125 | resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" 2126 | integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== 2127 | dependencies: 2128 | resolve-from "^5.0.0" 2129 | 2130 | resolve-from@^5.0.0: 2131 | version "5.0.0" 2132 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" 2133 | integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== 2134 | 2135 | resolve.exports@^2.0.0: 2136 | version "2.0.2" 2137 | resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" 2138 | integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== 2139 | 2140 | resolve@^1.20.0: 2141 | version "1.22.2" 2142 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" 2143 | integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== 2144 | dependencies: 2145 | is-core-module "^2.11.0" 2146 | path-parse "^1.0.7" 2147 | supports-preserve-symlinks-flag "^1.0.0" 2148 | 2149 | semver@^6.0.0, semver@^6.3.0: 2150 | version "6.3.1" 2151 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" 2152 | integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== 2153 | 2154 | semver@^7.5.3: 2155 | version "7.5.4" 2156 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" 2157 | integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== 2158 | dependencies: 2159 | lru-cache "^6.0.0" 2160 | 2161 | shebang-command@^2.0.0: 2162 | version "2.0.0" 2163 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 2164 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 2165 | dependencies: 2166 | shebang-regex "^3.0.0" 2167 | 2168 | shebang-regex@^3.0.0: 2169 | version "3.0.0" 2170 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 2171 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 2172 | 2173 | signal-exit@^3.0.3, signal-exit@^3.0.7: 2174 | version "3.0.7" 2175 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" 2176 | integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== 2177 | 2178 | sisteransi@^1.0.5: 2179 | version "1.0.5" 2180 | resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" 2181 | integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== 2182 | 2183 | slash@^3.0.0: 2184 | version "3.0.0" 2185 | resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" 2186 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== 2187 | 2188 | source-map-support@0.5.13: 2189 | version "0.5.13" 2190 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" 2191 | integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== 2192 | dependencies: 2193 | buffer-from "^1.0.0" 2194 | source-map "^0.6.0" 2195 | 2196 | source-map@^0.6.0, source-map@^0.6.1: 2197 | version "0.6.1" 2198 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 2199 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 2200 | 2201 | sprintf-js@~1.0.2: 2202 | version "1.0.3" 2203 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 2204 | integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== 2205 | 2206 | stack-utils@^2.0.3: 2207 | version "2.0.6" 2208 | resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" 2209 | integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== 2210 | dependencies: 2211 | escape-string-regexp "^2.0.0" 2212 | 2213 | string-length@^4.0.1: 2214 | version "4.0.2" 2215 | resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" 2216 | integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== 2217 | dependencies: 2218 | char-regex "^1.0.2" 2219 | strip-ansi "^6.0.0" 2220 | 2221 | string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: 2222 | version "4.2.3" 2223 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" 2224 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== 2225 | dependencies: 2226 | emoji-regex "^8.0.0" 2227 | is-fullwidth-code-point "^3.0.0" 2228 | strip-ansi "^6.0.1" 2229 | 2230 | strip-ansi@^6.0.0, strip-ansi@^6.0.1: 2231 | version "6.0.1" 2232 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 2233 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 2234 | dependencies: 2235 | ansi-regex "^5.0.1" 2236 | 2237 | strip-bom@^4.0.0: 2238 | version "4.0.0" 2239 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" 2240 | integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== 2241 | 2242 | strip-final-newline@^2.0.0: 2243 | version "2.0.0" 2244 | resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" 2245 | integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== 2246 | 2247 | strip-json-comments@^3.1.1: 2248 | version "3.1.1" 2249 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" 2250 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 2251 | 2252 | supports-color@^5.3.0: 2253 | version "5.5.0" 2254 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 2255 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 2256 | dependencies: 2257 | has-flag "^3.0.0" 2258 | 2259 | supports-color@^7.1.0: 2260 | version "7.2.0" 2261 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 2262 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 2263 | dependencies: 2264 | has-flag "^4.0.0" 2265 | 2266 | supports-color@^8.0.0: 2267 | version "8.1.1" 2268 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" 2269 | integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== 2270 | dependencies: 2271 | has-flag "^4.0.0" 2272 | 2273 | supports-preserve-symlinks-flag@^1.0.0: 2274 | version "1.0.0" 2275 | resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" 2276 | integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== 2277 | 2278 | test-exclude@^6.0.0: 2279 | version "6.0.0" 2280 | resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" 2281 | integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== 2282 | dependencies: 2283 | "@istanbuljs/schema" "^0.1.2" 2284 | glob "^7.1.4" 2285 | minimatch "^3.0.4" 2286 | 2287 | thenify-all@^1.0.0: 2288 | version "1.6.0" 2289 | resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" 2290 | integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== 2291 | dependencies: 2292 | thenify ">= 3.1.0 < 4" 2293 | 2294 | "thenify@>= 3.1.0 < 4": 2295 | version "3.3.1" 2296 | resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" 2297 | integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== 2298 | dependencies: 2299 | any-promise "^1.0.0" 2300 | 2301 | timers-ext@^0.1.7: 2302 | version "0.1.7" 2303 | resolved "https://registry.yarnpkg.com/timers-ext/-/timers-ext-0.1.7.tgz#6f57ad8578e07a3fb9f91d9387d65647555e25c6" 2304 | integrity sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ== 2305 | dependencies: 2306 | es5-ext "~0.10.46" 2307 | next-tick "1" 2308 | 2309 | tmpl@1.0.5: 2310 | version "1.0.5" 2311 | resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" 2312 | integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== 2313 | 2314 | to-fast-properties@^2.0.0: 2315 | version "2.0.0" 2316 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" 2317 | integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== 2318 | 2319 | to-regex-range@^5.0.1: 2320 | version "5.0.1" 2321 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 2322 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 2323 | dependencies: 2324 | is-number "^7.0.0" 2325 | 2326 | ts-jest@^29.1.1: 2327 | version "29.1.1" 2328 | resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.1.1.tgz#f58fe62c63caf7bfcc5cc6472082f79180f0815b" 2329 | integrity sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA== 2330 | dependencies: 2331 | bs-logger "0.x" 2332 | fast-json-stable-stringify "2.x" 2333 | jest-util "^29.0.0" 2334 | json5 "^2.2.3" 2335 | lodash.memoize "4.x" 2336 | make-error "1.x" 2337 | semver "^7.5.3" 2338 | yargs-parser "^21.0.1" 2339 | 2340 | type-detect@4.0.8: 2341 | version "4.0.8" 2342 | resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" 2343 | integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== 2344 | 2345 | type-fest@^0.21.3: 2346 | version "0.21.3" 2347 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" 2348 | integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== 2349 | 2350 | type@^1.0.1: 2351 | version "1.2.0" 2352 | resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" 2353 | integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== 2354 | 2355 | type@^2.7.2: 2356 | version "2.7.2" 2357 | resolved "https://registry.yarnpkg.com/type/-/type-2.7.2.tgz#2376a15a3a28b1efa0f5350dcf72d24df6ef98d0" 2358 | integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw== 2359 | 2360 | typescript@^5.1.6: 2361 | version "5.1.6" 2362 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.1.6.tgz#02f8ac202b6dad2c0dd5e0913745b47a37998274" 2363 | integrity sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA== 2364 | 2365 | update-browserslist-db@^1.0.11: 2366 | version "1.0.11" 2367 | resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940" 2368 | integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== 2369 | dependencies: 2370 | escalade "^3.1.1" 2371 | picocolors "^1.0.0" 2372 | 2373 | v8-to-istanbul@^9.0.1: 2374 | version "9.1.0" 2375 | resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz#1b83ed4e397f58c85c266a570fc2558b5feb9265" 2376 | integrity sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA== 2377 | dependencies: 2378 | "@jridgewell/trace-mapping" "^0.3.12" 2379 | "@types/istanbul-lib-coverage" "^2.0.1" 2380 | convert-source-map "^1.6.0" 2381 | 2382 | walker@^1.0.8: 2383 | version "1.0.8" 2384 | resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" 2385 | integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== 2386 | dependencies: 2387 | makeerror "1.0.12" 2388 | 2389 | which@^2.0.1: 2390 | version "2.0.2" 2391 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 2392 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 2393 | dependencies: 2394 | isexe "^2.0.0" 2395 | 2396 | wrap-ansi@^7.0.0: 2397 | version "7.0.0" 2398 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" 2399 | integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== 2400 | dependencies: 2401 | ansi-styles "^4.0.0" 2402 | string-width "^4.1.0" 2403 | strip-ansi "^6.0.0" 2404 | 2405 | wrappy@1: 2406 | version "1.0.2" 2407 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 2408 | integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== 2409 | 2410 | write-file-atomic@^4.0.2: 2411 | version "4.0.2" 2412 | resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" 2413 | integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== 2414 | dependencies: 2415 | imurmurhash "^0.1.4" 2416 | signal-exit "^3.0.7" 2417 | 2418 | y18n@^5.0.5: 2419 | version "5.0.8" 2420 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" 2421 | integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== 2422 | 2423 | yallist@^3.0.2: 2424 | version "3.1.1" 2425 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" 2426 | integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== 2427 | 2428 | yallist@^4.0.0: 2429 | version "4.0.0" 2430 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" 2431 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 2432 | 2433 | yaml@^2.3.1: 2434 | version "2.3.1" 2435 | resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.1.tgz#02fe0975d23cd441242aa7204e09fc28ac2ac33b" 2436 | integrity sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ== 2437 | 2438 | yargs-parser@^21.0.1, yargs-parser@^21.1.1: 2439 | version "21.1.1" 2440 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" 2441 | integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== 2442 | 2443 | yargs@^17.3.1: 2444 | version "17.7.2" 2445 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" 2446 | integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== 2447 | dependencies: 2448 | cliui "^8.0.1" 2449 | escalade "^3.1.1" 2450 | get-caller-file "^2.0.5" 2451 | require-directory "^2.1.1" 2452 | string-width "^4.2.3" 2453 | y18n "^5.0.5" 2454 | yargs-parser "^21.1.1" 2455 | 2456 | yocto-queue@^0.1.0: 2457 | version "0.1.0" 2458 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" 2459 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== 2460 | --------------------------------------------------------------------------------