From 3cdb7285ca4e97cfd11f60c790c151538b4911e4 Mon Sep 17 00:00:00 2001 From: danimar-g Date: Thu, 1 Aug 2024 18:01:57 -0400 Subject: [PATCH 01/33] inicio --- package-lock.json | 7865 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 7865 insertions(+) create mode 100644 package-lock.json diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..456eb7b8 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,7865 @@ +{ + "name": "dataverse-chat", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "dataverse-chat", + "version": "1.0.0", + "license": "MIT", + "devDependencies": { + "@babel/core": "^7.6.2", + "@babel/plugin-transform-modules-commonjs": "^7.6.0", + "acorn": "^8.8.2", + "babel-jest": "^27.0.1", + "css": "^3.0.0", + "eslint": "^8.3.0", + "gh-pages": "^3.1.0", + "htmlhint": "^1.0.0", + "jest": "^27.0.1", + "jsdom": "^22.1.0", + "opener": "^1.5.1", + "serve": "^14.2.1" + }, + "engines": { + "node": ">=16.x" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz", + "integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", + "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-module-transforms": "^7.25.2", + "@babel/helpers": "^7.25.0", + "@babel/parser": "^7.25.0", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.2", + "@babel/types": "^7.25.2", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", + "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.25.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", + "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.25.2", + "@babel/helper-validator-option": "^7.24.8", + "browserslist": "^4.23.1", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", + "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", + "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", + "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz", + "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz", + "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.25.2" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz", + "integrity": "sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz", + "integrity": "sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.24.8", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-simple-access": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", + "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.25.0", + "@babel/types": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz", + "integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/parser": "^7.25.3", + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.2", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz", + "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", + "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "deprecated": "Use @eslint/config-array instead", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", + "dev": true + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", + "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/console/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/console/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/console/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/console/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/console/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/core": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", + "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", + "dev": true, + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/reporters": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^27.5.1", + "jest-config": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-resolve-dependencies": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "jest-watcher": "^27.5.1", + "micromatch": "^4.0.4", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/core/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/core/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/core/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/core/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/core/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/core/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/environment": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", + "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", + "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", + "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/types": "^27.5.1", + "expect": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", + "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", + "dev": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-haste-map": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^8.1.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/reporters/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/reporters/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/reporters/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/reporters/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/reporters/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/source-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", + "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9", + "source-map": "^0.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", + "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "dev": true, + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", + "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", + "dev": true, + "dependencies": { + "@jest/test-result": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-runtime": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", + "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/types": "^27.5.1", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-util": "^27.5.1", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/transform/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/transform/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/transform/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/transform/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/transform/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/@jest/transform/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/transform/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/types/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/types/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/types/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/types/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/types/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/types/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@sinonjs/commons": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", + "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", + "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/node": { + "version": "22.0.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.0.2.tgz", + "integrity": "sha512-yPL6DyFwY5PiMVEwymNeqUTKsDczQBJ/5T7W/46RwLU/VH+AA8aT5TZkvBviLKLbbm0hlfftEkGrNzfRk/fofQ==", + "dev": true, + "dependencies": { + "undici-types": "~6.11.1" + } + }, + "node_modules/@types/prettier": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", + "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", + "dev": true + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true + }, + "node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "node_modules/@zeit/schemas": { + "version": "2.36.0", + "resolved": "https://registry.npmjs.org/@zeit/schemas/-/schemas-2.36.0.tgz", + "integrity": "sha512-7kjMwcChYEzMKjeex9ZFXkt1AyNov9R5HZtjBKVsmVpw7pa7ZtlCGvCBC2vnnXctaYN+aRI61HjIqeetZW5ROg==", + "dev": true + }, + "node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "deprecated": "Use your platform's native atob() and btoa() methods instead", + "dev": true + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "dev": true, + "dependencies": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } + }, + "node_modules/acorn-globals/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dev": true, + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-align/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/ansi-align/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arch": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", + "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", + "dev": true, + "dependencies": { + "array-uniq": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dev": true, + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true, + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/babel-jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", + "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", + "dev": true, + "dependencies": { + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-jest/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/babel-jest/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/babel-jest/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/babel-jest/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/babel-jest/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-jest/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", + "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", + "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^27.5.1", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/boxen": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.0.0.tgz", + "integrity": "sha512-j//dBVuyacJbvW+tvZ9HuH03fZ46QcaKvvhZickZqtB271DxJ7SNRSNxrV/dZX0085m7hISRZWbzWlJvx/rHSg==", + "dev": true, + "dependencies": { + "ansi-align": "^3.0.1", + "camelcase": "^7.0.0", + "chalk": "^5.0.1", + "cli-boxes": "^3.0.0", + "string-width": "^5.1.2", + "type-fest": "^2.13.0", + "widest-line": "^4.0.1", + "wrap-ansi": "^8.0.1" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/camelcase": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz", + "integrity": "sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==", + "dev": true, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/boxen/node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "dev": true + }, + "node_modules/browserslist": { + "version": "4.23.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", + "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001646", + "electron-to-chromium": "^1.5.4", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001646", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001646.tgz", + "integrity": "sha512-dRg00gudiBDDTmUhClSdv3hqRfpbOnU28IpI1T6PBTLWa+kOj0681C8uML3PifYfREuBrVjDGhL3adYpBT6spw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk-template": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-0.4.0.tgz", + "integrity": "sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/chalk-template?sponsor=1" + } + }, + "node_modules/chalk-template/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/chalk-template/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk-template/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/chalk-template/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/chalk-template/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/chalk-template/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz", + "integrity": "sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==", + "dev": true + }, + "node_modules/cli-boxes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", + "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clipboardy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-3.0.0.tgz", + "integrity": "sha512-Su+uU5sr1jkUy1sGRpLKjKrvEOVXgSgiSInwa/qeID6aJ07yh+5NWc3h2QfjHjBnfX4LhtFcuAWKUsJ3r+fjbg==", + "dev": true, + "dependencies": { + "arch": "^2.2.0", + "execa": "^5.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/cliui/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cliui/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/cliui/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/css/-/css-3.0.0.tgz", + "integrity": "sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.4", + "source-map": "^0.6.1", + "source-map-resolve": "^0.6.0" + } + }, + "node_modules/cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "dev": true + }, + "node_modules/cssstyle": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-3.0.0.tgz", + "integrity": "sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg==", + "dev": true, + "dependencies": { + "rrweb-cssom": "^0.6.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/data-urls": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-4.0.0.tgz", + "integrity": "sha512-/mMTei/JXPqvFqQtfyTowxmJVwr2PVAeCcDxyFf6LhoOu/09TX2OX3kb2wzi4DMXcfj4OItwDOnhl5oziPnT6g==", + "dev": true, + "dependencies": { + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^12.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/debug": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", + "dev": true + }, + "node_modules/decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", + "dev": true + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/diff-sequences": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", + "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/domexception": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", + "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "deprecated": "Use your platform's native DOMException instead", + "dev": true, + "dependencies": { + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.4.tgz", + "integrity": "sha512-orzA81VqLyIGUEA77YkVA1D+N+nNfl2isJVjjmOyrlxuooZ19ynb+dOlaDTqd/idKRS9lDCSBmtzM+kyCsMnkA==", + "dev": true + }, + "node_modules/email-addresses": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/email-addresses/-/email-addresses-3.1.0.tgz", + "integrity": "sha512-k0/r7GrWVL32kZlGwfPNgB2Y/mMXVTq/decgLczm/j34whdaspNrZO8CnXPf1laaHxI6ptUlsnAxN+UAPw+fzg==", + "dev": true + }, + "node_modules/emittery": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", + "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dev": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/eslint": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", + "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fast-url-parser": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", + "integrity": "sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==", + "dev": true, + "dependencies": { + "punycode": "^1.3.2" + } + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/filename-reserved-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", + "integrity": "sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/filenamify": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-4.3.0.tgz", + "integrity": "sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg==", + "dev": true, + "dependencies": { + "filename-reserved-regex": "^2.0.0", + "strip-outer": "^1.0.1", + "trim-repeated": "^1.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gh-pages": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-3.2.3.tgz", + "integrity": "sha512-jA1PbapQ1jqzacECfjUaO9gV8uBgU6XNMV0oXLtfCX3haGLe5Atq8BxlrADhbD6/UdG9j6tZLWAkAybndOXTJg==", + "dev": true, + "dependencies": { + "async": "^2.6.1", + "commander": "^2.18.0", + "email-addresses": "^3.0.1", + "filenamify": "^4.3.0", + "find-cache-dir": "^3.3.1", + "fs-extra": "^8.1.0", + "globby": "^6.1.0" + }, + "bin": { + "gh-pages": "bin/gh-pages.js", + "gh-pages-clean": "bin/gh-pages-clean.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==", + "dev": true, + "dependencies": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "dev": true, + "dependencies": { + "whatwg-encoding": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/htmlhint": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/htmlhint/-/htmlhint-1.1.4.tgz", + "integrity": "sha512-tSKPefhIaaWDk/vKxAOQbN+QwZmDeJCq3bZZGbJMoMQAfTjepudC+MkuT9MOBbuQI3dLLzDWbmU7fLV3JASC7Q==", + "dev": true, + "dependencies": { + "async": "3.2.3", + "chalk": "^4.1.2", + "commander": "^9.1.0", + "glob": "^7.2.0", + "is-glob": "^4.0.3", + "node-fetch": "^2.6.2", + "strip-json-comments": "3.1.0", + "xml": "1.0.1" + }, + "bin": { + "htmlhint": "bin/htmlhint" + } + }, + "node_modules/htmlhint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/htmlhint/node_modules/async": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", + "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==", + "dev": true + }, + "node_modules/htmlhint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/htmlhint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/htmlhint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/htmlhint/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "dev": true, + "engines": { + "node": "^12.20.0 || >=14" + } + }, + "node_modules/htmlhint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/htmlhint/node_modules/strip-json-comments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.0.tgz", + "integrity": "sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/htmlhint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-local": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-core-module": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", + "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", + "dev": true, + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-port-reachable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-port-reachable/-/is-port-reachable-4.0.0.tgz", + "integrity": "sha512-9UoipoxYmSk6Xy7QFgRv2HDyaysmgSG75TFQs6S+3pDM7ZhKTF/bskZV+0UlABHzKjNVhPjYCLfeZUEg1wXxig==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/istanbul-lib-report/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", + "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", + "dev": true, + "dependencies": { + "@jest/core": "^27.5.1", + "import-local": "^3.0.2", + "jest-cli": "^27.5.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", + "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "execa": "^5.0.0", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", + "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-circus/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-circus/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-circus/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-circus/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-circus/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-cli": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", + "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", + "dev": true, + "dependencies": { + "@jest/core": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "prompts": "^2.0.1", + "yargs": "^16.2.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-cli/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-cli/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-cli/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-cli/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-cli/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-cli/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-config": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", + "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.8.0", + "@jest/test-sequencer": "^27.5.1", + "@jest/types": "^27.5.1", + "babel-jest": "^27.5.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.9", + "jest-circus": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-jasmine2": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-config/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-config/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-config/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-config/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-config/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-config/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-diff": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", + "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-diff/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-diff/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-diff/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-diff/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-diff/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-diff/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-docblock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", + "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", + "dev": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", + "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-each/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-each/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-each/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-each/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-each/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-jsdom": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", + "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1", + "jsdom": "^16.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jest-environment-jsdom/node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-jsdom/node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + }, + "node_modules/jest-environment-jsdom/node_modules/data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "dev": true, + "dependencies": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-environment-jsdom/node_modules/domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "deprecated": "Use your platform's native DOMException instead", + "dev": true, + "dependencies": { + "webidl-conversions": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-jsdom/node_modules/domexception/node_modules/webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-jsdom/node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jest-environment-jsdom/node_modules/html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "dev": true, + "dependencies": { + "whatwg-encoding": "^1.0.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-environment-jsdom/node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jest-environment-jsdom/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/jsdom": { + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", + "dev": true, + "dependencies": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jest-environment-jsdom/node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "node_modules/jest-environment-jsdom/node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/jest-environment-jsdom/node_modules/saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "dev": true, + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-environment-jsdom/node_modules/tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "dev": true, + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-jsdom/node_modules/w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "dev": true, + "dependencies": { + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-environment-jsdom/node_modules/webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "dev": true, + "engines": { + "node": ">=10.4" + } + }, + "node_modules/jest-environment-jsdom/node_modules/whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dev": true, + "dependencies": { + "iconv-lite": "0.4.24" + } + }, + "node_modules/jest-environment-jsdom/node_modules/whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "dev": true + }, + "node_modules/jest-environment-jsdom/node_modules/whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "dev": true, + "dependencies": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-environment-jsdom/node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "dev": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/jest-environment-jsdom/node_modules/xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true + }, + "node_modules/jest-environment-node": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", + "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", + "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^27.5.1", + "jest-serializer": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-jasmine2": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", + "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-jasmine2/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-jasmine2/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-jasmine2/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-jasmine2/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-leak-detector": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", + "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", + "dev": true, + "dependencies": { + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", + "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-matcher-utils/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-matcher-utils/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-message-util/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-message-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-message-util/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-message-util/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-message-util/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-message-util/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-mock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", + "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", + "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", + "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", + "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-snapshot": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-resolve/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-resolve/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-resolve/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-resolve/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-resolve/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", + "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", + "dev": true, + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-leak-detector": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "source-map-support": "^0.5.6", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runner/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-runner/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-runner/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-runner/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-runner/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", + "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/globals": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-runtime/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-runtime/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-runtime/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-runtime/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-serializer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", + "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", + "dev": true, + "dependencies": { + "@types/node": "*", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", + "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.7.2", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.0.0", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^27.5.1", + "semver": "^7.3.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-snapshot/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-snapshot/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-snapshot/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-snapshot/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-snapshot/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-util/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-util/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-util/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-util/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-util/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-validate": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", + "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "leven": "^3.1.0", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-validate/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-validate/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-validate/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-validate/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-validate/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-validate/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watcher": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", + "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", + "dev": true, + "dependencies": { + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^27.5.1", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-watcher/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-watcher/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-watcher/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-watcher/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-watcher/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watcher/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsdom": { + "version": "22.1.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-22.1.0.tgz", + "integrity": "sha512-/9AVW7xNbsBv6GfWho4TTNjEo9fe6Zhf9O7s0Fhhr3u+awPwAJMKwAMXnkk5vBxflqLW9hTHX/0cs+P3gW+cQw==", + "dev": true, + "dependencies": { + "abab": "^2.0.6", + "cssstyle": "^3.0.0", + "data-urls": "^4.0.0", + "decimal.js": "^10.4.3", + "domexception": "^4.0.0", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.1", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.4", + "parse5": "^7.1.2", + "rrweb-cssom": "^0.6.0", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.1.2", + "w3c-xmlserializer": "^4.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^12.0.1", + "ws": "^8.13.0", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/micromatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "dev": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dev": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true + }, + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nwsapi": { + "version": "2.2.12", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.12.tgz", + "integrity": "sha512-qXDmcVlZV4XRtKFzddidpfVP4oMSGhga+xdMc25mv8kaLUHtgzCDhUxkrN8exkGdTlLNaXj7CV3GtON7zuGZ+w==", + "dev": true + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "dev": true, + "bin": { + "opener": "bin/opener-bin.js" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dev": true, + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", + "dev": true + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-to-regexp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", + "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "dev": true, + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true + }, + "node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, + "node_modules/registry-auth-token": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", + "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", + "dev": true, + "dependencies": { + "rc": "^1.1.6", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/registry-url": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", + "integrity": "sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA==", + "dev": true, + "dependencies": { + "rc": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve.exports": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.1.tgz", + "integrity": "sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rrweb-cssom": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz", + "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==", + "dev": true + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/serve": { + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/serve/-/serve-14.2.3.tgz", + "integrity": "sha512-VqUFMC7K3LDGeGnJM9h56D3XGKb6KGgOw0cVNtA26yYXHCcpxf3xwCTUaQoWlVS7i8Jdh3GjQkOB23qsXyjoyQ==", + "dev": true, + "dependencies": { + "@zeit/schemas": "2.36.0", + "ajv": "8.12.0", + "arg": "5.0.2", + "boxen": "7.0.0", + "chalk": "5.0.1", + "chalk-template": "0.4.0", + "clipboardy": "3.0.0", + "compression": "1.7.4", + "is-port-reachable": "4.0.0", + "serve-handler": "6.1.5", + "update-check": "1.5.4" + }, + "bin": { + "serve": "build/main.js" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/serve-handler": { + "version": "6.1.5", + "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.5.tgz", + "integrity": "sha512-ijPFle6Hwe8zfmBxJdE+5fta53fdIY0lHISJvuikXB3VYFafRjMRpOffSPvCYsbKyBA7pvy9oYr/BT1O3EArlg==", + "dev": true, + "dependencies": { + "bytes": "3.0.0", + "content-disposition": "0.5.2", + "fast-url-parser": "1.1.3", + "mime-types": "2.1.18", + "minimatch": "3.1.2", + "path-is-inside": "1.0.2", + "path-to-regexp": "2.2.1", + "range-parser": "1.2.0" + } + }, + "node_modules/serve-handler/node_modules/mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-handler/node_modules/mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "dev": true, + "dependencies": { + "mime-db": "~1.33.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/serve/node_modules/chalk": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.0.1.tgz", + "integrity": "sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/serve/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-resolve": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", + "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", + "dev": true, + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-outer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", + "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-hyperlinks": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "node_modules/terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/throat": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.2.tgz", + "integrity": "sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==", + "dev": true + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tough-cookie": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "dev": true, + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie/node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie/node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/tr46": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz", + "integrity": "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==", + "dev": true, + "dependencies": { + "punycode": "^2.3.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/tr46/node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/trim-repeated": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", + "integrity": "sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/undici-types": { + "version": "6.11.1", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.11.1.tgz", + "integrity": "sha512-mIDEX2ek50x0OlRgxryxsenE5XaQD4on5U2inY7RApK3SOJpofyw7uW2AyfMKkhAxXIceo2DeWGVGwyvng1GNQ==", + "dev": true + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.2", + "picocolors": "^1.0.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/update-check": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/update-check/-/update-check-1.5.4.tgz", + "integrity": "sha512-5YHsflzHP4t1G+8WGPlvKbJEbAJGCgw+Em+dGR1KmBUbr1J36SJBqlHLjR7oob7sco5hWHGQVcr9B2poIVDDTQ==", + "dev": true, + "dependencies": { + "registry-auth-token": "3.3.2", + "registry-url": "3.1.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/uri-js/node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/v8-to-istanbul": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", + "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/v8-to-istanbul/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/v8-to-istanbul/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", + "dev": true, + "dependencies": { + "browser-process-hrtime": "^1.0.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", + "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", + "dev": true, + "dependencies": { + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "dev": true, + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-mimetype": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-url": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-12.0.1.tgz", + "integrity": "sha512-Ed/LrqB8EPlGxjS+TrsXcpUond1mhccS3pchLhzSgPCnTimUCKj3IZE75pAs5m6heB2U2TMerKFUXheyHY+VDQ==", + "dev": true, + "dependencies": { + "tr46": "^4.1.1", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/widest-line": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", + "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", + "dev": true, + "dependencies": { + "string-width": "^5.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/ws": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz", + "integrity": "sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==", + "dev": true + }, + "node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} From c4f8d2889c8e9248e90e335b00311ca1bd04e593 Mon Sep 17 00:00:00 2001 From: danimar-g Date: Thu, 1 Aug 2024 19:24:44 -0400 Subject: [PATCH 02/33] carpetas agregadas --- src/Data/dataset.js | 410 ++++++++++++++++++++++++++++++++++++++ src/index.html | 77 ++++++- src/lib/dataFunctions.js | 34 ++++ src/views/Example.js | 5 - src/views/router.js | 0 src/views/style.css | 256 ++++++++++++++++++++++++ src/views/view.js | 31 +++ test/datafuntions.spec.js | 0 test/example.spec.js | 0 9 files changed, 800 insertions(+), 13 deletions(-) create mode 100644 src/Data/dataset.js create mode 100644 src/lib/dataFunctions.js delete mode 100644 src/views/Example.js create mode 100644 src/views/router.js create mode 100644 src/views/style.css create mode 100644 src/views/view.js create mode 100644 test/datafuntions.spec.js create mode 100644 test/example.spec.js diff --git a/src/Data/dataset.js b/src/Data/dataset.js new file mode 100644 index 00000000..7e710f83 --- /dev/null +++ b/src/Data/dataset.js @@ -0,0 +1,410 @@ +export default [ + { + "id": "Disney-Elemental", + "name": "Elemental", + "shortDescription": "Explora un mundo donde los elementos naturales cobran vida y coexisten en una vibrante ciudad.", + "description": "Seguimos la historia de Ember, una joven de fuego, y Wade, un chico de agua, que provienen de mundos opuestos. A pesar de sus diferencias, desarrollan una amistad única que desafía las convenciones sociales de su entorno. A medida que su vínculo se fortalece, Ember y Wade descubren que las diferencias que los separan también pueden ser la clave para superar desafíos personales y comunitarios. La película presenta un viaje emocional y visualmente espectacular que celebra la diversidad y la aceptación.", + "imageUrl": "https://es.web.img3.acsta.net/pictures/23/05/17/10/28/2036083.jpg", + "facts": { + "estreno": "2023", + "generoPelicula": "Aventura, Fantasía", + "clasificacionPelicula": "Diversidad", + "clasificPublico": "7.1/10", + "tiempoDuracion": "101 minutos", + }, + "extraInfo": { + "curiosidades": "Para crear el efecto visual del personaje de Ember, el equipo de animación desarrolló nuevas técnicas para capturar la fluidez y el dinamismo del fuego de una manera realista y expresiva." + } + }, + { + "id": "pixar-up", + "name": "UP", + "shortDescription": "Aventuras emocionantes de un anciano y un niño explorador en una casa voladora impulsada por globos.", + "description": "Up narra la historia de Carl Fredricksen, un viudo de edad avanzada decidido a cumplir la promesa que le hizo a su difunta esposa. Con ingenio y determinación, Carl ata miles de globos a su casa y emprende un viaje épico hacia las remotas tierras de América del Sur. Pero su plan se complica cuando descubre que un inesperado pasajero, Russell, un explorador juvenil, se ha colado a bordo. Juntos, enfrentan peligros inimaginables y descubren que la aventura más grande de todas es la amistad.", + "imageUrl": "https://www.funeralnatural.net/sites/default/files/pelicula/imagen/upcartel.jpg", + "facts": { + "estreno": "2009", + "generoPelicula": "Aventura, Comedia, Drama", + "clasificacionPelicula": "Perseverancia", + "clasificPublico": "8.3/10", + "tiempoDuracion": "96 minutos", + }, + "extraInfo": { + "curiosidades": "La casa voladora de Carl Fredricksen está inspirada en la casa real de los hermanos Ellie y Carl, dos hermanos que crecieron en la ciudad de Los Ángeles, California." + } + }, + { + "id": "turning-red", + "name": "Turning Red", + "shortDescription": "Una divertida y emotiva historia sobre la adolescencia y el poder de la amistad.", + "description": "'Turning Red' es una encantadora película de Pixar que explora la vida de Mei Lee, una joven que lidia con los altibajos de la adolescencia mientras experimenta una transformación inesperada en un panda rojo cuando se emociona demasiado. Con un enfoque fresco y humorístico, la película aborda temas universales como la identidad, la familia y la aceptación personal. La animación es vibrante y cautivadora, complementada por una banda sonora vibrante que realza la narrativa. Turning Red es una joya animada que no solo entretiene, sino que también deja mensajes significativos sobre la autoaceptación y el poder de la amistad.", + "imageUrl": "https://m.media-amazon.com/images/I/81equRsw8JL._AC_UF894,1000_QL80_.jpg", + "facts": { + "estreno": "2022", + "generoPelicula": "Comedia, Fantasía", + "clasificacionPelicula": "Autoaceptación", + "clasificPublico": "7/10", + "tiempoDuracion": "100 minutos", + }, + "extraInfo": { + "curiosidades":"Turning Red es la primera película de Pixar dirigida por una directora mujer, Domee Shi, quien anteriormente ganó un Premio de la Academia por el cortometraje Bao." + } + }, + { + "id": "coco-pelicula", + "name": "Coco", + "shortDescription": "Una celebración musical y visual que explora la importancia de la familia y la memoria.", + "description": "Coco cuenta la historia de Miguel, un niño mexicano con grandes sueños musicales en un hogar donde la música está prohibida. En el Día de los Muertos, Miguel se embarca en un viaje extraordinario al mundo de los muertos para descubrir la verdad sobre su familia y su pasión por la música. Con impresionantes visuales y una banda sonora conmovedora, la película celebra la cultura mexicana y enseña lecciones sobre el amor, el legado y la importancia de recordar a nuestros seres queridos.", + "imageUrl": "https://es.web.img2.acsta.net/pictures/17/09/14/10/49/2019727.jpg", + "facts": { + "estreno": "2017", + "generoPelicula": "Aventura, Fantasía", + "clasificacionPelicula": "Familia", + "clasificPublico": "8.4/10", + "tiempoDuracion": "105 minutos", + }, + "extraInfo": { + "curiosidades":"Coco fue elogiada por su representación auténtica de la cultura mexicana, desde sus tradiciones hasta la música mariachi. Ganó dos Premios de la Academia, incluyendo Mejor Película Animada y Mejor Canción Original por Recuerdame." + } + }, + { + "id": "Ratatouille-2007", + "name": "Ratatouille", + "shortDescription": "Una encantadora historia sobre un ratón con un paladar excepcional y grandes sueños culinarios.", + "description": "En Ratatouille conocemos a Remy, un apasionado ratón que sueña con convertirse en un chef de renombre en París, a pesar de las expectativas y prejuicios que enfrenta por ser un roedor. Con la ayuda de Linguini, un joven empleado de cocina, Remy demuestra que el talento y la determinación no conocen límites, mientras lucha por hacer realidad su sueño gastronómico. La película explora temas de perseverancia, amistad y la importancia de seguir nuestras pasiones, sin importar las adversidades ya que 'cualquiera puede cocinar'.", + "imageUrl": "https://lumiere-a.akamaihd.net/v1/images/p_ratatouille_19736_0814231f.jpeg", + "facts": { + "estreno": "2007", + "generoPelicula": "Comedia, Drama", + "clasificacionPelicula": "Superación", + "clasificPublico": "8.1/10", + "tiempoDuracion": "111 minutos", + }, + "extraInfo": { + "curiosidades": "Los creadores de Ratatouille trabajaron estrechamente con chefs renombrados para capturar de manera auténtica el ambiente y los detalles de la cocina parisina, elevando la experiencia visual y emocional de la película." + } + }, + { + "id": "Walle-2008", + "name": "Wall-e", + "shortDescription": "Un robot solitario descubre el amor y la esperanza en un futuro distópico. Aventura encantadora y ecológica que inspira", + "description": "Seguimos a Wall-e, un pequeño robot diseñado para limpiar un planeta Tierra abandonado y cubierto de basura. Durante siglos, Wall-e ha desarrollado una personalidad única y un gran sentido de curiosidad. Todo cambia cuando conoce a EVE, una sonda enviada desde el espacio con una misión misteriosa. Juntos, Wall-e y EVE emprenden un viaje intergaláctico que desafía las expectativas y revela la importancia de la conexión humana y el cuidado del medio ambiente. Esta obra maestra de animación combina humor, emoción y reflexión sobre el futuro de la humanidad.", + "imageUrl": "https://es.web.img2.acsta.net/pictures/14/04/30/10/41/026995.jpg", + "facts": { + "estreno": "2008", + "generoPelicula": "Aventura, Ciencia ficción", + "clasificacionPelicula": "Esperanza", + "clasificPublico": "8.4/10", + "tiempoDuracion": "98 minutos", + }, + "extraInfo": { + "curiosidades": "Wall-e cuenta con una narrativa visual rica y detallada que permite a la historia ser contada con un mínimo diálogo durante la primera parte de la película, mostrando la maestría de Pixar en la animación y la narración visual." + } + }, + { + "id": "buscando-dory", + "name": "Buscando a Dory", + "shortDescription": "La inolvidable pez azul con problemas de memoria emprende una nueva aventura para encontrar a su familia.", + "description": "la amigable pez azul con pérdida de memoria a corto plazo, Dory, se embarca en una emocionante misión para reunirse con su familia, de la cual apenas tiene recuerdos fragmentados. Con la ayuda de sus amigos Marlin y Nemo, Dory cruza los océanos enfrentando desafíos y haciendo nuevos amigos, mientras descubre la importancia del hogar, la perseverancia y la autoaceptación. La película, llena de humor y ternura, captura la esencia del espíritu aventurero de Pixar y deja un mensaje conmovedor sobre el poder del amor y la familia.", + "imageUrl": "https://e1.pxfuel.com/desktop-wallpaper/228/188/desktop-wallpaper-finding-dory-poster-2-amazing-posters-fluke-movie.jpg", + "facts": { + "estreno": "2016", + "generoPelicula": "Aventura, Comedia", + "clasificacionPelicula": "Resiliencia", + "clasificPublico": "7.4/10", + "tiempoDuracion": "97 minutos", + }, + "extraInfo": { + "curiosidades": "Ellen DeGeneres, la voz de Dory, expresó su alegría de volver a interpretar al personaje después de 13 años desde la película original Buscando a Nemo (2003)." + } + }, + { + "id": "intensamente-2015", + "name": "Intensamente", + "shortDescription": "Explora las emociones humanas a través de la historia de Riley y las cinco emociones personificadas que guían su vida.", + "description": "Riley, una niña que atraviesa cambios importantes en su vida familiar al mudarse a una nueva ciudad. La historia se desarrolla dentro de su mente, donde sus emociones personificadas - Alegría, Tristeza, Miedo, Furia y Asco - trabajan juntas en la central de control emocional para guiar sus acciones y decisiones. A medida que Riley navega por los desafíos de crecer, las emociones aprenden lecciones valiosas sobre la importancia de la empatía, el equilibrio emocional y la aceptación de la tristeza como parte integral de la vida.", + "imageUrl": "https://mx.web.img3.acsta.net/pictures/17/08/07/21/43/466493.jpg", + "facts": { + "estreno": "2015", + "generoPelicula": "Aventura, Comedia, Drama", + "clasificacionPelicula": "Empatía", + "clasificPublico": "8/10", + "tiempoDuracion": "95 minutos", + }, + "extraInfo": { + "curiosidades": "Intensamente fue aclamada por su representación precisa de la psicología emocional y ganó el Premio de la Academia a la Mejor Película Animada en 2016." + } + }, + { + "id": "toy-story", + "name": "Toy Story", + "shortDescription": "Un grupo de juguetes que cobran vida cuando los humanos no los ven, destacando la amistad y la lealtad.", + "description": "La historia gira en torno a Woody, un vaquero de juguete celoso de su posición como el favorito de su dueño, Andy, y Buzz Lightyear, un moderno juguete espacial recién llegado que desafía la autoridad de Woody. A través de una serie de eventos, ambos juguetes aprenden sobre la amistad, la lealtad y el valor de aceptarse mutuamente. La película no solo estableció el estándar para la animación digital, sino que también tocó los corazones de generaciones con su ingeniosa narrativa y personajes entrañables.", + "imageUrl": "https://es.web.img3.acsta.net/pictures/14/03/17/10/20/509771.jpg", + "facts": { + "estreno": "1995", + "generoPelicula": "Aventura, Comedia", + "clasificacionPelicula": "Amistad", + "clasificPublico": "8.3/10", + "tiempoDuracion": "81 minutos", + }, + "extraInfo": { + "curiosidades": "Toy Stoy fue un éxito instantáneo y generó una franquicia exitosa que incluye tres secuelas más y varios cortometrajes. Fue la primera película de Pixar y la primera película animada en la historia en ser nominada para un Premio Óscar a la Mejor Guión Original." + } + }, + { + "id": "los-increibles", + "name": "Los Increíbles", + "shortDescription": "Una familia de superhéroes se une para salvar al mundo y redescubrir su propia grandeza.", + "description": "En Los Increíbles, seguimos a la familia Parr: Bob, Helen, Violeta, Dash y Jack-Jack, quienes llevan una vida normal y oculta bajo el programa de protección a testigos debido a las leyes que prohíben las actividades superhumanas. Sin embargo, cuando surge una nueva amenaza que pone en peligro al mundo, la familia debe unirse y redescubrir sus habilidades únicas para salvar el día. La película combina acción emocionante con temas de familia, autoaceptación y la importancia de abrazar nuestras fortalezas individuales.", + "imageUrl": "https://cdn.hobbyconsolas.com/sites/navi.axelspringer.es/public/media/image/2018/04/increibles.jpg", + "facts": { + "estreno": "2004", + "generoPelicula": "Aventura, Acción", + "clasificacionPelicula": "Unidad", + "clasificPublico": "8/10", + "tiempoDuracion": "115 minutos", + }, + "extraInfo": { + "curiosidades": "El director de Los Increíbles, Brad Bird, también prestó su voz al personaje de Edna Moda, la excéntrica y talentosa diseñadora de trajes de superhéroe." + } + }, + { + "id": "soul-2020", + "name": "Soul", + "shortDescription": "Descubre el significado de la vida a través de los ojos de un músico apasionado.", + "description": "Joe Gardner, es un talentoso pianista de jazz cuya pasión por la música es palpable. Cuando tiene la oportunidad de realizar su sueño tocando en un club de renombre, un giro del destino lo lleva a un viaje inesperado entre el mundo terrenal y el 'Gran Antes', donde las almas encuentran su chispa antes de nacer. Junto a 22, un alma cínica que aún no encuentra su propósito, Joe aprende lecciones profundas sobre la vida, el propósito y la importancia de cada experiencia que nos moldea como individuos.", + "imageUrl": "https://myhotposters.com/cdn/shop/products/mL4925_1024x1024.jpg", + "facts": { + "estreno": "2020", + "generoPelicula": "Aventura, Comedia, Drama", + "clasificacionPelicula": "Propósito de vida", + "clasificPublico": "8.1/10", + "tiempoDuracion": "100 minutos", + }, + "extraInfo": { + "curiosidades": "Soul fue alabada por su representación de la cultura afroamericana y por ser una exploración profunda de temas existenciales en una película animada de Pixar." + } + }, + { + "id": "viaje-arlo", + "name": "El viaje de Arlo", + "shortDescription": "Un dinosaurio y un niño humano forjan una amistad en una épica aventura prehistórica. Una historia conmovedora y emocionante.", + "description": "En el 'Viaje de Arlo', exploramos un mundo alternativo donde los dinosaurios no se extinguieron y conviven con los humanos. Arlo, un dinosaurio joven y temeroso, se separa de su familia y emprende un viaje épico para encontrar el camino de regreso a casa. En el camino, forma una inesperada amistad con Spot, un niño humano salvaje, y juntos enfrentan peligros naturales y desafíos emocionales que les permiten crecer y descubrir sus verdaderas fortalezas. La película, con impresionantes paisajes y personajes entrañables, invita a reflexionar sobre el coraje, la amistad y el valor de enfrentar nuestros miedos.", + "imageUrl": "https://www.lavanguardia.com/peliculas-series/images/movie/poster/2015/11/w1280/1WKI6PM79XjK2LVS1B4yoG3wNHw.jpg", + "facts": { + "estreno": "2015", + "generoPelicula": "Aventura, Drama", + "clasificacionPelicula": "Superación", + "clasificPublico": "6.7/10", + "tiempoDuracion": "93 minutos", + }, + "extraInfo": { + "curiosidades": "El viaje de Arlo, es el primer largometraje de Pixar en presentar personajes y escenarios completamente generados por computadora, sin necesidad de fondos en 2D." + } + }, + { + "id": "lilo-stitch", + "name": "Lilo y Stitch", + "shortDescription": "Una niña hawaiana y un alienígena travieso descubren el verdadero significado de la familia.", + "description": "Lilo & Stitch narra la conmovedora historia de Lilo, una niña hawaiana única, y Stitch, un alienígena travieso. Ambientada en las soleadas costas de Hawái, la película celebra la importancia de la familia y la aceptación. Con su animación vibrante y memorable banda sonora, captura tanto la esencia de la cultura hawaiana como la bondad universal. 'Lilo & Stitch' nos recuerda que la verdadera familia a menudo viene en formas inesperadas, enseñando lecciones de amor, amistad y comprensión en un viaje emocional que sigue siendo querido por generaciones.", + "imageUrl": "https://www.ecartelera.com/carteles/5100/5197/002_m.jpg", + "facts": { + "estreno": "2002", + "generoPelicula": "Aventura, Comedia, Ciencia ficción", + "clasificacionPelicula": "Familia", + "clasificPublico": "7.2/10", + "tiempoDuracion": "85 minutos", + }, + "extraInfo": { + "curiosidades": "'Lilo y Stitch' es conocida por su enfoque en la cultura y las tradiciones de Hawái, así como por su banda sonora que incluye música hawaiana auténtica mezclada con canciones pop contemporáneas" + } + }, + { + "id": "atlantis", + "name": "Atlantis: El Imperio Perdido", + "shortDescription": " Una emocionante expedición hacia un misterioso mundo subacuático en busca de un antiguo imperio perdido.", + "description": "Atlantis: El Imperio Perdido es una emocionante película de Disney que sigue a Milo Thatch, un cartógrafo y lingüista, en su búsqueda para encontrar la legendaria ciudad de Atlantis. Acompañado por un variopinto grupo de exploradores, Milo se embarca en una peligrosa expedición submarina. La película destaca por su impresionante animación, inspirada en el estilo visual de cómics, y su intrigante mezcla de mitología y ciencia ficción. Con una historia llena de acción, descubrimientos y valores como la amistad y la perseverancia, Atlantis es una aventura que inspira y cautiva a espectadores de todas las edades.", + "imageUrl": "https://www.aceprensa.com/wp-content/uploads/2001/11/10865-0.jpg", + "facts": { + "estreno": "2001", + "generoPelicula": "Aventura, Ciencia ficción", + "clasificacionPelicula": "Descubrimiento", + "clasificPublico": "6.9/10", + "tiempoDuracion": "96 minutos", + }, + "extraInfo": { + "curiosidades": "'Atlantis: El Imperio Perdido' fue una de las primeras películas de Disney en utilizar animación tradicional combinada con gráficos generados por computadora para crear ambientes submarinos espectaculares." + } + }, + { + "id": "big-hero", + "name": "Big Hero 6", + "shortDescription": "Una historia emocionante sobre un joven prodigio y su robot inflable en una ciudad futurista.", + "description": "En 'Big Hero 6', conocemos a Hiro Hamada, un joven genio de la robótica que vive en San Fransokyo, una ciudad futurista y vibrante. Después de sufrir una pérdida devastadora, Hiro se une a Baymax, un robot inflable diseñado para el cuidado de la salud, y a un grupo de amigos con habilidades únicas. Juntos, se convierten en Big Hero 6 y luchan contra un misterioso villano que amenaza con destruir la ciudad. La película combina acción trepidante con temas de amistad, valentía y la importancia de superar la pérdida.", + "imageUrl": "https://es.web.img3.acsta.net/pictures/14/09/01/13/43/553593.jpg", + "facts": { + "estreno": "2014", + "generoPelicula": "Aventura, Acción", + "clasificacionPelicula": "Resiliencia", + "clasificPublico": "7.8/10", + "tiempoDuracion": "102 minutos", + }, + "extraInfo": { + "curiosidades": "'Big Hero 6' está basada en el cómic de Marvel del mismo nombre, pero la trama y los personajes fueron adaptados para tener un enfoque más familiar y emocionalmente profundo" + } + }, + { + "id": "planeta-tesoro", + "name": "El Planeta del Tesoro", + "shortDescription": "Una aventura espacial llena de acción en busca de un legendario tesoro intergaláctico.", + "description": "En 'El Planeta del Tesoro', Jim Hawkins, un joven audaz y aventurero, descubre un mapa que lo lleva a una búsqueda épica en el espacio por el tesoro del legendario pirata Nathan Flint. A bordo de una nave espacial liderada por el enigmático Capitán Amelia y el cínico cyborg John Silver, Jim enfrenta peligros intergalácticos y aprende lecciones sobre coraje, lealtad y el verdadero significado de la amistad. La película, con su impresionante animación y emocionante trama, transporta a los espectadores a un universo vibrante lleno de intrigas y descubrimientos", + "imageUrl": "https://es.web.img2.acsta.net/pictures/14/04/14/12/53/368430.jpg", + "facts": { + "estreno": "2002", + "generoPelicula": "Aventura, Ciencia ficción", + "clasificacionPelicula": "Aventura", + "clasificPublico": "7.2/10", + "tiempoDuracion": "95 minutos", + }, + "extraInfo": { + "curiosidades": "'El Planeta del Tesoro' es una adaptación animada del clásico literario 'La isla del tesoro' de Robert Louis Stevenson, ambientada en un entorno futurista y espacial. " + } + }, + { + "id": "encanto-2021", + "name": "Encanto", + "shortDescription": "Una historia mágica sobre una familia con dones extraordinarios en Colombia.", + "description": "'Encanto' transporta a los espectadores a Colombia, donde la familia Madrigal vive en un encantado hogar rodeado de magia. Cada miembro de la familia posee un don especial, excepto Mirabel, quien se embarca en un viaje para descubrir su lugar y salvar la magia de la familia. La película celebra la cultura colombiana a través de su música vibrante y coloridos paisajes, mientras explora temas de autoaceptación, familia y la belleza de ser único. Con personajes entrañables y una narrativa emocionante, 'Encanto' captura el corazón y la imaginación de toda la familia.", + "imageUrl": "https://musicart.xboxlive.com/7/2d0e5200-0000-0000-0000-000000000002/504/image.jpg", + "facts": { + "estreno": "2021", + "generoPelicula": "Aventura, Comedia, Musical", + "clasificacionPelicula": "Autoaceptación", + "clasificPublico": "7.3/10", + "tiempoDuracion": "102 minutos", + }, + "extraInfo": { + "curiosidades": "'Encanto' es la primera película de Disney Animation inspirada en la cultura colombiana, con música original de Lin-Manuel Miranda. La canción principal, 'Dos Oruguitas', fue nominada al Premio Óscar a la Mejor Canción Original en 2023." + } + }, + { + "id": "frozen-2013", + "name": "Frozen", + "shortDescription": "Una aventura épica sobre el poder del amor entre dos hermanas y un reino cubierto de hielo eterno.", + "description": "Elsa, una princesa con el poder de controlar el hielo y la nieve, desencadena accidentalmente un invierno eterno que sumerge a su reino en un frío incesante. Su valiente hermana Anna, acompañada por Kristoff, un rudo montañista, y Olaf, un simpático muñeco de nieve que cobra vida, se aventuran en una búsqueda para salvar a Arendelle y traer de vuelta el verano. La película no solo es un cuento de hadas moderno con impresionantes efectos visuales y música emocionante, sino que también enseña lecciones sobre el amor, la aceptación y la importancia de aceptarse a uno mismo.", + "imageUrl": "https://m.media-amazon.com/images/M/MV5BMTQ1MjQwMTE5OF5BMl5BanBnXkFtZTgwNjk3MTcyMDE@._V1_.jpg", + "facts": { + "estreno": "2013", + "generoPelicula": "Aventura, Comedia, Musical", + "clasificacionPelicula": "Autoaceptación", + "clasificPublico": "7.4/10", + "tiempoDuracion": "102 minutos", + }, + "extraInfo": { + "curiosidades": "'Frozen' se convirtió en un fenómeno cultural global, ganando dos Premios Óscar y generando una popularidad masiva entre niños y adultos por igual. La canción 'Let It Go' se convirtió en un himno y fue interpretada en múltiples idiomas alrededor del mundo." + } + }, + { + "id": "enredados-2010", + "name": "Enredados", + "shortDescription": "Una historia sobre una princesa con un pelo mágico y un ladrón encantador en busca de aventuras.", + "description": "En 'Enredados', conocemos a Rapunzel, una joven princesa con un cabello dorado mágico que le da poderes curativos. Encerrada en una torre desde su infancia por una malvada bruja llamada Madre Gothel, Rapunzel anhela explorar el mundo exterior. Cuando Flynn Rider, un ladrón encantador, irrumpe en su torre, comienza una emocionante aventura llena de acción, romance y descubrimientos sorprendentes. La película no solo cautiva con su animación impresionante y música memorable, sino que también enseña lecciones sobre el coraje, la determinación y la importancia de seguir nuestros sueños.", + "imageUrl": "https://es.web.img3.acsta.net/medias/nmedia/18/79/96/30/19541005.jpg", + "facts": { + "estreno": "2010", + "generoPelicula": "Aventura, Comedia, Musical", + "clasificacionPelicula": "Determinación", + "clasificPublico": "7.7/10", + "tiempoDuracion": "100 minutos", + }, + "extraInfo": { + "curiosidades": "'Enredados' marcó un hito en la animación digital de Disney al ser la primera película en usar el programa de animación 'Meander', desarrollado específicamente para crear efectos de luz y sombra similares a los de un cuadro al óleo." + } + }, + { + "id": "princesa-sapo", + "name": "La Princesa y el Sapo", + "shortDescription": "Una encantadora historia ambientada en Nueva Orleans sobre amor, magia y transformación.", + "description": "Tiana es una joven trabajadora con un sueño: abrir su propio restaurante. Cuando un príncipe convertido en rana, Naveen, busca su ayuda para romper un hechizo, ambos se embarcan en una emocionante aventura por los pantanos de Louisiana. A través de giros y desafíos, aprenden lecciones sobre el verdadero valor del amor y la importancia de seguir tus sueños. La película no solo deleita con su animación vibrante y música jazzística, sino que también celebra la cultura afroamericana y transmite un mensaje poderoso de perseverancia y sacrificio.", + "imageUrl": "https://i.pinimg.com/originals/15/ea/11/15ea11588db2f9e23aac9f747b63a19f.jpg", + "facts": { + "estreno": "2009", + "generoPelicula": "Aventura, Comedia, Musical", + "clasificacionPelicula": "Perseverancia", + "clasificPublico": "7.1/10", + "tiempoDuracion": "97 minutos", + }, + "extraInfo": { + "curiosidades": "'La Princesa y el Sapo' es notable por ser la primera película de Disney Animation en presentar a una princesa afroamericana como protagonista" + } + }, + { + "id": "mulan-1998", + "name": "Mulán", + "shortDescription": "Una joven valiente se disfraza de guerrero para salvar a su familia y su patria. Inspiradora, y llena de valor", + "description": "Mulán es una joven china que decide tomar el lugar de su anciano padre en el ejército imperial, haciéndose pasar por un hombre. Con la ayuda de su dragón guardián, Mushu, y un grupo de soldados divertidos, Mulán se enfrenta a desafíos tanto físicos como emocionales mientras lucha contra los invasores hunos liderados por Shan Yu. La película no solo es una epopeya de acción y aventura, sino también un poderoso relato sobre el valor, la determinación y el respeto por la familia y la tradición.", + "imageUrl": "https://www.lavanguardia.com/peliculas-series/images/movie/poster/1998/6/w1280/towmTJ0k29quKI9IDnOZKAAtQx.jpg", + "facts": { + "estreno": "1998", + "generoPelicula": "Aventura,Drama", + "clasificacionPelicula": "Valentía", + "clasificPublico": "7.6/10", + "tiempoDuracion": "88 minutos", + }, + "extraInfo": { + "curiosidades": "'Mulan' es inspirada en una antigua leyenda china de una mujer que se disfraza de hombre para luchar en lugar de su padre. La película fue elogiada por su representación cultural y feminista, siendo una de las primeras de Disney en presentar a una heroína que desafía los roles de género tradicionales." + } + }, + { + "id": "mundo-jack", + "name": "El Extraño Mundo de Jack", + "shortDescription": "Una película animada que fusiona el encanto de Halloween con la magia de la Navidad.", + "description": "El Extraño Mundo de Jack cuenta la historia de Jack Skellington, el Rey de Halloween, quien se cansa de celebrar siempre la misma fiesta cada año. Cuando descubre accidentalmente la Ciudad de la Navidad, se obsesiona con traer el espíritu navideño a su oscuro reino de Halloween. Sin embargo, sus intentos de recrear la Navidad llevan a resultados cómicos y desastrosos. A través de la historia de Jack, la película explora temas de autodescubrimiento, aceptación y la importancia de ser fiel a uno mismo.", + "imageUrl": "https://static.wixstatic.com/media/51d250_0469ccba361b4111bf43aab68e012386~mv2.jpg/v1/fill/w_800,h_1200,al_c,q_85,enc_auto/51d250_0469ccba361b4111bf43aab68e012386~mv2.jpg", + "facts": { + "estreno": "1993", + "generoPelicula": "Fantasía, Musical", + "clasificacionPelicula": "Autenticidad", + "clasificPublico": "8/10", + "tiempoDuracion": "76 minutos", + }, + "extraInfo": { + "curiosidades": "'El Extraño Mundo de Jack' fue inicialmente concebida por Tim Burton como un poema en los años 80, antes de ser adaptada en una película animada. Aunque a menudo se asocia con Tim Burton como director, en realidad fue dirigida por Henry Selick, quien también trabajó en 'Coraline'." + } + }, + { + "id": "tarzan-1999", + "name": "Tarzán", + "shortDescription": "Una emocionante aventura animada sobre un niño criado por gorilas en la jungla africana.", + "description": "Un niño que es adoptado por una familia de gorilas después de la muerte de sus padres en un naufragio. A medida que crece, Tarzán desarrolla habilidades extraordinarias y se adapta a la vida en la selva. Su vida cambia cuando conoce a Jane, una exploradora y científica, y se enfrenta a la amenaza de los cazadores furtivos que buscan explotar la naturaleza. La película, dirigida por Chris Buck y Kevin Lima, destaca por su animación impresionante, la icónica banda sonora de Phil Collins y su mensaje sobre la importancia del respeto hacia la naturaleza y la diversidad cultural.", + "imageUrl": "https://es.web.img3.acsta.net/pictures/14/03/17/11/47/596263.jpg", + "facts": { + "estreno": "1999", + "generoPelicula": "Aventura, Drama", + "clasificacionPelicula": "Identidad", + "clasificPublico": "7.3/10", + "tiempoDuracion": "88 minutos", + }, + "extraInfo": { + "curiosidades": "'Tarzan' fue el primer largometraje animado de Disney en utilizar tecnología digital para pintar los fondos. La película ganó el Premio Óscar a la Mejor Canción Original por 'You'll Be in My Heart' de Phil Collins, que se convirtió en un éxito internacional." + } + }, + { + "id": "hercules-1997", + "name": "Hércules", + "shortDescription": "Una épica historia que sigue los pasos de Hércules, un semidiós en busca de su verdadero lugar en el Olimpo", + "description": "En 'Hércules', conocemos la historia del poderoso semidiós griego nacido de los dioses Zeus y Hera. Criado como un humano en la Tierra, Hércules descubre su verdadera identidad y su destino como héroe cuando debe demostrar su valía enfrentando peligrosos desafíos y criaturas mitológicas. Con la ayuda de su fiel amigo Filoctetes y la sabiduría de los dioses del Olimpo, Hércules se embarca en una aventura llena de acción y humor para restaurar su estatus divino y ganarse el amor de Megara, una mujer con un oscuro pasado.", + "imageUrl": "https://www.lavanguardia.com/peliculas-series/images/movie/poster/1997/6/w1280/4Q2rLG6a9fJhKM5emIYLzgw4HCa.jpg", + "facts": { + "estreno": "1997", + "generoPelicula": "Aventura, Comedia, Musical", + "clasificacionPelicula": "Autoaceptación", + "clasificPublico": "7.3/10", + "tiempoDuracion": "93 minutos", + }, + "extraInfo": { + "curiosidades": "'Hércules' es conocida por su estilo artístico único inspirado en el arte griego antiguo, especialmente en sus escenas de acción y los diseños de los personajes." + } + }, + ]; \ No newline at end of file diff --git a/src/index.html b/src/index.html index fd6186f2..4e315947 100644 --- a/src/index.html +++ b/src/index.html @@ -1,12 +1,73 @@ - - - Dataverse Chat - - - + + + + + Dataverse + + + + + + + + + + + + + + + +
+

Dreamland

+
+
+

¡Bienvenidos fans de Disney y Pixar! Explora nuestro mágico contenido y descubre las novedades de este fantástico mundo

+ +
+ + + + + + + +
+
+ +
+
    +
  • El promedio de duración es:
  • +
  • El promedio de clasificación es:
  • +
+
+
- - + + +
+
+

Creado por Camila Carreño y Daniela Martínez

+

Proyecto Dataverse para Laboratoria. La información de esta página está proporcionado por Disney y Pixar, quienes tiene derechos exclusivos del contenido.

+
+ + + + \ No newline at end of file diff --git a/src/lib/dataFunctions.js b/src/lib/dataFunctions.js new file mode 100644 index 00000000..66649f33 --- /dev/null +++ b/src/lib/dataFunctions.js @@ -0,0 +1,34 @@ +/* eslint-disable indent */ +/* eslint-disable no-unused-vars */ + +export const computeStats = (data) => { + const sumaTotalDuracion = data.reduce((acumulador, pelicula) => acumulador + Number(pelicula.facts.tiempoDuracion.split(" ")[0]), 0); + + return sumaTotalDuracion/data.length; + }; + +export const computeStatsNota = (data) => { + const sumaTotalNota = data.reduce((acumulador, pelicula) => acumulador + Number(pelicula.facts.clasificPublico.split("/")[0]), 0); + const promedioNota= sumaTotalNota/data.length; + + return promedioNota.toFixed(1); + }; + + +export const filterData = (data, filterBy, value) => { + const resultFilter = data.filter( + (data) => data.facts[filterBy] >= Number(value) && data.facts[filterBy] <= Number(value) + 9 + ); + return resultFilter; +}; + +export const sortData = (data,sortBy, sortOrder) => { + const nombresOrdenados = data.sort((a, b) => { + if (sortOrder === 'Asc') { + return a[sortBy].localeCompare(b[sortBy]); + } else { + return b[sortBy].localeCompare(a[sortBy]); + } + }); + return nombresOrdenados; +}; \ No newline at end of file diff --git a/src/views/Example.js b/src/views/Example.js deleted file mode 100644 index baca4441..00000000 --- a/src/views/Example.js +++ /dev/null @@ -1,5 +0,0 @@ -const Example = () => { - -}; - -export default Example; \ No newline at end of file diff --git a/src/views/router.js b/src/views/router.js new file mode 100644 index 00000000..e69de29b diff --git a/src/views/style.css b/src/views/style.css new file mode 100644 index 00000000..39b12737 --- /dev/null +++ b/src/views/style.css @@ -0,0 +1,256 @@ +@font-face { + font-family: fuenteDisney; + src: url(./assets/DisneyFont.ttf); + } + + h1 { + font-family: fuenteDisney, sans-serif; + font-style: normal; + font-size: 140px; + text-align: center; + color: #ffd034; + text-shadow: 4px 4px 0 #fcf0c6; + margin-top: 75px; + margin-bottom: 75px; + } + + body { + background-image: url("https://wallpapers-clan.com/wp-content/uploads/2022/09/disney-castle-blue-wallpaper-2-scaled.jpg"); + image-rendering: center; + font-family: "Montserrat Alternates", sans-serif; + color: #ffd034; + } + + h2 { + font-family: "Montserrat Alternates", sans-serif; + font-weight: bold; + font-style: normal; + font-size: 20px; + text-align: center; + color:black; + background-color: #ac95ffd3; + padding: 25px; + } + + h3 { + font-family: "Montserrat Alternates", sans-serif; + text-align: center; + font-weight: bold; + font-size: 25px; + margin-top: 0; + } + + .botonDatos { + cursor:pointer; + position:relative; + padding:10px 20px; + background:#ac95ffd3; + border: #ccc; + font-size:28px; + border-top-right-radius:10px; + border-bottom-left-radius:10px; + transition:all 1s; + &:after,&:before{ + content:" "; + width:10px; + height:10px; + position:absolute; + transition:all 1s; + } + &:after{ + top:-1px; + left:-1px; + border-top:5px solid #ffd034; + border-left:5px solid #ffd034; + } + &:before{ + bottom:1px; + right:1px; + border-bottom:5px solid #ffd034; + border-right:5px solid #ffd034; + } + &:hover{ + border-top-right-radius:0px; + border-bottom-left-radius:0px; + // background:rgba(0,0,0,.5); + // color:white; + &:before,&:after{ + + width:100%; + height:100%; + // border-color:white; + } + } + } + + .contenido-oculto{ + display: none; + + } + + #datosestadisticos { + display: flex; + flex-direction: column; + align-items: center; + width: 100%; + max-width: 600px; + margin: 0 auto; + padding: 20px; + } + + .datosdisney { + list-style-type: none; + padding: 16px; + display: flex; + gap: 32px; + justify-content: center; + align-items: center; + background-color: rgba(255, 255, 255, 0.5); + border-radius: 8px; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); + margin-top: 20px; + margin-bottom: 20px; + } + + .datosdisney li { + flex: 1; + padding: 10px; + text-align: center; + border: 1px solid #ccc; + border-radius: 4px; + box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1); + width: 400px; + height: 64px; + } + + .datosdisney li#duracion { + background-color: #fcf0c6; + color:#000; + display: flex; + align-items: center; + font-weight: bold; + } + + .datosdisney li#nota { + background-color: #fcf0c6; + color: #000; + display: flex; + align-items: center; + font-weight: bold; + } + .tituloSelectores{ + font-size: 120%; + } + .selectores{ + display: flex; + justify-content: center; + align-items: center; + gap: 10px; + } + + select { + font-family: "Montserrat Alternates", sans-serif; + font-size: 100%; + color: black; + background-color: #fcf0c6; + padding: 10px; + border: solid; + border-color: #ffd034; + font-weight: bold; + cursor: pointer; + cursor: pointer; + border-radius: 20px; + } + + option { + font-size: 100%; + color: black; + background-color: #fcf0c6; + font-family: "Montserrat Alternates", sans-serif; + padding: 10px; + border-color: #ffd034; + border-width: 3px; + border-style: solid; + cursor: pointer; + border-radius: 20px; + } + + button { + font-family: "Montserrat Alternates", sans-serif; + font-weight: bold; + font-size: 100%; + background-color: #fcf0c6; + color: black; + padding: 10px; + border: solid; + border-color: #ffd034; + border-width: 3px; + border-radius: 20px; + cursor: pointer; + } + + .ulPelis { + display: flex; + flex-wrap: wrap; + gap: 32px; + list-style: none; + padding: 0; + margin: 0; + margin-top: 16px; + justify-content: center; + } + + .contenedorContenido { + display: flex; + flex-direction: row; + align-items: flex-start; + } + + .contenedorImagen { + display: flex; + justify-content: center; + + } + + .contenedorTextos { + display: flex; + flex-direction: column; + padding: 0 16px; + font-size: 110%; + } + + .imagenPeli { + height: 240px; + width: auto; + } + + .tarjeta { + font-family: "Comic Neue", cursiva; + display: flex; + flex-direction: column; + background-color: rgba(255, 255, 255, 0.9); + gap: 16px; + width: calc(50% - 64px); + text-align: justify; + margin: 1px; + padding: 16px; + border-radius: 20px; + color: black; + } + + footer { + background-color: rgba(255, 255, 255, 0.5); + color: #000; + margin-top: 10px; + margin-bottom: 10px; + padding: 2%; + text-align: center; + } + + #root{ + margin-top: 32px; + margin-bottom: 64px; + max-width: 1400px; + margin-left: auto; + margin-right: auto; + } \ No newline at end of file diff --git a/src/views/view.js b/src/views/view.js new file mode 100644 index 00000000..eebf28f9 --- /dev/null +++ b/src/views/view.js @@ -0,0 +1,31 @@ +export const renderItems = (data) => { + const ul = document.createElement("ul"); + ul.classList.add("ulPelis"); + + data.forEach((pelicula) => { + const li = document.createElement("li"); + li.classList.add("tarjeta"); + li.setAttribute("itemtype", "peliculasDisney"); + li.setAttribute("itemscope", "true"); + li.setAttribute("data-id", pelicula.id) + li.innerHTML = ` +
+

${pelicula.name}

+
+
${pelicula.id}
+
+
${pelicula.shortDescription}
+
+

Año: ${pelicula.facts.estreno}

+

Género: ${pelicula.facts.generoPelicula}

+

Puntuación en IMDb: ${pelicula.facts.clasificPublico}

+

Duración: ${pelicula.facts.tiempoDuracion}

+
+
+
+
+ `; + ul.appendChild(li); + }); + return ul; + }; \ No newline at end of file diff --git a/test/datafuntions.spec.js b/test/datafuntions.spec.js new file mode 100644 index 00000000..e69de29b diff --git a/test/example.spec.js b/test/example.spec.js new file mode 100644 index 00000000..e69de29b From b4b5b33f620d7bd515a3613832fd3c63b4763a83 Mon Sep 17 00:00:00 2001 From: danimar-g Date: Thu, 8 Aug 2024 11:18:49 -0400 Subject: [PATCH 03/33] cambio routers --- src/Components/Card.js | 27 ++++++++++++++++++ src/index.html | 65 ++---------------------------------------- src/index.js | 21 +++++++++++++- src/views/Home.js | 15 ++++++++++ src/views/router.js | 47 ++++++++++++++++++++++++++++++ src/views/view.js | 33 ++------------------- 6 files changed, 115 insertions(+), 93 deletions(-) create mode 100644 src/Components/Card.js create mode 100644 src/views/Home.js diff --git a/src/Components/Card.js b/src/Components/Card.js new file mode 100644 index 00000000..ce79e12a --- /dev/null +++ b/src/Components/Card.js @@ -0,0 +1,27 @@ + +const liElement = document.createElement("li"); + liElement.classList.add("tarjeta"); + liElement.setAttribute("itemtype", "peliculasDisney"); + liElement.setAttribute("itemscope", "true"); + liElement.setAttribute("data-id", pelicula.id) + liElement.innerHTML = ` +
+

${pelicula.name}

+
+
${pelicula.id}
+
+
${pelicula.shortDescription}
+
+

Año: ${pelicula.facts.estreno}

+

Género: ${pelicula.facts.generoPelicula}

+

Puntuación en IMDb: ${pelicula.facts.clasificPublico}

+

Duración: ${pelicula.facts.tiempoDuracion}

+
+
+
+
+ `; + ul.appendChild(li); + }); + return liElement; + }; \ No newline at end of file diff --git a/src/index.html b/src/index.html index 4e315947..1cc10860 100644 --- a/src/index.html +++ b/src/index.html @@ -1,73 +1,14 @@ - + Dataverse - - - - - - - - - - - - -
-

Dreamland

-
-
-

¡Bienvenidos fans de Disney y Pixar! Explora nuestro mágico contenido y descubre las novedades de este fantástico mundo

- -
- - - - - - - -
-
- -
-
    -
  • El promedio de duración es:
  • -
  • El promedio de clasificación es:
  • -
-
-
-
- - -
-
-

Creado por Camila Carreño y Daniela Martínez

-

Proyecto Dataverse para Laboratoria. La información de esta página está proporcionado por Disney y Pixar, quienes tiene derechos exclusivos del contenido.

-
- +
+ - - \ No newline at end of file diff --git a/src/index.js b/src/index.js index a0e2d57c..1188f594 100644 --- a/src/index.js +++ b/src/index.js @@ -16,4 +16,23 @@ TODO: 1.- Definir rutas en router. 2.- Pasar "root element" a router. 3.- Invocar el router para renderizar la vista correcta. -*/ \ No newline at end of file +*/ + +import Home from './views/Home'; +// ... import other views +import { setRootEl, setRoutes, onURLChange } from './router.js'; + +// Define your routes and their associated views +const routes = { + '/': Home, + // ... +}; + +// Assign the routes +setRoutes(routes); + +// Set the root element where views will be rendered +window.addEventListener("DOMContentLoaded", () => { + setRootEl(/* root element */); + +}); \ No newline at end of file diff --git a/src/views/Home.js b/src/views/Home.js new file mode 100644 index 00000000..3e6a2a34 --- /dev/null +++ b/src/views/Home.js @@ -0,0 +1,15 @@ +const Home = () => { + const el = document.createElement("h1"); + el.innerHTML = "Dreamland"; + return el; + } + + //funcion para crear tarjetas + const renderItems = (data) => { + const ulElement = document.createElement('ul'); + data.forEach(pelicula => + + ulElement.appenChild(Card("ulPelis")) + ); + return ulElement; + }; \ No newline at end of file diff --git a/src/views/router.js b/src/views/router.js index e69de29b..1565c9cf 100644 --- a/src/views/router.js +++ b/src/views/router.js @@ -0,0 +1,47 @@ + +let ROUTES = {}; +let rootEl; + +export const setRootEl = (el) => { + // assign rootEl + rootEl = el +} + +export const setRoutes = (routes) => { + // optional Throw errors if routes isn't an object + // optional Throw errors if routes doesn't define an /error route + // assign ROUTES + ROUTES = routes +} + +const queryStringToObject = (queryString) => { + // convert query string to URLSearchParams + // convert URLSearchParams to an object + // return the object + const params = new URLSearchParams(queryString); + for (const [key, value] of mySearchParams) { +} +} + +const renderView = (pathname, props={}) => { + // clear the root element + // find the correct view in ROUTES for the pathname + // in case not found render the error view + // render the correct view passing the value of props + // add the view element to the DOM root element +} + +export const navigateTo = (pathname, props={}) => { + // update window history with pushState + // render the view with the pathname and props +} + +export const onURLChange = (location) => { + // parse the location for the pathname and search params + // convert the search params to an object + // render the view with the pathname and object + const pathname = location.pathname + const searchParams = location.search + const searchParamsObject = queryStringToObject(searchParams) + renderView(pathname,searchParamsObject) +} \ No newline at end of file diff --git a/src/views/view.js b/src/views/view.js index eebf28f9..7e3c0d43 100644 --- a/src/views/view.js +++ b/src/views/view.js @@ -1,31 +1,4 @@ -export const renderItems = (data) => { - const ul = document.createElement("ul"); - ul.classList.add("ulPelis"); +export - data.forEach((pelicula) => { - const li = document.createElement("li"); - li.classList.add("tarjeta"); - li.setAttribute("itemtype", "peliculasDisney"); - li.setAttribute("itemscope", "true"); - li.setAttribute("data-id", pelicula.id) - li.innerHTML = ` -
-

${pelicula.name}

-
-
${pelicula.id}
-
-
${pelicula.shortDescription}
-
-

Año: ${pelicula.facts.estreno}

-

Género: ${pelicula.facts.generoPelicula}

-

Puntuación en IMDb: ${pelicula.facts.clasificPublico}

-

Duración: ${pelicula.facts.tiempoDuracion}

-
-
-
-
- `; - ul.appendChild(li); - }); - return ul; - }; \ No newline at end of file + + \ No newline at end of file From f6acf48c6fdf139644d5ef503623e44667962399 Mon Sep 17 00:00:00 2001 From: CamilaCarrenoV Date: Thu, 8 Aug 2024 11:27:24 -0400 Subject: [PATCH 04/33] cambios iniciales --- src/views/home.js | 31 +++++++++++++++++++++++++++++++ src/views/view.js | 31 ------------------------------- 2 files changed, 31 insertions(+), 31 deletions(-) create mode 100644 src/views/home.js diff --git a/src/views/home.js b/src/views/home.js new file mode 100644 index 00000000..eebf28f9 --- /dev/null +++ b/src/views/home.js @@ -0,0 +1,31 @@ +export const renderItems = (data) => { + const ul = document.createElement("ul"); + ul.classList.add("ulPelis"); + + data.forEach((pelicula) => { + const li = document.createElement("li"); + li.classList.add("tarjeta"); + li.setAttribute("itemtype", "peliculasDisney"); + li.setAttribute("itemscope", "true"); + li.setAttribute("data-id", pelicula.id) + li.innerHTML = ` +
+

${pelicula.name}

+
+
${pelicula.id}
+
+
${pelicula.shortDescription}
+
+

Año: ${pelicula.facts.estreno}

+

Género: ${pelicula.facts.generoPelicula}

+

Puntuación en IMDb: ${pelicula.facts.clasificPublico}

+

Duración: ${pelicula.facts.tiempoDuracion}

+
+
+
+
+ `; + ul.appendChild(li); + }); + return ul; + }; \ No newline at end of file diff --git a/src/views/view.js b/src/views/view.js index eebf28f9..e69de29b 100644 --- a/src/views/view.js +++ b/src/views/view.js @@ -1,31 +0,0 @@ -export const renderItems = (data) => { - const ul = document.createElement("ul"); - ul.classList.add("ulPelis"); - - data.forEach((pelicula) => { - const li = document.createElement("li"); - li.classList.add("tarjeta"); - li.setAttribute("itemtype", "peliculasDisney"); - li.setAttribute("itemscope", "true"); - li.setAttribute("data-id", pelicula.id) - li.innerHTML = ` -
-

${pelicula.name}

-
-
${pelicula.id}
-
-
${pelicula.shortDescription}
-
-

Año: ${pelicula.facts.estreno}

-

Género: ${pelicula.facts.generoPelicula}

-

Puntuación en IMDb: ${pelicula.facts.clasificPublico}

-

Duración: ${pelicula.facts.tiempoDuracion}

-
-
-
-
- `; - ul.appendChild(li); - }); - return ul; - }; \ No newline at end of file From 4e602f02fc4bc9f62d414a1f31fe1065b3bca353 Mon Sep 17 00:00:00 2001 From: CamilaCarrenoV Date: Tue, 13 Aug 2024 13:07:42 -0400 Subject: [PATCH 05/33] cambios orden de los archivos --- src/Components/Card.js | 3 ++- src/index.js | 22 +--------------------- src/{views => }/router.js | 1 - src/{views => }/style.css | 0 src/views/home.js | 6 +++++- 5 files changed, 8 insertions(+), 24 deletions(-) rename src/{views => }/router.js (99%) rename src/{views => }/style.css (100%) diff --git a/src/Components/Card.js b/src/Components/Card.js index ce79e12a..97f6b19f 100644 --- a/src/Components/Card.js +++ b/src/Components/Card.js @@ -1,9 +1,10 @@ - +export const cards =()=> { const liElement = document.createElement("li"); liElement.classList.add("tarjeta"); liElement.setAttribute("itemtype", "peliculasDisney"); liElement.setAttribute("itemscope", "true"); liElement.setAttribute("data-id", pelicula.id) + liElement.innerHTML = `

${pelicula.name}

diff --git a/src/index.js b/src/index.js index 1188f594..fcf6721b 100644 --- a/src/index.js +++ b/src/index.js @@ -1,24 +1,4 @@ -// En este archivo definirás tus rutas e importarás los componentes que vas a renderizar. - -/* -import Example from './views/Example.js'; - -Ejemplo de definición de rutas: - -const routes = { - "/": Example, - ... -} -*/ - -/* -TODO: -1.- Definir rutas en router. -2.- Pasar "root element" a router. -3.- Invocar el router para renderizar la vista correcta. -*/ - -import Home from './views/Home'; +import Home from './views/home.js'; // ... import other views import { setRootEl, setRoutes, onURLChange } from './router.js'; diff --git a/src/views/router.js b/src/router.js similarity index 99% rename from src/views/router.js rename to src/router.js index e97fb303..06707349 100644 --- a/src/views/router.js +++ b/src/router.js @@ -20,7 +20,6 @@ const queryStringToObject = (queryString) => { // return the object const params = new URLSearchParams(queryString); const results = {}; - for (const [key, value] of mySearchParams) { results[key] = value; } diff --git a/src/views/style.css b/src/style.css similarity index 100% rename from src/views/style.css rename to src/style.css diff --git a/src/views/home.js b/src/views/home.js index 3e6a2a34..a09558cb 100644 --- a/src/views/home.js +++ b/src/views/home.js @@ -1,9 +1,13 @@ -const Home = () => { +export const Home = () => { const el = document.createElement("h1"); el.innerHTML = "Dreamland"; + return el; } + + + //funcion para crear tarjetas const renderItems = (data) => { const ulElement = document.createElement('ul'); From a4643e4c9db0c3a08b659d5d62a27eba7cb254b9 Mon Sep 17 00:00:00 2001 From: CamilaCarrenoV Date: Tue, 13 Aug 2024 19:48:52 -0400 Subject: [PATCH 06/33] vista de home renderizada --- src/Components/Card.js | 28 ---------------------------- src/index.html | 2 +- src/index.js | 5 +++-- src/router.js | 16 ++++++---------- src/views/home.js | 11 +---------- src/views/view.js | 2 +- 6 files changed, 12 insertions(+), 52 deletions(-) diff --git a/src/Components/Card.js b/src/Components/Card.js index 97f6b19f..e69de29b 100644 --- a/src/Components/Card.js +++ b/src/Components/Card.js @@ -1,28 +0,0 @@ -export const cards =()=> { -const liElement = document.createElement("li"); - liElement.classList.add("tarjeta"); - liElement.setAttribute("itemtype", "peliculasDisney"); - liElement.setAttribute("itemscope", "true"); - liElement.setAttribute("data-id", pelicula.id) - - liElement.innerHTML = ` -
-

${pelicula.name}

-
-
${pelicula.id}
-
-
${pelicula.shortDescription}
-
-

Año: ${pelicula.facts.estreno}

-

Género: ${pelicula.facts.generoPelicula}

-

Puntuación en IMDb: ${pelicula.facts.clasificPublico}

-

Duración: ${pelicula.facts.tiempoDuracion}

-
-
-
-
- `; - ul.appendChild(li); - }); - return liElement; - }; \ No newline at end of file diff --git a/src/index.html b/src/index.html index 1cc10860..cdf16fe6 100644 --- a/src/index.html +++ b/src/index.html @@ -9,6 +9,6 @@
- + \ No newline at end of file diff --git a/src/index.js b/src/index.js index fcf6721b..99ead5a0 100644 --- a/src/index.js +++ b/src/index.js @@ -13,6 +13,7 @@ setRoutes(routes); // Set the root element where views will be rendered window.addEventListener("DOMContentLoaded", () => { - setRootEl(/* root element */); - + const rootEl = document.getElementById("root"); + setRootEl(rootEl); + onURLChange(window.location); }); \ No newline at end of file diff --git a/src/router.js b/src/router.js index 06707349..bf244deb 100644 --- a/src/router.js +++ b/src/router.js @@ -18,12 +18,8 @@ const queryStringToObject = (queryString) => { // convert query string to URLSearchParams // convert URLSearchParams to an object // return the object - const params = new URLSearchParams(queryString); - const results = {}; - for (const [key, value] of mySearchParams) { - results[key] = value; -} - return results; + const params = Object.fromEntries(new URLSearchParams(queryString)); + return params; } const renderView = (pathname, props={}) => { @@ -60,8 +56,8 @@ export const onURLChange = (location) => { // parse the location for the pathname and search params // convert the search params to an object // render the view with the pathname and object - const pathname = location.pathname - const searchParams = location.search - const searchParamsObject = queryStringToObject(searchParams) - renderView(pathname,searchParamsObject) + const pathname = location.pathname; + const searchParams = location.search; + const searchParamsObject = queryStringToObject(searchParams); + renderView(pathname,searchParamsObject); } \ No newline at end of file diff --git a/src/views/home.js b/src/views/home.js index a09558cb..2af2a0db 100644 --- a/src/views/home.js +++ b/src/views/home.js @@ -7,13 +7,4 @@ export const Home = () => { - - //funcion para crear tarjetas - const renderItems = (data) => { - const ulElement = document.createElement('ul'); - data.forEach(pelicula => - - ulElement.appenChild(Card("ulPelis")) - ); - return ulElement; - }; \ No newline at end of file + export default Home; \ No newline at end of file diff --git a/src/views/view.js b/src/views/view.js index 7e3c0d43..732945d2 100644 --- a/src/views/view.js +++ b/src/views/view.js @@ -1,4 +1,4 @@ -export + \ No newline at end of file From 091d818f72942b5e064717799ab13249b653d862 Mon Sep 17 00:00:00 2001 From: danimar-g Date: Wed, 14 Aug 2024 17:15:06 -0400 Subject: [PATCH 07/33] cambios home --- src/Components/Card.js | 4 ++-- src/views/view.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Components/Card.js b/src/Components/Card.js index 97f6b19f..095cd49f 100644 --- a/src/Components/Card.js +++ b/src/Components/Card.js @@ -23,6 +23,6 @@ const liElement = document.createElement("li");
`; ul.appendChild(li); - }); + }; return liElement; - }; \ No newline at end of file +; \ No newline at end of file diff --git a/src/views/view.js b/src/views/view.js index 7e3c0d43..732945d2 100644 --- a/src/views/view.js +++ b/src/views/view.js @@ -1,4 +1,4 @@ -export + \ No newline at end of file From 3b27800fee28cff68dfbdb4f30e909b2dc20e62e Mon Sep 17 00:00:00 2001 From: CamilaCarrenoV Date: Wed, 14 Aug 2024 17:27:14 -0400 Subject: [PATCH 08/33] pruebas de funcionamiento de mi rama --- src/lib/dataFunctions.js | 3 +-- src/views/home.js | 2 ++ 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/lib/dataFunctions.js b/src/lib/dataFunctions.js index 66649f33..3554f1d2 100644 --- a/src/lib/dataFunctions.js +++ b/src/lib/dataFunctions.js @@ -1,5 +1,4 @@ -/* eslint-disable indent */ -/* eslint-disable no-unused-vars */ + export const computeStats = (data) => { const sumaTotalDuracion = data.reduce((acumulador, pelicula) => acumulador + Number(pelicula.facts.tiempoDuracion.split(" ")[0]), 0); diff --git a/src/views/home.js b/src/views/home.js index 2af2a0db..44a04c3b 100644 --- a/src/views/home.js +++ b/src/views/home.js @@ -2,6 +2,8 @@ export const Home = () => { const el = document.createElement("h1"); el.innerHTML = "Dreamland"; + + return el; } From f824f4db7011a4b9f93416f98c77f000826564cb Mon Sep 17 00:00:00 2001 From: danimar-g Date: Wed, 14 Aug 2024 18:34:16 -0400 Subject: [PATCH 09/33] intento de ver tarjeta --- src/Components/Card.js | 30 ++++++ src/views/home.js | 11 ++- test/data.js | 193 ++++++++++++++++++++++++++++++++++++++ test/datafuntions.spec.js | 49 ++++++++++ 4 files changed, 282 insertions(+), 1 deletion(-) create mode 100644 test/data.js diff --git a/src/Components/Card.js b/src/Components/Card.js index 99a80913..f8f045b4 100644 --- a/src/Components/Card.js +++ b/src/Components/Card.js @@ -1,2 +1,32 @@ +import { navigateTo } from "../router.js"; +export const Card = (itemn) => { + liElement.classList.add("cardli"); + liElement.setAttribute("itemscope",""); + liElement.setAttribute("itemtype", ""); + liElement.setAttribute("data-id", item.id); + + li.innerHTML = ` +
+

${pelicula.name}

+
+
${pelicula.id}
+
+
${pelicula.shortDescription}
+
+

Año: ${pelicula.facts.estreno}

+

Género: ${pelicula.facts.generoPelicula}

+

Puntuación en IMDb: ${pelicula.facts.clasificPublico}

+

Duración: ${pelicula.facts.tiempoDuracion}

+
+
+
+
+ `; + + liElement.addEventListener('click', () => { + navigateTo('/chatIndividual', {id: item.id}); + }); + return liElement; +}; diff --git a/src/views/home.js b/src/views/home.js index 44a04c3b..61795394 100644 --- a/src/views/home.js +++ b/src/views/home.js @@ -1,8 +1,17 @@ +import { data } from '../data/dataset.js'; +import { filterData } from '../lib/dataFunctions.js'; + export const Home = () => { const el = document.createElement("h1"); el.innerHTML = "Dreamland"; - + const renderItems = (data) => { + const ulElement = document.createElement('ul'); + data.forEach(item => + ulElement.appendChild(Card(item)) + ); + return ulElement; + }; return el; } diff --git a/test/data.js b/test/data.js new file mode 100644 index 00000000..2a791949 --- /dev/null +++ b/test/data.js @@ -0,0 +1,193 @@ +// Aqui puedes agregar los datos que necesites para tus pruebas +// al menos debe tener uno que se llame "data" + +export const data = [ + { + "id": "Disney-Elemental", + "name": "Elemental", + "shortDescription": "Explora un mundo donde los elementos naturales cobran vida y coexisten en una vibrante ciudad.", + "description": "Seguimos la historia de Ember, una joven de fuego, y Wade, un chico de agua, que provienen de mundos opuestos. A pesar de sus diferencias, desarrollan una amistad única que desafía las convenciones sociales de su entorno. A medida que su vínculo se fortalece, Ember y Wade descubren que las diferencias que los separan también pueden ser la clave para superar desafíos personales y comunitarios. La película presenta un viaje emocional y visualmente espectacular que celebra la diversidad y la aceptación.", + "imageUrl": "https://es.web.img3.acsta.net/pictures/23/05/17/10/28/2036083.jpg", + "facts": { + "estreno": "2023", + "generoPelicula": "Aventura, Fantasía", + "clasificacionPelicula": "Diversidad", + "clasificPublico": "7.1/10", + "tiempoDuracion": "101 minutos", + }, + "extraInfo": { + "curiosidades": "Para crear el efecto visual del personaje de Ember, el equipo de animación desarrolló nuevas técnicas para capturar la fluidez y el dinamismo del fuego de una manera realista y expresiva." + } + }, + { + "id": "pixar-up", + "name": "UP", + "shortDescription": "Aventuras emocionantes de un anciano y un niño explorador en una casa voladora impulsada por globos.", + "description": "Up narra la historia de Carl Fredricksen, un viudo de edad avanzada decidido a cumplir la promesa que le hizo a su difunta esposa. Con ingenio y determinación, Carl ata miles de globos a su casa y emprende un viaje épico hacia las remotas tierras de América del Sur. Pero su plan se complica cuando descubre que un inesperado pasajero, Russell, un explorador juvenil, se ha colado a bordo. Juntos, enfrentan peligros inimaginables y descubren que la aventura más grande de todas es la amistad.", + "imageUrl": "https://www.funeralnatural.net/sites/default/files/pelicula/imagen/upcartel.jpg", + "facts": { + "estreno": "2009", + "generoPelicula": "Aventura, Comedia, Drama", + "clasificacionPelicula": "Perseverancia", + "clasificPublico": "8.3/10", + "tiempoDuracion": "96 minutos", + }, + "extraInfo": { + "curiosidades": "La casa voladora de Carl Fredricksen está inspirada en la casa real de los hermanos Ellie y Carl, dos hermanos que crecieron en la ciudad de Los Ángeles, California." + } + }, + { + "id": "coco-pelicula", + "name": "Coco", + "shortDescription": "Una celebración musical y visual que explora la importancia de la familia y la memoria.", + "description": "Coco cuenta la historia de Miguel, un niño mexicano con grandes sueños musicales en un hogar donde la música está prohibida. En el Día de los Muertos, Miguel se embarca en un viaje extraordinario al mundo de los muertos para descubrir la verdad sobre su familia y su pasión por la música. Con impresionantes visuales y una banda sonora conmovedora, la película celebra la cultura mexicana y enseña lecciones sobre el amor, el legado y la importancia de recordar a nuestros seres queridos.", + "imageUrl": "https://es.web.img2.acsta.net/pictures/17/09/14/10/49/2019727.jpg", + "facts": { + "estreno": "2017", + "generoPelicula": "Aventura, Fantasía", + "clasificacionPelicula": "Familia", + "clasificPublico": "8.4/10", + "tiempoDuracion": "105 minutos", + }, + "extraInfo": { + "curiosidades":"Coco fue elogiada por su representación auténtica de la cultura mexicana, desde sus tradiciones hasta la música mariachi. Ganó dos Premios de la Academia, incluyendo Mejor Película Animada y Mejor Canción Original por Recuerdame." + } + }, + { + "id": "Walle-2008", + "name": "Wall-e", + "shortDescription": "Un robot solitario descubre el amor y la esperanza en un futuro distópico. Aventura encantadora y ecológica que inspira", + "description": "Seguimos a Wall-e, un pequeño robot diseñado para limpiar un planeta Tierra abandonado y cubierto de basura. Durante siglos, Wall-e ha desarrollado una personalidad única y un gran sentido de curiosidad. Todo cambia cuando conoce a EVE, una sonda enviada desde el espacio con una misión misteriosa. Juntos, Wall-e y EVE emprenden un viaje intergaláctico que desafía las expectativas y revela la importancia de la conexión humana y el cuidado del medio ambiente. Esta obra maestra de animación combina humor, emoción y reflexión sobre el futuro de la humanidad.", + "imageUrl": "https://es.web.img2.acsta.net/pictures/14/04/30/10/41/026995.jpg", + "facts": { + "estreno": "2008", + "generoPelicula": "Aventura, Ciencia ficción", + "clasificacionPelicula": "Esperanza", + "clasificPublico": "8.4/10", + "tiempoDuracion": "98 minutos", + }, + "extraInfo": { + "curiosidades": "Wall-e cuenta con una narrativa visual rica y detallada que permite a la historia ser contada con un mínimo diálogo durante la primera parte de la película, mostrando la maestría de Pixar en la animación y la narración visual." + } + }, + { + "id": "intensamente-2015", + "name": "Intensamente", + "shortDescription": "Explora las emociones humanas a través de la historia de Riley y las cinco emociones personificadas que guían su vida.", + "description": "Riley, una niña que atraviesa cambios importantes en su vida familiar al mudarse a una nueva ciudad. La historia se desarrolla dentro de su mente, donde sus emociones personificadas - Alegría, Tristeza, Miedo, Furia y Asco - trabajan juntas en la central de control emocional para guiar sus acciones y decisiones. A medida que Riley navega por los desafíos de crecer, las emociones aprenden lecciones valiosas sobre la importancia de la empatía, el equilibrio emocional y la aceptación de la tristeza como parte integral de la vida.", + "imageUrl": "https://mx.web.img3.acsta.net/pictures/17/08/07/21/43/466493.jpg", + "facts": { + "estreno": "2015", + "generoPelicula": "Aventura, Comedia, Drama", + "clasificacionPelicula": "Empatía", + "clasificPublico": "8/10", + "tiempoDuracion": "95 minutos", + }, + "extraInfo": { + "curiosidades": "Intensamente fue aclamada por su representación precisa de la psicología emocional y ganó el Premio de la Academia a la Mejor Película Animada en 2016." + } + }, + { + "id": "lilo-stitch", + "name": "Lilo y Stitch", + "shortDescription": "Una niña hawaiana y un alienígena travieso descubren el verdadero significado de la familia.", + "description": "Lilo & Stitch narra la conmovedora historia de Lilo, una niña hawaiana única, y Stitch, un alienígena travieso. Ambientada en las soleadas costas de Hawái, la película celebra la importancia de la familia y la aceptación. Con su animación vibrante y memorable banda sonora, captura tanto la esencia de la cultura hawaiana como la bondad universal. 'Lilo & Stitch' nos recuerda que la verdadera familia a menudo viene en formas inesperadas, enseñando lecciones de amor, amistad y comprensión en un viaje emocional que sigue siendo querido por generaciones.", + "imageUrl": "https://www.ecartelera.com/carteles/5100/5197/002_m.jpg", + "facts": { + "estreno": "2002", + "generoPelicula": "Aventura, Comedia, Ciencia ficción", + "clasificacionPelicula": "Familia", + "clasificPublico": "7.2/10", + "tiempoDuracion": "85 minutos", + }, + "extraInfo": { + "curiosidades": "'Lilo y Stitch' es conocida por su enfoque en la cultura y las tradiciones de Hawái, así como por su banda sonora que incluye música hawaiana auténtica mezclada con canciones pop contemporáneas" + } + }, + { + "id": "atlantis", + "name": "Atlantis: El Imperio Perdido", + "shortDescription": " Una emocionante expedición hacia un misterioso mundo subacuático en busca de un antiguo imperio perdido.", + "description": "Atlantis: El Imperio Perdido es una emocionante película de Disney que sigue a Milo Thatch, un cartógrafo y lingüista, en su búsqueda para encontrar la legendaria ciudad de Atlantis. Acompañado por un variopinto grupo de exploradores, Milo se embarca en una peligrosa expedición submarina. La película destaca por su impresionante animación, inspirada en el estilo visual de cómics, y su intrigante mezcla de mitología y ciencia ficción. Con una historia llena de acción, descubrimientos y valores como la amistad y la perseverancia, Atlantis es una aventura que inspira y cautiva a espectadores de todas las edades.", + "imageUrl": "https://www.aceprensa.com/wp-content/uploads/2001/11/10865-0.jpg", + "facts": { + "estreno": "2001", + "generoPelicula": "Aventura, Ciencia ficción", + "clasificacionPelicula": "Descubrimiento", + "clasificPublico": "6.9/10", + "tiempoDuracion": "96 minutos", + }, + "extraInfo": { + "curiosidades": "'Atlantis: El Imperio Perdido' fue una de las primeras películas de Disney en utilizar animación tradicional combinada con gráficos generados por computadora para crear ambientes submarinos espectaculares." + } + }, + { + "id": "big-hero", + "name": "Big Hero 6", + "shortDescription": "Una historia emocionante sobre un joven prodigio y su robot inflable en una ciudad futurista.", + "description": "En 'Big Hero 6', conocemos a Hiro Hamada, un joven genio de la robótica que vive en San Fransokyo, una ciudad futurista y vibrante. Después de sufrir una pérdida devastadora, Hiro se une a Baymax, un robot inflable diseñado para el cuidado de la salud, y a un grupo de amigos con habilidades únicas. Juntos, se convierten en Big Hero 6 y luchan contra un misterioso villano que amenaza con destruir la ciudad. La película combina acción trepidante con temas de amistad, valentía y la importancia de superar la pérdida.", + "imageUrl": "https://es.web.img3.acsta.net/pictures/14/09/01/13/43/553593.jpg", + "facts": { + "estreno": "2014", + "generoPelicula": "Aventura, Acción", + "clasificacionPelicula": "Resiliencia", + "clasificPublico": "7.8/10", + "tiempoDuracion": "102 minutos", + }, + "extraInfo": { + "curiosidades": "'Big Hero 6' está basada en el cómic de Marvel del mismo nombre, pero la trama y los personajes fueron adaptados para tener un enfoque más familiar y emocionalmente profundo" + } + }, + { + "id": "planeta-tesoro", + "name": "El Planeta del Tesoro", + "shortDescription": "Una aventura espacial llena de acción en busca de un legendario tesoro intergaláctico.", + "description": "En 'El Planeta del Tesoro', Jim Hawkins, un joven audaz y aventurero, descubre un mapa que lo lleva a una búsqueda épica en el espacio por el tesoro del legendario pirata Nathan Flint. A bordo de una nave espacial liderada por el enigmático Capitán Amelia y el cínico cyborg John Silver, Jim enfrenta peligros intergalácticos y aprende lecciones sobre coraje, lealtad y el verdadero significado de la amistad. La película, con su impresionante animación y emocionante trama, transporta a los espectadores a un universo vibrante lleno de intrigas y descubrimientos", + "imageUrl": "https://es.web.img2.acsta.net/pictures/14/04/14/12/53/368430.jpg", + "facts": { + "estreno": "2002", + "generoPelicula": "Aventura, Ciencia ficción", + "clasificacionPelicula": "Aventura", + "clasificPublico": "7.2/10", + "tiempoDuracion": "95 minutos", + }, + "extraInfo": { + "curiosidades": "'El Planeta del Tesoro' es una adaptación animada del clásico literario 'La isla del tesoro' de Robert Louis Stevenson, ambientada en un entorno futurista y espacial. " + } + }, + { + "id": "mundo-jack", + "name": "El Extraño Mundo de Jack", + "shortDescription": "Una película animada que fusiona el encanto de Halloween con la magia de la Navidad.", + "description": "El Extraño Mundo de Jack cuenta la historia de Jack Skellington, el Rey de Halloween, quien se cansa de celebrar siempre la misma fiesta cada año. Cuando descubre accidentalmente la Ciudad de la Navidad, se obsesiona con traer el espíritu navideño a su oscuro reino de Halloween. Sin embargo, sus intentos de recrear la Navidad llevan a resultados cómicos y desastrosos. A través de la historia de Jack, la película explora temas de autodescubrimiento, aceptación y la importancia de ser fiel a uno mismo.", + "imageUrl": "https://static.wixstatic.com/media/51d250_0469ccba361b4111bf43aab68e012386~mv2.jpg/v1/fill/w_800,h_1200,al_c,q_85,enc_auto/51d250_0469ccba361b4111bf43aab68e012386~mv2.jpg", + "facts": { + "estreno": "1993", + "generoPelicula": "Fantasía, Musical", + "clasificacionPelicula": "Autenticidad", + "clasificPublico": "8/10", + "tiempoDuracion": "76 minutos", + }, + "extraInfo": { + "curiosidades": "'El Extraño Mundo de Jack' fue inicialmente concebida por Tim Burton como un poema en los años 80, antes de ser adaptada en una película animada. Aunque a menudo se asocia con Tim Burton como director, en realidad fue dirigida por Henry Selick, quien también trabajó en 'Coraline'." + } + }, + { + "id": "tarzan-1999", + "name": "Tarzán", + "shortDescription": "Una emocionante aventura animada sobre un niño criado por gorilas en la jungla africana.", + "description": "Un niño que es adoptado por una familia de gorilas después de la muerte de sus padres en un naufragio. A medida que crece, Tarzán desarrolla habilidades extraordinarias y se adapta a la vida en la selva. Su vida cambia cuando conoce a Jane, una exploradora y científica, y se enfrenta a la amenaza de los cazadores furtivos que buscan explotar la naturaleza. La película, dirigida por Chris Buck y Kevin Lima, destaca por su animación impresionante, la icónica banda sonora de Phil Collins y su mensaje sobre la importancia del respeto hacia la naturaleza y la diversidad cultural.", + "imageUrl": "https://es.web.img3.acsta.net/pictures/14/03/17/11/47/596263.jpg", + "facts": { + "estreno": "1999", + "generoPelicula": "Aventura, Drama", + "clasificacionPelicula": "Identidad", + "clasificPublico": "7.3/10", + "tiempoDuracion": "88 minutos", + }, + "extraInfo": { + "curiosidades": "'Tarzan' fue el primer largometraje animado de Disney en utilizar tecnología digital para pintar los fondos. La película ganó el Premio Óscar a la Mejor Canción Original por 'You'll Be in My Heart' de Phil Collins, que se convirtió en un éxito internacional." + } + }, + + ]; \ No newline at end of file diff --git a/test/datafuntions.spec.js b/test/datafuntions.spec.js index e69de29b..c8395ce4 100644 --- a/test/datafuntions.spec.js +++ b/test/datafuntions.spec.js @@ -0,0 +1,49 @@ +import { filterData, sortData, computeStats } from '../src/lib/dataFunctions.js'; +import { data as fakeData } from '../test/data.js'; + +describe('test unitarios orden', () => { + + it('test unitarios orden asc', () => { + const dataResultado = sortData(fakeData,"name","Asc") + expect(dataResultado[0].name).toBe('Atlantis: El Imperio Perdido'); + }); + + it('test unitarios orden desc', () => { + const dataResultado = sortData(fakeData,"name","Desc") + expect(dataResultado[0].name).toBe('Wall-e'); + }); + +}); + +describe('test unitario filtro', () => { + + it('test unitario filtro época 1990', () => { + const dataFiltro90 = filterData(fakeData,"estreno", "1990") + expect(dataFiltro90.length).toBe(5); + }); + + it('test unitario filtro época 2000', () => { + const dataFiltro00 = filterData(fakeData,"estreno", "2000") + expect(dataFiltro00.length).toBe(8); + }); + + it('test unitario filtro época 2010', () => { + const dataFiltro10 = filterData(fakeData,"estreno", "2010") + expect(dataFiltro10.length).toBe(7); + }); + + it('test unitario filtro época 2020', () => { + const dataFiltro20 = filterData(fakeData,"estreno", "2020") + expect(dataFiltro20.length).toBe(4); + }); +}); + + +describe('test unitario promedio duración', () => { + + it('test unitario promedio', () => { + const resultado = computeStats(fakeData) + expect(resultado).toBe(96.5); + }); + +}); \ No newline at end of file From 1cbba6bd081157ec25e6b53f48d298f887f40997 Mon Sep 17 00:00:00 2001 From: CamilaCarrenoV Date: Fri, 16 Aug 2024 17:28:41 -0400 Subject: [PATCH 10/33] cambios para visualizar las tarjetas --- src/Components/Card.js | 3 ++- src/views/home.js | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/Components/Card.js b/src/Components/Card.js index f8f045b4..07527c77 100644 --- a/src/Components/Card.js +++ b/src/Components/Card.js @@ -1,6 +1,7 @@ import { navigateTo } from "../router.js"; -export const Card = (itemn) => { +export const card = (item) => { + const liElement = document.createElement('li'); liElement.classList.add("cardli"); liElement.setAttribute("itemscope",""); liElement.setAttribute("itemtype", ""); diff --git a/src/views/home.js b/src/views/home.js index 61795394..4bf3a5aa 100644 --- a/src/views/home.js +++ b/src/views/home.js @@ -1,14 +1,15 @@ import { data } from '../data/dataset.js'; import { filterData } from '../lib/dataFunctions.js'; +import { card } from '../Components/card.js'; export const Home = () => { const el = document.createElement("h1"); el.innerHTML = "Dreamland"; - const renderItems = (data) => { + const card = (data) => { const ulElement = document.createElement('ul'); data.forEach(item => - ulElement.appendChild(Card(item)) + ulElement.appendChild(createCard(item)) ); return ulElement; }; From 271437ab503cfaa7d7619516c147ee7a0c75c500 Mon Sep 17 00:00:00 2001 From: danimar-g Date: Mon, 19 Aug 2024 11:19:59 -0400 Subject: [PATCH 11/33] visualizacion de tarjetas --- src/views/home.js | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/src/views/home.js b/src/views/home.js index 4bf3a5aa..e5627e5d 100644 --- a/src/views/home.js +++ b/src/views/home.js @@ -1,20 +1,26 @@ -import { data } from '../data/dataset.js'; +import data from '../data/dataset.js'; import { filterData } from '../lib/dataFunctions.js'; -import { card } from '../Components/card.js'; +import { card } from '../Components/Card.js'; export const Home = () => { const el = document.createElement("h1"); el.innerHTML = "Dreamland"; - const card = (data) => { + const div = document.createElement('div'); + div.appendChild(el) + + const Card = (data) => { const ulElement = document.createElement('ul'); - data.forEach(item => - ulElement.appendChild(createCard(item)) - ); + data.forEach(item => { + const li = document.createElement('li') + li.innerHTML = item.id + ulElement.appendChild(li)} + + ); return ulElement; }; - - return el; + div.appendChild(Card(data)) + return div; } From 4c35c44b3b7eaa1f590aaf5636ca0a77e4dad136 Mon Sep 17 00:00:00 2001 From: CamilaCarrenoV Date: Mon, 19 Aug 2024 19:18:24 -0400 Subject: [PATCH 12/33] seguimos intentando visualizar las tarjetas --- src/index.js | 2 +- src/style.css | 9 ++++----- src/views/home.js | 1 + src/views/view.js | 4 ---- 4 files changed, 6 insertions(+), 10 deletions(-) delete mode 100644 src/views/view.js diff --git a/src/index.js b/src/index.js index 99ead5a0..93f738a2 100644 --- a/src/index.js +++ b/src/index.js @@ -5,7 +5,7 @@ import { setRootEl, setRoutes, onURLChange } from './router.js'; // Define your routes and their associated views const routes = { '/': Home, - // ... + }; // Assign the routes diff --git a/src/style.css b/src/style.css index 39b12737..e043b877 100644 --- a/src/style.css +++ b/src/style.css @@ -8,17 +8,16 @@ font-style: normal; font-size: 140px; text-align: center; - color: #ffd034; - text-shadow: 4px 4px 0 #fcf0c6; + color: #ffffff; margin-top: 75px; margin-bottom: 75px; } body { - background-image: url("https://wallpapers-clan.com/wp-content/uploads/2022/09/disney-castle-blue-wallpaper-2-scaled.jpg"); - image-rendering: center; + background: rgb(0,78,203); + background: linear-gradient(180deg, rgba(0,78,203,1) 0%, rgba(0,78,203,1) 50%, rgba(166,224,247,1) 100%); font-family: "Montserrat Alternates", sans-serif; - color: #ffd034; + } h2 { diff --git a/src/views/home.js b/src/views/home.js index e5627e5d..6f65ff4c 100644 --- a/src/views/home.js +++ b/src/views/home.js @@ -11,6 +11,7 @@ export const Home = () => { const Card = (data) => { const ulElement = document.createElement('ul'); + data.forEach(item => { const li = document.createElement('li') li.innerHTML = item.id diff --git a/src/views/view.js b/src/views/view.js deleted file mode 100644 index 732945d2..00000000 --- a/src/views/view.js +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file From b908e17fb7e728c9c1ca8eee929e753d6b4da597 Mon Sep 17 00:00:00 2001 From: danimar-g Date: Tue, 20 Aug 2024 12:10:28 -0400 Subject: [PATCH 13/33] se ven las cards --- src/Components/Card.js | 16 ++++++++-------- src/views/home.js | 10 +++++----- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/Components/Card.js b/src/Components/Card.js index 07527c77..96a56adc 100644 --- a/src/Components/Card.js +++ b/src/Components/Card.js @@ -7,18 +7,18 @@ export const card = (item) => { liElement.setAttribute("itemtype", ""); liElement.setAttribute("data-id", item.id); - li.innerHTML = ` + liElement.innerHTML = `
-

${pelicula.name}

+

${item.name}

-
${pelicula.id}
+
${item.id}
-
${pelicula.shortDescription}
+
${item.shortDescription}
-

Año: ${pelicula.facts.estreno}

-

Género: ${pelicula.facts.generoPelicula}

-

Puntuación en IMDb: ${pelicula.facts.clasificPublico}

-

Duración: ${pelicula.facts.tiempoDuracion}

+

Año: ${item.facts.estreno}

+

Género: ${item.facts.generoPelicula}

+

Puntuación en IMDb: ${item.facts.clasificPublico}

+

Duración: ${item.facts.tiempoDuracion}

diff --git a/src/views/home.js b/src/views/home.js index 6f65ff4c..d417b2e0 100644 --- a/src/views/home.js +++ b/src/views/home.js @@ -9,18 +9,18 @@ export const Home = () => { const div = document.createElement('div'); div.appendChild(el) - const Card = (data) => { + const showCard = (data) => { const ulElement = document.createElement('ul'); data.forEach(item => { - const li = document.createElement('li') - li.innerHTML = item.id - ulElement.appendChild(li)} + /*const li = document.createElement('li') + li.innerHTML = item.id */ + ulElement.appendChild(card(item))} ); return ulElement; }; - div.appendChild(Card(data)) + div.appendChild(showCard(data)) return div; } From 2673c578ea87f9e546e0b04680bc3e2fadc55b93 Mon Sep 17 00:00:00 2001 From: CamilaCarrenoV Date: Tue, 20 Aug 2024 12:15:00 -0400 Subject: [PATCH 14/33] cambios para visualizar tarjetas --- src/Components/Card.js | 16 ++++++++-------- src/views/home.js | 15 +++++++-------- 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/src/Components/Card.js b/src/Components/Card.js index 07527c77..96a56adc 100644 --- a/src/Components/Card.js +++ b/src/Components/Card.js @@ -7,18 +7,18 @@ export const card = (item) => { liElement.setAttribute("itemtype", ""); liElement.setAttribute("data-id", item.id); - li.innerHTML = ` + liElement.innerHTML = `
-

${pelicula.name}

+

${item.name}

-
${pelicula.id}
+
${item.id}
-
${pelicula.shortDescription}
+
${item.shortDescription}
-

Año: ${pelicula.facts.estreno}

-

Género: ${pelicula.facts.generoPelicula}

-

Puntuación en IMDb: ${pelicula.facts.clasificPublico}

-

Duración: ${pelicula.facts.tiempoDuracion}

+

Año: ${item.facts.estreno}

+

Género: ${item.facts.generoPelicula}

+

Puntuación en IMDb: ${item.facts.clasificPublico}

+

Duración: ${item.facts.tiempoDuracion}

diff --git a/src/views/home.js b/src/views/home.js index 6f65ff4c..2dac2ac8 100644 --- a/src/views/home.js +++ b/src/views/home.js @@ -8,19 +8,18 @@ export const Home = () => { const div = document.createElement('div'); div.appendChild(el) - - const Card = (data) => { - const ulElement = document.createElement('ul'); - + const ulElement = document.createElement('ul'); + const showCard = (data) => { data.forEach(item => { - const li = document.createElement('li') - li.innerHTML = item.id - ulElement.appendChild(li)} + + //const li = document.createElement('li') + //li.innerHTML = item.id + ulElement.appendChild(card)} ); return ulElement; }; - div.appendChild(Card(data)) + div.appendChild(showCard(data(item))) return div; } From 631848dc4b80914788070fbe9346090475b6d3d9 Mon Sep 17 00:00:00 2001 From: CamilaCarrenoV Date: Tue, 20 Aug 2024 18:33:34 -0400 Subject: [PATCH 15/33] =?UTF-8?q?visualizaci=C3=B3n=20tarjetas=20y=20comen?= =?UTF-8?q?zando=20con=20los=20filtros?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Components/Card.js | 6 ++--- src/Components/filtroyorden.js | 46 +++++++++++++++++++++++++++++++++ src/assets/DisneyFont.ttf | Bin 0 -> 28896 bytes src/index.html | 1 + src/style.css | 14 +++++----- src/views/home.js | 37 +++++++++++++++++++++----- 6 files changed, 88 insertions(+), 16 deletions(-) create mode 100644 src/Components/filtroyorden.js create mode 100644 src/assets/DisneyFont.ttf diff --git a/src/Components/Card.js b/src/Components/Card.js index 96a56adc..464359f1 100644 --- a/src/Components/Card.js +++ b/src/Components/Card.js @@ -2,7 +2,7 @@ import { navigateTo } from "../router.js"; export const card = (item) => { const liElement = document.createElement('li'); - liElement.classList.add("cardli"); + liElement.classList.add("tarjeta"); liElement.setAttribute("itemscope",""); liElement.setAttribute("itemtype", ""); liElement.setAttribute("data-id", item.id); @@ -25,9 +25,9 @@ export const card = (item) => {
`; - liElement.addEventListener('click', () => { + /*( liElement.addEventListener('click', () => { navigateTo('/chatIndividual', {id: item.id}); - }); + });)*/ return liElement; }; diff --git a/src/Components/filtroyorden.js b/src/Components/filtroyorden.js new file mode 100644 index 00000000..f881984d --- /dev/null +++ b/src/Components/filtroyorden.js @@ -0,0 +1,46 @@ +import { filterData, sortData } from "../lib/dataFunctions"; + +const selectoresEpoca = document.querySelector("#epoca"); +const selectoresOrden = document.querySelector("#nombre"); + + +selectoresEpoca.addEventListener("change", (event) => { + const valor = event.target.value; + let dataFiltrada; + if (valor === "0") { + dataFiltrada = data; + } else { + dataFiltrada = filterData(data, "estreno", valor) + } + + const valorOrden = document.getElementById("nombre").value; + if (valorOrden !== "orden") { + dataFiltrada = sortData(dataFiltrada, "name", valorOrden); + } + + + const listaFiltrada = renderItems(dataFiltrada); + elementos.innerHTML = ""; + elementos.appendChild(listaFiltrada); + + }); + + selectoresOrden.addEventListener("change", (e) => { + const value = e.target.value; + let dataOrdenada; + if (value === "orden") { + dataOrdenada = data; + } else { + dataOrdenada = sortData(data, "name", value); + } + + const valorFiltro = document.getElementById("epoca").value; + if (valorFiltro !== "0") { + dataOrdenada = filterData(dataOrdenada, "estreno", valorFiltro); + } + + const listaOrdenada = renderItems(dataOrdenada); + elementos.innerHTML = ""; + elementos.appendChild(listaOrdenada); + }); + \ No newline at end of file diff --git a/src/assets/DisneyFont.ttf b/src/assets/DisneyFont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..5c74473f3bba6533edc311e1cb6afcd994b32c43 GIT binary patch literal 28896 zcmdS>cYIXU_6Cgaea`eb(|hVnrlt2n2uTJ)?}UyJs`MtI_l{BoM2d6~P!JITu@ICd zMc^tbDk>r(V8MpMg=A*W`<#>D{r*1pet!SGf4m1~<+M3x@4ePuW;f zb?(&l@>@SmBxJk_XRBIu?cVIu-##CS3VVakTFy5z5Paj5cPNX3>g08z#&&V{AR?x z>3BimaGWp?6Nch=2#$Tj$4s31*+=%ygm7p-T{U{#;DOiFXOjsT(;U}795Zn0cz&{U z?P(ml#||9xA3x#A@$FyljJ7#0;&><##|j_6 zHm#<=p~-z>F_PV57o-36+v#@3iFJQO5-qcYYdE7IT*C!?hx;wsgQ$(0>i!5DEwiL2 zHC&Yb43W+ZAxnu|I_8Lg@1rH$T{^k`j511B;i`5c|6myjj@ z_jvrY3DqP-+-|GXh6LdncLUeOz7YC1SA#!p!ehX8if0r;{YT!KEKt?Z=8CJNN>fD^ zXuZ+9`WDf!j8VP9O0MAiaoIjnBVL#NN*1US$uNyTZ1T>eQZt8?YBET%W;_1I;rku& zS0F<*V~Go&D%mBnSw4@P$9Jcws&U^O(h(z8rPJ5_p-Uh#p(gsZkV1+D6Ks3<^(Ge}Eo(P}@q60Nb)I{{rFfkJYsD&6ot;7Us zlc=4TvF{+3XdQ79E2xXuKw~5tOYGQ>BaUb-i6>6b1mXfsl&G7;VBbSxL6b;a^bzrr zcu=22{UibV0g?zBB<|=#l1x0HDH2U3N!U*#UeI*n1I-}*=)Xy(M6*Z$``IK2nnRL7 zb4dzl9!ZTpAo&t4AZgeyB?OSBCsiQXe^NfXd^q!hG0DFf{w z(T=1%`X}i`LZF>VQ_wD?8EBSzlyX6?N2&He*19Yi`|e=z9`I)roqeUem0e}!i33OY=p z!$~*nk09MaN0J`VyJQsU2|8M$V@NOTk0rf9$B{muQ?16@z1M}Ht2$PCaI$V||U65T{*VSh83 z9lc4mkU5}R$z0HF65USbVgE%k9~3$;`aOAxECk&t(OqN__IH!Tpf8gp(HrCy@-*lk ziS8xOVE-jy++<6FMz&JHi8}}n?O&H&7dbGdWvj` zenU=^t)L%}ZJ=k!cF?mDJx5-|{&}(^`Zf8GyaalI>;%0?c7a}!=)cJB=vU+;@-pbh zk68)6y#r|jH)#z1nh3o_UoV*75g+#w3`>}tOydM3Md_@j`eofv0{YIkK z$U*FXOAdivCx@e7knhNwpf@D?JvoB?o8&FfAIRI$&&e(F4(M%(-XZT||3`8Z^e0jS z`ZGBey+VGG=w0$2_J1YsgZ@U2gZ@rVL_Z^cNc2x~68rbaDbT;jY0$sP2cY*sKP3;y z8PI=|v!D;jInYPsJZP;%>&S=EPe_kGgJa%Mw39nQr@g}8Ge2-Gqu*noEr3TN}XjCetTBA}bWoR58robPb zSMX}_KrS9(Pi!8j24BHxLbO^1-Xl}sc^W*Gm-7mxtiB6)kJueGHkC@PmMPRKEuOE{ z;>Bt$&Y=-_l=L1MuN2=Sz6sw}<2-IcYqj_a{ty^u1wn6>a+OMpVUS^0CHtofc#leh zO|8~wWJ--%&}h|yfcI(yoWpz2Xr&T=@E(~)JWz;7VrOv^t_o^F9BV>!I;Hd;jJSZO z%FrB@Oszs|v7w(BA*~i~(rV>Oty-tWM~C-nby{#%Ei9RZtGs}tlZoz@`WV-U0&9f%f;5JyxL z4Y^D$*NIP;1Vx9=YSARM+MqQGDh(VMqe*%X*sIlp8FHmut&wXrVi)ipg;J%}VG{(s zPJ!MSbb77Pi1+G^Izg+zNTTbIDZED`*GrsKqs4lh$4zLfQ84MiQ$kE;HTnbT(+Y2!L%Lai5!dV^px;k^cv9-M{jiQUGN6>^Q-fTu$s6&kGp&BQ3+ zs!1^GATx+ytQvw*)u;rW39X0dYXyZMpaiN)VI^ozg5GXato`XU2I0_^1ivTBW^<%R2rSpVzpY#W~)`Dvzi=Mo5|_0m`yg9)nrm@ z&@(hit=FrR29*tr)C)K=*f0QSo!+2#np_sh3?Z>`dguhTK`>jK7$lXTGMLn6lNq;} z&5(7y*>1PnY*vR|V{lkv>`qH;jLl|o#M!MDjTX((8x0zRQLQwo9b(&b2DI3L0YK{v zCS#l>&IVo*5}#mzPS6+yi#0~A#e38yv&LeU{#n%Ej>X}0I_!3*Q)6`6;+!s9e4O2G zbtO1$HmzVb8SyZ!(WF+H)h?qE>@#XjW*3@?wxP8NwgiXKY(S{wF+wM3O?sO>UL)w$ zdX3qtwOOTqHpsfk784WWaynyUwB}exVoaRFo#=AfV?8krhoHlNnk;6Fg+^`F#Nohf zFr&qBR*S{qu$!$GkHh0Ki@}U1$t1qVthYJhH99>+-(u6+Z5S$>-7dbz9vd4Q<8sBt z3g$ScJ2u|wal2fOxTIL8Q_zER;(II>ZT)-97Nc3P+Tv^$3r4|WwIn%{V$3!ZV%dO& z==Flt=#23Q=(JI5a|lkS%i+X$X(7MPgoK3nxVXdwoi#Dmm*9@^`{Ltb+<}DHSiKR= zvDj>Sn@!L-1UH7tX13|=4!6^e=Ec|?_CRbP-s-dvlA3NKMx)+gj*a*0&=|AM8KaMj zjl*rRu{uaWTvAe!$L;ne864h(lq7#bYKq$(?@RM0CK${ZP;k!Zbn1l|ozLlTIIRw& zE5;Y=a-nt37*|?Cy2lY~BP281K};rt%bMU$(VMI~t3D>)kPx33pAesrpclL24+Q*P zZ!lnV1w9#oWKU*>&+86m1w0;;B`zigoHND58gy}nWH2(;9%G7)PmYg`^?2Mdaj{vR zY@aJ07Bx5DMJyImtj+DsFj{O7{rE(a$BiB&dOQY5fhRd7B{>jCO)kllErKGB#K7YFvmSrQV{-0|@~pBJso^W_KQ+%A9|jbe$_YL0h! z1KB21in`ndz2g+v?6qZIqRl(zsDZdU9@)?9^17)9Z03B)RRLB#Y5! z&K1WX&TaSla{Wn3si`R*Us6eGlT5cio{)-`NyO!{`{UEHn%G?N)_7YW)t;V~k(!p8 zo^C~V(hG}<3i5J`i=6&O*-eW|vMZYA=VcbRD9Xup#iaxS;G8QEw3}0GjRSsP(Cv36 zr#4Ot26J+<0x7}f*)0qFX-R~%>lh$$ajq11PJV?0jd45DvRpaYxmnp+IXR9PcXCdX z($Xfyjmk@7QpyY4lr}49*QRlCeyBrPQDK}rBP}(Uo*I{y?zCk(L+C=9FEuVBE0mp{ zURYR=mYLq6uwzL|b^x9gfUWuuHx`k!xW(ZN_UMO1LHA2%K54ij9Y}=!gAH;2Ir%^L z>YvF2Qj-G_QX)QABQ6&=Eh2UuVsQgva1&y03u0~?vBTeUBEF6xv1kbtBR&a;rQL|3 zlMp-mh#&EC5OHz}Nkwd&j+i);WFZdDLHwJCxVHfDZV}?#V$vAj1!jTRmLRe%Lqr=w zB-;!TY;#1eEfKM{CT$Rb>Xewb^I^65ZeRo4{rWv6UVL}V)Z8wm;ZmEjU)s|2yUDP9HxirW{k6BF*wN$wpL&2+7^R(zbd%XpoRN;B zjPw&3=?7X&K0v)?2Z-?i{pF;`j`rl2Ix>O$d?+gFc&EDu^MtZsU ziDabz&&y(O|Lej(!y^vP|GfSyhA+~)e#{67wFtFuDQ{6;AuB7Fm*temvUB9w=~=Qg zeX2~Smy?ng=gQ~Im?fJ&dWvk+X!)oPBV_G6$bmdOW|m6P26|w{+x*-`@pdvfHO5(< zCT)-ZrlrL=A(#qiAwA^21L+<~j2w(E0ClI`9Dyg&J}g=*4y*Dr7TKkb^nR^eH+9{Ta~EqxQ5l zdLXv{lGO52Xc%Z4WnaxJnA2(!7qYdda*eV*uhw$P7de&YMFr7t%G4Z^nr-ozJn(rz zcPid~)Vfk(eRNmz%KcuNS1Rv^H8La#fN5FzX@UU0IEg3Zl2IVcMuQR-f}?UuWIW+V z309&^%OT}y+0<>JURp-;EV*`@RZqQ1nY17u#~h&@(%FM!>~iw!yZt*4^muJ@!Oj^o z549BpR{Y4IwBI@U;L2~y%6C+E-8X&6rtXjhjy6}$Q&tEbSf2pi?TE7hw?`1djgc93 ziE**~c&Aq<^`tzjJS&^#CQzG|lX=Uyg8YWp%Ee}IN^cojA)YGClb@XQdcQTScBj2C zX?Mxsm8Ic#zM1;rmt)f^UM+idx!_rKW$0e^{s+FQF`*7OhtKV`qLcs6H*49!6`N+3 zHoZD{!sgAQ{^Up%e_hd3(*qW*gmekD&CkhH%BZ3+og>9Qu7GB#5DFC~aSk&VW9Pgy zOJ^jUQm^K8N{%!tst3++}&6FUcAp~E``?>&2_cHMg`0|AY!^r}dg z)Zb8BTdP*k&Z+4#w(dRL!9Hl8cACxT9Hjbg9UVqILPfcTJ*vQMHLA$LS|o(zWC6=j z#|R5xuUo-3_k@ia8S2qi&yila9I5PN?IYnsA0 zY7MoGL>~3J6Kqz6Vq5P@aYO^OxsT(wc5a0IOiFU;qSmE^SEgb(MDB|J#SJ26&$Hzf zpuvX#C}$(tVtW>WA$6uks$wmVGu>6A0&n|(zE7E_)n zNbPcyp4uq(72c#kP;L@MgbVU#g_XzFU!Zw=S9O^@DJAHt7L>F%_599Ov*mpcE3})> z^R(b+_Ws=_i^p7gHX(C5`<&hQK1_!mJ3MC&Q^{#X@>cE>>;oN;N(s+urZ{Vr9ujYCD&)YJz%xiom}E-IXe(a^Y3YQM*ru2x?G%Uzh>emC zGM;Z=fRqU(ZMx|7GDs`ey<>*UZj+gFIl55O9WG)se63}f6=2+oj%L!>!I6czZbLn@ zQd6^Oo{c)po?Mw(nvO{#ABw!t3rbNTh(~5$9wuvEuCK6&Ch2KBwc7J?%V?1)Kj8K2 zIb{OojYYhoG>KOVr3=cuagmuFFVL2UY4DZ9?EJBd?AL{|F06Pbw{O|vHxD0TU%v7e zZ9k^}f_GD&p@CnE>z?e>)mqXoJH1WplezrKtX*ph@}0Jrw?%<)>GYr z;D2<=PqS{bSJxe5Z=U{?K5?O?zizeS@SNv5ou}>IIZivBshIxK)po3E!L@5w-v7|t z#=(zhKT&XWY%H5LIm7jc*K5=`|!Ipa$ZFn+w`uc?7XX$48pv@Pnd}9Wc(aj|Te_q2r zdocdB7k=+tTdU}t(}aEdJNseHYitVp>l>OzduTVcy-(*~WVT&j?)d$Oq9dmwy|kTX zvEM#=?r67~Th5HG-6oYDm@_UiG19Ni7n{rP>@H;$B_6N;`CTucpZQW#%iNsi?GoQx z-2V_A9{qz3zwxT-=iRH%)8M+=Jqe$_wwtk6yKms7podbuaxMR!V1!+;gtY%L36c%^ z-*$j2ZP5C%HXcdq3&sXTubMf!y#1}=b9=7n1fEfHMcGSs6?xxek{a@Qpy(mX)EjH& z&Ab6P9VLmB_`R_jo+t(gF3IkR+^{?HL{p-fL)&nXOgn!-|%g z+x73UIipvTfsN6=UCy= zjWEHSctj)O5p86kz{3^S8w1YMK8^K&5m*vPQ^;vhF^*G-mZ9ylXCi;WB&_S!OJ@|? z6pC_9Ne#QlkLE`sE;NS#l{Q%9`q%xp87|DDzf9U+^^eWHFoYky^0Q(8*UHX+LwatN zqN%){%82;W8q)a)ycUg;>r3Q1@zEG%Xa-NA)NXmZgzPw7-O?U1*(Q~-=+O2Sr+Vop z?7zO*#noKf*>6jq+BvVj zfoBYh&QnziO%V+nLn=8Dddq-giVhBh3#y4`azU#2&He0Q?osoSzGZzBON6F*>vnN} zALz2XB2U{@^bc&&uT>2GiWzaSHxz4eK_SP*0nO%=gt{Gci_ERr;?Rqp7@iEJ=~hvb zks~sX+ebK)(M&uvNydpYS_VaFF349=k8BWib8gyqElfuj_BUu-_S=F-^lv(VJ$Q@# zycRCmb9CF%52#}qI~w_f?H5#RMlXm|l!b+rz#*@&jwb zc3t=vO>qrlZ{H-K@{txYS#EXuQ0a+Jh@Z~TRbB*c-naZXnt69=5(AdF3sBu2; zWqWu{=T_@-+tK(7`?c5a&l1>=mWpdllwYUr&n+5UHLqTFO5xFW*1ij@AQ(zaP;)LV ztw8aHPV@Bs4RYj?pJ;)O4~eQ~!_BClga_>qlVyLgU3$*9^2dU#5v7c4ZJE~gnIE&3^aj9vO#o7 z&9umxDyn~MNrmxh6%TVT+!d&oQ~0IgJT0=p@WRvv6`azS2gwDGF>&3v>Trv*n5*X~ z4h|-geKAB_upf0 zo!PR0eKm+PYVVAiJ+{Y$qxYX{S|)49YFi9?2~1u2FZL@-WxvuilZ*d_K7a2dO@1-w z8HM}|+AQ+%YjtPg9Qv0MN>pbiKsP1}_KehIJCO@Ay3QqNOwgb*uc3iuVnheX3X@$0 zH^E$BBVfOS@-*q z6MJbTt(q8Ro!IB6G4fl;&2D+rDRhg`blcR4#qu15lv|j^}j18GwHbG6S zBBx}uN^PvyT8JRBDco6`)ozBBhW-d}1z?WfBRZOeF|^39?zSM(|CD!V9{c;DWNdTSSw<-v_4=;v0piEEfh<&qY$JIc7cTrmcMRTRYxhC(zQCWJh`qD;}{ z7PW>$bP5S1^B*5k2|v5A$jhVCaQ|>g)HB2vqQpSD(R9yHdUI4*PXp4!5p?@k}a?y^U_VvoI9L&traCdo7A ztGYti30sm8@|aR#VU_W5E|oey771y&&PwAbSt!@(*IGRdc2CtE{ayMqT?J#6MBAee z9O_oS=ATj=2A<+1i6JMD6phYmk=z7SuTrCq8zHMVyYLYt?Wyp(MS~$BEMn|hVD!+3 zT@OzDgdkvkZI1Gno#ou(^(--T)U%hl_*YOQ>7G8;Wo{ya6w@UBy zl7tZC1Jw_9I835*3$$Vc|JcrpL)GBWir%X!HvzMUBT5Njfrufx=9<0p(z)k1UVrC! z%lZ8acCp_#YZ}Eh9@nV-o`s6TS6!9Q{=JmXKUc|*~I>55nhue7{D&8$)Jb(M^sM;{9_dh@3p~kwP3fw6&%tjSoe$w zY{)jXZJ*ZQ6V|MIuK~M=9D4T586I#(ecy|tcTj|J3b~0Uq#%^pir6(!>E1ZMK`m+a zOk07d*(dO3O_EMcWFvEnb(t|-KUInjHoV?bgM2`bn7raFi=k*nCL~ClP9kK}FklTq z7KTg&rRs4on6oW(J3W7v_4|B-wLEdsp94pqst&H1R4Ei{^NY?8Eqig&_w?Dn`)}=g z?8Fn>`kXzeJ;i3TH`qPQnXlMkcBK1vy9RHfRyzHyk-gujZnkvr6j{5croTC$W?l_V z-ud9q8N2eQvM8L|fq!9aJJKTc8SRVkh5L}I5HKNoW&4VzyebjUT8>>qdeG)xj&$qT z+KfsHeWi-{6N88`N$chnycy1*CWfPBxPy?UC58O6jgUL&fkEm<*KiuLG$vh)M=>N> zV$3g!i4u5B5(K4)=9&wOBvU67jR%~ZTx5PwSM!f^>%%z7?0Mq1a;$cnky9!R6kuTx z1d*1%%r zr>jp@4z-%9ZtVRcgT>SNU$lLe#=dbM-t}KA*fVV1pMz+A!F4vG?i?LVzY;@c`X`Hpwt<8cHOIV0S*oHw}0z%JGaf_Zr+)AszC@tN_oT6-3MZ-b{Y(Ob8TDhSlDERC& zcS4LsO@wAm%Zl@}Q~h3djKhKoDq|OYnk41r4M3M@ta1eoal9>t7o&MZ@}(3Am0N~E zhI;{PE5`SQB!*gG0>pT;0IEOF0uR|A(9oc)^mT-;FVV!0U9FR599e(jxxTwTVY}E5 zz0!_w>^1hxDP6)2eY#7QmD96R*fW{RA6#g$d-22)q1ZFS{UhxT8N6P??=_B#yd(5! zdti84^6+j&k+;KpBY(2Z69ubQ(V>0k&HcC}cK3!9BX11VdtwohdNC9nBf_e&>(y6wo4eGYJ1|sX)f)3J@Y7~?_$#>P~ zQ?jW=M}581U0z-;3MkxcE8HB4$qSEFsqiGFi+bN%2&YWLAzqhx1HJ-?oIvvmfs)W9 zxdr+yH=QOhnUDP%9u?ww1ySD{oEFVyAc zD+VvBdAfJXo;?b7ui5=soPOe$G-dw|TJh1)ai`s7$KIx$FH#xR?O4Q#`B#AV(IWzC z;vt<)L&b@9IiKz;ruqVorkBE&=J@oQ0(Yre%PWgT2FU4HWilaR+>=PSsWE0UKf9@@ z0-zK{+az%H(;2!Ej$yrZkhGr&=e0;P5F+l;}U3*P&4t{@ve^f&$BO?oLxRhQ(w-hdA{Au)=j!(#%fc$G);Md zI`+SVVPXG@++>FiK!=pDPnx}Rfc?eV{F}bY{YcN!KHMmJ4f!H2`gQb<_KYwG`R^3W z=OAj{FcxuTkW*zM3U3JYC(;peKf)io2J0+nb)x>U&nCGYZkgCs6-^OsM$m+Dk#Z90 z)T2yNn*4=QTq}AWmk^}Rr~jsjkypY!BUi)6x2uL1X9eW$4T#-u)AEjI+tHGNbUYnP zHSFieL$*(t^9iepY-ZCV`y-9mcfY*V)~^~HmpMEwZc0kY@%QImHQl#(()Q9=dX=`I zQ@GdZ9<{vFzh6562#xUeS*pV06$gce&VQ!W?#zP3;$ZeO0nIjt{#% z_FmKYJ?sR#xy9J+t~Dm#OWB*@TkJ~DyH}cqPxw0=yP^F0eL8BOOfXv8qU=W;qXh&x zXN*xM351;9Ser>F$N;b>QIZPlsH4*ogAM%`;Wklo+szhFzz1`N{~}|h0f52@20Td$ z5!7w~Pq?55F{Anjzxp`4{BOo;PuJ|I%i&gjN-yQKTDIOm5f}A%_jUGa<#gAg0pXM$ z%_ekG)CTF)jl!H&a1Hhhc>dKEsBffUzp>>!&6jL1dpYlib3q?Z>k@~3R54xL(5Zo4dHK9(bZjvX_6rF0+?e80i+a^wkSU zgZ@Q5KO7WFZEM;38}r^@8=Bd1T1Dej!yr@Z0cEmVg-znsDQ$xnpF8)%ja94J50RH5 zf3TX%bUoLBju)=&t3JrK+^`wtFVNgI>p%9^Y{$A&em6XRyR)eP9Kr$=8BZ03Y>q6h zem04b8vGm+Ffkk6CK_x>fDpdJnn+5+quf!|zw;Q&JK$UQZEOjPteLoF`@*ND4_)w9 zF8{UAX8`-TOKqQXUo5nDhH*aj^zFqf7OiLBK7DkeIt$TNuEewA=yhQz=662H3VB5~ z!auN!T0JXGNOIcLX&!*4sYx73ptE8drn;Dslp@K7G&fv)IEQu>r5^adqI;&W86}Lg z6i^nphO4GR73a}ZzCmphK3!Vnm$vp{tTP;oAbjK><2cWWyh1d zFDbv#(Qb*;CbSPv>B)_zgJ>ScJ9;;IRx?s)i<%;L$Zk{X#q2#LK^NyoCXAb=NNgDI zta1@!kEbRNbar8p=zcpCoI>eKp>Qol;2nOs$;jsieV#o2y&fHGbk;Yt2_1TTdP<*0 z1FVUsdpjc^)Ln`+pV3CfQ`tV$TZE?zZFgV4_(so%@~kyK3{v6zXtw6;wn4_O(+8P{ zx?9pMZ_y=O4Lx#xUo*4{7?u7UWFZgH8N3bPt2xPDncV20;75i}h*euOW;L7;FC}oD z`N09V)Ozp(t}{3y4s;A9m^yp`a*kecUMWSiI)+CNf_`yk*<(0I88usi1**fcjsyC| zZKVmX*1eS+avRv?%E+va;bZaLn(Frzhu3eryRyap5wZn6{LaIJmnDKwkFEw~w&GN7~n_lk3SEi@Hq){LrFTc+~sP^PgK;QIN`YR?t_ z+-2a)#Z5HU+FF(y>G?4iqRn=WphNl|A6M1%c+$GAt(VUXq&6yb`y;m^10tXHkJzu*}vjk+;q;3;xi75tVhs{I1*+9^XVly@BoC>v8rtBarE7NN{ z3EY&_fUX1KHahZk9GxL=t&>RxNW{ZL4Jje5xxN^vOkmGmV9E7xdLc5NUePWUdxYUZ<{(${$wWUi>9Of4!tCX)Es)V8+%oF@nfCms-%a)coAlxv?94k04wp@w z)z%hgYSgv$ctGL3R{wj|5%$^9IN4>|hpsK`2#2 zQ*~CIGChe1u*7j1I#w2^0j`LOX}VqGAo-abnH9)+93(Y3s6(dF;IZX zMC2M}#-jIP6rDMbJ6NxReIA9CTG5a;u+LeM?W`Sjvper@r|xlW41+rz-Et4vmnKwk>ozql zC^8DNM^oYGB(mdWGSi_|>TWjLQQqK}+1O#rc*HM*NzYKb7>7|%5=A14lHigeMoCOV zUZxba4U}}MXvE7ix{0}^Dj``D)Kqm!OAb2B_=YBi(02LU%Ip{&G|D{Ey8-(aeObtr z6qw`|sQ}7*MMqW=DH)UpTpBnjNrHs>lvAYZAV_8r76-lzX9zbxhJpe?g}})JT)->l z27u9ug(xaKixUMc<$Y9geM1eAJ?svfd3^gz-4J^=nrB;jjV2Ep(TG3ARzx1LbB9FZ zrcz|9mT(#LAa$dVWB%t)U;L7$&F%jk5(Ww5dtBY$x3t-y5_W(sggf(F>Ycj|?Tp)O z$7gIKaz)E)7EqopxaYgP;z{Loq>nZOalbv7s_2-dzRL6aTNUIEyLtVOuBYcN_>L1$ zedgYFDp6&XAvC>hL|UOyy6?EI z4=`maXvSm7u1#D%2^THYrCxo029vTvpL$rCgKp z6sWWewOfq^6uLMaXXGKcEmApZp=62Eh_x6hO5&kgTObWlN{cc$l1-*sTkyn*uzPYl znQ81`qy^qUtzljyE2CxXvrXtk`sY{dTNa69RlxN=V{^V^pKoue25fwp_5F$VS(z|K zHJ}l@vgvrI)1Ff6h@OdxRopIaL|w(sN0YDabU&M>{5t1UXPHj+K^RNaPShNubW!7a zzcc!G^sIK0@Di}5R-w{#EoaQe91v%_u|iR=ScCo~KDz>WE948X6pHZqR_L!Ku6%F+ zsmk;qH``kLI9{#KF^En*vT~kGXe!CSF-qD}RF(mss0@HaWl}gdcAOHE)J9Q2|H=v8~)}BAUMpw(`b9roM@`N zFC0X2yD?3CpH^LE+PcM&xBjFjs9$&~v-gr+qu)O$^!HaTT?`OOx*+|MUXgf08bIB>F#pBYqR}1YVLHN{ELrBGXK56&_gH z7^6Z18!PI?sgKJTB~^&3vHFM=)e?_$-ChL&>}(_LYhnD#>Dz|>b9$wt~ zM(?_}CXZS_j_o-!ls!24+=MPyGUbZ3beFJm)gAWSLe=;Os{;>Sd5wijI!zv_{-Z0q zu|9{sLEp}4c1+UUR`sW7qen#K8#__?U_{6uagax`K!ZyxCghM=#Lq*BNNUg`nsxX$ zXdzf7jz33ukNVT)V{|nUf20;@pPXHb{oc}MpselA>%&jcw0|)=|Fbdd`Xm0Ju=8{F zT=>ximc@?jq@9^EJbdevCgFQ zBIa8PgghbLE5xgnI&fAk#WR?N_>Y#l#R@RUh?po4ZLnKR;>#o_#T!sTY@ki;4kWG| z2yGDOz^w-sqSH`29sBa!fzQYHbdSC8EL#(~%66~^)?BJM+Kz>cUa?|8&AN#bQMF{FM&bCYEWCKgq8q99xY$vXBg?|Cge!xkKXuJ-(`wWs zS%3Z*_wCdX-4Z?Wr^6qHk3U~d=b~u%x83j-C#Fm(7W<0alIa=51bHMUNB~eDnumYr za*>!iz%ZDexdg2FqkRJ&75u?Yd=tLimK9G}^cj1befyvc8e<4s(CsK!^`19hr{xB> z;VyUNV;xmnXBuSjIW02zurTM3h&FsYvN2RT;;UwHeby?M)>Z7Dz9YZq+&B0fSyz7B zP)^`7GE2ukyrDeuP#vNsPRVimGurl9J8@QbiMKXjTVeb*MlMMYxzp9YShWdWxR8^P zo|^1)C%9}_ektRKu@fqx>uX^|E~Bd=4$Xmqu!xXGKe{ePL2wX|1V{g{-T?xNn>@&@ zsUWWMUUTBxEn7OO<+k}r&ZcHrd;uIA+MjOaEX${}&pu;=`d5F)?)RT{ZQh2ugMQg9 z%7QF)lB`Ndd9hzs-uk~je6A(ssC#}v*R`3ZFWcA zAs=vX+^V1CKgzf-xl3Ys5qK)%I6DL=(Hp;lW|@S+++c^k?weMNGyU?JcImkQvnP(>OoL=K0O zHCY%?zWXTa`+rgIb=q|}9a4041p94Z-oxkpiUYNW*nM{V^Q9Zq)7uscb1dcl`$2!j z*oy@@BUzVQJ>xXYpOdim;e-(F`sK9-9z@@jZ5G}ZR}_V?x>u}J<;Zxs!5|5hC{P+y zKOsH~5a>10{VI|zG47n)srSGd=eI2G=P~Os;irEmyq$-NfM+9Nb_}^yGuqK;>Otgd zo72;DD2;`Cw3`+KZ4k%oM)W;-qOb{TnXDl}g?GY_n7|AAhF4ldR2JTxG6ru(D&PiZ zCtp zJtF2ZLwY`osNr5Jxn86`f0>qzRl|?-m#UTR(;l`IvzE&1D6(tFRbnV?(X*;Ks(Y|i zxzIep%tRL-mj+HDc*lZQY=TD4r z<+gBKMfEF2@kkIUkO=|n0iguMG?9_MNn4i=zx36g&wOQ8$>^{z&-}qQpSeZ5({4wr z_Eob>?DGu~>iTy34R&eA>AduBRcYn%s(Y+7(kcARzpBdIrZ$Zi)5LEd&?&Whss;>X z+qSdcJA`j^W3$+mvwsbn>8z$dpz0ls=ODj(RXv2mkYB6{3#G_tw#qBIfXH>HRv@dx zDPzE(5kdw~bo5$AxGDY^(JPUVMj)%e3Z=>i_}YltkXV(F7o`Y0iIor3EygEyM=lck z@VL1T^f9Ipzb&0sLkHg2!mhI^-;dvPbpDV=Ejw9D+BZEzr=`=G?1VOZ$l#yX833W90 z0pv`~Egw;rV6{S{P&T?`p+>4Q5RDoInb;hulJjMxf`v+F41^mZ6UZD3D%l>F0oIpv zfN>I9TI5BDfQ$kBFic9ZgjXtA@yHgOq)iU?+uncF@hK&i4L3K^X7uLQi%<4~^Z(|P zsAyyNmH_L&PaCUCX8yjb=hps1ULV^2t@O$4)P44Gu61S4jJu`X-h|H^;W?wq}=&e^1ONLbK z+B^Y;c}q@RrYop&*}MHLjhmKq`r5CtBA2C8!)i$KzYvH~j5Lx0sCUW&ide(E%*`*tDrE!LX7iX0Zlj;_S%>A+`S zRd5BjY2}#FZ;ezBVQ1mD{Zcp<;Zxm9R__yvR*`!&17P65U+8PJ#k=eQt6DrzK~+xc z3@V&5LiYMZ&&pQ|SK$9Q4K*Sa_yGXX%|MY+B3I%RONR3_^;t zQ+Sf@w-DLnq=Nr5$s{2ZwTJ{B1*GyAlz!yd#B*Mgn6*c}jD+@jL{zY_Ag@3yh5&rc zcNOQ^A?#pDi2V}X9(a=%h%7n`cXT3Xd zMEqn|?*VJm6HbiyWygVHRrr>(EbXhZKiT-*FJD#+Hng={I~v!|Xf=JthP!jYzi2qp zOEp2QAw^gt+CJ1Yk!Eq79qJaR z2rb3?;*cF5TbkQYnprQfQc(i(6_|CR8bN7{TtqrD0UaVRL}pm3qv9dVNxpy>#)IFs zBn1#0qXJ9(yp}h&Fb); ztL-kV=(m7fi*DV5QnRJE_P(5+`trV+)v<$KQEP%-5+}PV*||aC%}7sNWnT|J#NHm} zayfm)UCT-bzchO2i(Oh$ebT6`i3~+0vA5}QI`Ya-@33D!tYUR+@2^WfIZhQ&POH#Y z)T~DjstzN*$cApp;Ay7PsZ)B?sOUvv#~d%px#%^_z^|JT9^=VDiE*>y#fV%KdCX@B zJqlJEiq7iu5%BJK*cB1@HW@{a&;Orb8ZHG_Yf2t2yw46IN_JGYnn^!hEbN>Te*IzM_>2jkEUCS;>ZgwDFOA~frinj&JN>1ix=-2V zV=1n&Z_JKeny$*o`?$OFIdR=E>MKy+HwE>K0`Va;7pt_25lJindz}W5fhQJ#J<6we z%|FRG^g*h#MVqCvDTF8W<`ND)Dgi|1i7q;q@%D+zJ+s%H0WuS^CXO93w%Wtyf0;hs zf4l9HbM%WRgmYiLoWEoCcUx$$@VMIdmyTlZvRBIdE_v@Wd@Rl4viHPpOh*&Z#_C8S zzg0MoRgG979g0=i#5UTL29(Saw@r&eK`Y_s8~;yySD!PNnwXDO8X{o%*liF|3bB1{ zo4hn>*lSOIF^ejyY1aIo=Cb>vsys65^x=^>vSm6++=S8 zkx%z${gWUNF&60cJfP=5l|2ZEr8OtW`-pk~`cC1^5vK}%PeRlY^?6R<(8i#MIv4tR z!-VFyPTrDLc8i=nN{7=IR@a5CvX@T!wmWn1%PvB@5nk?DPXa{zaPAG9QIH z2g+L4*Srpmek~gWxi?6;D~LPXVJUYt+fZNSRxb8OjMW@DODqb(-3d z8sy^qX*3J<6n5kzP+aHYCRyU}OGb2tKg&>rBFXYbz#?WBG-ZtZV(TUWfH9ppOr)9AM~%@G-6ECVb6_udSQf> z*MzGlTUCr5TWqxT$q08G+Jn`$zd0_vuV?p3ts6f{7ksAr^E<=1vedTKt^3X|wf?|v z?5XoU{mMsl$^d$Avtnc(eTwbe&T0U=T+Tnyc<9^-as^eq_-yT!@f&;2>?@zzh9(vH zW7{I3ChD5&s-dc%5Ig6Ef=Oz-fIKJ=7o^pQp3YL4;5u+L+s6S`3J`uutfXb6wJK6b zX><5Is3CAsF`o#(4yeXsEmI#;<5xB6Z09i>d(rodx;^5oARi)|FVXN`!ixbfny) z8R`@Z7bSi9PnBuCliJ|7`C%)hd}h6=fXgZ?*g*%JN9x+T zy3?}m9aeOow_jbd8o@|D`{Wz3*>7D#mH(36aC9WB!Ptd&=2` zDM_8|ZSrIK9Ui}u{ldmwScU}?JE+dT;{1?fR6XoCfd2!N)FnBCLYa|qkx~{7pWfH8 zG^=yGPF~n7pX-q_CIO{QW@@@e-=W=39RG`L+X0u*$sS(u{+^vVC3Q=*dQrM$hQK6>?` zeHT=oTRvfDv)JjQdNq5tf1hFDk%>8(G3#@0y-%CD)pqtoPbwdCXyBlYy;`QsInpBB za@@2EyEnIauKYsRcfB23twg9Q<)c(h!J{%n6OB`o)x0Gajik^7Jhe2FBl<_020%ya zTsRv_R23B1shTd0Er5H5HL3ynjJq8616h~|?K9|32mNaV0WNR(Jr zj$RC?T=5!?7v~_>f6tPc>+{)Sk3BXIJgpL1fC5k{BE-Ty9*Dfns^sUn z=Wd*T;am~>xbdma?@X5`8&ja<9^LHt_PDm|mghcm`;7cy^XIpJx5NH)W!9ucVw*C= zwQ1_UsGBbiWr^)j%emNO9e!2AsUeyqny8cFIyJ1?EWh}p%BVPoAn8nx^@HdPN~kz& zeo%6TImnM>eXw##vPI&uup;GO(^rRY2=SrtTcb|0@RZ-?jHH9F)2#M42aK4>IjYrt zA1PjC(bew88AjXUmZxdS8?qCx%`dPuDXi@i`F}dQ60oMOw0+OLHz5gOU&2lTgk6v| z7@`DF#05lFQ4rZ(KoH_um2t)@Rz=5Jt6h|;o!>hC)vB#dtF2J#)UDG+ol&RlGt*W_ zi%hGwDw5;8Cy82H{(qht9+I1z z$e|bC*@o%$oG<3oiJG~=yvNvpwfd?GVUz6px#nJThxtZz;PjoU$lwJ2TVV^?`|R}A z=llDIG?KT8_HZ}h0gN*p<(Cdykh3=$`VoybB*<6cAxAPfP7xK(pyB{uK*dUXndp=| z7*cHMae@F8qi?~436L>EinW+jv&kt)vSe2`cGeDCs1qt;#s^T=qqJ zx4Zs62NLyGhd6aYc1Kq+@1fAu%YGQ{%*KiyB#P~Oh_6=v9%s4m94tWnxAgHWGK)A$y5h9kwFG|HO zgwurr9S#9CCoD_;>YnDRdugQL6Gi>M(*Bifx_xhLOipZ1>9Rbrz2=!@x_8sO3?kvf zpH8?(mmVewm)0f9pQ~^f0#xlSXU3MpGnpM(}rqG$9M7n7`somHb`iMk4kJCd{)Q#5Pl`K3uZray}_HHgK^OmQM z3B41V8!)QAtuk)NQd*YS7U(96aExiMD`@Q@dL4#cZ# z@{!r$fdrl~3A|;Qfwp8-!Lt^{*ar=h#{EmC#^v237y=9Mc444W6sNU~21 zoaOr&iF<9|gwu(_c+Gdc{KTPbKCG;QV zSk|N&hB*|gQ!bDSHz!YR?5C!Nk@E{03Oe`@{uKWz@%E~IH&&3ZT>NI)g==QN6LClQ z?tk&cS@UKT>?$ho(ofwtq4e0pa$d=_y2yi7g}GgLHYuG(O7#o+xRFk zWrhH{{3m5wKCto^WxIP{QpY?M3b*e%zw^w|wU=(pd#+cWF)D&qg&DI0$*QH2!OPf? zW-H@rr-x;n-#BO)zl3H!b`nat>ncB_`LEq;pMT@S_Jmk{c*uwp4mYVEfj4>*P1>`9tc8PJkR5>{_N+r6$ zJhNq7kYYI5z)2m3k&Q?!y27UjfIsuhuv!?rZ9>XqMSM96or|85wQ@^egBhExIRj$E z7ASnCV6xB`4+KmwB!Ocjc6Ql6YnkS`bz~}UfAtnIta%e6)~>dWdmBG1tgO}}vtrzc zl(O^0_1=NM(T}xQdF?qjz$?hKH(}rmrk6Y6+RUaGU%X4a=jrFB+IK(RGR@M}^zifa zL-TXg1TL!PIm{mRk)b=5{CVc;eVKX6S=uDcLHflT-;gFE+$0N6)63?Av=9yn8GZJH z8PG=EAahPaH8uUFCU09F>x@M!4`PoD>)=5~0Ou<(j)@5g^cF#eaHCNX8EJfUYBDz% zF(M!bZW_l&h2d@7FcK5utq?aPz=#>hGqS|CLSr@X>)8^w!7J@olPFPNG7{y-2X(Z> z+Iu_!sUq%syfPk^ow69Xm=DS>hZ|{3<%o;dm^6K&sLSGsiyp~t4PJr*zK%#=orP8k z)2fB6)F@`F36isx&grH6oD3WC!wep_Up`34KS4Q4rk{GZ<04}FTX}j`1g#EF8xz1{ zn_hh)Hp*VwdhUIM@t;>E#-v1sq*a@HpM;)5yR)qE?aM5&9|^V6Fk>77KMFZ+5c<(F zfy+!_W>OVNiA5p7Z^V(Aeklyv;GoZ}i)AYr3rX;>zch{VLc1qjlB&O-{|=mSxCrUu`U|uHcKx7cOX=QSYsClgOJ* zunFK+R%%Fzi;WJK6}jXA*@0xYyx9>Jtwq5=Gvy@3v>0$!j&htbTbZcD6<$cTAw}R? zN6Cfu@^tIk25_>)HNd2~7^Wc=#?TIT8z4fcHXqvCem1bP#j7Q=jR({3f^=Yr7hAbA z+lbY462kI6G1Cb!3NVFM1y2~{8$WTJV5|xgwnom&bLH20zw;;Y2lxhk(|i*~ORm%Y zcBQIW?&s{|nU!H4pLb~Qrm#8F@}lICs)-t+KeMHie0tC~T;4Fq=5ptjYd#5|uEq#`x5eJe=Ke$_c z@1`oqKH+`yRO;E3{;kkNf^U63q%bS*#dI=)ED3|BPEXAp?d8u`|9;wT{vfj7ts{nj z#n;kA<*sW)noEC3N-Zi*I&$x0bk8q66Fl9)?$QTjW|`HwLf@lHD*P^P3=i?O*j|d3 z@Vf!uo&JsUlq;^Y?C3#r5v`kYBI6@z>&m@RZ38+7Y9b<}(;fyi7j9LRm#)F6vv0C86Y{n8)F5?p+@Jn>H zYKnq{B*saAXcV%yoo`(g9Qd+S6Xh<7eNw)VB(;wF?HKc0!AFVaz`7szPa7D!my9~6 zD>XLSN!QZTeXHs9Z-z&2dHH{8HY%V@C*wD_!_awtdtcx3QKpH1`*h}k<1f8`WtO|- zvm)9?&whBT_9>9rcSxU(UumJ>cu)TY#HGvG{K6fw;qoC&qFYZTZ$@sfUiZ*R(pcJi za}ODJo+ezHY6y}^`LQV^m1Kh`zq7ldsscp$z;`*_bpLf0SHMT_zwSH)+UQl>I^!~D zQaR6u%<)Q02oe^T2$s;xRk;h5K2I}^2YeDu0h~Bz=sbnIfeiPG0%l?e;engzW-R7V z0ZG6fNJ(6}Tqdy_hg9NNGr;WER+~FcG!+mi{>p}lf&mcLDj;J`4g9JFCWmG0Tk^=7 z0%rQL@jli_eJs?lqJ#Wzut*De7->2QL&q4V4w($ALpDo+#+{tUQO=Qx)iGlVc_v-uK{9Q~BP`S>Ns{yvQQ98TpMqAXf$q*ut z6DMB%eqF}4etNBW@!x+}zBH<^B;L_O5o(CfIeeq;_1gF7j{)Kx^3>t|AkOvavL+IV zfGf8KoOxD<|Amd=>Of1ll`N3#0YLQ8N|*dT_eLqgt&rAFF&|4GIObpc_E-EK`aSaQ zocO~7B{$E@q2!KDtfij_f22#}H@ee>0|V5f3rfb(D@X?N1uQ=KqWNiP#EYvORu35w zZqBB}c5DH`<@k)*$N|8q&#Vt?ra*Bq=O{_>(I{a4D+PvNtTHgXpjgognx+qc)#OPBSsy3gnL_doqn^A4kU z^w>FBu{AP10xXf)f8i|sV-IQJy}ky89u3T#nrO%8q`3PKFjdo;q%H8+AzFv4jcfn1 zrJKyW!Agkh60h2wk`Bi_0J*4GRstsFnfy@7Lmo+a>`sl3y4%R4JkrC`;g7UDgxe(+ z%Tp!0A3sLPV8@WBj*q(iH9LkZU9$VpF_0J0_E*F0Coo&`JwmgvRp=9kie=(bu~Y1p zs3p0Q-O_OBOLj`TMRwgXlk7Zr-C}u%LR9qF=PTWndmKC+b~!2?-*pOi%5&Q6EOVaf zeAXq`Wx&I<)2uOr@m-s`>leVTn0z9!$} ze(ruN{Pz1B{r3QXYYDg&I5P0K+F9M8KCB7RY|#8OC?%*jxHF_m%W1cU`i1#~{XK$< z*dEanaXI2LYjzl0UPsAVZ~l0&Zi9#9tmrl4OYMM4TK5acKNW4;7LgspVB419J%zSy zmM?Y+T0DUs1v6GS0j%3#vvI{6>o$+?{a@R*z^QRn8S8!#T=*s1wgki!vhP`rBLx%g zJ-T*wZA+!8wnkmGP@UB@+tgIwQrSGcwnd!~laSfeFt@R4Zfkg6L*h+n*_{*|xmQ7}Ux&x)};vhANf`}udH)GW9A zPhsvn*p1bu0+=o8vZ2y68#M+32brqxTk4QhH@7xppS3k$sIczE9)eG?x`u}ud(}|w zaL6@UiZx9+{``@3v;s%9e(wJ{eqBpt^~2-y$S~}PfA%S6bYYJyt2*m7!|{Wed)5|REPJi@&K&n2#sGuV literal 0 HcmV?d00001 diff --git a/src/index.html b/src/index.html index cdf16fe6..c5378b10 100644 --- a/src/index.html +++ b/src/index.html @@ -6,6 +6,7 @@ Dataverse +
diff --git a/src/style.css b/src/style.css index e043b877..20ce39fd 100644 --- a/src/style.css +++ b/src/style.css @@ -16,12 +16,12 @@ body { background: rgb(0,78,203); background: linear-gradient(180deg, rgba(0,78,203,1) 0%, rgba(0,78,203,1) 50%, rgba(166,224,247,1) 100%); - font-family: "Montserrat Alternates", sans-serif; + font-family: "InspireTWDC", sans-serif; } h2 { - font-family: "Montserrat Alternates", sans-serif; + font-family: "InspireTWDC", sans-serif; font-weight: bold; font-style: normal; font-size: 20px; @@ -32,7 +32,7 @@ } h3 { - font-family: "Montserrat Alternates", sans-serif; + font-family: "InspireTWDC", sans-serif; text-align: center; font-weight: bold; font-size: 25px; @@ -148,7 +148,7 @@ } select { - font-family: "Montserrat Alternates", sans-serif; + font-family: "InspireTWDC", sans-serif; font-size: 100%; color: black; background-color: #fcf0c6; @@ -165,7 +165,7 @@ font-size: 100%; color: black; background-color: #fcf0c6; - font-family: "Montserrat Alternates", sans-serif; + font-family: "InspireTWDC", sans-serif; padding: 10px; border-color: #ffd034; border-width: 3px; @@ -175,7 +175,7 @@ } button { - font-family: "Montserrat Alternates", sans-serif; + font-family: "InspireTWDC", sans-serif; font-weight: bold; font-size: 100%; background-color: #fcf0c6; @@ -224,7 +224,7 @@ } .tarjeta { - font-family: "Comic Neue", cursiva; + font-family: "InspireTWDC", cursiva; display: flex; flex-direction: column; background-color: rgba(255, 255, 255, 0.9); diff --git a/src/views/home.js b/src/views/home.js index d417b2e0..849d3f0c 100644 --- a/src/views/home.js +++ b/src/views/home.js @@ -1,21 +1,46 @@ import data from '../data/dataset.js'; import { filterData } from '../lib/dataFunctions.js'; import { card } from '../Components/Card.js'; +import { selectoresOrden, selectoresEpoca } from '../Components/filtroyorden.js' export const Home = () => { const el = document.createElement("h1"); el.innerHTML = "Dreamland"; - const div = document.createElement('div'); - div.appendChild(el) + const div = document.createElement('div'); + div.appendChild(el) + + /*const select = document.createElement('label'); + select.textContent = "selecciona por época"; + select.setAttribute('for', 'epoca'); - const showCard = (data) => { + const value = document.createElement('select'); + select.id = 'epoca'; + select.setAttribute('data-testid', 'select-filter'); + select.name = 'epocas'; + const options = [ + { value: '0', text: 'Seleccionar' }, + { value: '1990', text: '1990' }, + { value: '2000', text: '2000' }, + { value: '2010', text: '2010' }, + { value: '2020', text: '2020' } + ]; + options.forEach(optionData => { + const option = document.createElement('option'); + option.value = optionData.value; + option.textContent = optionData.text; + select.appendChild(option); + }); + document.el.appendChild(label); + document.el.appendChild(select);*/ + + + const showCard = (data) => { const ulElement = document.createElement('ul'); + ulElement.classList.add("ulPelis"); data.forEach(item => { - /*const li = document.createElement('li') - li.innerHTML = item.id */ - ulElement.appendChild(card(item))} + ulElement.appendChild(card(item))} ); return ulElement; From e6f6b073dfcf729e4e8020d11a17f225a9bbbbe9 Mon Sep 17 00:00:00 2001 From: CamilaCarrenoV Date: Wed, 21 Aug 2024 11:54:23 -0400 Subject: [PATCH 16/33] tarjetas visualizadas y logrando visualizar funciones --- src/views/home.js | 42 ++++++++++++++++++++---------------------- 1 file changed, 20 insertions(+), 22 deletions(-) diff --git a/src/views/home.js b/src/views/home.js index 849d3f0c..d5da3fdb 100644 --- a/src/views/home.js +++ b/src/views/home.js @@ -1,16 +1,16 @@ -import data from '../data/dataset.js'; -import { filterData } from '../lib/dataFunctions.js'; -import { card } from '../Components/Card.js'; -import { selectoresOrden, selectoresEpoca } from '../Components/filtroyorden.js' +import data from "../data/dataset.js"; +import { filterData } from "../lib/dataFunctions.js"; +import { card } from "../Components/Card.js"; +//import { selectoresOrden, selectoresEpoca } from '../Components/filtroyorden.js' export const Home = () => { - const el = document.createElement("h1"); - el.innerHTML = "Dreamland"; + const div = document.createElement("div"); + const el = document.createElement("h1"); - const div = document.createElement('div'); - div.appendChild(el) + el.innerHTML = "Dreamland"; + div.appendChild(el); - /*const select = document.createElement('label'); + /*const select = document.createElement('label'); select.textContent = "selecciona por época"; select.setAttribute('for', 'epoca'); @@ -34,21 +34,19 @@ export const Home = () => { document.el.appendChild(label); document.el.appendChild(select);*/ - - const showCard = (data) => { - const ulElement = document.createElement('ul'); + const showCard = (data) => { + const ulElement = document.createElement("ul"); ulElement.classList.add("ulPelis"); - - data.forEach(item => { - ulElement.appendChild(card(item))} - - ); - return ulElement; + + data.forEach((item) => { + ulElement.appendChild(card(item)); + }); + return ulElement; }; - div.appendChild(showCard(data)) - return div; - } + div.appendChild(showCard(data)); + return div; +}; - export default Home; \ No newline at end of file +export default Home; From dad77ebe2ccfc4069b6e5d136c3f30173c0bfea2 Mon Sep 17 00:00:00 2001 From: danimar-g Date: Wed, 21 Aug 2024 13:31:05 -0400 Subject: [PATCH 17/33] homi --- src/views/home.js | 34 ++++++++++------------------------ 1 file changed, 10 insertions(+), 24 deletions(-) diff --git a/src/views/home.js b/src/views/home.js index d417b2e0..3e6a2a34 100644 --- a/src/views/home.js +++ b/src/views/home.js @@ -1,29 +1,15 @@ -import data from '../data/dataset.js'; -import { filterData } from '../lib/dataFunctions.js'; -import { card } from '../Components/Card.js'; - -export const Home = () => { +const Home = () => { const el = document.createElement("h1"); el.innerHTML = "Dreamland"; - - const div = document.createElement('div'); - div.appendChild(el) - - const showCard = (data) => { - const ulElement = document.createElement('ul'); - - data.forEach(item => { - /*const li = document.createElement('li') - li.innerHTML = item.id */ - ulElement.appendChild(card(item))} - - ); - return ulElement; - }; - div.appendChild(showCard(data)) - return div; + return el; } + //funcion para crear tarjetas + const renderItems = (data) => { + const ulElement = document.createElement('ul'); + data.forEach(pelicula => - - export default Home; \ No newline at end of file + ulElement.appenChild(Card("ulPelis")) + ); + return ulElement; + }; \ No newline at end of file From 0f4f5ce5a12a5edb462da9d625625ecdf4339ee2 Mon Sep 17 00:00:00 2001 From: danimar-g Date: Thu, 22 Aug 2024 13:21:44 -0400 Subject: [PATCH 18/33] cambios rutas y cards --- src/Components/Card.js | 6 +++--- src/Components/tarjetaChat.js | 1 + src/index.js | 8 +++++++- src/views/home.js | 27 +-------------------------- src/views/pelicula.js | 17 +++++++++++++++++ 5 files changed, 29 insertions(+), 30 deletions(-) create mode 100644 src/Components/tarjetaChat.js create mode 100644 src/views/pelicula.js diff --git a/src/Components/Card.js b/src/Components/Card.js index 464359f1..acdf173d 100644 --- a/src/Components/Card.js +++ b/src/Components/Card.js @@ -25,9 +25,9 @@ export const card = (item) => {
`; - /*( liElement.addEventListener('click', () => { - navigateTo('/chatIndividual', {id: item.id}); - });)*/ + ( liElement.addEventListener('click', () => { + navigateTo('/pelicula', {id: item.id}); + })); return liElement; }; diff --git a/src/Components/tarjetaChat.js b/src/Components/tarjetaChat.js new file mode 100644 index 00000000..b636f99d --- /dev/null +++ b/src/Components/tarjetaChat.js @@ -0,0 +1 @@ +import tarjetaChat from "../views/pelicula" diff --git a/src/index.js b/src/index.js index 93f738a2..60b3ea29 100644 --- a/src/index.js +++ b/src/index.js @@ -1,10 +1,13 @@ import Home from './views/home.js'; -// ... import other views +import {Films} from './views/pelicula.js'; import { setRootEl, setRoutes, onURLChange } from './router.js'; + // Define your routes and their associated views const routes = { '/': Home, + '/pelicula': Films, + }; @@ -16,4 +19,7 @@ window.addEventListener("DOMContentLoaded", () => { const rootEl = document.getElementById("root"); setRootEl(rootEl); onURLChange(window.location); + + + }); \ No newline at end of file diff --git a/src/views/home.js b/src/views/home.js index d5da3fdb..9814acfd 100644 --- a/src/views/home.js +++ b/src/views/home.js @@ -1,7 +1,5 @@ import data from "../data/dataset.js"; -import { filterData } from "../lib/dataFunctions.js"; import { card } from "../Components/Card.js"; -//import { selectoresOrden, selectoresEpoca } from '../Components/filtroyorden.js' export const Home = () => { const div = document.createElement("div"); @@ -10,30 +8,7 @@ export const Home = () => { el.innerHTML = "Dreamland"; div.appendChild(el); - /*const select = document.createElement('label'); - select.textContent = "selecciona por época"; - select.setAttribute('for', 'epoca'); - - const value = document.createElement('select'); - select.id = 'epoca'; - select.setAttribute('data-testid', 'select-filter'); - select.name = 'epocas'; - const options = [ - { value: '0', text: 'Seleccionar' }, - { value: '1990', text: '1990' }, - { value: '2000', text: '2000' }, - { value: '2010', text: '2010' }, - { value: '2020', text: '2020' } - ]; - options.forEach(optionData => { - const option = document.createElement('option'); - option.value = optionData.value; - option.textContent = optionData.text; - select.appendChild(option); - }); - document.el.appendChild(label); - document.el.appendChild(select);*/ - + const showCard = (data) => { const ulElement = document.createElement("ul"); ulElement.classList.add("ulPelis"); diff --git a/src/views/pelicula.js b/src/views/pelicula.js new file mode 100644 index 00000000..85d83fba --- /dev/null +++ b/src/views/pelicula.js @@ -0,0 +1,17 @@ +import dataset from "../data/dataset.js" + +//detalle +//const pelis = cards +//cards = [ id, name, shortDescription, description, imageUrl] + +export const Films = () => { + const div = document.createElement("div"); + const el = document.createElement("h1"); + + el.innerHTML = "Dreamland"; + div.appendChild(el); + + + + return div; + }; \ No newline at end of file From 89728a218528893c36cd3c0142bce0b201c203ec Mon Sep 17 00:00:00 2001 From: CamilaCarrenoV Date: Thu, 22 Aug 2024 13:44:12 -0400 Subject: [PATCH 19/33] intentando visualizar las tarjetas --- src/index.js | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/src/index.js b/src/index.js index 60b3ea29..c9d8d6cc 100644 --- a/src/index.js +++ b/src/index.js @@ -1,13 +1,12 @@ -import Home from './views/home.js'; -import {Films} from './views/pelicula.js'; +import Home from './views/home.js' +import {Films} from '.view/pelicula.js' +// ... import other views import { setRootEl, setRoutes, onURLChange } from './router.js'; - // Define your routes and their associated views const routes = { '/': Home, - '/pelicula': Films, - + '/pelicula': Films, }; @@ -19,7 +18,4 @@ window.addEventListener("DOMContentLoaded", () => { const rootEl = document.getElementById("root"); setRootEl(rootEl); onURLChange(window.location); - - - }); \ No newline at end of file From 295428d7c61fe179c41c7ed8c839ba8cc213958e Mon Sep 17 00:00:00 2001 From: CamilaCarrenoV Date: Fri, 23 Aug 2024 15:33:19 -0400 Subject: [PATCH 20/33] intentando visualizar la tarjeta --- src/views/home.js | 2 +- src/views/pelicula.js | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/src/views/home.js b/src/views/home.js index 9814acfd..fac01796 100644 --- a/src/views/home.js +++ b/src/views/home.js @@ -20,7 +20,7 @@ export const Home = () => { }; - div.appendChild(showCard(data)); + div.appendChild(showCard(data)); return div; }; diff --git a/src/views/pelicula.js b/src/views/pelicula.js index 85d83fba..66f25b25 100644 --- a/src/views/pelicula.js +++ b/src/views/pelicula.js @@ -1,8 +1,5 @@ import dataset from "../data/dataset.js" -//detalle -//const pelis = cards -//cards = [ id, name, shortDescription, description, imageUrl] export const Films = () => { const div = document.createElement("div"); From 2dfa30286a7c74ccc2dbfbf68e103972f1f7a016 Mon Sep 17 00:00:00 2001 From: CamilaCarrenoV Date: Sun, 25 Aug 2024 18:29:22 -0400 Subject: [PATCH 21/33] =?UTF-8?q?maqueta=20de=20la=20visualizaci=C3=B3n=20?= =?UTF-8?q?de=20las=20tarjetas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Components/Card.js | 2 +- src/Components/header.js | 9 +++++++++ src/Components/tarjetaChat.js | 1 - src/Components/tarjetaPelicula.js | 25 +++++++++++++++++++++++++ src/index.js | 7 +++---- src/views/home.js | 12 ++++++++---- src/views/pelicula.js | 28 +++++++++++++++++----------- 7 files changed, 63 insertions(+), 21 deletions(-) create mode 100644 src/Components/header.js delete mode 100644 src/Components/tarjetaChat.js create mode 100644 src/Components/tarjetaPelicula.js diff --git a/src/Components/Card.js b/src/Components/Card.js index acdf173d..e885b7d9 100644 --- a/src/Components/Card.js +++ b/src/Components/Card.js @@ -13,7 +13,7 @@ export const card = (item) => {
${item.id}
-
${item.shortDescription}
+
${item.shortDescription}

Año: ${item.facts.estreno}

Género: ${item.facts.generoPelicula}

diff --git a/src/Components/header.js b/src/Components/header.js new file mode 100644 index 00000000..335c1c3d --- /dev/null +++ b/src/Components/header.js @@ -0,0 +1,9 @@ +function createHeader() { + const header = document.createElement('header'); + header.innerHTML = ` + +

Dreamland

+
+ ` + return header; +} \ No newline at end of file diff --git a/src/Components/tarjetaChat.js b/src/Components/tarjetaChat.js deleted file mode 100644 index b636f99d..00000000 --- a/src/Components/tarjetaChat.js +++ /dev/null @@ -1 +0,0 @@ -import tarjetaChat from "../views/pelicula" diff --git a/src/Components/tarjetaPelicula.js b/src/Components/tarjetaPelicula.js new file mode 100644 index 00000000..99324266 --- /dev/null +++ b/src/Components/tarjetaPelicula.js @@ -0,0 +1,25 @@ +export const cardMovie = (item) => { + const divElement = document.createElement('div'); + divElement.classList.add("infoMovie"); + + divElement.innerHTML = ` +
+

${item.name}

+
+ ${item.id} +
+
+ ${item.shortDescription} + + Año de estreno: ${item.facts.estreno} + Género: ${item.facts.generoPelicula} + Clasificación en IMDb: ${item.facts.clasificPublico} + Duración: ${item.facts.tiempoDuracion} + Resumen: ${item.descrption} + ¿Sabías qué?: ${item.extraInfo.curiosidades} +
+
+ `; + + return divElement; +} diff --git a/src/index.js b/src/index.js index c9d8d6cc..6792ebe2 100644 --- a/src/index.js +++ b/src/index.js @@ -1,12 +1,11 @@ -import Home from './views/home.js' -import {Films} from '.view/pelicula.js' -// ... import other views +import {Home} from './views/home.js' +import {films} from '.view/pelicula.js' import { setRootEl, setRoutes, onURLChange } from './router.js'; // Define your routes and their associated views const routes = { '/': Home, - '/pelicula': Films, + '/pelicula': films, }; diff --git a/src/views/home.js b/src/views/home.js index fac01796..d053c8de 100644 --- a/src/views/home.js +++ b/src/views/home.js @@ -1,12 +1,16 @@ -import data from "../data/dataset.js"; +import { data } from "../Data/dataset.js"; import { card } from "../Components/Card.js"; +import { createHeader } from "../Components/header.js"; export const Home = () => { const div = document.createElement("div"); - const el = document.createElement("h1"); - el.innerHTML = "Dreamland"; - div.appendChild(el); + const header = createHeader(); + div.appendChild(header); + + const subtitle = document.createElement ("h2") + subtitle.innerHTML = "bienvenido a dreamland, una página para fanaticos de Disney y Pixar donde puedes chatear con tus películas favoritas"; + div.appendChild(subtitle); const showCard = (data) => { diff --git a/src/views/pelicula.js b/src/views/pelicula.js index 66f25b25..c4cf1986 100644 --- a/src/views/pelicula.js +++ b/src/views/pelicula.js @@ -1,14 +1,20 @@ -import dataset from "../data/dataset.js" +import {tarjetaPelicula} from "../Components/tarjetaPelicula.js"; +import data from "../Data/dataset.js" +import { createHeader } from "../Components/header.js"; - -export const Films = () => { - const div = document.createElement("div"); - const el = document.createElement("h1"); - - el.innerHTML = "Dreamland"; - div.appendChild(el); - +export const films = () => { + const div = document.createElement("div"); + const header = createHeader(); + div.appendChild(header); - + const selectMovie = data.find((movie) => movie.id === URLSearchParams.id); + if (selectMovie) { + div.appendChild(pelicula(selectMovie)); + } else { + div.inneHTML = div.innerHTML = `

Película no encontrada

`; + } + return div; - }; \ No newline at end of file + }; + + export default films; \ No newline at end of file From b1d51bc31ea6655c6d53fa242e63102bdacc9fbe Mon Sep 17 00:00:00 2001 From: danimar-g Date: Sun, 25 Aug 2024 21:12:28 -0400 Subject: [PATCH 22/33] cambio css --- src/style.css | 38 ++++++++++++++++++++++---------------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/src/style.css b/src/style.css index 20ce39fd..7bddc757 100644 --- a/src/style.css +++ b/src/style.css @@ -6,11 +6,12 @@ h1 { font-family: fuenteDisney, sans-serif; font-style: normal; - font-size: 140px; + font-size: 8.75rem; text-align: center; color: #ffffff; - margin-top: 75px; - margin-bottom: 75px; + text-shadow: 3px 3px 0 #c6ebfc; + margin-top: 4.688rem; + margin-bottom: 4.688rem; } body { @@ -92,9 +93,9 @@ flex-direction: column; align-items: center; width: 100%; - max-width: 600px; + max-width: 37.5rem; margin: 0 auto; - padding: 20px; + padding: 1.25rem; } .datosdisney { @@ -113,13 +114,13 @@ .datosdisney li { flex: 1; - padding: 10px; + padding: 0.625rem; text-align: center; border: 1px solid #ccc; border-radius: 4px; box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1); - width: 400px; - height: 64px; + width: 25rem; + height: 4rem; } .datosdisney li#duracion { @@ -195,7 +196,7 @@ list-style: none; padding: 0; margin: 0; - margin-top: 16px; + margin-top: 1rem; justify-content: center; } @@ -208,18 +209,23 @@ .contenedorImagen { display: flex; justify-content: center; + max-width: 100%; + max-height: 100%; } .contenedorTextos { display: flex; flex-direction: column; - padding: 0 16px; + padding: 0 1rem; font-size: 110%; + box-sizing: border-box; + overflow-x: auto; + width: 100%; } .imagenPeli { - height: 240px; + height: 15rem; width: auto; } @@ -228,12 +234,12 @@ display: flex; flex-direction: column; background-color: rgba(255, 255, 255, 0.9); - gap: 16px; - width: calc(50% - 64px); + gap: 1rem; + width: calc(50% - 2rem); text-align: justify; - margin: 1px; - padding: 16px; - border-radius: 20px; + margin: 0.063rem; + padding: 1rem; + border-radius: 1.25rem; color: black; } From 8edcc0727c117a74cca35897f62adaf239071ded Mon Sep 17 00:00:00 2001 From: CamilaCarrenoV Date: Mon, 26 Aug 2024 17:52:21 -0400 Subject: [PATCH 23/33] =?UTF-8?q?visualizaci=C3=B3n=20lista=20de=20tarjeta?= =?UTF-8?q?s=20listo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Components/Card.js | 5 +++-- src/Components/header.js | 2 +- src/index.js | 13 +++++++++---- src/views/Peliculas.js | 20 ++++++++++++++++++++ src/views/home.js | 6 +++--- src/views/pelicula.js | 20 -------------------- 6 files changed, 36 insertions(+), 30 deletions(-) create mode 100644 src/views/Peliculas.js delete mode 100644 src/views/pelicula.js diff --git a/src/Components/Card.js b/src/Components/Card.js index e885b7d9..ee25ef56 100644 --- a/src/Components/Card.js +++ b/src/Components/Card.js @@ -25,8 +25,9 @@ export const card = (item) => {
`; - ( liElement.addEventListener('click', () => { - navigateTo('/pelicula', {id: item.id}); + ( liElement.addEventListener('click', () => { + console.log(item.id) + navigateTo('/peliculas', {id: item.id}); })); return liElement; }; diff --git a/src/Components/header.js b/src/Components/header.js index 335c1c3d..7d953b8c 100644 --- a/src/Components/header.js +++ b/src/Components/header.js @@ -1,4 +1,4 @@ -function createHeader() { +export const createHeader = ()=> { const header = document.createElement('header'); header.innerHTML = ` diff --git a/src/index.js b/src/index.js index 6792ebe2..acd88788 100644 --- a/src/index.js +++ b/src/index.js @@ -1,11 +1,13 @@ -import {Home} from './views/home.js' -import {films} from '.view/pelicula.js' +import {Home} from './views/Home.js'; +import {Films} from './views/Peliculas.js'; import { setRootEl, setRoutes, onURLChange } from './router.js'; + // Define your routes and their associated views const routes = { '/': Home, - '/pelicula': films, + '/peliculas': Films, + }; @@ -17,4 +19,7 @@ window.addEventListener("DOMContentLoaded", () => { const rootEl = document.getElementById("root"); setRootEl(rootEl); onURLChange(window.location); -}); \ No newline at end of file + + + +}); diff --git a/src/views/Peliculas.js b/src/views/Peliculas.js new file mode 100644 index 00000000..8fcd6b07 --- /dev/null +++ b/src/views/Peliculas.js @@ -0,0 +1,20 @@ +import data from "../data/dataset.js"; +import { cardMovie } from "../components/tarjetaPelicula.js"; +import { createHeader } from "../components/header.js"; + +export const Films = (id) => { + console.log(id); + const div = document.createElement("div"); + const header = createHeader(); + div.appendChild(header); + + const selectMovie = data.find((movie) => movie.id === URLSearchParams.id); + console.log(selectMovie); + /*if (selectMovie) { + div.appendChild(cardMovie(selectMovie)); + } else { + div.inneHTML = div.innerHTML = `

Película no encontrada

`;i + }*/ + + return div; + }; diff --git a/src/views/home.js b/src/views/home.js index d053c8de..9cb98821 100644 --- a/src/views/home.js +++ b/src/views/home.js @@ -1,6 +1,6 @@ -import { data } from "../Data/dataset.js"; +import data from "../data/dataset.js"; import { card } from "../Components/Card.js"; -import { createHeader } from "../Components/header.js"; +import { createHeader } from "../components/header.js"; export const Home = () => { const div = document.createElement("div"); @@ -28,4 +28,4 @@ export const Home = () => { return div; }; -export default Home; + diff --git a/src/views/pelicula.js b/src/views/pelicula.js deleted file mode 100644 index c4cf1986..00000000 --- a/src/views/pelicula.js +++ /dev/null @@ -1,20 +0,0 @@ -import {tarjetaPelicula} from "../Components/tarjetaPelicula.js"; -import data from "../Data/dataset.js" -import { createHeader } from "../Components/header.js"; - -export const films = () => { - const div = document.createElement("div"); - const header = createHeader(); - div.appendChild(header); - - const selectMovie = data.find((movie) => movie.id === URLSearchParams.id); - if (selectMovie) { - div.appendChild(pelicula(selectMovie)); - } else { - div.inneHTML = div.innerHTML = `

Película no encontrada

`; - } - - return div; - }; - - export default films; \ No newline at end of file From 2d149b10864c1e56df1e16318221c4740672cab8 Mon Sep 17 00:00:00 2001 From: danimar-g Date: Wed, 28 Aug 2024 12:29:36 -0400 Subject: [PATCH 24/33] cambios css y rutas --- src/Components/Card.js | 3 +- src/Components/footer.js | 9 + src/Components/tarjetaPelicula.js | 2 +- src/index.html | 3 + src/lib/apiKey.js | 9 + src/lib/dataFunctions.js | 2 - src/router.js | 6 +- src/style.css | 527 +++++++++++++++--------------- src/views/Peliculas.js | 12 +- src/views/home.js | 13 +- test/apiKey.spec.js | 17 + 11 files changed, 334 insertions(+), 269 deletions(-) create mode 100644 src/Components/footer.js create mode 100644 src/lib/apiKey.js create mode 100644 test/apiKey.spec.js diff --git a/src/Components/Card.js b/src/Components/Card.js index ee25ef56..888ce67b 100644 --- a/src/Components/Card.js +++ b/src/Components/Card.js @@ -13,7 +13,8 @@ export const card = (item) => {
${item.id}
-
${item.shortDescription}
+
${item.shortDescription}
+

Año: ${item.facts.estreno}

Género: ${item.facts.generoPelicula}

diff --git a/src/Components/footer.js b/src/Components/footer.js new file mode 100644 index 00000000..338daedf --- /dev/null +++ b/src/Components/footer.js @@ -0,0 +1,9 @@ +export const createFooter = ()=> { + const footer = document.createElement('footer'); + footer.innerHTML = ` + +

"Creado por Daniela Martínez. Proyecto Dataverse para Laboratoria. La información de esta página está proporcionado por Disney y Pixar, quienes tiene derechos exclusivos del contenido."

+
+ ` + return footer; +} \ No newline at end of file diff --git a/src/Components/tarjetaPelicula.js b/src/Components/tarjetaPelicula.js index 99324266..d15d609e 100644 --- a/src/Components/tarjetaPelicula.js +++ b/src/Components/tarjetaPelicula.js @@ -15,7 +15,7 @@ export const cardMovie = (item) => { Género: ${item.facts.generoPelicula} Clasificación en IMDb: ${item.facts.clasificPublico} Duración: ${item.facts.tiempoDuracion} - Resumen: ${item.descrption} + Resumen: ${item.description} ¿Sabías qué?: ${item.extraInfo.curiosidades}
diff --git a/src/index.html b/src/index.html index c5378b10..c34c8277 100644 --- a/src/index.html +++ b/src/index.html @@ -7,6 +7,9 @@ Dataverse + + +
diff --git a/src/lib/apiKey.js b/src/lib/apiKey.js new file mode 100644 index 00000000..020f64b1 --- /dev/null +++ b/src/lib/apiKey.js @@ -0,0 +1,9 @@ +// src/lib/apiKey.js + +export const getApiKey = () => { + // Implementa el código para obtener la API KEY desde Local Storage + }; + + export const setApiKey = (key) => { + // Implementa el código para guardar la API KEY en Local Storage + }; \ No newline at end of file diff --git a/src/lib/dataFunctions.js b/src/lib/dataFunctions.js index 3554f1d2..947ea21b 100644 --- a/src/lib/dataFunctions.js +++ b/src/lib/dataFunctions.js @@ -1,5 +1,3 @@ - - export const computeStats = (data) => { const sumaTotalDuracion = data.reduce((acumulador, pelicula) => acumulador + Number(pelicula.facts.tiempoDuracion.split(" ")[0]), 0); diff --git a/src/router.js b/src/router.js index bf244deb..d5d94f19 100644 --- a/src/router.js +++ b/src/router.js @@ -60,4 +60,8 @@ export const onURLChange = (location) => { const searchParams = location.search; const searchParamsObject = queryStringToObject(searchParams); renderView(pathname,searchParamsObject); -} \ No newline at end of file +} + +window.addEventListener('popstate', () => { + onURLChange(window.location); +}); \ No newline at end of file diff --git a/src/style.css b/src/style.css index 7bddc757..77d2b28d 100644 --- a/src/style.css +++ b/src/style.css @@ -1,261 +1,278 @@ @font-face { - font-family: fuenteDisney; - src: url(./assets/DisneyFont.ttf); + font-family: fuenteDisney; + src: url(./assets/DisneyFont.ttf); +} + +h1 { + font-family: fuenteDisney, sans-serif; + font-style: normal; + font-size: 8.75rem; + text-align: center; + color: #ffffff; + text-shadow: 3px 3px 0 #c6ebfc; + margin-top: 4.688rem; + margin-bottom: 4.688rem; +} + +body { + background-image: url("https://i.pinimg.com/564x/5c/9f/71/5c9f71e8f59463a53ce0d1cd3b8a07d8.jpg"); + image-rendering: center; + font-family: "Montserrat Alternates", sans-serif; + color: #ddf8f8; +} + +h2 { + font-family: "Montserrat Alternates", sans-serif; + font-weight: bold; + font-style: normal; + font-size: 20px; + text-align: center; + color: black; + background-color: #ac95ffd3; + padding: 25px; +} + +h3 { + font-family: "Montserrat Alternates", sans-serif; + text-align: center; + font-weight: bold; + font-size: 25px; + margin-top: 0; +} + +.botonDatos { + cursor: pointer; + position: relative; + padding: 10px 20px; + background: #ac95ffd3; + border: #ccc; + font-size: 28px; + border-top-right-radius: 10px; + border-bottom-left-radius: 10px; + transition: all 1s; + &:after, + &:before { + content: " "; + width: 10px; + height: 10px; + position: absolute; + transition: all 1s; } - - h1 { - font-family: fuenteDisney, sans-serif; - font-style: normal; - font-size: 8.75rem; - text-align: center; - color: #ffffff; - text-shadow: 3px 3px 0 #c6ebfc; - margin-top: 4.688rem; - margin-bottom: 4.688rem; + &:after { + top: -1px; + left: -1px; + border-top: 5px solid #ffd034; + border-left: 5px solid #ffd034; } - - body { - background: rgb(0,78,203); - background: linear-gradient(180deg, rgba(0,78,203,1) 0%, rgba(0,78,203,1) 50%, rgba(166,224,247,1) 100%); - font-family: "InspireTWDC", sans-serif; - + &:before { + bottom: 1px; + right: 1px; + border-bottom: 5px solid #ffd034; + border-right: 5px solid #ffd034; } - - h2 { - font-family: "InspireTWDC", sans-serif; - font-weight: bold; - font-style: normal; - font-size: 20px; - text-align: center; - color:black; - background-color: #ac95ffd3; - padding: 25px; - } - - h3 { - font-family: "InspireTWDC", sans-serif; - text-align: center; - font-weight: bold; - font-size: 25px; - margin-top: 0; - } - - .botonDatos { - cursor:pointer; - position:relative; - padding:10px 20px; - background:#ac95ffd3; - border: #ccc; - font-size:28px; - border-top-right-radius:10px; - border-bottom-left-radius:10px; - transition:all 1s; - &:after,&:before{ - content:" "; - width:10px; - height:10px; - position:absolute; - transition:all 1s; - } - &:after{ - top:-1px; - left:-1px; - border-top:5px solid #ffd034; - border-left:5px solid #ffd034; - } - &:before{ - bottom:1px; - right:1px; - border-bottom:5px solid #ffd034; - border-right:5px solid #ffd034; - } - &:hover{ - border-top-right-radius:0px; - border-bottom-left-radius:0px; - // background:rgba(0,0,0,.5); - // color:white; - &:before,&:after{ - - width:100%; - height:100%; - // border-color:white; - } - } - } - - .contenido-oculto{ - display: none; - - } - - #datosestadisticos { - display: flex; - flex-direction: column; - align-items: center; - width: 100%; - max-width: 37.5rem; - margin: 0 auto; - padding: 1.25rem; - } - - .datosdisney { - list-style-type: none; - padding: 16px; - display: flex; - gap: 32px; - justify-content: center; - align-items: center; - background-color: rgba(255, 255, 255, 0.5); - border-radius: 8px; - box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); - margin-top: 20px; - margin-bottom: 20px; - } - - .datosdisney li { - flex: 1; - padding: 0.625rem; - text-align: center; - border: 1px solid #ccc; - border-radius: 4px; - box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1); - width: 25rem; - height: 4rem; - } - - .datosdisney li#duracion { - background-color: #fcf0c6; - color:#000; - display: flex; - align-items: center; - font-weight: bold; - } - - .datosdisney li#nota { - background-color: #fcf0c6; - color: #000; - display: flex; - align-items: center; - font-weight: bold; - } - .tituloSelectores{ - font-size: 120%; - } - .selectores{ - display: flex; - justify-content: center; - align-items: center; - gap: 10px; - } - - select { - font-family: "InspireTWDC", sans-serif; - font-size: 100%; - color: black; - background-color: #fcf0c6; - padding: 10px; - border: solid; - border-color: #ffd034; - font-weight: bold; - cursor: pointer; - cursor: pointer; - border-radius: 20px; - } - - option { - font-size: 100%; - color: black; - background-color: #fcf0c6; - font-family: "InspireTWDC", sans-serif; - padding: 10px; - border-color: #ffd034; - border-width: 3px; - border-style: solid; - cursor: pointer; - border-radius: 20px; - } - - button { - font-family: "InspireTWDC", sans-serif; - font-weight: bold; - font-size: 100%; - background-color: #fcf0c6; - color: black; - padding: 10px; - border: solid; - border-color: #ffd034; - border-width: 3px; - border-radius: 20px; - cursor: pointer; - } - - .ulPelis { - display: flex; - flex-wrap: wrap; - gap: 32px; - list-style: none; - padding: 0; - margin: 0; - margin-top: 1rem; - justify-content: center; - } - - .contenedorContenido { - display: flex; - flex-direction: row; - align-items: flex-start; - } - - .contenedorImagen { - display: flex; - justify-content: center; - max-width: 100%; - max-height: 100%; - - } - - .contenedorTextos { - display: flex; - flex-direction: column; - padding: 0 1rem; - font-size: 110%; - box-sizing: border-box; - overflow-x: auto; - width: 100%; - } - - .imagenPeli { - height: 15rem; - width: auto; - } - - .tarjeta { - font-family: "InspireTWDC", cursiva; - display: flex; - flex-direction: column; - background-color: rgba(255, 255, 255, 0.9); - gap: 1rem; - width: calc(50% - 2rem); - text-align: justify; - margin: 0.063rem; - padding: 1rem; - border-radius: 1.25rem; - color: black; + &:hover { + border-top-right-radius: 0px; + border-bottom-left-radius: 0px; + // background:rgba(0,0,0,.5); + // color:white; + &:before, + &:after { + width: 100%; + height: 100%; + // border-color:white; } - - footer { - background-color: rgba(255, 255, 255, 0.5); - color: #000; - margin-top: 10px; - margin-bottom: 10px; - padding: 2%; - text-align: center; } - - #root{ - margin-top: 32px; - margin-bottom: 64px; - max-width: 1400px; - margin-left: auto; - margin-right: auto; - } \ No newline at end of file +} + +.contenido-oculto { + display: none; +} + +#datosestadisticos { + display: flex; + flex-direction: column; + align-items: center; + width: 100%; + max-width: 37.5rem; + margin: 0 auto; + padding: 1.25rem; +} + +.datosdisney { + list-style-type: none; + padding: 16px; + display: flex; + gap: 32px; + justify-content: center; + align-items: center; + background-color: rgba(255, 255, 255, 0.5); + border-radius: 8px; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); + margin-top: 20px; + margin-bottom: 20px; +} + +.datosdisney li { + flex: 1; + padding: 0.625rem; + text-align: center; + border: 1px solid #ccc; + border-radius: 4px; + box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1); + width: 25rem; + height: 4rem; +} + +.datosdisney li#duracion { + background-color: #fcf0c6; + color: #000; + display: flex; + align-items: center; + font-weight: bold; +} + +.datosdisney li#nota { + background-color: #fcf0c6; + color: #000; + display: flex; + align-items: center; + font-weight: bold; +} +.tituloSelectores { + font-size: 120%; +} +.selectores { + display: flex; + justify-content: center; + align-items: center; + gap: 10px; +} + +select { + font-family: "Montserrat Alternates", sans-serif; + font-size: 100%; + color: black; + background-color: #fcf0c6; + padding: 10px; + border: solid; + border-color: #ffd034; + font-weight: bold; + cursor: pointer; + cursor: pointer; + border-radius: 20px; +} + +option { + font-size: 100%; + color: black; + background-color: #fcf0c6; + font-family: "Montserrat Alternates", sans-serif; + padding: 10px; + border-color: #ffd034; + border-width: 3px; + border-style: solid; + cursor: pointer; + border-radius: 20px; +} + +button { + font-family: "Montserrat Alternates", sans-serif; + font-weight: bold; + font-size: 100%; + background-color: #fcf0c6; + color: black; + padding: 10px; + border: solid; + border-color: #ffd034; + border-width: 3px; + border-radius: 20px; + cursor: pointer; +} + +.ulPelis { + display: flex; + flex-wrap: wrap; + gap: 2rem; + list-style: none; + padding: 0; + margin: 0; + margin-top: 1rem; + justify-content: center; +} + +.contenedorContenido { + display: flex; + flex-direction: row; + align-items: flex-start; +} + +.contenedorImagen { + display: flex; + justify-content: center; + max-width: 100%; + max-height: 100%; +} + +.contenedorTextos { + display: flex; + flex-direction: column; + padding: 0 1rem; + font-size: 110%; + box-sizing: border-box; + overflow-x: auto; + width: 100%; +} + +.imagenPeli { + height: 15rem; + width: auto; +} + +.tarjeta { + font-family: "Montserrat Alternates", sans-serif; + display: flex; + justify-content: center; + flex-direction: column; + background-color: rgba(255, 255, 255, 0.9); + gap: 1rem; + width: calc(50% - 2rem); + text-align: justify; + margin: 0.063rem; + padding: 1rem; + border-radius: 1.25rem; + color: black; +} + +.infoMovie { + font-family: "Montserrat Alternates", sans-serif; + color: #000; + display: flex; + justify-content: center; + flex-direction: column; + background-color: rgba(255, 255, 255, 0.9); + gap: 1rem; + width: calc(50% - 2rem); + text-align: justify; + margin: 0.063rem; + padding: 1rem; + border-radius: 1.25rem; + color: black; + image-rendering: 1rem; +} + +footer { + background-color: rgba(255, 255, 255, 0.5); + color: #000; + margin-top: 10px; + margin-bottom: 10px; + padding: 2%; + text-align: center; +} + +#root { + margin-top: 32px; + margin-bottom: 64px; + max-width: 1400px; + margin-left: auto; + margin-right: auto; +} diff --git a/src/views/Peliculas.js b/src/views/Peliculas.js index 8fcd6b07..daf109a5 100644 --- a/src/views/Peliculas.js +++ b/src/views/Peliculas.js @@ -2,19 +2,19 @@ import data from "../data/dataset.js"; import { cardMovie } from "../components/tarjetaPelicula.js"; import { createHeader } from "../components/header.js"; -export const Films = (id) => { - console.log(id); +export const Films = (props) => { + console.log(props.id); const div = document.createElement("div"); const header = createHeader(); div.appendChild(header); - const selectMovie = data.find((movie) => movie.id === URLSearchParams.id); + const selectMovie = data.find((movie) => movie.id === props.id); console.log(selectMovie); - /*if (selectMovie) { + if (selectMovie) { div.appendChild(cardMovie(selectMovie)); } else { - div.inneHTML = div.innerHTML = `

Película no encontrada

`;i - }*/ + div.inneHTML = div.innerHTML = `

Película no encontrada

`; + } return div; }; diff --git a/src/views/home.js b/src/views/home.js index 9cb98821..e3aa55ea 100644 --- a/src/views/home.js +++ b/src/views/home.js @@ -1,6 +1,8 @@ import data from "../data/dataset.js"; import { card } from "../Components/Card.js"; import { createHeader } from "../components/header.js"; +import { createFooter } from "../Components/footer.js"; +//import {filterData, sortData} from "../Components/filtroyorden.js"; export const Home = () => { const div = document.createElement("div"); @@ -9,10 +11,12 @@ export const Home = () => { div.appendChild(header); const subtitle = document.createElement ("h2") - subtitle.innerHTML = "bienvenido a dreamland, una página para fanaticos de Disney y Pixar donde puedes chatear con tus películas favoritas"; + subtitle.innerHTML = "¡Bienvenidos fans de Disney y Pixar! Explora nuestro mágico contenido y descubre las novedades de este fantástico mundo donde puedes chatear con tus películas favoritas"; div.appendChild(subtitle); - + /*const sortSelector = document.createElement("select"); + sortSelector.id = "Nombre";*/ + const showCard = (data) => { const ulElement = document.createElement("ul"); ulElement.classList.add("ulPelis"); @@ -23,8 +27,11 @@ export const Home = () => { return ulElement; }; - div.appendChild(showCard(data)); + + + const footer = createFooter(); + div.appendChild(footer); return div; }; diff --git a/test/apiKey.spec.js b/test/apiKey.spec.js new file mode 100644 index 00000000..f38c9c6e --- /dev/null +++ b/test/apiKey.spec.js @@ -0,0 +1,17 @@ +// test/apiKey.spec.js + +import { getApiKey, setApiKey } from '../src/lib/apiKey.js'; + +describe('getApiKey', () => { + + it('debería devolver el valor de la API Key', () => { + // Desarrolla el test correspondiente aquí + }); +}); + +describe('setApiKey', () => { + + it('debería establecer correctamente la API Key', () => { + // Desarrolla el test correspondiente aquí + }); +}); From 1cee32a55b611204763730101c4b0617b4982f9e Mon Sep 17 00:00:00 2001 From: danimar-g Date: Wed, 28 Aug 2024 21:39:30 -0400 Subject: [PATCH 25/33] arreglo errores --- src/Components/filtroyorden.js | 57 ++++++++++++++++++++++------------ src/style.css | 2 +- src/views/home.js | 5 ++- 3 files changed, 41 insertions(+), 23 deletions(-) diff --git a/src/Components/filtroyorden.js b/src/Components/filtroyorden.js index f881984d..d88c0b1b 100644 --- a/src/Components/filtroyorden.js +++ b/src/Components/filtroyorden.js @@ -1,46 +1,65 @@ -import { filterData, sortData } from "../lib/dataFunctions"; +//import { filterData, sortData } from "../lib/dataFunctions"; +import { card } from "./Card"; +export const filtroyorden = () => { + const div = document.createElement("div"); + div.innerHTML = ` + -const selectoresEpoca = document.querySelector("#epoca"); -const selectoresOrden = document.querySelector("#nombre"); + + +`; -selectoresEpoca.addEventListener("change", (event) => { + const selectoresEpoca = div.querySelector("#epoca"); + + const selectoresOrden = div.querySelector("#nombre"); + + selectoresEpoca.addEventListener("change", (event) => { const valor = event.target.value; let dataFiltrada; if (valor === "0") { dataFiltrada = data; } else { - dataFiltrada = filterData(data, "estreno", valor) + // dataFiltrada = filterData(data, "estreno", valor) } - + const valorOrden = document.getElementById("nombre").value; if (valorOrden !== "orden") { - dataFiltrada = sortData(dataFiltrada, "name", valorOrden); + // dataFiltrada = sortData(dataFiltrada, "name", valorOrden); } - - - const listaFiltrada = renderItems(dataFiltrada); + + const listaFiltrada = card(dataFiltrada); elementos.innerHTML = ""; elementos.appendChild(listaFiltrada); - }); - + selectoresOrden.addEventListener("change", (e) => { const value = e.target.value; let dataOrdenada; if (value === "orden") { dataOrdenada = data; - } else { - dataOrdenada = sortData(data, "name", value); + } else { + // dataOrdenada = sortData(data, "name", value); } - + const valorFiltro = document.getElementById("epoca").value; if (valorFiltro !== "0") { - dataOrdenada = filterData(dataOrdenada, "estreno", valorFiltro); + //dataOrdenada = filterData(dataOrdenada, "estreno", valorFiltro); } - - const listaOrdenada = renderItems(dataOrdenada); + + const listaOrdenada = card(dataOrdenada); elementos.innerHTML = ""; elementos.appendChild(listaOrdenada); }); - \ No newline at end of file + return div; +}; diff --git a/src/style.css b/src/style.css index 77d2b28d..8aa8e376 100644 --- a/src/style.css +++ b/src/style.css @@ -235,7 +235,7 @@ button { flex-direction: column; background-color: rgba(255, 255, 255, 0.9); gap: 1rem; - width: calc(50% - 2rem); + width: 40%; text-align: justify; margin: 0.063rem; padding: 1rem; diff --git a/src/views/home.js b/src/views/home.js index e3aa55ea..46d35d8a 100644 --- a/src/views/home.js +++ b/src/views/home.js @@ -2,7 +2,7 @@ import data from "../data/dataset.js"; import { card } from "../Components/Card.js"; import { createHeader } from "../components/header.js"; import { createFooter } from "../Components/footer.js"; -//import {filterData, sortData} from "../Components/filtroyorden.js"; +import {filtroyorden} from "../Components/filtroyorden.js"; export const Home = () => { const div = document.createElement("div"); @@ -14,8 +14,7 @@ export const Home = () => { subtitle.innerHTML = "¡Bienvenidos fans de Disney y Pixar! Explora nuestro mágico contenido y descubre las novedades de este fantástico mundo donde puedes chatear con tus películas favoritas"; div.appendChild(subtitle); - /*const sortSelector = document.createElement("select"); - sortSelector.id = "Nombre";*/ +div.appendChild(filtroyorden()); const showCard = (data) => { const ulElement = document.createElement("ul"); From 9ac33ff4a3ce9f11fe05e2360af86a7fa2706c0e Mon Sep 17 00:00:00 2001 From: danimar-g Date: Tue, 3 Sep 2024 16:37:12 -0400 Subject: [PATCH 26/33] trabajo apikey con boton --- src/Components/Card.js | 4 +- src/Components/filtroyorden.js | 73 ++++++++++++++++++------------- src/Components/header.js | 20 ++++++--- src/Components/tarjetaPelicula.js | 2 +- src/index.js | 2 +- src/lib/apiKey.js | 4 +- src/lib/openAIApi.js | 24 ++++++++++ src/style.css | 15 ++++--- src/views/api.js | 30 +++++++++++++ src/views/chatUnico | 0 src/views/home.js | 31 +++++++------ test/apiKey.spec.js | 24 ++++++++-- 12 files changed, 161 insertions(+), 68 deletions(-) create mode 100644 src/lib/openAIApi.js create mode 100644 src/views/api.js create mode 100644 src/views/chatUnico diff --git a/src/Components/Card.js b/src/Components/Card.js index 888ce67b..2b20bdce 100644 --- a/src/Components/Card.js +++ b/src/Components/Card.js @@ -26,10 +26,10 @@ export const card = (item) => {
`; - ( liElement.addEventListener('click', () => { + liElement.addEventListener('click', () => { console.log(item.id) navigateTo('/peliculas', {id: item.id}); - })); + }); return liElement; }; diff --git a/src/Components/filtroyorden.js b/src/Components/filtroyorden.js index d88c0b1b..ebfcd623 100644 --- a/src/Components/filtroyorden.js +++ b/src/Components/filtroyorden.js @@ -1,46 +1,59 @@ -//import { filterData, sortData } from "../lib/dataFunctions"; -import { card } from "./Card"; -export const filtroyorden = () => { - const div = document.createElement("div"); - div.innerHTML = ` - +import data from "../data/dataset.js"; +import { filterData, sortData } from "../lib/dataFunctions.js"; +import { card } from "./Card.js"; +export const filtroyorden = (element) => { + const div = document.createElement("selectores"); + div.innerHTML = ` + + - - + + -`; + `; const selectoresEpoca = div.querySelector("#epoca"); const selectoresOrden = div.querySelector("#nombre"); + const showCard = (data) => { + const ulElement = document.createElement("ul"); + ulElement.classList.add("ulPelis"); + + data.forEach((item) => { + ulElement.appendChild(card(item)); + }); + return ulElement; + }; + selectoresEpoca.addEventListener("change", (event) => { const valor = event.target.value; let dataFiltrada; if (valor === "0") { dataFiltrada = data; } else { - // dataFiltrada = filterData(data, "estreno", valor) + dataFiltrada = filterData(data, "estreno", valor); } const valorOrden = document.getElementById("nombre").value; if (valorOrden !== "orden") { - // dataFiltrada = sortData(dataFiltrada, "name", valorOrden); + dataFiltrada = sortData(dataFiltrada, "name", valorOrden); } - const listaFiltrada = card(dataFiltrada); - elementos.innerHTML = ""; - elementos.appendChild(listaFiltrada); + const listaFiltrada = showCard(dataFiltrada); + element.innerHTML = ""; + element.appendChild(listaFiltrada); }); selectoresOrden.addEventListener("change", (e) => { @@ -49,17 +62,17 @@ export const filtroyorden = () => { if (value === "orden") { dataOrdenada = data; } else { - // dataOrdenada = sortData(data, "name", value); + dataOrdenada = sortData(data, "name", value); } const valorFiltro = document.getElementById("epoca").value; if (valorFiltro !== "0") { - //dataOrdenada = filterData(dataOrdenada, "estreno", valorFiltro); + dataOrdenada = filterData(dataOrdenada, "estreno", valorFiltro); } - const listaOrdenada = card(dataOrdenada); - elementos.innerHTML = ""; - elementos.appendChild(listaOrdenada); + const listaOrdenada = showCard(dataOrdenada); + element.innerHTML = ""; + element.appendChild(listaOrdenada); }); return div; -}; +}; \ No newline at end of file diff --git a/src/Components/header.js b/src/Components/header.js index 7d953b8c..7556e446 100644 --- a/src/Components/header.js +++ b/src/Components/header.js @@ -1,9 +1,15 @@ export const createHeader = ()=> { + + const divInicio = document.createElement("div"); + const header = document.createElement('header'); - header.innerHTML = ` - -

Dreamland

- - ` - return header; -} \ No newline at end of file + header.innerHTML = "

Dreamland

"; + + const main = document.createElement("main"); + main.innerHTML= "

¡Bienvenidos fans de Disney y Pixar! Explora nuestro mágico contenido y descubre las novedades de este fantástico mundo donde puedes chatear con tus películas favoritas

"; + + divInicio.appendChild(header); + divInicio.appendChild(main); + + return divInicio; +}; \ No newline at end of file diff --git a/src/Components/tarjetaPelicula.js b/src/Components/tarjetaPelicula.js index d15d609e..7b5e9fb0 100644 --- a/src/Components/tarjetaPelicula.js +++ b/src/Components/tarjetaPelicula.js @@ -4,7 +4,7 @@ export const cardMovie = (item) => { divElement.innerHTML = `
-

${item.name}

+

${item.name}

${item.id}
diff --git a/src/index.js b/src/index.js index acd88788..8c3425b4 100644 --- a/src/index.js +++ b/src/index.js @@ -1,4 +1,4 @@ -import {Home} from './views/Home.js'; +import {Home} from '../views/Home.js'; import {Films} from './views/Peliculas.js'; import { setRootEl, setRoutes, onURLChange } from './router.js'; diff --git a/src/lib/apiKey.js b/src/lib/apiKey.js index 020f64b1..eb21f486 100644 --- a/src/lib/apiKey.js +++ b/src/lib/apiKey.js @@ -1,9 +1,9 @@ // src/lib/apiKey.js export const getApiKey = () => { - // Implementa el código para obtener la API KEY desde Local Storage + return localStorage.getItem('apiKey'); }; export const setApiKey = (key) => { - // Implementa el código para guardar la API KEY en Local Storage + localStorage.setItem('apiKey', key); }; \ No newline at end of file diff --git a/src/lib/openAIApi.js b/src/lib/openAIApi.js new file mode 100644 index 00000000..d889b136 --- /dev/null +++ b/src/lib/openAIApi.js @@ -0,0 +1,24 @@ +// src/lib/openAIApi.js + +// Importa la función para obtener la API KEY desde apiKey.js +import { getApiKey } from './apiKey.js'; + + +export const communicateWithOpenAI = (messages) => { + //Aquí es donde debes implementar la petición con fetch o axios +const apiKey = getApiKey(); + +fetch('https://api.openai.com/v1/chat/completions', { + method: 'POST', + headers: { + "content-Type": "application/json", + Authorization: `Bearer ${apiKey}` + }, + body:JSON.stringify({ + "model": "gpt-4o-mini", + "messages": messages, + "temperature": 0.7 + }) +}) + +}; diff --git a/src/style.css b/src/style.css index 8aa8e376..fb7be445 100644 --- a/src/style.css +++ b/src/style.css @@ -152,10 +152,10 @@ select { font-family: "Montserrat Alternates", sans-serif; font-size: 100%; color: black; - background-color: #fcf0c6; + background-color: #cfeeff; padding: 10px; border: solid; - border-color: #ffd034; + border-color: #9480fb; font-weight: bold; cursor: pointer; cursor: pointer; @@ -165,10 +165,10 @@ select { option { font-size: 100%; color: black; - background-color: #fcf0c6; + background-color: #cfeeff; font-family: "Montserrat Alternates", sans-serif; padding: 10px; - border-color: #ffd034; + border-color: #9480fb; border-width: 3px; border-style: solid; cursor: pointer; @@ -179,11 +179,11 @@ button { font-family: "Montserrat Alternates", sans-serif; font-weight: bold; font-size: 100%; - background-color: #fcf0c6; + background-color: #cfeeff; color: black; padding: 10px; border: solid; - border-color: #ffd034; + border-color: #9480fb; border-width: 3px; border-radius: 20px; cursor: pointer; @@ -212,6 +212,9 @@ button { max-width: 100%; max-height: 100%; } +.contenedorImagen img { + width: 100%; +} .contenedorTextos { display: flex; diff --git a/src/views/api.js b/src/views/api.js new file mode 100644 index 00000000..9b3836ea --- /dev/null +++ b/src/views/api.js @@ -0,0 +1,30 @@ +export const api = () => { + const divApi = document.createElement("div"); + + const apiKeyInput = document.createElement("input"); + apiKeyInput.id = "idInput"; + apiKeyInput.type = "password"; + apiKeyInput.placeholder = "ApiKey"; + apiKeyInput.classList.add("cuadroInput"); + + const elementLabel = document.createElement("label"); + elementLabel.htmlFor = "idInput"; + elementLabel.textContent = "Agrega tu ApiKey: "; + elementLabel.classList.add("cuadroLabel"); + + const saveButton = document.createElement("button"); + saveButton.textContent = "Guardar"; + saveButton.classList.add("saveButton"); + saveButton.addEventListener("click", () => { + const apiKey = apiKeyInput.value; + localStorage.setItem("apiKey", apiKey); + alert("ApiKey guardada exitosamente."); + }); + + divApi.appendChild(elementLabel); + divApi.appendChild(apiKeyInput); + divApi.appendChild(saveButton); + return divApi; + + +}; diff --git a/src/views/chatUnico b/src/views/chatUnico new file mode 100644 index 00000000..e69de29b diff --git a/src/views/home.js b/src/views/home.js index 46d35d8a..2ae5ee5d 100644 --- a/src/views/home.js +++ b/src/views/home.js @@ -1,20 +1,17 @@ -import data from "../data/dataset.js"; +import data from "../data/dataset.js"; import { card } from "../Components/Card.js"; -import { createHeader } from "../components/header.js"; +import { createHeader } from "../components/header.js"; import { createFooter } from "../Components/footer.js"; -import {filtroyorden} from "../Components/filtroyorden.js"; +import { filtroyorden } from "../Components/filtroyorden.js"; +import { api } from "../views/api.js"; -export const Home = () => { - const div = document.createElement("div"); - - const header = createHeader(); - div.appendChild(header); +export const Home = (props) => { - const subtitle = document.createElement ("h2") - subtitle.innerHTML = "¡Bienvenidos fans de Disney y Pixar! Explora nuestro mágico contenido y descubre las novedades de este fantástico mundo donde puedes chatear con tus películas favoritas"; - div.appendChild(subtitle); + const div = document.createElement("div"); + div.appendChild(createHeader()); + div.appendChild(api()); -div.appendChild(filtroyorden()); + const showCard = (data) => { const ulElement = document.createElement("ul"); @@ -25,13 +22,15 @@ div.appendChild(filtroyorden()); }); return ulElement; }; + const element = showCard(data); - div.appendChild(showCard(data)); - + div.appendChild(filtroyorden(element)); + + div.appendChild(element); + + const footer = createFooter(); div.appendChild(footer); return div; }; - - diff --git a/test/apiKey.spec.js b/test/apiKey.spec.js index f38c9c6e..7ff12534 100644 --- a/test/apiKey.spec.js +++ b/test/apiKey.spec.js @@ -5,13 +5,31 @@ import { getApiKey, setApiKey } from '../src/lib/apiKey.js'; describe('getApiKey', () => { it('debería devolver el valor de la API Key', () => { - // Desarrolla el test correspondiente aquí - }); + // Establecemos un valor para la API Key + const mockApiKey = '12345-ABCDE'; + setApiKey(mockApiKey); + + // Comprobamos que getApiKey devuelva el valor correcto + const result = getApiKey(); + expect(result).toBe(mockApiKey); + }); + + it('debería devolver undefined si la API Key no ha sido establecida', () => { + // Comprobamos que getApiKey devuelva undefined cuando no se ha establecido ninguna API Key + const result = getApiKey(); + expect(result).toBeUndefined(); + }); }); describe('setApiKey', () => { it('debería establecer correctamente la API Key', () => { - // Desarrolla el test correspondiente aquí + const mockApiKey = '67890-FGHIJ'; + // Establecemos un valor para la API Key + setApiKey(mockApiKey); + + // Comprobamos que getApiKey devuelva el valor establecido + const result = getApiKey(); + expect(result).toBe(mockApiKey); }); }); From cd42c1d31a551ca080212555feb7075ae91dcca5 Mon Sep 17 00:00:00 2001 From: danimar-g Date: Wed, 4 Sep 2024 01:02:03 -0400 Subject: [PATCH 27/33] chat ia --- src/Components/tarjetaPelicula.js | 55 +++++++++++++++++++++++++++++-- src/lib/apiKey.js | 2 +- src/lib/openAIApi.js | 18 ++++------ src/style.css | 51 ++++++++++++++++++++++++++-- src/views/chatUnico | 0 src/views/chatUnico.js | 19 +++++++++++ 6 files changed, 127 insertions(+), 18 deletions(-) delete mode 100644 src/views/chatUnico create mode 100644 src/views/chatUnico.js diff --git a/src/Components/tarjetaPelicula.js b/src/Components/tarjetaPelicula.js index 7b5e9fb0..12d019df 100644 --- a/src/Components/tarjetaPelicula.js +++ b/src/Components/tarjetaPelicula.js @@ -1,12 +1,16 @@ +import {getContext} from "../views/chatUnico.js" export const cardMovie = (item) => { + + const divContenedor = document.createElement("div"); + divContenedor.classList.add("divContenedor"); const divElement = document.createElement('div'); + divElement.innerHTML = "" divElement.classList.add("infoMovie"); - divElement.innerHTML = `

${item.name}

- ${item.id} + ${item.id}
${item.shortDescription} @@ -21,5 +25,50 @@ export const cardMovie = (item) => {
`; - return divElement; + const divChat = document.createElement("div"); + divChat.classList.add("chatMovie"); + + divChat.innerHTML = ` +
+
+
+ + +
+
+`; +const button = divChat.querySelector("#chatSend"); + button.addEventListener('click', async function () { + const chatHistorial = divChat.querySelector("#chatHistorial"); + const chatMessage = divChat.querySelector("#chatMessage"); + + const message = chatMessage.value.trim(); + if (message) { + // Agregar el mensaje al historial del chat + const userMessageDiv = document.createElement("div"); + userMessageDiv.classList.add("userMessage"); + userMessageDiv.textContent = `Tú: ${message}`; + chatHistorial.appendChild(userMessageDiv); + + // Aquí puedes implementar la lógica para enviar el mensaje y recibir una respuesta + // Ejemplo (ficticio) de respuesta: + const response = await getContext(item.name, message); + + const responseMessageDiv = document.createElement("div"); + responseMessageDiv.classList.add("responseMessage"); + responseMessageDiv.textContent = `Bot: ${response}`; + chatHistorial.appendChild(responseMessageDiv); + + // Limpiar el campo de entrada + chatMessage.value = ''; + + // Desplazar el historial hacia abajo + chatHistorial.scrollTop = chatHistorial.scrollHeight; + } + }); + +divContenedor.appendChild(divElement); +divContenedor.appendChild(divChat); + +return divContenedor; } diff --git a/src/lib/apiKey.js b/src/lib/apiKey.js index eb21f486..f07a4e6e 100644 --- a/src/lib/apiKey.js +++ b/src/lib/apiKey.js @@ -1,4 +1,4 @@ -// src/lib/apiKey.js + export const getApiKey = () => { return localStorage.getItem('apiKey'); diff --git a/src/lib/openAIApi.js b/src/lib/openAIApi.js index d889b136..091d3c13 100644 --- a/src/lib/openAIApi.js +++ b/src/lib/openAIApi.js @@ -1,24 +1,20 @@ -// src/lib/openAIApi.js - -// Importa la función para obtener la API KEY desde apiKey.js import { getApiKey } from './apiKey.js'; - -export const communicateWithOpenAI = (messages) => { +export const communicateWithOpenAI = async (messages) => { //Aquí es donde debes implementar la petición con fetch o axios const apiKey = getApiKey(); - -fetch('https://api.openai.com/v1/chat/completions', { +const response = await fetch('https://api.openai.com/v1/chat/completions', { method: 'POST', headers: { "content-Type": "application/json", Authorization: `Bearer ${apiKey}` }, body:JSON.stringify({ - "model": "gpt-4o-mini", + "model": "gpt-4o", "messages": messages, - "temperature": 0.7 }) -}) - +}); +const data = await response.json(); +console.log(data); +return data.choices[0].message.content; }; diff --git a/src/style.css b/src/style.css index fb7be445..253bb989 100644 --- a/src/style.css +++ b/src/style.css @@ -40,7 +40,7 @@ h3 { margin-top: 0; } -.botonDatos { +/*.botonDatos { cursor: pointer; position: relative; padding: 10px 20px; @@ -96,7 +96,7 @@ h3 { max-width: 37.5rem; margin: 0 auto; padding: 1.25rem; -} +}*/ .datosdisney { list-style-type: none; @@ -246,11 +246,18 @@ button { color: black; } +.divContenedor { + width: 100%; + display: flex; + justify-content: space-around; + margin-left: 0.5rem; + align-items:center; +} .infoMovie { font-family: "Montserrat Alternates", sans-serif; color: #000; display: flex; - justify-content: center; + justify-content: space-around; flex-direction: column; background-color: rgba(255, 255, 255, 0.9); gap: 1rem; @@ -261,6 +268,44 @@ button { border-radius: 1.25rem; color: black; image-rendering: 1rem; + align-items: ; +} + +.imagenDiv { + height: 40rem; + width: auto; +} + +.chatMovie { + border: 1px solid #ccc; + padding: 10px; + width: 300px; +} + +.chatContenedor { + display: flex; + flex-direction: column; + height: 400px; +} + +.chatHistorial { + flex: 1; + border: 1px solid #ddd; + padding: 10px; + overflow-y: auto; +} + +.chatInput { + display: flex; +} + +#chatMessage { + flex: 1; + padding: 5px; +} + +#chatSend { + padding: 5px 10px; } footer { diff --git a/src/views/chatUnico b/src/views/chatUnico deleted file mode 100644 index e69de29b..00000000 diff --git a/src/views/chatUnico.js b/src/views/chatUnico.js new file mode 100644 index 00000000..91a6c6f5 --- /dev/null +++ b/src/views/chatUnico.js @@ -0,0 +1,19 @@ +import { communicateWithOpenAI } from "../lib/openAIApi.js"; + +export async function getContext(name, pregunta, allCharacters) { + let message; + if (!allCharacters) { + message = + "Eres la pelicula " + name + " y responderás según su historia y como si fueras el protagonista, la siguiente pregunta: " + pregunta; + } else { + message = + "Eres una película de disney y pixar donde estarían " + + names + + ", responde personificando a los protagonistas como una voz en conjunto y solo en español"; + } + return await communicateWithOpenAI([{ + role: "user", + content: message} + ]); + +} From 667d9d3a2e095729d8c96a9f94efe5c43a282068 Mon Sep 17 00:00:00 2001 From: danimar-g Date: Thu, 5 Sep 2024 10:57:24 -0400 Subject: [PATCH 28/33] arreglos chat --- src/Components/Card.js | 2 +- src/Components/filtroyorden.js | 7 +++++++ src/index.js | 3 ++- src/lib/openAIApi.js | 31 ++++++++++++++++--------------- src/style.css | 14 ++++++++------ src/views/home.js | 5 ----- 6 files changed, 34 insertions(+), 28 deletions(-) diff --git a/src/Components/Card.js b/src/Components/Card.js index 2b20bdce..acdd5a42 100644 --- a/src/Components/Card.js +++ b/src/Components/Card.js @@ -28,7 +28,7 @@ export const card = (item) => { liElement.addEventListener('click', () => { console.log(item.id) - navigateTo('/peliculas', {id: item.id}); + navigateTo(`/peliculas/${item.id}`); }); return liElement; }; diff --git a/src/Components/filtroyorden.js b/src/Components/filtroyorden.js index ebfcd623..b7bdc211 100644 --- a/src/Components/filtroyorden.js +++ b/src/Components/filtroyorden.js @@ -74,5 +74,12 @@ export const filtroyorden = (element) => { element.innerHTML = ""; element.appendChild(listaOrdenada); }); + + // button.addEventListener("click", () => { + // selectoresEpoca.value = "0"; + // selectoresOrden.value = "orden"; + // // updateList(data); // Muestra todos los datos sin filtros ni orden + // }); + return div; }; \ No newline at end of file diff --git a/src/index.js b/src/index.js index 8c3425b4..ef71fd62 100644 --- a/src/index.js +++ b/src/index.js @@ -6,7 +6,8 @@ import { setRootEl, setRoutes, onURLChange } from './router.js'; // Define your routes and their associated views const routes = { '/': Home, - '/peliculas': Films, + '/peliculas/${item.id}': Films, +'/error': Error, }; diff --git a/src/lib/openAIApi.js b/src/lib/openAIApi.js index 091d3c13..b0486948 100644 --- a/src/lib/openAIApi.js +++ b/src/lib/openAIApi.js @@ -1,20 +1,21 @@ -import { getApiKey } from './apiKey.js'; +import { getApiKey } from "./apiKey.js"; export const communicateWithOpenAI = async (messages) => { - //Aquí es donde debes implementar la petición con fetch o axios -const apiKey = getApiKey(); -const response = await fetch('https://api.openai.com/v1/chat/completions', { - method: 'POST', + //Aquí es donde debes implementar la petición con fetch o axios + const apiKey = getApiKey(); + const response = await fetch("https://api.openai.com/v1/chat/completions", { + method: "POST", headers: { - "content-Type": "application/json", - Authorization: `Bearer ${apiKey}` + "content-Type": "application/json", + Authorization: `Bearer ${apiKey}`, }, - body:JSON.stringify({ - "model": "gpt-4o", - "messages": messages, - }) -}); -const data = await response.json(); -console.log(data); -return data.choices[0].message.content; + body: JSON.stringify({ + model: "gpt-3.5-turbo", + messages: messages, + max_tokens: 150, + }), + }); + const data = await response.json(); + console.log(data); + return data.choices[0].message.content; }; diff --git a/src/style.css b/src/style.css index 253bb989..740fc436 100644 --- a/src/style.css +++ b/src/style.css @@ -278,20 +278,21 @@ button { .chatMovie { border: 1px solid #ccc; - padding: 10px; - width: 300px; + padding: 0.9rem; + width: 25rem; } .chatContenedor { display: flex; flex-direction: column; - height: 400px; + height: 31.25rem; } .chatHistorial { - flex: 1; - border: 1px solid #ddd; - padding: 10px; + flex: 1; + border: 0.3rem solid #7d5ca6; + background-color: rgba(63, 62, 105, 0.9); + padding: 1rem; overflow-y: auto; } @@ -302,6 +303,7 @@ button { #chatMessage { flex: 1; padding: 5px; + color:#000 } #chatSend { diff --git a/src/views/home.js b/src/views/home.js index 2ae5ee5d..d21d7f80 100644 --- a/src/views/home.js +++ b/src/views/home.js @@ -6,13 +6,10 @@ import { filtroyorden } from "../Components/filtroyorden.js"; import { api } from "../views/api.js"; export const Home = (props) => { - const div = document.createElement("div"); div.appendChild(createHeader()); div.appendChild(api()); - - const showCard = (data) => { const ulElement = document.createElement("ul"); ulElement.classList.add("ulPelis"); @@ -28,8 +25,6 @@ export const Home = (props) => { div.appendChild(element); - - const footer = createFooter(); div.appendChild(footer); return div; From 96aa167bb229cd30e273c3bb2853225a96cb961d Mon Sep 17 00:00:00 2001 From: danimar-g Date: Wed, 11 Sep 2024 02:32:46 -0400 Subject: [PATCH 29/33] test y cambios generales --- .eslintrc | 2 +- package-lock.json | 1492 +++++++++++++++++++++++++++-- package.json | 3 +- src/Components/Card.js | 24 +- src/Components/filtroyorden.js | 20 +- src/Components/footer.js | 12 +- src/Components/header.js | 22 +- src/Components/tarjetaPelicula.js | 37 +- src/Data/dataset.js | 912 ++++++++++-------- src/index.html | 39 +- src/index.js | 21 +- src/lib/apiKey.js | 14 +- src/lib/dataFunctions.js | 41 +- src/lib/openAIApi.js | 2 - src/router.js | 34 +- src/style.css | 125 +-- src/views/Peliculas.js | 28 +- src/views/chatUnico.js | 23 +- src/views/home.js | 2 +- test/apiKey.spec.js | 38 +- test/data.js | 420 ++++---- test/datafuntions.spec.js | 56 +- test/openAIApi.spec.js | 50 + 23 files changed, 2416 insertions(+), 1001 deletions(-) create mode 100644 test/openAIApi.spec.js diff --git a/.eslintrc b/.eslintrc index 0dfd1120..5a9d1f2a 100644 --- a/.eslintrc +++ b/.eslintrc @@ -18,5 +18,5 @@ "eqeqeq": "error", "indent": ["error", 2], "import/no-cycle": ["error", { "maxDepth": 1 }] - } + } } \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 456eb7b8..28abd8dd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,6 +15,7 @@ "babel-jest": "^27.0.1", "css": "^3.0.0", "eslint": "^8.3.0", + "eslint-plugin-import": "^2.30.0", "gh-pages": "^3.1.0", "htmlhint": "^1.0.0", "jest": "^27.0.1", @@ -53,9 +54,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz", - "integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz", + "integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==", "dev": true, "engines": { "node": ">=6.9.0" @@ -92,12 +93,12 @@ } }, "node_modules/@babel/generator": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", - "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz", + "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==", "dev": true, "dependencies": { - "@babel/types": "^7.25.0", + "@babel/types": "^7.25.6", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" @@ -203,13 +204,13 @@ } }, "node_modules/@babel/helpers": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz", - "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.6.tgz", + "integrity": "sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==", "dev": true, "dependencies": { "@babel/template": "^7.25.0", - "@babel/types": "^7.25.0" + "@babel/types": "^7.25.6" }, "engines": { "node": ">=6.9.0" @@ -231,12 +232,12 @@ } }, "node_modules/@babel/parser": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz", - "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz", + "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==", "dev": true, "dependencies": { - "@babel/types": "^7.25.2" + "@babel/types": "^7.25.6" }, "bin": { "parser": "bin/babel-parser.js" @@ -281,6 +282,36 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.25.6.tgz", + "integrity": "sha512-sXaDXaJN9SNLymBdlWFA+bjzBhFD617ZaFiY13dGt7TVslVvVgA6fkZOP7Ki3IGElC45lwHdOTrCtKZGVAWeLQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-import-meta": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", @@ -377,6 +408,21 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-top-level-await": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", @@ -393,12 +439,12 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz", - "integrity": "sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.4.tgz", + "integrity": "sha512-uMOCoHVU52BsSWxPOMVv5qKRdeSlPuImUCB2dlPuBSU+W2/ROE7/Zg8F2Kepbk+8yBa68LlRKxO+xgEVWorsDg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -439,16 +485,16 @@ } }, "node_modules/@babel/traverse": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz", - "integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz", + "integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==", "dev": true, "dependencies": { "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.0", - "@babel/parser": "^7.25.3", + "@babel/generator": "^7.25.6", + "@babel/parser": "^7.25.6", "@babel/template": "^7.25.0", - "@babel/types": "^7.25.2", + "@babel/types": "^7.25.6", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -457,9 +503,9 @@ } }, "node_modules/@babel/types": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz", - "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz", + "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==", "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.24.8", @@ -1316,6 +1362,12 @@ "node": ">= 8" } }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true + }, "node_modules/@sinonjs/commons": { "version": "1.8.6", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", @@ -1417,13 +1469,19 @@ "@types/istanbul-lib-report": "*" } }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, "node_modules/@types/node": { - "version": "22.0.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.0.2.tgz", - "integrity": "sha512-yPL6DyFwY5PiMVEwymNeqUTKsDczQBJ/5T7W/46RwLU/VH+AA8aT5TZkvBviLKLbbm0hlfftEkGrNzfRk/fofQ==", + "version": "22.5.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.4.tgz", + "integrity": "sha512-FDuKUJQm/ju9fT/SeX/6+gBzoPzlVCzfzmGkwKvRHQVxi4BntVbyIwf6a4Xn62mrvndLiml6z/UBXIdEVjQLXg==", "dev": true, "dependencies": { - "undici-types": "~6.11.1" + "undici-types": "~6.19.2" } }, "node_modules/@types/prettier": { @@ -1678,6 +1736,42 @@ "sprintf-js": "~1.0.2" } }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array-union": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", @@ -1699,6 +1793,84 @@ "node": ">=0.10.0" } }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/async": { "version": "2.6.4", "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", @@ -1726,6 +1898,21 @@ "node": ">= 4.5.0" } }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/babel-jest": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", @@ -1850,23 +2037,26 @@ } }, "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz", + "integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==", "dev": true, "dependencies": { "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5" }, "peerDependencies": { "@babel/core": "^7.0.0" @@ -2036,6 +2226,25 @@ "node": ">= 0.8" } }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -2055,9 +2264,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001646", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001646.tgz", - "integrity": "sha512-dRg00gudiBDDTmUhClSdv3hqRfpbOnU28IpI1T6PBTLWa+kOj0681C8uML3PifYfREuBrVjDGhL3adYpBT6spw==", + "version": "1.0.30001660", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001660.tgz", + "integrity": "sha512-GacvNTTuATm26qC74pt+ad1fW15mlQ/zuTzzY1ZoIzECTP8HURDfF43kNxPgf7H1jmelCBQTTbBNxdSXOA7Bqg==", "dev": true, "funding": [ { @@ -2198,9 +2407,9 @@ } }, "node_modules/cjs-module-lexer": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz", - "integrity": "sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.1.tgz", + "integrity": "sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==", "dev": true }, "node_modules/cli-boxes": { @@ -2491,13 +2700,64 @@ "node": ">=14" } }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/debug": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", - "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "dev": true, "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -2553,6 +2813,40 @@ "node": ">=0.10.0" } }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -2612,9 +2906,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.4.tgz", - "integrity": "sha512-orzA81VqLyIGUEA77YkVA1D+N+nNfl2isJVjjmOyrlxuooZ19ynb+dOlaDTqd/idKRS9lDCSBmtzM+kyCsMnkA==", + "version": "1.5.18", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.18.tgz", + "integrity": "sha512-1OfuVACu+zKlmjsNdcJuVQuVE61sZOLbNM4JAQ1Rvh6EOj0/EUKhMJjRH73InPlXSh8HIJk1cVZ8pyOV/FMdUQ==", "dev": true }, "node_modules/email-addresses": { @@ -2662,10 +2956,143 @@ "is-arrayish": "^0.2.1" } }, + "node_modules/es-abstract": { + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, "engines": { "node": ">=6" @@ -2756,16 +3183,115 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.11.0.tgz", + "integrity": "sha512-gbBE5Hitek/oG6MUVj6sFuzEjA/ClzNflVrLovHi/JgLdC7fiN5gLAY1WIPW1a0V5I999MnsrvVrCOGmmVqDBQ==", + "dev": true, + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.30.0.tgz", + "integrity": "sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw==", + "dev": true, + "dependencies": { + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.8", + "array.prototype.findlastindex": "^1.2.5", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.9.0", + "hasown": "^2.0.2", + "is-core-module": "^2.15.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.0", + "semver": "^6.3.1", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { @@ -3236,6 +3762,15 @@ "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", "dev": true }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, "node_modules/form-data": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", @@ -3293,6 +3828,33 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -3311,6 +3873,25 @@ "node": "6.* || 8.* || >= 10.*" } }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/get-package-type": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", @@ -3332,6 +3913,23 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/get-symbol-description": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/gh-pages": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-3.2.3.tgz", @@ -3396,6 +3994,22 @@ "node": ">=4" } }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/globby": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", @@ -3412,6 +4026,18 @@ "node": ">=0.10.0" } }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", @@ -3424,6 +4050,15 @@ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -3433,6 +4068,57 @@ "node": ">=4" } }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -3625,9 +4311,9 @@ } }, "node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, "engines": { "node": ">= 4" @@ -3709,16 +4395,86 @@ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, + "node_modules/internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-core-module": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", - "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", "dev": true, "dependencies": { "hasown": "^2.0.2" @@ -3730,6 +4486,36 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dev": true, + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-docker": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", @@ -3784,6 +4570,18 @@ "node": ">=0.10.0" } }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -3793,6 +4591,21 @@ "node": ">=0.12.0" } }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-path-inside": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", @@ -3820,16 +4633,92 @@ "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", "dev": true }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, "engines": { - "node": ">=8" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "dev": true, + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-typedarray": { @@ -3838,6 +4727,18 @@ "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", "dev": true }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-wsl": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", @@ -3850,6 +4751,12 @@ "node": ">=8" } }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -6159,9 +7066,9 @@ "dev": true }, "node_modules/micromatch": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", - "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "dependencies": { "braces": "^3.0.3", @@ -6223,9 +7130,9 @@ } }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, "node_modules/natural-compare": { @@ -6333,6 +7240,94 @@ "node": ">=0.10.0" } }, + "node_modules/object-inspect": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.values": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/on-headers": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", @@ -6516,9 +7511,9 @@ "dev": true }, "node_modules/picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", + "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", "dev": true }, "node_modules/picomatch": { @@ -6584,6 +7579,15 @@ "node": ">=8" } }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -6709,6 +7713,24 @@ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/registry-auth-token": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", @@ -6857,12 +7879,47 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/safe-array-concat": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, + "node_modules/safe-regex-test": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-regex": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -6986,6 +8043,38 @@ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -7007,6 +8096,24 @@ "node": ">=8" } }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", @@ -7116,9 +8223,9 @@ } }, "node_modules/string-width/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, "engines": { "node": ">=12" @@ -7142,6 +8249,55 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, + "node_modules/string.prototype.trim": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -7395,6 +8551,39 @@ "node": ">=0.10.0" } }, + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dev": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/tsconfig-paths/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -7428,6 +8617,79 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/typed-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", @@ -7437,10 +8699,25 @@ "is-typedarray": "^1.0.0" } }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/undici-types": { - "version": "6.11.1", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.11.1.tgz", - "integrity": "sha512-mIDEX2ek50x0OlRgxryxsenE5XaQD4on5U2inY7RApK3SOJpofyw7uW2AyfMKkhAxXIceo2DeWGVGwyvng1GNQ==", + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", "dev": true }, "node_modules/universalify": { @@ -7647,6 +8924,41 @@ "node": ">= 8" } }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/widest-line": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", @@ -7689,9 +9001,9 @@ } }, "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, "engines": { "node": ">=12" diff --git a/package.json b/package.json index 25f2001e..cc0038cb 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ "babel-jest": "^27.0.1", "css": "^3.0.0", "eslint": "^8.3.0", + "eslint-plugin-import": "^2.30.0", "gh-pages": "^3.1.0", "htmlhint": "^1.0.0", "jest": "^27.0.1", @@ -36,4 +37,4 @@ "version": "9.1.1", "commit": "1843c213affffa12aa456fa8842b6d28f97de2d3" } -} \ No newline at end of file +} diff --git a/src/Components/Card.js b/src/Components/Card.js index acdd5a42..17095fc9 100644 --- a/src/Components/Card.js +++ b/src/Components/Card.js @@ -1,13 +1,13 @@ import { navigateTo } from "../router.js"; export const card = (item) => { - const liElement = document.createElement('li'); - liElement.classList.add("tarjeta"); - liElement.setAttribute("itemscope",""); - liElement.setAttribute("itemtype", ""); - liElement.setAttribute("data-id", item.id); + const liElement = document.createElement("li"); + liElement.classList.add("tarjeta"); + liElement.setAttribute("itemscope", ""); + liElement.setAttribute("itemtype", ""); + liElement.setAttribute("data-id", item.id); - liElement.innerHTML = ` + liElement.innerHTML = `

${item.name}

@@ -25,11 +25,9 @@ export const card = (item) => {
`; - - liElement.addEventListener('click', () => { - console.log(item.id) - navigateTo(`/peliculas/${item.id}`); - }); - return liElement; -}; + liElement.addEventListener("click", () => { + navigateTo("/pelicula", { id: item.id }); + }); + return liElement; +}; diff --git a/src/Components/filtroyorden.js b/src/Components/filtroyorden.js index b7bdc211..dfe7c1d3 100644 --- a/src/Components/filtroyorden.js +++ b/src/Components/filtroyorden.js @@ -2,6 +2,12 @@ import data from "../data/dataset.js"; import { filterData, sortData } from "../lib/dataFunctions.js"; import { card } from "./Card.js"; export const filtroyorden = (element) => { + const updateList = (data, containerElement) => { + const lista = showCard(data); + containerElement.innerHTML = ""; // Limpia el contenido previo + containerElement.appendChild(lista); // Añade la nueva lista de datos + }; + const div = document.createElement("selectores"); div.innerHTML = `
- ` - return footer; -} \ No newline at end of file + `; + return footer; +}; diff --git a/src/Components/header.js b/src/Components/header.js index 7556e446..a7bb4849 100644 --- a/src/Components/header.js +++ b/src/Components/header.js @@ -1,15 +1,15 @@ -export const createHeader = ()=> { +export const createHeader = () => { + const divInicio = document.createElement("div"); - const divInicio = document.createElement("div"); + const header = document.createElement("header"); + header.innerHTML = "

Dreamland

"; - const header = document.createElement('header'); - header.innerHTML = "

Dreamland

"; + const main = document.createElement("main"); + main.innerHTML = + "

¡Bienvenidos fans de Disney y Pixar! Explora nuestro mágico contenido y descubre las novedades de este fantástico mundo donde puedes chatear con tus películas favoritas

"; - const main = document.createElement("main"); - main.innerHTML= "

¡Bienvenidos fans de Disney y Pixar! Explora nuestro mágico contenido y descubre las novedades de este fantástico mundo donde puedes chatear con tus películas favoritas

"; - - divInicio.appendChild(header); - divInicio.appendChild(main); + divInicio.appendChild(header); + divInicio.appendChild(main); - return divInicio; -}; \ No newline at end of file + return divInicio; +}; diff --git a/src/Components/tarjetaPelicula.js b/src/Components/tarjetaPelicula.js index 12d019df..9c3c654b 100644 --- a/src/Components/tarjetaPelicula.js +++ b/src/Components/tarjetaPelicula.js @@ -1,12 +1,11 @@ -import {getContext} from "../views/chatUnico.js" +import { getContext } from "../views/chatUnico.js"; export const cardMovie = (item) => { - const divContenedor = document.createElement("div"); - divContenedor.classList.add("divContenedor"); - const divElement = document.createElement('div'); - divElement.innerHTML = "" - divElement.classList.add("infoMovie"); - divElement.innerHTML = ` + divContenedor.classList.add("divContenedor"); + const divElement = document.createElement("div"); + divElement.innerHTML = ""; + divElement.classList.add("infoMovie"); + divElement.innerHTML = `

${item.name}

@@ -25,10 +24,10 @@ export const cardMovie = (item) => {
`; - const divChat = document.createElement("div"); - divChat.classList.add("chatMovie"); + const divChat = document.createElement("div"); + divChat.classList.add("chatMovie"); - divChat.innerHTML = ` + divChat.innerHTML = `
@@ -37,8 +36,8 @@ export const cardMovie = (item) => {
`; -const button = divChat.querySelector("#chatSend"); - button.addEventListener('click', async function () { + const button = divChat.querySelector("#chatSend"); + button.addEventListener("click", async function () { const chatHistorial = divChat.querySelector("#chatHistorial"); const chatMessage = divChat.querySelector("#chatMessage"); @@ -52,23 +51,23 @@ const button = divChat.querySelector("#chatSend"); // Aquí puedes implementar la lógica para enviar el mensaje y recibir una respuesta // Ejemplo (ficticio) de respuesta: - const response = await getContext(item.name, message); - + const response = await getContext(item.name, message); + const responseMessageDiv = document.createElement("div"); responseMessageDiv.classList.add("responseMessage"); responseMessageDiv.textContent = `Bot: ${response}`; chatHistorial.appendChild(responseMessageDiv); // Limpiar el campo de entrada - chatMessage.value = ''; + chatMessage.value = ""; // Desplazar el historial hacia abajo chatHistorial.scrollTop = chatHistorial.scrollHeight; } }); -divContenedor.appendChild(divElement); -divContenedor.appendChild(divChat); + divContenedor.appendChild(divElement); + divContenedor.appendChild(divChat); -return divContenedor; -} + return divContenedor; +}; diff --git a/src/Data/dataset.js b/src/Data/dataset.js index 7e710f83..dbe2d558 100644 --- a/src/Data/dataset.js +++ b/src/Data/dataset.js @@ -1,410 +1,504 @@ export default [ - { - "id": "Disney-Elemental", - "name": "Elemental", - "shortDescription": "Explora un mundo donde los elementos naturales cobran vida y coexisten en una vibrante ciudad.", - "description": "Seguimos la historia de Ember, una joven de fuego, y Wade, un chico de agua, que provienen de mundos opuestos. A pesar de sus diferencias, desarrollan una amistad única que desafía las convenciones sociales de su entorno. A medida que su vínculo se fortalece, Ember y Wade descubren que las diferencias que los separan también pueden ser la clave para superar desafíos personales y comunitarios. La película presenta un viaje emocional y visualmente espectacular que celebra la diversidad y la aceptación.", - "imageUrl": "https://es.web.img3.acsta.net/pictures/23/05/17/10/28/2036083.jpg", - "facts": { - "estreno": "2023", - "generoPelicula": "Aventura, Fantasía", - "clasificacionPelicula": "Diversidad", - "clasificPublico": "7.1/10", - "tiempoDuracion": "101 minutos", - }, - "extraInfo": { - "curiosidades": "Para crear el efecto visual del personaje de Ember, el equipo de animación desarrolló nuevas técnicas para capturar la fluidez y el dinamismo del fuego de una manera realista y expresiva." - } - }, - { - "id": "pixar-up", - "name": "UP", - "shortDescription": "Aventuras emocionantes de un anciano y un niño explorador en una casa voladora impulsada por globos.", - "description": "Up narra la historia de Carl Fredricksen, un viudo de edad avanzada decidido a cumplir la promesa que le hizo a su difunta esposa. Con ingenio y determinación, Carl ata miles de globos a su casa y emprende un viaje épico hacia las remotas tierras de América del Sur. Pero su plan se complica cuando descubre que un inesperado pasajero, Russell, un explorador juvenil, se ha colado a bordo. Juntos, enfrentan peligros inimaginables y descubren que la aventura más grande de todas es la amistad.", - "imageUrl": "https://www.funeralnatural.net/sites/default/files/pelicula/imagen/upcartel.jpg", - "facts": { - "estreno": "2009", - "generoPelicula": "Aventura, Comedia, Drama", - "clasificacionPelicula": "Perseverancia", - "clasificPublico": "8.3/10", - "tiempoDuracion": "96 minutos", - }, - "extraInfo": { - "curiosidades": "La casa voladora de Carl Fredricksen está inspirada en la casa real de los hermanos Ellie y Carl, dos hermanos que crecieron en la ciudad de Los Ángeles, California." - } - }, - { - "id": "turning-red", - "name": "Turning Red", - "shortDescription": "Una divertida y emotiva historia sobre la adolescencia y el poder de la amistad.", - "description": "'Turning Red' es una encantadora película de Pixar que explora la vida de Mei Lee, una joven que lidia con los altibajos de la adolescencia mientras experimenta una transformación inesperada en un panda rojo cuando se emociona demasiado. Con un enfoque fresco y humorístico, la película aborda temas universales como la identidad, la familia y la aceptación personal. La animación es vibrante y cautivadora, complementada por una banda sonora vibrante que realza la narrativa. Turning Red es una joya animada que no solo entretiene, sino que también deja mensajes significativos sobre la autoaceptación y el poder de la amistad.", - "imageUrl": "https://m.media-amazon.com/images/I/81equRsw8JL._AC_UF894,1000_QL80_.jpg", - "facts": { - "estreno": "2022", - "generoPelicula": "Comedia, Fantasía", - "clasificacionPelicula": "Autoaceptación", - "clasificPublico": "7/10", - "tiempoDuracion": "100 minutos", - }, - "extraInfo": { - "curiosidades":"Turning Red es la primera película de Pixar dirigida por una directora mujer, Domee Shi, quien anteriormente ganó un Premio de la Academia por el cortometraje Bao." - } - }, - { - "id": "coco-pelicula", - "name": "Coco", - "shortDescription": "Una celebración musical y visual que explora la importancia de la familia y la memoria.", - "description": "Coco cuenta la historia de Miguel, un niño mexicano con grandes sueños musicales en un hogar donde la música está prohibida. En el Día de los Muertos, Miguel se embarca en un viaje extraordinario al mundo de los muertos para descubrir la verdad sobre su familia y su pasión por la música. Con impresionantes visuales y una banda sonora conmovedora, la película celebra la cultura mexicana y enseña lecciones sobre el amor, el legado y la importancia de recordar a nuestros seres queridos.", - "imageUrl": "https://es.web.img2.acsta.net/pictures/17/09/14/10/49/2019727.jpg", - "facts": { - "estreno": "2017", - "generoPelicula": "Aventura, Fantasía", - "clasificacionPelicula": "Familia", - "clasificPublico": "8.4/10", - "tiempoDuracion": "105 minutos", - }, - "extraInfo": { - "curiosidades":"Coco fue elogiada por su representación auténtica de la cultura mexicana, desde sus tradiciones hasta la música mariachi. Ganó dos Premios de la Academia, incluyendo Mejor Película Animada y Mejor Canción Original por Recuerdame." - } - }, - { - "id": "Ratatouille-2007", - "name": "Ratatouille", - "shortDescription": "Una encantadora historia sobre un ratón con un paladar excepcional y grandes sueños culinarios.", - "description": "En Ratatouille conocemos a Remy, un apasionado ratón que sueña con convertirse en un chef de renombre en París, a pesar de las expectativas y prejuicios que enfrenta por ser un roedor. Con la ayuda de Linguini, un joven empleado de cocina, Remy demuestra que el talento y la determinación no conocen límites, mientras lucha por hacer realidad su sueño gastronómico. La película explora temas de perseverancia, amistad y la importancia de seguir nuestras pasiones, sin importar las adversidades ya que 'cualquiera puede cocinar'.", - "imageUrl": "https://lumiere-a.akamaihd.net/v1/images/p_ratatouille_19736_0814231f.jpeg", - "facts": { - "estreno": "2007", - "generoPelicula": "Comedia, Drama", - "clasificacionPelicula": "Superación", - "clasificPublico": "8.1/10", - "tiempoDuracion": "111 minutos", - }, - "extraInfo": { - "curiosidades": "Los creadores de Ratatouille trabajaron estrechamente con chefs renombrados para capturar de manera auténtica el ambiente y los detalles de la cocina parisina, elevando la experiencia visual y emocional de la película." - } - }, - { - "id": "Walle-2008", - "name": "Wall-e", - "shortDescription": "Un robot solitario descubre el amor y la esperanza en un futuro distópico. Aventura encantadora y ecológica que inspira", - "description": "Seguimos a Wall-e, un pequeño robot diseñado para limpiar un planeta Tierra abandonado y cubierto de basura. Durante siglos, Wall-e ha desarrollado una personalidad única y un gran sentido de curiosidad. Todo cambia cuando conoce a EVE, una sonda enviada desde el espacio con una misión misteriosa. Juntos, Wall-e y EVE emprenden un viaje intergaláctico que desafía las expectativas y revela la importancia de la conexión humana y el cuidado del medio ambiente. Esta obra maestra de animación combina humor, emoción y reflexión sobre el futuro de la humanidad.", - "imageUrl": "https://es.web.img2.acsta.net/pictures/14/04/30/10/41/026995.jpg", - "facts": { - "estreno": "2008", - "generoPelicula": "Aventura, Ciencia ficción", - "clasificacionPelicula": "Esperanza", - "clasificPublico": "8.4/10", - "tiempoDuracion": "98 minutos", - }, - "extraInfo": { - "curiosidades": "Wall-e cuenta con una narrativa visual rica y detallada que permite a la historia ser contada con un mínimo diálogo durante la primera parte de la película, mostrando la maestría de Pixar en la animación y la narración visual." - } - }, - { - "id": "buscando-dory", - "name": "Buscando a Dory", - "shortDescription": "La inolvidable pez azul con problemas de memoria emprende una nueva aventura para encontrar a su familia.", - "description": "la amigable pez azul con pérdida de memoria a corto plazo, Dory, se embarca en una emocionante misión para reunirse con su familia, de la cual apenas tiene recuerdos fragmentados. Con la ayuda de sus amigos Marlin y Nemo, Dory cruza los océanos enfrentando desafíos y haciendo nuevos amigos, mientras descubre la importancia del hogar, la perseverancia y la autoaceptación. La película, llena de humor y ternura, captura la esencia del espíritu aventurero de Pixar y deja un mensaje conmovedor sobre el poder del amor y la familia.", - "imageUrl": "https://e1.pxfuel.com/desktop-wallpaper/228/188/desktop-wallpaper-finding-dory-poster-2-amazing-posters-fluke-movie.jpg", - "facts": { - "estreno": "2016", - "generoPelicula": "Aventura, Comedia", - "clasificacionPelicula": "Resiliencia", - "clasificPublico": "7.4/10", - "tiempoDuracion": "97 minutos", - }, - "extraInfo": { - "curiosidades": "Ellen DeGeneres, la voz de Dory, expresó su alegría de volver a interpretar al personaje después de 13 años desde la película original Buscando a Nemo (2003)." - } - }, - { - "id": "intensamente-2015", - "name": "Intensamente", - "shortDescription": "Explora las emociones humanas a través de la historia de Riley y las cinco emociones personificadas que guían su vida.", - "description": "Riley, una niña que atraviesa cambios importantes en su vida familiar al mudarse a una nueva ciudad. La historia se desarrolla dentro de su mente, donde sus emociones personificadas - Alegría, Tristeza, Miedo, Furia y Asco - trabajan juntas en la central de control emocional para guiar sus acciones y decisiones. A medida que Riley navega por los desafíos de crecer, las emociones aprenden lecciones valiosas sobre la importancia de la empatía, el equilibrio emocional y la aceptación de la tristeza como parte integral de la vida.", - "imageUrl": "https://mx.web.img3.acsta.net/pictures/17/08/07/21/43/466493.jpg", - "facts": { - "estreno": "2015", - "generoPelicula": "Aventura, Comedia, Drama", - "clasificacionPelicula": "Empatía", - "clasificPublico": "8/10", - "tiempoDuracion": "95 minutos", - }, - "extraInfo": { - "curiosidades": "Intensamente fue aclamada por su representación precisa de la psicología emocional y ganó el Premio de la Academia a la Mejor Película Animada en 2016." - } - }, - { - "id": "toy-story", - "name": "Toy Story", - "shortDescription": "Un grupo de juguetes que cobran vida cuando los humanos no los ven, destacando la amistad y la lealtad.", - "description": "La historia gira en torno a Woody, un vaquero de juguete celoso de su posición como el favorito de su dueño, Andy, y Buzz Lightyear, un moderno juguete espacial recién llegado que desafía la autoridad de Woody. A través de una serie de eventos, ambos juguetes aprenden sobre la amistad, la lealtad y el valor de aceptarse mutuamente. La película no solo estableció el estándar para la animación digital, sino que también tocó los corazones de generaciones con su ingeniosa narrativa y personajes entrañables.", - "imageUrl": "https://es.web.img3.acsta.net/pictures/14/03/17/10/20/509771.jpg", - "facts": { - "estreno": "1995", - "generoPelicula": "Aventura, Comedia", - "clasificacionPelicula": "Amistad", - "clasificPublico": "8.3/10", - "tiempoDuracion": "81 minutos", - }, - "extraInfo": { - "curiosidades": "Toy Stoy fue un éxito instantáneo y generó una franquicia exitosa que incluye tres secuelas más y varios cortometrajes. Fue la primera película de Pixar y la primera película animada en la historia en ser nominada para un Premio Óscar a la Mejor Guión Original." - } - }, - { - "id": "los-increibles", - "name": "Los Increíbles", - "shortDescription": "Una familia de superhéroes se une para salvar al mundo y redescubrir su propia grandeza.", - "description": "En Los Increíbles, seguimos a la familia Parr: Bob, Helen, Violeta, Dash y Jack-Jack, quienes llevan una vida normal y oculta bajo el programa de protección a testigos debido a las leyes que prohíben las actividades superhumanas. Sin embargo, cuando surge una nueva amenaza que pone en peligro al mundo, la familia debe unirse y redescubrir sus habilidades únicas para salvar el día. La película combina acción emocionante con temas de familia, autoaceptación y la importancia de abrazar nuestras fortalezas individuales.", - "imageUrl": "https://cdn.hobbyconsolas.com/sites/navi.axelspringer.es/public/media/image/2018/04/increibles.jpg", - "facts": { - "estreno": "2004", - "generoPelicula": "Aventura, Acción", - "clasificacionPelicula": "Unidad", - "clasificPublico": "8/10", - "tiempoDuracion": "115 minutos", - }, - "extraInfo": { - "curiosidades": "El director de Los Increíbles, Brad Bird, también prestó su voz al personaje de Edna Moda, la excéntrica y talentosa diseñadora de trajes de superhéroe." - } - }, - { - "id": "soul-2020", - "name": "Soul", - "shortDescription": "Descubre el significado de la vida a través de los ojos de un músico apasionado.", - "description": "Joe Gardner, es un talentoso pianista de jazz cuya pasión por la música es palpable. Cuando tiene la oportunidad de realizar su sueño tocando en un club de renombre, un giro del destino lo lleva a un viaje inesperado entre el mundo terrenal y el 'Gran Antes', donde las almas encuentran su chispa antes de nacer. Junto a 22, un alma cínica que aún no encuentra su propósito, Joe aprende lecciones profundas sobre la vida, el propósito y la importancia de cada experiencia que nos moldea como individuos.", - "imageUrl": "https://myhotposters.com/cdn/shop/products/mL4925_1024x1024.jpg", - "facts": { - "estreno": "2020", - "generoPelicula": "Aventura, Comedia, Drama", - "clasificacionPelicula": "Propósito de vida", - "clasificPublico": "8.1/10", - "tiempoDuracion": "100 minutos", - }, - "extraInfo": { - "curiosidades": "Soul fue alabada por su representación de la cultura afroamericana y por ser una exploración profunda de temas existenciales en una película animada de Pixar." - } - }, - { - "id": "viaje-arlo", - "name": "El viaje de Arlo", - "shortDescription": "Un dinosaurio y un niño humano forjan una amistad en una épica aventura prehistórica. Una historia conmovedora y emocionante.", - "description": "En el 'Viaje de Arlo', exploramos un mundo alternativo donde los dinosaurios no se extinguieron y conviven con los humanos. Arlo, un dinosaurio joven y temeroso, se separa de su familia y emprende un viaje épico para encontrar el camino de regreso a casa. En el camino, forma una inesperada amistad con Spot, un niño humano salvaje, y juntos enfrentan peligros naturales y desafíos emocionales que les permiten crecer y descubrir sus verdaderas fortalezas. La película, con impresionantes paisajes y personajes entrañables, invita a reflexionar sobre el coraje, la amistad y el valor de enfrentar nuestros miedos.", - "imageUrl": "https://www.lavanguardia.com/peliculas-series/images/movie/poster/2015/11/w1280/1WKI6PM79XjK2LVS1B4yoG3wNHw.jpg", - "facts": { - "estreno": "2015", - "generoPelicula": "Aventura, Drama", - "clasificacionPelicula": "Superación", - "clasificPublico": "6.7/10", - "tiempoDuracion": "93 minutos", - }, - "extraInfo": { - "curiosidades": "El viaje de Arlo, es el primer largometraje de Pixar en presentar personajes y escenarios completamente generados por computadora, sin necesidad de fondos en 2D." - } - }, - { - "id": "lilo-stitch", - "name": "Lilo y Stitch", - "shortDescription": "Una niña hawaiana y un alienígena travieso descubren el verdadero significado de la familia.", - "description": "Lilo & Stitch narra la conmovedora historia de Lilo, una niña hawaiana única, y Stitch, un alienígena travieso. Ambientada en las soleadas costas de Hawái, la película celebra la importancia de la familia y la aceptación. Con su animación vibrante y memorable banda sonora, captura tanto la esencia de la cultura hawaiana como la bondad universal. 'Lilo & Stitch' nos recuerda que la verdadera familia a menudo viene en formas inesperadas, enseñando lecciones de amor, amistad y comprensión en un viaje emocional que sigue siendo querido por generaciones.", - "imageUrl": "https://www.ecartelera.com/carteles/5100/5197/002_m.jpg", - "facts": { - "estreno": "2002", - "generoPelicula": "Aventura, Comedia, Ciencia ficción", - "clasificacionPelicula": "Familia", - "clasificPublico": "7.2/10", - "tiempoDuracion": "85 minutos", - }, - "extraInfo": { - "curiosidades": "'Lilo y Stitch' es conocida por su enfoque en la cultura y las tradiciones de Hawái, así como por su banda sonora que incluye música hawaiana auténtica mezclada con canciones pop contemporáneas" - } - }, - { - "id": "atlantis", - "name": "Atlantis: El Imperio Perdido", - "shortDescription": " Una emocionante expedición hacia un misterioso mundo subacuático en busca de un antiguo imperio perdido.", - "description": "Atlantis: El Imperio Perdido es una emocionante película de Disney que sigue a Milo Thatch, un cartógrafo y lingüista, en su búsqueda para encontrar la legendaria ciudad de Atlantis. Acompañado por un variopinto grupo de exploradores, Milo se embarca en una peligrosa expedición submarina. La película destaca por su impresionante animación, inspirada en el estilo visual de cómics, y su intrigante mezcla de mitología y ciencia ficción. Con una historia llena de acción, descubrimientos y valores como la amistad y la perseverancia, Atlantis es una aventura que inspira y cautiva a espectadores de todas las edades.", - "imageUrl": "https://www.aceprensa.com/wp-content/uploads/2001/11/10865-0.jpg", - "facts": { - "estreno": "2001", - "generoPelicula": "Aventura, Ciencia ficción", - "clasificacionPelicula": "Descubrimiento", - "clasificPublico": "6.9/10", - "tiempoDuracion": "96 minutos", - }, - "extraInfo": { - "curiosidades": "'Atlantis: El Imperio Perdido' fue una de las primeras películas de Disney en utilizar animación tradicional combinada con gráficos generados por computadora para crear ambientes submarinos espectaculares." - } - }, - { - "id": "big-hero", - "name": "Big Hero 6", - "shortDescription": "Una historia emocionante sobre un joven prodigio y su robot inflable en una ciudad futurista.", - "description": "En 'Big Hero 6', conocemos a Hiro Hamada, un joven genio de la robótica que vive en San Fransokyo, una ciudad futurista y vibrante. Después de sufrir una pérdida devastadora, Hiro se une a Baymax, un robot inflable diseñado para el cuidado de la salud, y a un grupo de amigos con habilidades únicas. Juntos, se convierten en Big Hero 6 y luchan contra un misterioso villano que amenaza con destruir la ciudad. La película combina acción trepidante con temas de amistad, valentía y la importancia de superar la pérdida.", - "imageUrl": "https://es.web.img3.acsta.net/pictures/14/09/01/13/43/553593.jpg", - "facts": { - "estreno": "2014", - "generoPelicula": "Aventura, Acción", - "clasificacionPelicula": "Resiliencia", - "clasificPublico": "7.8/10", - "tiempoDuracion": "102 minutos", - }, - "extraInfo": { - "curiosidades": "'Big Hero 6' está basada en el cómic de Marvel del mismo nombre, pero la trama y los personajes fueron adaptados para tener un enfoque más familiar y emocionalmente profundo" - } - }, - { - "id": "planeta-tesoro", - "name": "El Planeta del Tesoro", - "shortDescription": "Una aventura espacial llena de acción en busca de un legendario tesoro intergaláctico.", - "description": "En 'El Planeta del Tesoro', Jim Hawkins, un joven audaz y aventurero, descubre un mapa que lo lleva a una búsqueda épica en el espacio por el tesoro del legendario pirata Nathan Flint. A bordo de una nave espacial liderada por el enigmático Capitán Amelia y el cínico cyborg John Silver, Jim enfrenta peligros intergalácticos y aprende lecciones sobre coraje, lealtad y el verdadero significado de la amistad. La película, con su impresionante animación y emocionante trama, transporta a los espectadores a un universo vibrante lleno de intrigas y descubrimientos", - "imageUrl": "https://es.web.img2.acsta.net/pictures/14/04/14/12/53/368430.jpg", - "facts": { - "estreno": "2002", - "generoPelicula": "Aventura, Ciencia ficción", - "clasificacionPelicula": "Aventura", - "clasificPublico": "7.2/10", - "tiempoDuracion": "95 minutos", - }, - "extraInfo": { - "curiosidades": "'El Planeta del Tesoro' es una adaptación animada del clásico literario 'La isla del tesoro' de Robert Louis Stevenson, ambientada en un entorno futurista y espacial. " - } - }, - { - "id": "encanto-2021", - "name": "Encanto", - "shortDescription": "Una historia mágica sobre una familia con dones extraordinarios en Colombia.", - "description": "'Encanto' transporta a los espectadores a Colombia, donde la familia Madrigal vive en un encantado hogar rodeado de magia. Cada miembro de la familia posee un don especial, excepto Mirabel, quien se embarca en un viaje para descubrir su lugar y salvar la magia de la familia. La película celebra la cultura colombiana a través de su música vibrante y coloridos paisajes, mientras explora temas de autoaceptación, familia y la belleza de ser único. Con personajes entrañables y una narrativa emocionante, 'Encanto' captura el corazón y la imaginación de toda la familia.", - "imageUrl": "https://musicart.xboxlive.com/7/2d0e5200-0000-0000-0000-000000000002/504/image.jpg", - "facts": { - "estreno": "2021", - "generoPelicula": "Aventura, Comedia, Musical", - "clasificacionPelicula": "Autoaceptación", - "clasificPublico": "7.3/10", - "tiempoDuracion": "102 minutos", - }, - "extraInfo": { - "curiosidades": "'Encanto' es la primera película de Disney Animation inspirada en la cultura colombiana, con música original de Lin-Manuel Miranda. La canción principal, 'Dos Oruguitas', fue nominada al Premio Óscar a la Mejor Canción Original en 2023." - } - }, - { - "id": "frozen-2013", - "name": "Frozen", - "shortDescription": "Una aventura épica sobre el poder del amor entre dos hermanas y un reino cubierto de hielo eterno.", - "description": "Elsa, una princesa con el poder de controlar el hielo y la nieve, desencadena accidentalmente un invierno eterno que sumerge a su reino en un frío incesante. Su valiente hermana Anna, acompañada por Kristoff, un rudo montañista, y Olaf, un simpático muñeco de nieve que cobra vida, se aventuran en una búsqueda para salvar a Arendelle y traer de vuelta el verano. La película no solo es un cuento de hadas moderno con impresionantes efectos visuales y música emocionante, sino que también enseña lecciones sobre el amor, la aceptación y la importancia de aceptarse a uno mismo.", - "imageUrl": "https://m.media-amazon.com/images/M/MV5BMTQ1MjQwMTE5OF5BMl5BanBnXkFtZTgwNjk3MTcyMDE@._V1_.jpg", - "facts": { - "estreno": "2013", - "generoPelicula": "Aventura, Comedia, Musical", - "clasificacionPelicula": "Autoaceptación", - "clasificPublico": "7.4/10", - "tiempoDuracion": "102 minutos", - }, - "extraInfo": { - "curiosidades": "'Frozen' se convirtió en un fenómeno cultural global, ganando dos Premios Óscar y generando una popularidad masiva entre niños y adultos por igual. La canción 'Let It Go' se convirtió en un himno y fue interpretada en múltiples idiomas alrededor del mundo." - } - }, - { - "id": "enredados-2010", - "name": "Enredados", - "shortDescription": "Una historia sobre una princesa con un pelo mágico y un ladrón encantador en busca de aventuras.", - "description": "En 'Enredados', conocemos a Rapunzel, una joven princesa con un cabello dorado mágico que le da poderes curativos. Encerrada en una torre desde su infancia por una malvada bruja llamada Madre Gothel, Rapunzel anhela explorar el mundo exterior. Cuando Flynn Rider, un ladrón encantador, irrumpe en su torre, comienza una emocionante aventura llena de acción, romance y descubrimientos sorprendentes. La película no solo cautiva con su animación impresionante y música memorable, sino que también enseña lecciones sobre el coraje, la determinación y la importancia de seguir nuestros sueños.", - "imageUrl": "https://es.web.img3.acsta.net/medias/nmedia/18/79/96/30/19541005.jpg", - "facts": { - "estreno": "2010", - "generoPelicula": "Aventura, Comedia, Musical", - "clasificacionPelicula": "Determinación", - "clasificPublico": "7.7/10", - "tiempoDuracion": "100 minutos", - }, - "extraInfo": { - "curiosidades": "'Enredados' marcó un hito en la animación digital de Disney al ser la primera película en usar el programa de animación 'Meander', desarrollado específicamente para crear efectos de luz y sombra similares a los de un cuadro al óleo." - } - }, - { - "id": "princesa-sapo", - "name": "La Princesa y el Sapo", - "shortDescription": "Una encantadora historia ambientada en Nueva Orleans sobre amor, magia y transformación.", - "description": "Tiana es una joven trabajadora con un sueño: abrir su propio restaurante. Cuando un príncipe convertido en rana, Naveen, busca su ayuda para romper un hechizo, ambos se embarcan en una emocionante aventura por los pantanos de Louisiana. A través de giros y desafíos, aprenden lecciones sobre el verdadero valor del amor y la importancia de seguir tus sueños. La película no solo deleita con su animación vibrante y música jazzística, sino que también celebra la cultura afroamericana y transmite un mensaje poderoso de perseverancia y sacrificio.", - "imageUrl": "https://i.pinimg.com/originals/15/ea/11/15ea11588db2f9e23aac9f747b63a19f.jpg", - "facts": { - "estreno": "2009", - "generoPelicula": "Aventura, Comedia, Musical", - "clasificacionPelicula": "Perseverancia", - "clasificPublico": "7.1/10", - "tiempoDuracion": "97 minutos", - }, - "extraInfo": { - "curiosidades": "'La Princesa y el Sapo' es notable por ser la primera película de Disney Animation en presentar a una princesa afroamericana como protagonista" - } - }, - { - "id": "mulan-1998", - "name": "Mulán", - "shortDescription": "Una joven valiente se disfraza de guerrero para salvar a su familia y su patria. Inspiradora, y llena de valor", - "description": "Mulán es una joven china que decide tomar el lugar de su anciano padre en el ejército imperial, haciéndose pasar por un hombre. Con la ayuda de su dragón guardián, Mushu, y un grupo de soldados divertidos, Mulán se enfrenta a desafíos tanto físicos como emocionales mientras lucha contra los invasores hunos liderados por Shan Yu. La película no solo es una epopeya de acción y aventura, sino también un poderoso relato sobre el valor, la determinación y el respeto por la familia y la tradición.", - "imageUrl": "https://www.lavanguardia.com/peliculas-series/images/movie/poster/1998/6/w1280/towmTJ0k29quKI9IDnOZKAAtQx.jpg", - "facts": { - "estreno": "1998", - "generoPelicula": "Aventura,Drama", - "clasificacionPelicula": "Valentía", - "clasificPublico": "7.6/10", - "tiempoDuracion": "88 minutos", - }, - "extraInfo": { - "curiosidades": "'Mulan' es inspirada en una antigua leyenda china de una mujer que se disfraza de hombre para luchar en lugar de su padre. La película fue elogiada por su representación cultural y feminista, siendo una de las primeras de Disney en presentar a una heroína que desafía los roles de género tradicionales." - } - }, - { - "id": "mundo-jack", - "name": "El Extraño Mundo de Jack", - "shortDescription": "Una película animada que fusiona el encanto de Halloween con la magia de la Navidad.", - "description": "El Extraño Mundo de Jack cuenta la historia de Jack Skellington, el Rey de Halloween, quien se cansa de celebrar siempre la misma fiesta cada año. Cuando descubre accidentalmente la Ciudad de la Navidad, se obsesiona con traer el espíritu navideño a su oscuro reino de Halloween. Sin embargo, sus intentos de recrear la Navidad llevan a resultados cómicos y desastrosos. A través de la historia de Jack, la película explora temas de autodescubrimiento, aceptación y la importancia de ser fiel a uno mismo.", - "imageUrl": "https://static.wixstatic.com/media/51d250_0469ccba361b4111bf43aab68e012386~mv2.jpg/v1/fill/w_800,h_1200,al_c,q_85,enc_auto/51d250_0469ccba361b4111bf43aab68e012386~mv2.jpg", - "facts": { - "estreno": "1993", - "generoPelicula": "Fantasía, Musical", - "clasificacionPelicula": "Autenticidad", - "clasificPublico": "8/10", - "tiempoDuracion": "76 minutos", - }, - "extraInfo": { - "curiosidades": "'El Extraño Mundo de Jack' fue inicialmente concebida por Tim Burton como un poema en los años 80, antes de ser adaptada en una película animada. Aunque a menudo se asocia con Tim Burton como director, en realidad fue dirigida por Henry Selick, quien también trabajó en 'Coraline'." - } - }, - { - "id": "tarzan-1999", - "name": "Tarzán", - "shortDescription": "Una emocionante aventura animada sobre un niño criado por gorilas en la jungla africana.", - "description": "Un niño que es adoptado por una familia de gorilas después de la muerte de sus padres en un naufragio. A medida que crece, Tarzán desarrolla habilidades extraordinarias y se adapta a la vida en la selva. Su vida cambia cuando conoce a Jane, una exploradora y científica, y se enfrenta a la amenaza de los cazadores furtivos que buscan explotar la naturaleza. La película, dirigida por Chris Buck y Kevin Lima, destaca por su animación impresionante, la icónica banda sonora de Phil Collins y su mensaje sobre la importancia del respeto hacia la naturaleza y la diversidad cultural.", - "imageUrl": "https://es.web.img3.acsta.net/pictures/14/03/17/11/47/596263.jpg", - "facts": { - "estreno": "1999", - "generoPelicula": "Aventura, Drama", - "clasificacionPelicula": "Identidad", - "clasificPublico": "7.3/10", - "tiempoDuracion": "88 minutos", - }, - "extraInfo": { - "curiosidades": "'Tarzan' fue el primer largometraje animado de Disney en utilizar tecnología digital para pintar los fondos. La película ganó el Premio Óscar a la Mejor Canción Original por 'You'll Be in My Heart' de Phil Collins, que se convirtió en un éxito internacional." - } - }, - { - "id": "hercules-1997", - "name": "Hércules", - "shortDescription": "Una épica historia que sigue los pasos de Hércules, un semidiós en busca de su verdadero lugar en el Olimpo", - "description": "En 'Hércules', conocemos la historia del poderoso semidiós griego nacido de los dioses Zeus y Hera. Criado como un humano en la Tierra, Hércules descubre su verdadera identidad y su destino como héroe cuando debe demostrar su valía enfrentando peligrosos desafíos y criaturas mitológicas. Con la ayuda de su fiel amigo Filoctetes y la sabiduría de los dioses del Olimpo, Hércules se embarca en una aventura llena de acción y humor para restaurar su estatus divino y ganarse el amor de Megara, una mujer con un oscuro pasado.", - "imageUrl": "https://www.lavanguardia.com/peliculas-series/images/movie/poster/1997/6/w1280/4Q2rLG6a9fJhKM5emIYLzgw4HCa.jpg", - "facts": { - "estreno": "1997", - "generoPelicula": "Aventura, Comedia, Musical", - "clasificacionPelicula": "Autoaceptación", - "clasificPublico": "7.3/10", - "tiempoDuracion": "93 minutos", - }, - "extraInfo": { - "curiosidades": "'Hércules' es conocida por su estilo artístico único inspirado en el arte griego antiguo, especialmente en sus escenas de acción y los diseños de los personajes." - } - }, - ]; \ No newline at end of file + { + id: "Disney-Elemental", + name: "Elemental", + shortDescription: + "Explora un mundo donde los elementos naturales cobran vida y coexisten en una vibrante ciudad.", + description: + "Seguimos la historia de Ember, una joven de fuego, y Wade, un chico de agua, que provienen de mundos opuestos. A pesar de sus diferencias, desarrollan una amistad única que desafía las convenciones sociales de su entorno. A medida que su vínculo se fortalece, Ember y Wade descubren que las diferencias que los separan también pueden ser la clave para superar desafíos personales y comunitarios. La película presenta un viaje emocional y visualmente espectacular que celebra la diversidad y la aceptación.", + imageUrl: + "https://es.web.img3.acsta.net/pictures/23/05/17/10/28/2036083.jpg", + facts: { + estreno: "2023", + generoPelicula: "Aventura, Fantasía", + clasificacionPelicula: "Diversidad", + clasificPublico: "7.1/10", + tiempoDuracion: "101 minutos", + }, + extraInfo: { + curiosidades: + "Para crear el efecto visual del personaje de Ember, el equipo de animación desarrolló nuevas técnicas para capturar la fluidez y el dinamismo del fuego de una manera realista y expresiva.", + }, + }, + { + id: "pixar-up", + name: "UP", + shortDescription: + "Aventuras emocionantes de un anciano y un niño explorador en una casa voladora impulsada por globos.", + description: + "Up narra la historia de Carl Fredricksen, un viudo de edad avanzada decidido a cumplir la promesa que le hizo a su difunta esposa. Con ingenio y determinación, Carl ata miles de globos a su casa y emprende un viaje épico hacia las remotas tierras de América del Sur. Pero su plan se complica cuando descubre que un inesperado pasajero, Russell, un explorador juvenil, se ha colado a bordo. Juntos, enfrentan peligros inimaginables y descubren que la aventura más grande de todas es la amistad.", + imageUrl: + "https://www.funeralnatural.net/sites/default/files/pelicula/imagen/upcartel.jpg", + facts: { + estreno: "2009", + generoPelicula: "Aventura, Comedia, Drama", + clasificacionPelicula: "Perseverancia", + clasificPublico: "8.3/10", + tiempoDuracion: "96 minutos", + }, + extraInfo: { + curiosidades: + "La casa voladora de Carl Fredricksen está inspirada en la casa real de los hermanos Ellie y Carl, dos hermanos que crecieron en la ciudad de Los Ángeles, California.", + }, + }, + { + id: "turning-red", + name: "Turning Red", + shortDescription: + "Una divertida y emotiva historia sobre la adolescencia y el poder de la amistad.", + description: + "'Turning Red' es una encantadora película de Pixar que explora la vida de Mei Lee, una joven que lidia con los altibajos de la adolescencia mientras experimenta una transformación inesperada en un panda rojo cuando se emociona demasiado. Con un enfoque fresco y humorístico, la película aborda temas universales como la identidad, la familia y la aceptación personal. La animación es vibrante y cautivadora, complementada por una banda sonora vibrante que realza la narrativa. Turning Red es una joya animada que no solo entretiene, sino que también deja mensajes significativos sobre la autoaceptación y el poder de la amistad.", + imageUrl: + "https://m.media-amazon.com/images/I/81equRsw8JL._AC_UF894,1000_QL80_.jpg", + facts: { + estreno: "2022", + generoPelicula: "Comedia, Fantasía", + clasificacionPelicula: "Autoaceptación", + clasificPublico: "7/10", + tiempoDuracion: "100 minutos", + }, + extraInfo: { + curiosidades: + "Turning Red es la primera película de Pixar dirigida por una directora mujer, Domee Shi, quien anteriormente ganó un Premio de la Academia por el cortometraje Bao.", + }, + }, + { + id: "coco-pelicula", + name: "Coco", + shortDescription: + "Una celebración musical y visual que explora la importancia de la familia y la memoria.", + description: + "Coco cuenta la historia de Miguel, un niño mexicano con grandes sueños musicales en un hogar donde la música está prohibida. En el Día de los Muertos, Miguel se embarca en un viaje extraordinario al mundo de los muertos para descubrir la verdad sobre su familia y su pasión por la música. Con impresionantes visuales y una banda sonora conmovedora, la película celebra la cultura mexicana y enseña lecciones sobre el amor, el legado y la importancia de recordar a nuestros seres queridos.", + imageUrl: + "https://es.web.img2.acsta.net/pictures/17/09/14/10/49/2019727.jpg", + facts: { + estreno: "2017", + generoPelicula: "Aventura, Fantasía", + clasificacionPelicula: "Familia", + clasificPublico: "8.4/10", + tiempoDuracion: "105 minutos", + }, + extraInfo: { + curiosidades: + "Coco fue elogiada por su representación auténtica de la cultura mexicana, desde sus tradiciones hasta la música mariachi. Ganó dos Premios de la Academia, incluyendo Mejor Película Animada y Mejor Canción Original por Recuerdame.", + }, + }, + { + id: "Ratatouille-2007", + name: "Ratatouille", + shortDescription: + "Una encantadora historia sobre un ratón con un paladar excepcional y grandes sueños culinarios.", + description: + "En Ratatouille conocemos a Remy, un apasionado ratón que sueña con convertirse en un chef de renombre en París, a pesar de las expectativas y prejuicios que enfrenta por ser un roedor. Con la ayuda de Linguini, un joven empleado de cocina, Remy demuestra que el talento y la determinación no conocen límites, mientras lucha por hacer realidad su sueño gastronómico. La película explora temas de perseverancia, amistad y la importancia de seguir nuestras pasiones, sin importar las adversidades ya que 'cualquiera puede cocinar'.", + imageUrl: + "https://lumiere-a.akamaihd.net/v1/images/p_ratatouille_19736_0814231f.jpeg", + facts: { + estreno: "2007", + generoPelicula: "Comedia, Drama", + clasificacionPelicula: "Superación", + clasificPublico: "8.1/10", + tiempoDuracion: "111 minutos", + }, + extraInfo: { + curiosidades: + "Los creadores de Ratatouille trabajaron estrechamente con chefs renombrados para capturar de manera auténtica el ambiente y los detalles de la cocina parisina, elevando la experiencia visual y emocional de la película.", + }, + }, + { + id: "Walle-2008", + name: "Wall-e", + shortDescription: + "Un robot solitario descubre el amor y la esperanza en un futuro distópico. Aventura encantadora y ecológica que inspira", + description: + "Seguimos a Wall-e, un pequeño robot diseñado para limpiar un planeta Tierra abandonado y cubierto de basura. Durante siglos, Wall-e ha desarrollado una personalidad única y un gran sentido de curiosidad. Todo cambia cuando conoce a EVE, una sonda enviada desde el espacio con una misión misteriosa. Juntos, Wall-e y EVE emprenden un viaje intergaláctico que desafía las expectativas y revela la importancia de la conexión humana y el cuidado del medio ambiente. Esta obra maestra de animación combina humor, emoción y reflexión sobre el futuro de la humanidad.", + imageUrl: + "https://es.web.img2.acsta.net/pictures/14/04/30/10/41/026995.jpg", + facts: { + estreno: "2008", + generoPelicula: "Aventura, Ciencia ficción", + clasificacionPelicula: "Esperanza", + clasificPublico: "8.4/10", + tiempoDuracion: "98 minutos", + }, + extraInfo: { + curiosidades: + "Wall-e cuenta con una narrativa visual rica y detallada que permite a la historia ser contada con un mínimo diálogo durante la primera parte de la película, mostrando la maestría de Pixar en la animación y la narración visual.", + }, + }, + { + id: "buscando-dory", + name: "Buscando a Dory", + shortDescription: + "La inolvidable pez azul con problemas de memoria emprende una nueva aventura para encontrar a su familia.", + description: + "la amigable pez azul con pérdida de memoria a corto plazo, Dory, se embarca en una emocionante misión para reunirse con su familia, de la cual apenas tiene recuerdos fragmentados. Con la ayuda de sus amigos Marlin y Nemo, Dory cruza los océanos enfrentando desafíos y haciendo nuevos amigos, mientras descubre la importancia del hogar, la perseverancia y la autoaceptación. La película, llena de humor y ternura, captura la esencia del espíritu aventurero de Pixar y deja un mensaje conmovedor sobre el poder del amor y la familia.", + imageUrl: + "https://e1.pxfuel.com/desktop-wallpaper/228/188/desktop-wallpaper-finding-dory-poster-2-amazing-posters-fluke-movie.jpg", + facts: { + estreno: "2016", + generoPelicula: "Aventura, Comedia", + clasificacionPelicula: "Resiliencia", + clasificPublico: "7.4/10", + tiempoDuracion: "97 minutos", + }, + extraInfo: { + curiosidades: + "Ellen DeGeneres, la voz de Dory, expresó su alegría de volver a interpretar al personaje después de 13 años desde la película original Buscando a Nemo (2003).", + }, + }, + { + id: "intensamente-2015", + name: "Intensamente", + shortDescription: + "Explora las emociones humanas a través de la historia de Riley y las cinco emociones personificadas que guían su vida.", + description: + "Riley, una niña que atraviesa cambios importantes en su vida familiar al mudarse a una nueva ciudad. La historia se desarrolla dentro de su mente, donde sus emociones personificadas - Alegría, Tristeza, Miedo, Furia y Asco - trabajan juntas en la central de control emocional para guiar sus acciones y decisiones. A medida que Riley navega por los desafíos de crecer, las emociones aprenden lecciones valiosas sobre la importancia de la empatía, el equilibrio emocional y la aceptación de la tristeza como parte integral de la vida.", + imageUrl: + "https://mx.web.img3.acsta.net/pictures/17/08/07/21/43/466493.jpg", + facts: { + estreno: "2015", + generoPelicula: "Aventura, Comedia, Drama", + clasificacionPelicula: "Empatía", + clasificPublico: "8/10", + tiempoDuracion: "95 minutos", + }, + extraInfo: { + curiosidades: + "Intensamente fue aclamada por su representación precisa de la psicología emocional y ganó el Premio de la Academia a la Mejor Película Animada en 2016.", + }, + }, + { + id: "toy-story", + name: "Toy Story", + shortDescription: + "Un grupo de juguetes que cobran vida cuando los humanos no los ven, destacando la amistad y la lealtad.", + description: + "La historia gira en torno a Woody, un vaquero de juguete celoso de su posición como el favorito de su dueño, Andy, y Buzz Lightyear, un moderno juguete espacial recién llegado que desafía la autoridad de Woody. A través de una serie de eventos, ambos juguetes aprenden sobre la amistad, la lealtad y el valor de aceptarse mutuamente. La película no solo estableció el estándar para la animación digital, sino que también tocó los corazones de generaciones con su ingeniosa narrativa y personajes entrañables.", + imageUrl: + "https://es.web.img3.acsta.net/pictures/14/03/17/10/20/509771.jpg", + facts: { + estreno: "1995", + generoPelicula: "Aventura, Comedia", + clasificacionPelicula: "Amistad", + clasificPublico: "8.3/10", + tiempoDuracion: "81 minutos", + }, + extraInfo: { + curiosidades: + "Toy Stoy fue un éxito instantáneo y generó una franquicia exitosa que incluye tres secuelas más y varios cortometrajes. Fue la primera película de Pixar y la primera película animada en la historia en ser nominada para un Premio Óscar a la Mejor Guión Original.", + }, + }, + { + id: "los-increibles", + name: "Los Increíbles", + shortDescription: + "Una familia de superhéroes se une para salvar al mundo y redescubrir su propia grandeza.", + description: + "En Los Increíbles, seguimos a la familia Parr: Bob, Helen, Violeta, Dash y Jack-Jack, quienes llevan una vida normal y oculta bajo el programa de protección a testigos debido a las leyes que prohíben las actividades superhumanas. Sin embargo, cuando surge una nueva amenaza que pone en peligro al mundo, la familia debe unirse y redescubrir sus habilidades únicas para salvar el día. La película combina acción emocionante con temas de familia, autoaceptación y la importancia de abrazar nuestras fortalezas individuales.", + imageUrl: + "https://cdn.hobbyconsolas.com/sites/navi.axelspringer.es/public/media/image/2018/04/increibles.jpg", + facts: { + estreno: "2004", + generoPelicula: "Aventura, Acción", + clasificacionPelicula: "Unidad", + clasificPublico: "8/10", + tiempoDuracion: "115 minutos", + }, + extraInfo: { + curiosidades: + "El director de Los Increíbles, Brad Bird, también prestó su voz al personaje de Edna Moda, la excéntrica y talentosa diseñadora de trajes de superhéroe.", + }, + }, + { + id: "soul-2020", + name: "Soul", + shortDescription: + "Descubre el significado de la vida a través de los ojos de un músico apasionado.", + description: + "Joe Gardner, es un talentoso pianista de jazz cuya pasión por la música es palpable. Cuando tiene la oportunidad de realizar su sueño tocando en un club de renombre, un giro del destino lo lleva a un viaje inesperado entre el mundo terrenal y el 'Gran Antes', donde las almas encuentran su chispa antes de nacer. Junto a 22, un alma cínica que aún no encuentra su propósito, Joe aprende lecciones profundas sobre la vida, el propósito y la importancia de cada experiencia que nos moldea como individuos.", + imageUrl: "https://myhotposters.com/cdn/shop/products/mL4925_1024x1024.jpg", + facts: { + estreno: "2020", + generoPelicula: "Aventura, Comedia, Drama", + clasificacionPelicula: "Propósito de vida", + clasificPublico: "8.1/10", + tiempoDuracion: "100 minutos", + }, + extraInfo: { + curiosidades: + "Soul fue alabada por su representación de la cultura afroamericana y por ser una exploración profunda de temas existenciales en una película animada de Pixar.", + }, + }, + { + id: "viaje-arlo", + name: "El viaje de Arlo", + shortDescription: + "Un dinosaurio y un niño humano forjan una amistad en una épica aventura prehistórica. Una historia conmovedora y emocionante.", + description: + "En el 'Viaje de Arlo', exploramos un mundo alternativo donde los dinosaurios no se extinguieron y conviven con los humanos. Arlo, un dinosaurio joven y temeroso, se separa de su familia y emprende un viaje épico para encontrar el camino de regreso a casa. En el camino, forma una inesperada amistad con Spot, un niño humano salvaje, y juntos enfrentan peligros naturales y desafíos emocionales que les permiten crecer y descubrir sus verdaderas fortalezas. La película, con impresionantes paisajes y personajes entrañables, invita a reflexionar sobre el coraje, la amistad y el valor de enfrentar nuestros miedos.", + imageUrl: + "https://www.lavanguardia.com/peliculas-series/images/movie/poster/2015/11/w1280/1WKI6PM79XjK2LVS1B4yoG3wNHw.jpg", + facts: { + estreno: "2015", + generoPelicula: "Aventura, Drama", + clasificacionPelicula: "Superación", + clasificPublico: "6.7/10", + tiempoDuracion: "93 minutos", + }, + extraInfo: { + curiosidades: + "El viaje de Arlo, es el primer largometraje de Pixar en presentar personajes y escenarios completamente generados por computadora, sin necesidad de fondos en 2D.", + }, + }, + { + id: "lilo-stitch", + name: "Lilo y Stitch", + shortDescription: + "Una niña hawaiana y un alienígena travieso descubren el verdadero significado de la familia.", + description: + "Lilo & Stitch narra la conmovedora historia de Lilo, una niña hawaiana única, y Stitch, un alienígena travieso. Ambientada en las soleadas costas de Hawái, la película celebra la importancia de la familia y la aceptación. Con su animación vibrante y memorable banda sonora, captura tanto la esencia de la cultura hawaiana como la bondad universal. 'Lilo & Stitch' nos recuerda que la verdadera familia a menudo viene en formas inesperadas, enseñando lecciones de amor, amistad y comprensión en un viaje emocional que sigue siendo querido por generaciones.", + imageUrl: "https://www.ecartelera.com/carteles/5100/5197/002_m.jpg", + facts: { + estreno: "2002", + generoPelicula: "Aventura, Comedia, Ciencia ficción", + clasificacionPelicula: "Familia", + clasificPublico: "7.2/10", + tiempoDuracion: "85 minutos", + }, + extraInfo: { + curiosidades: + "'Lilo y Stitch' es conocida por su enfoque en la cultura y las tradiciones de Hawái, así como por su banda sonora que incluye música hawaiana auténtica mezclada con canciones pop contemporáneas", + }, + }, + { + id: "atlantis", + name: "Atlantis: El Imperio Perdido", + shortDescription: + " Una emocionante expedición hacia un misterioso mundo subacuático en busca de un antiguo imperio perdido.", + description: + "Atlantis: El Imperio Perdido es una emocionante película de Disney que sigue a Milo Thatch, un cartógrafo y lingüista, en su búsqueda para encontrar la legendaria ciudad de Atlantis. Acompañado por un variopinto grupo de exploradores, Milo se embarca en una peligrosa expedición submarina. La película destaca por su impresionante animación, inspirada en el estilo visual de cómics, y su intrigante mezcla de mitología y ciencia ficción. Con una historia llena de acción, descubrimientos y valores como la amistad y la perseverancia, Atlantis es una aventura que inspira y cautiva a espectadores de todas las edades.", + imageUrl: + "https://www.aceprensa.com/wp-content/uploads/2001/11/10865-0.jpg", + facts: { + estreno: "2001", + generoPelicula: "Aventura, Ciencia ficción", + clasificacionPelicula: "Descubrimiento", + clasificPublico: "6.9/10", + tiempoDuracion: "96 minutos", + }, + extraInfo: { + curiosidades: + "'Atlantis: El Imperio Perdido' fue una de las primeras películas de Disney en utilizar animación tradicional combinada con gráficos generados por computadora para crear ambientes submarinos espectaculares.", + }, + }, + { + id: "big-hero", + name: "Big Hero 6", + shortDescription: + "Una historia emocionante sobre un joven prodigio y su robot inflable en una ciudad futurista.", + description: + "En 'Big Hero 6', conocemos a Hiro Hamada, un joven genio de la robótica que vive en San Fransokyo, una ciudad futurista y vibrante. Después de sufrir una pérdida devastadora, Hiro se une a Baymax, un robot inflable diseñado para el cuidado de la salud, y a un grupo de amigos con habilidades únicas. Juntos, se convierten en Big Hero 6 y luchan contra un misterioso villano que amenaza con destruir la ciudad. La película combina acción trepidante con temas de amistad, valentía y la importancia de superar la pérdida.", + imageUrl: + "https://es.web.img3.acsta.net/pictures/14/09/01/13/43/553593.jpg", + facts: { + estreno: "2014", + generoPelicula: "Aventura, Acción", + clasificacionPelicula: "Resiliencia", + clasificPublico: "7.8/10", + tiempoDuracion: "102 minutos", + }, + extraInfo: { + curiosidades: + "'Big Hero 6' está basada en el cómic de Marvel del mismo nombre, pero la trama y los personajes fueron adaptados para tener un enfoque más familiar y emocionalmente profundo", + }, + }, + { + id: "planeta-tesoro", + name: "El Planeta del Tesoro", + shortDescription: + "Una aventura espacial llena de acción en busca de un legendario tesoro intergaláctico.", + description: + "En 'El Planeta del Tesoro', Jim Hawkins, un joven audaz y aventurero, descubre un mapa que lo lleva a una búsqueda épica en el espacio por el tesoro del legendario pirata Nathan Flint. A bordo de una nave espacial liderada por el enigmático Capitán Amelia y el cínico cyborg John Silver, Jim enfrenta peligros intergalácticos y aprende lecciones sobre coraje, lealtad y el verdadero significado de la amistad. La película, con su impresionante animación y emocionante trama, transporta a los espectadores a un universo vibrante lleno de intrigas y descubrimientos", + imageUrl: + "https://es.web.img2.acsta.net/pictures/14/04/14/12/53/368430.jpg", + facts: { + estreno: "2002", + generoPelicula: "Aventura, Ciencia ficción", + clasificacionPelicula: "Aventura", + clasificPublico: "7.2/10", + tiempoDuracion: "95 minutos", + }, + extraInfo: { + curiosidades: + "'El Planeta del Tesoro' es una adaptación animada del clásico literario 'La isla del tesoro' de Robert Louis Stevenson, ambientada en un entorno futurista y espacial. ", + }, + }, + { + id: "encanto-2021", + name: "Encanto", + shortDescription: + "Una historia mágica sobre una familia con dones extraordinarios en Colombia.", + description: + "'Encanto' transporta a los espectadores a Colombia, donde la familia Madrigal vive en un encantado hogar rodeado de magia. Cada miembro de la familia posee un don especial, excepto Mirabel, quien se embarca en un viaje para descubrir su lugar y salvar la magia de la familia. La película celebra la cultura colombiana a través de su música vibrante y coloridos paisajes, mientras explora temas de autoaceptación, familia y la belleza de ser único. Con personajes entrañables y una narrativa emocionante, 'Encanto' captura el corazón y la imaginación de toda la familia.", + imageUrl: + "https://musicart.xboxlive.com/7/2d0e5200-0000-0000-0000-000000000002/504/image.jpg", + facts: { + estreno: "2021", + generoPelicula: "Aventura, Comedia, Musical", + clasificacionPelicula: "Autoaceptación", + clasificPublico: "7.3/10", + tiempoDuracion: "102 minutos", + }, + extraInfo: { + curiosidades: + "'Encanto' es la primera película de Disney Animation inspirada en la cultura colombiana, con música original de Lin-Manuel Miranda. La canción principal, 'Dos Oruguitas', fue nominada al Premio Óscar a la Mejor Canción Original en 2023.", + }, + }, + { + id: "frozen-2013", + name: "Frozen", + shortDescription: + "Una aventura épica sobre el poder del amor entre dos hermanas y un reino cubierto de hielo eterno.", + description: + "Elsa, una princesa con el poder de controlar el hielo y la nieve, desencadena accidentalmente un invierno eterno que sumerge a su reino en un frío incesante. Su valiente hermana Anna, acompañada por Kristoff, un rudo montañista, y Olaf, un simpático muñeco de nieve que cobra vida, se aventuran en una búsqueda para salvar a Arendelle y traer de vuelta el verano. La película no solo es un cuento de hadas moderno con impresionantes efectos visuales y música emocionante, sino que también enseña lecciones sobre el amor, la aceptación y la importancia de aceptarse a uno mismo.", + imageUrl: + "https://m.media-amazon.com/images/M/MV5BMTQ1MjQwMTE5OF5BMl5BanBnXkFtZTgwNjk3MTcyMDE@._V1_.jpg", + facts: { + estreno: "2013", + generoPelicula: "Aventura, Comedia, Musical", + clasificacionPelicula: "Autoaceptación", + clasificPublico: "7.4/10", + tiempoDuracion: "102 minutos", + }, + extraInfo: { + curiosidades: + "'Frozen' se convirtió en un fenómeno cultural global, ganando dos Premios Óscar y generando una popularidad masiva entre niños y adultos por igual. La canción 'Let It Go' se convirtió en un himno y fue interpretada en múltiples idiomas alrededor del mundo.", + }, + }, + { + id: "enredados-2010", + name: "Enredados", + shortDescription: + "Una historia sobre una princesa con un pelo mágico y un ladrón encantador en busca de aventuras.", + description: + "En 'Enredados', conocemos a Rapunzel, una joven princesa con un cabello dorado mágico que le da poderes curativos. Encerrada en una torre desde su infancia por una malvada bruja llamada Madre Gothel, Rapunzel anhela explorar el mundo exterior. Cuando Flynn Rider, un ladrón encantador, irrumpe en su torre, comienza una emocionante aventura llena de acción, romance y descubrimientos sorprendentes. La película no solo cautiva con su animación impresionante y música memorable, sino que también enseña lecciones sobre el coraje, la determinación y la importancia de seguir nuestros sueños.", + imageUrl: + "https://es.web.img3.acsta.net/medias/nmedia/18/79/96/30/19541005.jpg", + facts: { + estreno: "2010", + generoPelicula: "Aventura, Comedia, Musical", + clasificacionPelicula: "Determinación", + clasificPublico: "7.7/10", + tiempoDuracion: "100 minutos", + }, + extraInfo: { + curiosidades: + "'Enredados' marcó un hito en la animación digital de Disney al ser la primera película en usar el programa de animación 'Meander', desarrollado específicamente para crear efectos de luz y sombra similares a los de un cuadro al óleo.", + }, + }, + { + id: "princesa-sapo", + name: "La Princesa y el Sapo", + shortDescription: + "Una encantadora historia ambientada en Nueva Orleans sobre amor, magia y transformación.", + description: + "Tiana es una joven trabajadora con un sueño: abrir su propio restaurante. Cuando un príncipe convertido en rana, Naveen, busca su ayuda para romper un hechizo, ambos se embarcan en una emocionante aventura por los pantanos de Louisiana. A través de giros y desafíos, aprenden lecciones sobre el verdadero valor del amor y la importancia de seguir tus sueños. La película no solo deleita con su animación vibrante y música jazzística, sino que también celebra la cultura afroamericana y transmite un mensaje poderoso de perseverancia y sacrificio.", + imageUrl: + "https://i.pinimg.com/originals/15/ea/11/15ea11588db2f9e23aac9f747b63a19f.jpg", + facts: { + estreno: "2009", + generoPelicula: "Aventura, Comedia, Musical", + clasificacionPelicula: "Perseverancia", + clasificPublico: "7.1/10", + tiempoDuracion: "97 minutos", + }, + extraInfo: { + curiosidades: + "'La Princesa y el Sapo' es notable por ser la primera película de Disney Animation en presentar a una princesa afroamericana como protagonista", + }, + }, + { + id: "mulan-1998", + name: "Mulán", + shortDescription: + "Una joven valiente se disfraza de guerrero para salvar a su familia y su patria. Inspiradora, y llena de valor", + description: + "Mulán es una joven china que decide tomar el lugar de su anciano padre en el ejército imperial, haciéndose pasar por un hombre. Con la ayuda de su dragón guardián, Mushu, y un grupo de soldados divertidos, Mulán se enfrenta a desafíos tanto físicos como emocionales mientras lucha contra los invasores hunos liderados por Shan Yu. La película no solo es una epopeya de acción y aventura, sino también un poderoso relato sobre el valor, la determinación y el respeto por la familia y la tradición.", + imageUrl: + "https://www.lavanguardia.com/peliculas-series/images/movie/poster/1998/6/w1280/towmTJ0k29quKI9IDnOZKAAtQx.jpg", + facts: { + estreno: "1998", + generoPelicula: "Aventura,Drama", + clasificacionPelicula: "Valentía", + clasificPublico: "7.6/10", + tiempoDuracion: "88 minutos", + }, + extraInfo: { + curiosidades: + "'Mulan' es inspirada en una antigua leyenda china de una mujer que se disfraza de hombre para luchar en lugar de su padre. La película fue elogiada por su representación cultural y feminista, siendo una de las primeras de Disney en presentar a una heroína que desafía los roles de género tradicionales.", + }, + }, + { + id: "mundo-jack", + name: "El Extraño Mundo de Jack", + shortDescription: + "Una película animada que fusiona el encanto de Halloween con la magia de la Navidad.", + description: + "El Extraño Mundo de Jack cuenta la historia de Jack Skellington, el Rey de Halloween, quien se cansa de celebrar siempre la misma fiesta cada año. Cuando descubre accidentalmente la Ciudad de la Navidad, se obsesiona con traer el espíritu navideño a su oscuro reino de Halloween. Sin embargo, sus intentos de recrear la Navidad llevan a resultados cómicos y desastrosos. A través de la historia de Jack, la película explora temas de autodescubrimiento, aceptación y la importancia de ser fiel a uno mismo.", + imageUrl: + "https://static.wixstatic.com/media/51d250_0469ccba361b4111bf43aab68e012386~mv2.jpg/v1/fill/w_800,h_1200,al_c,q_85,enc_auto/51d250_0469ccba361b4111bf43aab68e012386~mv2.jpg", + facts: { + estreno: "1993", + generoPelicula: "Fantasía, Musical", + clasificacionPelicula: "Autenticidad", + clasificPublico: "8/10", + tiempoDuracion: "76 minutos", + }, + extraInfo: { + curiosidades: + "'El Extraño Mundo de Jack' fue inicialmente concebida por Tim Burton como un poema en los años 80, antes de ser adaptada en una película animada. Aunque a menudo se asocia con Tim Burton como director, en realidad fue dirigida por Henry Selick, quien también trabajó en 'Coraline'.", + }, + }, + { + id: "tarzan-1999", + name: "Tarzán", + shortDescription: + "Una emocionante aventura animada sobre un niño criado por gorilas en la jungla africana.", + description: + "Un niño que es adoptado por una familia de gorilas después de la muerte de sus padres en un naufragio. A medida que crece, Tarzán desarrolla habilidades extraordinarias y se adapta a la vida en la selva. Su vida cambia cuando conoce a Jane, una exploradora y científica, y se enfrenta a la amenaza de los cazadores furtivos que buscan explotar la naturaleza. La película, dirigida por Chris Buck y Kevin Lima, destaca por su animación impresionante, la icónica banda sonora de Phil Collins y su mensaje sobre la importancia del respeto hacia la naturaleza y la diversidad cultural.", + imageUrl: + "https://es.web.img3.acsta.net/pictures/14/03/17/11/47/596263.jpg", + facts: { + estreno: "1999", + generoPelicula: "Aventura, Drama", + clasificacionPelicula: "Identidad", + clasificPublico: "7.3/10", + tiempoDuracion: "88 minutos", + }, + extraInfo: { + curiosidades: + "'Tarzan' fue el primer largometraje animado de Disney en utilizar tecnología digital para pintar los fondos. La película ganó el Premio Óscar a la Mejor Canción Original por 'You'll Be in My Heart' de Phil Collins, que se convirtió en un éxito internacional.", + }, + }, + { + id: "hercules-1997", + name: "Hércules", + shortDescription: + "Una épica historia que sigue los pasos de Hércules, un semidiós en busca de su verdadero lugar en el Olimpo", + description: + "En 'Hércules', conocemos la historia del poderoso semidiós griego nacido de los dioses Zeus y Hera. Criado como un humano en la Tierra, Hércules descubre su verdadera identidad y su destino como héroe cuando debe demostrar su valía enfrentando peligrosos desafíos y criaturas mitológicas. Con la ayuda de su fiel amigo Filoctetes y la sabiduría de los dioses del Olimpo, Hércules se embarca en una aventura llena de acción y humor para restaurar su estatus divino y ganarse el amor de Megara, una mujer con un oscuro pasado.", + imageUrl: + "https://www.lavanguardia.com/peliculas-series/images/movie/poster/1997/6/w1280/4Q2rLG6a9fJhKM5emIYLzgw4HCa.jpg", + facts: { + estreno: "1997", + generoPelicula: "Aventura, Comedia, Musical", + clasificacionPelicula: "Autoaceptación", + clasificPublico: "7.3/10", + tiempoDuracion: "93 minutos", + }, + extraInfo: { + curiosidades: + "'Hércules' es conocida por su estilo artístico único inspirado en el arte griego antiguo, especialmente en sus escenas de acción y los diseños de los personajes.", + }, + }, +]; diff --git a/src/index.html b/src/index.html index c34c8277..ea5b7923 100644 --- a/src/index.html +++ b/src/index.html @@ -1,18 +1,25 @@ - - - - - Dataverse - - - - - - - -
- - - \ No newline at end of file + + + + + Dataverse + + + + + + + +
+ + + + diff --git a/src/index.js b/src/index.js index ef71fd62..e9ceeaa5 100644 --- a/src/index.js +++ b/src/index.js @@ -1,15 +1,12 @@ -import {Home} from '../views/Home.js'; -import {Films} from './views/Peliculas.js'; -import { setRootEl, setRoutes, onURLChange } from './router.js'; - +import { Home } from "../views/Home.js"; +import { Films } from "./views/Peliculas.js"; +import { setRootEl, setRoutes, onURLChange } from "./router.js"; // Define your routes and their associated views const routes = { - '/': Home, - '/peliculas/${item.id}': Films, -'/error': Error, - - + "/": Home, + "/pelicula": Films, + "/error": Error, }; // Assign the routes @@ -20,7 +17,9 @@ window.addEventListener("DOMContentLoaded", () => { const rootEl = document.getElementById("root"); setRootEl(rootEl); onURLChange(window.location); +}); - - +// Handle URL changes +window.addEventListener("popstate", ({ target }) => { + onURLChange(target.location); }); diff --git a/src/lib/apiKey.js b/src/lib/apiKey.js index f07a4e6e..58815592 100644 --- a/src/lib/apiKey.js +++ b/src/lib/apiKey.js @@ -1,9 +1,7 @@ - - export const getApiKey = () => { - return localStorage.getItem('apiKey'); - }; - - export const setApiKey = (key) => { - localStorage.setItem('apiKey', key); - }; \ No newline at end of file + return localStorage.getItem("apiKey"); +}; + +export const setApiKey = (key) => { + localStorage.setItem("apiKey", key); +}; diff --git a/src/lib/dataFunctions.js b/src/lib/dataFunctions.js index 947ea21b..55329750 100644 --- a/src/lib/dataFunctions.js +++ b/src/lib/dataFunctions.js @@ -1,31 +1,40 @@ export const computeStats = (data) => { - const sumaTotalDuracion = data.reduce((acumulador, pelicula) => acumulador + Number(pelicula.facts.tiempoDuracion.split(" ")[0]), 0); - - return sumaTotalDuracion/data.length; - }; - -export const computeStatsNota = (data) => { - const sumaTotalNota = data.reduce((acumulador, pelicula) => acumulador + Number(pelicula.facts.clasificPublico.split("/")[0]), 0); - const promedioNota= sumaTotalNota/data.length; + const sumaTotalDuracion = data.reduce( + (acumulador, pelicula) => + acumulador + Number(pelicula.facts.tiempoDuracion.split(" ")[0]), + 0 + ); + + return sumaTotalDuracion / data.length; +}; - return promedioNota.toFixed(1); - }; +export const computeStatsNota = (data) => { + const sumaTotalNota = data.reduce( + (acumulador, pelicula) => + acumulador + Number(pelicula.facts.clasificPublico.split("/")[0]), + 0 + ); + const promedioNota = sumaTotalNota / data.length; + return promedioNota.toFixed(1); +}; export const filterData = (data, filterBy, value) => { const resultFilter = data.filter( - (data) => data.facts[filterBy] >= Number(value) && data.facts[filterBy] <= Number(value) + 9 + (data) => + data.facts[filterBy] >= Number(value) && + data.facts[filterBy] <= Number(value) + 9 ); - return resultFilter; + return resultFilter; }; -export const sortData = (data,sortBy, sortOrder) => { +export const sortData = (data, sortBy, sortOrder) => { const nombresOrdenados = data.sort((a, b) => { - if (sortOrder === 'Asc') { + if (sortOrder === "Asc") { return a[sortBy].localeCompare(b[sortBy]); } else { return b[sortBy].localeCompare(a[sortBy]); } }); - return nombresOrdenados; -}; \ No newline at end of file + return nombresOrdenados; +}; diff --git a/src/lib/openAIApi.js b/src/lib/openAIApi.js index b0486948..a0d97541 100644 --- a/src/lib/openAIApi.js +++ b/src/lib/openAIApi.js @@ -12,10 +12,8 @@ export const communicateWithOpenAI = async (messages) => { body: JSON.stringify({ model: "gpt-3.5-turbo", messages: messages, - max_tokens: 150, }), }); const data = await response.json(); - console.log(data); return data.choices[0].message.content; }; diff --git a/src/router.js b/src/router.js index d5d94f19..189a9a5c 100644 --- a/src/router.js +++ b/src/router.js @@ -1,18 +1,17 @@ - let ROUTES = {}; let rootEl; export const setRootEl = (el) => { // assign rootEl rootEl = el; -} +}; export const setRoutes = (routes) => { // optional Throw errors if routes isn't an object // optional Throw errors if routes doesn't define an /error route // assign ROUTES ROUTES = routes; -} +}; const queryStringToObject = (queryString) => { // convert query string to URLSearchParams @@ -20,37 +19,36 @@ const queryStringToObject = (queryString) => { // return the object const params = Object.fromEntries(new URLSearchParams(queryString)); return params; -} +}; -const renderView = (pathname, props={}) => { +const renderView = (pathname, props = {}) => { // clear the root element // find the correct view in ROUTES for the pathname // in case not found render the error view // render the correct view passing the value of props // add the view element to the DOM root element - rootEl.innerHTML = ''; + rootEl.innerHTML = ""; const view = ROUTES[pathname]; if (!view) { - const errorView = ROUTES['/error']; + const errorView = ROUTES["/error"]; if (errorView) { const errorElement = errorView(props); rootEl.appendChild(errorElement); - } else { - console.error("Error view not defined in ROUTES"); - } + } return; } const viewElement = view(props); rootEl.appendChild(viewElement); -} +}; -export const navigateTo = (pathname, props={}) => { +export const navigateTo = (pathname, props = {}) => { // update window history with pushState // render the view with the pathname and props - window.history.pushState(props, '', pathname); + const urlParams = new URLSearchParams(props); + window.history.pushState(props, "", pathname + "?" + urlParams); renderView(pathname, props); -} +}; export const onURLChange = (location) => { // parse the location for the pathname and search params @@ -59,9 +57,9 @@ export const onURLChange = (location) => { const pathname = location.pathname; const searchParams = location.search; const searchParamsObject = queryStringToObject(searchParams); - renderView(pathname,searchParamsObject); -} + renderView(pathname, searchParamsObject); +}; -window.addEventListener('popstate', () => { +window.addEventListener("popstate", () => { onURLChange(window.location); -}); \ No newline at end of file +}); diff --git a/src/style.css b/src/style.css index 740fc436..3f5331e9 100644 --- a/src/style.css +++ b/src/style.css @@ -40,110 +40,12 @@ h3 { margin-top: 0; } -/*.botonDatos { - cursor: pointer; - position: relative; - padding: 10px 20px; - background: #ac95ffd3; - border: #ccc; - font-size: 28px; - border-top-right-radius: 10px; - border-bottom-left-radius: 10px; - transition: all 1s; - &:after, - &:before { - content: " "; - width: 10px; - height: 10px; - position: absolute; - transition: all 1s; - } - &:after { - top: -1px; - left: -1px; - border-top: 5px solid #ffd034; - border-left: 5px solid #ffd034; - } - &:before { - bottom: 1px; - right: 1px; - border-bottom: 5px solid #ffd034; - border-right: 5px solid #ffd034; - } - &:hover { - border-top-right-radius: 0px; - border-bottom-left-radius: 0px; - // background:rgba(0,0,0,.5); - // color:white; - &:before, - &:after { - width: 100%; - height: 100%; - // border-color:white; - } - } -} - -.contenido-oculto { - display: none; -} - -#datosestadisticos { - display: flex; - flex-direction: column; - align-items: center; - width: 100%; - max-width: 37.5rem; - margin: 0 auto; - padding: 1.25rem; -}*/ - -.datosdisney { - list-style-type: none; - padding: 16px; - display: flex; - gap: 32px; - justify-content: center; - align-items: center; - background-color: rgba(255, 255, 255, 0.5); - border-radius: 8px; - box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); - margin-top: 20px; - margin-bottom: 20px; -} - -.datosdisney li { - flex: 1; - padding: 0.625rem; - text-align: center; - border: 1px solid #ccc; - border-radius: 4px; - box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1); - width: 25rem; - height: 4rem; -} - -.datosdisney li#duracion { - background-color: #fcf0c6; - color: #000; - display: flex; - align-items: center; - font-weight: bold; -} - -.datosdisney li#nota { - background-color: #fcf0c6; - color: #000; - display: flex; - align-items: center; - font-weight: bold; -} .tituloSelectores { font-size: 120%; } .selectores { display: flex; - justify-content: center; + justify-content: space-around; align-items: center; gap: 10px; } @@ -160,6 +62,7 @@ select { cursor: pointer; cursor: pointer; border-radius: 20px; + margin-left: 2em; } option { @@ -190,14 +93,14 @@ button { } .ulPelis { - display: flex; - flex-wrap: wrap; - gap: 2rem; list-style: none; padding: 0; margin: 0; margin-top: 1rem; justify-content: center; + display: grid; + grid-template-columns: repeat(1, 95%); + gap: 3em; } .contenedorContenido { @@ -220,7 +123,7 @@ button { display: flex; flex-direction: column; padding: 0 1rem; - font-size: 110%; + font-size: 1em; box-sizing: border-box; overflow-x: auto; width: 100%; @@ -238,7 +141,7 @@ button { flex-direction: column; background-color: rgba(255, 255, 255, 0.9); gap: 1rem; - width: 40%; + width: 70%; text-align: justify; margin: 0.063rem; padding: 1rem; @@ -251,7 +154,7 @@ button { display: flex; justify-content: space-around; margin-left: 0.5rem; - align-items:center; + align-items: center; } .infoMovie { font-family: "Montserrat Alternates", sans-serif; @@ -268,7 +171,6 @@ button { border-radius: 1.25rem; color: black; image-rendering: 1rem; - align-items: ; } .imagenDiv { @@ -289,7 +191,7 @@ button { } .chatHistorial { - flex: 1; + flex: 1; border: 0.3rem solid #7d5ca6; background-color: rgba(63, 62, 105, 0.9); padding: 1rem; @@ -303,7 +205,7 @@ button { #chatMessage { flex: 1; padding: 5px; - color:#000 + color: #000; } #chatSend { @@ -326,3 +228,10 @@ footer { margin-left: auto; margin-right: auto; } +@media (min-width: 768px) { + .ulPelis { + display: grid; + grid-template-columns: repeat(2, 45%); + margin-left: 9em; + } +} diff --git a/src/views/Peliculas.js b/src/views/Peliculas.js index daf109a5..14d7a06f 100644 --- a/src/views/Peliculas.js +++ b/src/views/Peliculas.js @@ -1,20 +1,18 @@ import data from "../data/dataset.js"; import { cardMovie } from "../components/tarjetaPelicula.js"; -import { createHeader } from "../components/header.js"; +import { createHeader } from "../components/header.js"; export const Films = (props) => { - console.log(props.id); const div = document.createElement("div"); - const header = createHeader(); - div.appendChild(header); - - const selectMovie = data.find((movie) => movie.id === props.id); - console.log(selectMovie); - if (selectMovie) { - div.appendChild(cardMovie(selectMovie)); - } else { - div.inneHTML = div.innerHTML = `

Película no encontrada

`; - } - - return div; - }; + const header = createHeader(); + div.appendChild(header); + + const selectMovie = data.find((movie) => movie.id === props.id); + if (selectMovie) { + div.appendChild(cardMovie(selectMovie)); + } else { + div.inneHTML = div.innerHTML = `

Película no encontrada

`; + } + + return div; +}; diff --git a/src/views/chatUnico.js b/src/views/chatUnico.js index 91a6c6f5..3a4ace0d 100644 --- a/src/views/chatUnico.js +++ b/src/views/chatUnico.js @@ -4,16 +4,15 @@ export async function getContext(name, pregunta, allCharacters) { let message; if (!allCharacters) { message = - "Eres la pelicula " + name + " y responderás según su historia y como si fueras el protagonista, la siguiente pregunta: " + pregunta; - } else { - message = - "Eres una película de disney y pixar donde estarían " + - names + - ", responde personificando a los protagonistas como una voz en conjunto y solo en español"; - } - return await communicateWithOpenAI([{ - role: "user", - content: message} - ]); - + "Eres la pelicula " + + name + + " y responderás según su historia y como si fueras el protagonista, la siguiente pregunta: " + + pregunta; + } + return await communicateWithOpenAI([ + { + role: "user", + content: message, + }, + ]); } diff --git a/src/views/home.js b/src/views/home.js index d21d7f80..26c047f9 100644 --- a/src/views/home.js +++ b/src/views/home.js @@ -5,7 +5,7 @@ import { createFooter } from "../Components/footer.js"; import { filtroyorden } from "../Components/filtroyorden.js"; import { api } from "../views/api.js"; -export const Home = (props) => { +export const Home = () => { const div = document.createElement("div"); div.appendChild(createHeader()); div.appendChild(api()); diff --git a/test/apiKey.spec.js b/test/apiKey.spec.js index 7ff12534..d92bede7 100644 --- a/test/apiKey.spec.js +++ b/test/apiKey.spec.js @@ -1,30 +1,28 @@ // test/apiKey.spec.js -import { getApiKey, setApiKey } from '../src/lib/apiKey.js'; +import { getApiKey, setApiKey } from "../src/lib/apiKey.js"; -describe('getApiKey', () => { - - it('debería devolver el valor de la API Key', () => { - // Establecemos un valor para la API Key - const mockApiKey = '12345-ABCDE'; - setApiKey(mockApiKey); +describe("getApiKey", () => { + it("debería devolver el valor de la API Key", () => { + // Establecemos un valor para la API Key + const mockApiKey = "12345-ABCDE"; + setApiKey(mockApiKey); - // Comprobamos que getApiKey devuelva el valor correcto - const result = getApiKey(); - expect(result).toBe(mockApiKey); - }); + // Comprobamos que getApiKey devuelva el valor correcto + const result = getApiKey(); + expect(result).toBe(mockApiKey); + }); - it('debería devolver undefined si la API Key no ha sido establecida', () => { - // Comprobamos que getApiKey devuelva undefined cuando no se ha establecido ninguna API Key - const result = getApiKey(); - expect(result).toBeUndefined(); - }); + it("debería devolver undefined si la API Key no ha sido establecida", () => { + // Comprobamos que getApiKey devuelva undefined cuando no se ha establecido ninguna API Key + const result = getApiKey(); + expect(result).toBeUndefined(); + }); }); -describe('setApiKey', () => { - - it('debería establecer correctamente la API Key', () => { - const mockApiKey = '67890-FGHIJ'; +describe("setApiKey", () => { + it("debería establecer correctamente la API Key", () => { + const mockApiKey = "67890-FGHIJ"; // Establecemos un valor para la API Key setApiKey(mockApiKey); diff --git a/test/data.js b/test/data.js index 2a791949..ea6207ed 100644 --- a/test/data.js +++ b/test/data.js @@ -2,192 +2,234 @@ // al menos debe tener uno que se llame "data" export const data = [ - { - "id": "Disney-Elemental", - "name": "Elemental", - "shortDescription": "Explora un mundo donde los elementos naturales cobran vida y coexisten en una vibrante ciudad.", - "description": "Seguimos la historia de Ember, una joven de fuego, y Wade, un chico de agua, que provienen de mundos opuestos. A pesar de sus diferencias, desarrollan una amistad única que desafía las convenciones sociales de su entorno. A medida que su vínculo se fortalece, Ember y Wade descubren que las diferencias que los separan también pueden ser la clave para superar desafíos personales y comunitarios. La película presenta un viaje emocional y visualmente espectacular que celebra la diversidad y la aceptación.", - "imageUrl": "https://es.web.img3.acsta.net/pictures/23/05/17/10/28/2036083.jpg", - "facts": { - "estreno": "2023", - "generoPelicula": "Aventura, Fantasía", - "clasificacionPelicula": "Diversidad", - "clasificPublico": "7.1/10", - "tiempoDuracion": "101 minutos", - }, - "extraInfo": { - "curiosidades": "Para crear el efecto visual del personaje de Ember, el equipo de animación desarrolló nuevas técnicas para capturar la fluidez y el dinamismo del fuego de una manera realista y expresiva." - } - }, - { - "id": "pixar-up", - "name": "UP", - "shortDescription": "Aventuras emocionantes de un anciano y un niño explorador en una casa voladora impulsada por globos.", - "description": "Up narra la historia de Carl Fredricksen, un viudo de edad avanzada decidido a cumplir la promesa que le hizo a su difunta esposa. Con ingenio y determinación, Carl ata miles de globos a su casa y emprende un viaje épico hacia las remotas tierras de América del Sur. Pero su plan se complica cuando descubre que un inesperado pasajero, Russell, un explorador juvenil, se ha colado a bordo. Juntos, enfrentan peligros inimaginables y descubren que la aventura más grande de todas es la amistad.", - "imageUrl": "https://www.funeralnatural.net/sites/default/files/pelicula/imagen/upcartel.jpg", - "facts": { - "estreno": "2009", - "generoPelicula": "Aventura, Comedia, Drama", - "clasificacionPelicula": "Perseverancia", - "clasificPublico": "8.3/10", - "tiempoDuracion": "96 minutos", - }, - "extraInfo": { - "curiosidades": "La casa voladora de Carl Fredricksen está inspirada en la casa real de los hermanos Ellie y Carl, dos hermanos que crecieron en la ciudad de Los Ángeles, California." - } - }, - { - "id": "coco-pelicula", - "name": "Coco", - "shortDescription": "Una celebración musical y visual que explora la importancia de la familia y la memoria.", - "description": "Coco cuenta la historia de Miguel, un niño mexicano con grandes sueños musicales en un hogar donde la música está prohibida. En el Día de los Muertos, Miguel se embarca en un viaje extraordinario al mundo de los muertos para descubrir la verdad sobre su familia y su pasión por la música. Con impresionantes visuales y una banda sonora conmovedora, la película celebra la cultura mexicana y enseña lecciones sobre el amor, el legado y la importancia de recordar a nuestros seres queridos.", - "imageUrl": "https://es.web.img2.acsta.net/pictures/17/09/14/10/49/2019727.jpg", - "facts": { - "estreno": "2017", - "generoPelicula": "Aventura, Fantasía", - "clasificacionPelicula": "Familia", - "clasificPublico": "8.4/10", - "tiempoDuracion": "105 minutos", - }, - "extraInfo": { - "curiosidades":"Coco fue elogiada por su representación auténtica de la cultura mexicana, desde sus tradiciones hasta la música mariachi. Ganó dos Premios de la Academia, incluyendo Mejor Película Animada y Mejor Canción Original por Recuerdame." - } - }, - { - "id": "Walle-2008", - "name": "Wall-e", - "shortDescription": "Un robot solitario descubre el amor y la esperanza en un futuro distópico. Aventura encantadora y ecológica que inspira", - "description": "Seguimos a Wall-e, un pequeño robot diseñado para limpiar un planeta Tierra abandonado y cubierto de basura. Durante siglos, Wall-e ha desarrollado una personalidad única y un gran sentido de curiosidad. Todo cambia cuando conoce a EVE, una sonda enviada desde el espacio con una misión misteriosa. Juntos, Wall-e y EVE emprenden un viaje intergaláctico que desafía las expectativas y revela la importancia de la conexión humana y el cuidado del medio ambiente. Esta obra maestra de animación combina humor, emoción y reflexión sobre el futuro de la humanidad.", - "imageUrl": "https://es.web.img2.acsta.net/pictures/14/04/30/10/41/026995.jpg", - "facts": { - "estreno": "2008", - "generoPelicula": "Aventura, Ciencia ficción", - "clasificacionPelicula": "Esperanza", - "clasificPublico": "8.4/10", - "tiempoDuracion": "98 minutos", - }, - "extraInfo": { - "curiosidades": "Wall-e cuenta con una narrativa visual rica y detallada que permite a la historia ser contada con un mínimo diálogo durante la primera parte de la película, mostrando la maestría de Pixar en la animación y la narración visual." - } - }, - { - "id": "intensamente-2015", - "name": "Intensamente", - "shortDescription": "Explora las emociones humanas a través de la historia de Riley y las cinco emociones personificadas que guían su vida.", - "description": "Riley, una niña que atraviesa cambios importantes en su vida familiar al mudarse a una nueva ciudad. La historia se desarrolla dentro de su mente, donde sus emociones personificadas - Alegría, Tristeza, Miedo, Furia y Asco - trabajan juntas en la central de control emocional para guiar sus acciones y decisiones. A medida que Riley navega por los desafíos de crecer, las emociones aprenden lecciones valiosas sobre la importancia de la empatía, el equilibrio emocional y la aceptación de la tristeza como parte integral de la vida.", - "imageUrl": "https://mx.web.img3.acsta.net/pictures/17/08/07/21/43/466493.jpg", - "facts": { - "estreno": "2015", - "generoPelicula": "Aventura, Comedia, Drama", - "clasificacionPelicula": "Empatía", - "clasificPublico": "8/10", - "tiempoDuracion": "95 minutos", - }, - "extraInfo": { - "curiosidades": "Intensamente fue aclamada por su representación precisa de la psicología emocional y ganó el Premio de la Academia a la Mejor Película Animada en 2016." - } - }, - { - "id": "lilo-stitch", - "name": "Lilo y Stitch", - "shortDescription": "Una niña hawaiana y un alienígena travieso descubren el verdadero significado de la familia.", - "description": "Lilo & Stitch narra la conmovedora historia de Lilo, una niña hawaiana única, y Stitch, un alienígena travieso. Ambientada en las soleadas costas de Hawái, la película celebra la importancia de la familia y la aceptación. Con su animación vibrante y memorable banda sonora, captura tanto la esencia de la cultura hawaiana como la bondad universal. 'Lilo & Stitch' nos recuerda que la verdadera familia a menudo viene en formas inesperadas, enseñando lecciones de amor, amistad y comprensión en un viaje emocional que sigue siendo querido por generaciones.", - "imageUrl": "https://www.ecartelera.com/carteles/5100/5197/002_m.jpg", - "facts": { - "estreno": "2002", - "generoPelicula": "Aventura, Comedia, Ciencia ficción", - "clasificacionPelicula": "Familia", - "clasificPublico": "7.2/10", - "tiempoDuracion": "85 minutos", - }, - "extraInfo": { - "curiosidades": "'Lilo y Stitch' es conocida por su enfoque en la cultura y las tradiciones de Hawái, así como por su banda sonora que incluye música hawaiana auténtica mezclada con canciones pop contemporáneas" - } - }, - { - "id": "atlantis", - "name": "Atlantis: El Imperio Perdido", - "shortDescription": " Una emocionante expedición hacia un misterioso mundo subacuático en busca de un antiguo imperio perdido.", - "description": "Atlantis: El Imperio Perdido es una emocionante película de Disney que sigue a Milo Thatch, un cartógrafo y lingüista, en su búsqueda para encontrar la legendaria ciudad de Atlantis. Acompañado por un variopinto grupo de exploradores, Milo se embarca en una peligrosa expedición submarina. La película destaca por su impresionante animación, inspirada en el estilo visual de cómics, y su intrigante mezcla de mitología y ciencia ficción. Con una historia llena de acción, descubrimientos y valores como la amistad y la perseverancia, Atlantis es una aventura que inspira y cautiva a espectadores de todas las edades.", - "imageUrl": "https://www.aceprensa.com/wp-content/uploads/2001/11/10865-0.jpg", - "facts": { - "estreno": "2001", - "generoPelicula": "Aventura, Ciencia ficción", - "clasificacionPelicula": "Descubrimiento", - "clasificPublico": "6.9/10", - "tiempoDuracion": "96 minutos", - }, - "extraInfo": { - "curiosidades": "'Atlantis: El Imperio Perdido' fue una de las primeras películas de Disney en utilizar animación tradicional combinada con gráficos generados por computadora para crear ambientes submarinos espectaculares." - } - }, - { - "id": "big-hero", - "name": "Big Hero 6", - "shortDescription": "Una historia emocionante sobre un joven prodigio y su robot inflable en una ciudad futurista.", - "description": "En 'Big Hero 6', conocemos a Hiro Hamada, un joven genio de la robótica que vive en San Fransokyo, una ciudad futurista y vibrante. Después de sufrir una pérdida devastadora, Hiro se une a Baymax, un robot inflable diseñado para el cuidado de la salud, y a un grupo de amigos con habilidades únicas. Juntos, se convierten en Big Hero 6 y luchan contra un misterioso villano que amenaza con destruir la ciudad. La película combina acción trepidante con temas de amistad, valentía y la importancia de superar la pérdida.", - "imageUrl": "https://es.web.img3.acsta.net/pictures/14/09/01/13/43/553593.jpg", - "facts": { - "estreno": "2014", - "generoPelicula": "Aventura, Acción", - "clasificacionPelicula": "Resiliencia", - "clasificPublico": "7.8/10", - "tiempoDuracion": "102 minutos", - }, - "extraInfo": { - "curiosidades": "'Big Hero 6' está basada en el cómic de Marvel del mismo nombre, pero la trama y los personajes fueron adaptados para tener un enfoque más familiar y emocionalmente profundo" - } - }, - { - "id": "planeta-tesoro", - "name": "El Planeta del Tesoro", - "shortDescription": "Una aventura espacial llena de acción en busca de un legendario tesoro intergaláctico.", - "description": "En 'El Planeta del Tesoro', Jim Hawkins, un joven audaz y aventurero, descubre un mapa que lo lleva a una búsqueda épica en el espacio por el tesoro del legendario pirata Nathan Flint. A bordo de una nave espacial liderada por el enigmático Capitán Amelia y el cínico cyborg John Silver, Jim enfrenta peligros intergalácticos y aprende lecciones sobre coraje, lealtad y el verdadero significado de la amistad. La película, con su impresionante animación y emocionante trama, transporta a los espectadores a un universo vibrante lleno de intrigas y descubrimientos", - "imageUrl": "https://es.web.img2.acsta.net/pictures/14/04/14/12/53/368430.jpg", - "facts": { - "estreno": "2002", - "generoPelicula": "Aventura, Ciencia ficción", - "clasificacionPelicula": "Aventura", - "clasificPublico": "7.2/10", - "tiempoDuracion": "95 minutos", - }, - "extraInfo": { - "curiosidades": "'El Planeta del Tesoro' es una adaptación animada del clásico literario 'La isla del tesoro' de Robert Louis Stevenson, ambientada en un entorno futurista y espacial. " - } - }, - { - "id": "mundo-jack", - "name": "El Extraño Mundo de Jack", - "shortDescription": "Una película animada que fusiona el encanto de Halloween con la magia de la Navidad.", - "description": "El Extraño Mundo de Jack cuenta la historia de Jack Skellington, el Rey de Halloween, quien se cansa de celebrar siempre la misma fiesta cada año. Cuando descubre accidentalmente la Ciudad de la Navidad, se obsesiona con traer el espíritu navideño a su oscuro reino de Halloween. Sin embargo, sus intentos de recrear la Navidad llevan a resultados cómicos y desastrosos. A través de la historia de Jack, la película explora temas de autodescubrimiento, aceptación y la importancia de ser fiel a uno mismo.", - "imageUrl": "https://static.wixstatic.com/media/51d250_0469ccba361b4111bf43aab68e012386~mv2.jpg/v1/fill/w_800,h_1200,al_c,q_85,enc_auto/51d250_0469ccba361b4111bf43aab68e012386~mv2.jpg", - "facts": { - "estreno": "1993", - "generoPelicula": "Fantasía, Musical", - "clasificacionPelicula": "Autenticidad", - "clasificPublico": "8/10", - "tiempoDuracion": "76 minutos", - }, - "extraInfo": { - "curiosidades": "'El Extraño Mundo de Jack' fue inicialmente concebida por Tim Burton como un poema en los años 80, antes de ser adaptada en una película animada. Aunque a menudo se asocia con Tim Burton como director, en realidad fue dirigida por Henry Selick, quien también trabajó en 'Coraline'." - } - }, - { - "id": "tarzan-1999", - "name": "Tarzán", - "shortDescription": "Una emocionante aventura animada sobre un niño criado por gorilas en la jungla africana.", - "description": "Un niño que es adoptado por una familia de gorilas después de la muerte de sus padres en un naufragio. A medida que crece, Tarzán desarrolla habilidades extraordinarias y se adapta a la vida en la selva. Su vida cambia cuando conoce a Jane, una exploradora y científica, y se enfrenta a la amenaza de los cazadores furtivos que buscan explotar la naturaleza. La película, dirigida por Chris Buck y Kevin Lima, destaca por su animación impresionante, la icónica banda sonora de Phil Collins y su mensaje sobre la importancia del respeto hacia la naturaleza y la diversidad cultural.", - "imageUrl": "https://es.web.img3.acsta.net/pictures/14/03/17/11/47/596263.jpg", - "facts": { - "estreno": "1999", - "generoPelicula": "Aventura, Drama", - "clasificacionPelicula": "Identidad", - "clasificPublico": "7.3/10", - "tiempoDuracion": "88 minutos", - }, - "extraInfo": { - "curiosidades": "'Tarzan' fue el primer largometraje animado de Disney en utilizar tecnología digital para pintar los fondos. La película ganó el Premio Óscar a la Mejor Canción Original por 'You'll Be in My Heart' de Phil Collins, que se convirtió en un éxito internacional." - } - }, - - ]; \ No newline at end of file + { + id: "Disney-Elemental", + name: "Elemental", + shortDescription: + "Explora un mundo donde los elementos naturales cobran vida y coexisten en una vibrante ciudad.", + description: + "Seguimos la historia de Ember, una joven de fuego, y Wade, un chico de agua, que provienen de mundos opuestos. A pesar de sus diferencias, desarrollan una amistad única que desafía las convenciones sociales de su entorno. A medida que su vínculo se fortalece, Ember y Wade descubren que las diferencias que los separan también pueden ser la clave para superar desafíos personales y comunitarios. La película presenta un viaje emocional y visualmente espectacular que celebra la diversidad y la aceptación.", + imageUrl: + "https://es.web.img3.acsta.net/pictures/23/05/17/10/28/2036083.jpg", + facts: { + estreno: "2023", + generoPelicula: "Aventura, Fantasía", + clasificacionPelicula: "Diversidad", + clasificPublico: "7.1/10", + tiempoDuracion: "101 minutos", + }, + extraInfo: { + curiosidades: + "Para crear el efecto visual del personaje de Ember, el equipo de animación desarrolló nuevas técnicas para capturar la fluidez y el dinamismo del fuego de una manera realista y expresiva.", + }, + }, + { + id: "pixar-up", + name: "UP", + shortDescription: + "Aventuras emocionantes de un anciano y un niño explorador en una casa voladora impulsada por globos.", + description: + "Up narra la historia de Carl Fredricksen, un viudo de edad avanzada decidido a cumplir la promesa que le hizo a su difunta esposa. Con ingenio y determinación, Carl ata miles de globos a su casa y emprende un viaje épico hacia las remotas tierras de América del Sur. Pero su plan se complica cuando descubre que un inesperado pasajero, Russell, un explorador juvenil, se ha colado a bordo. Juntos, enfrentan peligros inimaginables y descubren que la aventura más grande de todas es la amistad.", + imageUrl: + "https://www.funeralnatural.net/sites/default/files/pelicula/imagen/upcartel.jpg", + facts: { + estreno: "2009", + generoPelicula: "Aventura, Comedia, Drama", + clasificacionPelicula: "Perseverancia", + clasificPublico: "8.3/10", + tiempoDuracion: "96 minutos", + }, + extraInfo: { + curiosidades: + "La casa voladora de Carl Fredricksen está inspirada en la casa real de los hermanos Ellie y Carl, dos hermanos que crecieron en la ciudad de Los Ángeles, California.", + }, + }, + { + id: "coco-pelicula", + name: "Coco", + shortDescription: + "Una celebración musical y visual que explora la importancia de la familia y la memoria.", + description: + "Coco cuenta la historia de Miguel, un niño mexicano con grandes sueños musicales en un hogar donde la música está prohibida. En el Día de los Muertos, Miguel se embarca en un viaje extraordinario al mundo de los muertos para descubrir la verdad sobre su familia y su pasión por la música. Con impresionantes visuales y una banda sonora conmovedora, la película celebra la cultura mexicana y enseña lecciones sobre el amor, el legado y la importancia de recordar a nuestros seres queridos.", + imageUrl: + "https://es.web.img2.acsta.net/pictures/17/09/14/10/49/2019727.jpg", + facts: { + estreno: "2017", + generoPelicula: "Aventura, Fantasía", + clasificacionPelicula: "Familia", + clasificPublico: "8.4/10", + tiempoDuracion: "105 minutos", + }, + extraInfo: { + curiosidades: + "Coco fue elogiada por su representación auténtica de la cultura mexicana, desde sus tradiciones hasta la música mariachi. Ganó dos Premios de la Academia, incluyendo Mejor Película Animada y Mejor Canción Original por Recuerdame.", + }, + }, + { + id: "Walle-2008", + name: "Wall-e", + shortDescription: + "Un robot solitario descubre el amor y la esperanza en un futuro distópico. Aventura encantadora y ecológica que inspira", + description: + "Seguimos a Wall-e, un pequeño robot diseñado para limpiar un planeta Tierra abandonado y cubierto de basura. Durante siglos, Wall-e ha desarrollado una personalidad única y un gran sentido de curiosidad. Todo cambia cuando conoce a EVE, una sonda enviada desde el espacio con una misión misteriosa. Juntos, Wall-e y EVE emprenden un viaje intergaláctico que desafía las expectativas y revela la importancia de la conexión humana y el cuidado del medio ambiente. Esta obra maestra de animación combina humor, emoción y reflexión sobre el futuro de la humanidad.", + imageUrl: + "https://es.web.img2.acsta.net/pictures/14/04/30/10/41/026995.jpg", + facts: { + estreno: "2008", + generoPelicula: "Aventura, Ciencia ficción", + clasificacionPelicula: "Esperanza", + clasificPublico: "8.4/10", + tiempoDuracion: "98 minutos", + }, + extraInfo: { + curiosidades: + "Wall-e cuenta con una narrativa visual rica y detallada que permite a la historia ser contada con un mínimo diálogo durante la primera parte de la película, mostrando la maestría de Pixar en la animación y la narración visual.", + }, + }, + { + id: "intensamente-2015", + name: "Intensamente", + shortDescription: + "Explora las emociones humanas a través de la historia de Riley y las cinco emociones personificadas que guían su vida.", + description: + "Riley, una niña que atraviesa cambios importantes en su vida familiar al mudarse a una nueva ciudad. La historia se desarrolla dentro de su mente, donde sus emociones personificadas - Alegría, Tristeza, Miedo, Furia y Asco - trabajan juntas en la central de control emocional para guiar sus acciones y decisiones. A medida que Riley navega por los desafíos de crecer, las emociones aprenden lecciones valiosas sobre la importancia de la empatía, el equilibrio emocional y la aceptación de la tristeza como parte integral de la vida.", + imageUrl: + "https://mx.web.img3.acsta.net/pictures/17/08/07/21/43/466493.jpg", + facts: { + estreno: "2015", + generoPelicula: "Aventura, Comedia, Drama", + clasificacionPelicula: "Empatía", + clasificPublico: "8/10", + tiempoDuracion: "95 minutos", + }, + extraInfo: { + curiosidades: + "Intensamente fue aclamada por su representación precisa de la psicología emocional y ganó el Premio de la Academia a la Mejor Película Animada en 2016.", + }, + }, + { + id: "lilo-stitch", + name: "Lilo y Stitch", + shortDescription: + "Una niña hawaiana y un alienígena travieso descubren el verdadero significado de la familia.", + description: + "Lilo & Stitch narra la conmovedora historia de Lilo, una niña hawaiana única, y Stitch, un alienígena travieso. Ambientada en las soleadas costas de Hawái, la película celebra la importancia de la familia y la aceptación. Con su animación vibrante y memorable banda sonora, captura tanto la esencia de la cultura hawaiana como la bondad universal. 'Lilo & Stitch' nos recuerda que la verdadera familia a menudo viene en formas inesperadas, enseñando lecciones de amor, amistad y comprensión en un viaje emocional que sigue siendo querido por generaciones.", + imageUrl: "https://www.ecartelera.com/carteles/5100/5197/002_m.jpg", + facts: { + estreno: "2002", + generoPelicula: "Aventura, Comedia, Ciencia ficción", + clasificacionPelicula: "Familia", + clasificPublico: "7.2/10", + tiempoDuracion: "85 minutos", + }, + extraInfo: { + curiosidades: + "'Lilo y Stitch' es conocida por su enfoque en la cultura y las tradiciones de Hawái, así como por su banda sonora que incluye música hawaiana auténtica mezclada con canciones pop contemporáneas", + }, + }, + { + id: "atlantis", + name: "Atlantis: El Imperio Perdido", + shortDescription: + " Una emocionante expedición hacia un misterioso mundo subacuático en busca de un antiguo imperio perdido.", + description: + "Atlantis: El Imperio Perdido es una emocionante película de Disney que sigue a Milo Thatch, un cartógrafo y lingüista, en su búsqueda para encontrar la legendaria ciudad de Atlantis. Acompañado por un variopinto grupo de exploradores, Milo se embarca en una peligrosa expedición submarina. La película destaca por su impresionante animación, inspirada en el estilo visual de cómics, y su intrigante mezcla de mitología y ciencia ficción. Con una historia llena de acción, descubrimientos y valores como la amistad y la perseverancia, Atlantis es una aventura que inspira y cautiva a espectadores de todas las edades.", + imageUrl: + "https://www.aceprensa.com/wp-content/uploads/2001/11/10865-0.jpg", + facts: { + estreno: "2001", + generoPelicula: "Aventura, Ciencia ficción", + clasificacionPelicula: "Descubrimiento", + clasificPublico: "6.9/10", + tiempoDuracion: "96 minutos", + }, + extraInfo: { + curiosidades: + "'Atlantis: El Imperio Perdido' fue una de las primeras películas de Disney en utilizar animación tradicional combinada con gráficos generados por computadora para crear ambientes submarinos espectaculares.", + }, + }, + { + id: "big-hero", + name: "Big Hero 6", + shortDescription: + "Una historia emocionante sobre un joven prodigio y su robot inflable en una ciudad futurista.", + description: + "En 'Big Hero 6', conocemos a Hiro Hamada, un joven genio de la robótica que vive en San Fransokyo, una ciudad futurista y vibrante. Después de sufrir una pérdida devastadora, Hiro se une a Baymax, un robot inflable diseñado para el cuidado de la salud, y a un grupo de amigos con habilidades únicas. Juntos, se convierten en Big Hero 6 y luchan contra un misterioso villano que amenaza con destruir la ciudad. La película combina acción trepidante con temas de amistad, valentía y la importancia de superar la pérdida.", + imageUrl: + "https://es.web.img3.acsta.net/pictures/14/09/01/13/43/553593.jpg", + facts: { + estreno: "2014", + generoPelicula: "Aventura, Acción", + clasificacionPelicula: "Resiliencia", + clasificPublico: "7.8/10", + tiempoDuracion: "102 minutos", + }, + extraInfo: { + curiosidades: + "'Big Hero 6' está basada en el cómic de Marvel del mismo nombre, pero la trama y los personajes fueron adaptados para tener un enfoque más familiar y emocionalmente profundo", + }, + }, + { + id: "planeta-tesoro", + name: "El Planeta del Tesoro", + shortDescription: + "Una aventura espacial llena de acción en busca de un legendario tesoro intergaláctico.", + description: + "En 'El Planeta del Tesoro', Jim Hawkins, un joven audaz y aventurero, descubre un mapa que lo lleva a una búsqueda épica en el espacio por el tesoro del legendario pirata Nathan Flint. A bordo de una nave espacial liderada por el enigmático Capitán Amelia y el cínico cyborg John Silver, Jim enfrenta peligros intergalácticos y aprende lecciones sobre coraje, lealtad y el verdadero significado de la amistad. La película, con su impresionante animación y emocionante trama, transporta a los espectadores a un universo vibrante lleno de intrigas y descubrimientos", + imageUrl: + "https://es.web.img2.acsta.net/pictures/14/04/14/12/53/368430.jpg", + facts: { + estreno: "2002", + generoPelicula: "Aventura, Ciencia ficción", + clasificacionPelicula: "Aventura", + clasificPublico: "7.2/10", + tiempoDuracion: "95 minutos", + }, + extraInfo: { + curiosidades: + "'El Planeta del Tesoro' es una adaptación animada del clásico literario 'La isla del tesoro' de Robert Louis Stevenson, ambientada en un entorno futurista y espacial. ", + }, + }, + { + id: "mundo-jack", + name: "El Extraño Mundo de Jack", + shortDescription: + "Una película animada que fusiona el encanto de Halloween con la magia de la Navidad.", + description: + "El Extraño Mundo de Jack cuenta la historia de Jack Skellington, el Rey de Halloween, quien se cansa de celebrar siempre la misma fiesta cada año. Cuando descubre accidentalmente la Ciudad de la Navidad, se obsesiona con traer el espíritu navideño a su oscuro reino de Halloween. Sin embargo, sus intentos de recrear la Navidad llevan a resultados cómicos y desastrosos. A través de la historia de Jack, la película explora temas de autodescubrimiento, aceptación y la importancia de ser fiel a uno mismo.", + imageUrl: + "https://static.wixstatic.com/media/51d250_0469ccba361b4111bf43aab68e012386~mv2.jpg/v1/fill/w_800,h_1200,al_c,q_85,enc_auto/51d250_0469ccba361b4111bf43aab68e012386~mv2.jpg", + facts: { + estreno: "1993", + generoPelicula: "Fantasía, Musical", + clasificacionPelicula: "Autenticidad", + clasificPublico: "8/10", + tiempoDuracion: "76 minutos", + }, + extraInfo: { + curiosidades: + "'El Extraño Mundo de Jack' fue inicialmente concebida por Tim Burton como un poema en los años 80, antes de ser adaptada en una película animada. Aunque a menudo se asocia con Tim Burton como director, en realidad fue dirigida por Henry Selick, quien también trabajó en 'Coraline'.", + }, + }, + { + id: "tarzan-1999", + name: "Tarzán", + shortDescription: + "Una emocionante aventura animada sobre un niño criado por gorilas en la jungla africana.", + description: + "Un niño que es adoptado por una familia de gorilas después de la muerte de sus padres en un naufragio. A medida que crece, Tarzán desarrolla habilidades extraordinarias y se adapta a la vida en la selva. Su vida cambia cuando conoce a Jane, una exploradora y científica, y se enfrenta a la amenaza de los cazadores furtivos que buscan explotar la naturaleza. La película, dirigida por Chris Buck y Kevin Lima, destaca por su animación impresionante, la icónica banda sonora de Phil Collins y su mensaje sobre la importancia del respeto hacia la naturaleza y la diversidad cultural.", + imageUrl: + "https://es.web.img3.acsta.net/pictures/14/03/17/11/47/596263.jpg", + facts: { + estreno: "1999", + generoPelicula: "Aventura, Drama", + clasificacionPelicula: "Identidad", + clasificPublico: "7.3/10", + tiempoDuracion: "88 minutos", + }, + extraInfo: { + curiosidades: + "'Tarzan' fue el primer largometraje animado de Disney en utilizar tecnología digital para pintar los fondos. La película ganó el Premio Óscar a la Mejor Canción Original por 'You'll Be in My Heart' de Phil Collins, que se convirtió en un éxito internacional.", + }, + }, +]; diff --git a/test/datafuntions.spec.js b/test/datafuntions.spec.js index c8395ce4..48b63f0a 100644 --- a/test/datafuntions.spec.js +++ b/test/datafuntions.spec.js @@ -1,49 +1,47 @@ -import { filterData, sortData, computeStats } from '../src/lib/dataFunctions.js'; -import { data as fakeData } from '../test/data.js'; - -describe('test unitarios orden', () => { - - it('test unitarios orden asc', () => { - const dataResultado = sortData(fakeData,"name","Asc") - expect(dataResultado[0].name).toBe('Atlantis: El Imperio Perdido'); +import { + filterData, + sortData, + computeStats, +} from "../src/lib/dataFunctions.js"; +import { data as fakeData } from "../test/data.js"; + +describe("test unitarios orden", () => { + it("test unitarios orden asc", () => { + const dataResultado = sortData(fakeData, "name", "Asc"); + expect(dataResultado[0].name).toBe("Atlantis: El Imperio Perdido"); }); - it('test unitarios orden desc', () => { - const dataResultado = sortData(fakeData,"name","Desc") - expect(dataResultado[0].name).toBe('Wall-e'); + it("test unitarios orden desc", () => { + const dataResultado = sortData(fakeData, "name", "Desc"); + expect(dataResultado[0].name).toBe("Wall-e"); }); - }); -describe('test unitario filtro', () => { - - it('test unitario filtro época 1990', () => { - const dataFiltro90 = filterData(fakeData,"estreno", "1990") +describe("test unitario filtro", () => { + it("test unitario filtro época 1990", () => { + const dataFiltro90 = filterData(fakeData, "estreno", "1990"); expect(dataFiltro90.length).toBe(5); }); - it('test unitario filtro época 2000', () => { - const dataFiltro00 = filterData(fakeData,"estreno", "2000") + it("test unitario filtro época 2000", () => { + const dataFiltro00 = filterData(fakeData, "estreno", "2000"); expect(dataFiltro00.length).toBe(8); }); - it('test unitario filtro época 2010', () => { - const dataFiltro10 = filterData(fakeData,"estreno", "2010") + it("test unitario filtro época 2010", () => { + const dataFiltro10 = filterData(fakeData, "estreno", "2010"); expect(dataFiltro10.length).toBe(7); }); - it('test unitario filtro época 2020', () => { - const dataFiltro20 = filterData(fakeData,"estreno", "2020") + it("test unitario filtro época 2020", () => { + const dataFiltro20 = filterData(fakeData, "estreno", "2020"); expect(dataFiltro20.length).toBe(4); }); }); - -describe('test unitario promedio duración', () => { - - it('test unitario promedio', () => { - const resultado = computeStats(fakeData) +describe("test unitario promedio duración", () => { + it("test unitario promedio", () => { + const resultado = computeStats(fakeData); expect(resultado).toBe(96.5); }); - -}); \ No newline at end of file +}); diff --git a/test/openAIApi.spec.js b/test/openAIApi.spec.js new file mode 100644 index 00000000..1b1ec955 --- /dev/null +++ b/test/openAIApi.spec.js @@ -0,0 +1,50 @@ +import { communicateWithOpenAI } from "./openAIApi.js"; +window.fetch = jest.fn(); // Mock de la función fetch +describe("communicateWithOpenAI", () => { + beforeEach(() => { + fetch.mockClear(); // Reinicia el mock antes de cada test + }); //it es una función que define un caso de prueba. Es equivalente a test + it("debe entregar la respuesta de OpenAI cuando la petición sería exitosa", async () => { + const mockResponse = { choices: [{ text: "respuesta" }] }; + fetch.mockResolvedValueOnce({ + // Simula la respuesta de fetch con éxito + ok: true, //indica que la respuesta HTTP tuvo exito (200-299). + json: jest.fn().mockResolvedValueOnce(mockResponse), //mockResolvedValueOnce(mockResponse): Simula que la llamada al método + }); // json: jest.fn(): convierte la respuesta en un json + const content = [{ role: "user", content: "Hola, IA" }]; + const result = await communicateWithOpenAI(content); + expect(fetch).toHaveBeenCalledTimes(1); // Asegúrate de que fetch fue llamado una vez + expect(result).toEqual(mockResponse); // Verifica que la respuesta sea la esperada + }); // Verifica que la respuesta sea la esperada + it("debe manejar errores cuando la API key no está presente", async () => { + const mockGetApiKey = jest + .spyOn(window.localStorage.__proto__, "getItem") + .mockReturnValueOnce(null); // Simula que no hay API Key + const consoleSpy = jest + .spyOn(console, "error") + .mockImplementation(() => {}); + const content = [{ role: "user", content: "Hola, IA" }]; + const result = await communicateWithOpenAI(content); + expect(consoleSpy).toHaveBeenCalledWith("API Key no encontrada o inválida"); // Verifica que el error fue impreso en la consola + expect(result).toBeNull(); // Verifica que el resultado sea nulo debido a la falta de API key + mockGetApiKey.mockRestore(); // Limpia el mock de la API key + consoleSpy.mockRestore(); + }); + it("debe manejar errores cuando la respuesta de la API falla", async () => { + // Simula una respuesta fallida de la API + fetch.mockResolvedValueOnce({ + ok: false, + statusText: "Error de servidor", + }); + const consoleSpy = jest + .spyOn(console, "error") + .mockImplementation(() => {}); + const content = [{ role: "user", content: "Hola, IA" }]; + const result = await communicateWithOpenAI(content); + expect(consoleSpy).toHaveBeenCalledWith( + expect.stringContaining("Falló este proceso muy lento:") + ); // Verifica que el error fue impreso en la consola + expect(result).toBeNull(); // Verifica que el resultado sea nulo debido al error en la API + consoleSpy.mockRestore(); + }); +}); From 6c2b20e0f1ddc063cb45e729dba6d4aaa47aef03 Mon Sep 17 00:00:00 2001 From: danimar-g Date: Wed, 11 Sep 2024 19:59:36 -0400 Subject: [PATCH 30/33] ultimos cambios boton y test --- src/Components/filtroyorden.js | 14 +++--- src/style.css | 92 ++++++++++++++++++++++++++++++++-- src/views/api.js | 10 ++-- test/apiKey.spec.js | 40 ++++++--------- test/datafuntions.spec.js | 10 ++-- test/example.spec.js | 0 test/openAIApi.spec.js | 15 +++--- 7 files changed, 131 insertions(+), 50 deletions(-) delete mode 100644 test/example.spec.js diff --git a/src/Components/filtroyorden.js b/src/Components/filtroyorden.js index dfe7c1d3..fc9706ae 100644 --- a/src/Components/filtroyorden.js +++ b/src/Components/filtroyorden.js @@ -2,10 +2,11 @@ import data from "../data/dataset.js"; import { filterData, sortData } from "../lib/dataFunctions.js"; import { card } from "./Card.js"; export const filtroyorden = (element) => { - const updateList = (data, containerElement) => { + + const updateList = (data) => { const lista = showCard(data); - containerElement.innerHTML = ""; // Limpia el contenido previo - containerElement.appendChild(lista); // Añade la nueva lista de datos + element.innerHTML = ""; // Limpia el contenido previo + element.appendChild(lista); // Añade la nueva lista de datos }; const div = document.createElement("selectores"); @@ -49,7 +50,7 @@ export const filtroyorden = (element) => { const valor = event.target.value; let dataFiltrada; if (valor === "0") { - dataFiltrada = data; + dataFiltrada = {...data} } else { dataFiltrada = filterData(data, "estreno", valor); } @@ -84,9 +85,10 @@ export const filtroyorden = (element) => { }); buttonBorrar.addEventListener("click", () => { - selectoresEpoca.value = "0"; selectoresOrden.value = "orden"; - updateList(data); // Muestra todos los datos sin filtros ni orden + selectoresEpoca.value = "0"; + updateList(data, element); // Muestra todos los datos sin filtros ni orden + }); return div; diff --git a/src/style.css b/src/style.css index 3f5331e9..5a584a0b 100644 --- a/src/style.css +++ b/src/style.css @@ -6,7 +6,7 @@ h1 { font-family: fuenteDisney, sans-serif; font-style: normal; - font-size: 8.75rem; + font-size: 3.80rem; text-align: center; color: #ffffff; text-shadow: 3px 3px 0 #c6ebfc; @@ -229,9 +229,95 @@ footer { margin-right: auto; } @media (min-width: 768px) { + + body { + overflow-x: hidden; + width: 100%; + } + + h1 { + font-family: fuenteDisney, sans-serif; + font-style: normal; + font-size: 8rem; + text-align: center; + color: #ffffff; + text-shadow: 3px 3px 0 #c6ebfc; + margin-top: 4.688rem; + margin-bottom: 4.688rem; + } + + .tituloSelectores { + font-size: 120%; + margin-left: 4em; + } + .selectores { + display: flex; + width: 100%; + align-items: center; + gap: 1em; + margin-left: 4em; + } + + select { + font-family: "Montserrat Alternates", sans-serif; + font-size: 100%; + color: black; + background-color: #cfeeff; + padding: 10px; + border: solid; + border-color: #9480fb; + font-weight: bold; + cursor: pointer; + cursor: pointer; + border-radius: 20px; + } + + option { + font-size: 100%; + color: black; + background-color: #cfeeff; + font-family: "Montserrat Alternates", sans-serif; + padding: 10px; + border-color: #9480fb; + border-width: 3px; + border-style: solid; + cursor: pointer; + border-radius: 20px; + } + + button { + font-family: "Montserrat Alternates", sans-serif; + font-weight: bold; + font-size: 100%; + background-color: #cfeeff; + color: black; + padding: 10px; + border: solid; + border-color: #9480fb; + border-width: 3px; + border-radius: 20px; + cursor: pointer; + } + .ulPelis { display: grid; - grid-template-columns: repeat(2, 45%); + grid-template-columns: repeat(2, 37.5rem); margin-left: 9em; + width: 100%; + justify-content: center; } -} + + .tarjeta { + display: flex; + justify-content: center; + flex-direction: column; + background-color: rgba(255, 255, 255, 0.9); + gap: 1rem; + text-align: justify; + padding: 1rem; + border-radius: 1.25rem; + position: relative; + box-sizing: border-box; + margin: 0; + } +} \ No newline at end of file diff --git a/src/views/api.js b/src/views/api.js index 9b3836ea..8026032b 100644 --- a/src/views/api.js +++ b/src/views/api.js @@ -17,14 +17,16 @@ export const api = () => { saveButton.classList.add("saveButton"); saveButton.addEventListener("click", () => { const apiKey = apiKeyInput.value; - localStorage.setItem("apiKey", apiKey); - alert("ApiKey guardada exitosamente."); + if (!apiKey || apiKey.length < 5) { + alert("La clave es inválida. Por favor, ingrese una clave válida."); + } else { + localStorage.setItem("apiKey", apiKey); + alert("ApiKey guardada exitosamente."); + } }); divApi.appendChild(elementLabel); divApi.appendChild(apiKeyInput); divApi.appendChild(saveButton); return divApi; - - }; diff --git a/test/apiKey.spec.js b/test/apiKey.spec.js index d92bede7..0a69e063 100644 --- a/test/apiKey.spec.js +++ b/test/apiKey.spec.js @@ -2,32 +2,22 @@ import { getApiKey, setApiKey } from "../src/lib/apiKey.js"; -describe("getApiKey", () => { - it("debería devolver el valor de la API Key", () => { - // Establecemos un valor para la API Key - const mockApiKey = "12345-ABCDE"; - setApiKey(mockApiKey); - - // Comprobamos que getApiKey devuelva el valor correcto - const result = getApiKey(); - expect(result).toBe(mockApiKey); +describe('API Key Storage', () => { + beforeEach(() => { + // Limpia el localStorage antes de cada prueba + localStorage.clear(); }); - - it("debería devolver undefined si la API Key no ha sido establecida", () => { - // Comprobamos que getApiKey devuelva undefined cuando no se ha establecido ninguna API Key - const result = getApiKey(); - expect(result).toBeUndefined(); + test('debería guardar la clave de API en el localStorage', () => { + const apiKey = 'test-api-key'; + setApiKey(apiKey); + expect(localStorage.getItem('apiKey')).toBe(apiKey); }); -}); - -describe("setApiKey", () => { - it("debería establecer correctamente la API Key", () => { - const mockApiKey = "67890-FGHIJ"; - // Establecemos un valor para la API Key - setApiKey(mockApiKey); - - // Comprobamos que getApiKey devuelva el valor establecido - const result = getApiKey(); - expect(result).toBe(mockApiKey); + test('debería recuperar la clave de API del localStorage', () => { + const apiKey = 'test-api-key'; + localStorage.setItem('apiKey', apiKey); + expect(getApiKey()).toBe(apiKey); + }); + test('debería devolver null si la clave de API no está establecida', () => { + expect(getApiKey()).toBe(null); }); }); diff --git a/test/datafuntions.spec.js b/test/datafuntions.spec.js index 48b63f0a..1bc0ccbc 100644 --- a/test/datafuntions.spec.js +++ b/test/datafuntions.spec.js @@ -20,28 +20,28 @@ describe("test unitarios orden", () => { describe("test unitario filtro", () => { it("test unitario filtro época 1990", () => { const dataFiltro90 = filterData(fakeData, "estreno", "1990"); - expect(dataFiltro90.length).toBe(5); + expect(dataFiltro90.length).toBe(2); }); it("test unitario filtro época 2000", () => { const dataFiltro00 = filterData(fakeData, "estreno", "2000"); - expect(dataFiltro00.length).toBe(8); + expect(dataFiltro00.length).toBe(5); }); it("test unitario filtro época 2010", () => { const dataFiltro10 = filterData(fakeData, "estreno", "2010"); - expect(dataFiltro10.length).toBe(7); + expect(dataFiltro10.length).toBe(3); }); it("test unitario filtro época 2020", () => { const dataFiltro20 = filterData(fakeData, "estreno", "2020"); - expect(dataFiltro20.length).toBe(4); + expect(dataFiltro20.length).toBe(1); }); }); describe("test unitario promedio duración", () => { it("test unitario promedio", () => { const resultado = computeStats(fakeData); - expect(resultado).toBe(96.5); + expect(resultado).toBe(94.27272727272727); }); }); diff --git a/test/example.spec.js b/test/example.spec.js deleted file mode 100644 index e69de29b..00000000 diff --git a/test/openAIApi.spec.js b/test/openAIApi.spec.js index 1b1ec955..9b5552c5 100644 --- a/test/openAIApi.spec.js +++ b/test/openAIApi.spec.js @@ -1,19 +1,19 @@ -import { communicateWithOpenAI } from "./openAIApi.js"; -window.fetch = jest.fn(); // Mock de la función fetch +import { communicateWithOpenAI } from "../src/lib/openAIApi.js"; +window.window.fetch = jest.fn(); // Mock de la función window.fetch describe("communicateWithOpenAI", () => { beforeEach(() => { - fetch.mockClear(); // Reinicia el mock antes de cada test + window.fetch.mockClear(); // Reinicia el mock antes de cada test }); //it es una función que define un caso de prueba. Es equivalente a test it("debe entregar la respuesta de OpenAI cuando la petición sería exitosa", async () => { const mockResponse = { choices: [{ text: "respuesta" }] }; - fetch.mockResolvedValueOnce({ - // Simula la respuesta de fetch con éxito + window.fetch.mockResolvedValueOnce({ + // Simula la respuesta de window.fetch con éxito ok: true, //indica que la respuesta HTTP tuvo exito (200-299). json: jest.fn().mockResolvedValueOnce(mockResponse), //mockResolvedValueOnce(mockResponse): Simula que la llamada al método }); // json: jest.fn(): convierte la respuesta en un json const content = [{ role: "user", content: "Hola, IA" }]; const result = await communicateWithOpenAI(content); - expect(fetch).toHaveBeenCalledTimes(1); // Asegúrate de que fetch fue llamado una vez + expect(window.fetch).toHaveBeenCalledTimes(1); // Asegúrate de que window.fetch fue llamado una vez expect(result).toEqual(mockResponse); // Verifica que la respuesta sea la esperada }); // Verifica que la respuesta sea la esperada it("debe manejar errores cuando la API key no está presente", async () => { @@ -32,9 +32,10 @@ describe("communicateWithOpenAI", () => { }); it("debe manejar errores cuando la respuesta de la API falla", async () => { // Simula una respuesta fallida de la API - fetch.mockResolvedValueOnce({ + window.fetch.mockResolvedValueOnce({ ok: false, statusText: "Error de servidor", + json: jest.fn().mockResolvedValueOnce({ choices: [{ text: 'respuesta' }] }) }); const consoleSpy = jest .spyOn(console, "error") From 3d78cfc6628bbc9ddd02044a47ba5627ded67167 Mon Sep 17 00:00:00 2001 From: danimar-g Date: Wed, 11 Sep 2024 20:07:37 -0400 Subject: [PATCH 31/33] home --- src/views/home.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/views/home.js b/src/views/home.js index 26c047f9..6be341d9 100644 --- a/src/views/home.js +++ b/src/views/home.js @@ -18,7 +18,7 @@ export const Home = () => { ulElement.appendChild(card(item)); }); return ulElement; - }; + }; const element = showCard(data); div.appendChild(filtroyorden(element)); From 1bac746d959fb4e3c701064d1c5d4a1a4a5e1c40 Mon Sep 17 00:00:00 2001 From: danimar-g Date: Wed, 11 Sep 2024 20:12:01 -0400 Subject: [PATCH 32/33] cambio ccs --- src/style.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/style.css b/src/style.css index 5a584a0b..6551e133 100644 --- a/src/style.css +++ b/src/style.css @@ -301,7 +301,7 @@ footer { .ulPelis { display: grid; - grid-template-columns: repeat(2, 37.5rem); + grid-template-columns: repeat(2, 37rem); margin-left: 9em; width: 100%; justify-content: center; From 3beb53faa27e731b99e3106271ea7881be581338 Mon Sep 17 00:00:00 2001 From: danimar-g Date: Thu, 12 Sep 2024 01:12:51 -0400 Subject: [PATCH 33/33] cambios finales --- src/Components/filtroyorden.js | 19 +++++++++---------- src/lib/openAIApi.js | 8 ++++++++ src/style.css | 16 ++++++++++++---- src/views/chatUnico.js | 2 +- src/views/home.js | 4 ++-- test/openAIApi.spec.js | 31 +++++++++++++++---------------- 6 files changed, 47 insertions(+), 33 deletions(-) diff --git a/src/Components/filtroyorden.js b/src/Components/filtroyorden.js index fc9706ae..444ae059 100644 --- a/src/Components/filtroyorden.js +++ b/src/Components/filtroyorden.js @@ -2,15 +2,15 @@ import data from "../data/dataset.js"; import { filterData, sortData } from "../lib/dataFunctions.js"; import { card } from "./Card.js"; export const filtroyorden = (element) => { - const updateList = (data) => { const lista = showCard(data); element.innerHTML = ""; // Limpia el contenido previo element.appendChild(lista); // Añade la nueva lista de datos }; - const div = document.createElement("selectores"); - div.innerHTML = ` + const selectores = document.createElement("div"); + selectores.classList.add("selectores"); + selectores.innerHTML = `