diff --git a/client/.eslintrc.cjs b/client/.eslintrc.cjs new file mode 100644 index 0000000..4dcb439 --- /dev/null +++ b/client/.eslintrc.cjs @@ -0,0 +1,20 @@ +module.exports = { + root: true, + env: { browser: true, es2020: true }, + extends: [ + 'eslint:recommended', + 'plugin:react/recommended', + 'plugin:react/jsx-runtime', + 'plugin:react-hooks/recommended', + ], + ignorePatterns: ['dist', '.eslintrc.cjs'], + parserOptions: { ecmaVersion: 'latest', sourceType: 'module' }, + settings: { react: { version: '18.2' } }, + plugins: ['react-refresh'], + rules: { + 'react-refresh/only-export-components': [ + 'warn', + { allowConstantExport: true }, + ], + }, +} diff --git a/client/.firebase/hosting.ZGlzdA.cache b/client/.firebase/hosting.ZGlzdA.cache new file mode 100644 index 0000000..6739e13 --- /dev/null +++ b/client/.firebase/hosting.ZGlzdA.cache @@ -0,0 +1,10 @@ +index.html,1700183579730,417e5cd0bc12f83971764c9aa7ad01e9f3f2d4134ae779c6cdef47106040825c +vite.svg,1700183514928,59ec4b6085a0cb1bf712a5e48dd5f35b08e34830d49c2026c18241be04e05d5a +stylesheets/index.css,1700183514927,25a8b43a6a37864a9b2d65762d07e650d14a747fa3ad8250e2f78305d65fa01b +pictures/authbg.jpg,1700183514919,5c76bddafd5a43db6d805f96e553a570b20b732688115a1725dc50208bdfb2d2 +assets/index-55169b11.css,1700183579730,1ddd23323832acc8f99a1a49995895f6b39ed5a96900a1af78c49046ec0ea4bc +pictures/confetti.png,1700183514920,50535c061f486fa1103d8d2be72715ba7f04214851acbb7e2aaa30693bdac82b +pictures/fireworks.png,1700183514922,48cde03040e9e10880db402d37375ff46855cf7ed1c683afd26ed6841608250b +assets/index-7801644e.js,1700183579730,0603f74133f314d2965d124abdcb80921e164d72e6fd8b67fd6692ca18a4bcd0 +pictures/logincover.jpg,1700183514923,2a8d0872258663cef10d60b689f031cb9f6951c2b96a4f2e51144713996f455b +pictures/registercover.jpg,1700183514926,08c96dc1e7b43407c33fb7271ef782a772bd74f5827194642636841654d12e8f diff --git a/client/.firebaserc b/client/.firebaserc new file mode 100644 index 0000000..13d24dd --- /dev/null +++ b/client/.firebaserc @@ -0,0 +1,5 @@ +{ + "projects": { + "default": "ipustaka-rv-rmt42" + } +} diff --git a/client/.gitignore b/client/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/client/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/client/.vite/deps_temp_d3269d75/package.json b/client/.vite/deps_temp_d3269d75/package.json new file mode 100644 index 0000000..3dbc1ca --- /dev/null +++ b/client/.vite/deps_temp_d3269d75/package.json @@ -0,0 +1,3 @@ +{ + "type": "module" +} diff --git a/client/README.md b/client/README.md new file mode 100644 index 0000000..f768e33 --- /dev/null +++ b/client/README.md @@ -0,0 +1,8 @@ +# React + Vite + +This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. + +Currently, two official plugins are available: + +- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh +- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh diff --git a/client/firebase.json b/client/firebase.json new file mode 100644 index 0000000..2c33c29 --- /dev/null +++ b/client/firebase.json @@ -0,0 +1,16 @@ +{ + "hosting": { + "public": "dist", + "ignore": [ + "firebase.json", + "**/.*", + "**/node_modules/**" + ], + "rewrites": [ + { + "source": "**", + "destination": "/index.html" + } + ] + } +} diff --git a/client/index.html b/client/index.html new file mode 100644 index 0000000..d176c34 --- /dev/null +++ b/client/index.html @@ -0,0 +1,14 @@ + + + + + + + IPustaka + + + +
+ + + diff --git a/client/package-lock.json b/client/package-lock.json new file mode 100644 index 0000000..8152fad --- /dev/null +++ b/client/package-lock.json @@ -0,0 +1,4641 @@ +{ + "name": "client", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "client", + "version": "0.0.0", + "dependencies": { + "@react-oauth/google": "^0.11.1", + "animate.css": "^4.1.1", + "axios": "^1.6.2", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-router-dom": "^6.18.0", + "sweetalert2": "^11.10.0" + }, + "devDependencies": { + "@types/react": "^18.2.15", + "@types/react-dom": "^18.2.7", + "@vitejs/plugin-react": "^4.0.3", + "autoprefixer": "^10.4.16", + "eslint": "^8.45.0", + "eslint-plugin-react": "^7.32.2", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-refresh": "^0.4.3", + "postcss": "^8.4.31", + "tailwindcss": "^3.3.5", + "vite": "^4.4.5" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.3.tgz", + "integrity": "sha512-BmR4bWbDIoFJmJ9z2cZ8Gmm2MXgEDgjdWgpKmKWUt54UGFJdlj31ECtbaDvCG/qVdG3AQ1SfpZEs01lUFbzLOQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.3.tgz", + "integrity": "sha512-Jg+msLuNuCJDyBvFv5+OKOUjWMZgd85bKjbICd3zWrKAo+bJ49HJufi7CQE0q0uR8NGyO6xkCACScNqyjHSZew==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.3", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.23.2", + "@babel/parser": "^7.23.3", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.3", + "@babel/types": "^7.23.3", + "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.23.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.3.tgz", + "integrity": "sha512-keeZWAV4LU3tW0qRi19HRpabC/ilM0HRBBzf9/k8FFiG4KVpiv0FIy4hHfLfFQZNhziCTPTmd59zoyv6DNISzg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.23.3", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", + "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-validator-option": "^7.22.15", + "browserslist": "^4.21.9", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", + "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.2.tgz", + "integrity": "sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.2", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", + "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.3.tgz", + "integrity": "sha512-uVsWNvlVsIninV2prNz/3lHCb+5CJ+e+IUBfbjToAHODtfGYLfCFuY4AU7TskI+dAKk+njsPiBjq1gKTvZOBaw==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.23.3.tgz", + "integrity": "sha512-qXRvbeKDSfwnlJnanVRp0SfuWE5DQhwQr5xtLBzp56Wabyo+4CMosF6Kfp+eOD/4FYpql64XVJ2W0pVLlJZxOQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.23.3.tgz", + "integrity": "sha512-91RS0MDnAWDNvGC6Wio5XYkyWI39FMFO+JK9+4AlgaTH+yWwVTsw7/sn6LK0lH7c5F+TFkpv/3LfCJ1Ydwof/g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.3.tgz", + "integrity": "sha512-+K0yF1/9yR0oHdE0StHuEj3uTPzwwbrLGfNOndVJVV2TqA5+j3oljJUb4nmB954FLGjNem976+B+eDuLIjesiQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.3", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.3", + "@babel/types": "^7.23.3", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.3.tgz", + "integrity": "sha512-OZnvoH2l8PK5eUvEcUyCt/sXgr/h+UWpVuBbOljwcrAgUl6lpchoQ++PHGyQy1AtYnVA6CEq3y5xeEI10brpXw==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "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.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.3.tgz", + "integrity": "sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==", + "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/globals": { + "version": "13.23.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", + "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "8.53.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.53.0.tgz", + "integrity": "sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.13", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", + "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.1", + "debug": "^4.1.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.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", + "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", + "dev": true + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "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/@react-oauth/google": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/@react-oauth/google/-/google-0.11.1.tgz", + "integrity": "sha512-tywZisXbsdaRBVbEu0VX6dRbOSL2I6DgY97woq5NMOOOz+xtDsm418vqq+Vx10KMtra3kdHMRMf0hXLWrk2RMg==", + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@remix-run/router": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.11.0.tgz", + "integrity": "sha512-BHdhcWgeiudl91HvVa2wxqZjSHbheSgIiDvxrF1VjFzBzpTtuDPkOdOi3Iqvc08kXtFkLjhbS+ML9aM8mJS+wQ==", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.4", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.4.tgz", + "integrity": "sha512-mLnSC22IC4vcWiuObSRjrLd9XcBTGf59vUSoq2jkQDJ/QQ8PMI9rSuzE+aEV8karUMbskw07bKYoUJCKTUaygg==", + "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.7", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.7.tgz", + "integrity": "sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ==", + "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.4", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.4.tgz", + "integrity": "sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/prop-types": { + "version": "15.7.10", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.10.tgz", + "integrity": "sha512-mxSnDQxPqsZxmeShFH+uwQ4kO4gcJcGahjjMFeLbKE95IAZiiZyiEepGZjtXJ7hN/yfu0bu9xN2ajcU0JcxX6A==", + "dev": true + }, + "node_modules/@types/react": { + "version": "18.2.37", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.37.tgz", + "integrity": "sha512-RGAYMi2bhRgEXT3f4B92WTohopH6bIXw05FuGlmJEnv/omEn190+QYEIYxIAuIBdKgboYYdVved2p1AxZVQnaw==", + "dev": true, + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.2.15", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.15.tgz", + "integrity": "sha512-HWMdW+7r7MR5+PZqJF6YFNSCtjz1T0dsvo/f1BV6HkV+6erD/nA7wd9NM00KVG83zf2nJ7uATPO9ttdIPvi3gg==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.6.tgz", + "integrity": "sha512-Vlktnchmkylvc9SnwwwozTv04L/e1NykF5vgoQ0XTmI8DD+wxfjQuHuvHS3p0r2jz2x2ghPs2h1FVeDirIteWA==", + "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/@vitejs/plugin-react": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.1.1.tgz", + "integrity": "sha512-Jie2HERK+uh27e+ORXXwEP5h0Y2lS9T2PRGbfebiHGlwzDO0dEnd2aNtOR/qjBlPb1YgxwAONeblL1xqLikLag==", + "dev": true, + "dependencies": { + "@babel/core": "^7.23.2", + "@babel/plugin-transform-react-jsx-self": "^7.22.5", + "@babel/plugin-transform-react-jsx-source": "^7.22.5", + "@types/babel__core": "^7.20.3", + "react-refresh": "^0.14.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0" + } + }, + "node_modules/acorn": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "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/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/animate.css": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/animate.css/-/animate.css-4.1.1.tgz", + "integrity": "sha512-+mRmCTv6SbCmtYJCN4faJMNFVNN5EuCTTprDTAo7YzIGji2KADmakjVA3+8mVDkZ2Bf09vayB35lSQIex2+QaQ==" + }, + "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/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true + }, + "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/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": "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/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", + "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-string": "^1.0.7" + }, + "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/array.prototype.tosorted": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.2.tgz", + "integrity": "sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.2.1" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", + "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/asynciterator.prototype": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz", + "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.3" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/autoprefixer": { + "version": "10.4.16", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz", + "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "browserslist": "^4.21.10", + "caniuse-lite": "^1.0.30001538", + "fraction.js": "^4.3.6", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axios": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz", + "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==", + "dependencies": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.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/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", + "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", + "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.30001541", + "electron-to-chromium": "^1.4.535", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/call-bind": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" + }, + "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", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001561", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001561.tgz", + "integrity": "sha512-NTt0DNoKe958Q0BE0j0c1V9jbUzhBxHIEJy7asmGrpE0yG63KTV7PLHPnK2E1O9RsQrQ081I3NLuXGS6zht3cw==", + "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/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "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==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "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/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/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "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/define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, + "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/electron-to-chromium": { + "version": "1.4.581", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.581.tgz", + "integrity": "sha512-6uhqWBIapTJUxgPTCHH9sqdbxIMPt7oXl0VcAL1kOtlU6aECdcMncCrX5Z7sHQ/invtrC9jUQUef7+HhO8vVFw==", + "dev": true + }, + "node_modules/es-abstract": { + "version": "1.22.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", + "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.2", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.5", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.2", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.12", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "safe-array-concat": "^1.0.1", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.8", + "string.prototype.trimend": "^1.0.7", + "string.prototype.trimstart": "^1.0.7", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz", + "integrity": "sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==", + "dev": true, + "dependencies": { + "asynciterator.prototype": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.1", + "es-set-tostringtag": "^2.0.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.2.1", + "globalthis": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "iterator.prototype": "^1.1.2", + "safe-array-concat": "^1.0.1" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", + "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.2", + "has-tostringtag": "^1.0.0", + "hasown": "^2.0.0" + }, + "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/esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "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/eslint": { + "version": "8.53.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.53.0.tgz", + "integrity": "sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.3", + "@eslint/js": "8.53.0", + "@humanwhocodes/config-array": "^0.11.13", + "@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-plugin-react": { + "version": "7.33.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", + "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "array.prototype.tosorted": "^1.1.1", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.12", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "object.hasown": "^1.1.2", + "object.values": "^1.1.6", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.4", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.8" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", + "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "dev": true, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.4.tgz", + "integrity": "sha512-eD83+65e8YPVg6603Om2iCIwcQJf/y7++MWm4tACtEswFLYMwxwVWAfwN+e19f5Ad/FOyyNg9Dfi5lXhH3Y3rA==", + "dev": true, + "peerDependencies": { + "eslint": ">=7" + } + }, + "node_modules/eslint-plugin-react/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": { + "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/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/globals": { + "version": "13.23.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", + "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", + "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/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/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/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "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/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-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "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/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "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/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "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/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.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "dev": true + }, + "node_modules/follow-redirects": { + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", + "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": 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", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "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/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", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "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/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/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-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", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "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.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "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/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==", + "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/internal-slot": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", + "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.2", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + }, + "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-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-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "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", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "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", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "dev": true, + "dependencies": { + "which-typed-array": "^1.1.11" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/iterator.prototype": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", + "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.4", + "set-function-name": "^2.0.1" + } + }, + "node_modules/jiti": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", + "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", + "dev": true, + "bin": { + "jiti": "bin/jiti.js" + } + }, + "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==" + }, + "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/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-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/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "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/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/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "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": "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/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/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "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/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "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==", + "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==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.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/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/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "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/node-releases": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "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/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "dev": true, + "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.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz", + "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", + "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.hasown": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.3.tgz", + "integrity": "sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", + "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "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/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/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/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-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/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "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/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/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-import/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/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dev": true, + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz", + "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==", + "dev": true, + "dependencies": { + "lilconfig": "^2.0.5", + "yaml": "^2.1.1" + }, + "engines": { + "node": ">= 14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-nested": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", + "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.11" + }, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "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/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "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/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/react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + }, + "peerDependencies": { + "react": "^18.2.0" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + }, + "node_modules/react-refresh": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", + "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-router": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.18.0.tgz", + "integrity": "sha512-vk2y7Dsy8wI02eRRaRmOs9g2o+aE72YCx5q9VasT1N9v+lrdB79tIqrjMfByHiY5+6aYkH2rUa5X839nwWGPDg==", + "dependencies": { + "@remix-run/router": "1.11.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/react-router-dom": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.18.0.tgz", + "integrity": "sha512-Ubrue4+Ercc/BoDkFQfc6og5zRQ4A8YxSO3Knsne+eRbZ+IepAsK249XBH/XaFuOYOYr3L3r13CXTLvYt5JDjw==", + "dependencies": { + "@remix-run/router": "1.11.0", + "react-router": "6.18.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz", + "integrity": "sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", + "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "set-function-name": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "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-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/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==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "3.29.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", + "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "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-array-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", + "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "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/set-function-length": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", + "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.1", + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", + "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.0" + }, + "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", + "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/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz", + "integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "regexp.prototype.flags": "^1.5.0", + "set-function-name": "^2.0.0", + "side-channel": "^1.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", + "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", + "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "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", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "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/sucrase": { + "version": "3.34.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz", + "integrity": "sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "7.1.6", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sucrase/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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-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/sweetalert2": { + "version": "11.10.0", + "resolved": "https://registry.npmjs.org/sweetalert2/-/sweetalert2-11.10.0.tgz", + "integrity": "sha512-LhXo6si7zfI7mvB91Oe5RwgcNYujx0IniD3XE8lcifrZA94G6IMxwDjJyCbjXl+/BivutUZMuD4oAllnnhj/Yg==", + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/limonte" + } + }, + "node_modules/tailwindcss": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.5.tgz", + "integrity": "sha512-5SEZU4J7pxZgSkv7FP1zY8i2TIAOooNZ1e/OGtxIEv6GltpoiXUqWvLy89+a10qYTB1N5Ifkuw9lqQkN9sscvA==", + "dev": true, + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.19.1", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss/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/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/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "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/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true + }, + "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-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/typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "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.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.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/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/vite": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.0.tgz", + "integrity": "sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==", + "dev": true, + "dependencies": { + "esbuild": "^0.18.10", + "postcss": "^8.4.27", + "rollup": "^3.27.1" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "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/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-builtin-type": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", + "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", + "dev": true, + "dependencies": { + "function.prototype.name": "^1.1.5", + "has-tostringtag": "^1.0.0", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.0.2", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "dev": true, + "dependencies": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", + "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.4", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yaml": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", + "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", + "dev": true, + "engines": { + "node": ">= 14" + } + }, + "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" + } + } + } +} diff --git a/client/package.json b/client/package.json new file mode 100644 index 0000000..fe90956 --- /dev/null +++ b/client/package.json @@ -0,0 +1,34 @@ +{ + "name": "client", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "lint": "eslint . --ext js,jsx --report-unused-disable-directives --max-warnings 0", + "preview": "vite preview" + }, + "dependencies": { + "@react-oauth/google": "^0.11.1", + "animate.css": "^4.1.1", + "axios": "^1.6.2", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-router-dom": "^6.18.0", + "sweetalert2": "^11.10.0" + }, + "devDependencies": { + "@types/react": "^18.2.15", + "@types/react-dom": "^18.2.7", + "@vitejs/plugin-react": "^4.0.3", + "autoprefixer": "^10.4.16", + "eslint": "^8.45.0", + "eslint-plugin-react": "^7.32.2", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-refresh": "^0.4.3", + "postcss": "^8.4.31", + "tailwindcss": "^3.3.5", + "vite": "^4.4.5" + } +} diff --git a/client/postcss.config.js b/client/postcss.config.js new file mode 100644 index 0000000..2e7af2b --- /dev/null +++ b/client/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/client/public/pictures/authbg.jpg b/client/public/pictures/authbg.jpg new file mode 100644 index 0000000..b0c55d8 Binary files /dev/null and b/client/public/pictures/authbg.jpg differ diff --git a/client/public/pictures/confetti.png b/client/public/pictures/confetti.png new file mode 100644 index 0000000..47a7ccb Binary files /dev/null and b/client/public/pictures/confetti.png differ diff --git a/client/public/pictures/fireworks.png b/client/public/pictures/fireworks.png new file mode 100644 index 0000000..76c0343 Binary files /dev/null and b/client/public/pictures/fireworks.png differ diff --git a/client/public/pictures/logincover.jpg b/client/public/pictures/logincover.jpg new file mode 100644 index 0000000..00bbb17 Binary files /dev/null and b/client/public/pictures/logincover.jpg differ diff --git a/client/public/pictures/registercover.jpg b/client/public/pictures/registercover.jpg new file mode 100644 index 0000000..770c949 Binary files /dev/null and b/client/public/pictures/registercover.jpg differ diff --git a/client/public/stylesheets/index.css b/client/public/stylesheets/index.css new file mode 100644 index 0000000..131e02b --- /dev/null +++ b/client/public/stylesheets/index.css @@ -0,0 +1,26 @@ +.auth_page { + background: linear-gradient(-135deg,#7a50c8,#4173d0); +} + +.side_bar { + border-radius: 0px 36px 36px 0px !important; + box-shadow: 8px 6px 8px 0px rgba(0, 0, 0, 0.2); +} + +.search_section { + padding: 20px 0px; + } + + .search_bar { + margin: 10px 0px; + width: 400px !important; + } + + .search_button { + background-color: rgb(51, 128, 216) !important; + border-color: white !important; + } + + .search_button:hover { + background-color: rgb(14, 102, 190) !important; + } \ No newline at end of file diff --git a/client/public/vite.svg b/client/public/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/client/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/client/src/App.jsx b/client/src/App.jsx new file mode 100644 index 0000000..f1545cf --- /dev/null +++ b/client/src/App.jsx @@ -0,0 +1,16 @@ +import { RouterProvider } from "react-router-dom"; +import router from './router'; +import { GoogleOAuthProvider } from '@react-oauth/google'; +import { DataProvider } from "./context"; + +function App() { + return ( + + + + + + ) +} + +export default App \ No newline at end of file diff --git a/client/src/assets/react.svg b/client/src/assets/react.svg new file mode 100644 index 0000000..6c87de9 --- /dev/null +++ b/client/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/client/src/components/AuthCard.jsx b/client/src/components/AuthCard.jsx new file mode 100644 index 0000000..59079bd --- /dev/null +++ b/client/src/components/AuthCard.jsx @@ -0,0 +1,228 @@ +import { useState } from "react"; +import { Link, useNavigate } from "react-router-dom"; +import axios from "../helpers/axios"; +import { hideLoading, loading, swalFire, toaster } from "../helpers/notification"; +import { GoogleLogin } from '@react-oauth/google'; + +export const AuthCard = ({ type }) => { + const navigate = useNavigate(); + const [formAuth, setFormAuth] = useState({}); + + const postAuth = async () => { + loading(); + setTimeout(async () => { + try { + let url = type === 'login' + ? '/login' + : `/register`; + const response = await axios({ + url, + method: 'post', + data: formAuth + }); + if (type === 'login') localStorage.setItem('access_token', response.data.access_token); + const msg = type === 'login' ? 'Sign in' : 'Sign up'; + toaster(msg, 'success').then( + setTimeout(() => { + setFormAuth({ + name: '', + username: '', + email: '', + password: '' + }); + if (type === 'register') navigate('/login') + else navigate('/') + }, 2000) + ); + + + } catch (error) { + let msg = null; + if (error.status !== 400) msg = error.response.data.message; + else msg = error.response.data.message[0]; + swalFire('Failed', msg, 'error'); + } finally { + hideLoading(); + } + }, 2000); + } + + async function handleGoogleAuth(res) { + try { + let { data } = await axios({ + url: '/login-google', + method: 'post', + headers: { + g_token: res.credential + } + }); + localStorage.setItem('access_token', data.access_token); + + toaster('Login', 'success').then( + setTimeout(() => { + navigate('/') + }, 2000) + ); + } catch (error) { + swalFire('Failed', 'Failed to login with your Google account!', 'error'); + } finally { + hideLoading(); + } + } + + const handleOnSubmit = (e) => { + e.preventDefault(); + postAuth(); + } + return ( +
+
+
+

{type === 'register' ? 'Register' : 'Login'}

+
+
+ +
+
+ + + + + +
+ { + setFormAuth({ + ...formAuth, + name: e.target.value + }); + }} + id="name" + className="block w-full rounded-md border-0 py-1.5 pl-12 pr-4 text-gray-900 ring-1 ring-inset ring-gray-300 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-sky-600 sm:text-sm sm:leading-6 bg-sky-50" + placeholder="User Member" + /> +
+
+
+ +
+
+ + + + + +
+ { + setFormAuth({ + ...formAuth, + username: e.target.value + }); + }} + id="username" + className="block w-full rounded-md border-0 py-1.5 pl-12 pr-4 text-gray-900 ring-1 ring-inset ring-gray-300 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-sky-600 sm:text-sm sm:leading-6 bg-sky-50" + placeholder="user123" + /> +
+
+
+ +
+
+ + + + + +
+ { + setFormAuth({ + ...formAuth, + email: e.target.value + }); + }} + id="email" + className="block w-full rounded-md border-0 py-1.5 pl-12 pr-4 text-gray-900 ring-1 ring-inset ring-gray-300 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-sky-600 sm:text-sm sm:leading-6 bg-sky-50" + placeholder="user@mail.com" + /> +
+
+
+ +
+
+ + + + + +
+ { + setFormAuth({ + ...formAuth, + password: e.target.value + }); + }} + id="password" + className="block w-full rounded-md border-0 py-1.5 pl-12 pr-4 text-gray-900 ring-1 ring-inset ring-gray-300 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-sky-600 sm:text-sm sm:leading-6 bg-sky-50" + placeholder="*****" + /> +
+
+
+ +
+ +
+
+ Punya akun Google? +
+
+ { + console.log(credentialResponse); + handleGoogleAuth(credentialResponse); + }} + onError={() => { + console.log('Login Failed'); + }} + /> +
+ +
+ +
+ + + {type === 'register' ? 'Login' : 'Register'} + +
+
+
+ +
+
+
+ ); +} \ No newline at end of file diff --git a/client/src/components/BookCard.jsx b/client/src/components/BookCard.jsx new file mode 100644 index 0000000..b27ca90 --- /dev/null +++ b/client/src/components/BookCard.jsx @@ -0,0 +1,48 @@ +import { useEffect, useState } from "react"; +import { Link, useNavigate } from "react-router-dom"; +import axios from "../helpers/axios"; +import { hideLoading, loading, swalFire, toaster } from "../helpers/notification"; +import { useDataContext } from "../context"; + +export const BookCard = ({ book, status, bookOptions, history }) => { + const { setExBookIdContext } = useDataContext(); + + const handleLinkClick = () => { + const dataToSend = book.id; + setExBookIdContext(dataToSend); + }; + + const handleOptionBooks = (e) => { + e.preventDefault(); + console.log(history.id); + bookOptions(history.id); + + }; + useEffect(() => { + console.log(book); + }, []) + return ( +
+
+ handleOptionBooks(e)} + > +
+
+ +
+ +
+ +
+
+ + ); +} \ No newline at end of file diff --git a/client/src/components/GameCard.jsx b/client/src/components/GameCard.jsx new file mode 100644 index 0000000..3832c3a --- /dev/null +++ b/client/src/components/GameCard.jsx @@ -0,0 +1,76 @@ +import { useState } from "react"; +import { Link, useNavigate } from "react-router-dom"; +import axios from "../helpers/axios"; +import { hideLoading, loading, swalFire, toaster } from "../helpers/notification"; +import { GoogleLogin } from '@react-oauth/google'; + +export const GameCard = ({ questions, currentIdx, addAnswer, changeCurrentIdx }) => { + const navigate = useNavigate(); + const [answer, setAnswer] = useState(''); + + const handleOnSubmit = (e) => { + e.preventDefault(); + + addAnswer(answer); + changeCurrentIdx(currentIdx + 1); + setAnswer(''); + + } + return ( +
+
+
+
+

Let's Start!

+ + +
+ +
+
+
+
+
+ + Pertanyaan {currentIdx + 1} : + +
+ {questions[currentIdx]} +
+
+
+ + +
+
+ + + + + +
+ setAnswer(e.target.value)} + id="name" + className="block w-full rounded-md border-0 py-1.5 pl-12 pr-4 text-gray-900 ring-1 ring-inset ring-gray-300 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-sky-600 sm:text-sm sm:leading-6 bg-sky-50" + placeholder="Jawabanmu di sini ..." + /> +
+
+
+
+ {answer !== '' && } + +
+
+
+
+ +
+ ); +} \ No newline at end of file diff --git a/client/src/components/SearchBar.jsx b/client/src/components/SearchBar.jsx new file mode 100644 index 0000000..89b8053 --- /dev/null +++ b/client/src/components/SearchBar.jsx @@ -0,0 +1,41 @@ +import { useState } from "react"; + +export const SearchBar = ({ changeSearchKey }) => { + const [searchKey, setSearchKey] = useState(''); + + const handleOnSubmit = (e) => { + e.preventDefault(); + changeSearchKey(searchKey); + } + + return ( +
+
+
+
+ setSearchKey(e.target.value)} + style={{ borderTopLeftRadius: '20px', borderBottomLeftRadius: '20px', borderRight: 'none', borderWidth: '1px' }} + /> +
+ +
+
+
+
+
+ ); +} \ No newline at end of file diff --git a/client/src/components/Sidebar.jsx b/client/src/components/Sidebar.jsx new file mode 100644 index 0000000..2b2cc41 --- /dev/null +++ b/client/src/components/Sidebar.jsx @@ -0,0 +1,62 @@ +import axios from "axios"; +// import { LogoutButton } from "./LogoutButton"; +import { Link, useNavigate } from "react-router-dom"; +import { useEffect } from "react"; +import Swal from "sweetalert2"; + +export const SideBar = () => { + const navigate = useNavigate(); + const logout = async () => { + localStorage.removeItem('access_token'); + navigate('/login'); + } + + return ( + + ) +} \ No newline at end of file diff --git a/client/src/context/index.jsx b/client/src/context/index.jsx new file mode 100644 index 0000000..62b4c5b --- /dev/null +++ b/client/src/context/index.jsx @@ -0,0 +1,22 @@ +// File: DataContext.js +import React, { createContext, useContext, useState } from 'react'; + +const DataContext = createContext(); + +export const DataProvider = ({ children }) => { + const [exBookId, setExBookId] = useState(''); + + const setExBookIdContext = (id) => { + setExBookId(id); + }; + + return ( + + {children} + + ); +}; + +export const useDataContext = () => { + return useContext(DataContext); +}; \ No newline at end of file diff --git a/client/src/helpers/axios.js b/client/src/helpers/axios.js new file mode 100644 index 0000000..be8a5c8 --- /dev/null +++ b/client/src/helpers/axios.js @@ -0,0 +1,8 @@ +import axios from "axios"; + +const request = axios.create({ + // baseURL: 'http://localhost:3000', + baseURL: 'https://ipustaka-server.arvinaufal.my.id', // deployment / cloud +}); + +export default request; \ No newline at end of file diff --git a/client/src/helpers/notification.jsx b/client/src/helpers/notification.jsx new file mode 100644 index 0000000..b87a21c --- /dev/null +++ b/client/src/helpers/notification.jsx @@ -0,0 +1,47 @@ +import Swal from 'sweetalert2'; + +export const loading = () => { + return Swal.fire({ + title: 'Mohon tunggu', + showConfirmButton: false, + allowOutsideClick: false, + willOpen: () => { + Swal.showLoading() + } + }); +}; + +export const toaster = (msg, icon) => { + const Toast = Swal.mixin({ + toast: true, + position: "top-end", + showConfirmButton: false, + timer: 2000, + timerProgressBar: true, + didOpen: (toast) => { + toast.onmouseenter = Swal.stopTimer; + toast.onmouseleave = Swal.resumeTimer; + } + }); + + return Toast.fire({ + icon: icon, + title: `${msg} successfully` + }); +} + + +export const swalFire = (title, msg, icon) => { + + return Swal.fire({ + title: title, + text: msg, + icon: icon, + confirmButtonText: 'Ok' + }); +} + +export const hideLoading = () => { + return Swal.hideLoading(); +} + diff --git a/client/src/index.css b/client/src/index.css new file mode 100644 index 0000000..bd6213e --- /dev/null +++ b/client/src/index.css @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; \ No newline at end of file diff --git a/client/src/main.jsx b/client/src/main.jsx new file mode 100644 index 0000000..7bc0fd8 --- /dev/null +++ b/client/src/main.jsx @@ -0,0 +1,9 @@ +import React from 'react' +import ReactDOM from 'react-dom/client' +import App from './App.jsx' +import './index.css' +ReactDOM.createRoot(document.getElementById('root')).render( + + + , +) diff --git a/client/src/router/index.jsx b/client/src/router/index.jsx new file mode 100644 index 0000000..c16076e --- /dev/null +++ b/client/src/router/index.jsx @@ -0,0 +1,64 @@ +import { Outlet, createBrowserRouter, redirect } from "react-router-dom"; +import { BookCard } from "../components/BookCard"; +import { LoginPage } from "../views/Auth/Login"; +import { RegisterPage } from "../views/Auth/Register"; +import { SideBar } from "../components/Sidebar"; +import { HomePage } from "../views/Books"; +import { GamePage } from "../views/game"; +import { GameCard } from "../components/GameCard"; +import { MyBookPage } from "../views/History"; + +// const RootLayout = () => { +// return ( +// <> +// +// +// +// ); +// }; +const router = createBrowserRouter([ + { + loader: () => { + const isLogin = localStorage.getItem('access_token'); + if (!isLogin) { + throw redirect("/login"); + } + + return null; + }, + path: "/", + // element: , + children: [ + { + path: "", + element: , + }, + { + path: "game", + element: , + }, + { + path: "mybooks", + element: , + }, + ], + }, + { + loader: () => { + const isLogin = localStorage.getItem('access_token'); + if (isLogin) { + throw redirect("/"); + } + + return null; + }, + path: '/login', + element: + }, + { + path: '/register', + element: + } +]); + +export default router; \ No newline at end of file diff --git a/client/src/views/Auth/Login.jsx b/client/src/views/Auth/Login.jsx new file mode 100644 index 0000000..0e79b5d --- /dev/null +++ b/client/src/views/Auth/Login.jsx @@ -0,0 +1,16 @@ +import { AuthCard } from "../../components/AuthCard" + +export const LoginPage = () => { + return ( + +
+
+
+
+ +
+
+
+
+ ) +} \ No newline at end of file diff --git a/client/src/views/Auth/Register.jsx b/client/src/views/Auth/Register.jsx new file mode 100644 index 0000000..fafccbb --- /dev/null +++ b/client/src/views/Auth/Register.jsx @@ -0,0 +1,16 @@ +import { AuthCard } from "../../components/AuthCard" + +export const RegisterPage = () => { + return ( + +
+
+
+
+ +
+
+
+
+ ) +} \ No newline at end of file diff --git a/client/src/views/Books/index.jsx b/client/src/views/Books/index.jsx new file mode 100644 index 0000000..41f1d84 --- /dev/null +++ b/client/src/views/Books/index.jsx @@ -0,0 +1,105 @@ +// import axios from "axios"; +import axios from "../../helpers/axios"; +import { useEffect, useState } from "react"; +import { Link, Outlet } from "react-router-dom"; +import 'animate.css'; +// import Swal from "sweetalert2"; +import { BookCard } from "../../components/BookCard"; +import { SideBar } from "../../components/Sidebar"; +import { SearchBar } from "../../components/SearchBar"; +import { hideLoading, swalFire } from "../../helpers/notification"; + +export const HomePage = () => { + const [books, setBooks] = useState([]); + const [searchKey, setSearchKey] = useState(); + // const [page, setPage] = useState(1); + // const [totalPage, setTotalPage] = useState(1); + const [loading, setLoading] = useState(false); + + const changeSearchKey = (value) => { + setSearchKey(value); + } + + const fetchBooks = async () => { + + setLoading(true); + let q = '' + + if (searchKey !== '' && typeof searchKey !== 'undefined') { + q = `q=${searchKey}&&`; + }; + + try { + const { data } = await axios({ + url: `/books?${q}`, + method: 'get', + headers: { + Authorization: `Bearer ` + localStorage.getItem('access_token') + } + }); + setBooks(data.books); + setLoading(false); + } catch (error) { + let msg = null; + if (error.status !== 400) msg = error.response.data.message; + else msg = error.response.data.message[0]; + swalFire('Failed', msg, 'error'); + } finally { + hideLoading(); + } + } + + + useEffect(() => { + fetchBooks(); + + }, [searchKey]); + + if (loading) { + return ( +
+

Loading ...

+
+ ); + } + + return ( +
+
+
+ {/*
*/} + {/* */} + + {/*
*/} +
+
+
+

+ + Welcome to IPustaka! + +

+
+ + +
+
+ { + books.length > 0 ? ( + books.map((el) => ( + + )) + ) : ( +

Buku tidak dapat ditemukan

+ ) + } +
+
+ {/* Pagination content goes here */} +
+
+
+
+
+ ); +} \ No newline at end of file diff --git a/client/src/views/History/index.jsx b/client/src/views/History/index.jsx new file mode 100644 index 0000000..78517c7 --- /dev/null +++ b/client/src/views/History/index.jsx @@ -0,0 +1,153 @@ +// import axios from "axios"; +import axios from "../../helpers/axios"; +import { useEffect, useState } from "react"; +import { Link, Outlet } from "react-router-dom"; +import 'animate.css'; +import Swal from "sweetalert2"; +import { BookCard } from "../../components/BookCard"; +import { SideBar } from "../../components/Sidebar"; +import { SearchBar } from "../../components/SearchBar"; +import { hideLoading, swalFire } from "../../helpers/notification"; + +export const MyBookPage = () => { + const [histories, setHistories] = useState([]); + const [searchKey, setSearchKey] = useState(); + // const [page, setPage] = useState(1); + // const [totalPage, setTotalPage] = useState(1); + const [loading, setLoading] = useState(false); + + const changeSearchKey = (value) => { + setSearchKey(value); + } + + const bookOptions = (historyId) => { + try { + Swal.fire({ + title: "Apa yang ingin Anda lakukan?", + showDenyButton: true, + showCancelButton: true, + confirmButtonText: "Baca Buku", + denyButtonText: `Hapus Buku` + }).then(async (result) => { + /* Read more about isConfirmed, isDenied below */ + if (result.isConfirmed) { + try { + await axios({ + url: `/mail`, + method: 'post', + data: { historyId }, + headers: { + Authorization: `Bearer ` + localStorage.getItem('access_token') + } + }); + Swal.fire("Link Terkirim", "Mohon cek Gmail Anda!", "success"); + fetchMyBooks(); + } catch (error) { + Swal.fire("Failed", "Kesalahan server, gagal mengirim link baca buku", "danger"); + } + + } else if (result.isDenied) { + try { + await axios({ + url: `/histories/${historyId}`, + method: 'delete', + headers: { + Authorization: `Bearer ` + localStorage.getItem('access_token') + } + }); + Swal.fire("Berhasil menghapus buku", "", "success"); + fetchMyBooks(); + } catch (error) { + Swal.fire("Failed", "Kesalahan server, gagal menghapus buku", "danger"); + } + } + }); + } catch (error) { + console.log(error); + } + } + + const fetchMyBooks = async () => { + + setLoading(true); + let q = '' + + if (searchKey !== '' && typeof searchKey !== 'undefined') { + q = `q=${searchKey}&&`; + }; + + try { + const { data } = await axios({ + url: `/histories`, + method: 'get', + headers: { + Authorization: `Bearer ` + localStorage.getItem('access_token') + } + }); + setHistories(data.rows); + console.log(data); + setLoading(false); + } catch (error) { + let msg = null; + if (error.status !== 400) msg = error.response.data.message; + else msg = error.response.data.message[0]; + swalFire('Failed', msg, 'error'); + } finally { + hideLoading(); + } + } + + + useEffect(() => { + fetchMyBooks(); + + }, [searchKey]); + + if (loading) { + return ( +
+

Loading ...

+
+ ); + } + + return ( +
+
+
+ {/*
*/} + {/* */} + + {/*
*/} +
+
+
+

+ + My Books! + +

+
+ + +
+
+ { + histories.length > 0 ? ( + histories.map((el) => ( + + )) + ) : ( +

Buku tidak dapat ditemukan

+ ) + } +
+
+ {/* Pagination content goes here */} +
+
+
+
+
+ ); +} \ No newline at end of file diff --git a/client/src/views/game/index.jsx b/client/src/views/game/index.jsx new file mode 100644 index 0000000..97841a0 --- /dev/null +++ b/client/src/views/game/index.jsx @@ -0,0 +1,324 @@ +// import axios from "axios"; +import axios from "../../helpers/axios"; +import { useEffect, useState } from "react"; +import { Link, Outlet, useNavigate } from "react-router-dom"; +import 'animate.css'; +import Swal from "sweetalert2"; +import { BookCard } from "../../components/BookCard"; +import { SideBar } from "../../components/Sidebar"; +import { SearchBar } from "../../components/SearchBar"; +import { hideLoading, swalFire } from "../../helpers/notification"; +import { GameCard } from "../../components/GameCard"; +import { useDataContext } from "../../context"; + +export const GamePage = () => { + const navigate = useNavigate(); + const [questions, setBooks] = useState([]); + const [answer, setAnswer] = useState([]); + const [currentIdx, setCurrentIdx] = useState(0); + const [loading, setLoading] = useState(false); + const [historyId, setHistoryId] = useState(''); + const [bookId, setBookId] = useState(''); + const { exBookId } = useDataContext(); + + const q = [ + 'ini pertanyaan 1', 'ini pertanyaan 2', 'kalo ini p 3', 'ini p4 ygy', 'ini pertanyaan ke 5' + ] + const addAnswer = (val) => { + let ans = [...answer]; + ans.push(val); + setAnswer(ans); + } + + const postAnswer = async () => { + setLoading(true); + try { + const { data } = await axios({ + url: `/histories/${historyId}`, + method: 'put', + data: { answer: answer }, + headers: { + Authorization: `Bearer ` + localStorage.getItem('access_token') + } + }); + + setLoading(false); + setBooks([]); + setAnswer([]); + setCurrentIdx([]); + setHistoryId([]); + const existingBookId = bookId; + let msg = 'Kamu berhasil mendapatkan hadiah buku!'; + if (existingBookId !== '' || existingBookId !== null) msg = `Kamu berhasil mendapatkan hadiah buku yang telah kamu pilih!` + if (data.data >= 80) { + hideLoading(); + Swal.fire({ + title: "Congratulations!", + text: `${msg}`, + imageUrl: 'https://cdn-icons-png.flaticon.com/512/4471/4471307.png', + imageWidth: 260, + imageHeight: 200, + imageAlt: "Custom image" + }).then(() => { + if (bookId) { + + return Swal.fire({ + title: "Diterima!", + text: "Hadiah berhasil diterima :)", + icon: "success", + showCancelButton: false, + allowEnterKey: false, + allowEscapeKey: false, + allowOutsideClick: false + }).then((result) => { + if (result.isConfirmed) { + setLoading(false); + setBooks([]); + setAnswer([]); + setCurrentIdx([]); + setHistoryId([]); + navigate('/'); + } + }); + + } else { + return Swal.fire({ + title: "Deskripsikan buku yang kamu inginkan!", + input: "text", + inputAttributes: { + autocapitalize: "off" + }, + showCancelButton: false, + confirmButtonText: "Kirim", + showLoaderOnConfirm: true, + preConfirm: async (input) => { + try { + const { data } = await axios({ + url: `/books`, + method: 'post', + data: { desc: input }, + headers: { + Authorization: `Bearer ` + localStorage.getItem('access_token') + } + }); + setBookId(data.data.id); + const bookId = data.data.id; + Swal.fire({ + title: "Apakah Anda akan menerima hadiahnya?", + text: `Buku Anda dapat ditemukan, buku berjudul ${data.data.title}`, + icon: "warning", + showCancelButton: true, + confirmButtonText: "Ya", + cancelButtonText: "Tidak", + reverseButtons: true + }).then(async (result) => { + if (result.isConfirmed) { + try { + await axios({ + url: `/histories/${historyId}/books/${bookId}`, + method: 'patch', + headers: { + Authorization: `Bearer ` + localStorage.getItem('access_token') + } + }); + + Swal.fire({ + title: "Diterima!", + text: "Hadiah berhasil diterima :)", + icon: "success", + showCancelButton: false, + allowEnterKey: false, + allowEscapeKey: false, + allowOutsideClick: false + }).then((result) => { + if (result.isConfirmed) { + setLoading(false); + setBooks([]); + setAnswer([]); + setCurrentIdx([]); + setHistoryId([]); + navigate('/'); + } + }); + } catch (error) { + console.log(error); + Swal.fire({ + title: "Cancelled", + text: "Anda sudah memiliki bukunya sebelumnya", + icon: "error" + }).then((result) => { + if (result.isConfirmed) { + setLoading(false); + setBooks([]); + setAnswer([]); + setCurrentIdx([]); + setHistoryId([]); + navigate('/'); + } + }); + } + + + } else if (result.dismiss === Swal.DismissReason.cancel) { + // Correct placement of navigate function + + Swal.fire({ + title: "Cancelled", + text: "Hadiah berhasil ditolak :(", + icon: "error" + }).then((result) => { + if (result.isConfirmed) { + setLoading(false); + setBooks([]); + setAnswer([]); + setCurrentIdx([]); + setHistoryId([]); + navigate('/'); + } + }); + } + }); + + + } catch (error) { + Swal.showValidationMessage(` + Request failed: 'Mohon maaf buku tidak dapat ditemukan :(' + `); + } + }, + // allowOutsideClick: () => !Swal.isLoading() + }); + } + }); + } else { + Swal.fire({ + title: "Try Again!", + imageUrl: 'https://cdn-icons-png.flaticon.com/512/3220/3220630.png', + imageWidth: 260, + imageHeight: 200, + imageAlt: "Custom image", + text: `Mohon maaf, nilai Anda ${data.data} dan belum mencukupi nilai batas untuk mendapatkan hadiah :(`, + }).then((result) => { + if (result.isConfirmed) { + setLoading(false); + setBooks([]); + setAnswer([]); + setCurrentIdx([]); + setHistoryId([]); + navigate('/'); + } + }); + } + + } catch (error) { + let msg = null; + console.log(error) + Swal.fire({ + title: "Cancelled", + text: "Mohon maaf, kesalahan sistem", + icon: "error" + }).then((result) => { + if (result.isConfirmed) { + setLoading(false); + setBooks([]); + setAnswer([]); + setCurrentIdx([]); + setHistoryId([]); + navigate('/'); + } + }); + } finally { + hideLoading(); + } + } + + const changeCurrentIdx = (val) => { + setCurrentIdx(val); + } + + const fetchQuestions = async () => { + setLoading(true); + + try { + + const { data } = await axios({ + url: `/histories`, + method: 'post', + data: { bookId: exBookId }, + headers: { + Authorization: `Bearer ` + localStorage.getItem('access_token') + } + }); + if (data.data.questions.length < 5) fetchQuestions(); + else { + setBooks(data.data.questions); + setHistoryId(data.data.historyId); + setLoading(false); + } + } catch (error) { + let msg = null; + if (error.status !== 400) msg = error.response.data.message; + else msg = error.response.data.message[0]; + swalFire('Failed', msg, 'error'); + } finally { + hideLoading(); + } + } + + + useEffect(() => { + if (answer.length === 5) postAnswer(); + console.log('ini di use effect ans') + }, [answer]); + + useEffect(() => { + console.log('ini di use effect biasa') + if (exBookId && exBookId !== '') setBookId(exBookId); + fetchQuestions(); + }, []); + + if (loading) { + return ( +
+

Loading ...

+
+ ); + } + + + return ( +
+
+
+ {/*
*/} + {/* */} + + {/*
*/} +
+
+
+

+ + Welcome to The Game! + +

+
+ + {/*
+ ini test +
*/} +
+
+ + + + + +
+ +
+
+
+
+ ); +} \ No newline at end of file diff --git a/client/tailwind.config.js b/client/tailwind.config.js new file mode 100644 index 0000000..610f5cd --- /dev/null +++ b/client/tailwind.config.js @@ -0,0 +1,20 @@ +/** @type {import('tailwindcss').Config} */ +export default { + content: [ + "./index.html", + "./src/**/*.{js,ts,jsx,tsx}", + ], + theme: { + extend: { + fontFamily: { + 'sans': ['-apple-system', 'BlinkMacSystemFont', 'Helvetica Neue', 'Arial', 'sans-serif'], + 'serif': ['Georgia', 'Cambria', 'Times New Roman', 'Times', 'serif'], + 'mono': ['SF Mono', 'Monaco', 'Inconsolata', 'Fira Code', 'monospace'], + 'display': ['SF Pro Display', 'Oswald', 'Fira Sans', 'sans-serif'], + 'body': ['SF Pro Text', 'Open Sans', 'Arial', 'sans-serif'], + }, + }, + }, + plugins: [], +} + diff --git a/client/vite.config.js b/client/vite.config.js new file mode 100644 index 0000000..5a33944 --- /dev/null +++ b/client/vite.config.js @@ -0,0 +1,7 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [react()], +}) diff --git a/server/.env.example b/server/.env.example new file mode 100644 index 0000000..bdd7fac --- /dev/null +++ b/server/.env.example @@ -0,0 +1,8 @@ +NODE_ENV= +GOOGLE_BOOKS_API_KEY= +G_CLIENT= +G_SECRET= +SECRET_KEY= +APP_PASSWORD_GMAIL= +APP_USER_GMAIL= +APP_USER_GMAIL_LOGIN_CREDENTIAL= \ No newline at end of file diff --git a/server/.gitignore b/server/.gitignore new file mode 100644 index 0000000..1dcef2d --- /dev/null +++ b/server/.gitignore @@ -0,0 +1,2 @@ +node_modules +.env \ No newline at end of file diff --git a/server/APIdoc.md b/server/APIdoc.md new file mode 100644 index 0000000..c7a20c9 --- /dev/null +++ b/server/APIdoc.md @@ -0,0 +1,289 @@ +[![Open in Visual Studio Code](https://classroom.github.com/assets/open-in-vscode-718a45dd9cf7e7f842a935f5ebbe5719a5e09af4491e668f4dbf3b35d5cca122.svg)](https://classroom.github.com/online_ide?assignment_repo_id=12633437&assignment_repo_type=AssignmentRepo) +# P2-Challenge-1 (Server Side) + + + + +> IPustaka is an application that help us to rememorize our materials about JS and React especially in fun way/game based memorize and we can get book from the game. + +This app has : + +* RESTful endpoint for asset's CRUD operation +* JSON formatted response +* URL HTTPS : https://restaurant-server.arvinaufal.my.id + +  + +## RESTful endpoints + +### POST /register + +> Register an account of the application + +_Request Header_ +``` +No needed +``` + +_Request Params_ +``` +No needed +``` + +_Request Body_ +``` +{ + "username": "string", + "email": "string", + "password": "string", +} +``` + +_Response (201 - Ok)_ +``` +{ + "id": "integer", + "email": "string", + "role": "string" +} +``` + +_Response (400 - Bad Request)_ +``` +{ + "message": "Username required" +} + + OR + +{ + "message": "Email required" +} + + OR + +{ + "message": "Password required" +} + + OR + +{ + "message": "Must be an email!" +} + + OR + +{ + "message": "Password must be at least 5 characters!" +} + +``` + +--- + +### POST /login + +> Login to the application + +_Request Header_ +``` +No needed +``` + +_Request Params_ +``` +No needed +``` + +_Request Body_ +``` +{ + "email": "string", + "password": "string", +} +``` + +_Response (200 - Ok)_ +``` +{ + "access_token": "string", + "email": "string", + "role": "string" +} +``` + +_Response (400 - Bad Request)_ +``` + +{ + "message": "Email required" +} + + OR + +{ + "message": "Password required" +} + + OR + +{ + "message": "Use your Google account to login" +} + + OR + +{ + "message": "Invalid email/password!" +} + +``` + +--- + +### POST /mail + +> POST email + +_Request Header_ +``` +{ + "Authorization": "Bearer " +} +``` + +_Request Params_ +``` +not needed +``` + +_Request Body_ +``` +historyId: integer [required] +``` + +_Response (200 - Ok)_ +``` +{ + message : `Successfully send email` +} +``` +--- + +### POST /histories + +> POST history + +_Request Header_ +``` +{ + "Authorization": "Bearer " +} +``` + +_Request Params_ +``` +not needed +``` + +_Request Body_ +``` +bookId: integer [required] +``` + +_Response (200 - Ok)_ +``` +{ + questions : , + historyId : +} +``` +--- + +### GET /histories + +> GET History by user Id + +_Request Header_ +``` +{ + "Authorization": "Bearer " +} +``` + +_Request Params_ +``` +not needed +``` + +_Request Body_ +``` +not needed +``` + +_Response (200 - Ok)_ +``` +{ + +} +``` +--- + +### PATCH /histories/:historyId/books/:bookId + +> PARTCH history + +_Request Header_ +``` +{ + "Authorization": "Bearer " +} +``` + +_Request Params_ +``` +bookId: integer [required] +historyId: integer [required] +``` + +_Request Body_ +``` +NO NEEDED +``` + +_Response (200 - Ok)_ +``` +{ + questions : , + historyId : +} +``` +--- + +### Global Error + +_Response (500 - Internal Server Error)_ + +``` +{ + "message": "Internal server error" +} +``` + +### Global Error - For Endpoints Requiring the 'Authorization' Header Only + +_Response (401 - Unauthenticated)_ + +``` +{ + "message": "Unauthenticated" +} +``` +_Response (403 - Unauthorized)_ + +``` +{ + "message": "You're not authorized" +} +``` \ No newline at end of file diff --git a/server/__tests__/auth.js b/server/__tests__/auth.js new file mode 100644 index 0000000..e1ebc2a --- /dev/null +++ b/server/__tests__/auth.js @@ -0,0 +1,170 @@ +const app = require('../app'); +const request = require('supertest'); +const { User, sequelize } = require('../models'); +const { queryInterface } = sequelize; + +const user1 = { + username: "usrOne", + email: "userscxas@gmail.com", + password: '11111', + name: 'User 1', +}; + +const timeOut = 20000; +beforeAll(async () => { + await User.create({...user1, email: 'sasascac@gmail.com', accountType: 'google'}); +}, timeOut); + +describe('/register', () => { + describe('Positive Testing', () => { + test('success register user', async () => { + let { status, body } = await request(app) + .post('/register') + .send(user1); + + expect(status).toBe(201); + expect(body).toBeInstanceOf(Object); + expect(body).toHaveProperty("email", "user1@gmail.com"); + expect(body).toHaveProperty("role", "member"); + expect(body).toHaveProperty("id"); + }, timeOut); + }); + + describe('Negative Testing', () => { + test('failed register with empty username', async () => { + let { status, body } = await request(app) + .post('/register') + .send({ email: 'test@mail.com', password: '111111' }); + + expect(status).toBe(400); + expect(body).toBeInstanceOf(Object); + expect(body).toHaveProperty("message", ["Username is required!"]); + }, timeOut); + + test('failed register with empty email', async () => { + let { status, body } = await request(app) + .post('/register') + .send({ username: 'testUsn', password: '111111' }); + + expect(status).toBe(400); + expect(body).toBeInstanceOf(Object); + expect(body).toHaveProperty("message", ["Email is required!"]); + }, timeOut); + + test('failed register with empty password', async () => { + let { status, body } = await request(app) + .post('/register') + .send({ username: 'testUsn', email: 'testing123@gmail.com' }); + + expect(status).toBe(400); + expect(body).toBeInstanceOf(Object); + expect(body).toHaveProperty("message", ["Password is required!"]); + }, timeOut); + + test('failed register with existing email', async () => { + let { status, body } = await request(app) + .post('/register') + .send({ ...user1 }); + + expect(status).toBe(400); + expect(body).toBeInstanceOf(Object); + expect(body).toHaveProperty("message", ["email must be unique"]); + }, timeOut); + }); +}); + +describe('/login', () => { + describe('Positive Testing', () => { + test('success login with google account', async () => { + let { status, body } = await request(app) + .post('/login-google') + .set("g_token", process.env.APP_USER_GMAIL_LOGIN_CREDENTIAL); + + expect(status).toBe(201); + expect(body).toBeInstanceOf(Object); + }, timeOut); + + test('success login with new user', async () => { + let { status, body } = await request(app) + .post('/login') + .send(user1); + + expect(status).toBe(200); + expect(body).toBeInstanceOf(Object); + expect(body).toHaveProperty("email", "user1@gmail.com"); + expect(body).toHaveProperty("role", "member"); + expect(body).toHaveProperty("access_token", expect.any(String)); + }, timeOut); + }); + + describe('Negative Testing', () => { + test('failed login with empty email', async () => { + let { status, body } = await request(app) + .post('/login') + .send({ password: '111111' }); + + expect(status).toBe(400); + expect(body).toBeInstanceOf(Object); + expect(body).toHaveProperty("message", "Email is required"); + }, timeOut); + + test('failed login with empty password', async () => { + let { status, body } = await request(app) + .post('/login') + .send({ email: 'testing123@gmail.com' }); + + expect(status).toBe(400); + expect(body).toBeInstanceOf(Object); + expect(body).toHaveProperty("message", "Password is required"); + }, timeOut); + + test('failed manual login with google account', async () => { + let { status, body } = await request(app) + .post('/login') + .send({...user1, email: 'user2@gmail.com'}); + + expect(status).toBe(400); + expect(body).toBeInstanceOf(Object); + expect(body).toHaveProperty("message", "Use your Google account to login"); + }, timeOut); + + test('failed login with unregistered user/email invalid', async () => { + let { status, body } = await request(app) + .post('/login') + .send({ ...user1, email: 'ddsd@dasa.sadads' }); + + expect(status).toBe(401); + expect(body).toBeInstanceOf(Object); + expect(body).toHaveProperty("message", expect.any(String)); + }, timeOut); + + test('failed login with invalid/unmatched password', async () => { + let { status, body } = await request(app) + .post('/login') + .send({ ...user1, password: '22222222' }); + + expect(status).toBe(401); + expect(body).toBeInstanceOf(Object); + expect(body).toHaveProperty("message", "Invalid Email/Password!"); + }, timeOut); + + test('failed login with google account but invalid token', async () => { + let { status, body } = await request(app) + .post('/login-google') + .set("g_token", ` thetoken`); + + expect(status).toBe(500); + expect(body).toBeInstanceOf(Object); + }, timeOut); + + }); +}); + + +afterAll(async () => { + await queryInterface.bulkDelete('Users', null, { + truncate: true, + cascade: true, + restartIdentity: true + }); +}); \ No newline at end of file diff --git a/server/__tests__/book.js b/server/__tests__/book.js new file mode 100644 index 0000000..3a6dcc5 --- /dev/null +++ b/server/__tests__/book.js @@ -0,0 +1,114 @@ +const app = require('../app'); +const request = require('supertest'); +const { User, sequelize, Book } = require('../models'); +const { createToken } = require('../helpers/jwt'); +const { queryInterface } = sequelize; + +const user1 = { + username: "usrOne", + email: "user1@gmail.com", + password: '11111', + name: 'User 1', + accountType: 'manual' +}; + +const timeOut = 40000; + +let token1; +beforeAll(async () => { + try { + let booksJson = require('../jsons/books.json'); + booksJson = booksJson.map(book => { + book.createdAt = book.updatedAt = new Date(); + return book; + }); + + await queryInterface.bulkInsert('Books', booksJson); + + + const createUser1 = await User.create({...user1}); + const now = new Date(); + await queryInterface.bulkInsert('Histories', [{ + userId: 1, + bookId: 1, + question: 'Apakah JavaScript merupakan bahasa pemrograman?;;Apakah ReactJS merupakan library JavaScript?;;Apakah ExpressJS merupakan framework JavaScript?;;Apakah JavaScript dapat digunakan baik di sisi client maupun server?;;Apakah ReactJS dapat digunakan untuk mengembangkan aplikasi web?', + answer: "Ya;;Ya;;Ya;;Ya;;Ya", + point: 100, + status: 'unpaid', + createdAt: now, + updatedAt: now + }]); + + token1 = createToken({ id: createUser1.id }); + + } catch (error) { + console.log(error); + } +}, timeOut); + +describe('/books', () => { + describe('Positive Testing', () => { + test('success get all books', async () => { + let { status, body } = await request(app) + .get('/books') + .set("Authorization", `Bearer ${token1}`); + + expect(status).toBe(200); + expect(body).toBeInstanceOf(Object); + expect(body).toHaveProperty("books"); + }, timeOut); + + test('success findbook by description', async () => { + let { status, body } = await request(app) + .post('/books') + .set("Authorization", `Bearer ${token1}`) + .send({desc : 'saya ingin buku yang berjudul mantappu jiwa dari jerome polin'}); + + expect(status).toBe(201); + expect(body).toBeInstanceOf(Object); + expect(body).toHaveProperty("data"); + }, timeOut); + + test('success get book by book id', async () => { + let { status, body } = await request(app) + .get('/books/1') + .set("Authorization", `Bearer ${token1}`); + + expect(status).toBe(200); + expect(body).toBeInstanceOf(Object); + }, timeOut); + }); + + describe('Negative Testing', () => { + // test('failed create history with unknown bookId', async () => { + // let { status, body } = await request(app) + // .post('/histories') + // .set("Authorization", `Bearer ${token1}`) + // .send({bookId : 99999999}); + + // expect(status).toBe(500); + // expect(body).toBeInstanceOf(Object); + // expect(body).toHaveProperty("message", "Internal Server Error"); + // }, timeOut); + + }); +}); + + +afterAll(async () => { + await queryInterface.bulkDelete('Histories', null, { + truncate: true, + cascade: true, + restartIdentity: true + }); + await queryInterface.bulkDelete('Users', null, { + truncate: true, + cascade: true, + restartIdentity: true + }); + await queryInterface.bulkDelete('Books', null, { + truncate: true, + cascade: true, + restartIdentity: true + }); +}); \ No newline at end of file diff --git a/server/__tests__/history.js b/server/__tests__/history.js new file mode 100644 index 0000000..15a8100 --- /dev/null +++ b/server/__tests__/history.js @@ -0,0 +1,171 @@ +const app = require('../app'); +const request = require('supertest'); +const { User, sequelize, Book } = require('../models'); +const { createToken } = require('../helpers/jwt'); +const { queryInterface } = sequelize; + +const user1 = { + username: "usrOne", + email: "user1@gmail.com", + password: '11111', + name: 'User 1', + accountType: 'manual' +}; + +const timeOut = 40000; + +let token1; +beforeAll(async () => { + try { + let booksJson = require('../jsons/books.json'); + booksJson = booksJson.map(book => { + book.createdAt = book.updatedAt = new Date(); + return book; + }); + + await queryInterface.bulkInsert('Books', booksJson); + + + const createUser1 = await User.create({...user1}); + const now = new Date(); + await queryInterface.bulkInsert('Histories', [{ + userId: 1, + bookId: 1, + question: 'Apakah JavaScript merupakan bahasa pemrograman?;;Apakah ReactJS merupakan library JavaScript?;;Apakah ExpressJS merupakan framework JavaScript?;;Apakah JavaScript dapat digunakan baik di sisi client maupun server?;;Apakah ReactJS dapat digunakan untuk mengembangkan aplikasi web?', + answer: "Ya;;Ya;;Ya;;Ya;;Ya", + point: 100, + status: 'unpaid', + createdAt: now, + updatedAt: now + }]); + + token1 = createToken({ id: createUser1.id }); + + } catch (error) { + console.log(error); + } +}, timeOut); + +describe('/histories', () => { + describe('Positive Testing', () => { + test('success create history with undefined book Id', async () => { + let { status, body } = await request(app) + .post('/histories') + .set("Authorization", `Bearer ${token1}`); + + expect(status).toBe(201); + expect(body).toBeInstanceOf(Object); + expect(body).toHaveProperty("messages", "Successfully create history"); + expect(body).toHaveProperty("data"); + }, timeOut); + + test('success create history with defined book Id', async () => { + let { status, body } = await request(app) + .post('/histories') + .set("Authorization", `Bearer ${token1}`) + .send({bookId : 1}); + + expect(status).toBe(201); + expect(body).toBeInstanceOf(Object); + expect(body).toHaveProperty("messages", "Successfully create history"); + expect(body).toHaveProperty("data"); + }, timeOut); + }); + + describe('Negative Testing', () => { + test('failed create history with unknown bookId', async () => { + let { status, body } = await request(app) + .post('/histories') + .set("Authorization", `Bearer ${token1}`) + .send({bookId : 99999999}); + + expect(status).toBe(500); + expect(body).toBeInstanceOf(Object); + expect(body).toHaveProperty("message", "Internal Server Error"); + }, timeOut); + + }); +}); + +describe('/histories/:historyId', () => { + describe('Positive Testing', () => { + test('success update poin', async () => { + let { status, body } = await request(app) + .put('/histories/2') + .set("Authorization", `Bearer ${token1}`) + .send({answer : ['ya', 'ya', 'ya', 'ya', 'ya']}); + + expect(status).toBe(200); + expect(body).toBeInstanceOf(Object); + expect(body).toHaveProperty("messages", "Successfully get point"); + expect(body).toHaveProperty("data"); + }, timeOut); + + test('success update book Id', async () => { + let { status, body } = await request(app) + .patch('/histories/2/books/2') + .set("Authorization", `Bearer ${token1}`) + .send({bookId : 2, historyId: 2}); + + expect(status).toBe(200); + expect(body).toBeInstanceOf(Object); + expect(body).toHaveProperty("messages", "Successfully update book"); + }, timeOut); + + test('success get history by user Id', async () => { + let { status, body } = await request(app) + .get('/histories') + .set("Authorization", `Bearer ${token1}`); + + expect(status).toBe(200); + expect(body).toBeInstanceOf(Object); + }, timeOut); + + test('success delete history history id', async () => { + let { status, body } = await request(app) + .delete('/histories/1') + .set("Authorization", `Bearer ${token1}`); + + expect(status).toBe(200); + expect(body).toBeInstanceOf(Object); + }, timeOut); + }); + + describe('Negative Testing', () => { + test('failed create history with unknown bookId', async () => { + let { status, body } = await request(app) + .post('/histories') + .set("Authorization", `Bearer ${token1}`) + .send({bookId : 99999999}); + + expect(status).toBe(500); + expect(body).toBeInstanceOf(Object); + expect(body).toHaveProperty("message", "Internal Server Error"); + }, timeOut); + + test('success update book Id but the book id has been exists', async () => { + let { status, body } = await request(app) + .patch('/histories/2/books/1') + .set("Authorization", `Bearer ${token1}`) + .send({bookId : 2, historyId: 1}); + + expect(status).toBe(400); + expect(body).toBeInstanceOf(Object); + }, timeOut); + + }); +}); + + +afterAll(async () => { + await queryInterface.bulkDelete('Histories', null, { + truncate: true, + cascade: true, + restartIdentity: true + }); + await queryInterface.bulkDelete('Users', null, { + truncate: true, + cascade: true, + restartIdentity: true + }); +}); \ No newline at end of file diff --git a/server/__tests__/mail.js b/server/__tests__/mail.js new file mode 100644 index 0000000..bfb2f85 --- /dev/null +++ b/server/__tests__/mail.js @@ -0,0 +1,93 @@ +const app = require('../app'); +const request = require('supertest'); +const { User, sequelize, Book } = require('../models'); +const { createToken } = require('../helpers/jwt'); +const { queryInterface } = sequelize; + +const user1 = { + username: "usrOne", + email: "user1@gmail.com", + password: '11111', + name: 'User 1', + accountType: 'manual' +}; + +const timeOut = 40000; + +let token1; +beforeAll(async () => { + try { + let booksJson = require('../jsons/books.json'); + booksJson = booksJson.map(book => { + book.createdAt = book.updatedAt = new Date(); + return book; + }); + + await queryInterface.bulkInsert('Books', booksJson); + + + const createUser1 = await User.create({ ...user1 }); + const now = new Date(); + await queryInterface.bulkInsert('Histories', [{ + userId: 1, + bookId: 1, + question: 'Apakah JavaScript merupakan bahasa pemrograman?;;Apakah ReactJS merupakan library JavaScript?;;Apakah ExpressJS merupakan framework JavaScript?;;Apakah JavaScript dapat digunakan baik di sisi client maupun server?;;Apakah ReactJS dapat digunakan untuk mengembangkan aplikasi web?', + answer: "Ya;;Ya;;Ya;;Ya;;Ya", + point: 100, + status: 'unpaid', + createdAt: now, + updatedAt: now + }]); + + token1 = createToken({ id: createUser1.id }); + + } catch (error) { + console.log(error); + } +}, timeOut); + +describe('/mail', () => { + describe('Positive Testing', () => { + test('success send mail for book link', async () => { + let { status, body } = await request(app) + .post('/mail') + .set("Authorization", `Bearer ${token1}`) + .send({ historyId: 1 }); + + expect(status).toBe(200); + expect(body).toBeInstanceOf(Object); + }, timeOut); + }); + + describe('Negative Testing', () => { + test('failed send mail for book link', async () => { + let { status, body } = await request(app) + .post('/mail') + .set("Authorization", `Bearer ${token1}`) + .send({ historyId: 999 }); + + expect(status).toBe(500); + expect(body).toBeInstanceOf(Object); + }, timeOut); + + }); +}); + + +afterAll(async () => { + await queryInterface.bulkDelete('Histories', null, { + truncate: true, + cascade: true, + restartIdentity: true + }); + await queryInterface.bulkDelete('Users', null, { + truncate: true, + cascade: true, + restartIdentity: true + }); + await queryInterface.bulkDelete('Books', null, { + truncate: true, + cascade: true, + restartIdentity: true + }); +}); \ No newline at end of file diff --git a/server/app.js b/server/app.js new file mode 100644 index 0000000..204197c --- /dev/null +++ b/server/app.js @@ -0,0 +1,14 @@ +if (process.env.NODE_ENV !== "production") { + require('dotenv').config(); +} + +const express = require('express'); +const cors = require('cors'); +const app = express(); + +app.use(cors()); +app.use(express.json()); +app.use(express.urlencoded({ extended: true })); +app.use(require('./routes')); + +module.exports = app; \ No newline at end of file diff --git a/server/bin/www b/server/bin/www new file mode 100644 index 0000000..e0838c3 --- /dev/null +++ b/server/bin/www @@ -0,0 +1,6 @@ +const app = require('../app'); +const port = process.env.PORT || 3000; + +app.listen(port, () => { + console.log(`IPustaka running on port ${port}`); +}); \ No newline at end of file diff --git a/server/config/config.json b/server/config/config.json new file mode 100644 index 0000000..ccaf1fd --- /dev/null +++ b/server/config/config.json @@ -0,0 +1,21 @@ +{ + "development": { + "username": "postgres", + "password": "root", + "database": "ipustaka_dev", + "host": "127.0.0.1", + "dialect": "postgres", + "logging": false + }, + "test": { + "username": "postgres", + "password": "root", + "database": "ipustaka_test", + "host": "127.0.0.1", + "dialect": "postgres", + "logging": false + }, + "production": { + "use_env_variable": "DATABASE_URL" + } +} diff --git a/server/controllers/BookController.js b/server/controllers/BookController.js new file mode 100644 index 0000000..eb95cb0 --- /dev/null +++ b/server/controllers/BookController.js @@ -0,0 +1,94 @@ +const { Op } = require('sequelize'); +const { Book, User, sequelize } = require('../models'); +const { generateBookPromt, chatAI } = require('../helpers/openai'); +const { fetchGBooks } = require('../helpers/googlebooks'); + +class BookController { + static async getAll(req, res, next) { + let { filter, page = 1, q, sortBy, limit } = req.query; + const { userId } = req.params; + let queryOptions = { + attributes: ['id', 'title', 'isbn', 'author', 'synopsis', 'pageCount', 'stock', 'publisher', 'publishedDate', 'lang', 'imgUrl', 'status', 'category', 'pricePerWeek'], + limit: 16, + offset: 0, + where: {} + }; + + if (userId) queryOptions.where.userId = userId; + + + try { + const books = await Book.findAndCountAll(queryOptions); + const datas = { + books: books.rows, + } + res.status(200).json(datas); + } catch (error) { + next(error); + } + } + + static async getById(req, res, next) { + try { + const book = await Book.findByPk(req.params.bookId); + if (!book) throw ({ name: "NotFound" }); + res.status(200).json(book); + } catch (error) { + next(error); + } + } + + // static async create(req, res, next) { + // const { title, isbn, author, synopsis, pageCount, stock, publisher, publishedDate, lang, imgUrl, status, category, pricePerWeek } = req.body; + // try { + // const book = await Book.create({ title, isbn, author, synopsis, pageCount, stock, publisher, publishedDate, lang, imgUrl, status, category, pricePerWeek }); + // res.status(201).json(book); + // } catch (error) { + // next(error); + // } + // } + + // static async delete(req, res, next) { + // const { bookId } = req.params; + // try { + // let book = await Book.findByPk(bookId); + + // if (!book) throw ({ name: "NotFound" }); + + // await book.destroy(); + // res.status(200).json({ message: `Book with id: ${book.id} success to delete` }); + // } catch (error) { + // next(error); + // } + // } + + static async findBook(req, res, next) { + const { desc } = req.body; + try { + const promt = generateBookPromt(desc); + const bookTitle = await chatAI(promt); + const books = await fetchGBooks(bookTitle, 1); + let book = books[0]; + + const existingBook = await Book.findOne({ + where: { + [Op.and]: [ + { title: book.title }, + { isbn: book.isbn } + ] + } + }); + + let result = ''; + !existingBook ? result = await Book.create(book) : result = existingBook; + let code = existingBook ? 200 : 201; + + res.status(code).json({ message: 'Successfully find book', data: result }); + } catch (error) { + next(error); + } + } + +} + +module.exports = BookController; \ No newline at end of file diff --git a/server/controllers/HistoryController.js b/server/controllers/HistoryController.js new file mode 100644 index 0000000..e7ae74f --- /dev/null +++ b/server/controllers/HistoryController.js @@ -0,0 +1,104 @@ +const OpenAI = require('openai'); +const { History, Book } = require('../models'); +const { generateAnsPromt, chatAI } = require('../helpers/openai'); +const { Op } = require('sequelize'); + +class HistoryController { + static async create(req, res, next) { + let { bookId } = req.body; + if (bookId === "") bookId = undefined; + try { + const history = await History.create({ userId: req.user.id, status: 'unpaid', bookId }); + const question = `randomize saya 5 pertanyaan yang jawabannya cukup ya atau tidak mengenai topik pemrograman khususnya materi dasar javascript, reactjs, dan express js, cukup pertanyaan mudah dan singkat untuk junior programmer atau bahkan orang awam. cukup kembalikan respons tanpa deskripsi apa pun. jangan berikan respons dalam bentuk list, jangan berikan respons satu-satu satukan semua dalam 1 string, jangan ada enter atau karakter '/n' pada respons, harus satukan semua pertanyaannya dalam 1 string dan harus dengan format responsnya harus seperti ini perhatikan : pertanyaan1;;pertanyaan 2;;pertanyaan3`; + let questions = await chatAI(question); + history.update({ question: questions }); + questions = questions.split(';;'); + res.status(201).json({ + messages: `Successfully create history`, data: { questions, historyId: history.id } + }); + } catch (error) { + next(error); + } + } + + static async updatePoin(req, res, next) { + const { answer } = req.body; + const { historyId } = req.params; + + try { + const history = await History.findByPk(historyId); + const promt = generateAnsPromt(history.question, answer); + let point = await chatAI(promt); + if (+point === NaN) point = 0; + await history.update({ point: +point, answer: answer.join(";;") }); + res.status(200).json({ messages: `Successfully get point`, data: +point }); + } catch (error) { + next(error); + } + } + + static async updateBookId(req, res, next) { + const { historyId, bookId } = req.params; + try { + const history = await History.findByPk(historyId); + const histories = await History.findAll({ + where: { + userId: req.user.id + } + }); + + const existingBookIds = histories.map(el => el.bookId); + + if (existingBookIds.includes(parseInt(bookId))) { + const existingHistory = histories.find(el => el.bookId === parseInt(bookId)); + + await existingHistory.update({ + point: existingHistory.point + history.point + }); + + throw ({ name: "ExistUserBooks" }); + } + await history.update({ bookId }); + res.status(200).json({ messages: `Successfully update book` }); + } catch (error) { + next(error); + } + } + + static async getByUserId(req, res, next) { + try { + const histories = await History.findAndCountAll({ + include: { + model: Book, + }, + where: { + userId: req.user.id, + [Op.and]: [ + { answer: { [Op.not]: null } }, + { point: { [Op.not]: 0 } }, + { question: { [Op.not]: null } }, + ], + }, + }); + + if (!histories) throw ({ name: "NotFound" }); + res.status(200).json(histories); + } catch (error) { + next(error); + } + } + + + static async delete(request, response, next) { + try { + let history = await History.findByPk(request.params.historyId); + await history.destroy(); + response.status(200).json({ message: `Book is success to delete` }); + } catch (error) { + next(error); + } + } + +} + +module.exports = HistoryController; \ No newline at end of file diff --git a/server/controllers/UserController.js b/server/controllers/UserController.js new file mode 100644 index 0000000..a8d944b --- /dev/null +++ b/server/controllers/UserController.js @@ -0,0 +1,136 @@ +const { bcryptCompare } = require("../helpers/bcryptjs"); +const { createToken } = require("../helpers/jwt"); +const { User, UserDetail, History } = require("../models"); +const { OAuth2Client } = require('google-auth-library'); +const client = new OAuth2Client(); + +class UserController { + static async create(request, response, next) { + const { username, email, password, role = 'member', accountType = 'manual', name, address, gender } = request.body; + try { + const user = await User.create({ username, email, password, role, accountType }); + await UserDetail.create({ userId: user.id, name, address, gender }); + + response.status(201).json({ id: user.id, email: user.email, role: user.role }); + } catch (error) { + next(error); + } + } + + static async login(request, response, next) { + const { email, password } = request.body; + try { + if (!email || email === "") throw ({ name: `EmptyEmail` }); + if (!password || password === "") throw ({ name: `EmptyPassword` }); + + const user = await User.findOne({ where: { email } }); + if (!user) throw ({ name: "NotMatched" }); + if (user.accountType === 'google') throw ({ name: 'googleAcc' }); + if (!bcryptCompare(password, user.password)) throw ({ name: "NotMatched" }); + response.status(200).json({ access_token: createToken({ id: user.id }), email: user.email, role: user.role }); + } catch (error) { + next(error); + } + } + + static async loginGoogle(req, res, next) { + try { + const ticket = await client.verifyIdToken({ + idToken: req.headers.g_token, + audience: process.env.G_CLIENT, + }); + const payload = ticket.getPayload(); + const [user, newUser] = await User.findOrCreate({ + where: { + email: payload.email + }, + defaults: { + username: payload.name, + password: String(Math.random()), + accountType: 'google' + } + }); + if (newUser) await UserDetail.create({ userId: user.id, name: user.username }); + res.status(newUser ? 201 : 200).json({ access_token: createToken({ id: user.id }) }); + } catch (error) { + console.log(error); + next(error); + } + } +} + +module.exports = UserController; + + +// static async update(request, response, next) { +// const { username, email, password, name, address, gender } = request.body; +// try { +// let user = await User.findByPk(request.params.id, { +// include: { +// model: UserDetail +// } +// }); + +// await user.update({ username, email, password }); +// await user.UserDetail.update({ name, address, gender }); + +// response.status(200).json(user); +// } catch (error) { +// next(error); +// } +// } + +// static async delete(request, response, next) { +// try { +// let user = await User.findByPk(request.params.id); + +// await user.destroy(); +// response.status(200).json({ message: `User with id: ${user.id} success to delete` }); +// } catch (error) { +// next(error); +// } +// } + + +// static async getTopThree(request, response) { +// try { +// const users = await User.findAndCountAll({ +// include: [ +// { model: UserDetail }, +// { +// model: History, +// attributes: [ +// [sequelize.fn('SUM', sequelize.col('point')), 'totalPoints'] +// ], +// group: ['userId'], +// }, +// ], +// order: [ +// [sequelize.literal('totalPoints DESC')], +// ], +// limit: 3, +// }); + +// response.status(200).json(users); +// } catch (error) { +// next(error); +// } +// } + +// static async getById(request, response, next) { +// try { +// const user = await User.findByPk(request.params.id, { +// include: [ +// { model: UserDetail }, +// { model: History }, +// ] + +// }); + +// if (!user) throw ({ name: "NotFound" }); + +// response.status(200).json(user); +// } catch (error) { +// next(error); +// } +// } \ No newline at end of file diff --git a/server/controllers/mails/MailController.js b/server/controllers/mails/MailController.js new file mode 100644 index 0000000..25ff3c2 --- /dev/null +++ b/server/controllers/mails/MailController.js @@ -0,0 +1,40 @@ +const nodemailer = require('nodemailer'); +const { Book, User, History } = require('../../models'); + +class MailController { + static async sendMail(req, res, next) { + const { historyId } = req.body; + try { + const {bookId} = await History.findByPk(historyId); + const { link, title } = await Book.findByPk(bookId); + const { email } = await User.findByPk(req.user.id); + console.log({historyId, bookId, link, title, email}); + const transporter = nodemailer.createTransport({ + service: 'gmail', + host: 'smtp.gmail.com', + port: 587, + secure: false, + auth: { + user: process.env.APP_USER_GMAIL, + pass: process.env.APP_PASSWORD_GMAIL + } + }); + + const mailOptions = { + from: `"IPustaka-IP.RV" <${process.env.APP_USER_GMAIL}>`, + to: email, + subject: "IPustaka - Read Your Book", + text: "Hello, let's start to read!", + html: `

Here is your book link for title ${title}: ${link}

` + }; + + await transporter.sendMail(mailOptions); + res.status(200).json({ message: 'Successfully send email' }); + } catch (error) { + console.log(error); + next(error); + } + } +} + +module.exports = MailController; diff --git a/server/coverage/clover.xml b/server/coverage/clover.xml new file mode 100644 index 0000000..ef96275 --- /dev/null +++ b/server/coverage/clover.xml @@ -0,0 +1,389 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/server/coverage/coverage-final.json b/server/coverage/coverage-final.json new file mode 100644 index 0000000..659b4e9 --- /dev/null +++ b/server/coverage/coverage-final.json @@ -0,0 +1,18 @@ +{"D:\\Hacktiv8XZakatloop\\Phase-2\\projects\\IP-arvinaufal-RMT42\\server\\app.js": {"path":"D:\\Hacktiv8XZakatloop\\Phase-2\\projects\\IP-arvinaufal-RMT42\\server\\app.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":3,"column":1}},"1":{"start":{"line":2,"column":4},"end":{"line":2,"column":31}},"2":{"start":{"line":5,"column":16},"end":{"line":5,"column":34}},"3":{"start":{"line":6,"column":13},"end":{"line":6,"column":28}},"4":{"start":{"line":7,"column":12},"end":{"line":7,"column":21}},"5":{"start":{"line":9,"column":0},"end":{"line":9,"column":16}},"6":{"start":{"line":10,"column":0},"end":{"line":10,"column":24}},"7":{"start":{"line":11,"column":0},"end":{"line":11,"column":48}},"8":{"start":{"line":12,"column":0},"end":{"line":12,"column":29}},"9":{"start":{"line":14,"column":0},"end":{"line":14,"column":21}}},"fnMap":{},"branchMap":{"0":{"loc":{"start":{"line":1,"column":0},"end":{"line":3,"column":1}},"type":"if","locations":[{"start":{"line":1,"column":0},"end":{"line":3,"column":1}},{"start":{},"end":{}}],"line":1}},"s":{"0":4,"1":4,"2":4,"3":4,"4":4,"5":4,"6":4,"7":4,"8":4,"9":4},"f":{},"b":{"0":[4,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"bbee6a6c8c78c4c34676394bb03d083a03ff347d"} +,"D:\\Hacktiv8XZakatloop\\Phase-2\\projects\\IP-arvinaufal-RMT42\\server\\controllers\\BookController.js": {"path":"D:\\Hacktiv8XZakatloop\\Phase-2\\projects\\IP-arvinaufal-RMT42\\server\\controllers\\BookController.js","statementMap":{"0":{"start":{"line":1,"column":15},"end":{"line":1,"column":35}},"1":{"start":{"line":2,"column":34},"end":{"line":2,"column":54}},"2":{"start":{"line":3,"column":38},"end":{"line":3,"column":66}},"3":{"start":{"line":4,"column":24},"end":{"line":4,"column":57}},"4":{"start":{"line":8,"column":53},"end":{"line":8,"column":62}},"5":{"start":{"line":9,"column":27},"end":{"line":9,"column":37}},"6":{"start":{"line":10,"column":27},"end":{"line":15,"column":9}},"7":{"start":{"line":17,"column":8},"end":{"line":17,"column":55}},"8":{"start":{"line":17,"column":20},"end":{"line":17,"column":55}},"9":{"start":{"line":20,"column":8},"end":{"line":28,"column":9}},"10":{"start":{"line":21,"column":26},"end":{"line":21,"column":66}},"11":{"start":{"line":22,"column":26},"end":{"line":24,"column":13}},"12":{"start":{"line":25,"column":12},"end":{"line":25,"column":40}},"13":{"start":{"line":27,"column":12},"end":{"line":27,"column":24}},"14":{"start":{"line":32,"column":8},"end":{"line":38,"column":9}},"15":{"start":{"line":33,"column":25},"end":{"line":33,"column":63}},"16":{"start":{"line":34,"column":12},"end":{"line":34,"column":52}},"17":{"start":{"line":34,"column":23},"end":{"line":34,"column":52}},"18":{"start":{"line":35,"column":12},"end":{"line":35,"column":39}},"19":{"start":{"line":37,"column":12},"end":{"line":37,"column":24}},"20":{"start":{"line":66,"column":25},"end":{"line":66,"column":33}},"21":{"start":{"line":67,"column":8},"end":{"line":89,"column":9}},"22":{"start":{"line":68,"column":26},"end":{"line":68,"column":49}},"23":{"start":{"line":69,"column":30},"end":{"line":69,"column":49}},"24":{"start":{"line":70,"column":26},"end":{"line":70,"column":57}},"25":{"start":{"line":71,"column":23},"end":{"line":71,"column":31}},"26":{"start":{"line":73,"column":33},"end":{"line":80,"column":14}},"27":{"start":{"line":82,"column":25},"end":{"line":82,"column":27}},"28":{"start":{"line":83,"column":12},"end":{"line":83,"column":85}},"29":{"start":{"line":84,"column":23},"end":{"line":84,"column":47}},"30":{"start":{"line":86,"column":12},"end":{"line":86,"column":87}},"31":{"start":{"line":88,"column":12},"end":{"line":88,"column":24}},"32":{"start":{"line":94,"column":0},"end":{"line":94,"column":32}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":7,"column":4},"end":{"line":7,"column":5}},"loc":{"start":{"line":7,"column":40},"end":{"line":29,"column":5}},"line":7},"1":{"name":"(anonymous_1)","decl":{"start":{"line":31,"column":4},"end":{"line":31,"column":5}},"loc":{"start":{"line":31,"column":41},"end":{"line":39,"column":5}},"line":31},"2":{"name":"(anonymous_2)","decl":{"start":{"line":65,"column":4},"end":{"line":65,"column":5}},"loc":{"start":{"line":65,"column":42},"end":{"line":90,"column":5}},"line":65}},"branchMap":{"0":{"loc":{"start":{"line":8,"column":22},"end":{"line":8,"column":30}},"type":"default-arg","locations":[{"start":{"line":8,"column":29},"end":{"line":8,"column":30}}],"line":8},"1":{"loc":{"start":{"line":17,"column":8},"end":{"line":17,"column":55}},"type":"if","locations":[{"start":{"line":17,"column":8},"end":{"line":17,"column":55}},{"start":{},"end":{}}],"line":17},"2":{"loc":{"start":{"line":34,"column":12},"end":{"line":34,"column":52}},"type":"if","locations":[{"start":{"line":34,"column":12},"end":{"line":34,"column":52}},{"start":{},"end":{}}],"line":34},"3":{"loc":{"start":{"line":83,"column":12},"end":{"line":83,"column":84}},"type":"cond-expr","locations":[{"start":{"line":83,"column":28},"end":{"line":83,"column":60}},{"start":{"line":83,"column":63},"end":{"line":83,"column":84}}],"line":83},"4":{"loc":{"start":{"line":84,"column":23},"end":{"line":84,"column":47}},"type":"cond-expr","locations":[{"start":{"line":84,"column":38},"end":{"line":84,"column":41}},{"start":{"line":84,"column":44},"end":{"line":84,"column":47}}],"line":84}},"s":{"0":4,"1":4,"2":4,"3":4,"4":1,"5":1,"6":1,"7":1,"8":0,"9":1,"10":1,"11":1,"12":1,"13":0,"14":1,"15":1,"16":1,"17":0,"18":1,"19":0,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":1,"30":1,"31":0,"32":4},"f":{"0":1,"1":1,"2":1},"b":{"0":[1],"1":[0,1],"2":[0,1],"3":[1,0],"4":[0,1]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"97f66b485c9923f1464213f73153e39862b7a833"} +,"D:\\Hacktiv8XZakatloop\\Phase-2\\projects\\IP-arvinaufal-RMT42\\server\\controllers\\HistoryController.js": {"path":"D:\\Hacktiv8XZakatloop\\Phase-2\\projects\\IP-arvinaufal-RMT42\\server\\controllers\\HistoryController.js","statementMap":{"0":{"start":{"line":1,"column":15},"end":{"line":1,"column":32}},"1":{"start":{"line":2,"column":26},"end":{"line":2,"column":46}},"2":{"start":{"line":3,"column":37},"end":{"line":3,"column":65}},"3":{"start":{"line":4,"column":15},"end":{"line":4,"column":35}},"4":{"start":{"line":8,"column":25},"end":{"line":8,"column":33}},"5":{"start":{"line":9,"column":8},"end":{"line":9,"column":46}},"6":{"start":{"line":9,"column":27},"end":{"line":9,"column":46}},"7":{"start":{"line":10,"column":8},"end":{"line":21,"column":9}},"8":{"start":{"line":11,"column":28},"end":{"line":11,"column":99}},"9":{"start":{"line":12,"column":29},"end":{"line":12,"column":623}},"10":{"start":{"line":13,"column":28},"end":{"line":13,"column":50}},"11":{"start":{"line":14,"column":12},"end":{"line":14,"column":52}},"12":{"start":{"line":15,"column":12},"end":{"line":15,"column":46}},"13":{"start":{"line":16,"column":12},"end":{"line":18,"column":15}},"14":{"start":{"line":20,"column":12},"end":{"line":20,"column":24}},"15":{"start":{"line":25,"column":27},"end":{"line":25,"column":35}},"16":{"start":{"line":26,"column":30},"end":{"line":26,"column":40}},"17":{"start":{"line":28,"column":8},"end":{"line":37,"column":9}},"18":{"start":{"line":29,"column":28},"end":{"line":29,"column":61}},"19":{"start":{"line":30,"column":26},"end":{"line":30,"column":68}},"20":{"start":{"line":31,"column":24},"end":{"line":31,"column":43}},"21":{"start":{"line":32,"column":12},"end":{"line":32,"column":42}},"22":{"start":{"line":32,"column":32},"end":{"line":32,"column":42}},"23":{"start":{"line":33,"column":12},"end":{"line":33,"column":79}},"24":{"start":{"line":34,"column":12},"end":{"line":34,"column":87}},"25":{"start":{"line":36,"column":12},"end":{"line":36,"column":24}},"26":{"start":{"line":41,"column":38},"end":{"line":41,"column":48}},"27":{"start":{"line":42,"column":8},"end":{"line":65,"column":9}},"28":{"start":{"line":43,"column":28},"end":{"line":43,"column":61}},"29":{"start":{"line":44,"column":30},"end":{"line":48,"column":14}},"30":{"start":{"line":50,"column":36},"end":{"line":50,"column":66}},"31":{"start":{"line":50,"column":56},"end":{"line":50,"column":65}},"32":{"start":{"line":52,"column":12},"end":{"line":60,"column":13}},"33":{"start":{"line":53,"column":40},"end":{"line":53,"column":92}},"34":{"start":{"line":53,"column":61},"end":{"line":53,"column":91}},"35":{"start":{"line":55,"column":16},"end":{"line":57,"column":19}},"36":{"start":{"line":59,"column":16},"end":{"line":59,"column":51}},"37":{"start":{"line":61,"column":12},"end":{"line":61,"column":45}},"38":{"start":{"line":62,"column":12},"end":{"line":62,"column":75}},"39":{"start":{"line":64,"column":12},"end":{"line":64,"column":24}},"40":{"start":{"line":69,"column":8},"end":{"line":88,"column":9}},"41":{"start":{"line":70,"column":30},"end":{"line":82,"column":14}},"42":{"start":{"line":84,"column":12},"end":{"line":84,"column":57}},"43":{"start":{"line":84,"column":28},"end":{"line":84,"column":57}},"44":{"start":{"line":85,"column":12},"end":{"line":85,"column":44}},"45":{"start":{"line":87,"column":12},"end":{"line":87,"column":24}},"46":{"start":{"line":93,"column":8},"end":{"line":99,"column":9}},"47":{"start":{"line":94,"column":26},"end":{"line":94,"column":74}},"48":{"start":{"line":95,"column":12},"end":{"line":95,"column":36}},"49":{"start":{"line":96,"column":12},"end":{"line":96,"column":80}},"50":{"start":{"line":98,"column":12},"end":{"line":98,"column":24}},"51":{"start":{"line":104,"column":0},"end":{"line":104,"column":35}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":7,"column":4},"end":{"line":7,"column":5}},"loc":{"start":{"line":7,"column":40},"end":{"line":22,"column":5}},"line":7},"1":{"name":"(anonymous_1)","decl":{"start":{"line":24,"column":4},"end":{"line":24,"column":5}},"loc":{"start":{"line":24,"column":44},"end":{"line":38,"column":5}},"line":24},"2":{"name":"(anonymous_2)","decl":{"start":{"line":40,"column":4},"end":{"line":40,"column":5}},"loc":{"start":{"line":40,"column":46},"end":{"line":66,"column":5}},"line":40},"3":{"name":"(anonymous_3)","decl":{"start":{"line":50,"column":50},"end":{"line":50,"column":51}},"loc":{"start":{"line":50,"column":56},"end":{"line":50,"column":65}},"line":50},"4":{"name":"(anonymous_4)","decl":{"start":{"line":53,"column":55},"end":{"line":53,"column":56}},"loc":{"start":{"line":53,"column":61},"end":{"line":53,"column":91}},"line":53},"5":{"name":"(anonymous_5)","decl":{"start":{"line":68,"column":4},"end":{"line":68,"column":5}},"loc":{"start":{"line":68,"column":45},"end":{"line":89,"column":5}},"line":68},"6":{"name":"(anonymous_6)","decl":{"start":{"line":92,"column":4},"end":{"line":92,"column":5}},"loc":{"start":{"line":92,"column":49},"end":{"line":100,"column":5}},"line":92}},"branchMap":{"0":{"loc":{"start":{"line":9,"column":8},"end":{"line":9,"column":46}},"type":"if","locations":[{"start":{"line":9,"column":8},"end":{"line":9,"column":46}},{"start":{},"end":{}}],"line":9},"1":{"loc":{"start":{"line":32,"column":12},"end":{"line":32,"column":42}},"type":"if","locations":[{"start":{"line":32,"column":12},"end":{"line":32,"column":42}},{"start":{},"end":{}}],"line":32},"2":{"loc":{"start":{"line":52,"column":12},"end":{"line":60,"column":13}},"type":"if","locations":[{"start":{"line":52,"column":12},"end":{"line":60,"column":13}},{"start":{},"end":{}}],"line":52},"3":{"loc":{"start":{"line":84,"column":12},"end":{"line":84,"column":57}},"type":"if","locations":[{"start":{"line":84,"column":12},"end":{"line":84,"column":57}},{"start":{},"end":{}}],"line":84}},"s":{"0":4,"1":4,"2":4,"3":4,"4":4,"5":4,"6":0,"7":4,"8":4,"9":2,"10":2,"11":1,"12":1,"13":1,"14":2,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":0,"23":1,"24":1,"25":0,"26":2,"27":2,"28":2,"29":2,"30":2,"31":5,"32":2,"33":1,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":0,"44":1,"45":0,"46":1,"47":1,"48":1,"49":1,"50":0,"51":4},"f":{"0":4,"1":1,"2":2,"3":5,"4":1,"5":1,"6":1},"b":{"0":[0,4],"1":[0,1],"2":[1,1],"3":[0,1]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"644b370345f757109e21c01d4c0fd63e305e819c"} +,"D:\\Hacktiv8XZakatloop\\Phase-2\\projects\\IP-arvinaufal-RMT42\\server\\controllers\\UserController.js": {"path":"D:\\Hacktiv8XZakatloop\\Phase-2\\projects\\IP-arvinaufal-RMT42\\server\\controllers\\UserController.js","statementMap":{"0":{"start":{"line":1,"column":26},"end":{"line":1,"column":56}},"1":{"start":{"line":2,"column":24},"end":{"line":2,"column":49}},"2":{"start":{"line":3,"column":38},"end":{"line":3,"column":58}},"3":{"start":{"line":4,"column":25},"end":{"line":4,"column":55}},"4":{"start":{"line":5,"column":15},"end":{"line":5,"column":33}},"5":{"start":{"line":9,"column":110},"end":{"line":9,"column":122}},"6":{"start":{"line":10,"column":8},"end":{"line":17,"column":9}},"7":{"start":{"line":11,"column":25},"end":{"line":11,"column":92}},"8":{"start":{"line":12,"column":12},"end":{"line":12,"column":80}},"9":{"start":{"line":14,"column":12},"end":{"line":14,"column":91}},"10":{"start":{"line":16,"column":12},"end":{"line":16,"column":24}},"11":{"start":{"line":21,"column":36},"end":{"line":21,"column":48}},"12":{"start":{"line":22,"column":8},"end":{"line":33,"column":9}},"13":{"start":{"line":23,"column":12},"end":{"line":23,"column":71}},"14":{"start":{"line":23,"column":40},"end":{"line":23,"column":71}},"15":{"start":{"line":24,"column":12},"end":{"line":24,"column":80}},"16":{"start":{"line":24,"column":46},"end":{"line":24,"column":80}},"17":{"start":{"line":26,"column":25},"end":{"line":26,"column":65}},"18":{"start":{"line":27,"column":12},"end":{"line":27,"column":54}},"19":{"start":{"line":27,"column":23},"end":{"line":27,"column":54}},"20":{"start":{"line":28,"column":12},"end":{"line":28,"column":77}},"21":{"start":{"line":28,"column":47},"end":{"line":28,"column":77}},"22":{"start":{"line":29,"column":12},"end":{"line":29,"column":88}},"23":{"start":{"line":29,"column":57},"end":{"line":29,"column":88}},"24":{"start":{"line":30,"column":12},"end":{"line":30,"column":122}},"25":{"start":{"line":32,"column":12},"end":{"line":32,"column":24}},"26":{"start":{"line":37,"column":8},"end":{"line":58,"column":9}},"27":{"start":{"line":38,"column":27},"end":{"line":41,"column":14}},"28":{"start":{"line":42,"column":28},"end":{"line":42,"column":47}},"29":{"start":{"line":43,"column":36},"end":{"line":52,"column":14}},"30":{"start":{"line":53,"column":12},"end":{"line":53,"column":91}},"31":{"start":{"line":53,"column":25},"end":{"line":53,"column":91}},"32":{"start":{"line":54,"column":12},"end":{"line":54,"column":97}},"33":{"start":{"line":56,"column":32},"end":{"line":56,"column":88}},"34":{"start":{"line":57,"column":12},"end":{"line":57,"column":24}},"35":{"start":{"line":62,"column":0},"end":{"line":62,"column":32}},"36":{"start":{"line":143,"column":38},"end":{"line":143,"column":37706}},"37":{"start":{"line":143,"column":42},"end":{"line":143,"column":37695}},"38":{"start":{"line":143,"column":37731},"end":{"line":143,"column":37771}},"39":{"start":{"line":143,"column":37735},"end":{"line":143,"column":37760}},"40":{"start":{"line":143,"column":37772},"end":{"line":143,"column":37780}},"41":{"start":{"line":143,"column":37805},"end":{"line":143,"column":37847}},"42":{"start":{"line":143,"column":37809},"end":{"line":143,"column":37836}},"43":{"start":{"line":143,"column":37848},"end":{"line":143,"column":37856}},"44":{"start":{"line":143,"column":37875},"end":{"line":143,"column":37912}},"45":{"start":{"line":143,"column":37879},"end":{"line":143,"column":37901}},"46":{"start":{"line":143,"column":37931},"end":{"line":143,"column":37971}},"47":{"start":{"line":143,"column":37935},"end":{"line":143,"column":37960}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":8,"column":4},"end":{"line":8,"column":5}},"loc":{"start":{"line":8,"column":49},"end":{"line":18,"column":5}},"line":8},"1":{"name":"(anonymous_1)","decl":{"start":{"line":20,"column":4},"end":{"line":20,"column":5}},"loc":{"start":{"line":20,"column":48},"end":{"line":34,"column":5}},"line":20},"2":{"name":"(anonymous_2)","decl":{"start":{"line":36,"column":4},"end":{"line":36,"column":5}},"loc":{"start":{"line":36,"column":45},"end":{"line":59,"column":5}},"line":36},"3":{"name":"oo_cm","decl":{"start":{"line":143,"column":30},"end":{"line":143,"column":35}},"loc":{"start":{"line":143,"column":37},"end":{"line":143,"column":37707}},"line":143},"4":{"name":"oo_oo","decl":{"start":{"line":143,"column":37717},"end":{"line":143,"column":37722}},"loc":{"start":{"line":143,"column":37730},"end":{"line":143,"column":37781}},"line":143},"5":{"name":"oo_tr","decl":{"start":{"line":143,"column":37791},"end":{"line":143,"column":37796}},"loc":{"start":{"line":143,"column":37804},"end":{"line":143,"column":37857}},"line":143},"6":{"name":"oo_ts","decl":{"start":{"line":143,"column":37867},"end":{"line":143,"column":37872}},"loc":{"start":{"line":143,"column":37874},"end":{"line":143,"column":37913}},"line":143},"7":{"name":"oo_te","decl":{"start":{"line":143,"column":37923},"end":{"line":143,"column":37928}},"loc":{"start":{"line":143,"column":37930},"end":{"line":143,"column":37972}},"line":143}},"branchMap":{"0":{"loc":{"start":{"line":9,"column":43},"end":{"line":9,"column":58}},"type":"default-arg","locations":[{"start":{"line":9,"column":50},"end":{"line":9,"column":58}}],"line":9},"1":{"loc":{"start":{"line":9,"column":60},"end":{"line":9,"column":82}},"type":"default-arg","locations":[{"start":{"line":9,"column":74},"end":{"line":9,"column":82}}],"line":9},"2":{"loc":{"start":{"line":23,"column":12},"end":{"line":23,"column":71}},"type":"if","locations":[{"start":{"line":23,"column":12},"end":{"line":23,"column":71}},{"start":{},"end":{}}],"line":23},"3":{"loc":{"start":{"line":23,"column":16},"end":{"line":23,"column":38}},"type":"binary-expr","locations":[{"start":{"line":23,"column":16},"end":{"line":23,"column":22}},{"start":{"line":23,"column":26},"end":{"line":23,"column":38}}],"line":23},"4":{"loc":{"start":{"line":24,"column":12},"end":{"line":24,"column":80}},"type":"if","locations":[{"start":{"line":24,"column":12},"end":{"line":24,"column":80}},{"start":{},"end":{}}],"line":24},"5":{"loc":{"start":{"line":24,"column":16},"end":{"line":24,"column":44}},"type":"binary-expr","locations":[{"start":{"line":24,"column":16},"end":{"line":24,"column":25}},{"start":{"line":24,"column":29},"end":{"line":24,"column":44}}],"line":24},"6":{"loc":{"start":{"line":27,"column":12},"end":{"line":27,"column":54}},"type":"if","locations":[{"start":{"line":27,"column":12},"end":{"line":27,"column":54}},{"start":{},"end":{}}],"line":27},"7":{"loc":{"start":{"line":28,"column":12},"end":{"line":28,"column":77}},"type":"if","locations":[{"start":{"line":28,"column":12},"end":{"line":28,"column":77}},{"start":{},"end":{}}],"line":28},"8":{"loc":{"start":{"line":29,"column":12},"end":{"line":29,"column":88}},"type":"if","locations":[{"start":{"line":29,"column":12},"end":{"line":29,"column":88}},{"start":{},"end":{}}],"line":29},"9":{"loc":{"start":{"line":53,"column":12},"end":{"line":53,"column":91}},"type":"if","locations":[{"start":{"line":53,"column":12},"end":{"line":53,"column":91}},{"start":{},"end":{}}],"line":53},"10":{"loc":{"start":{"line":54,"column":23},"end":{"line":54,"column":42}},"type":"cond-expr","locations":[{"start":{"line":54,"column":33},"end":{"line":54,"column":36}},{"start":{"line":54,"column":39},"end":{"line":54,"column":42}}],"line":54},"11":{"loc":{"start":{"line":143,"column":49},"end":{"line":143,"column":37694}},"type":"binary-expr","locations":[{"start":{"line":143,"column":49},"end":{"line":143,"column":86}},{"start":{"line":143,"column":90},"end":{"line":143,"column":37694}}],"line":143}},"s":{"0":4,"1":4,"2":4,"3":4,"4":4,"5":5,"6":5,"7":5,"8":1,"9":1,"10":4,"11":6,"12":6,"13":6,"14":1,"15":5,"16":1,"17":4,"18":4,"19":2,"20":2,"21":0,"22":2,"23":1,"24":1,"25":5,"26":2,"27":2,"28":0,"29":0,"30":0,"31":0,"32":0,"33":2,"34":2,"35":4,"36":2,"37":2,"38":2,"39":2,"40":2,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0},"f":{"0":5,"1":6,"2":2,"3":2,"4":2,"5":0,"6":0,"7":0},"b":{"0":[5],"1":[5],"2":[1,5],"3":[6,5],"4":[1,4],"5":[5,4],"6":[2,2],"7":[0,2],"8":[1,1],"9":[0,0],"10":[0,0],"11":[2,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"5e7139329b61c81b22bde0adace7c01cf5b5a71f"} +,"D:\\Hacktiv8XZakatloop\\Phase-2\\projects\\IP-arvinaufal-RMT42\\server\\controllers\\mails\\MailController.js": {"path":"D:\\Hacktiv8XZakatloop\\Phase-2\\projects\\IP-arvinaufal-RMT42\\server\\controllers\\mails\\MailController.js","statementMap":{"0":{"start":{"line":1,"column":19},"end":{"line":1,"column":40}},"1":{"start":{"line":2,"column":32},"end":{"line":2,"column":55}},"2":{"start":{"line":6,"column":30},"end":{"line":6,"column":38}},"3":{"start":{"line":7,"column":8},"end":{"line":36,"column":9}},"4":{"start":{"line":8,"column":29},"end":{"line":8,"column":62}},"5":{"start":{"line":9,"column":36},"end":{"line":9,"column":63}},"6":{"start":{"line":10,"column":30},"end":{"line":10,"column":62}},"7":{"start":{"line":11,"column":32},"end":{"line":11,"column":121}},"8":{"start":{"line":12,"column":32},"end":{"line":21,"column":14}},"9":{"start":{"line":23,"column":32},"end":{"line":29,"column":13}},"10":{"start":{"line":31,"column":12},"end":{"line":31,"column":52}},"11":{"start":{"line":32,"column":12},"end":{"line":32,"column":73}},"12":{"start":{"line":34,"column":32},"end":{"line":34,"column":87}},"13":{"start":{"line":35,"column":12},"end":{"line":35,"column":24}},"14":{"start":{"line":40,"column":0},"end":{"line":40,"column":32}},"15":{"start":{"line":47,"column":38},"end":{"line":47,"column":37706}},"16":{"start":{"line":47,"column":42},"end":{"line":47,"column":37695}},"17":{"start":{"line":47,"column":37731},"end":{"line":47,"column":37771}},"18":{"start":{"line":47,"column":37735},"end":{"line":47,"column":37760}},"19":{"start":{"line":47,"column":37772},"end":{"line":47,"column":37780}},"20":{"start":{"line":47,"column":37805},"end":{"line":47,"column":37847}},"21":{"start":{"line":47,"column":37809},"end":{"line":47,"column":37836}},"22":{"start":{"line":47,"column":37848},"end":{"line":47,"column":37856}},"23":{"start":{"line":47,"column":37875},"end":{"line":47,"column":37912}},"24":{"start":{"line":47,"column":37879},"end":{"line":47,"column":37901}},"25":{"start":{"line":47,"column":37931},"end":{"line":47,"column":37971}},"26":{"start":{"line":47,"column":37935},"end":{"line":47,"column":37960}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":5,"column":4},"end":{"line":5,"column":5}},"loc":{"start":{"line":5,"column":42},"end":{"line":37,"column":5}},"line":5},"1":{"name":"oo_cm","decl":{"start":{"line":47,"column":30},"end":{"line":47,"column":35}},"loc":{"start":{"line":47,"column":37},"end":{"line":47,"column":37707}},"line":47},"2":{"name":"oo_oo","decl":{"start":{"line":47,"column":37717},"end":{"line":47,"column":37722}},"loc":{"start":{"line":47,"column":37730},"end":{"line":47,"column":37781}},"line":47},"3":{"name":"oo_tr","decl":{"start":{"line":47,"column":37791},"end":{"line":47,"column":37796}},"loc":{"start":{"line":47,"column":37804},"end":{"line":47,"column":37857}},"line":47},"4":{"name":"oo_ts","decl":{"start":{"line":47,"column":37867},"end":{"line":47,"column":37872}},"loc":{"start":{"line":47,"column":37874},"end":{"line":47,"column":37913}},"line":47},"5":{"name":"oo_te","decl":{"start":{"line":47,"column":37923},"end":{"line":47,"column":37928}},"loc":{"start":{"line":47,"column":37930},"end":{"line":47,"column":37972}},"line":47}},"branchMap":{"0":{"loc":{"start":{"line":47,"column":49},"end":{"line":47,"column":37694}},"type":"binary-expr","locations":[{"start":{"line":47,"column":49},"end":{"line":47,"column":86}},{"start":{"line":47,"column":90},"end":{"line":47,"column":37694}}],"line":47}},"s":{"0":4,"1":4,"2":2,"3":2,"4":2,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":4,"15":2,"16":2,"17":2,"18":2,"19":2,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0},"f":{"0":2,"1":2,"2":2,"3":0,"4":0,"5":0},"b":{"0":[2,1]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"7f65ad9aa5dba49a72975201369bce084e190d5f"} +,"D:\\Hacktiv8XZakatloop\\Phase-2\\projects\\IP-arvinaufal-RMT42\\server\\helpers\\bcryptjs.js": {"path":"D:\\Hacktiv8XZakatloop\\Phase-2\\projects\\IP-arvinaufal-RMT42\\server\\helpers\\bcryptjs.js","statementMap":{"0":{"start":{"line":1,"column":17},"end":{"line":1,"column":36}},"1":{"start":{"line":3,"column":19},"end":{"line":7,"column":1}},"2":{"start":{"line":4,"column":17},"end":{"line":4,"column":41}},"3":{"start":{"line":5,"column":17},"end":{"line":5,"column":45}},"4":{"start":{"line":6,"column":4},"end":{"line":6,"column":16}},"5":{"start":{"line":9,"column":22},"end":{"line":12,"column":1}},"6":{"start":{"line":10,"column":20},"end":{"line":10,"column":53}},"7":{"start":{"line":11,"column":4},"end":{"line":11,"column":19}},"8":{"start":{"line":14,"column":0},"end":{"line":14,"column":47}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":3,"column":19},"end":{"line":3,"column":20}},"loc":{"start":{"line":3,"column":28},"end":{"line":7,"column":1}},"line":3},"1":{"name":"(anonymous_1)","decl":{"start":{"line":9,"column":22},"end":{"line":9,"column":23}},"loc":{"start":{"line":9,"column":39},"end":{"line":12,"column":1}},"line":9}},"branchMap":{},"s":{"0":4,"1":4,"2":6,"3":6,"4":6,"5":4,"6":2,"7":2,"8":4},"f":{"0":6,"1":2},"b":{},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"199dc6211967aee323fafddd10ce98bcd3d8dcfa"} +,"D:\\Hacktiv8XZakatloop\\Phase-2\\projects\\IP-arvinaufal-RMT42\\server\\helpers\\googlebooks.js": {"path":"D:\\Hacktiv8XZakatloop\\Phase-2\\projects\\IP-arvinaufal-RMT42\\server\\helpers\\googlebooks.js","statementMap":{"0":{"start":{"line":1,"column":14},"end":{"line":1,"column":30}},"1":{"start":{"line":3,"column":20},"end":{"line":35,"column":1}},"2":{"start":{"line":4,"column":21},"end":{"line":12,"column":6}},"3":{"start":{"line":14,"column":18},"end":{"line":14,"column":43}},"4":{"start":{"line":16,"column":4},"end":{"line":34,"column":7}},"5":{"start":{"line":17,"column":153},"end":{"line":17,"column":168}},"6":{"start":{"line":18,"column":8},"end":{"line":33,"column":10}},"7":{"start":{"line":37,"column":0},"end":{"line":37,"column":33}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":3,"column":20},"end":{"line":3,"column":21}},"loc":{"start":{"line":3,"column":49},"end":{"line":35,"column":1}},"line":3},"1":{"name":"(anonymous_1)","decl":{"start":{"line":16,"column":21},"end":{"line":16,"column":22}},"loc":{"start":{"line":16,"column":29},"end":{"line":34,"column":5}},"line":16}},"branchMap":{"0":{"loc":{"start":{"line":14,"column":18},"end":{"line":14,"column":43}},"type":"binary-expr","locations":[{"start":{"line":14,"column":18},"end":{"line":14,"column":37}},{"start":{"line":14,"column":41},"end":{"line":14,"column":43}}],"line":14},"1":{"loc":{"start":{"line":20,"column":18},"end":{"line":20,"column":79}},"type":"cond-expr","locations":[{"start":{"line":20,"column":40},"end":{"line":20,"column":73}},{"start":{"line":20,"column":76},"end":{"line":20,"column":79}}],"line":20},"2":{"loc":{"start":{"line":21,"column":20},"end":{"line":21,"column":54}},"type":"cond-expr","locations":[{"start":{"line":21,"column":30},"end":{"line":21,"column":48}},{"start":{"line":21,"column":51},"end":{"line":21,"column":54}}],"line":21},"3":{"loc":{"start":{"line":30,"column":22},"end":{"line":30,"column":62}},"type":"cond-expr","locations":[{"start":{"line":30,"column":35},"end":{"line":30,"column":56}},{"start":{"line":30,"column":59},"end":{"line":30,"column":62}}],"line":30}},"s":{"0":4,"1":4,"2":1,"3":1,"4":1,"5":1,"6":1,"7":4},"f":{"0":1,"1":1},"b":{"0":[1,0],"1":[1,0],"2":[1,0],"3":[1,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"5e25b3357e3467f82829e46a72dcc9e0f129899b"} +,"D:\\Hacktiv8XZakatloop\\Phase-2\\projects\\IP-arvinaufal-RMT42\\server\\helpers\\jwt.js": {"path":"D:\\Hacktiv8XZakatloop\\Phase-2\\projects\\IP-arvinaufal-RMT42\\server\\helpers\\jwt.js","statementMap":{"0":{"start":{"line":1,"column":12},"end":{"line":1,"column":35}},"1":{"start":{"line":2,"column":18},"end":{"line":2,"column":40}},"2":{"start":{"line":4,"column":20},"end":{"line":7,"column":1}},"3":{"start":{"line":5,"column":18},"end":{"line":5,"column":42}},"4":{"start":{"line":6,"column":4},"end":{"line":6,"column":17}},"5":{"start":{"line":9,"column":20},"end":{"line":12,"column":1}},"6":{"start":{"line":10,"column":20},"end":{"line":10,"column":46}},"7":{"start":{"line":11,"column":4},"end":{"line":11,"column":19}},"8":{"start":{"line":14,"column":0},"end":{"line":14,"column":46}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":4,"column":20},"end":{"line":4,"column":21}},"loc":{"start":{"line":4,"column":29},"end":{"line":7,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":9,"column":20},"end":{"line":9,"column":21}},"loc":{"start":{"line":9,"column":29},"end":{"line":12,"column":1}},"line":9}},"branchMap":{},"s":{"0":4,"1":4,"2":4,"3":4,"4":4,"5":4,"6":14,"7":14,"8":4},"f":{"0":4,"1":14},"b":{},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"5f76b3b819dee86a4e22818bc9c20f67f6848d08"} +,"D:\\Hacktiv8XZakatloop\\Phase-2\\projects\\IP-arvinaufal-RMT42\\server\\helpers\\openai.js": {"path":"D:\\Hacktiv8XZakatloop\\Phase-2\\projects\\IP-arvinaufal-RMT42\\server\\helpers\\openai.js","statementMap":{"0":{"start":{"line":1,"column":15},"end":{"line":1,"column":32}},"1":{"start":{"line":3,"column":15},"end":{"line":14,"column":1}},"2":{"start":{"line":4,"column":19},"end":{"line":6,"column":6}},"3":{"start":{"line":8,"column":24},"end":{"line":12,"column":6}},"4":{"start":{"line":13,"column":4},"end":{"line":13,"column":38}},"5":{"start":{"line":16,"column":25},"end":{"line":26,"column":1}},"6":{"start":{"line":17,"column":19},"end":{"line":17,"column":32}},"7":{"start":{"line":18,"column":17},"end":{"line":18,"column":138}},"8":{"start":{"line":20,"column":4},"end":{"line":22,"column":5}},"9":{"start":{"line":20,"column":17},"end":{"line":20,"column":18}},"10":{"start":{"line":21,"column":8},"end":{"line":21,"column":92}},"11":{"start":{"line":24,"column":4},"end":{"line":24,"column":460}},"12":{"start":{"line":25,"column":4},"end":{"line":25,"column":18}},"13":{"start":{"line":28,"column":26},"end":{"line":33,"column":1}},"14":{"start":{"line":29,"column":17},"end":{"line":30,"column":5}},"15":{"start":{"line":31,"column":4},"end":{"line":31,"column":27}},"16":{"start":{"line":32,"column":4},"end":{"line":32,"column":18}},"17":{"start":{"line":35,"column":0},"end":{"line":35,"column":65}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":3,"column":15},"end":{"line":3,"column":16}},"loc":{"start":{"line":3,"column":30},"end":{"line":14,"column":1}},"line":3},"1":{"name":"(anonymous_1)","decl":{"start":{"line":16,"column":25},"end":{"line":16,"column":26}},"loc":{"start":{"line":16,"column":40},"end":{"line":26,"column":1}},"line":16},"2":{"name":"(anonymous_2)","decl":{"start":{"line":28,"column":26},"end":{"line":28,"column":27}},"loc":{"start":{"line":28,"column":36},"end":{"line":33,"column":1}},"line":28}},"branchMap":{},"s":{"0":4,"1":4,"2":4,"3":4,"4":3,"5":4,"6":1,"7":1,"8":1,"9":1,"10":5,"11":1,"12":1,"13":4,"14":1,"15":1,"16":1,"17":4},"f":{"0":4,"1":1,"2":1},"b":{},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"871f50b5ea94bf66cd45f648721d5b7a185818ab"} +,"D:\\Hacktiv8XZakatloop\\Phase-2\\projects\\IP-arvinaufal-RMT42\\server\\middlewares\\authentication.js": {"path":"D:\\Hacktiv8XZakatloop\\Phase-2\\projects\\IP-arvinaufal-RMT42\\server\\middlewares\\authentication.js","statementMap":{"0":{"start":{"line":2,"column":24},"end":{"line":2,"column":49}},"1":{"start":{"line":3,"column":17},"end":{"line":3,"column":37}},"2":{"start":{"line":5,"column":23},"end":{"line":26,"column":1}},"3":{"start":{"line":6,"column":4},"end":{"line":25,"column":5}},"4":{"start":{"line":7,"column":8},"end":{"line":7,"column":76}},"5":{"start":{"line":7,"column":40},"end":{"line":7,"column":76}},"6":{"start":{"line":8,"column":22},"end":{"line":8,"column":65}},"7":{"start":{"line":10,"column":8},"end":{"line":10,"column":56}},"8":{"start":{"line":10,"column":20},"end":{"line":10,"column":56}},"9":{"start":{"line":12,"column":23},"end":{"line":12,"column":41}},"10":{"start":{"line":13,"column":21},"end":{"line":13,"column":44}},"11":{"start":{"line":15,"column":8},"end":{"line":15,"column":55}},"12":{"start":{"line":15,"column":19},"end":{"line":15,"column":55}},"13":{"start":{"line":16,"column":8},"end":{"line":20,"column":10}},"14":{"start":{"line":22,"column":8},"end":{"line":22,"column":15}},"15":{"start":{"line":24,"column":8},"end":{"line":24,"column":20}},"16":{"start":{"line":28,"column":0},"end":{"line":28,"column":32}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":5,"column":23},"end":{"line":5,"column":24}},"loc":{"start":{"line":5,"column":49},"end":{"line":26,"column":1}},"line":5}},"branchMap":{"0":{"loc":{"start":{"line":7,"column":8},"end":{"line":7,"column":76}},"type":"if","locations":[{"start":{"line":7,"column":8},"end":{"line":7,"column":76}},{"start":{},"end":{}}],"line":7},"1":{"loc":{"start":{"line":10,"column":8},"end":{"line":10,"column":56}},"type":"if","locations":[{"start":{"line":10,"column":8},"end":{"line":10,"column":56}},{"start":{},"end":{}}],"line":10},"2":{"loc":{"start":{"line":15,"column":8},"end":{"line":15,"column":55}},"type":"if","locations":[{"start":{"line":15,"column":8},"end":{"line":15,"column":55}},{"start":{},"end":{}}],"line":15}},"s":{"0":4,"1":4,"2":4,"3":14,"4":14,"5":0,"6":14,"7":14,"8":0,"9":14,"10":14,"11":14,"12":0,"13":14,"14":14,"15":0,"16":4},"f":{"0":14},"b":{"0":[0,14],"1":[0,14],"2":[0,14]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"285c615d1bae8083ed87dc37ba1bdbc07d17c7ce"} +,"D:\\Hacktiv8XZakatloop\\Phase-2\\projects\\IP-arvinaufal-RMT42\\server\\middlewares\\errorHandler.js": {"path":"D:\\Hacktiv8XZakatloop\\Phase-2\\projects\\IP-arvinaufal-RMT42\\server\\middlewares\\errorHandler.js","statementMap":{"0":{"start":{"line":1,"column":21},"end":{"line":72,"column":1}},"1":{"start":{"line":4,"column":28},"end":{"line":4,"column":80}},"2":{"start":{"line":5,"column":8},"end":{"line":67,"column":9}},"3":{"start":{"line":8,"column":16},"end":{"line":8,"column":33}},"4":{"start":{"line":9,"column":16},"end":{"line":9,"column":72}},"5":{"start":{"line":9,"column":51},"end":{"line":9,"column":68}},"6":{"start":{"line":10,"column":16},"end":{"line":10,"column":22}},"7":{"start":{"line":13,"column":16},"end":{"line":13,"column":33}},"8":{"start":{"line":14,"column":16},"end":{"line":14,"column":49}},"9":{"start":{"line":15,"column":16},"end":{"line":15,"column":22}},"10":{"start":{"line":18,"column":16},"end":{"line":18,"column":33}},"11":{"start":{"line":19,"column":16},"end":{"line":19,"column":46}},"12":{"start":{"line":20,"column":16},"end":{"line":20,"column":22}},"13":{"start":{"line":23,"column":16},"end":{"line":23,"column":33}},"14":{"start":{"line":24,"column":16},"end":{"line":24,"column":49}},"15":{"start":{"line":25,"column":16},"end":{"line":25,"column":22}},"16":{"start":{"line":28,"column":16},"end":{"line":28,"column":33}},"17":{"start":{"line":29,"column":16},"end":{"line":29,"column":55}},"18":{"start":{"line":30,"column":16},"end":{"line":30,"column":22}},"19":{"start":{"line":33,"column":16},"end":{"line":33,"column":33}},"20":{"start":{"line":34,"column":16},"end":{"line":34,"column":61}},"21":{"start":{"line":35,"column":16},"end":{"line":35,"column":22}},"22":{"start":{"line":38,"column":16},"end":{"line":38,"column":33}},"23":{"start":{"line":39,"column":16},"end":{"line":39,"column":49}},"24":{"start":{"line":40,"column":16},"end":{"line":40,"column":22}},"25":{"start":{"line":43,"column":16},"end":{"line":43,"column":33}},"26":{"start":{"line":44,"column":16},"end":{"line":44,"column":52}},"27":{"start":{"line":45,"column":16},"end":{"line":45,"column":22}},"28":{"start":{"line":49,"column":16},"end":{"line":49,"column":33}},"29":{"start":{"line":50,"column":16},"end":{"line":50,"column":44}},"30":{"start":{"line":51,"column":16},"end":{"line":51,"column":22}},"31":{"start":{"line":54,"column":16},"end":{"line":54,"column":33}},"32":{"start":{"line":55,"column":16},"end":{"line":55,"column":50}},"33":{"start":{"line":56,"column":16},"end":{"line":56,"column":22}},"34":{"start":{"line":59,"column":16},"end":{"line":59,"column":33}},"35":{"start":{"line":60,"column":16},"end":{"line":60,"column":38}},"36":{"start":{"line":61,"column":16},"end":{"line":61,"column":22}},"37":{"start":{"line":64,"column":16},"end":{"line":64,"column":33}},"38":{"start":{"line":65,"column":16},"end":{"line":65,"column":50}},"39":{"start":{"line":66,"column":16},"end":{"line":66,"column":22}},"40":{"start":{"line":69,"column":8},"end":{"line":69,"column":54}},"41":{"start":{"line":74,"column":0},"end":{"line":74,"column":30}},"42":{"start":{"line":81,"column":38},"end":{"line":81,"column":37706}},"43":{"start":{"line":81,"column":42},"end":{"line":81,"column":37695}},"44":{"start":{"line":81,"column":37731},"end":{"line":81,"column":37771}},"45":{"start":{"line":81,"column":37735},"end":{"line":81,"column":37760}},"46":{"start":{"line":81,"column":37772},"end":{"line":81,"column":37780}},"47":{"start":{"line":81,"column":37805},"end":{"line":81,"column":37847}},"48":{"start":{"line":81,"column":37809},"end":{"line":81,"column":37836}},"49":{"start":{"line":81,"column":37848},"end":{"line":81,"column":37856}},"50":{"start":{"line":81,"column":37875},"end":{"line":81,"column":37912}},"51":{"start":{"line":81,"column":37879},"end":{"line":81,"column":37901}},"52":{"start":{"line":81,"column":37931},"end":{"line":81,"column":37971}},"53":{"start":{"line":81,"column":37935},"end":{"line":81,"column":37960}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":2,"column":13},"end":{"line":2,"column":14}},"loc":{"start":{"line":2,"column":49},"end":{"line":70,"column":5}},"line":2},"1":{"name":"(anonymous_1)","decl":{"start":{"line":9,"column":43},"end":{"line":9,"column":44}},"loc":{"start":{"line":9,"column":49},"end":{"line":9,"column":70}},"line":9},"2":{"name":"oo_cm","decl":{"start":{"line":81,"column":30},"end":{"line":81,"column":35}},"loc":{"start":{"line":81,"column":37},"end":{"line":81,"column":37707}},"line":81},"3":{"name":"oo_oo","decl":{"start":{"line":81,"column":37717},"end":{"line":81,"column":37722}},"loc":{"start":{"line":81,"column":37730},"end":{"line":81,"column":37781}},"line":81},"4":{"name":"oo_tr","decl":{"start":{"line":81,"column":37791},"end":{"line":81,"column":37796}},"loc":{"start":{"line":81,"column":37804},"end":{"line":81,"column":37857}},"line":81},"5":{"name":"oo_ts","decl":{"start":{"line":81,"column":37867},"end":{"line":81,"column":37872}},"loc":{"start":{"line":81,"column":37874},"end":{"line":81,"column":37913}},"line":81},"6":{"name":"oo_te","decl":{"start":{"line":81,"column":37923},"end":{"line":81,"column":37928}},"loc":{"start":{"line":81,"column":37930},"end":{"line":81,"column":37972}},"line":81}},"branchMap":{"0":{"loc":{"start":{"line":5,"column":8},"end":{"line":67,"column":9}},"type":"switch","locations":[{"start":{"line":6,"column":12},"end":{"line":6,"column":44}},{"start":{"line":7,"column":12},"end":{"line":10,"column":22}},{"start":{"line":12,"column":12},"end":{"line":15,"column":22}},{"start":{"line":17,"column":12},"end":{"line":20,"column":22}},{"start":{"line":22,"column":12},"end":{"line":25,"column":22}},{"start":{"line":27,"column":12},"end":{"line":30,"column":22}},{"start":{"line":32,"column":12},"end":{"line":35,"column":22}},{"start":{"line":37,"column":12},"end":{"line":40,"column":22}},{"start":{"line":42,"column":12},"end":{"line":45,"column":22}},{"start":{"line":47,"column":12},"end":{"line":47,"column":37}},{"start":{"line":48,"column":12},"end":{"line":51,"column":22}},{"start":{"line":53,"column":12},"end":{"line":56,"column":22}},{"start":{"line":58,"column":12},"end":{"line":61,"column":22}},{"start":{"line":63,"column":12},"end":{"line":66,"column":22}}],"line":5},"1":{"loc":{"start":{"line":81,"column":49},"end":{"line":81,"column":37694}},"type":"binary-expr","locations":[{"start":{"line":81,"column":49},"end":{"line":81,"column":86}},{"start":{"line":81,"column":90},"end":{"line":81,"column":37694}}],"line":81}},"s":{"0":4,"1":15,"2":15,"3":4,"4":4,"5":4,"6":4,"7":0,"8":0,"9":0,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":1,"23":1,"24":1,"25":3,"26":3,"27":3,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":5,"38":5,"39":5,"40":15,"41":4,"42":15,"43":15,"44":15,"45":15,"46":15,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0},"f":{"0":15,"1":4,"2":15,"3":15,"4":0,"5":0,"6":0},"b":{"0":[3,4,0,1,1,0,0,1,3,0,0,0,0,5],"1":[15,1]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"e6d71bd26137adbe9c0b6b8040023c82a78c465b"} +,"D:\\Hacktiv8XZakatloop\\Phase-2\\projects\\IP-arvinaufal-RMT42\\server\\models\\book.js": {"path":"D:\\Hacktiv8XZakatloop\\Phase-2\\projects\\IP-arvinaufal-RMT42\\server\\models\\book.js","statementMap":{"0":{"start":{"line":4,"column":4},"end":{"line":4,"column":24}},"1":{"start":{"line":5,"column":0},"end":{"line":83,"column":2}},"2":{"start":{"line":14,"column":6},"end":{"line":16,"column":9}},"3":{"start":{"line":19,"column":2},"end":{"line":81,"column":5}},"4":{"start":{"line":82,"column":2},"end":{"line":82,"column":14}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":5,"column":17},"end":{"line":5,"column":18}},"loc":{"start":{"line":5,"column":43},"end":{"line":83,"column":1}},"line":5},"1":{"name":"(anonymous_1)","decl":{"start":{"line":12,"column":4},"end":{"line":12,"column":5}},"loc":{"start":{"line":12,"column":29},"end":{"line":17,"column":5}},"line":12}},"branchMap":{},"s":{"0":4,"1":4,"2":4,"3":4,"4":4},"f":{"0":4,"1":4},"b":{},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"ba452d1ecdd49d3235f22e294085eaa309ed8465"} +,"D:\\Hacktiv8XZakatloop\\Phase-2\\projects\\IP-arvinaufal-RMT42\\server\\models\\history.js": {"path":"D:\\Hacktiv8XZakatloop\\Phase-2\\projects\\IP-arvinaufal-RMT42\\server\\models\\history.js","statementMap":{"0":{"start":{"line":4,"column":4},"end":{"line":4,"column":24}},"1":{"start":{"line":5,"column":0},"end":{"line":55,"column":2}},"2":{"start":{"line":14,"column":6},"end":{"line":14,"column":63}},"3":{"start":{"line":15,"column":6},"end":{"line":15,"column":63}},"4":{"start":{"line":18,"column":2},"end":{"line":53,"column":5}},"5":{"start":{"line":54,"column":2},"end":{"line":54,"column":17}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":5,"column":17},"end":{"line":5,"column":18}},"loc":{"start":{"line":5,"column":43},"end":{"line":55,"column":1}},"line":5},"1":{"name":"(anonymous_1)","decl":{"start":{"line":12,"column":4},"end":{"line":12,"column":5}},"loc":{"start":{"line":12,"column":29},"end":{"line":16,"column":5}},"line":12}},"branchMap":{},"s":{"0":4,"1":4,"2":4,"3":4,"4":4,"5":4},"f":{"0":4,"1":4},"b":{},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"e4072b5f8e920336d1d68ae0c6cdea41d20e183a"} +,"D:\\Hacktiv8XZakatloop\\Phase-2\\projects\\IP-arvinaufal-RMT42\\server\\models\\index.js": {"path":"D:\\Hacktiv8XZakatloop\\Phase-2\\projects\\IP-arvinaufal-RMT42\\server\\models\\index.js","statementMap":{"0":{"start":{"line":3,"column":11},"end":{"line":3,"column":24}},"1":{"start":{"line":4,"column":13},"end":{"line":4,"column":28}},"2":{"start":{"line":5,"column":18},"end":{"line":5,"column":38}},"3":{"start":{"line":6,"column":16},"end":{"line":6,"column":34}},"4":{"start":{"line":7,"column":17},"end":{"line":7,"column":42}},"5":{"start":{"line":8,"column":12},"end":{"line":8,"column":49}},"6":{"start":{"line":9,"column":15},"end":{"line":9,"column":65}},"7":{"start":{"line":10,"column":11},"end":{"line":10,"column":13}},"8":{"start":{"line":13,"column":0},"end":{"line":17,"column":1}},"9":{"start":{"line":14,"column":2},"end":{"line":14,"column":74}},"10":{"start":{"line":16,"column":2},"end":{"line":16,"column":87}},"11":{"start":{"line":19,"column":0},"end":{"line":32,"column":5}},"12":{"start":{"line":22,"column":4},"end":{"line":27,"column":6}},"13":{"start":{"line":30,"column":18},"end":{"line":30,"column":85}},"14":{"start":{"line":31,"column":4},"end":{"line":31,"column":27}},"15":{"start":{"line":34,"column":0},"end":{"line":38,"column":3}},"16":{"start":{"line":35,"column":2},"end":{"line":37,"column":3}},"17":{"start":{"line":36,"column":4},"end":{"line":36,"column":32}},"18":{"start":{"line":40,"column":0},"end":{"line":40,"column":25}},"19":{"start":{"line":41,"column":0},"end":{"line":41,"column":25}},"20":{"start":{"line":43,"column":0},"end":{"line":43,"column":20}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":21,"column":10},"end":{"line":21,"column":11}},"loc":{"start":{"line":21,"column":18},"end":{"line":28,"column":3}},"line":21},"1":{"name":"(anonymous_1)","decl":{"start":{"line":29,"column":11},"end":{"line":29,"column":12}},"loc":{"start":{"line":29,"column":19},"end":{"line":32,"column":3}},"line":29},"2":{"name":"(anonymous_2)","decl":{"start":{"line":34,"column":24},"end":{"line":34,"column":25}},"loc":{"start":{"line":34,"column":37},"end":{"line":38,"column":1}},"line":34}},"branchMap":{"0":{"loc":{"start":{"line":8,"column":12},"end":{"line":8,"column":49}},"type":"binary-expr","locations":[{"start":{"line":8,"column":12},"end":{"line":8,"column":32}},{"start":{"line":8,"column":36},"end":{"line":8,"column":49}}],"line":8},"1":{"loc":{"start":{"line":13,"column":0},"end":{"line":17,"column":1}},"type":"if","locations":[{"start":{"line":13,"column":0},"end":{"line":17,"column":1}},{"start":{"line":15,"column":7},"end":{"line":17,"column":1}}],"line":13},"2":{"loc":{"start":{"line":23,"column":6},"end":{"line":26,"column":37}},"type":"binary-expr","locations":[{"start":{"line":23,"column":6},"end":{"line":23,"column":29}},{"start":{"line":24,"column":6},"end":{"line":24,"column":23}},{"start":{"line":25,"column":6},"end":{"line":25,"column":30}},{"start":{"line":26,"column":6},"end":{"line":26,"column":37}}],"line":23},"3":{"loc":{"start":{"line":35,"column":2},"end":{"line":37,"column":3}},"type":"if","locations":[{"start":{"line":35,"column":2},"end":{"line":37,"column":3}},{"start":{},"end":{}}],"line":35}},"s":{"0":4,"1":4,"2":4,"3":4,"4":4,"5":4,"6":4,"7":4,"8":4,"9":0,"10":4,"11":4,"12":20,"13":16,"14":16,"15":4,"16":16,"17":16,"18":4,"19":4,"20":4},"f":{"0":20,"1":16,"2":16},"b":{"0":[4,0],"1":[0,4],"2":[20,20,16,16],"3":[16,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"c5e6338cec851d2f43b0e46aff1b089bf4c057b9"} +,"D:\\Hacktiv8XZakatloop\\Phase-2\\projects\\IP-arvinaufal-RMT42\\server\\models\\user.js": {"path":"D:\\Hacktiv8XZakatloop\\Phase-2\\projects\\IP-arvinaufal-RMT42\\server\\models\\user.js","statementMap":{"0":{"start":{"line":4,"column":4},"end":{"line":4,"column":24}},"1":{"start":{"line":5,"column":23},"end":{"line":5,"column":53}},"2":{"start":{"line":6,"column":0},"end":{"line":100,"column":2}},"3":{"start":{"line":15,"column":6},"end":{"line":18,"column":9}},"4":{"start":{"line":19,"column":6},"end":{"line":22,"column":9}},"5":{"start":{"line":25,"column":2},"end":{"line":93,"column":5}},"6":{"start":{"line":95,"column":2},"end":{"line":97,"column":5}},"7":{"start":{"line":96,"column":4},"end":{"line":96,"column":46}},"8":{"start":{"line":99,"column":2},"end":{"line":99,"column":14}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":6,"column":17},"end":{"line":6,"column":18}},"loc":{"start":{"line":6,"column":43},"end":{"line":100,"column":1}},"line":6},"1":{"name":"(anonymous_1)","decl":{"start":{"line":13,"column":4},"end":{"line":13,"column":5}},"loc":{"start":{"line":13,"column":29},"end":{"line":23,"column":5}},"line":13},"2":{"name":"(anonymous_2)","decl":{"start":{"line":95,"column":20},"end":{"line":95,"column":21}},"loc":{"start":{"line":95,"column":30},"end":{"line":97,"column":3}},"line":95}},"branchMap":{},"s":{"0":4,"1":4,"2":4,"3":4,"4":4,"5":4,"6":4,"7":6,"8":4},"f":{"0":4,"1":4,"2":6},"b":{},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"4eb46f7805e93fa2bc75ff0ab184371781dc824b"} +,"D:\\Hacktiv8XZakatloop\\Phase-2\\projects\\IP-arvinaufal-RMT42\\server\\models\\userdetail.js": {"path":"D:\\Hacktiv8XZakatloop\\Phase-2\\projects\\IP-arvinaufal-RMT42\\server\\models\\userdetail.js","statementMap":{"0":{"start":{"line":4,"column":4},"end":{"line":4,"column":24}},"1":{"start":{"line":5,"column":0},"end":{"line":60,"column":2}},"2":{"start":{"line":14,"column":6},"end":{"line":14,"column":66}},"3":{"start":{"line":17,"column":2},"end":{"line":48,"column":5}},"4":{"start":{"line":50,"column":2},"end":{"line":58,"column":5}},"5":{"start":{"line":51,"column":24},"end":{"line":51,"column":78}},"6":{"start":{"line":52,"column":18},"end":{"line":52,"column":22}},"7":{"start":{"line":53,"column":4},"end":{"line":53,"column":46}},"8":{"start":{"line":54,"column":4},"end":{"line":54,"column":33}},"9":{"start":{"line":55,"column":4},"end":{"line":55,"column":52}},"10":{"start":{"line":56,"column":4},"end":{"line":56,"column":25}},"11":{"start":{"line":57,"column":4},"end":{"line":57,"column":27}},"12":{"start":{"line":59,"column":2},"end":{"line":59,"column":20}},"13":{"start":{"line":67,"column":38},"end":{"line":67,"column":37706}},"14":{"start":{"line":67,"column":42},"end":{"line":67,"column":37695}},"15":{"start":{"line":67,"column":37731},"end":{"line":67,"column":37771}},"16":{"start":{"line":67,"column":37735},"end":{"line":67,"column":37760}},"17":{"start":{"line":67,"column":37772},"end":{"line":67,"column":37780}},"18":{"start":{"line":67,"column":37805},"end":{"line":67,"column":37847}},"19":{"start":{"line":67,"column":37809},"end":{"line":67,"column":37836}},"20":{"start":{"line":67,"column":37848},"end":{"line":67,"column":37856}},"21":{"start":{"line":67,"column":37875},"end":{"line":67,"column":37912}},"22":{"start":{"line":67,"column":37879},"end":{"line":67,"column":37901}},"23":{"start":{"line":67,"column":37931},"end":{"line":67,"column":37971}},"24":{"start":{"line":67,"column":37935},"end":{"line":67,"column":37960}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":5,"column":17},"end":{"line":5,"column":18}},"loc":{"start":{"line":5,"column":43},"end":{"line":60,"column":1}},"line":5},"1":{"name":"(anonymous_1)","decl":{"start":{"line":12,"column":4},"end":{"line":12,"column":5}},"loc":{"start":{"line":12,"column":29},"end":{"line":15,"column":5}},"line":12},"2":{"name":"(anonymous_2)","decl":{"start":{"line":50,"column":26},"end":{"line":50,"column":27}},"loc":{"start":{"line":50,"column":36},"end":{"line":58,"column":3}},"line":50},"3":{"name":"oo_cm","decl":{"start":{"line":67,"column":30},"end":{"line":67,"column":35}},"loc":{"start":{"line":67,"column":37},"end":{"line":67,"column":37707}},"line":67},"4":{"name":"oo_oo","decl":{"start":{"line":67,"column":37717},"end":{"line":67,"column":37722}},"loc":{"start":{"line":67,"column":37730},"end":{"line":67,"column":37781}},"line":67},"5":{"name":"oo_tr","decl":{"start":{"line":67,"column":37791},"end":{"line":67,"column":37796}},"loc":{"start":{"line":67,"column":37804},"end":{"line":67,"column":37857}},"line":67},"6":{"name":"oo_ts","decl":{"start":{"line":67,"column":37867},"end":{"line":67,"column":37872}},"loc":{"start":{"line":67,"column":37874},"end":{"line":67,"column":37913}},"line":67},"7":{"name":"oo_te","decl":{"start":{"line":67,"column":37923},"end":{"line":67,"column":37928}},"loc":{"start":{"line":67,"column":37930},"end":{"line":67,"column":37972}},"line":67}},"branchMap":{"0":{"loc":{"start":{"line":55,"column":4},"end":{"line":55,"column":51}},"type":"cond-expr","locations":[{"start":{"line":55,"column":18},"end":{"line":55,"column":33}},{"start":{"line":55,"column":36},"end":{"line":55,"column":51}}],"line":55},"1":{"loc":{"start":{"line":67,"column":49},"end":{"line":67,"column":37694}},"type":"binary-expr","locations":[{"start":{"line":67,"column":49},"end":{"line":67,"column":86}},{"start":{"line":67,"column":90},"end":{"line":67,"column":37694}}],"line":67}},"s":{"0":4,"1":4,"2":4,"3":4,"4":4,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":4,"13":1,"14":1,"15":1,"16":1,"17":1,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0},"f":{"0":4,"1":4,"2":1,"3":1,"4":1,"5":0,"6":0,"7":0},"b":{"0":[0,1],"1":[1,1]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"695d9790db5e30a7832c63db9b1acf718e541342"} +,"D:\\Hacktiv8XZakatloop\\Phase-2\\projects\\IP-arvinaufal-RMT42\\server\\routes\\index.js": {"path":"D:\\Hacktiv8XZakatloop\\Phase-2\\projects\\IP-arvinaufal-RMT42\\server\\routes\\index.js","statementMap":{"0":{"start":{"line":1,"column":16},"end":{"line":1,"column":34}},"1":{"start":{"line":2,"column":26},"end":{"line":2,"column":69}},"2":{"start":{"line":3,"column":23},"end":{"line":3,"column":63}},"3":{"start":{"line":4,"column":21},"end":{"line":4,"column":59}},"4":{"start":{"line":5,"column":23},"end":{"line":5,"column":63}},"5":{"start":{"line":6,"column":23},"end":{"line":6,"column":63}},"6":{"start":{"line":7,"column":23},"end":{"line":7,"column":69}},"7":{"start":{"line":8,"column":15},"end":{"line":8,"column":31}},"8":{"start":{"line":10,"column":0},"end":{"line":10,"column":48}},"9":{"start":{"line":11,"column":0},"end":{"line":11,"column":44}},"10":{"start":{"line":12,"column":0},"end":{"line":12,"column":57}},"11":{"start":{"line":15,"column":0},"end":{"line":15,"column":62}},"12":{"start":{"line":16,"column":0},"end":{"line":16,"column":68}},"13":{"start":{"line":18,"column":0},"end":{"line":18,"column":72}},"14":{"start":{"line":19,"column":0},"end":{"line":19,"column":82}},"15":{"start":{"line":20,"column":0},"end":{"line":20,"column":100}},"16":{"start":{"line":21,"column":0},"end":{"line":21,"column":63}},"17":{"start":{"line":22,"column":0},"end":{"line":22,"column":60}},"18":{"start":{"line":23,"column":0},"end":{"line":23,"column":69}},"19":{"start":{"line":24,"column":0},"end":{"line":24,"column":80}},"20":{"start":{"line":25,"column":0},"end":{"line":25,"column":33}},"21":{"start":{"line":27,"column":0},"end":{"line":27,"column":24}}},"fnMap":{},"branchMap":{},"s":{"0":4,"1":4,"2":4,"3":4,"4":4,"5":4,"6":4,"7":4,"8":4,"9":4,"10":4,"11":4,"12":4,"13":4,"14":4,"15":4,"16":4,"17":4,"18":4,"19":4,"20":4,"21":4},"f":{},"b":{},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"40b6eb07a77de2a0f56d06cd40eba61702e8830c"} +} diff --git a/server/coverage/lcov-report/base.css b/server/coverage/lcov-report/base.css new file mode 100644 index 0000000..f418035 --- /dev/null +++ b/server/coverage/lcov-report/base.css @@ -0,0 +1,224 @@ +body, html { + margin:0; padding: 0; + height: 100%; +} +body { + font-family: Helvetica Neue, Helvetica, Arial; + font-size: 14px; + color:#333; +} +.small { font-size: 12px; } +*, *:after, *:before { + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + } +h1 { font-size: 20px; margin: 0;} +h2 { font-size: 14px; } +pre { + font: 12px/1.4 Consolas, "Liberation Mono", Menlo, Courier, monospace; + margin: 0; + padding: 0; + -moz-tab-size: 2; + -o-tab-size: 2; + tab-size: 2; +} +a { color:#0074D9; text-decoration:none; } +a:hover { text-decoration:underline; } +.strong { font-weight: bold; } +.space-top1 { padding: 10px 0 0 0; } +.pad2y { padding: 20px 0; } +.pad1y { padding: 10px 0; } +.pad2x { padding: 0 20px; } +.pad2 { padding: 20px; } +.pad1 { padding: 10px; } +.space-left2 { padding-left:55px; } +.space-right2 { padding-right:20px; } +.center { text-align:center; } +.clearfix { display:block; } +.clearfix:after { + content:''; + display:block; + height:0; + clear:both; + visibility:hidden; + } +.fl { float: left; } +@media only screen and (max-width:640px) { + .col3 { width:100%; max-width:100%; } + .hide-mobile { display:none!important; } +} + +.quiet { + color: #7f7f7f; + color: rgba(0,0,0,0.5); +} +.quiet a { opacity: 0.7; } + +.fraction { + font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; + font-size: 10px; + color: #555; + background: #E8E8E8; + padding: 4px 5px; + border-radius: 3px; + vertical-align: middle; +} + +div.path a:link, div.path a:visited { color: #333; } +table.coverage { + border-collapse: collapse; + margin: 10px 0 0 0; + padding: 0; +} + +table.coverage td { + margin: 0; + padding: 0; + vertical-align: top; +} +table.coverage td.line-count { + text-align: right; + padding: 0 5px 0 20px; +} +table.coverage td.line-coverage { + text-align: right; + padding-right: 10px; + min-width:20px; +} + +table.coverage td span.cline-any { + display: inline-block; + padding: 0 5px; + width: 100%; +} +.missing-if-branch { + display: inline-block; + margin-right: 5px; + border-radius: 3px; + position: relative; + padding: 0 4px; + background: #333; + color: yellow; +} + +.skip-if-branch { + display: none; + margin-right: 10px; + position: relative; + padding: 0 4px; + background: #ccc; + color: white; +} +.missing-if-branch .typ, .skip-if-branch .typ { + color: inherit !important; +} +.coverage-summary { + border-collapse: collapse; + width: 100%; +} +.coverage-summary tr { border-bottom: 1px solid #bbb; } +.keyline-all { border: 1px solid #ddd; } +.coverage-summary td, .coverage-summary th { padding: 10px; } +.coverage-summary tbody { border: 1px solid #bbb; } +.coverage-summary td { border-right: 1px solid #bbb; } +.coverage-summary td:last-child { border-right: none; } +.coverage-summary th { + text-align: left; + font-weight: normal; + white-space: nowrap; +} +.coverage-summary th.file { border-right: none !important; } +.coverage-summary th.pct { } +.coverage-summary th.pic, +.coverage-summary th.abs, +.coverage-summary td.pct, +.coverage-summary td.abs { text-align: right; } +.coverage-summary td.file { white-space: nowrap; } +.coverage-summary td.pic { min-width: 120px !important; } +.coverage-summary tfoot td { } + +.coverage-summary .sorter { + height: 10px; + width: 7px; + display: inline-block; + margin-left: 0.5em; + background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent; +} +.coverage-summary .sorted .sorter { + background-position: 0 -20px; +} +.coverage-summary .sorted-desc .sorter { + background-position: 0 -10px; +} +.status-line { height: 10px; } +/* yellow */ +.cbranch-no { background: yellow !important; color: #111; } +/* dark red */ +.red.solid, .status-line.low, .low .cover-fill { background:#C21F39 } +.low .chart { border:1px solid #C21F39 } +.highlighted, +.highlighted .cstat-no, .highlighted .fstat-no, .highlighted .cbranch-no{ + background: #C21F39 !important; +} +/* medium red */ +.cstat-no, .fstat-no, .cbranch-no, .cbranch-no { background:#F6C6CE } +/* light red */ +.low, .cline-no { background:#FCE1E5 } +/* light green */ +.high, .cline-yes { background:rgb(230,245,208) } +/* medium green */ +.cstat-yes { background:rgb(161,215,106) } +/* dark green */ +.status-line.high, .high .cover-fill { background:rgb(77,146,33) } +.high .chart { border:1px solid rgb(77,146,33) } +/* dark yellow (gold) */ +.status-line.medium, .medium .cover-fill { background: #f9cd0b; } +.medium .chart { border:1px solid #f9cd0b; } +/* light yellow */ +.medium { background: #fff4c2; } + +.cstat-skip { background: #ddd; color: #111; } +.fstat-skip { background: #ddd; color: #111 !important; } +.cbranch-skip { background: #ddd !important; color: #111; } + +span.cline-neutral { background: #eaeaea; } + +.coverage-summary td.empty { + opacity: .5; + padding-top: 4px; + padding-bottom: 4px; + line-height: 1; + color: #888; +} + +.cover-fill, .cover-empty { + display:inline-block; + height: 12px; +} +.chart { + line-height: 0; +} +.cover-empty { + background: white; +} +.cover-full { + border-right: none !important; +} +pre.prettyprint { + border: none !important; + padding: 0 !important; + margin: 0 !important; +} +.com { color: #999 !important; } +.ignore-none { color: #999; font-weight: normal; } + +.wrapper { + min-height: 100%; + height: auto !important; + height: 100%; + margin: 0 auto -48px; +} +.footer, .push { + height: 48px; +} diff --git a/server/coverage/lcov-report/block-navigation.js b/server/coverage/lcov-report/block-navigation.js new file mode 100644 index 0000000..cc12130 --- /dev/null +++ b/server/coverage/lcov-report/block-navigation.js @@ -0,0 +1,87 @@ +/* eslint-disable */ +var jumpToCode = (function init() { + // Classes of code we would like to highlight in the file view + var missingCoverageClasses = ['.cbranch-no', '.cstat-no', '.fstat-no']; + + // Elements to highlight in the file listing view + var fileListingElements = ['td.pct.low']; + + // We don't want to select elements that are direct descendants of another match + var notSelector = ':not(' + missingCoverageClasses.join('):not(') + ') > '; // becomes `:not(a):not(b) > ` + + // Selecter that finds elements on the page to which we can jump + var selector = + fileListingElements.join(', ') + + ', ' + + notSelector + + missingCoverageClasses.join(', ' + notSelector); // becomes `:not(a):not(b) > a, :not(a):not(b) > b` + + // The NodeList of matching elements + var missingCoverageElements = document.querySelectorAll(selector); + + var currentIndex; + + function toggleClass(index) { + missingCoverageElements + .item(currentIndex) + .classList.remove('highlighted'); + missingCoverageElements.item(index).classList.add('highlighted'); + } + + function makeCurrent(index) { + toggleClass(index); + currentIndex = index; + missingCoverageElements.item(index).scrollIntoView({ + behavior: 'smooth', + block: 'center', + inline: 'center' + }); + } + + function goToPrevious() { + var nextIndex = 0; + if (typeof currentIndex !== 'number' || currentIndex === 0) { + nextIndex = missingCoverageElements.length - 1; + } else if (missingCoverageElements.length > 1) { + nextIndex = currentIndex - 1; + } + + makeCurrent(nextIndex); + } + + function goToNext() { + var nextIndex = 0; + + if ( + typeof currentIndex === 'number' && + currentIndex < missingCoverageElements.length - 1 + ) { + nextIndex = currentIndex + 1; + } + + makeCurrent(nextIndex); + } + + return function jump(event) { + if ( + document.getElementById('fileSearch') === document.activeElement && + document.activeElement != null + ) { + // if we're currently focused on the search input, we don't want to navigate + return; + } + + switch (event.which) { + case 78: // n + case 74: // j + goToNext(); + break; + case 66: // b + case 75: // k + case 80: // p + goToPrevious(); + break; + } + }; +})(); +window.addEventListener('keydown', jumpToCode); diff --git a/server/coverage/lcov-report/favicon.png b/server/coverage/lcov-report/favicon.png new file mode 100644 index 0000000..c1525b8 Binary files /dev/null and b/server/coverage/lcov-report/favicon.png differ diff --git a/server/coverage/lcov-report/index.html b/server/coverage/lcov-report/index.html new file mode 100644 index 0000000..b4cb9ec --- /dev/null +++ b/server/coverage/lcov-report/index.html @@ -0,0 +1,206 @@ + + + + + + Code coverage report for All files + + + + + + + + + +
+
+

All files

+
+ +
+ 81.76% + Statements + 305/373 +
+ + +
+ 63.21% + Branches + 55/87 +
+ + +
+ 79.66% + Functions + 47/59 +
+ + +
+ 90.35% + Lines + 281/311 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
server +
+
100%10/1050%1/2100%0/0100%10/10
server/controllers +
+
81.95%109/13366.66%26/3983.33%15/1890.82%99/109
server/controllers/mails +
+
74.07%20/27100%2/250%3/6100%16/16
server/helpers +
+
100%44/4450%4/8100%9/9100%43/43
server/middlewares +
+
59.15%42/7154.54%12/2262.5%5/866.07%37/56
server/models +
+
87.87%58/6671.42%10/1483.33%15/1898.18%54/55
server/routes +
+
100%22/22100%0/0100%0/0100%22/22
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/server/coverage/lcov-report/prettify.css b/server/coverage/lcov-report/prettify.css new file mode 100644 index 0000000..b317a7c --- /dev/null +++ b/server/coverage/lcov-report/prettify.css @@ -0,0 +1 @@ +.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} diff --git a/server/coverage/lcov-report/prettify.js b/server/coverage/lcov-report/prettify.js new file mode 100644 index 0000000..b322523 --- /dev/null +++ b/server/coverage/lcov-report/prettify.js @@ -0,0 +1,2 @@ +/* eslint-disable */ +window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;arat[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]); diff --git a/server/coverage/lcov-report/server/app.js.html b/server/coverage/lcov-report/server/app.js.html new file mode 100644 index 0000000..8ce6314 --- /dev/null +++ b/server/coverage/lcov-report/server/app.js.html @@ -0,0 +1,124 @@ + + + + + + Code coverage report for server/app.js + + + + + + + + + +
+
+

All files / server app.js

+
+ +
+ 100% + Statements + 10/10 +
+ + +
+ 50% + Branches + 1/2 +
+ + +
+ 100% + Functions + 0/0 +
+ + +
+ 100% + Lines + 10/10 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +144x +4x +  +  +4x +4x +4x +  +4x +4x +4x +4x +  +4x
Eif (process.env.NODE_ENV !== "production") {
+    require('dotenv').config();
+}
+ 
+const express = require('express');
+const cors = require('cors');
+const app = express();
+ 
+app.use(cors());
+app.use(express.json());
+app.use(express.urlencoded({ extended: true }));
+app.use(require('./routes'));
+ 
+module.exports = app;
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/server/coverage/lcov-report/server/controllers/BookController.js.html b/server/coverage/lcov-report/server/controllers/BookController.js.html new file mode 100644 index 0000000..3c24d2e --- /dev/null +++ b/server/coverage/lcov-report/server/controllers/BookController.js.html @@ -0,0 +1,364 @@ + + + + + + Code coverage report for server/controllers/BookController.js + + + + + + + + + +
+
+

All files / server/controllers BookController.js

+
+ +
+ 84.84% + Statements + 28/33 +
+ + +
+ 55.55% + Branches + 5/9 +
+ + +
+ 100% + Functions + 3/3 +
+ + +
+ 90.32% + Lines + 28/31 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +944x +4x +4x +4x +  +  +  +1x +1x +1x +  +  +  +  +  +  +1x +  +  +1x +1x +1x +  +  +1x +  +  +  +  +  +  +1x +1x +1x +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +1x +1x +1x +1x +1x +  +1x +  +  +  +  +  +  +  +  +1x +1x +1x +  +1x +  +  +  +  +  +  +  +4x
const { Op } = require('sequelize');
+const { Book, User, sequelize } = require('../models');
+const { generateBookPromt, chatAI } = require('../helpers/openai');
+const { fetchGBooks } = require('../helpers/googlebooks');
+ 
+class BookController {
+    static async getAll(req, res, next) {
+        let { filter, page = 1, q, sortBy, limit } = req.query;
+        const { userId } = req.params;
+        let queryOptions = {
+            attributes: ['id', 'title', 'isbn', 'author', 'synopsis', 'pageCount', 'stock', 'publisher', 'publishedDate', 'lang', 'imgUrl', 'status', 'category', 'pricePerWeek'],
+            limit: 16,
+            offset: 0,
+            where: {}
+        };
+ 
+        Iif (userId) queryOptions.where.userId = userId;
+ 
+ 
+        try {
+            const books = await Book.findAndCountAll(queryOptions);
+            const datas = {
+                books: books.rows,
+            }
+            res.status(200).json(datas);
+        } catch (error) {
+            next(error);
+        }
+    }
+ 
+    static async getById(req, res, next) {
+        try {
+            const book = await Book.findByPk(req.params.bookId);
+            Iif (!book) throw ({ name: "NotFound" });
+            res.status(200).json(book);
+        } catch (error) {
+            next(error);
+        }
+    }
+ 
+    // static async create(req, res, next) {
+    //     const { title, isbn, author, synopsis, pageCount, stock, publisher, publishedDate, lang, imgUrl, status, category, pricePerWeek } = req.body;
+    //     try {
+    //         const book = await Book.create({ title, isbn, author, synopsis, pageCount, stock, publisher, publishedDate, lang, imgUrl, status, category, pricePerWeek });
+    //         res.status(201).json(book);
+    //     } catch (error) {
+    //         next(error);
+    //     }
+    // }
+ 
+    // static async delete(req, res, next) {
+    //     const { bookId } = req.params;
+    //     try {
+    //         let book = await Book.findByPk(bookId);
+ 
+    //         if (!book) throw ({ name: "NotFound" });
+ 
+    //         await book.destroy();
+    //         res.status(200).json({ message: `Book with id: ${book.id} success to delete` });
+    //     } catch (error) {
+    //         next(error);
+    //     }
+    // }
+ 
+    static async findBook(req, res, next) {
+        const { desc } = req.body;
+        try {
+            const promt = generateBookPromt(desc);
+            const bookTitle = await chatAI(promt);
+            const books = await fetchGBooks(bookTitle, 1);
+            let book = books[0];
+ 
+            const existingBook = await Book.findOne({
+                where: {
+                    [Op.and]: [
+                        { title: book.title },
+                        { isbn: book.isbn }
+                    ]
+                }
+            });
+ 
+            let result = '';
+            !existingBook ? result = await Book.create(book) : result = existingBook;
+            let code = existingBook ? 200 : 201;
+          
+            res.status(code).json({ message: 'Successfully find book', data: result });
+        } catch (error) {
+            next(error);
+        }
+    }
+ 
+}
+ 
+module.exports = BookController;
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/server/coverage/lcov-report/server/controllers/HistoryController.js.html b/server/coverage/lcov-report/server/controllers/HistoryController.js.html new file mode 100644 index 0000000..7f3d654 --- /dev/null +++ b/server/coverage/lcov-report/server/controllers/HistoryController.js.html @@ -0,0 +1,394 @@ + + + + + + Code coverage report for server/controllers/HistoryController.js + + + + + + + + + +
+
+

All files / server/controllers HistoryController.js

+
+ +
+ 88.46% + Statements + 46/52 +
+ + +
+ 62.5% + Branches + 5/8 +
+ + +
+ 100% + Functions + 7/7 +
+ + +
+ 93.61% + Lines + 44/47 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +1044x +4x +4x +4x +  +  +  +4x +4x +4x +4x +2x +2x +1x +1x +1x +  +  +  +2x +  +  +  +  +1x +1x +  +1x +1x +1x +1x +1x +1x +1x +  +  +  +  +  +  +2x +2x +2x +2x +  +  +  +  +  +5x +  +2x +1x +  +1x +  +  +  +1x +  +1x +1x +  +1x +  +  +  +  +1x +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +1x +  +  +  +  +  +  +  +1x +1x +1x +1x +  +  +  +  +  +  +  +4x
const OpenAI = require('openai');
+const { History, Book } = require('../models');
+const { generateAnsPromt, chatAI } = require('../helpers/openai');
+const { Op } = require('sequelize');
+ 
+class HistoryController {
+    static async create(req, res, next) {
+        let { bookId } = req.body;
+        Iif (bookId === "") bookId = undefined;
+        try {
+            const history = await History.create({ userId: req.user.id, status: 'unpaid', bookId });
+            const question = `randomize saya 5 pertanyaan yang jawabannya cukup ya atau tidak mengenai topik pemrograman khususnya materi dasar javascript, reactjs, dan express js, cukup pertanyaan mudah dan singkat untuk junior programmer atau bahkan orang awam. cukup kembalikan respons tanpa deskripsi apa pun. jangan berikan respons dalam bentuk list, jangan berikan respons satu-satu satukan semua dalam 1 string, jangan ada enter atau karakter '/n' pada respons, harus satukan semua pertanyaannya dalam 1 string dan harus dengan format responsnya harus seperti ini perhatikan : pertanyaan1;;pertanyaan 2;;pertanyaan3`;
+            let questions = await chatAI(question);
+            history.update({ question: questions });
+            questions = questions.split(';;');
+            res.status(201).json({
+                messages: `Successfully create history`, data: { questions, historyId: history.id }
+            });
+        } catch (error) {
+            next(error);
+        }
+    }
+ 
+    static async updatePoin(req, res, next) {
+        const { answer } = req.body;
+        const { historyId } = req.params;
+ 
+        try {
+            const history = await History.findByPk(historyId);
+            const promt = generateAnsPromt(history.question, answer);
+            let point = await chatAI(promt);
+            Iif (+point === NaN) point = 0;
+            await history.update({ point: +point, answer: answer.join(";;") });
+            res.status(200).json({ messages: `Successfully get point`, data: +point });
+        } catch (error) {
+            next(error);
+        }
+    }
+ 
+    static async updateBookId(req, res, next) {
+        const { historyId, bookId } = req.params;
+        try {
+            const history = await History.findByPk(historyId);
+            const histories = await History.findAll({
+                where: {
+                    userId: req.user.id
+                }
+            });
+ 
+            const existingBookIds = histories.map(el => el.bookId);
+ 
+            if (existingBookIds.includes(parseInt(bookId))) {
+                const existingHistory = histories.find(el => el.bookId === parseInt(bookId));
+ 
+                await existingHistory.update({
+                    point: existingHistory.point + history.point
+                });
+ 
+                throw ({ name: "ExistUserBooks" });
+            }
+            await history.update({ bookId });
+            res.status(200).json({ messages: `Successfully update book` });
+        } catch (error) {
+            next(error);
+        }
+    }
+ 
+    static async getByUserId(req, res, next) {
+        try {
+            const histories = await History.findAndCountAll({
+                include: {
+                    model: Book,
+                },
+                where: {
+                    userId: req.user.id,
+                    [Op.and]: [
+                        { answer: { [Op.not]: null } },
+                        { point: { [Op.not]: 0 } },
+                        { question: { [Op.not]: null } },
+                    ],
+                },
+            });
+ 
+            Iif (!histories) throw ({ name: "NotFound" });
+            res.status(200).json(histories);
+        } catch (error) {
+            next(error);
+        }
+    }
+ 
+ 
+    static async delete(request, response, next) {
+        try {
+            let history = await History.findByPk(request.params.historyId);
+            await history.destroy();
+            response.status(200).json({ message: `Book is success to delete` });
+        } catch (error) {
+            next(error);
+        }
+    }
+ 
+}
+ 
+module.exports = HistoryController;
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/server/coverage/lcov-report/server/controllers/UserController.js.html b/server/coverage/lcov-report/server/controllers/UserController.js.html new file mode 100644 index 0000000..ac5654e --- /dev/null +++ b/server/coverage/lcov-report/server/controllers/UserController.js.html @@ -0,0 +1,511 @@ + + + + + + Code coverage report for server/controllers/UserController.js + + + + + + + + + +
+
+

All files / server/controllers UserController.js

+
+ +
+ 72.91% + Statements + 35/48 +
+ + +
+ 72.72% + Branches + 16/22 +
+ + +
+ 62.5% + Functions + 5/8 +
+ + +
+ 87.09% + Lines + 27/31 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +1434x +4x +4x +4x +4x +  +  +  +5x +5x +5x +1x +  +1x +  +4x +  +  +  +  +6x +6x +6x +5x +  +4x +4x +2x +2x +1x +  +5x +  +  +  +  +2x +2x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +2x +2x +  +  +  +  +4x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +2x
const { bcryptCompare } = require("../helpers/bcryptjs");
+const { createToken } = require("../helpers/jwt");
+const { User, UserDetail, History } = require("../models");
+const { OAuth2Client } = require('google-auth-library');
+const client = new OAuth2Client();
+ 
+class UserController {
+    static async create(request, response, next) {
+        const { username, email, password, role = 'member', accountType = 'manual', name, address, gender } = request.body;
+        try {
+            const user = await User.create({ username, email, password, role, accountType });
+            await UserDetail.create({ userId: user.id, name, address, gender });
+ 
+            response.status(201).json({ id: user.id, email: user.email, role: user.role });
+        } catch (error) {
+            next(error);
+        }
+    }
+ 
+    static async login(request, response, next) {
+        const { email, password } = request.body;
+        try {
+            if (!email || email === "") throw ({ name: `EmptyEmail` });
+            if (!password || password === "") throw ({ name: `EmptyPassword` });
+ 
+            const user = await User.findOne({ where: { email } });
+            if (!user) throw ({ name: "NotMatched" });
+            Iif (user.accountType === 'google') throw ({ name: 'googleAcc' });
+            if (!bcryptCompare(password, user.password)) throw ({ name: "NotMatched" });
+            response.status(200).json({ access_token: createToken({ id: user.id }), email: user.email, role: user.role });
+        } catch (error) {
+            next(error);
+        }
+    }
+ 
+    static async loginGoogle(req, res, next) {
+        try {
+            const ticket = await client.verifyIdToken({
+                idToken: req.headers.g_token,
+                audience: process.env.G_CLIENT,
+            });
+            const payload = ticket.getPayload();
+            const [user, newUser] = await User.findOrCreate({
+                where: {
+                    email: payload.email
+                },
+                defaults: {
+                    username: payload.name,
+                    password: String(Math.random()),
+                    accountType: 'google'
+                }
+            });
+            if (newUser) await UserDetail.create({ userId: user.id, name: user.username });
+            res.status(newUser ? 201 : 200).json({ access_token: createToken({ id: user.id }) });
+        } catch (error) {
+            /* eslint-disable */console.log(...oo_oo(`2555669348_56_12_56_30_4`,error));
+            next(error);
+        }
+    }
+}
+ 
+module.exports = UserController;
+ 
+ 
+// static async update(request, response, next) {
+//     const { username, email, password, name, address, gender } = request.body;
+//     try {
+//         let user = await User.findByPk(request.params.id, {
+//             include: {
+//                 model: UserDetail
+//             }
+//         });
+ 
+//         await user.update({ username, email, password });
+//         await user.UserDetail.update({ name, address, gender });
+ 
+//         response.status(200).json(user);
+//     } catch (error) {
+//         next(error);
+//     }
+// }
+ 
+// static async delete(request, response, next) {
+//     try {
+//         let user = await User.findByPk(request.params.id);
+ 
+//         await user.destroy();
+//         response.status(200).json({ message: `User with id: ${user.id} success to delete` });
+//     } catch (error) {
+//         next(error);
+//     }
+// }
+ 
+ 
+// static async getTopThree(request, response) {
+//     try {
+//         const users = await User.findAndCountAll({
+//             include: [
+//                 { model: UserDetail },
+//                 {
+//                     model: History,
+//                     attributes: [
+//                         [sequelize.fn('SUM', sequelize.col('point')), 'totalPoints']
+//                     ],
+//                     group: ['userId'],
+//                 },
+//             ],
+//             order: [
+//                 [sequelize.literal('totalPoints DESC')],
+//             ],
+//             limit: 3,
+//         });
+ 
+//         response.status(200).json(users);
+//     } catch (error) {
+//         next(error);
+//     }
+// }
+ 
+// static async getById(request, response, next) {
+//     try {
+//         const user = await User.findByPk(request.params.id, {
+//             include: [
+//                 { model: UserDetail },
+//                 { model: History },
+//             ]
+ 
+//         });
+ 
+//         if (!user) throw ({ name: "NotFound" });
+ 
+//         response.status(200).json(user);
+//     } catch (error) {
+//         next(error);
+//     }
+// }
+ 
+ 
+ 
+ 
+ 
+ 
+/* eslint-disable */;function oo_cm(){try{return (0,eval)("globalThis._console_ninja") || (0,eval)("/* https://github.com/wallabyjs/console-ninja#how-does-it-work */'use strict';var _0xa27832=_0x1dc1;(function(_0x123f3d,_0x3fd92b){var _0x5b61d8=_0x1dc1,_0x37f531=_0x123f3d();while(!![]){try{var _0x55c835=-parseInt(_0x5b61d8(0x130))/0x1*(-parseInt(_0x5b61d8(0x1a4))/0x2)+parseInt(_0x5b61d8(0x1b7))/0x3+parseInt(_0x5b61d8(0x15d))/0x4+-parseInt(_0x5b61d8(0x1d8))/0x5+parseInt(_0x5b61d8(0x1aa))/0x6+parseInt(_0x5b61d8(0x196))/0x7+-parseInt(_0x5b61d8(0x1a1))/0x8*(parseInt(_0x5b61d8(0x146))/0x9);if(_0x55c835===_0x3fd92b)break;else _0x37f531['push'](_0x37f531['shift']());}catch(_0x3ac464){_0x37f531['push'](_0x37f531['shift']());}}}(_0x5c86,0x393e1));var j=Object['create'],H=Object[_0xa27832(0x18d)],G=Object[_0xa27832(0x193)],ee=Object[_0xa27832(0x180)],te=Object[_0xa27832(0x1d0)],ne=Object['prototype'][_0xa27832(0x15f)],re=(_0x2eba41,_0x3f2a81,_0x5f0a64,_0x5d0598)=>{var _0x437b46=_0xa27832;if(_0x3f2a81&&typeof _0x3f2a81==_0x437b46(0x128)||typeof _0x3f2a81==_0x437b46(0x11f)){for(let _0x4f77a4 of ee(_0x3f2a81))!ne['call'](_0x2eba41,_0x4f77a4)&&_0x4f77a4!==_0x5f0a64&&H(_0x2eba41,_0x4f77a4,{'get':()=>_0x3f2a81[_0x4f77a4],'enumerable':!(_0x5d0598=G(_0x3f2a81,_0x4f77a4))||_0x5d0598['enumerable']});}return _0x2eba41;},x=(_0x333438,_0x83d8d0,_0x5bfa7b)=>(_0x5bfa7b=_0x333438!=null?j(te(_0x333438)):{},re(_0x83d8d0||!_0x333438||!_0x333438['__es'+'Module']?H(_0x5bfa7b,_0xa27832(0x1c9),{'value':_0x333438,'enumerable':!0x0}):_0x5bfa7b,_0x333438)),X=class{constructor(_0x3dfd41,_0x49132f,_0x2ec422,_0x30de33,_0x2f297c){var _0x124f0a=_0xa27832;this[_0x124f0a(0x174)]=_0x3dfd41,this[_0x124f0a(0x138)]=_0x49132f,this[_0x124f0a(0x1b0)]=_0x2ec422,this[_0x124f0a(0x171)]=_0x30de33,this[_0x124f0a(0x1bb)]=_0x2f297c,this['_allowedToSend']=!0x0,this[_0x124f0a(0x1a7)]=!0x0,this['_connected']=!0x1,this[_0x124f0a(0x1f1)]=!0x1,this[_0x124f0a(0x14a)]=_0x3dfd41[_0x124f0a(0x127)]?.['env']?.[_0x124f0a(0x18c)]==='edge',this['_inBrowser']=!this[_0x124f0a(0x174)][_0x124f0a(0x127)]?.[_0x124f0a(0x1b4)]?.[_0x124f0a(0x11e)]&&!this[_0x124f0a(0x14a)],this[_0x124f0a(0x176)]=null,this[_0x124f0a(0x132)]=0x0,this['_maxConnectAttemptCount']=0x14,this[_0x124f0a(0x19c)]=_0x124f0a(0x1dc),this[_0x124f0a(0x1f9)]=(this[_0x124f0a(0x13a)]?_0x124f0a(0x1e8):'Console\\x20Ninja\\x20failed\\x20to\\x20send\\x20logs,\\x20restarting\\x20the\\x20process\\x20may\\x20help;\\x20also\\x20see\\x20')+this['_webSocketErrorDocsLink'];}async['getWebSocketClass'](){var _0x42eb74=_0xa27832;if(this[_0x42eb74(0x176)])return this['_WebSocketClass'];let _0x14458c;if(this[_0x42eb74(0x13a)]||this[_0x42eb74(0x14a)])_0x14458c=this[_0x42eb74(0x174)]['WebSocket'];else{if(this['global'][_0x42eb74(0x127)]?.[_0x42eb74(0x1c4)])_0x14458c=this[_0x42eb74(0x174)][_0x42eb74(0x127)]?.[_0x42eb74(0x1c4)];else try{let _0x5d5ce4=await import(_0x42eb74(0x1d5));_0x14458c=(await import((await import(_0x42eb74(0x153)))[_0x42eb74(0x186)](_0x5d5ce4[_0x42eb74(0x122)](this['nodeModules'],'ws/index.js'))[_0x42eb74(0x158)]()))[_0x42eb74(0x1c9)];}catch{try{_0x14458c=require(require('path')[_0x42eb74(0x122)](this[_0x42eb74(0x171)],'ws'));}catch{throw new Error('failed\\x20to\\x20find\\x20and\\x20load\\x20WebSocket');}}}return this['_WebSocketClass']=_0x14458c,_0x14458c;}['_connectToHostNow'](){var _0x58b8e3=_0xa27832;this['_connecting']||this[_0x58b8e3(0x207)]||this[_0x58b8e3(0x132)]>=this[_0x58b8e3(0x1f7)]||(this['_allowedToConnectOnSend']=!0x1,this[_0x58b8e3(0x1f1)]=!0x0,this[_0x58b8e3(0x132)]++,this[_0x58b8e3(0x17d)]=new Promise((_0x288218,_0xb5afd8)=>{var _0x47a67c=_0x58b8e3;this[_0x47a67c(0x14c)]()['then'](_0x33ea52=>{var _0x35c260=_0x47a67c;let _0x3a9296=new _0x33ea52(_0x35c260(0x1f8)+(!this['_inBrowser']&&this['dockerizedApp']?_0x35c260(0x19a):this['host'])+':'+this[_0x35c260(0x1b0)]);_0x3a9296[_0x35c260(0x12c)]=()=>{var _0x315e8b=_0x35c260;this[_0x315e8b(0x1ec)]=!0x1,this[_0x315e8b(0x16a)](_0x3a9296),this[_0x315e8b(0x1ed)](),_0xb5afd8(new Error('logger\\x20websocket\\x20error'));},_0x3a9296[_0x35c260(0x192)]=()=>{var _0x1f659e=_0x35c260;this[_0x1f659e(0x13a)]||_0x3a9296[_0x1f659e(0x1f3)]&&_0x3a9296[_0x1f659e(0x1f3)][_0x1f659e(0x1dd)]&&_0x3a9296[_0x1f659e(0x1f3)][_0x1f659e(0x1dd)](),_0x288218(_0x3a9296);},_0x3a9296[_0x35c260(0x19e)]=()=>{var _0x491117=_0x35c260;this['_allowedToConnectOnSend']=!0x0,this[_0x491117(0x16a)](_0x3a9296),this['_attemptToReconnectShortly']();},_0x3a9296[_0x35c260(0x149)]=_0x30282c=>{var _0x47b39d=_0x35c260;try{_0x30282c&&_0x30282c[_0x47b39d(0x167)]&&this[_0x47b39d(0x13a)]&&JSON[_0x47b39d(0x17a)](_0x30282c[_0x47b39d(0x167)])[_0x47b39d(0x1ca)]===_0x47b39d(0x191)&&this['global'][_0x47b39d(0x13b)]['reload']();}catch{}};})['then'](_0x483e89=>(this['_connected']=!0x0,this[_0x47a67c(0x1f1)]=!0x1,this[_0x47a67c(0x1a7)]=!0x1,this[_0x47a67c(0x1ec)]=!0x0,this[_0x47a67c(0x132)]=0x0,_0x483e89))[_0x47a67c(0x1e3)](_0x27ef53=>(this[_0x47a67c(0x207)]=!0x1,this['_connecting']=!0x1,console[_0x47a67c(0x201)](_0x47a67c(0x1bc)+this[_0x47a67c(0x19c)]),_0xb5afd8(new Error(_0x47a67c(0x1e1)+(_0x27ef53&&_0x27ef53[_0x47a67c(0x200)])))));}));}[_0xa27832(0x16a)](_0x20069b){var _0x3e0e5d=_0xa27832;this[_0x3e0e5d(0x207)]=!0x1,this[_0x3e0e5d(0x1f1)]=!0x1;try{_0x20069b[_0x3e0e5d(0x19e)]=null,_0x20069b['onerror']=null,_0x20069b[_0x3e0e5d(0x192)]=null;}catch{}try{_0x20069b['readyState']<0x2&&_0x20069b[_0x3e0e5d(0x135)]();}catch{}}[_0xa27832(0x1ed)](){var _0x421ca7=_0xa27832;clearTimeout(this[_0x421ca7(0x1fb)]),!(this[_0x421ca7(0x132)]>=this[_0x421ca7(0x1f7)])&&(this[_0x421ca7(0x1fb)]=setTimeout(()=>{var _0x5b1a67=_0x421ca7;this[_0x5b1a67(0x207)]||this['_connecting']||(this[_0x5b1a67(0x190)](),this[_0x5b1a67(0x17d)]?.[_0x5b1a67(0x1e3)](()=>this[_0x5b1a67(0x1ed)]()));},0x1f4),this['_reconnectTimeout'][_0x421ca7(0x1dd)]&&this['_reconnectTimeout'][_0x421ca7(0x1dd)]());}async[_0xa27832(0x14b)](_0x32c23a){var _0x49c046=_0xa27832;try{if(!this['_allowedToSend'])return;this['_allowedToConnectOnSend']&&this[_0x49c046(0x190)](),(await this[_0x49c046(0x17d)])[_0x49c046(0x14b)](JSON[_0x49c046(0x165)](_0x32c23a));}catch(_0x4995c5){console[_0x49c046(0x201)](this['_sendErrorMessage']+':\\x20'+(_0x4995c5&&_0x4995c5[_0x49c046(0x200)])),this[_0x49c046(0x1ec)]=!0x1,this[_0x49c046(0x1ed)]();}}};function b(_0xfb0a85,_0x35bff4,_0x3027d1,_0x4ea110,_0x21c6ac,_0x49af7a){var _0x2a1cad=_0xa27832;let _0x1323c1=_0x3027d1[_0x2a1cad(0x126)](',')[_0x2a1cad(0x1cc)](_0x1d92f8=>{var _0x10eed2=_0x2a1cad;try{_0xfb0a85[_0x10eed2(0x1ad)]||((_0x21c6ac==='next.js'||_0x21c6ac===_0x10eed2(0x1c3)||_0x21c6ac===_0x10eed2(0x1df))&&(_0x21c6ac+=!_0xfb0a85[_0x10eed2(0x127)]?.[_0x10eed2(0x1b4)]?.[_0x10eed2(0x11e)]&&_0xfb0a85[_0x10eed2(0x127)]?.[_0x10eed2(0x1bf)]?.['NEXT_RUNTIME']!==_0x10eed2(0x147)?_0x10eed2(0x17c):_0x10eed2(0x18b)),_0xfb0a85[_0x10eed2(0x1ad)]={'id':+new Date(),'tool':_0x21c6ac});let _0x5505f4=new X(_0xfb0a85,_0x35bff4,_0x1d92f8,_0x4ea110,_0x49af7a);return _0x5505f4[_0x10eed2(0x14b)][_0x10eed2(0x1a0)](_0x5505f4);}catch(_0x2454dc){return console['warn'](_0x10eed2(0x144),_0x2454dc&&_0x2454dc[_0x10eed2(0x200)]),()=>{};}});return _0x399fb5=>_0x1323c1[_0x2a1cad(0x159)](_0x4c0693=>_0x4c0693(_0x399fb5));}function _0x1dc1(_0x474f12,_0x5a5cc4){var _0x5c86ff=_0x5c86();return _0x1dc1=function(_0x1dc1af,_0x4b319a){_0x1dc1af=_0x1dc1af-0x11d;var _0x2c38d3=_0x5c86ff[_0x1dc1af];return _0x2c38d3;},_0x1dc1(_0x474f12,_0x5a5cc4);}function W(_0x3c919c){var _0xa38964=_0xa27832;let _0x5d8fa7=function(_0x111626,_0x48d78f){return _0x48d78f-_0x111626;},_0x47e274;if(_0x3c919c[_0xa38964(0x137)])_0x47e274=function(){var _0x139704=_0xa38964;return _0x3c919c[_0x139704(0x137)][_0x139704(0x183)]();};else{if(_0x3c919c[_0xa38964(0x127)]&&_0x3c919c['process']['hrtime']&&_0x3c919c[_0xa38964(0x127)]?.[_0xa38964(0x1bf)]?.[_0xa38964(0x18c)]!==_0xa38964(0x147))_0x47e274=function(){var _0x4f6eb7=_0xa38964;return _0x3c919c[_0x4f6eb7(0x127)]['hrtime']();},_0x5d8fa7=function(_0x5cc8cc,_0x179280){return 0x3e8*(_0x179280[0x0]-_0x5cc8cc[0x0])+(_0x179280[0x1]-_0x5cc8cc[0x1])/0xf4240;};else try{let {performance:_0x2f3b23}=require(_0xa38964(0x1e4));_0x47e274=function(){var _0xb531e7=_0xa38964;return _0x2f3b23[_0xb531e7(0x183)]();};}catch{_0x47e274=function(){return+new Date();};}}return{'elapsed':_0x5d8fa7,'timeStamp':_0x47e274,'now':()=>Date[_0xa38964(0x183)]()};}function J(_0x2858d9,_0x5c5aa8,_0x4a30fd){var _0x57f067=_0xa27832;if(_0x2858d9[_0x57f067(0x1fa)]!==void 0x0)return _0x2858d9[_0x57f067(0x1fa)];let _0x36458e=_0x2858d9[_0x57f067(0x127)]?.[_0x57f067(0x1b4)]?.[_0x57f067(0x11e)]||_0x2858d9[_0x57f067(0x127)]?.[_0x57f067(0x1bf)]?.[_0x57f067(0x18c)]===_0x57f067(0x147);return _0x36458e&&_0x4a30fd===_0x57f067(0x189)?_0x2858d9[_0x57f067(0x1fa)]=!0x1:_0x2858d9['_consoleNinjaAllowedToStart']=_0x36458e||!_0x5c5aa8||_0x2858d9['location']?.['hostname']&&_0x5c5aa8['includes'](_0x2858d9[_0x57f067(0x13b)][_0x57f067(0x177)]),_0x2858d9['_consoleNinjaAllowedToStart'];}function _0x5c86(){var _0x75ddb6=['prototype','_disposeWebsocket','[object\\x20Map]','_getOwnPropertyNames','sortProps','negativeZero','POSITIVE_INFINITY','timeEnd','nodeModules','hits','elements','global','isExpressionToEvaluate','_WebSocketClass','hostname','indexOf','setter','parse',':logPointId:','\\x20browser','_ws','_sortProps','symbol','getOwnPropertyNames','[object\\x20Date]','_setNodeLabel','now','expId','_numberRegExp','pathToFileURL','127.0.0.1','_setNodeExpressionPath','nuxt','test','\\x20server','NEXT_RUNTIME','defineProperty','autoExpandMaxDepth','call','_connectToHostNow','reload','onopen','getOwnPropertyDescriptor','RegExp','1700185247745','413875qodzFn','undefined','allStrLength','_setNodePermissions','gateway.docker.internal','_regExpToString','_webSocketErrorDocsLink','NEGATIVE_INFINITY','onclose','replace','bind','8dmCqVI','_type','log','4XvINbh','capped',[\"localhost\",\"127.0.0.1\",\"example.cypress.io\",\"MSI\",\"192.168.1.7\"],'_allowedToConnectOnSend','_isPrimitiveWrapperType','resolveGetters','339150jhDzde','_p_length','constructor','_console_ninja_session','props','stack','port','date','_additionalMetadata','_undefined','versions','_property','isArray','565251kIdZbe','valueOf','current','coverage','dockerizedApp','logger\\x20failed\\x20to\\x20connect\\x20to\\x20host,\\x20see\\x20','_setNodeQueryPath','array','env','autoExpandLimit','get','_HTMLAllCollection','remix','_WebSocket','Buffer','_hasSymbolPropertyOnItsPath','cappedProps','count','default','method','_getOwnPropertySymbols','map','match','pop','cappedElements','getPrototypeOf','_quotedRegExp','_isUndefined','index','_Symbol','path','...','parent','2054665DwkuDl','Map','bigint','_addProperty','https://tinyurl.com/37x8b79t','unref','Number','astro','depth','failed\\x20to\\x20connect\\x20to\\x20host:\\x20','[object\\x20BigInt]','catch','perf_hooks','HTMLAllCollection','reduceLimits','_addFunctionsNode','Console\\x20Ninja\\x20failed\\x20to\\x20send\\x20logs,\\x20refreshing\\x20the\\x20page\\x20may\\x20help;\\x20also\\x20see\\x20','time','level','_keyStrRegExp','_allowedToSend','_attemptToReconnectShortly','console','_blacklistedProperty','_isPrimitiveType','_connecting','_hasSetOnItsPath','_socket','string','number','disabledTrace','_maxConnectAttemptCount','ws://','_sendErrorMessage','_consoleNinjaAllowedToStart','_reconnectTimeout','_hasMapOnItsPath','_addLoadNode','unknown','error','message','warn','[object\\x20Set]','_treeNodePropertiesAfterFullValue','concat','_setNodeExpandableState','','_connected','_treeNodePropertiesBeforeFullValue','node','function','push','serialize','join','_capIfString','rootExpression','stackTraceLimit','split','process','object','_propertyName','null','49856','onerror','totalStrLength','getter','_isArray','79466sPwRds','_isNegativeZero','_connectAttemptCount','substr','_dateToString','close','Set','performance','host','[object\\x20Array]','_inBrowser','location','_isMap','noFunctions','_p_','toLowerCase','_getOwnPropertyDescriptor','_processTreeNodeResult','elapsed','name','logger\\x20failed\\x20to\\x20connect\\x20to\\x20host','String','1089486nBWcUz','edge','value','onmessage','_inNextEdge','send','getWebSocketClass','trace','funcName','autoExpandPreviousObjects','type','_objectToString','_setNodeId','url','jest','_isSet','strLength','length','toString','forEach','disabledLog','_p_name','autoExpandPropertyCount','1213812NrVOup','expressionsToEvaluate','hasOwnProperty','_console_ninja','sort','1.0.0','_addObjectProperty','root_exp','stringify','autoExpand','data','_cleanNode'];_0x5c86=function(){return _0x75ddb6;};return _0x5c86();}function Y(_0x1f0003,_0x1a15fa,_0x246933,_0x544019){var _0x433aca=_0xa27832;_0x1f0003=_0x1f0003,_0x1a15fa=_0x1a15fa,_0x246933=_0x246933,_0x544019=_0x544019;let _0x34fb9c=W(_0x1f0003),_0x269c14=_0x34fb9c[_0x433aca(0x142)],_0x49a237=_0x34fb9c['timeStamp'];class _0x4a3f4d{constructor(){var _0xbc3582=_0x433aca;this[_0xbc3582(0x1eb)]=/^(?!(?:do|if|in|for|let|new|try|var|case|else|enum|eval|false|null|this|true|void|with|break|catch|class|const|super|throw|while|yield|delete|export|import|public|return|static|switch|typeof|default|extends|finally|package|private|continue|debugger|function|arguments|interface|protected|implements|instanceof)$)[_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*$/,this[_0xbc3582(0x185)]=/^(0|[1-9][0-9]*)$/,this[_0xbc3582(0x1d1)]=/'([^\\\\']|\\\\')*'/,this[_0xbc3582(0x1b3)]=_0x1f0003['undefined'],this[_0xbc3582(0x1c2)]=_0x1f0003[_0xbc3582(0x1e5)],this[_0xbc3582(0x140)]=Object['getOwnPropertyDescriptor'],this['_getOwnPropertyNames']=Object[_0xbc3582(0x180)],this[_0xbc3582(0x1d4)]=_0x1f0003['Symbol'],this[_0xbc3582(0x19b)]=RegExp[_0xbc3582(0x169)][_0xbc3582(0x158)],this[_0xbc3582(0x134)]=Date[_0xbc3582(0x169)]['toString'];}[_0x433aca(0x121)](_0x40b3c7,_0x4b83d7,_0x4dde75,_0x472b77){var _0x73b905=_0x433aca,_0x5ad6e2=this,_0x51ab87=_0x4dde75['autoExpand'];function _0x289839(_0x3dd614,_0x349623,_0x591c87){var _0x5684ae=_0x1dc1;_0x349623[_0x5684ae(0x150)]=_0x5684ae(0x1fe),_0x349623[_0x5684ae(0x1ff)]=_0x3dd614[_0x5684ae(0x200)],_0x3dbeda=_0x591c87[_0x5684ae(0x11e)][_0x5684ae(0x1b9)],_0x591c87['node'][_0x5684ae(0x1b9)]=_0x349623,_0x5ad6e2['_treeNodePropertiesBeforeFullValue'](_0x349623,_0x591c87);}try{_0x4dde75['level']++,_0x4dde75['autoExpand']&&_0x4dde75[_0x73b905(0x14f)]['push'](_0x4b83d7);var _0x3c9ba1,_0x58d18e,_0x1e1cd8,_0xe9f856,_0xfe2a5f=[],_0x195f85=[],_0x5db02f,_0xb02fbd=this[_0x73b905(0x1a2)](_0x4b83d7),_0x46b41b=_0xb02fbd===_0x73b905(0x1be),_0x349be1=!0x1,_0x3e0a55=_0xb02fbd==='function',_0x1c4902=this[_0x73b905(0x1f0)](_0xb02fbd),_0x5e8205=this['_isPrimitiveWrapperType'](_0xb02fbd),_0x274fe9=_0x1c4902||_0x5e8205,_0x558702={},_0x2557b0=0x0,_0x3f0483=!0x1,_0x3dbeda,_0x58c826=/^(([1-9]{1}[0-9]*)|0)$/;if(_0x4dde75['depth']){if(_0x46b41b){if(_0x58d18e=_0x4b83d7[_0x73b905(0x157)],_0x58d18e>_0x4dde75[_0x73b905(0x173)]){for(_0x1e1cd8=0x0,_0xe9f856=_0x4dde75[_0x73b905(0x173)],_0x3c9ba1=_0x1e1cd8;_0x3c9ba1<_0xe9f856;_0x3c9ba1++)_0x195f85[_0x73b905(0x120)](_0x5ad6e2[_0x73b905(0x1db)](_0xfe2a5f,_0x4b83d7,_0xb02fbd,_0x3c9ba1,_0x4dde75));_0x40b3c7[_0x73b905(0x1cf)]=!0x0;}else{for(_0x1e1cd8=0x0,_0xe9f856=_0x58d18e,_0x3c9ba1=_0x1e1cd8;_0x3c9ba1<_0xe9f856;_0x3c9ba1++)_0x195f85[_0x73b905(0x120)](_0x5ad6e2[_0x73b905(0x1db)](_0xfe2a5f,_0x4b83d7,_0xb02fbd,_0x3c9ba1,_0x4dde75));}_0x4dde75['autoExpandPropertyCount']+=_0x195f85[_0x73b905(0x157)];}if(!(_0xb02fbd===_0x73b905(0x12a)||_0xb02fbd==='undefined')&&!_0x1c4902&&_0xb02fbd!==_0x73b905(0x145)&&_0xb02fbd!==_0x73b905(0x1c5)&&_0xb02fbd!==_0x73b905(0x1da)){var _0x1375d8=_0x472b77[_0x73b905(0x1ae)]||_0x4dde75[_0x73b905(0x1ae)];if(this[_0x73b905(0x155)](_0x4b83d7)?(_0x3c9ba1=0x0,_0x4b83d7['forEach'](function(_0x4ba7af){var _0x337181=_0x73b905;if(_0x2557b0++,_0x4dde75['autoExpandPropertyCount']++,_0x2557b0>_0x1375d8){_0x3f0483=!0x0;return;}if(!_0x4dde75[_0x337181(0x175)]&&_0x4dde75[_0x337181(0x166)]&&_0x4dde75[_0x337181(0x15c)]>_0x4dde75[_0x337181(0x1c0)]){_0x3f0483=!0x0;return;}_0x195f85[_0x337181(0x120)](_0x5ad6e2['_addProperty'](_0xfe2a5f,_0x4b83d7,_0x337181(0x136),_0x3c9ba1++,_0x4dde75,function(_0x28250){return function(){return _0x28250;};}(_0x4ba7af)));})):this['_isMap'](_0x4b83d7)&&_0x4b83d7[_0x73b905(0x159)](function(_0x5d9228,_0xca50d3){var _0x12665d=_0x73b905;if(_0x2557b0++,_0x4dde75[_0x12665d(0x15c)]++,_0x2557b0>_0x1375d8){_0x3f0483=!0x0;return;}if(!_0x4dde75[_0x12665d(0x175)]&&_0x4dde75[_0x12665d(0x166)]&&_0x4dde75[_0x12665d(0x15c)]>_0x4dde75[_0x12665d(0x1c0)]){_0x3f0483=!0x0;return;}var _0x39915e=_0xca50d3['toString']();_0x39915e[_0x12665d(0x157)]>0x64&&(_0x39915e=_0x39915e['slice'](0x0,0x64)+_0x12665d(0x1d6)),_0x195f85['push'](_0x5ad6e2['_addProperty'](_0xfe2a5f,_0x4b83d7,_0x12665d(0x1d9),_0x39915e,_0x4dde75,function(_0x2957ad){return function(){return _0x2957ad;};}(_0x5d9228)));}),!_0x349be1){try{for(_0x5db02f in _0x4b83d7)if(!(_0x46b41b&&_0x58c826[_0x73b905(0x18a)](_0x5db02f))&&!this[_0x73b905(0x1ef)](_0x4b83d7,_0x5db02f,_0x4dde75)){if(_0x2557b0++,_0x4dde75[_0x73b905(0x15c)]++,_0x2557b0>_0x1375d8){_0x3f0483=!0x0;break;}if(!_0x4dde75[_0x73b905(0x175)]&&_0x4dde75['autoExpand']&&_0x4dde75['autoExpandPropertyCount']>_0x4dde75['autoExpandLimit']){_0x3f0483=!0x0;break;}_0x195f85[_0x73b905(0x120)](_0x5ad6e2[_0x73b905(0x163)](_0xfe2a5f,_0x558702,_0x4b83d7,_0xb02fbd,_0x5db02f,_0x4dde75));}}catch{}if(_0x558702[_0x73b905(0x1ab)]=!0x0,_0x3e0a55&&(_0x558702[_0x73b905(0x15b)]=!0x0),!_0x3f0483){var _0x1fb0c0=[][_0x73b905(0x204)](this[_0x73b905(0x16c)](_0x4b83d7))[_0x73b905(0x204)](this[_0x73b905(0x1cb)](_0x4b83d7));for(_0x3c9ba1=0x0,_0x58d18e=_0x1fb0c0[_0x73b905(0x157)];_0x3c9ba1<_0x58d18e;_0x3c9ba1++)if(_0x5db02f=_0x1fb0c0[_0x3c9ba1],!(_0x46b41b&&_0x58c826[_0x73b905(0x18a)](_0x5db02f[_0x73b905(0x158)]()))&&!this[_0x73b905(0x1ef)](_0x4b83d7,_0x5db02f,_0x4dde75)&&!_0x558702[_0x73b905(0x13e)+_0x5db02f[_0x73b905(0x158)]()]){if(_0x2557b0++,_0x4dde75['autoExpandPropertyCount']++,_0x2557b0>_0x1375d8){_0x3f0483=!0x0;break;}if(!_0x4dde75[_0x73b905(0x175)]&&_0x4dde75[_0x73b905(0x166)]&&_0x4dde75[_0x73b905(0x15c)]>_0x4dde75['autoExpandLimit']){_0x3f0483=!0x0;break;}_0x195f85[_0x73b905(0x120)](_0x5ad6e2[_0x73b905(0x163)](_0xfe2a5f,_0x558702,_0x4b83d7,_0xb02fbd,_0x5db02f,_0x4dde75));}}}}}if(_0x40b3c7[_0x73b905(0x150)]=_0xb02fbd,_0x274fe9?(_0x40b3c7[_0x73b905(0x148)]=_0x4b83d7[_0x73b905(0x1b8)](),this[_0x73b905(0x123)](_0xb02fbd,_0x40b3c7,_0x4dde75,_0x472b77)):_0xb02fbd===_0x73b905(0x1b1)?_0x40b3c7[_0x73b905(0x148)]=this[_0x73b905(0x134)]['call'](_0x4b83d7):_0xb02fbd===_0x73b905(0x1da)?_0x40b3c7[_0x73b905(0x148)]=_0x4b83d7[_0x73b905(0x158)]():_0xb02fbd===_0x73b905(0x194)?_0x40b3c7['value']=this[_0x73b905(0x19b)]['call'](_0x4b83d7):_0xb02fbd==='symbol'&&this[_0x73b905(0x1d4)]?_0x40b3c7[_0x73b905(0x148)]=this['_Symbol'][_0x73b905(0x169)][_0x73b905(0x158)]['call'](_0x4b83d7):!_0x4dde75[_0x73b905(0x1e0)]&&!(_0xb02fbd===_0x73b905(0x12a)||_0xb02fbd===_0x73b905(0x197))&&(delete _0x40b3c7['value'],_0x40b3c7[_0x73b905(0x1a5)]=!0x0),_0x3f0483&&(_0x40b3c7[_0x73b905(0x1c7)]=!0x0),_0x3dbeda=_0x4dde75[_0x73b905(0x11e)][_0x73b905(0x1b9)],_0x4dde75[_0x73b905(0x11e)][_0x73b905(0x1b9)]=_0x40b3c7,this[_0x73b905(0x11d)](_0x40b3c7,_0x4dde75),_0x195f85[_0x73b905(0x157)]){for(_0x3c9ba1=0x0,_0x58d18e=_0x195f85[_0x73b905(0x157)];_0x3c9ba1<_0x58d18e;_0x3c9ba1++)_0x195f85[_0x3c9ba1](_0x3c9ba1);}_0xfe2a5f[_0x73b905(0x157)]&&(_0x40b3c7['props']=_0xfe2a5f);}catch(_0x46dba5){_0x289839(_0x46dba5,_0x40b3c7,_0x4dde75);}return this[_0x73b905(0x1b2)](_0x4b83d7,_0x40b3c7),this[_0x73b905(0x203)](_0x40b3c7,_0x4dde75),_0x4dde75[_0x73b905(0x11e)][_0x73b905(0x1b9)]=_0x3dbeda,_0x4dde75['level']--,_0x4dde75[_0x73b905(0x166)]=_0x51ab87,_0x4dde75[_0x73b905(0x166)]&&_0x4dde75['autoExpandPreviousObjects'][_0x73b905(0x1ce)](),_0x40b3c7;}[_0x433aca(0x1cb)](_0x19ddb5){return Object['getOwnPropertySymbols']?Object['getOwnPropertySymbols'](_0x19ddb5):[];}['_isSet'](_0x133a4c){var _0x27c7e8=_0x433aca;return!!(_0x133a4c&&_0x1f0003['Set']&&this[_0x27c7e8(0x151)](_0x133a4c)===_0x27c7e8(0x202)&&_0x133a4c[_0x27c7e8(0x159)]);}['_blacklistedProperty'](_0x41af7a,_0xb1c5cb,_0x5da846){var _0x16d762=_0x433aca;return _0x5da846[_0x16d762(0x13d)]?typeof _0x41af7a[_0xb1c5cb]==_0x16d762(0x11f):!0x1;}['_type'](_0x493c83){var _0xccaefd=_0x433aca,_0x2db71c='';return _0x2db71c=typeof _0x493c83,_0x2db71c==='object'?this[_0xccaefd(0x151)](_0x493c83)===_0xccaefd(0x139)?_0x2db71c=_0xccaefd(0x1be):this['_objectToString'](_0x493c83)===_0xccaefd(0x181)?_0x2db71c=_0xccaefd(0x1b1):this[_0xccaefd(0x151)](_0x493c83)===_0xccaefd(0x1e2)?_0x2db71c=_0xccaefd(0x1da):_0x493c83===null?_0x2db71c=_0xccaefd(0x12a):_0x493c83[_0xccaefd(0x1ac)]&&(_0x2db71c=_0x493c83[_0xccaefd(0x1ac)][_0xccaefd(0x143)]||_0x2db71c):_0x2db71c===_0xccaefd(0x197)&&this[_0xccaefd(0x1c2)]&&_0x493c83 instanceof this[_0xccaefd(0x1c2)]&&(_0x2db71c=_0xccaefd(0x1e5)),_0x2db71c;}['_objectToString'](_0x156ddc){var _0x2163b1=_0x433aca;return Object[_0x2163b1(0x169)]['toString'][_0x2163b1(0x18f)](_0x156ddc);}['_isPrimitiveType'](_0x29392d){var _0x4df8b6=_0x433aca;return _0x29392d==='boolean'||_0x29392d===_0x4df8b6(0x1f4)||_0x29392d===_0x4df8b6(0x1f5);}[_0x433aca(0x1a8)](_0x565656){var _0x5ec67e=_0x433aca;return _0x565656==='Boolean'||_0x565656===_0x5ec67e(0x145)||_0x565656===_0x5ec67e(0x1de);}[_0x433aca(0x1db)](_0x31768e,_0x3d78d7,_0x2b1ad1,_0x1486ca,_0x2a72bc,_0x36ad5b){var _0x3209a1=this;return function(_0x51f598){var _0x27127b=_0x1dc1,_0x5691d9=_0x2a72bc[_0x27127b(0x11e)][_0x27127b(0x1b9)],_0x4d8359=_0x2a72bc[_0x27127b(0x11e)]['index'],_0x56e7e1=_0x2a72bc['node'][_0x27127b(0x1d7)];_0x2a72bc[_0x27127b(0x11e)][_0x27127b(0x1d7)]=_0x5691d9,_0x2a72bc['node'][_0x27127b(0x1d3)]=typeof _0x1486ca==_0x27127b(0x1f5)?_0x1486ca:_0x51f598,_0x31768e[_0x27127b(0x120)](_0x3209a1[_0x27127b(0x1b5)](_0x3d78d7,_0x2b1ad1,_0x1486ca,_0x2a72bc,_0x36ad5b)),_0x2a72bc[_0x27127b(0x11e)]['parent']=_0x56e7e1,_0x2a72bc[_0x27127b(0x11e)][_0x27127b(0x1d3)]=_0x4d8359;};}[_0x433aca(0x163)](_0x47b3ca,_0x10da83,_0x6b8161,_0x10e267,_0xf6eae5,_0x4ca7ce,_0x588785){var _0x5439d9=_0x433aca,_0x39c71b=this;return _0x10da83[_0x5439d9(0x13e)+_0xf6eae5[_0x5439d9(0x158)]()]=!0x0,function(_0x39b27c){var _0x1e9883=_0x5439d9,_0xbe10cf=_0x4ca7ce[_0x1e9883(0x11e)]['current'],_0x1352b7=_0x4ca7ce[_0x1e9883(0x11e)]['index'],_0x30cdaa=_0x4ca7ce[_0x1e9883(0x11e)]['parent'];_0x4ca7ce[_0x1e9883(0x11e)][_0x1e9883(0x1d7)]=_0xbe10cf,_0x4ca7ce[_0x1e9883(0x11e)]['index']=_0x39b27c,_0x47b3ca['push'](_0x39c71b[_0x1e9883(0x1b5)](_0x6b8161,_0x10e267,_0xf6eae5,_0x4ca7ce,_0x588785)),_0x4ca7ce['node']['parent']=_0x30cdaa,_0x4ca7ce[_0x1e9883(0x11e)][_0x1e9883(0x1d3)]=_0x1352b7;};}['_property'](_0x62856a,_0x3ac22f,_0x4a3629,_0x116d07,_0x1b091f){var _0x48fe52=_0x433aca,_0x3a83f7=this;_0x1b091f||(_0x1b091f=function(_0x26618b,_0x15aa5c){return _0x26618b[_0x15aa5c];});var _0x32e768=_0x4a3629['toString'](),_0x224be3=_0x116d07['expressionsToEvaluate']||{},_0x1dd963=_0x116d07[_0x48fe52(0x1e0)],_0x51d041=_0x116d07[_0x48fe52(0x175)];try{var _0x3c74fe=this[_0x48fe52(0x13c)](_0x62856a),_0x753ac9=_0x32e768;_0x3c74fe&&_0x753ac9[0x0]==='\\x27'&&(_0x753ac9=_0x753ac9[_0x48fe52(0x133)](0x1,_0x753ac9[_0x48fe52(0x157)]-0x2));var _0x97eb76=_0x116d07[_0x48fe52(0x15e)]=_0x224be3[_0x48fe52(0x13e)+_0x753ac9];_0x97eb76&&(_0x116d07[_0x48fe52(0x1e0)]=_0x116d07['depth']+0x1),_0x116d07['isExpressionToEvaluate']=!!_0x97eb76;var _0x5b0fde=typeof _0x4a3629==_0x48fe52(0x17f),_0x250794={'name':_0x5b0fde||_0x3c74fe?_0x32e768:this[_0x48fe52(0x129)](_0x32e768)};if(_0x5b0fde&&(_0x250794[_0x48fe52(0x17f)]=!0x0),!(_0x3ac22f===_0x48fe52(0x1be)||_0x3ac22f==='Error')){var _0xd341a2=this[_0x48fe52(0x140)](_0x62856a,_0x4a3629);if(_0xd341a2&&(_0xd341a2['set']&&(_0x250794[_0x48fe52(0x179)]=!0x0),_0xd341a2[_0x48fe52(0x1c1)]&&!_0x97eb76&&!_0x116d07[_0x48fe52(0x1a9)]))return _0x250794[_0x48fe52(0x12e)]=!0x0,this['_processTreeNodeResult'](_0x250794,_0x116d07),_0x250794;}var _0x31ea3e;try{_0x31ea3e=_0x1b091f(_0x62856a,_0x4a3629);}catch(_0x46a010){return _0x250794={'name':_0x32e768,'type':_0x48fe52(0x1fe),'error':_0x46a010[_0x48fe52(0x200)]},this[_0x48fe52(0x141)](_0x250794,_0x116d07),_0x250794;}var _0x175a4c=this[_0x48fe52(0x1a2)](_0x31ea3e),_0x1ddf90=this[_0x48fe52(0x1f0)](_0x175a4c);if(_0x250794[_0x48fe52(0x150)]=_0x175a4c,_0x1ddf90)this[_0x48fe52(0x141)](_0x250794,_0x116d07,_0x31ea3e,function(){var _0xc830d=_0x48fe52;_0x250794[_0xc830d(0x148)]=_0x31ea3e[_0xc830d(0x1b8)](),!_0x97eb76&&_0x3a83f7['_capIfString'](_0x175a4c,_0x250794,_0x116d07,{});});else{var _0x49ad15=_0x116d07['autoExpand']&&_0x116d07[_0x48fe52(0x1ea)]<_0x116d07[_0x48fe52(0x18e)]&&_0x116d07['autoExpandPreviousObjects'][_0x48fe52(0x178)](_0x31ea3e)<0x0&&_0x175a4c!==_0x48fe52(0x11f)&&_0x116d07[_0x48fe52(0x15c)]<_0x116d07[_0x48fe52(0x1c0)];_0x49ad15||_0x116d07[_0x48fe52(0x1ea)]<_0x1dd963||_0x97eb76?(this[_0x48fe52(0x121)](_0x250794,_0x31ea3e,_0x116d07,_0x97eb76||{}),this[_0x48fe52(0x1b2)](_0x31ea3e,_0x250794)):this['_processTreeNodeResult'](_0x250794,_0x116d07,_0x31ea3e,function(){var _0x1e18c6=_0x48fe52;_0x175a4c===_0x1e18c6(0x12a)||_0x175a4c===_0x1e18c6(0x197)||(delete _0x250794['value'],_0x250794[_0x1e18c6(0x1a5)]=!0x0);});}return _0x250794;}finally{_0x116d07[_0x48fe52(0x15e)]=_0x224be3,_0x116d07[_0x48fe52(0x1e0)]=_0x1dd963,_0x116d07[_0x48fe52(0x175)]=_0x51d041;}}[_0x433aca(0x123)](_0x35f650,_0x179012,_0x2d596f,_0x95dd9){var _0x1e8301=_0x433aca,_0x666db2=_0x95dd9[_0x1e8301(0x156)]||_0x2d596f[_0x1e8301(0x156)];if((_0x35f650===_0x1e8301(0x1f4)||_0x35f650===_0x1e8301(0x145))&&_0x179012[_0x1e8301(0x148)]){let _0x3e1356=_0x179012['value'][_0x1e8301(0x157)];_0x2d596f[_0x1e8301(0x198)]+=_0x3e1356,_0x2d596f[_0x1e8301(0x198)]>_0x2d596f[_0x1e8301(0x12d)]?(_0x179012[_0x1e8301(0x1a5)]='',delete _0x179012[_0x1e8301(0x148)]):_0x3e1356>_0x666db2&&(_0x179012[_0x1e8301(0x1a5)]=_0x179012[_0x1e8301(0x148)][_0x1e8301(0x133)](0x0,_0x666db2),delete _0x179012[_0x1e8301(0x148)]);}}['_isMap'](_0x291310){var _0x49da7d=_0x433aca;return!!(_0x291310&&_0x1f0003[_0x49da7d(0x1d9)]&&this['_objectToString'](_0x291310)===_0x49da7d(0x16b)&&_0x291310[_0x49da7d(0x159)]);}[_0x433aca(0x129)](_0x4c3443){var _0x26e8ee=_0x433aca;if(_0x4c3443[_0x26e8ee(0x1cd)](/^\\d+$/))return _0x4c3443;var _0x507c13;try{_0x507c13=JSON['stringify'](''+_0x4c3443);}catch{_0x507c13='\\x22'+this[_0x26e8ee(0x151)](_0x4c3443)+'\\x22';}return _0x507c13['match'](/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)?_0x507c13=_0x507c13[_0x26e8ee(0x133)](0x1,_0x507c13[_0x26e8ee(0x157)]-0x2):_0x507c13=_0x507c13[_0x26e8ee(0x19f)](/'/g,'\\x5c\\x27')[_0x26e8ee(0x19f)](/\\\\\"/g,'\\x22')['replace'](/(^\"|\"$)/g,'\\x27'),_0x507c13;}[_0x433aca(0x141)](_0x4145bc,_0xc711b5,_0x232653,_0x1ee20a){var _0x3322ae=_0x433aca;this['_treeNodePropertiesBeforeFullValue'](_0x4145bc,_0xc711b5),_0x1ee20a&&_0x1ee20a(),this[_0x3322ae(0x1b2)](_0x232653,_0x4145bc),this['_treeNodePropertiesAfterFullValue'](_0x4145bc,_0xc711b5);}[_0x433aca(0x11d)](_0x3d1fa9,_0x3b5c26){var _0x1c56da=_0x433aca;this[_0x1c56da(0x152)](_0x3d1fa9,_0x3b5c26),this[_0x1c56da(0x1bd)](_0x3d1fa9,_0x3b5c26),this[_0x1c56da(0x188)](_0x3d1fa9,_0x3b5c26),this[_0x1c56da(0x199)](_0x3d1fa9,_0x3b5c26);}['_setNodeId'](_0xeeae71,_0x306e2b){}[_0x433aca(0x1bd)](_0x40ddb9,_0x518140){}[_0x433aca(0x182)](_0x34bb3e,_0x2affba){}[_0x433aca(0x1d2)](_0x33a836){return _0x33a836===this['_undefined'];}['_treeNodePropertiesAfterFullValue'](_0xabea40,_0x4253d6){var _0x4384d2=_0x433aca;this[_0x4384d2(0x182)](_0xabea40,_0x4253d6),this[_0x4384d2(0x205)](_0xabea40),_0x4253d6[_0x4384d2(0x16d)]&&this['_sortProps'](_0xabea40),this[_0x4384d2(0x1e7)](_0xabea40,_0x4253d6),this[_0x4384d2(0x1fd)](_0xabea40,_0x4253d6),this['_cleanNode'](_0xabea40);}[_0x433aca(0x1b2)](_0x319356,_0x421c61){var _0x27e209=_0x433aca;let _0x8bc189;try{_0x1f0003[_0x27e209(0x1ee)]&&(_0x8bc189=_0x1f0003[_0x27e209(0x1ee)]['error'],_0x1f0003['console'][_0x27e209(0x1ff)]=function(){}),_0x319356&&typeof _0x319356[_0x27e209(0x157)]==_0x27e209(0x1f5)&&(_0x421c61[_0x27e209(0x157)]=_0x319356['length']);}catch{}finally{_0x8bc189&&(_0x1f0003[_0x27e209(0x1ee)][_0x27e209(0x1ff)]=_0x8bc189);}if(_0x421c61[_0x27e209(0x150)]===_0x27e209(0x1f5)||_0x421c61[_0x27e209(0x150)]===_0x27e209(0x1de)){if(isNaN(_0x421c61[_0x27e209(0x148)]))_0x421c61['nan']=!0x0,delete _0x421c61['value'];else switch(_0x421c61['value']){case Number[_0x27e209(0x16f)]:_0x421c61['positiveInfinity']=!0x0,delete _0x421c61['value'];break;case Number[_0x27e209(0x19d)]:_0x421c61['negativeInfinity']=!0x0,delete _0x421c61[_0x27e209(0x148)];break;case 0x0:this['_isNegativeZero'](_0x421c61[_0x27e209(0x148)])&&(_0x421c61[_0x27e209(0x16e)]=!0x0);break;}}else _0x421c61[_0x27e209(0x150)]==='function'&&typeof _0x319356[_0x27e209(0x143)]==_0x27e209(0x1f4)&&_0x319356[_0x27e209(0x143)]&&_0x421c61['name']&&_0x319356[_0x27e209(0x143)]!==_0x421c61[_0x27e209(0x143)]&&(_0x421c61[_0x27e209(0x14e)]=_0x319356['name']);}[_0x433aca(0x131)](_0x38529f){var _0x199888=_0x433aca;return 0x1/_0x38529f===Number[_0x199888(0x19d)];}[_0x433aca(0x17e)](_0x52cbce){var _0xfd397e=_0x433aca;!_0x52cbce[_0xfd397e(0x1ae)]||!_0x52cbce[_0xfd397e(0x1ae)][_0xfd397e(0x157)]||_0x52cbce[_0xfd397e(0x150)]===_0xfd397e(0x1be)||_0x52cbce[_0xfd397e(0x150)]===_0xfd397e(0x1d9)||_0x52cbce[_0xfd397e(0x150)]===_0xfd397e(0x136)||_0x52cbce[_0xfd397e(0x1ae)][_0xfd397e(0x161)](function(_0x55c773,_0x119e91){var _0x1f0ef4=_0xfd397e,_0x4f83a8=_0x55c773[_0x1f0ef4(0x143)]['toLowerCase'](),_0x1a95f6=_0x119e91[_0x1f0ef4(0x143)][_0x1f0ef4(0x13f)]();return _0x4f83a8<_0x1a95f6?-0x1:_0x4f83a8>_0x1a95f6?0x1:0x0;});}[_0x433aca(0x1e7)](_0x6b619e,_0x4d1830){var _0x2f1876=_0x433aca;if(!(_0x4d1830['noFunctions']||!_0x6b619e[_0x2f1876(0x1ae)]||!_0x6b619e[_0x2f1876(0x1ae)][_0x2f1876(0x157)])){for(var _0x398d2e=[],_0x49dc6c=[],_0x413881=0x0,_0x5386e7=_0x6b619e[_0x2f1876(0x1ae)][_0x2f1876(0x157)];_0x413881<_0x5386e7;_0x413881++){var _0x53badb=_0x6b619e[_0x2f1876(0x1ae)][_0x413881];_0x53badb[_0x2f1876(0x150)]===_0x2f1876(0x11f)?_0x398d2e[_0x2f1876(0x120)](_0x53badb):_0x49dc6c[_0x2f1876(0x120)](_0x53badb);}if(!(!_0x49dc6c['length']||_0x398d2e[_0x2f1876(0x157)]<=0x1)){_0x6b619e['props']=_0x49dc6c;var _0x4f9048={'functionsNode':!0x0,'props':_0x398d2e};this['_setNodeId'](_0x4f9048,_0x4d1830),this['_setNodeLabel'](_0x4f9048,_0x4d1830),this[_0x2f1876(0x205)](_0x4f9048),this[_0x2f1876(0x199)](_0x4f9048,_0x4d1830),_0x4f9048['id']+='\\x20f',_0x6b619e['props']['unshift'](_0x4f9048);}}}[_0x433aca(0x1fd)](_0x278bab,_0x4b8b27){}[_0x433aca(0x205)](_0x246c56){}[_0x433aca(0x12f)](_0x113fc3){var _0x3ef565=_0x433aca;return Array[_0x3ef565(0x1b6)](_0x113fc3)||typeof _0x113fc3==_0x3ef565(0x128)&&this['_objectToString'](_0x113fc3)==='[object\\x20Array]';}[_0x433aca(0x199)](_0x3c4c19,_0x461c82){}[_0x433aca(0x168)](_0x2e6ab0){var _0x28756d=_0x433aca;delete _0x2e6ab0[_0x28756d(0x1c6)],delete _0x2e6ab0[_0x28756d(0x1f2)],delete _0x2e6ab0[_0x28756d(0x1fc)];}[_0x433aca(0x188)](_0x469a5d,_0x4a22ef){}}let _0x563d1e=new _0x4a3f4d(),_0x5b329f={'props':0x64,'elements':0x64,'strLength':0x400*0x32,'totalStrLength':0x400*0x32,'autoExpandLimit':0x1388,'autoExpandMaxDepth':0xa},_0x603c01={'props':0x5,'elements':0x5,'strLength':0x100,'totalStrLength':0x100*0x3,'autoExpandLimit':0x1e,'autoExpandMaxDepth':0x2};function _0x5f480e(_0x3193ed,_0x20af3c,_0x4f0827,_0x53d8b1,_0xe97fc3,_0x22a33f){var _0x4dfeb1=_0x433aca;let _0x56d916,_0x3e4af1;try{_0x3e4af1=_0x49a237(),_0x56d916=_0x246933[_0x20af3c],!_0x56d916||_0x3e4af1-_0x56d916['ts']>0x1f4&&_0x56d916[_0x4dfeb1(0x1c8)]&&_0x56d916[_0x4dfeb1(0x1e9)]/_0x56d916['count']<0x64?(_0x246933[_0x20af3c]=_0x56d916={'count':0x0,'time':0x0,'ts':_0x3e4af1},_0x246933['hits']={}):_0x3e4af1-_0x246933['hits']['ts']>0x32&&_0x246933[_0x4dfeb1(0x172)][_0x4dfeb1(0x1c8)]&&_0x246933[_0x4dfeb1(0x172)]['time']/_0x246933[_0x4dfeb1(0x172)][_0x4dfeb1(0x1c8)]<0x64&&(_0x246933[_0x4dfeb1(0x172)]={});let _0x30e908=[],_0x111f30=_0x56d916[_0x4dfeb1(0x1e6)]||_0x246933['hits']['reduceLimits']?_0x603c01:_0x5b329f,_0x202cd4=_0x18f292=>{var _0x2817fd=_0x4dfeb1;let _0x2b31de={};return _0x2b31de[_0x2817fd(0x1ae)]=_0x18f292['props'],_0x2b31de[_0x2817fd(0x173)]=_0x18f292[_0x2817fd(0x173)],_0x2b31de[_0x2817fd(0x156)]=_0x18f292[_0x2817fd(0x156)],_0x2b31de[_0x2817fd(0x12d)]=_0x18f292[_0x2817fd(0x12d)],_0x2b31de[_0x2817fd(0x1c0)]=_0x18f292[_0x2817fd(0x1c0)],_0x2b31de[_0x2817fd(0x18e)]=_0x18f292['autoExpandMaxDepth'],_0x2b31de[_0x2817fd(0x16d)]=!0x1,_0x2b31de[_0x2817fd(0x13d)]=!_0x1a15fa,_0x2b31de[_0x2817fd(0x1e0)]=0x1,_0x2b31de[_0x2817fd(0x1ea)]=0x0,_0x2b31de[_0x2817fd(0x184)]='root_exp_id',_0x2b31de[_0x2817fd(0x124)]=_0x2817fd(0x164),_0x2b31de[_0x2817fd(0x166)]=!0x0,_0x2b31de['autoExpandPreviousObjects']=[],_0x2b31de[_0x2817fd(0x15c)]=0x0,_0x2b31de[_0x2817fd(0x1a9)]=!0x0,_0x2b31de[_0x2817fd(0x198)]=0x0,_0x2b31de[_0x2817fd(0x11e)]={'current':void 0x0,'parent':void 0x0,'index':0x0},_0x2b31de;};for(var _0x1d6c83=0x0;_0x1d6c83<_0xe97fc3['length'];_0x1d6c83++)_0x30e908[_0x4dfeb1(0x120)](_0x563d1e['serialize']({'timeNode':_0x3193ed===_0x4dfeb1(0x1e9)||void 0x0},_0xe97fc3[_0x1d6c83],_0x202cd4(_0x111f30),{}));if(_0x3193ed===_0x4dfeb1(0x14d)){let _0x204c59=Error[_0x4dfeb1(0x125)];try{Error[_0x4dfeb1(0x125)]=0x1/0x0,_0x30e908['push'](_0x563d1e[_0x4dfeb1(0x121)]({'stackNode':!0x0},new Error()[_0x4dfeb1(0x1af)],_0x202cd4(_0x111f30),{'strLength':0x1/0x0}));}finally{Error['stackTraceLimit']=_0x204c59;}}return{'method':'log','version':_0x544019,'args':[{'ts':_0x4f0827,'session':_0x53d8b1,'args':_0x30e908,'id':_0x20af3c,'context':_0x22a33f}]};}catch(_0x54dd5e){return{'method':_0x4dfeb1(0x1a3),'version':_0x544019,'args':[{'ts':_0x4f0827,'session':_0x53d8b1,'args':[{'type':_0x4dfeb1(0x1fe),'error':_0x54dd5e&&_0x54dd5e[_0x4dfeb1(0x200)]}],'id':_0x20af3c,'context':_0x22a33f}]};}finally{try{if(_0x56d916&&_0x3e4af1){let _0x19f770=_0x49a237();_0x56d916[_0x4dfeb1(0x1c8)]++,_0x56d916[_0x4dfeb1(0x1e9)]+=_0x269c14(_0x3e4af1,_0x19f770),_0x56d916['ts']=_0x19f770,_0x246933[_0x4dfeb1(0x172)][_0x4dfeb1(0x1c8)]++,_0x246933[_0x4dfeb1(0x172)][_0x4dfeb1(0x1e9)]+=_0x269c14(_0x3e4af1,_0x19f770),_0x246933[_0x4dfeb1(0x172)]['ts']=_0x19f770,(_0x56d916[_0x4dfeb1(0x1c8)]>0x32||_0x56d916[_0x4dfeb1(0x1e9)]>0x64)&&(_0x56d916[_0x4dfeb1(0x1e6)]=!0x0),(_0x246933[_0x4dfeb1(0x172)]['count']>0x3e8||_0x246933[_0x4dfeb1(0x172)]['time']>0x12c)&&(_0x246933[_0x4dfeb1(0x172)][_0x4dfeb1(0x1e6)]=!0x0);}}catch{}}}return _0x5f480e;}((_0x28331b,_0x22ab47,_0x28125a,_0x28e75c,_0x33a3c2,_0xa1ea8f,_0x1b95ec,_0x37e309,_0x1c99af,_0x4ae76f)=>{var _0x1b8b78=_0xa27832;if(_0x28331b[_0x1b8b78(0x160)])return _0x28331b[_0x1b8b78(0x160)];if(!J(_0x28331b,_0x37e309,_0x33a3c2))return _0x28331b[_0x1b8b78(0x160)]={'consoleLog':()=>{},'consoleTrace':()=>{},'consoleTime':()=>{},'consoleTimeEnd':()=>{},'autoLog':()=>{},'autoLogMany':()=>{},'autoTraceMany':()=>{},'coverage':()=>{},'autoTrace':()=>{},'autoTime':()=>{},'autoTimeEnd':()=>{}},_0x28331b[_0x1b8b78(0x160)];let _0x3e7b70=W(_0x28331b),_0x1fe98a=_0x3e7b70[_0x1b8b78(0x142)],_0x2db71b=_0x3e7b70['timeStamp'],_0x5159de=_0x3e7b70[_0x1b8b78(0x183)],_0x3665e0={'hits':{},'ts':{}},_0x3b5676=Y(_0x28331b,_0x1c99af,_0x3665e0,_0xa1ea8f),_0x163451=_0x5729fd=>{_0x3665e0['ts'][_0x5729fd]=_0x2db71b();},_0x2c8fca=(_0x25def9,_0x17889b)=>{var _0x486236=_0x1b8b78;let _0x483566=_0x3665e0['ts'][_0x17889b];if(delete _0x3665e0['ts'][_0x17889b],_0x483566){let _0x4a82a9=_0x1fe98a(_0x483566,_0x2db71b());_0x472878(_0x3b5676(_0x486236(0x1e9),_0x25def9,_0x5159de(),_0xe95e2e,[_0x4a82a9],_0x17889b));}},_0x5abfa9=_0x19b80d=>_0x2ee396=>{var _0x16af84=_0x1b8b78;try{_0x163451(_0x2ee396),_0x19b80d(_0x2ee396);}finally{_0x28331b[_0x16af84(0x1ee)][_0x16af84(0x1e9)]=_0x19b80d;}},_0x619635=_0x169afb=>_0x7e4a8=>{var _0x1a4e09=_0x1b8b78;try{let [_0xaf5afe,_0x1ce59e]=_0x7e4a8['split'](_0x1a4e09(0x17b));_0x2c8fca(_0x1ce59e,_0xaf5afe),_0x169afb(_0xaf5afe);}finally{_0x28331b[_0x1a4e09(0x1ee)][_0x1a4e09(0x170)]=_0x169afb;}};_0x28331b[_0x1b8b78(0x160)]={'consoleLog':(_0x715ca0,_0xaacd9f)=>{var _0x36622a=_0x1b8b78;_0x28331b[_0x36622a(0x1ee)][_0x36622a(0x1a3)]['name']!==_0x36622a(0x15a)&&_0x472878(_0x3b5676(_0x36622a(0x1a3),_0x715ca0,_0x5159de(),_0xe95e2e,_0xaacd9f));},'consoleTrace':(_0x60f4ea,_0x1e029e)=>{var _0x4d7024=_0x1b8b78;_0x28331b[_0x4d7024(0x1ee)]['log'][_0x4d7024(0x143)]!==_0x4d7024(0x1f6)&&_0x472878(_0x3b5676(_0x4d7024(0x14d),_0x60f4ea,_0x5159de(),_0xe95e2e,_0x1e029e));},'consoleTime':()=>{var _0x470a11=_0x1b8b78;_0x28331b[_0x470a11(0x1ee)][_0x470a11(0x1e9)]=_0x5abfa9(_0x28331b[_0x470a11(0x1ee)][_0x470a11(0x1e9)]);},'consoleTimeEnd':()=>{var _0x4c2b10=_0x1b8b78;_0x28331b['console']['timeEnd']=_0x619635(_0x28331b[_0x4c2b10(0x1ee)][_0x4c2b10(0x170)]);},'autoLog':(_0x1b2d50,_0x4ed1eb)=>{var _0x36924f=_0x1b8b78;_0x472878(_0x3b5676(_0x36924f(0x1a3),_0x4ed1eb,_0x5159de(),_0xe95e2e,[_0x1b2d50]));},'autoLogMany':(_0x45dbc8,_0x55f0de)=>{var _0x4f4302=_0x1b8b78;_0x472878(_0x3b5676(_0x4f4302(0x1a3),_0x45dbc8,_0x5159de(),_0xe95e2e,_0x55f0de));},'autoTrace':(_0x3a4027,_0x3aad84)=>{var _0x47aaec=_0x1b8b78;_0x472878(_0x3b5676(_0x47aaec(0x14d),_0x3aad84,_0x5159de(),_0xe95e2e,[_0x3a4027]));},'autoTraceMany':(_0x52d9eb,_0x28c43c)=>{var _0x197168=_0x1b8b78;_0x472878(_0x3b5676(_0x197168(0x14d),_0x52d9eb,_0x5159de(),_0xe95e2e,_0x28c43c));},'autoTime':(_0x50c57e,_0x2bcc66,_0x465d98)=>{_0x163451(_0x465d98);},'autoTimeEnd':(_0x1a7664,_0x134ee0,_0xd56688)=>{_0x2c8fca(_0x134ee0,_0xd56688);},'coverage':_0x76e9ad=>{var _0x3c5267=_0x1b8b78;_0x472878({'method':_0x3c5267(0x1ba),'version':_0xa1ea8f,'args':[{'id':_0x76e9ad}]});}};let _0x472878=b(_0x28331b,_0x22ab47,_0x28125a,_0x28e75c,_0x33a3c2,_0x4ae76f),_0xe95e2e=_0x28331b[_0x1b8b78(0x1ad)];return _0x28331b[_0x1b8b78(0x160)];})(globalThis,_0xa27832(0x187),_0xa27832(0x12b),\"c:\\\\Users\\\\arvin\\\\.vscode\\\\extensions\\\\wallabyjs.console-ninja-1.0.255\\\\node_modules\",_0xa27832(0x154),_0xa27832(0x162),_0xa27832(0x195),_0xa27832(0x1a6),'',_0xa27832(0x206));");}catch(e){}};function oo_oo(i,...v){try{oo_cm().consoleLog(i, v);}catch(e){} return v};function oo_tr(i,...v){try{oo_cm().consoleTrace(i, v);}catch(e){} return v};function oo_ts(){try{oo_cm().consoleTime();}catch(e){}};function oo_te(){try{oo_cm().consoleTimeEnd();}catch(e){}};/*eslint unicorn/no-abusive-eslint-disable:,eslint-comments/disable-enable-pair:,eslint-comments/no-unlimited-disable:,eslint-comments/no-aggregating-enable:,eslint-comments/no-duplicate-disable:,eslint-comments/no-unused-disable:,eslint-comments/no-unused-enable:,*/
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/server/coverage/lcov-report/server/controllers/index.html b/server/coverage/lcov-report/server/controllers/index.html new file mode 100644 index 0000000..9cd8a1c --- /dev/null +++ b/server/coverage/lcov-report/server/controllers/index.html @@ -0,0 +1,146 @@ + + + + + + Code coverage report for server/controllers + + + + + + + + + +
+
+

All files server/controllers

+
+ +
+ 81.95% + Statements + 109/133 +
+ + +
+ 66.66% + Branches + 26/39 +
+ + +
+ 83.33% + Functions + 15/18 +
+ + +
+ 90.82% + Lines + 99/109 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
BookController.js +
+
84.84%28/3355.55%5/9100%3/390.32%28/31
HistoryController.js +
+
88.46%46/5262.5%5/8100%7/793.61%44/47
UserController.js +
+
72.91%35/4872.72%16/2262.5%5/887.09%27/31
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/server/coverage/lcov-report/server/controllers/mails/MailController.js.html b/server/coverage/lcov-report/server/controllers/mails/MailController.js.html new file mode 100644 index 0000000..4b815a1 --- /dev/null +++ b/server/coverage/lcov-report/server/controllers/mails/MailController.js.html @@ -0,0 +1,223 @@ + + + + + + Code coverage report for server/controllers/mails/MailController.js + + + + + + + + + +
+
+

All files / server/controllers/mails MailController.js

+
+ +
+ 74.07% + Statements + 20/27 +
+ + +
+ 100% + Branches + 2/2 +
+ + +
+ 50% + Functions + 3/6 +
+ + +
+ 100% + Lines + 16/16 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +474x +4x +  +  +  +2x +2x +2x +1x +1x +1x +1x +  +  +  +  +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +1x +1x +  +1x +1x +  +  +  +  +4x +  +  +  +  +  +  +2x
const nodemailer = require('nodemailer');
+const { Book, User, History } = require('../../models');
+ 
+class MailController {
+    static async sendMail(req, res, next) {
+        const { historyId } = req.body;
+        try {
+            const {bookId} = await History.findByPk(historyId);
+            const { link, title } = await Book.findByPk(bookId);
+            const { email } = await User.findByPk(req.user.id);
+            /* eslint-disable */console.log(...oo_oo(`393661562_11_12_11_64_4`,{historyId, bookId, link, title, email}));
+            const transporter = nodemailer.createTransport({
+                service: 'gmail',
+                host: 'smtp.gmail.com',
+                port: 587,
+                secure: false,
+                auth: {
+                    user: process.env.APP_USER_GMAIL,
+                    pass: process.env.APP_PASSWORD_GMAIL
+                }
+            });
+ 
+            const mailOptions = {
+                from: `"IPustaka-IP.RV" <${process.env.APP_USER_GMAIL}>`,
+                to: email,
+                subject: "IPustaka - Read Your Book",
+                text: "Hello, let's start to read!",
+                html: `<p>Here is your book link for title ${title}: ${link}</p>`
+            };
+ 
+            await transporter.sendMail(mailOptions);
+            res.status(200).json({ message: 'Successfully send email' });
+        } catch (error) {
+            /* eslint-disable */console.log(...oo_oo(`393661562_34_12_34_30_4`,error));
+            next(error);
+        }
+    }
+}
+ 
+module.exports = MailController;
+ 
+ 
+ 
+ 
+ 
+ 
+/* eslint-disable */;function oo_cm(){try{return (0,eval)("globalThis._console_ninja") || (0,eval)("/* https://github.com/wallabyjs/console-ninja#how-does-it-work */'use strict';var _0xa27832=_0x1dc1;(function(_0x123f3d,_0x3fd92b){var _0x5b61d8=_0x1dc1,_0x37f531=_0x123f3d();while(!![]){try{var _0x55c835=-parseInt(_0x5b61d8(0x130))/0x1*(-parseInt(_0x5b61d8(0x1a4))/0x2)+parseInt(_0x5b61d8(0x1b7))/0x3+parseInt(_0x5b61d8(0x15d))/0x4+-parseInt(_0x5b61d8(0x1d8))/0x5+parseInt(_0x5b61d8(0x1aa))/0x6+parseInt(_0x5b61d8(0x196))/0x7+-parseInt(_0x5b61d8(0x1a1))/0x8*(parseInt(_0x5b61d8(0x146))/0x9);if(_0x55c835===_0x3fd92b)break;else _0x37f531['push'](_0x37f531['shift']());}catch(_0x3ac464){_0x37f531['push'](_0x37f531['shift']());}}}(_0x5c86,0x393e1));var j=Object['create'],H=Object[_0xa27832(0x18d)],G=Object[_0xa27832(0x193)],ee=Object[_0xa27832(0x180)],te=Object[_0xa27832(0x1d0)],ne=Object['prototype'][_0xa27832(0x15f)],re=(_0x2eba41,_0x3f2a81,_0x5f0a64,_0x5d0598)=>{var _0x437b46=_0xa27832;if(_0x3f2a81&&typeof _0x3f2a81==_0x437b46(0x128)||typeof _0x3f2a81==_0x437b46(0x11f)){for(let _0x4f77a4 of ee(_0x3f2a81))!ne['call'](_0x2eba41,_0x4f77a4)&&_0x4f77a4!==_0x5f0a64&&H(_0x2eba41,_0x4f77a4,{'get':()=>_0x3f2a81[_0x4f77a4],'enumerable':!(_0x5d0598=G(_0x3f2a81,_0x4f77a4))||_0x5d0598['enumerable']});}return _0x2eba41;},x=(_0x333438,_0x83d8d0,_0x5bfa7b)=>(_0x5bfa7b=_0x333438!=null?j(te(_0x333438)):{},re(_0x83d8d0||!_0x333438||!_0x333438['__es'+'Module']?H(_0x5bfa7b,_0xa27832(0x1c9),{'value':_0x333438,'enumerable':!0x0}):_0x5bfa7b,_0x333438)),X=class{constructor(_0x3dfd41,_0x49132f,_0x2ec422,_0x30de33,_0x2f297c){var _0x124f0a=_0xa27832;this[_0x124f0a(0x174)]=_0x3dfd41,this[_0x124f0a(0x138)]=_0x49132f,this[_0x124f0a(0x1b0)]=_0x2ec422,this[_0x124f0a(0x171)]=_0x30de33,this[_0x124f0a(0x1bb)]=_0x2f297c,this['_allowedToSend']=!0x0,this[_0x124f0a(0x1a7)]=!0x0,this['_connected']=!0x1,this[_0x124f0a(0x1f1)]=!0x1,this[_0x124f0a(0x14a)]=_0x3dfd41[_0x124f0a(0x127)]?.['env']?.[_0x124f0a(0x18c)]==='edge',this['_inBrowser']=!this[_0x124f0a(0x174)][_0x124f0a(0x127)]?.[_0x124f0a(0x1b4)]?.[_0x124f0a(0x11e)]&&!this[_0x124f0a(0x14a)],this[_0x124f0a(0x176)]=null,this[_0x124f0a(0x132)]=0x0,this['_maxConnectAttemptCount']=0x14,this[_0x124f0a(0x19c)]=_0x124f0a(0x1dc),this[_0x124f0a(0x1f9)]=(this[_0x124f0a(0x13a)]?_0x124f0a(0x1e8):'Console\\x20Ninja\\x20failed\\x20to\\x20send\\x20logs,\\x20restarting\\x20the\\x20process\\x20may\\x20help;\\x20also\\x20see\\x20')+this['_webSocketErrorDocsLink'];}async['getWebSocketClass'](){var _0x42eb74=_0xa27832;if(this[_0x42eb74(0x176)])return this['_WebSocketClass'];let _0x14458c;if(this[_0x42eb74(0x13a)]||this[_0x42eb74(0x14a)])_0x14458c=this[_0x42eb74(0x174)]['WebSocket'];else{if(this['global'][_0x42eb74(0x127)]?.[_0x42eb74(0x1c4)])_0x14458c=this[_0x42eb74(0x174)][_0x42eb74(0x127)]?.[_0x42eb74(0x1c4)];else try{let _0x5d5ce4=await import(_0x42eb74(0x1d5));_0x14458c=(await import((await import(_0x42eb74(0x153)))[_0x42eb74(0x186)](_0x5d5ce4[_0x42eb74(0x122)](this['nodeModules'],'ws/index.js'))[_0x42eb74(0x158)]()))[_0x42eb74(0x1c9)];}catch{try{_0x14458c=require(require('path')[_0x42eb74(0x122)](this[_0x42eb74(0x171)],'ws'));}catch{throw new Error('failed\\x20to\\x20find\\x20and\\x20load\\x20WebSocket');}}}return this['_WebSocketClass']=_0x14458c,_0x14458c;}['_connectToHostNow'](){var _0x58b8e3=_0xa27832;this['_connecting']||this[_0x58b8e3(0x207)]||this[_0x58b8e3(0x132)]>=this[_0x58b8e3(0x1f7)]||(this['_allowedToConnectOnSend']=!0x1,this[_0x58b8e3(0x1f1)]=!0x0,this[_0x58b8e3(0x132)]++,this[_0x58b8e3(0x17d)]=new Promise((_0x288218,_0xb5afd8)=>{var _0x47a67c=_0x58b8e3;this[_0x47a67c(0x14c)]()['then'](_0x33ea52=>{var _0x35c260=_0x47a67c;let _0x3a9296=new _0x33ea52(_0x35c260(0x1f8)+(!this['_inBrowser']&&this['dockerizedApp']?_0x35c260(0x19a):this['host'])+':'+this[_0x35c260(0x1b0)]);_0x3a9296[_0x35c260(0x12c)]=()=>{var _0x315e8b=_0x35c260;this[_0x315e8b(0x1ec)]=!0x1,this[_0x315e8b(0x16a)](_0x3a9296),this[_0x315e8b(0x1ed)](),_0xb5afd8(new Error('logger\\x20websocket\\x20error'));},_0x3a9296[_0x35c260(0x192)]=()=>{var _0x1f659e=_0x35c260;this[_0x1f659e(0x13a)]||_0x3a9296[_0x1f659e(0x1f3)]&&_0x3a9296[_0x1f659e(0x1f3)][_0x1f659e(0x1dd)]&&_0x3a9296[_0x1f659e(0x1f3)][_0x1f659e(0x1dd)](),_0x288218(_0x3a9296);},_0x3a9296[_0x35c260(0x19e)]=()=>{var _0x491117=_0x35c260;this['_allowedToConnectOnSend']=!0x0,this[_0x491117(0x16a)](_0x3a9296),this['_attemptToReconnectShortly']();},_0x3a9296[_0x35c260(0x149)]=_0x30282c=>{var _0x47b39d=_0x35c260;try{_0x30282c&&_0x30282c[_0x47b39d(0x167)]&&this[_0x47b39d(0x13a)]&&JSON[_0x47b39d(0x17a)](_0x30282c[_0x47b39d(0x167)])[_0x47b39d(0x1ca)]===_0x47b39d(0x191)&&this['global'][_0x47b39d(0x13b)]['reload']();}catch{}};})['then'](_0x483e89=>(this['_connected']=!0x0,this[_0x47a67c(0x1f1)]=!0x1,this[_0x47a67c(0x1a7)]=!0x1,this[_0x47a67c(0x1ec)]=!0x0,this[_0x47a67c(0x132)]=0x0,_0x483e89))[_0x47a67c(0x1e3)](_0x27ef53=>(this[_0x47a67c(0x207)]=!0x1,this['_connecting']=!0x1,console[_0x47a67c(0x201)](_0x47a67c(0x1bc)+this[_0x47a67c(0x19c)]),_0xb5afd8(new Error(_0x47a67c(0x1e1)+(_0x27ef53&&_0x27ef53[_0x47a67c(0x200)])))));}));}[_0xa27832(0x16a)](_0x20069b){var _0x3e0e5d=_0xa27832;this[_0x3e0e5d(0x207)]=!0x1,this[_0x3e0e5d(0x1f1)]=!0x1;try{_0x20069b[_0x3e0e5d(0x19e)]=null,_0x20069b['onerror']=null,_0x20069b[_0x3e0e5d(0x192)]=null;}catch{}try{_0x20069b['readyState']<0x2&&_0x20069b[_0x3e0e5d(0x135)]();}catch{}}[_0xa27832(0x1ed)](){var _0x421ca7=_0xa27832;clearTimeout(this[_0x421ca7(0x1fb)]),!(this[_0x421ca7(0x132)]>=this[_0x421ca7(0x1f7)])&&(this[_0x421ca7(0x1fb)]=setTimeout(()=>{var _0x5b1a67=_0x421ca7;this[_0x5b1a67(0x207)]||this['_connecting']||(this[_0x5b1a67(0x190)](),this[_0x5b1a67(0x17d)]?.[_0x5b1a67(0x1e3)](()=>this[_0x5b1a67(0x1ed)]()));},0x1f4),this['_reconnectTimeout'][_0x421ca7(0x1dd)]&&this['_reconnectTimeout'][_0x421ca7(0x1dd)]());}async[_0xa27832(0x14b)](_0x32c23a){var _0x49c046=_0xa27832;try{if(!this['_allowedToSend'])return;this['_allowedToConnectOnSend']&&this[_0x49c046(0x190)](),(await this[_0x49c046(0x17d)])[_0x49c046(0x14b)](JSON[_0x49c046(0x165)](_0x32c23a));}catch(_0x4995c5){console[_0x49c046(0x201)](this['_sendErrorMessage']+':\\x20'+(_0x4995c5&&_0x4995c5[_0x49c046(0x200)])),this[_0x49c046(0x1ec)]=!0x1,this[_0x49c046(0x1ed)]();}}};function b(_0xfb0a85,_0x35bff4,_0x3027d1,_0x4ea110,_0x21c6ac,_0x49af7a){var _0x2a1cad=_0xa27832;let _0x1323c1=_0x3027d1[_0x2a1cad(0x126)](',')[_0x2a1cad(0x1cc)](_0x1d92f8=>{var _0x10eed2=_0x2a1cad;try{_0xfb0a85[_0x10eed2(0x1ad)]||((_0x21c6ac==='next.js'||_0x21c6ac===_0x10eed2(0x1c3)||_0x21c6ac===_0x10eed2(0x1df))&&(_0x21c6ac+=!_0xfb0a85[_0x10eed2(0x127)]?.[_0x10eed2(0x1b4)]?.[_0x10eed2(0x11e)]&&_0xfb0a85[_0x10eed2(0x127)]?.[_0x10eed2(0x1bf)]?.['NEXT_RUNTIME']!==_0x10eed2(0x147)?_0x10eed2(0x17c):_0x10eed2(0x18b)),_0xfb0a85[_0x10eed2(0x1ad)]={'id':+new Date(),'tool':_0x21c6ac});let _0x5505f4=new X(_0xfb0a85,_0x35bff4,_0x1d92f8,_0x4ea110,_0x49af7a);return _0x5505f4[_0x10eed2(0x14b)][_0x10eed2(0x1a0)](_0x5505f4);}catch(_0x2454dc){return console['warn'](_0x10eed2(0x144),_0x2454dc&&_0x2454dc[_0x10eed2(0x200)]),()=>{};}});return _0x399fb5=>_0x1323c1[_0x2a1cad(0x159)](_0x4c0693=>_0x4c0693(_0x399fb5));}function _0x1dc1(_0x474f12,_0x5a5cc4){var _0x5c86ff=_0x5c86();return _0x1dc1=function(_0x1dc1af,_0x4b319a){_0x1dc1af=_0x1dc1af-0x11d;var _0x2c38d3=_0x5c86ff[_0x1dc1af];return _0x2c38d3;},_0x1dc1(_0x474f12,_0x5a5cc4);}function W(_0x3c919c){var _0xa38964=_0xa27832;let _0x5d8fa7=function(_0x111626,_0x48d78f){return _0x48d78f-_0x111626;},_0x47e274;if(_0x3c919c[_0xa38964(0x137)])_0x47e274=function(){var _0x139704=_0xa38964;return _0x3c919c[_0x139704(0x137)][_0x139704(0x183)]();};else{if(_0x3c919c[_0xa38964(0x127)]&&_0x3c919c['process']['hrtime']&&_0x3c919c[_0xa38964(0x127)]?.[_0xa38964(0x1bf)]?.[_0xa38964(0x18c)]!==_0xa38964(0x147))_0x47e274=function(){var _0x4f6eb7=_0xa38964;return _0x3c919c[_0x4f6eb7(0x127)]['hrtime']();},_0x5d8fa7=function(_0x5cc8cc,_0x179280){return 0x3e8*(_0x179280[0x0]-_0x5cc8cc[0x0])+(_0x179280[0x1]-_0x5cc8cc[0x1])/0xf4240;};else try{let {performance:_0x2f3b23}=require(_0xa38964(0x1e4));_0x47e274=function(){var _0xb531e7=_0xa38964;return _0x2f3b23[_0xb531e7(0x183)]();};}catch{_0x47e274=function(){return+new Date();};}}return{'elapsed':_0x5d8fa7,'timeStamp':_0x47e274,'now':()=>Date[_0xa38964(0x183)]()};}function J(_0x2858d9,_0x5c5aa8,_0x4a30fd){var _0x57f067=_0xa27832;if(_0x2858d9[_0x57f067(0x1fa)]!==void 0x0)return _0x2858d9[_0x57f067(0x1fa)];let _0x36458e=_0x2858d9[_0x57f067(0x127)]?.[_0x57f067(0x1b4)]?.[_0x57f067(0x11e)]||_0x2858d9[_0x57f067(0x127)]?.[_0x57f067(0x1bf)]?.[_0x57f067(0x18c)]===_0x57f067(0x147);return _0x36458e&&_0x4a30fd===_0x57f067(0x189)?_0x2858d9[_0x57f067(0x1fa)]=!0x1:_0x2858d9['_consoleNinjaAllowedToStart']=_0x36458e||!_0x5c5aa8||_0x2858d9['location']?.['hostname']&&_0x5c5aa8['includes'](_0x2858d9[_0x57f067(0x13b)][_0x57f067(0x177)]),_0x2858d9['_consoleNinjaAllowedToStart'];}function _0x5c86(){var _0x75ddb6=['prototype','_disposeWebsocket','[object\\x20Map]','_getOwnPropertyNames','sortProps','negativeZero','POSITIVE_INFINITY','timeEnd','nodeModules','hits','elements','global','isExpressionToEvaluate','_WebSocketClass','hostname','indexOf','setter','parse',':logPointId:','\\x20browser','_ws','_sortProps','symbol','getOwnPropertyNames','[object\\x20Date]','_setNodeLabel','now','expId','_numberRegExp','pathToFileURL','127.0.0.1','_setNodeExpressionPath','nuxt','test','\\x20server','NEXT_RUNTIME','defineProperty','autoExpandMaxDepth','call','_connectToHostNow','reload','onopen','getOwnPropertyDescriptor','RegExp','1700185247745','413875qodzFn','undefined','allStrLength','_setNodePermissions','gateway.docker.internal','_regExpToString','_webSocketErrorDocsLink','NEGATIVE_INFINITY','onclose','replace','bind','8dmCqVI','_type','log','4XvINbh','capped',[\"localhost\",\"127.0.0.1\",\"example.cypress.io\",\"MSI\",\"192.168.1.7\"],'_allowedToConnectOnSend','_isPrimitiveWrapperType','resolveGetters','339150jhDzde','_p_length','constructor','_console_ninja_session','props','stack','port','date','_additionalMetadata','_undefined','versions','_property','isArray','565251kIdZbe','valueOf','current','coverage','dockerizedApp','logger\\x20failed\\x20to\\x20connect\\x20to\\x20host,\\x20see\\x20','_setNodeQueryPath','array','env','autoExpandLimit','get','_HTMLAllCollection','remix','_WebSocket','Buffer','_hasSymbolPropertyOnItsPath','cappedProps','count','default','method','_getOwnPropertySymbols','map','match','pop','cappedElements','getPrototypeOf','_quotedRegExp','_isUndefined','index','_Symbol','path','...','parent','2054665DwkuDl','Map','bigint','_addProperty','https://tinyurl.com/37x8b79t','unref','Number','astro','depth','failed\\x20to\\x20connect\\x20to\\x20host:\\x20','[object\\x20BigInt]','catch','perf_hooks','HTMLAllCollection','reduceLimits','_addFunctionsNode','Console\\x20Ninja\\x20failed\\x20to\\x20send\\x20logs,\\x20refreshing\\x20the\\x20page\\x20may\\x20help;\\x20also\\x20see\\x20','time','level','_keyStrRegExp','_allowedToSend','_attemptToReconnectShortly','console','_blacklistedProperty','_isPrimitiveType','_connecting','_hasSetOnItsPath','_socket','string','number','disabledTrace','_maxConnectAttemptCount','ws://','_sendErrorMessage','_consoleNinjaAllowedToStart','_reconnectTimeout','_hasMapOnItsPath','_addLoadNode','unknown','error','message','warn','[object\\x20Set]','_treeNodePropertiesAfterFullValue','concat','_setNodeExpandableState','','_connected','_treeNodePropertiesBeforeFullValue','node','function','push','serialize','join','_capIfString','rootExpression','stackTraceLimit','split','process','object','_propertyName','null','49856','onerror','totalStrLength','getter','_isArray','79466sPwRds','_isNegativeZero','_connectAttemptCount','substr','_dateToString','close','Set','performance','host','[object\\x20Array]','_inBrowser','location','_isMap','noFunctions','_p_','toLowerCase','_getOwnPropertyDescriptor','_processTreeNodeResult','elapsed','name','logger\\x20failed\\x20to\\x20connect\\x20to\\x20host','String','1089486nBWcUz','edge','value','onmessage','_inNextEdge','send','getWebSocketClass','trace','funcName','autoExpandPreviousObjects','type','_objectToString','_setNodeId','url','jest','_isSet','strLength','length','toString','forEach','disabledLog','_p_name','autoExpandPropertyCount','1213812NrVOup','expressionsToEvaluate','hasOwnProperty','_console_ninja','sort','1.0.0','_addObjectProperty','root_exp','stringify','autoExpand','data','_cleanNode'];_0x5c86=function(){return _0x75ddb6;};return _0x5c86();}function Y(_0x1f0003,_0x1a15fa,_0x246933,_0x544019){var _0x433aca=_0xa27832;_0x1f0003=_0x1f0003,_0x1a15fa=_0x1a15fa,_0x246933=_0x246933,_0x544019=_0x544019;let _0x34fb9c=W(_0x1f0003),_0x269c14=_0x34fb9c[_0x433aca(0x142)],_0x49a237=_0x34fb9c['timeStamp'];class _0x4a3f4d{constructor(){var _0xbc3582=_0x433aca;this[_0xbc3582(0x1eb)]=/^(?!(?:do|if|in|for|let|new|try|var|case|else|enum|eval|false|null|this|true|void|with|break|catch|class|const|super|throw|while|yield|delete|export|import|public|return|static|switch|typeof|default|extends|finally|package|private|continue|debugger|function|arguments|interface|protected|implements|instanceof)$)[_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*$/,this[_0xbc3582(0x185)]=/^(0|[1-9][0-9]*)$/,this[_0xbc3582(0x1d1)]=/'([^\\\\']|\\\\')*'/,this[_0xbc3582(0x1b3)]=_0x1f0003['undefined'],this[_0xbc3582(0x1c2)]=_0x1f0003[_0xbc3582(0x1e5)],this[_0xbc3582(0x140)]=Object['getOwnPropertyDescriptor'],this['_getOwnPropertyNames']=Object[_0xbc3582(0x180)],this[_0xbc3582(0x1d4)]=_0x1f0003['Symbol'],this[_0xbc3582(0x19b)]=RegExp[_0xbc3582(0x169)][_0xbc3582(0x158)],this[_0xbc3582(0x134)]=Date[_0xbc3582(0x169)]['toString'];}[_0x433aca(0x121)](_0x40b3c7,_0x4b83d7,_0x4dde75,_0x472b77){var _0x73b905=_0x433aca,_0x5ad6e2=this,_0x51ab87=_0x4dde75['autoExpand'];function _0x289839(_0x3dd614,_0x349623,_0x591c87){var _0x5684ae=_0x1dc1;_0x349623[_0x5684ae(0x150)]=_0x5684ae(0x1fe),_0x349623[_0x5684ae(0x1ff)]=_0x3dd614[_0x5684ae(0x200)],_0x3dbeda=_0x591c87[_0x5684ae(0x11e)][_0x5684ae(0x1b9)],_0x591c87['node'][_0x5684ae(0x1b9)]=_0x349623,_0x5ad6e2['_treeNodePropertiesBeforeFullValue'](_0x349623,_0x591c87);}try{_0x4dde75['level']++,_0x4dde75['autoExpand']&&_0x4dde75[_0x73b905(0x14f)]['push'](_0x4b83d7);var _0x3c9ba1,_0x58d18e,_0x1e1cd8,_0xe9f856,_0xfe2a5f=[],_0x195f85=[],_0x5db02f,_0xb02fbd=this[_0x73b905(0x1a2)](_0x4b83d7),_0x46b41b=_0xb02fbd===_0x73b905(0x1be),_0x349be1=!0x1,_0x3e0a55=_0xb02fbd==='function',_0x1c4902=this[_0x73b905(0x1f0)](_0xb02fbd),_0x5e8205=this['_isPrimitiveWrapperType'](_0xb02fbd),_0x274fe9=_0x1c4902||_0x5e8205,_0x558702={},_0x2557b0=0x0,_0x3f0483=!0x1,_0x3dbeda,_0x58c826=/^(([1-9]{1}[0-9]*)|0)$/;if(_0x4dde75['depth']){if(_0x46b41b){if(_0x58d18e=_0x4b83d7[_0x73b905(0x157)],_0x58d18e>_0x4dde75[_0x73b905(0x173)]){for(_0x1e1cd8=0x0,_0xe9f856=_0x4dde75[_0x73b905(0x173)],_0x3c9ba1=_0x1e1cd8;_0x3c9ba1<_0xe9f856;_0x3c9ba1++)_0x195f85[_0x73b905(0x120)](_0x5ad6e2[_0x73b905(0x1db)](_0xfe2a5f,_0x4b83d7,_0xb02fbd,_0x3c9ba1,_0x4dde75));_0x40b3c7[_0x73b905(0x1cf)]=!0x0;}else{for(_0x1e1cd8=0x0,_0xe9f856=_0x58d18e,_0x3c9ba1=_0x1e1cd8;_0x3c9ba1<_0xe9f856;_0x3c9ba1++)_0x195f85[_0x73b905(0x120)](_0x5ad6e2[_0x73b905(0x1db)](_0xfe2a5f,_0x4b83d7,_0xb02fbd,_0x3c9ba1,_0x4dde75));}_0x4dde75['autoExpandPropertyCount']+=_0x195f85[_0x73b905(0x157)];}if(!(_0xb02fbd===_0x73b905(0x12a)||_0xb02fbd==='undefined')&&!_0x1c4902&&_0xb02fbd!==_0x73b905(0x145)&&_0xb02fbd!==_0x73b905(0x1c5)&&_0xb02fbd!==_0x73b905(0x1da)){var _0x1375d8=_0x472b77[_0x73b905(0x1ae)]||_0x4dde75[_0x73b905(0x1ae)];if(this[_0x73b905(0x155)](_0x4b83d7)?(_0x3c9ba1=0x0,_0x4b83d7['forEach'](function(_0x4ba7af){var _0x337181=_0x73b905;if(_0x2557b0++,_0x4dde75['autoExpandPropertyCount']++,_0x2557b0>_0x1375d8){_0x3f0483=!0x0;return;}if(!_0x4dde75[_0x337181(0x175)]&&_0x4dde75[_0x337181(0x166)]&&_0x4dde75[_0x337181(0x15c)]>_0x4dde75[_0x337181(0x1c0)]){_0x3f0483=!0x0;return;}_0x195f85[_0x337181(0x120)](_0x5ad6e2['_addProperty'](_0xfe2a5f,_0x4b83d7,_0x337181(0x136),_0x3c9ba1++,_0x4dde75,function(_0x28250){return function(){return _0x28250;};}(_0x4ba7af)));})):this['_isMap'](_0x4b83d7)&&_0x4b83d7[_0x73b905(0x159)](function(_0x5d9228,_0xca50d3){var _0x12665d=_0x73b905;if(_0x2557b0++,_0x4dde75[_0x12665d(0x15c)]++,_0x2557b0>_0x1375d8){_0x3f0483=!0x0;return;}if(!_0x4dde75[_0x12665d(0x175)]&&_0x4dde75[_0x12665d(0x166)]&&_0x4dde75[_0x12665d(0x15c)]>_0x4dde75[_0x12665d(0x1c0)]){_0x3f0483=!0x0;return;}var _0x39915e=_0xca50d3['toString']();_0x39915e[_0x12665d(0x157)]>0x64&&(_0x39915e=_0x39915e['slice'](0x0,0x64)+_0x12665d(0x1d6)),_0x195f85['push'](_0x5ad6e2['_addProperty'](_0xfe2a5f,_0x4b83d7,_0x12665d(0x1d9),_0x39915e,_0x4dde75,function(_0x2957ad){return function(){return _0x2957ad;};}(_0x5d9228)));}),!_0x349be1){try{for(_0x5db02f in _0x4b83d7)if(!(_0x46b41b&&_0x58c826[_0x73b905(0x18a)](_0x5db02f))&&!this[_0x73b905(0x1ef)](_0x4b83d7,_0x5db02f,_0x4dde75)){if(_0x2557b0++,_0x4dde75[_0x73b905(0x15c)]++,_0x2557b0>_0x1375d8){_0x3f0483=!0x0;break;}if(!_0x4dde75[_0x73b905(0x175)]&&_0x4dde75['autoExpand']&&_0x4dde75['autoExpandPropertyCount']>_0x4dde75['autoExpandLimit']){_0x3f0483=!0x0;break;}_0x195f85[_0x73b905(0x120)](_0x5ad6e2[_0x73b905(0x163)](_0xfe2a5f,_0x558702,_0x4b83d7,_0xb02fbd,_0x5db02f,_0x4dde75));}}catch{}if(_0x558702[_0x73b905(0x1ab)]=!0x0,_0x3e0a55&&(_0x558702[_0x73b905(0x15b)]=!0x0),!_0x3f0483){var _0x1fb0c0=[][_0x73b905(0x204)](this[_0x73b905(0x16c)](_0x4b83d7))[_0x73b905(0x204)](this[_0x73b905(0x1cb)](_0x4b83d7));for(_0x3c9ba1=0x0,_0x58d18e=_0x1fb0c0[_0x73b905(0x157)];_0x3c9ba1<_0x58d18e;_0x3c9ba1++)if(_0x5db02f=_0x1fb0c0[_0x3c9ba1],!(_0x46b41b&&_0x58c826[_0x73b905(0x18a)](_0x5db02f[_0x73b905(0x158)]()))&&!this[_0x73b905(0x1ef)](_0x4b83d7,_0x5db02f,_0x4dde75)&&!_0x558702[_0x73b905(0x13e)+_0x5db02f[_0x73b905(0x158)]()]){if(_0x2557b0++,_0x4dde75['autoExpandPropertyCount']++,_0x2557b0>_0x1375d8){_0x3f0483=!0x0;break;}if(!_0x4dde75[_0x73b905(0x175)]&&_0x4dde75[_0x73b905(0x166)]&&_0x4dde75[_0x73b905(0x15c)]>_0x4dde75['autoExpandLimit']){_0x3f0483=!0x0;break;}_0x195f85[_0x73b905(0x120)](_0x5ad6e2[_0x73b905(0x163)](_0xfe2a5f,_0x558702,_0x4b83d7,_0xb02fbd,_0x5db02f,_0x4dde75));}}}}}if(_0x40b3c7[_0x73b905(0x150)]=_0xb02fbd,_0x274fe9?(_0x40b3c7[_0x73b905(0x148)]=_0x4b83d7[_0x73b905(0x1b8)](),this[_0x73b905(0x123)](_0xb02fbd,_0x40b3c7,_0x4dde75,_0x472b77)):_0xb02fbd===_0x73b905(0x1b1)?_0x40b3c7[_0x73b905(0x148)]=this[_0x73b905(0x134)]['call'](_0x4b83d7):_0xb02fbd===_0x73b905(0x1da)?_0x40b3c7[_0x73b905(0x148)]=_0x4b83d7[_0x73b905(0x158)]():_0xb02fbd===_0x73b905(0x194)?_0x40b3c7['value']=this[_0x73b905(0x19b)]['call'](_0x4b83d7):_0xb02fbd==='symbol'&&this[_0x73b905(0x1d4)]?_0x40b3c7[_0x73b905(0x148)]=this['_Symbol'][_0x73b905(0x169)][_0x73b905(0x158)]['call'](_0x4b83d7):!_0x4dde75[_0x73b905(0x1e0)]&&!(_0xb02fbd===_0x73b905(0x12a)||_0xb02fbd===_0x73b905(0x197))&&(delete _0x40b3c7['value'],_0x40b3c7[_0x73b905(0x1a5)]=!0x0),_0x3f0483&&(_0x40b3c7[_0x73b905(0x1c7)]=!0x0),_0x3dbeda=_0x4dde75[_0x73b905(0x11e)][_0x73b905(0x1b9)],_0x4dde75[_0x73b905(0x11e)][_0x73b905(0x1b9)]=_0x40b3c7,this[_0x73b905(0x11d)](_0x40b3c7,_0x4dde75),_0x195f85[_0x73b905(0x157)]){for(_0x3c9ba1=0x0,_0x58d18e=_0x195f85[_0x73b905(0x157)];_0x3c9ba1<_0x58d18e;_0x3c9ba1++)_0x195f85[_0x3c9ba1](_0x3c9ba1);}_0xfe2a5f[_0x73b905(0x157)]&&(_0x40b3c7['props']=_0xfe2a5f);}catch(_0x46dba5){_0x289839(_0x46dba5,_0x40b3c7,_0x4dde75);}return this[_0x73b905(0x1b2)](_0x4b83d7,_0x40b3c7),this[_0x73b905(0x203)](_0x40b3c7,_0x4dde75),_0x4dde75[_0x73b905(0x11e)][_0x73b905(0x1b9)]=_0x3dbeda,_0x4dde75['level']--,_0x4dde75[_0x73b905(0x166)]=_0x51ab87,_0x4dde75[_0x73b905(0x166)]&&_0x4dde75['autoExpandPreviousObjects'][_0x73b905(0x1ce)](),_0x40b3c7;}[_0x433aca(0x1cb)](_0x19ddb5){return Object['getOwnPropertySymbols']?Object['getOwnPropertySymbols'](_0x19ddb5):[];}['_isSet'](_0x133a4c){var _0x27c7e8=_0x433aca;return!!(_0x133a4c&&_0x1f0003['Set']&&this[_0x27c7e8(0x151)](_0x133a4c)===_0x27c7e8(0x202)&&_0x133a4c[_0x27c7e8(0x159)]);}['_blacklistedProperty'](_0x41af7a,_0xb1c5cb,_0x5da846){var _0x16d762=_0x433aca;return _0x5da846[_0x16d762(0x13d)]?typeof _0x41af7a[_0xb1c5cb]==_0x16d762(0x11f):!0x1;}['_type'](_0x493c83){var _0xccaefd=_0x433aca,_0x2db71c='';return _0x2db71c=typeof _0x493c83,_0x2db71c==='object'?this[_0xccaefd(0x151)](_0x493c83)===_0xccaefd(0x139)?_0x2db71c=_0xccaefd(0x1be):this['_objectToString'](_0x493c83)===_0xccaefd(0x181)?_0x2db71c=_0xccaefd(0x1b1):this[_0xccaefd(0x151)](_0x493c83)===_0xccaefd(0x1e2)?_0x2db71c=_0xccaefd(0x1da):_0x493c83===null?_0x2db71c=_0xccaefd(0x12a):_0x493c83[_0xccaefd(0x1ac)]&&(_0x2db71c=_0x493c83[_0xccaefd(0x1ac)][_0xccaefd(0x143)]||_0x2db71c):_0x2db71c===_0xccaefd(0x197)&&this[_0xccaefd(0x1c2)]&&_0x493c83 instanceof this[_0xccaefd(0x1c2)]&&(_0x2db71c=_0xccaefd(0x1e5)),_0x2db71c;}['_objectToString'](_0x156ddc){var _0x2163b1=_0x433aca;return Object[_0x2163b1(0x169)]['toString'][_0x2163b1(0x18f)](_0x156ddc);}['_isPrimitiveType'](_0x29392d){var _0x4df8b6=_0x433aca;return _0x29392d==='boolean'||_0x29392d===_0x4df8b6(0x1f4)||_0x29392d===_0x4df8b6(0x1f5);}[_0x433aca(0x1a8)](_0x565656){var _0x5ec67e=_0x433aca;return _0x565656==='Boolean'||_0x565656===_0x5ec67e(0x145)||_0x565656===_0x5ec67e(0x1de);}[_0x433aca(0x1db)](_0x31768e,_0x3d78d7,_0x2b1ad1,_0x1486ca,_0x2a72bc,_0x36ad5b){var _0x3209a1=this;return function(_0x51f598){var _0x27127b=_0x1dc1,_0x5691d9=_0x2a72bc[_0x27127b(0x11e)][_0x27127b(0x1b9)],_0x4d8359=_0x2a72bc[_0x27127b(0x11e)]['index'],_0x56e7e1=_0x2a72bc['node'][_0x27127b(0x1d7)];_0x2a72bc[_0x27127b(0x11e)][_0x27127b(0x1d7)]=_0x5691d9,_0x2a72bc['node'][_0x27127b(0x1d3)]=typeof _0x1486ca==_0x27127b(0x1f5)?_0x1486ca:_0x51f598,_0x31768e[_0x27127b(0x120)](_0x3209a1[_0x27127b(0x1b5)](_0x3d78d7,_0x2b1ad1,_0x1486ca,_0x2a72bc,_0x36ad5b)),_0x2a72bc[_0x27127b(0x11e)]['parent']=_0x56e7e1,_0x2a72bc[_0x27127b(0x11e)][_0x27127b(0x1d3)]=_0x4d8359;};}[_0x433aca(0x163)](_0x47b3ca,_0x10da83,_0x6b8161,_0x10e267,_0xf6eae5,_0x4ca7ce,_0x588785){var _0x5439d9=_0x433aca,_0x39c71b=this;return _0x10da83[_0x5439d9(0x13e)+_0xf6eae5[_0x5439d9(0x158)]()]=!0x0,function(_0x39b27c){var _0x1e9883=_0x5439d9,_0xbe10cf=_0x4ca7ce[_0x1e9883(0x11e)]['current'],_0x1352b7=_0x4ca7ce[_0x1e9883(0x11e)]['index'],_0x30cdaa=_0x4ca7ce[_0x1e9883(0x11e)]['parent'];_0x4ca7ce[_0x1e9883(0x11e)][_0x1e9883(0x1d7)]=_0xbe10cf,_0x4ca7ce[_0x1e9883(0x11e)]['index']=_0x39b27c,_0x47b3ca['push'](_0x39c71b[_0x1e9883(0x1b5)](_0x6b8161,_0x10e267,_0xf6eae5,_0x4ca7ce,_0x588785)),_0x4ca7ce['node']['parent']=_0x30cdaa,_0x4ca7ce[_0x1e9883(0x11e)][_0x1e9883(0x1d3)]=_0x1352b7;};}['_property'](_0x62856a,_0x3ac22f,_0x4a3629,_0x116d07,_0x1b091f){var _0x48fe52=_0x433aca,_0x3a83f7=this;_0x1b091f||(_0x1b091f=function(_0x26618b,_0x15aa5c){return _0x26618b[_0x15aa5c];});var _0x32e768=_0x4a3629['toString'](),_0x224be3=_0x116d07['expressionsToEvaluate']||{},_0x1dd963=_0x116d07[_0x48fe52(0x1e0)],_0x51d041=_0x116d07[_0x48fe52(0x175)];try{var _0x3c74fe=this[_0x48fe52(0x13c)](_0x62856a),_0x753ac9=_0x32e768;_0x3c74fe&&_0x753ac9[0x0]==='\\x27'&&(_0x753ac9=_0x753ac9[_0x48fe52(0x133)](0x1,_0x753ac9[_0x48fe52(0x157)]-0x2));var _0x97eb76=_0x116d07[_0x48fe52(0x15e)]=_0x224be3[_0x48fe52(0x13e)+_0x753ac9];_0x97eb76&&(_0x116d07[_0x48fe52(0x1e0)]=_0x116d07['depth']+0x1),_0x116d07['isExpressionToEvaluate']=!!_0x97eb76;var _0x5b0fde=typeof _0x4a3629==_0x48fe52(0x17f),_0x250794={'name':_0x5b0fde||_0x3c74fe?_0x32e768:this[_0x48fe52(0x129)](_0x32e768)};if(_0x5b0fde&&(_0x250794[_0x48fe52(0x17f)]=!0x0),!(_0x3ac22f===_0x48fe52(0x1be)||_0x3ac22f==='Error')){var _0xd341a2=this[_0x48fe52(0x140)](_0x62856a,_0x4a3629);if(_0xd341a2&&(_0xd341a2['set']&&(_0x250794[_0x48fe52(0x179)]=!0x0),_0xd341a2[_0x48fe52(0x1c1)]&&!_0x97eb76&&!_0x116d07[_0x48fe52(0x1a9)]))return _0x250794[_0x48fe52(0x12e)]=!0x0,this['_processTreeNodeResult'](_0x250794,_0x116d07),_0x250794;}var _0x31ea3e;try{_0x31ea3e=_0x1b091f(_0x62856a,_0x4a3629);}catch(_0x46a010){return _0x250794={'name':_0x32e768,'type':_0x48fe52(0x1fe),'error':_0x46a010[_0x48fe52(0x200)]},this[_0x48fe52(0x141)](_0x250794,_0x116d07),_0x250794;}var _0x175a4c=this[_0x48fe52(0x1a2)](_0x31ea3e),_0x1ddf90=this[_0x48fe52(0x1f0)](_0x175a4c);if(_0x250794[_0x48fe52(0x150)]=_0x175a4c,_0x1ddf90)this[_0x48fe52(0x141)](_0x250794,_0x116d07,_0x31ea3e,function(){var _0xc830d=_0x48fe52;_0x250794[_0xc830d(0x148)]=_0x31ea3e[_0xc830d(0x1b8)](),!_0x97eb76&&_0x3a83f7['_capIfString'](_0x175a4c,_0x250794,_0x116d07,{});});else{var _0x49ad15=_0x116d07['autoExpand']&&_0x116d07[_0x48fe52(0x1ea)]<_0x116d07[_0x48fe52(0x18e)]&&_0x116d07['autoExpandPreviousObjects'][_0x48fe52(0x178)](_0x31ea3e)<0x0&&_0x175a4c!==_0x48fe52(0x11f)&&_0x116d07[_0x48fe52(0x15c)]<_0x116d07[_0x48fe52(0x1c0)];_0x49ad15||_0x116d07[_0x48fe52(0x1ea)]<_0x1dd963||_0x97eb76?(this[_0x48fe52(0x121)](_0x250794,_0x31ea3e,_0x116d07,_0x97eb76||{}),this[_0x48fe52(0x1b2)](_0x31ea3e,_0x250794)):this['_processTreeNodeResult'](_0x250794,_0x116d07,_0x31ea3e,function(){var _0x1e18c6=_0x48fe52;_0x175a4c===_0x1e18c6(0x12a)||_0x175a4c===_0x1e18c6(0x197)||(delete _0x250794['value'],_0x250794[_0x1e18c6(0x1a5)]=!0x0);});}return _0x250794;}finally{_0x116d07[_0x48fe52(0x15e)]=_0x224be3,_0x116d07[_0x48fe52(0x1e0)]=_0x1dd963,_0x116d07[_0x48fe52(0x175)]=_0x51d041;}}[_0x433aca(0x123)](_0x35f650,_0x179012,_0x2d596f,_0x95dd9){var _0x1e8301=_0x433aca,_0x666db2=_0x95dd9[_0x1e8301(0x156)]||_0x2d596f[_0x1e8301(0x156)];if((_0x35f650===_0x1e8301(0x1f4)||_0x35f650===_0x1e8301(0x145))&&_0x179012[_0x1e8301(0x148)]){let _0x3e1356=_0x179012['value'][_0x1e8301(0x157)];_0x2d596f[_0x1e8301(0x198)]+=_0x3e1356,_0x2d596f[_0x1e8301(0x198)]>_0x2d596f[_0x1e8301(0x12d)]?(_0x179012[_0x1e8301(0x1a5)]='',delete _0x179012[_0x1e8301(0x148)]):_0x3e1356>_0x666db2&&(_0x179012[_0x1e8301(0x1a5)]=_0x179012[_0x1e8301(0x148)][_0x1e8301(0x133)](0x0,_0x666db2),delete _0x179012[_0x1e8301(0x148)]);}}['_isMap'](_0x291310){var _0x49da7d=_0x433aca;return!!(_0x291310&&_0x1f0003[_0x49da7d(0x1d9)]&&this['_objectToString'](_0x291310)===_0x49da7d(0x16b)&&_0x291310[_0x49da7d(0x159)]);}[_0x433aca(0x129)](_0x4c3443){var _0x26e8ee=_0x433aca;if(_0x4c3443[_0x26e8ee(0x1cd)](/^\\d+$/))return _0x4c3443;var _0x507c13;try{_0x507c13=JSON['stringify'](''+_0x4c3443);}catch{_0x507c13='\\x22'+this[_0x26e8ee(0x151)](_0x4c3443)+'\\x22';}return _0x507c13['match'](/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)?_0x507c13=_0x507c13[_0x26e8ee(0x133)](0x1,_0x507c13[_0x26e8ee(0x157)]-0x2):_0x507c13=_0x507c13[_0x26e8ee(0x19f)](/'/g,'\\x5c\\x27')[_0x26e8ee(0x19f)](/\\\\\"/g,'\\x22')['replace'](/(^\"|\"$)/g,'\\x27'),_0x507c13;}[_0x433aca(0x141)](_0x4145bc,_0xc711b5,_0x232653,_0x1ee20a){var _0x3322ae=_0x433aca;this['_treeNodePropertiesBeforeFullValue'](_0x4145bc,_0xc711b5),_0x1ee20a&&_0x1ee20a(),this[_0x3322ae(0x1b2)](_0x232653,_0x4145bc),this['_treeNodePropertiesAfterFullValue'](_0x4145bc,_0xc711b5);}[_0x433aca(0x11d)](_0x3d1fa9,_0x3b5c26){var _0x1c56da=_0x433aca;this[_0x1c56da(0x152)](_0x3d1fa9,_0x3b5c26),this[_0x1c56da(0x1bd)](_0x3d1fa9,_0x3b5c26),this[_0x1c56da(0x188)](_0x3d1fa9,_0x3b5c26),this[_0x1c56da(0x199)](_0x3d1fa9,_0x3b5c26);}['_setNodeId'](_0xeeae71,_0x306e2b){}[_0x433aca(0x1bd)](_0x40ddb9,_0x518140){}[_0x433aca(0x182)](_0x34bb3e,_0x2affba){}[_0x433aca(0x1d2)](_0x33a836){return _0x33a836===this['_undefined'];}['_treeNodePropertiesAfterFullValue'](_0xabea40,_0x4253d6){var _0x4384d2=_0x433aca;this[_0x4384d2(0x182)](_0xabea40,_0x4253d6),this[_0x4384d2(0x205)](_0xabea40),_0x4253d6[_0x4384d2(0x16d)]&&this['_sortProps'](_0xabea40),this[_0x4384d2(0x1e7)](_0xabea40,_0x4253d6),this[_0x4384d2(0x1fd)](_0xabea40,_0x4253d6),this['_cleanNode'](_0xabea40);}[_0x433aca(0x1b2)](_0x319356,_0x421c61){var _0x27e209=_0x433aca;let _0x8bc189;try{_0x1f0003[_0x27e209(0x1ee)]&&(_0x8bc189=_0x1f0003[_0x27e209(0x1ee)]['error'],_0x1f0003['console'][_0x27e209(0x1ff)]=function(){}),_0x319356&&typeof _0x319356[_0x27e209(0x157)]==_0x27e209(0x1f5)&&(_0x421c61[_0x27e209(0x157)]=_0x319356['length']);}catch{}finally{_0x8bc189&&(_0x1f0003[_0x27e209(0x1ee)][_0x27e209(0x1ff)]=_0x8bc189);}if(_0x421c61[_0x27e209(0x150)]===_0x27e209(0x1f5)||_0x421c61[_0x27e209(0x150)]===_0x27e209(0x1de)){if(isNaN(_0x421c61[_0x27e209(0x148)]))_0x421c61['nan']=!0x0,delete _0x421c61['value'];else switch(_0x421c61['value']){case Number[_0x27e209(0x16f)]:_0x421c61['positiveInfinity']=!0x0,delete _0x421c61['value'];break;case Number[_0x27e209(0x19d)]:_0x421c61['negativeInfinity']=!0x0,delete _0x421c61[_0x27e209(0x148)];break;case 0x0:this['_isNegativeZero'](_0x421c61[_0x27e209(0x148)])&&(_0x421c61[_0x27e209(0x16e)]=!0x0);break;}}else _0x421c61[_0x27e209(0x150)]==='function'&&typeof _0x319356[_0x27e209(0x143)]==_0x27e209(0x1f4)&&_0x319356[_0x27e209(0x143)]&&_0x421c61['name']&&_0x319356[_0x27e209(0x143)]!==_0x421c61[_0x27e209(0x143)]&&(_0x421c61[_0x27e209(0x14e)]=_0x319356['name']);}[_0x433aca(0x131)](_0x38529f){var _0x199888=_0x433aca;return 0x1/_0x38529f===Number[_0x199888(0x19d)];}[_0x433aca(0x17e)](_0x52cbce){var _0xfd397e=_0x433aca;!_0x52cbce[_0xfd397e(0x1ae)]||!_0x52cbce[_0xfd397e(0x1ae)][_0xfd397e(0x157)]||_0x52cbce[_0xfd397e(0x150)]===_0xfd397e(0x1be)||_0x52cbce[_0xfd397e(0x150)]===_0xfd397e(0x1d9)||_0x52cbce[_0xfd397e(0x150)]===_0xfd397e(0x136)||_0x52cbce[_0xfd397e(0x1ae)][_0xfd397e(0x161)](function(_0x55c773,_0x119e91){var _0x1f0ef4=_0xfd397e,_0x4f83a8=_0x55c773[_0x1f0ef4(0x143)]['toLowerCase'](),_0x1a95f6=_0x119e91[_0x1f0ef4(0x143)][_0x1f0ef4(0x13f)]();return _0x4f83a8<_0x1a95f6?-0x1:_0x4f83a8>_0x1a95f6?0x1:0x0;});}[_0x433aca(0x1e7)](_0x6b619e,_0x4d1830){var _0x2f1876=_0x433aca;if(!(_0x4d1830['noFunctions']||!_0x6b619e[_0x2f1876(0x1ae)]||!_0x6b619e[_0x2f1876(0x1ae)][_0x2f1876(0x157)])){for(var _0x398d2e=[],_0x49dc6c=[],_0x413881=0x0,_0x5386e7=_0x6b619e[_0x2f1876(0x1ae)][_0x2f1876(0x157)];_0x413881<_0x5386e7;_0x413881++){var _0x53badb=_0x6b619e[_0x2f1876(0x1ae)][_0x413881];_0x53badb[_0x2f1876(0x150)]===_0x2f1876(0x11f)?_0x398d2e[_0x2f1876(0x120)](_0x53badb):_0x49dc6c[_0x2f1876(0x120)](_0x53badb);}if(!(!_0x49dc6c['length']||_0x398d2e[_0x2f1876(0x157)]<=0x1)){_0x6b619e['props']=_0x49dc6c;var _0x4f9048={'functionsNode':!0x0,'props':_0x398d2e};this['_setNodeId'](_0x4f9048,_0x4d1830),this['_setNodeLabel'](_0x4f9048,_0x4d1830),this[_0x2f1876(0x205)](_0x4f9048),this[_0x2f1876(0x199)](_0x4f9048,_0x4d1830),_0x4f9048['id']+='\\x20f',_0x6b619e['props']['unshift'](_0x4f9048);}}}[_0x433aca(0x1fd)](_0x278bab,_0x4b8b27){}[_0x433aca(0x205)](_0x246c56){}[_0x433aca(0x12f)](_0x113fc3){var _0x3ef565=_0x433aca;return Array[_0x3ef565(0x1b6)](_0x113fc3)||typeof _0x113fc3==_0x3ef565(0x128)&&this['_objectToString'](_0x113fc3)==='[object\\x20Array]';}[_0x433aca(0x199)](_0x3c4c19,_0x461c82){}[_0x433aca(0x168)](_0x2e6ab0){var _0x28756d=_0x433aca;delete _0x2e6ab0[_0x28756d(0x1c6)],delete _0x2e6ab0[_0x28756d(0x1f2)],delete _0x2e6ab0[_0x28756d(0x1fc)];}[_0x433aca(0x188)](_0x469a5d,_0x4a22ef){}}let _0x563d1e=new _0x4a3f4d(),_0x5b329f={'props':0x64,'elements':0x64,'strLength':0x400*0x32,'totalStrLength':0x400*0x32,'autoExpandLimit':0x1388,'autoExpandMaxDepth':0xa},_0x603c01={'props':0x5,'elements':0x5,'strLength':0x100,'totalStrLength':0x100*0x3,'autoExpandLimit':0x1e,'autoExpandMaxDepth':0x2};function _0x5f480e(_0x3193ed,_0x20af3c,_0x4f0827,_0x53d8b1,_0xe97fc3,_0x22a33f){var _0x4dfeb1=_0x433aca;let _0x56d916,_0x3e4af1;try{_0x3e4af1=_0x49a237(),_0x56d916=_0x246933[_0x20af3c],!_0x56d916||_0x3e4af1-_0x56d916['ts']>0x1f4&&_0x56d916[_0x4dfeb1(0x1c8)]&&_0x56d916[_0x4dfeb1(0x1e9)]/_0x56d916['count']<0x64?(_0x246933[_0x20af3c]=_0x56d916={'count':0x0,'time':0x0,'ts':_0x3e4af1},_0x246933['hits']={}):_0x3e4af1-_0x246933['hits']['ts']>0x32&&_0x246933[_0x4dfeb1(0x172)][_0x4dfeb1(0x1c8)]&&_0x246933[_0x4dfeb1(0x172)]['time']/_0x246933[_0x4dfeb1(0x172)][_0x4dfeb1(0x1c8)]<0x64&&(_0x246933[_0x4dfeb1(0x172)]={});let _0x30e908=[],_0x111f30=_0x56d916[_0x4dfeb1(0x1e6)]||_0x246933['hits']['reduceLimits']?_0x603c01:_0x5b329f,_0x202cd4=_0x18f292=>{var _0x2817fd=_0x4dfeb1;let _0x2b31de={};return _0x2b31de[_0x2817fd(0x1ae)]=_0x18f292['props'],_0x2b31de[_0x2817fd(0x173)]=_0x18f292[_0x2817fd(0x173)],_0x2b31de[_0x2817fd(0x156)]=_0x18f292[_0x2817fd(0x156)],_0x2b31de[_0x2817fd(0x12d)]=_0x18f292[_0x2817fd(0x12d)],_0x2b31de[_0x2817fd(0x1c0)]=_0x18f292[_0x2817fd(0x1c0)],_0x2b31de[_0x2817fd(0x18e)]=_0x18f292['autoExpandMaxDepth'],_0x2b31de[_0x2817fd(0x16d)]=!0x1,_0x2b31de[_0x2817fd(0x13d)]=!_0x1a15fa,_0x2b31de[_0x2817fd(0x1e0)]=0x1,_0x2b31de[_0x2817fd(0x1ea)]=0x0,_0x2b31de[_0x2817fd(0x184)]='root_exp_id',_0x2b31de[_0x2817fd(0x124)]=_0x2817fd(0x164),_0x2b31de[_0x2817fd(0x166)]=!0x0,_0x2b31de['autoExpandPreviousObjects']=[],_0x2b31de[_0x2817fd(0x15c)]=0x0,_0x2b31de[_0x2817fd(0x1a9)]=!0x0,_0x2b31de[_0x2817fd(0x198)]=0x0,_0x2b31de[_0x2817fd(0x11e)]={'current':void 0x0,'parent':void 0x0,'index':0x0},_0x2b31de;};for(var _0x1d6c83=0x0;_0x1d6c83<_0xe97fc3['length'];_0x1d6c83++)_0x30e908[_0x4dfeb1(0x120)](_0x563d1e['serialize']({'timeNode':_0x3193ed===_0x4dfeb1(0x1e9)||void 0x0},_0xe97fc3[_0x1d6c83],_0x202cd4(_0x111f30),{}));if(_0x3193ed===_0x4dfeb1(0x14d)){let _0x204c59=Error[_0x4dfeb1(0x125)];try{Error[_0x4dfeb1(0x125)]=0x1/0x0,_0x30e908['push'](_0x563d1e[_0x4dfeb1(0x121)]({'stackNode':!0x0},new Error()[_0x4dfeb1(0x1af)],_0x202cd4(_0x111f30),{'strLength':0x1/0x0}));}finally{Error['stackTraceLimit']=_0x204c59;}}return{'method':'log','version':_0x544019,'args':[{'ts':_0x4f0827,'session':_0x53d8b1,'args':_0x30e908,'id':_0x20af3c,'context':_0x22a33f}]};}catch(_0x54dd5e){return{'method':_0x4dfeb1(0x1a3),'version':_0x544019,'args':[{'ts':_0x4f0827,'session':_0x53d8b1,'args':[{'type':_0x4dfeb1(0x1fe),'error':_0x54dd5e&&_0x54dd5e[_0x4dfeb1(0x200)]}],'id':_0x20af3c,'context':_0x22a33f}]};}finally{try{if(_0x56d916&&_0x3e4af1){let _0x19f770=_0x49a237();_0x56d916[_0x4dfeb1(0x1c8)]++,_0x56d916[_0x4dfeb1(0x1e9)]+=_0x269c14(_0x3e4af1,_0x19f770),_0x56d916['ts']=_0x19f770,_0x246933[_0x4dfeb1(0x172)][_0x4dfeb1(0x1c8)]++,_0x246933[_0x4dfeb1(0x172)][_0x4dfeb1(0x1e9)]+=_0x269c14(_0x3e4af1,_0x19f770),_0x246933[_0x4dfeb1(0x172)]['ts']=_0x19f770,(_0x56d916[_0x4dfeb1(0x1c8)]>0x32||_0x56d916[_0x4dfeb1(0x1e9)]>0x64)&&(_0x56d916[_0x4dfeb1(0x1e6)]=!0x0),(_0x246933[_0x4dfeb1(0x172)]['count']>0x3e8||_0x246933[_0x4dfeb1(0x172)]['time']>0x12c)&&(_0x246933[_0x4dfeb1(0x172)][_0x4dfeb1(0x1e6)]=!0x0);}}catch{}}}return _0x5f480e;}((_0x28331b,_0x22ab47,_0x28125a,_0x28e75c,_0x33a3c2,_0xa1ea8f,_0x1b95ec,_0x37e309,_0x1c99af,_0x4ae76f)=>{var _0x1b8b78=_0xa27832;if(_0x28331b[_0x1b8b78(0x160)])return _0x28331b[_0x1b8b78(0x160)];if(!J(_0x28331b,_0x37e309,_0x33a3c2))return _0x28331b[_0x1b8b78(0x160)]={'consoleLog':()=>{},'consoleTrace':()=>{},'consoleTime':()=>{},'consoleTimeEnd':()=>{},'autoLog':()=>{},'autoLogMany':()=>{},'autoTraceMany':()=>{},'coverage':()=>{},'autoTrace':()=>{},'autoTime':()=>{},'autoTimeEnd':()=>{}},_0x28331b[_0x1b8b78(0x160)];let _0x3e7b70=W(_0x28331b),_0x1fe98a=_0x3e7b70[_0x1b8b78(0x142)],_0x2db71b=_0x3e7b70['timeStamp'],_0x5159de=_0x3e7b70[_0x1b8b78(0x183)],_0x3665e0={'hits':{},'ts':{}},_0x3b5676=Y(_0x28331b,_0x1c99af,_0x3665e0,_0xa1ea8f),_0x163451=_0x5729fd=>{_0x3665e0['ts'][_0x5729fd]=_0x2db71b();},_0x2c8fca=(_0x25def9,_0x17889b)=>{var _0x486236=_0x1b8b78;let _0x483566=_0x3665e0['ts'][_0x17889b];if(delete _0x3665e0['ts'][_0x17889b],_0x483566){let _0x4a82a9=_0x1fe98a(_0x483566,_0x2db71b());_0x472878(_0x3b5676(_0x486236(0x1e9),_0x25def9,_0x5159de(),_0xe95e2e,[_0x4a82a9],_0x17889b));}},_0x5abfa9=_0x19b80d=>_0x2ee396=>{var _0x16af84=_0x1b8b78;try{_0x163451(_0x2ee396),_0x19b80d(_0x2ee396);}finally{_0x28331b[_0x16af84(0x1ee)][_0x16af84(0x1e9)]=_0x19b80d;}},_0x619635=_0x169afb=>_0x7e4a8=>{var _0x1a4e09=_0x1b8b78;try{let [_0xaf5afe,_0x1ce59e]=_0x7e4a8['split'](_0x1a4e09(0x17b));_0x2c8fca(_0x1ce59e,_0xaf5afe),_0x169afb(_0xaf5afe);}finally{_0x28331b[_0x1a4e09(0x1ee)][_0x1a4e09(0x170)]=_0x169afb;}};_0x28331b[_0x1b8b78(0x160)]={'consoleLog':(_0x715ca0,_0xaacd9f)=>{var _0x36622a=_0x1b8b78;_0x28331b[_0x36622a(0x1ee)][_0x36622a(0x1a3)]['name']!==_0x36622a(0x15a)&&_0x472878(_0x3b5676(_0x36622a(0x1a3),_0x715ca0,_0x5159de(),_0xe95e2e,_0xaacd9f));},'consoleTrace':(_0x60f4ea,_0x1e029e)=>{var _0x4d7024=_0x1b8b78;_0x28331b[_0x4d7024(0x1ee)]['log'][_0x4d7024(0x143)]!==_0x4d7024(0x1f6)&&_0x472878(_0x3b5676(_0x4d7024(0x14d),_0x60f4ea,_0x5159de(),_0xe95e2e,_0x1e029e));},'consoleTime':()=>{var _0x470a11=_0x1b8b78;_0x28331b[_0x470a11(0x1ee)][_0x470a11(0x1e9)]=_0x5abfa9(_0x28331b[_0x470a11(0x1ee)][_0x470a11(0x1e9)]);},'consoleTimeEnd':()=>{var _0x4c2b10=_0x1b8b78;_0x28331b['console']['timeEnd']=_0x619635(_0x28331b[_0x4c2b10(0x1ee)][_0x4c2b10(0x170)]);},'autoLog':(_0x1b2d50,_0x4ed1eb)=>{var _0x36924f=_0x1b8b78;_0x472878(_0x3b5676(_0x36924f(0x1a3),_0x4ed1eb,_0x5159de(),_0xe95e2e,[_0x1b2d50]));},'autoLogMany':(_0x45dbc8,_0x55f0de)=>{var _0x4f4302=_0x1b8b78;_0x472878(_0x3b5676(_0x4f4302(0x1a3),_0x45dbc8,_0x5159de(),_0xe95e2e,_0x55f0de));},'autoTrace':(_0x3a4027,_0x3aad84)=>{var _0x47aaec=_0x1b8b78;_0x472878(_0x3b5676(_0x47aaec(0x14d),_0x3aad84,_0x5159de(),_0xe95e2e,[_0x3a4027]));},'autoTraceMany':(_0x52d9eb,_0x28c43c)=>{var _0x197168=_0x1b8b78;_0x472878(_0x3b5676(_0x197168(0x14d),_0x52d9eb,_0x5159de(),_0xe95e2e,_0x28c43c));},'autoTime':(_0x50c57e,_0x2bcc66,_0x465d98)=>{_0x163451(_0x465d98);},'autoTimeEnd':(_0x1a7664,_0x134ee0,_0xd56688)=>{_0x2c8fca(_0x134ee0,_0xd56688);},'coverage':_0x76e9ad=>{var _0x3c5267=_0x1b8b78;_0x472878({'method':_0x3c5267(0x1ba),'version':_0xa1ea8f,'args':[{'id':_0x76e9ad}]});}};let _0x472878=b(_0x28331b,_0x22ab47,_0x28125a,_0x28e75c,_0x33a3c2,_0x4ae76f),_0xe95e2e=_0x28331b[_0x1b8b78(0x1ad)];return _0x28331b[_0x1b8b78(0x160)];})(globalThis,_0xa27832(0x187),_0xa27832(0x12b),\"c:\\\\Users\\\\arvin\\\\.vscode\\\\extensions\\\\wallabyjs.console-ninja-1.0.255\\\\node_modules\",_0xa27832(0x154),_0xa27832(0x162),_0xa27832(0x195),_0xa27832(0x1a6),'',_0xa27832(0x206));");}catch(e){}};function oo_oo(i,...v){try{oo_cm().consoleLog(i, v);}catch(e){} return v};function oo_tr(i,...v){try{oo_cm().consoleTrace(i, v);}catch(e){} return v};function oo_ts(){try{oo_cm().consoleTime();}catch(e){}};function oo_te(){try{oo_cm().consoleTimeEnd();}catch(e){}};/*eslint unicorn/no-abusive-eslint-disable:,eslint-comments/disable-enable-pair:,eslint-comments/no-unlimited-disable:,eslint-comments/no-aggregating-enable:,eslint-comments/no-duplicate-disable:,eslint-comments/no-unused-disable:,eslint-comments/no-unused-enable:,*/
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/server/coverage/lcov-report/server/controllers/mails/index.html b/server/coverage/lcov-report/server/controllers/mails/index.html new file mode 100644 index 0000000..6cc62d6 --- /dev/null +++ b/server/coverage/lcov-report/server/controllers/mails/index.html @@ -0,0 +1,116 @@ + + + + + + Code coverage report for server/controllers/mails + + + + + + + + + +
+
+

All files server/controllers/mails

+
+ +
+ 74.07% + Statements + 20/27 +
+ + +
+ 100% + Branches + 2/2 +
+ + +
+ 50% + Functions + 3/6 +
+ + +
+ 100% + Lines + 16/16 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
MailController.js +
+
74.07%20/27100%2/250%3/6100%16/16
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/server/coverage/lcov-report/server/helpers/bcryptjs.js.html b/server/coverage/lcov-report/server/helpers/bcryptjs.js.html new file mode 100644 index 0000000..e164644 --- /dev/null +++ b/server/coverage/lcov-report/server/helpers/bcryptjs.js.html @@ -0,0 +1,124 @@ + + + + + + Code coverage report for server/helpers/bcryptjs.js + + + + + + + + + +
+
+

All files / server/helpers bcryptjs.js

+
+ +
+ 100% + Statements + 9/9 +
+ + +
+ 100% + Branches + 0/0 +
+ + +
+ 100% + Functions + 2/2 +
+ + +
+ 100% + Lines + 9/9 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +144x +  +4x +6x +6x +6x +  +  +4x +2x +2x +  +  +4x
const bcryptjs = require('bcryptjs');
+ 
+const bcryptHash = (req) => {
+    const salt = bcryptjs.genSaltSync(16);
+    const hash = bcryptjs.hashSync(req, salt);
+    return hash;
+}
+ 
+const bcryptCompare = (req, hashed) => {
+    const compare = bcryptjs.compareSync(req, hashed);
+    return compare;
+}
+ 
+module.exports = { bcryptHash, bcryptCompare };
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/server/coverage/lcov-report/server/helpers/googlebooks.js.html b/server/coverage/lcov-report/server/helpers/googlebooks.js.html new file mode 100644 index 0000000..96aee67 --- /dev/null +++ b/server/coverage/lcov-report/server/helpers/googlebooks.js.html @@ -0,0 +1,193 @@ + + + + + + Code coverage report for server/helpers/googlebooks.js + + + + + + + + + +
+
+

All files / server/helpers googlebooks.js

+
+ +
+ 100% + Statements + 8/8 +
+ + +
+ 50% + Branches + 4/8 +
+ + +
+ 100% + Functions + 2/2 +
+ + +
+ 100% + Lines + 8/8 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +374x +  +4x +1x +  +  +  +  +  +  +  +  +  +1x +  +1x +1x +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +4x
const axios = require('axios');
+ 
+const fetchGBooks = async (query, maxResults) => {
+    const response = await axios.get('https://www.googleapis.com/books/v1/volumes', {
+        params: {
+            key: process.env.GOOGLE_BOOKS_API_KEY,
+            q: query,
+            country: 'ID',
+            maxResults,
+            printType: 'books',
+        },
+    });
+ 
+    const items = response.data.items || [];
+ 
+    return items.map(item => {
+        const { title, authors, publisher, publishedDate, description, industryIdentifiers, pageCount, categories, imageLinks, language, previewLink } = item.volumeInfo;
+        return {
+            title,
+            isbn: industryIdentifiers ? industryIdentifiers[0].identifier : '-',
+            author: authors ? authors.join(', ') : '-',
+            synopsis: description,
+            pageCount,
+            stock: Math.ceil(Math.random() * 5),
+            publisher,
+            publishedDate,
+            lang: language,
+            imgUrl: imageLinks.thumbnail,
+            status: 'available',
+            category: categories ? categories.join(', ') : '-',
+            pricePerWeek: Math.ceil(Math.random() * 1000 * 5),
+            link: previewLink
+        };
+    });
+};
+ 
+module.exports = { fetchGBooks };
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/server/coverage/lcov-report/server/helpers/index.html b/server/coverage/lcov-report/server/helpers/index.html new file mode 100644 index 0000000..4bdb299 --- /dev/null +++ b/server/coverage/lcov-report/server/helpers/index.html @@ -0,0 +1,161 @@ + + + + + + Code coverage report for server/helpers + + + + + + + + + +
+
+

All files server/helpers

+
+ +
+ 100% + Statements + 44/44 +
+ + +
+ 50% + Branches + 4/8 +
+ + +
+ 100% + Functions + 9/9 +
+ + +
+ 100% + Lines + 43/43 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
bcryptjs.js +
+
100%9/9100%0/0100%2/2100%9/9
googlebooks.js +
+
100%8/850%4/8100%2/2100%8/8
jwt.js +
+
100%9/9100%0/0100%2/2100%9/9
openai.js +
+
100%18/18100%0/0100%3/3100%17/17
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/server/coverage/lcov-report/server/helpers/jwt.js.html b/server/coverage/lcov-report/server/helpers/jwt.js.html new file mode 100644 index 0000000..817dcb8 --- /dev/null +++ b/server/coverage/lcov-report/server/helpers/jwt.js.html @@ -0,0 +1,124 @@ + + + + + + Code coverage report for server/helpers/jwt.js + + + + + + + + + +
+
+

All files / server/helpers jwt.js

+
+ +
+ 100% + Statements + 9/9 +
+ + +
+ 100% + Branches + 0/0 +
+ + +
+ 100% + Functions + 2/2 +
+ + +
+ 100% + Lines + 9/9 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +144x +4x +  +4x +4x +4x +  +  +4x +14x +14x +  +  +4x
const jwt = require('jsonwebtoken');
+const secretKey = process.env.SECRET_KEY;
+ 
+const createToken = (req) => {
+    const token = jwt.sign(req, secretKey);
+    return token;
+}
+ 
+const verifyToken = (req) => {
+    const decoded = jwt.verify(req, secretKey);
+    return decoded;
+}
+ 
+module.exports = { createToken, verifyToken };
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/server/coverage/lcov-report/server/helpers/openai.js.html b/server/coverage/lcov-report/server/helpers/openai.js.html new file mode 100644 index 0000000..1a8d816 --- /dev/null +++ b/server/coverage/lcov-report/server/helpers/openai.js.html @@ -0,0 +1,187 @@ + + + + + + Code coverage report for server/helpers/openai.js + + + + + + + + + +
+
+

All files / server/helpers openai.js

+
+ +
+ 100% + Statements + 18/18 +
+ + +
+ 100% + Branches + 0/0 +
+ + +
+ 100% + Functions + 3/3 +
+ + +
+ 100% + Lines + 17/17 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +354x +  +4x +4x +  +  +  +4x +  +  +  +  +3x +  +  +4x +1x +1x +  +1x +5x +  +  +1x +1x +  +  +4x +1x +  +1x +1x +  +  +4x
const OpenAI = require('openai');
+ 
+const chatAI = async (req) => {
+    const openai = new OpenAI({
+        apiKey: process.env.OpenAI_KEY
+    });
+ 
+    const { choices } = await openai.chat.completions.create({
+        model: 'gpt-3.5-turbo',
+        messages: [{ "role": "user", "content": req }],
+        max_tokens: 100
+    });
+    return choices[0].message.content;
+}
+ 
+const generateAnsPromt = (q, answer) => {
+    let question = q.split(';;');
+    let result = `berikan nilai terhadap jawaban dari pertanyaan-pertanyaan berikut. tentukan apakah jawabannya benar dari pertanyaannya `;
+ 
+    for (let i = 0; i < 5; i++) {
+        result += ' ' + question[i] + ' apakah benar jawabannya adalah ' + answer[i] + '. ';
+    }
+ 
+    result += 'cukup keluarkan respons dalam bentuk integer javascript. setiap jawaban benar mendapat 20 poin. Tidak perlu mengeluarkan respons deskripsi apa pun cukup integer total poinnya dalam bentuk js. cukup jawab misal 10 atau 50, tidak perlu ada deklarasi atau console log cukup angkanya saja. pastikan hitung dengan benar, koreksi dengan tepat antara pertanyaan dan jawaban! Jika jawaban asal dan tidak dapat dipahami maka salahkan/jangan tambah poin!'
+    return result;
+}
+ 
+const generateBookPromt = (desc) => {
+    let result = `Berikan saya 1 judul buku, cukup respons judul bukunya saja dalam 1 string tidak perlu ada deskripsi apa pun. Buku yang saya inginkan memiliki isi yang sesuai atau mirip dengan deskripsi di bawah ini, deskripsi di apit oleh tanda titik koma (;) atau jika di deskripsi sudah ada judul bukunya atau sudah disebutkan judul bukunya maka cukup keluarkan respons judul bukunya apa tanpa perlu dicari kembali judul bukunya atau jika tidak ada maka cari buku sesuai dengan perintah atau deskripsi yang ada.
+    `;
+    result += ` ;${desc}; `
+    return result;
+}
+ 
+module.exports = { chatAI, generateAnsPromt, generateBookPromt };
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/server/coverage/lcov-report/server/index.html b/server/coverage/lcov-report/server/index.html new file mode 100644 index 0000000..ff91144 --- /dev/null +++ b/server/coverage/lcov-report/server/index.html @@ -0,0 +1,116 @@ + + + + + + Code coverage report for server + + + + + + + + + +
+
+

All files server

+
+ +
+ 100% + Statements + 10/10 +
+ + +
+ 50% + Branches + 1/2 +
+ + +
+ 100% + Functions + 0/0 +
+ + +
+ 100% + Lines + 10/10 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
app.js +
+
100%10/1050%1/2100%0/0100%10/10
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/server/coverage/lcov-report/server/middlewares/authentication.js.html b/server/coverage/lcov-report/server/middlewares/authentication.js.html new file mode 100644 index 0000000..4fc905f --- /dev/null +++ b/server/coverage/lcov-report/server/middlewares/authentication.js.html @@ -0,0 +1,166 @@ + + + + + + Code coverage report for server/middlewares/authentication.js + + + + + + + + + +
+
+

All files / server/middlewares authentication.js

+
+ +
+ 76.47% + Statements + 13/17 +
+ + +
+ 50% + Branches + 3/6 +
+ + +
+ 100% + Functions + 1/1 +
+ + +
+ 92.85% + Lines + 13/14 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28  +4x +4x +  +4x +14x +14x +14x +  +14x +  +14x +14x +  +14x +14x +  +  +  +  +  +14x +  +  +  +  +  +4x
 
+const { verifyToken } = require("../helpers/jwt");
+const { User } = require("../models");
+ 
+const authentication = async (req, res, next) => {
+    try {
+        Iif (!req.headers.authorization) throw ({ name: "Unauthenticated" });
+        const token = req.headers.authorization.split(' ').at(-1);
+        
+        Iif (!token) throw ({ name: "Unauthenticated" });
+        
+        const { id } = verifyToken(token);
+        const user = await User.findByPk(id);
+   
+        Iif (!user) throw ({ name: "Unauthenticated" });
+        req.user = {
+            id: user.id,
+            email: user.email,
+            role: user.role
+        };
+ 
+        next();
+    } catch (error) {
+        next(error);
+    }
+}
+ 
+module.exports = authentication;
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/server/coverage/lcov-report/server/middlewares/authorization.js.html b/server/coverage/lcov-report/server/middlewares/authorization.js.html new file mode 100644 index 0000000..adc3b30 --- /dev/null +++ b/server/coverage/lcov-report/server/middlewares/authorization.js.html @@ -0,0 +1,136 @@ + + + + + + Code coverage report for server/middlewares/authorization.js + + + + + + + + + +
+
+

All files / server/middlewares authorization.js

+
+ +
+ 27.27% + Statements + 3/11 +
+ + +
+ 0% + Branches + 0/4 +
+ + +
+ 0% + Functions + 0/1 +
+ + +
+ 33.33% + Lines + 3/9 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +181x +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x
const { User, Book } = require("../models");
+ 
+const authorization = {
+    AdminOnly: async (req, res, next) => {
+        try {
+            const user = await User.findByPk(req.user.id);
+            if (!user) throw ({ name: "Unauthorized" });
+            if (user.role !== 'admin') throw ({ name: "Unauthorized" });
+ 
+            next();
+        } catch (error) {
+            next(error);
+        }
+    },
+ 
+}
+ 
+module.exports = authorization;
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/server/coverage/lcov-report/server/middlewares/errorHandler.js.html b/server/coverage/lcov-report/server/middlewares/errorHandler.js.html new file mode 100644 index 0000000..f00c859 --- /dev/null +++ b/server/coverage/lcov-report/server/middlewares/errorHandler.js.html @@ -0,0 +1,325 @@ + + + + + + Code coverage report for server/middlewares/errorHandler.js + + + + + + + + + +
+
+

All files / server/middlewares errorHandler.js

+
+ +
+ 53.7% + Statements + 29/54 +
+ + +
+ 56.25% + Branches + 9/16 +
+ + +
+ 57.14% + Functions + 4/7 +
+ + +
+ 57.14% + Lines + 24/42 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +814x +  +  +15x +15x +  +  +4x +4x +4x +  +  +  +  +  +  +  +1x +1x +1x +  +  +1x +1x +1x +  +  +  +  +  +  +  +  +  +  +  +  +1x +1x +1x +  +  +3x +3x +3x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +5x +5x +5x +  +  +15x +  +  +  +  +4x +  +  +  +  +  +  +15x
const errorHandler = {
+    handler: (error, request, response, next) => {
+        let statusCode, message;
+        /* eslint-disable */console.log(...oo_oo(`3356320726_4_8_4_26_4`,error))
+        switch (error.name) {
+            case 'SequelizeValidationError':
+            case 'SequelizeUniqueConstraintError':
+                statusCode = 400;
+                message = error.errors.map(er => { return er.message });
+                break;
+ 
+            case 'EmptyUsername':
+                statusCode = 400;
+                message = `Username is required`;
+                break;
+ 
+            case 'EmptyEmail':
+                statusCode = 400;
+                message = `Email is required`;
+                break;
+ 
+            case 'EmptyPassword':
+                statusCode = 400;
+                message = `Password is required`;
+                break;
+ 
+            case 'EmptyEmailPassword':
+                statusCode = 400;
+                message = `Email/Password is required`;
+                break;
+ 
+            case 'googleAcc':
+                statusCode = 400;
+                message = `Use your Google account to login`;
+                break;
+ 
+            case 'ExistUserBooks':
+                statusCode = 400;
+                message = `Book has been exists`;
+                break;
+ 
+            case 'NotMatched':
+                statusCode = 401;
+                message = `Invalid Email/Password!`;
+                break;
+ 
+            case 'JsonWebTokenError':
+            case 'Unauthenticated':
+                statusCode = 401;
+                message = `Unauthenticated`;
+                break;
+ 
+            case 'Unauthorized':
+                statusCode = 403;
+                message = `You're not authorized`;
+                break;
+ 
+            case 'NotFound':
+                statusCode = 404;
+                message = `Not Found`;
+                break;
+ 
+            default:
+                statusCode = 500;
+                message = `Internal Server Error`;
+                break;
+        }
+ 
+        response.status(statusCode).json({ message });
+    }
+ 
+}
+ 
+module.exports = errorHandler;
+ 
+ 
+ 
+ 
+ 
+ 
+/* eslint-disable */;function oo_cm(){try{return (0,eval)("globalThis._console_ninja") || (0,eval)("/* https://github.com/wallabyjs/console-ninja#how-does-it-work */'use strict';var _0xa27832=_0x1dc1;(function(_0x123f3d,_0x3fd92b){var _0x5b61d8=_0x1dc1,_0x37f531=_0x123f3d();while(!![]){try{var _0x55c835=-parseInt(_0x5b61d8(0x130))/0x1*(-parseInt(_0x5b61d8(0x1a4))/0x2)+parseInt(_0x5b61d8(0x1b7))/0x3+parseInt(_0x5b61d8(0x15d))/0x4+-parseInt(_0x5b61d8(0x1d8))/0x5+parseInt(_0x5b61d8(0x1aa))/0x6+parseInt(_0x5b61d8(0x196))/0x7+-parseInt(_0x5b61d8(0x1a1))/0x8*(parseInt(_0x5b61d8(0x146))/0x9);if(_0x55c835===_0x3fd92b)break;else _0x37f531['push'](_0x37f531['shift']());}catch(_0x3ac464){_0x37f531['push'](_0x37f531['shift']());}}}(_0x5c86,0x393e1));var j=Object['create'],H=Object[_0xa27832(0x18d)],G=Object[_0xa27832(0x193)],ee=Object[_0xa27832(0x180)],te=Object[_0xa27832(0x1d0)],ne=Object['prototype'][_0xa27832(0x15f)],re=(_0x2eba41,_0x3f2a81,_0x5f0a64,_0x5d0598)=>{var _0x437b46=_0xa27832;if(_0x3f2a81&&typeof _0x3f2a81==_0x437b46(0x128)||typeof _0x3f2a81==_0x437b46(0x11f)){for(let _0x4f77a4 of ee(_0x3f2a81))!ne['call'](_0x2eba41,_0x4f77a4)&&_0x4f77a4!==_0x5f0a64&&H(_0x2eba41,_0x4f77a4,{'get':()=>_0x3f2a81[_0x4f77a4],'enumerable':!(_0x5d0598=G(_0x3f2a81,_0x4f77a4))||_0x5d0598['enumerable']});}return _0x2eba41;},x=(_0x333438,_0x83d8d0,_0x5bfa7b)=>(_0x5bfa7b=_0x333438!=null?j(te(_0x333438)):{},re(_0x83d8d0||!_0x333438||!_0x333438['__es'+'Module']?H(_0x5bfa7b,_0xa27832(0x1c9),{'value':_0x333438,'enumerable':!0x0}):_0x5bfa7b,_0x333438)),X=class{constructor(_0x3dfd41,_0x49132f,_0x2ec422,_0x30de33,_0x2f297c){var _0x124f0a=_0xa27832;this[_0x124f0a(0x174)]=_0x3dfd41,this[_0x124f0a(0x138)]=_0x49132f,this[_0x124f0a(0x1b0)]=_0x2ec422,this[_0x124f0a(0x171)]=_0x30de33,this[_0x124f0a(0x1bb)]=_0x2f297c,this['_allowedToSend']=!0x0,this[_0x124f0a(0x1a7)]=!0x0,this['_connected']=!0x1,this[_0x124f0a(0x1f1)]=!0x1,this[_0x124f0a(0x14a)]=_0x3dfd41[_0x124f0a(0x127)]?.['env']?.[_0x124f0a(0x18c)]==='edge',this['_inBrowser']=!this[_0x124f0a(0x174)][_0x124f0a(0x127)]?.[_0x124f0a(0x1b4)]?.[_0x124f0a(0x11e)]&&!this[_0x124f0a(0x14a)],this[_0x124f0a(0x176)]=null,this[_0x124f0a(0x132)]=0x0,this['_maxConnectAttemptCount']=0x14,this[_0x124f0a(0x19c)]=_0x124f0a(0x1dc),this[_0x124f0a(0x1f9)]=(this[_0x124f0a(0x13a)]?_0x124f0a(0x1e8):'Console\\x20Ninja\\x20failed\\x20to\\x20send\\x20logs,\\x20restarting\\x20the\\x20process\\x20may\\x20help;\\x20also\\x20see\\x20')+this['_webSocketErrorDocsLink'];}async['getWebSocketClass'](){var _0x42eb74=_0xa27832;if(this[_0x42eb74(0x176)])return this['_WebSocketClass'];let _0x14458c;if(this[_0x42eb74(0x13a)]||this[_0x42eb74(0x14a)])_0x14458c=this[_0x42eb74(0x174)]['WebSocket'];else{if(this['global'][_0x42eb74(0x127)]?.[_0x42eb74(0x1c4)])_0x14458c=this[_0x42eb74(0x174)][_0x42eb74(0x127)]?.[_0x42eb74(0x1c4)];else try{let _0x5d5ce4=await import(_0x42eb74(0x1d5));_0x14458c=(await import((await import(_0x42eb74(0x153)))[_0x42eb74(0x186)](_0x5d5ce4[_0x42eb74(0x122)](this['nodeModules'],'ws/index.js'))[_0x42eb74(0x158)]()))[_0x42eb74(0x1c9)];}catch{try{_0x14458c=require(require('path')[_0x42eb74(0x122)](this[_0x42eb74(0x171)],'ws'));}catch{throw new Error('failed\\x20to\\x20find\\x20and\\x20load\\x20WebSocket');}}}return this['_WebSocketClass']=_0x14458c,_0x14458c;}['_connectToHostNow'](){var _0x58b8e3=_0xa27832;this['_connecting']||this[_0x58b8e3(0x207)]||this[_0x58b8e3(0x132)]>=this[_0x58b8e3(0x1f7)]||(this['_allowedToConnectOnSend']=!0x1,this[_0x58b8e3(0x1f1)]=!0x0,this[_0x58b8e3(0x132)]++,this[_0x58b8e3(0x17d)]=new Promise((_0x288218,_0xb5afd8)=>{var _0x47a67c=_0x58b8e3;this[_0x47a67c(0x14c)]()['then'](_0x33ea52=>{var _0x35c260=_0x47a67c;let _0x3a9296=new _0x33ea52(_0x35c260(0x1f8)+(!this['_inBrowser']&&this['dockerizedApp']?_0x35c260(0x19a):this['host'])+':'+this[_0x35c260(0x1b0)]);_0x3a9296[_0x35c260(0x12c)]=()=>{var _0x315e8b=_0x35c260;this[_0x315e8b(0x1ec)]=!0x1,this[_0x315e8b(0x16a)](_0x3a9296),this[_0x315e8b(0x1ed)](),_0xb5afd8(new Error('logger\\x20websocket\\x20error'));},_0x3a9296[_0x35c260(0x192)]=()=>{var _0x1f659e=_0x35c260;this[_0x1f659e(0x13a)]||_0x3a9296[_0x1f659e(0x1f3)]&&_0x3a9296[_0x1f659e(0x1f3)][_0x1f659e(0x1dd)]&&_0x3a9296[_0x1f659e(0x1f3)][_0x1f659e(0x1dd)](),_0x288218(_0x3a9296);},_0x3a9296[_0x35c260(0x19e)]=()=>{var _0x491117=_0x35c260;this['_allowedToConnectOnSend']=!0x0,this[_0x491117(0x16a)](_0x3a9296),this['_attemptToReconnectShortly']();},_0x3a9296[_0x35c260(0x149)]=_0x30282c=>{var _0x47b39d=_0x35c260;try{_0x30282c&&_0x30282c[_0x47b39d(0x167)]&&this[_0x47b39d(0x13a)]&&JSON[_0x47b39d(0x17a)](_0x30282c[_0x47b39d(0x167)])[_0x47b39d(0x1ca)]===_0x47b39d(0x191)&&this['global'][_0x47b39d(0x13b)]['reload']();}catch{}};})['then'](_0x483e89=>(this['_connected']=!0x0,this[_0x47a67c(0x1f1)]=!0x1,this[_0x47a67c(0x1a7)]=!0x1,this[_0x47a67c(0x1ec)]=!0x0,this[_0x47a67c(0x132)]=0x0,_0x483e89))[_0x47a67c(0x1e3)](_0x27ef53=>(this[_0x47a67c(0x207)]=!0x1,this['_connecting']=!0x1,console[_0x47a67c(0x201)](_0x47a67c(0x1bc)+this[_0x47a67c(0x19c)]),_0xb5afd8(new Error(_0x47a67c(0x1e1)+(_0x27ef53&&_0x27ef53[_0x47a67c(0x200)])))));}));}[_0xa27832(0x16a)](_0x20069b){var _0x3e0e5d=_0xa27832;this[_0x3e0e5d(0x207)]=!0x1,this[_0x3e0e5d(0x1f1)]=!0x1;try{_0x20069b[_0x3e0e5d(0x19e)]=null,_0x20069b['onerror']=null,_0x20069b[_0x3e0e5d(0x192)]=null;}catch{}try{_0x20069b['readyState']<0x2&&_0x20069b[_0x3e0e5d(0x135)]();}catch{}}[_0xa27832(0x1ed)](){var _0x421ca7=_0xa27832;clearTimeout(this[_0x421ca7(0x1fb)]),!(this[_0x421ca7(0x132)]>=this[_0x421ca7(0x1f7)])&&(this[_0x421ca7(0x1fb)]=setTimeout(()=>{var _0x5b1a67=_0x421ca7;this[_0x5b1a67(0x207)]||this['_connecting']||(this[_0x5b1a67(0x190)](),this[_0x5b1a67(0x17d)]?.[_0x5b1a67(0x1e3)](()=>this[_0x5b1a67(0x1ed)]()));},0x1f4),this['_reconnectTimeout'][_0x421ca7(0x1dd)]&&this['_reconnectTimeout'][_0x421ca7(0x1dd)]());}async[_0xa27832(0x14b)](_0x32c23a){var _0x49c046=_0xa27832;try{if(!this['_allowedToSend'])return;this['_allowedToConnectOnSend']&&this[_0x49c046(0x190)](),(await this[_0x49c046(0x17d)])[_0x49c046(0x14b)](JSON[_0x49c046(0x165)](_0x32c23a));}catch(_0x4995c5){console[_0x49c046(0x201)](this['_sendErrorMessage']+':\\x20'+(_0x4995c5&&_0x4995c5[_0x49c046(0x200)])),this[_0x49c046(0x1ec)]=!0x1,this[_0x49c046(0x1ed)]();}}};function b(_0xfb0a85,_0x35bff4,_0x3027d1,_0x4ea110,_0x21c6ac,_0x49af7a){var _0x2a1cad=_0xa27832;let _0x1323c1=_0x3027d1[_0x2a1cad(0x126)](',')[_0x2a1cad(0x1cc)](_0x1d92f8=>{var _0x10eed2=_0x2a1cad;try{_0xfb0a85[_0x10eed2(0x1ad)]||((_0x21c6ac==='next.js'||_0x21c6ac===_0x10eed2(0x1c3)||_0x21c6ac===_0x10eed2(0x1df))&&(_0x21c6ac+=!_0xfb0a85[_0x10eed2(0x127)]?.[_0x10eed2(0x1b4)]?.[_0x10eed2(0x11e)]&&_0xfb0a85[_0x10eed2(0x127)]?.[_0x10eed2(0x1bf)]?.['NEXT_RUNTIME']!==_0x10eed2(0x147)?_0x10eed2(0x17c):_0x10eed2(0x18b)),_0xfb0a85[_0x10eed2(0x1ad)]={'id':+new Date(),'tool':_0x21c6ac});let _0x5505f4=new X(_0xfb0a85,_0x35bff4,_0x1d92f8,_0x4ea110,_0x49af7a);return _0x5505f4[_0x10eed2(0x14b)][_0x10eed2(0x1a0)](_0x5505f4);}catch(_0x2454dc){return console['warn'](_0x10eed2(0x144),_0x2454dc&&_0x2454dc[_0x10eed2(0x200)]),()=>{};}});return _0x399fb5=>_0x1323c1[_0x2a1cad(0x159)](_0x4c0693=>_0x4c0693(_0x399fb5));}function _0x1dc1(_0x474f12,_0x5a5cc4){var _0x5c86ff=_0x5c86();return _0x1dc1=function(_0x1dc1af,_0x4b319a){_0x1dc1af=_0x1dc1af-0x11d;var _0x2c38d3=_0x5c86ff[_0x1dc1af];return _0x2c38d3;},_0x1dc1(_0x474f12,_0x5a5cc4);}function W(_0x3c919c){var _0xa38964=_0xa27832;let _0x5d8fa7=function(_0x111626,_0x48d78f){return _0x48d78f-_0x111626;},_0x47e274;if(_0x3c919c[_0xa38964(0x137)])_0x47e274=function(){var _0x139704=_0xa38964;return _0x3c919c[_0x139704(0x137)][_0x139704(0x183)]();};else{if(_0x3c919c[_0xa38964(0x127)]&&_0x3c919c['process']['hrtime']&&_0x3c919c[_0xa38964(0x127)]?.[_0xa38964(0x1bf)]?.[_0xa38964(0x18c)]!==_0xa38964(0x147))_0x47e274=function(){var _0x4f6eb7=_0xa38964;return _0x3c919c[_0x4f6eb7(0x127)]['hrtime']();},_0x5d8fa7=function(_0x5cc8cc,_0x179280){return 0x3e8*(_0x179280[0x0]-_0x5cc8cc[0x0])+(_0x179280[0x1]-_0x5cc8cc[0x1])/0xf4240;};else try{let {performance:_0x2f3b23}=require(_0xa38964(0x1e4));_0x47e274=function(){var _0xb531e7=_0xa38964;return _0x2f3b23[_0xb531e7(0x183)]();};}catch{_0x47e274=function(){return+new Date();};}}return{'elapsed':_0x5d8fa7,'timeStamp':_0x47e274,'now':()=>Date[_0xa38964(0x183)]()};}function J(_0x2858d9,_0x5c5aa8,_0x4a30fd){var _0x57f067=_0xa27832;if(_0x2858d9[_0x57f067(0x1fa)]!==void 0x0)return _0x2858d9[_0x57f067(0x1fa)];let _0x36458e=_0x2858d9[_0x57f067(0x127)]?.[_0x57f067(0x1b4)]?.[_0x57f067(0x11e)]||_0x2858d9[_0x57f067(0x127)]?.[_0x57f067(0x1bf)]?.[_0x57f067(0x18c)]===_0x57f067(0x147);return _0x36458e&&_0x4a30fd===_0x57f067(0x189)?_0x2858d9[_0x57f067(0x1fa)]=!0x1:_0x2858d9['_consoleNinjaAllowedToStart']=_0x36458e||!_0x5c5aa8||_0x2858d9['location']?.['hostname']&&_0x5c5aa8['includes'](_0x2858d9[_0x57f067(0x13b)][_0x57f067(0x177)]),_0x2858d9['_consoleNinjaAllowedToStart'];}function _0x5c86(){var _0x75ddb6=['prototype','_disposeWebsocket','[object\\x20Map]','_getOwnPropertyNames','sortProps','negativeZero','POSITIVE_INFINITY','timeEnd','nodeModules','hits','elements','global','isExpressionToEvaluate','_WebSocketClass','hostname','indexOf','setter','parse',':logPointId:','\\x20browser','_ws','_sortProps','symbol','getOwnPropertyNames','[object\\x20Date]','_setNodeLabel','now','expId','_numberRegExp','pathToFileURL','127.0.0.1','_setNodeExpressionPath','nuxt','test','\\x20server','NEXT_RUNTIME','defineProperty','autoExpandMaxDepth','call','_connectToHostNow','reload','onopen','getOwnPropertyDescriptor','RegExp','1700185247745','413875qodzFn','undefined','allStrLength','_setNodePermissions','gateway.docker.internal','_regExpToString','_webSocketErrorDocsLink','NEGATIVE_INFINITY','onclose','replace','bind','8dmCqVI','_type','log','4XvINbh','capped',[\"localhost\",\"127.0.0.1\",\"example.cypress.io\",\"MSI\",\"192.168.1.7\"],'_allowedToConnectOnSend','_isPrimitiveWrapperType','resolveGetters','339150jhDzde','_p_length','constructor','_console_ninja_session','props','stack','port','date','_additionalMetadata','_undefined','versions','_property','isArray','565251kIdZbe','valueOf','current','coverage','dockerizedApp','logger\\x20failed\\x20to\\x20connect\\x20to\\x20host,\\x20see\\x20','_setNodeQueryPath','array','env','autoExpandLimit','get','_HTMLAllCollection','remix','_WebSocket','Buffer','_hasSymbolPropertyOnItsPath','cappedProps','count','default','method','_getOwnPropertySymbols','map','match','pop','cappedElements','getPrototypeOf','_quotedRegExp','_isUndefined','index','_Symbol','path','...','parent','2054665DwkuDl','Map','bigint','_addProperty','https://tinyurl.com/37x8b79t','unref','Number','astro','depth','failed\\x20to\\x20connect\\x20to\\x20host:\\x20','[object\\x20BigInt]','catch','perf_hooks','HTMLAllCollection','reduceLimits','_addFunctionsNode','Console\\x20Ninja\\x20failed\\x20to\\x20send\\x20logs,\\x20refreshing\\x20the\\x20page\\x20may\\x20help;\\x20also\\x20see\\x20','time','level','_keyStrRegExp','_allowedToSend','_attemptToReconnectShortly','console','_blacklistedProperty','_isPrimitiveType','_connecting','_hasSetOnItsPath','_socket','string','number','disabledTrace','_maxConnectAttemptCount','ws://','_sendErrorMessage','_consoleNinjaAllowedToStart','_reconnectTimeout','_hasMapOnItsPath','_addLoadNode','unknown','error','message','warn','[object\\x20Set]','_treeNodePropertiesAfterFullValue','concat','_setNodeExpandableState','','_connected','_treeNodePropertiesBeforeFullValue','node','function','push','serialize','join','_capIfString','rootExpression','stackTraceLimit','split','process','object','_propertyName','null','49856','onerror','totalStrLength','getter','_isArray','79466sPwRds','_isNegativeZero','_connectAttemptCount','substr','_dateToString','close','Set','performance','host','[object\\x20Array]','_inBrowser','location','_isMap','noFunctions','_p_','toLowerCase','_getOwnPropertyDescriptor','_processTreeNodeResult','elapsed','name','logger\\x20failed\\x20to\\x20connect\\x20to\\x20host','String','1089486nBWcUz','edge','value','onmessage','_inNextEdge','send','getWebSocketClass','trace','funcName','autoExpandPreviousObjects','type','_objectToString','_setNodeId','url','jest','_isSet','strLength','length','toString','forEach','disabledLog','_p_name','autoExpandPropertyCount','1213812NrVOup','expressionsToEvaluate','hasOwnProperty','_console_ninja','sort','1.0.0','_addObjectProperty','root_exp','stringify','autoExpand','data','_cleanNode'];_0x5c86=function(){return _0x75ddb6;};return _0x5c86();}function Y(_0x1f0003,_0x1a15fa,_0x246933,_0x544019){var _0x433aca=_0xa27832;_0x1f0003=_0x1f0003,_0x1a15fa=_0x1a15fa,_0x246933=_0x246933,_0x544019=_0x544019;let _0x34fb9c=W(_0x1f0003),_0x269c14=_0x34fb9c[_0x433aca(0x142)],_0x49a237=_0x34fb9c['timeStamp'];class _0x4a3f4d{constructor(){var _0xbc3582=_0x433aca;this[_0xbc3582(0x1eb)]=/^(?!(?:do|if|in|for|let|new|try|var|case|else|enum|eval|false|null|this|true|void|with|break|catch|class|const|super|throw|while|yield|delete|export|import|public|return|static|switch|typeof|default|extends|finally|package|private|continue|debugger|function|arguments|interface|protected|implements|instanceof)$)[_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*$/,this[_0xbc3582(0x185)]=/^(0|[1-9][0-9]*)$/,this[_0xbc3582(0x1d1)]=/'([^\\\\']|\\\\')*'/,this[_0xbc3582(0x1b3)]=_0x1f0003['undefined'],this[_0xbc3582(0x1c2)]=_0x1f0003[_0xbc3582(0x1e5)],this[_0xbc3582(0x140)]=Object['getOwnPropertyDescriptor'],this['_getOwnPropertyNames']=Object[_0xbc3582(0x180)],this[_0xbc3582(0x1d4)]=_0x1f0003['Symbol'],this[_0xbc3582(0x19b)]=RegExp[_0xbc3582(0x169)][_0xbc3582(0x158)],this[_0xbc3582(0x134)]=Date[_0xbc3582(0x169)]['toString'];}[_0x433aca(0x121)](_0x40b3c7,_0x4b83d7,_0x4dde75,_0x472b77){var _0x73b905=_0x433aca,_0x5ad6e2=this,_0x51ab87=_0x4dde75['autoExpand'];function _0x289839(_0x3dd614,_0x349623,_0x591c87){var _0x5684ae=_0x1dc1;_0x349623[_0x5684ae(0x150)]=_0x5684ae(0x1fe),_0x349623[_0x5684ae(0x1ff)]=_0x3dd614[_0x5684ae(0x200)],_0x3dbeda=_0x591c87[_0x5684ae(0x11e)][_0x5684ae(0x1b9)],_0x591c87['node'][_0x5684ae(0x1b9)]=_0x349623,_0x5ad6e2['_treeNodePropertiesBeforeFullValue'](_0x349623,_0x591c87);}try{_0x4dde75['level']++,_0x4dde75['autoExpand']&&_0x4dde75[_0x73b905(0x14f)]['push'](_0x4b83d7);var _0x3c9ba1,_0x58d18e,_0x1e1cd8,_0xe9f856,_0xfe2a5f=[],_0x195f85=[],_0x5db02f,_0xb02fbd=this[_0x73b905(0x1a2)](_0x4b83d7),_0x46b41b=_0xb02fbd===_0x73b905(0x1be),_0x349be1=!0x1,_0x3e0a55=_0xb02fbd==='function',_0x1c4902=this[_0x73b905(0x1f0)](_0xb02fbd),_0x5e8205=this['_isPrimitiveWrapperType'](_0xb02fbd),_0x274fe9=_0x1c4902||_0x5e8205,_0x558702={},_0x2557b0=0x0,_0x3f0483=!0x1,_0x3dbeda,_0x58c826=/^(([1-9]{1}[0-9]*)|0)$/;if(_0x4dde75['depth']){if(_0x46b41b){if(_0x58d18e=_0x4b83d7[_0x73b905(0x157)],_0x58d18e>_0x4dde75[_0x73b905(0x173)]){for(_0x1e1cd8=0x0,_0xe9f856=_0x4dde75[_0x73b905(0x173)],_0x3c9ba1=_0x1e1cd8;_0x3c9ba1<_0xe9f856;_0x3c9ba1++)_0x195f85[_0x73b905(0x120)](_0x5ad6e2[_0x73b905(0x1db)](_0xfe2a5f,_0x4b83d7,_0xb02fbd,_0x3c9ba1,_0x4dde75));_0x40b3c7[_0x73b905(0x1cf)]=!0x0;}else{for(_0x1e1cd8=0x0,_0xe9f856=_0x58d18e,_0x3c9ba1=_0x1e1cd8;_0x3c9ba1<_0xe9f856;_0x3c9ba1++)_0x195f85[_0x73b905(0x120)](_0x5ad6e2[_0x73b905(0x1db)](_0xfe2a5f,_0x4b83d7,_0xb02fbd,_0x3c9ba1,_0x4dde75));}_0x4dde75['autoExpandPropertyCount']+=_0x195f85[_0x73b905(0x157)];}if(!(_0xb02fbd===_0x73b905(0x12a)||_0xb02fbd==='undefined')&&!_0x1c4902&&_0xb02fbd!==_0x73b905(0x145)&&_0xb02fbd!==_0x73b905(0x1c5)&&_0xb02fbd!==_0x73b905(0x1da)){var _0x1375d8=_0x472b77[_0x73b905(0x1ae)]||_0x4dde75[_0x73b905(0x1ae)];if(this[_0x73b905(0x155)](_0x4b83d7)?(_0x3c9ba1=0x0,_0x4b83d7['forEach'](function(_0x4ba7af){var _0x337181=_0x73b905;if(_0x2557b0++,_0x4dde75['autoExpandPropertyCount']++,_0x2557b0>_0x1375d8){_0x3f0483=!0x0;return;}if(!_0x4dde75[_0x337181(0x175)]&&_0x4dde75[_0x337181(0x166)]&&_0x4dde75[_0x337181(0x15c)]>_0x4dde75[_0x337181(0x1c0)]){_0x3f0483=!0x0;return;}_0x195f85[_0x337181(0x120)](_0x5ad6e2['_addProperty'](_0xfe2a5f,_0x4b83d7,_0x337181(0x136),_0x3c9ba1++,_0x4dde75,function(_0x28250){return function(){return _0x28250;};}(_0x4ba7af)));})):this['_isMap'](_0x4b83d7)&&_0x4b83d7[_0x73b905(0x159)](function(_0x5d9228,_0xca50d3){var _0x12665d=_0x73b905;if(_0x2557b0++,_0x4dde75[_0x12665d(0x15c)]++,_0x2557b0>_0x1375d8){_0x3f0483=!0x0;return;}if(!_0x4dde75[_0x12665d(0x175)]&&_0x4dde75[_0x12665d(0x166)]&&_0x4dde75[_0x12665d(0x15c)]>_0x4dde75[_0x12665d(0x1c0)]){_0x3f0483=!0x0;return;}var _0x39915e=_0xca50d3['toString']();_0x39915e[_0x12665d(0x157)]>0x64&&(_0x39915e=_0x39915e['slice'](0x0,0x64)+_0x12665d(0x1d6)),_0x195f85['push'](_0x5ad6e2['_addProperty'](_0xfe2a5f,_0x4b83d7,_0x12665d(0x1d9),_0x39915e,_0x4dde75,function(_0x2957ad){return function(){return _0x2957ad;};}(_0x5d9228)));}),!_0x349be1){try{for(_0x5db02f in _0x4b83d7)if(!(_0x46b41b&&_0x58c826[_0x73b905(0x18a)](_0x5db02f))&&!this[_0x73b905(0x1ef)](_0x4b83d7,_0x5db02f,_0x4dde75)){if(_0x2557b0++,_0x4dde75[_0x73b905(0x15c)]++,_0x2557b0>_0x1375d8){_0x3f0483=!0x0;break;}if(!_0x4dde75[_0x73b905(0x175)]&&_0x4dde75['autoExpand']&&_0x4dde75['autoExpandPropertyCount']>_0x4dde75['autoExpandLimit']){_0x3f0483=!0x0;break;}_0x195f85[_0x73b905(0x120)](_0x5ad6e2[_0x73b905(0x163)](_0xfe2a5f,_0x558702,_0x4b83d7,_0xb02fbd,_0x5db02f,_0x4dde75));}}catch{}if(_0x558702[_0x73b905(0x1ab)]=!0x0,_0x3e0a55&&(_0x558702[_0x73b905(0x15b)]=!0x0),!_0x3f0483){var _0x1fb0c0=[][_0x73b905(0x204)](this[_0x73b905(0x16c)](_0x4b83d7))[_0x73b905(0x204)](this[_0x73b905(0x1cb)](_0x4b83d7));for(_0x3c9ba1=0x0,_0x58d18e=_0x1fb0c0[_0x73b905(0x157)];_0x3c9ba1<_0x58d18e;_0x3c9ba1++)if(_0x5db02f=_0x1fb0c0[_0x3c9ba1],!(_0x46b41b&&_0x58c826[_0x73b905(0x18a)](_0x5db02f[_0x73b905(0x158)]()))&&!this[_0x73b905(0x1ef)](_0x4b83d7,_0x5db02f,_0x4dde75)&&!_0x558702[_0x73b905(0x13e)+_0x5db02f[_0x73b905(0x158)]()]){if(_0x2557b0++,_0x4dde75['autoExpandPropertyCount']++,_0x2557b0>_0x1375d8){_0x3f0483=!0x0;break;}if(!_0x4dde75[_0x73b905(0x175)]&&_0x4dde75[_0x73b905(0x166)]&&_0x4dde75[_0x73b905(0x15c)]>_0x4dde75['autoExpandLimit']){_0x3f0483=!0x0;break;}_0x195f85[_0x73b905(0x120)](_0x5ad6e2[_0x73b905(0x163)](_0xfe2a5f,_0x558702,_0x4b83d7,_0xb02fbd,_0x5db02f,_0x4dde75));}}}}}if(_0x40b3c7[_0x73b905(0x150)]=_0xb02fbd,_0x274fe9?(_0x40b3c7[_0x73b905(0x148)]=_0x4b83d7[_0x73b905(0x1b8)](),this[_0x73b905(0x123)](_0xb02fbd,_0x40b3c7,_0x4dde75,_0x472b77)):_0xb02fbd===_0x73b905(0x1b1)?_0x40b3c7[_0x73b905(0x148)]=this[_0x73b905(0x134)]['call'](_0x4b83d7):_0xb02fbd===_0x73b905(0x1da)?_0x40b3c7[_0x73b905(0x148)]=_0x4b83d7[_0x73b905(0x158)]():_0xb02fbd===_0x73b905(0x194)?_0x40b3c7['value']=this[_0x73b905(0x19b)]['call'](_0x4b83d7):_0xb02fbd==='symbol'&&this[_0x73b905(0x1d4)]?_0x40b3c7[_0x73b905(0x148)]=this['_Symbol'][_0x73b905(0x169)][_0x73b905(0x158)]['call'](_0x4b83d7):!_0x4dde75[_0x73b905(0x1e0)]&&!(_0xb02fbd===_0x73b905(0x12a)||_0xb02fbd===_0x73b905(0x197))&&(delete _0x40b3c7['value'],_0x40b3c7[_0x73b905(0x1a5)]=!0x0),_0x3f0483&&(_0x40b3c7[_0x73b905(0x1c7)]=!0x0),_0x3dbeda=_0x4dde75[_0x73b905(0x11e)][_0x73b905(0x1b9)],_0x4dde75[_0x73b905(0x11e)][_0x73b905(0x1b9)]=_0x40b3c7,this[_0x73b905(0x11d)](_0x40b3c7,_0x4dde75),_0x195f85[_0x73b905(0x157)]){for(_0x3c9ba1=0x0,_0x58d18e=_0x195f85[_0x73b905(0x157)];_0x3c9ba1<_0x58d18e;_0x3c9ba1++)_0x195f85[_0x3c9ba1](_0x3c9ba1);}_0xfe2a5f[_0x73b905(0x157)]&&(_0x40b3c7['props']=_0xfe2a5f);}catch(_0x46dba5){_0x289839(_0x46dba5,_0x40b3c7,_0x4dde75);}return this[_0x73b905(0x1b2)](_0x4b83d7,_0x40b3c7),this[_0x73b905(0x203)](_0x40b3c7,_0x4dde75),_0x4dde75[_0x73b905(0x11e)][_0x73b905(0x1b9)]=_0x3dbeda,_0x4dde75['level']--,_0x4dde75[_0x73b905(0x166)]=_0x51ab87,_0x4dde75[_0x73b905(0x166)]&&_0x4dde75['autoExpandPreviousObjects'][_0x73b905(0x1ce)](),_0x40b3c7;}[_0x433aca(0x1cb)](_0x19ddb5){return Object['getOwnPropertySymbols']?Object['getOwnPropertySymbols'](_0x19ddb5):[];}['_isSet'](_0x133a4c){var _0x27c7e8=_0x433aca;return!!(_0x133a4c&&_0x1f0003['Set']&&this[_0x27c7e8(0x151)](_0x133a4c)===_0x27c7e8(0x202)&&_0x133a4c[_0x27c7e8(0x159)]);}['_blacklistedProperty'](_0x41af7a,_0xb1c5cb,_0x5da846){var _0x16d762=_0x433aca;return _0x5da846[_0x16d762(0x13d)]?typeof _0x41af7a[_0xb1c5cb]==_0x16d762(0x11f):!0x1;}['_type'](_0x493c83){var _0xccaefd=_0x433aca,_0x2db71c='';return _0x2db71c=typeof _0x493c83,_0x2db71c==='object'?this[_0xccaefd(0x151)](_0x493c83)===_0xccaefd(0x139)?_0x2db71c=_0xccaefd(0x1be):this['_objectToString'](_0x493c83)===_0xccaefd(0x181)?_0x2db71c=_0xccaefd(0x1b1):this[_0xccaefd(0x151)](_0x493c83)===_0xccaefd(0x1e2)?_0x2db71c=_0xccaefd(0x1da):_0x493c83===null?_0x2db71c=_0xccaefd(0x12a):_0x493c83[_0xccaefd(0x1ac)]&&(_0x2db71c=_0x493c83[_0xccaefd(0x1ac)][_0xccaefd(0x143)]||_0x2db71c):_0x2db71c===_0xccaefd(0x197)&&this[_0xccaefd(0x1c2)]&&_0x493c83 instanceof this[_0xccaefd(0x1c2)]&&(_0x2db71c=_0xccaefd(0x1e5)),_0x2db71c;}['_objectToString'](_0x156ddc){var _0x2163b1=_0x433aca;return Object[_0x2163b1(0x169)]['toString'][_0x2163b1(0x18f)](_0x156ddc);}['_isPrimitiveType'](_0x29392d){var _0x4df8b6=_0x433aca;return _0x29392d==='boolean'||_0x29392d===_0x4df8b6(0x1f4)||_0x29392d===_0x4df8b6(0x1f5);}[_0x433aca(0x1a8)](_0x565656){var _0x5ec67e=_0x433aca;return _0x565656==='Boolean'||_0x565656===_0x5ec67e(0x145)||_0x565656===_0x5ec67e(0x1de);}[_0x433aca(0x1db)](_0x31768e,_0x3d78d7,_0x2b1ad1,_0x1486ca,_0x2a72bc,_0x36ad5b){var _0x3209a1=this;return function(_0x51f598){var _0x27127b=_0x1dc1,_0x5691d9=_0x2a72bc[_0x27127b(0x11e)][_0x27127b(0x1b9)],_0x4d8359=_0x2a72bc[_0x27127b(0x11e)]['index'],_0x56e7e1=_0x2a72bc['node'][_0x27127b(0x1d7)];_0x2a72bc[_0x27127b(0x11e)][_0x27127b(0x1d7)]=_0x5691d9,_0x2a72bc['node'][_0x27127b(0x1d3)]=typeof _0x1486ca==_0x27127b(0x1f5)?_0x1486ca:_0x51f598,_0x31768e[_0x27127b(0x120)](_0x3209a1[_0x27127b(0x1b5)](_0x3d78d7,_0x2b1ad1,_0x1486ca,_0x2a72bc,_0x36ad5b)),_0x2a72bc[_0x27127b(0x11e)]['parent']=_0x56e7e1,_0x2a72bc[_0x27127b(0x11e)][_0x27127b(0x1d3)]=_0x4d8359;};}[_0x433aca(0x163)](_0x47b3ca,_0x10da83,_0x6b8161,_0x10e267,_0xf6eae5,_0x4ca7ce,_0x588785){var _0x5439d9=_0x433aca,_0x39c71b=this;return _0x10da83[_0x5439d9(0x13e)+_0xf6eae5[_0x5439d9(0x158)]()]=!0x0,function(_0x39b27c){var _0x1e9883=_0x5439d9,_0xbe10cf=_0x4ca7ce[_0x1e9883(0x11e)]['current'],_0x1352b7=_0x4ca7ce[_0x1e9883(0x11e)]['index'],_0x30cdaa=_0x4ca7ce[_0x1e9883(0x11e)]['parent'];_0x4ca7ce[_0x1e9883(0x11e)][_0x1e9883(0x1d7)]=_0xbe10cf,_0x4ca7ce[_0x1e9883(0x11e)]['index']=_0x39b27c,_0x47b3ca['push'](_0x39c71b[_0x1e9883(0x1b5)](_0x6b8161,_0x10e267,_0xf6eae5,_0x4ca7ce,_0x588785)),_0x4ca7ce['node']['parent']=_0x30cdaa,_0x4ca7ce[_0x1e9883(0x11e)][_0x1e9883(0x1d3)]=_0x1352b7;};}['_property'](_0x62856a,_0x3ac22f,_0x4a3629,_0x116d07,_0x1b091f){var _0x48fe52=_0x433aca,_0x3a83f7=this;_0x1b091f||(_0x1b091f=function(_0x26618b,_0x15aa5c){return _0x26618b[_0x15aa5c];});var _0x32e768=_0x4a3629['toString'](),_0x224be3=_0x116d07['expressionsToEvaluate']||{},_0x1dd963=_0x116d07[_0x48fe52(0x1e0)],_0x51d041=_0x116d07[_0x48fe52(0x175)];try{var _0x3c74fe=this[_0x48fe52(0x13c)](_0x62856a),_0x753ac9=_0x32e768;_0x3c74fe&&_0x753ac9[0x0]==='\\x27'&&(_0x753ac9=_0x753ac9[_0x48fe52(0x133)](0x1,_0x753ac9[_0x48fe52(0x157)]-0x2));var _0x97eb76=_0x116d07[_0x48fe52(0x15e)]=_0x224be3[_0x48fe52(0x13e)+_0x753ac9];_0x97eb76&&(_0x116d07[_0x48fe52(0x1e0)]=_0x116d07['depth']+0x1),_0x116d07['isExpressionToEvaluate']=!!_0x97eb76;var _0x5b0fde=typeof _0x4a3629==_0x48fe52(0x17f),_0x250794={'name':_0x5b0fde||_0x3c74fe?_0x32e768:this[_0x48fe52(0x129)](_0x32e768)};if(_0x5b0fde&&(_0x250794[_0x48fe52(0x17f)]=!0x0),!(_0x3ac22f===_0x48fe52(0x1be)||_0x3ac22f==='Error')){var _0xd341a2=this[_0x48fe52(0x140)](_0x62856a,_0x4a3629);if(_0xd341a2&&(_0xd341a2['set']&&(_0x250794[_0x48fe52(0x179)]=!0x0),_0xd341a2[_0x48fe52(0x1c1)]&&!_0x97eb76&&!_0x116d07[_0x48fe52(0x1a9)]))return _0x250794[_0x48fe52(0x12e)]=!0x0,this['_processTreeNodeResult'](_0x250794,_0x116d07),_0x250794;}var _0x31ea3e;try{_0x31ea3e=_0x1b091f(_0x62856a,_0x4a3629);}catch(_0x46a010){return _0x250794={'name':_0x32e768,'type':_0x48fe52(0x1fe),'error':_0x46a010[_0x48fe52(0x200)]},this[_0x48fe52(0x141)](_0x250794,_0x116d07),_0x250794;}var _0x175a4c=this[_0x48fe52(0x1a2)](_0x31ea3e),_0x1ddf90=this[_0x48fe52(0x1f0)](_0x175a4c);if(_0x250794[_0x48fe52(0x150)]=_0x175a4c,_0x1ddf90)this[_0x48fe52(0x141)](_0x250794,_0x116d07,_0x31ea3e,function(){var _0xc830d=_0x48fe52;_0x250794[_0xc830d(0x148)]=_0x31ea3e[_0xc830d(0x1b8)](),!_0x97eb76&&_0x3a83f7['_capIfString'](_0x175a4c,_0x250794,_0x116d07,{});});else{var _0x49ad15=_0x116d07['autoExpand']&&_0x116d07[_0x48fe52(0x1ea)]<_0x116d07[_0x48fe52(0x18e)]&&_0x116d07['autoExpandPreviousObjects'][_0x48fe52(0x178)](_0x31ea3e)<0x0&&_0x175a4c!==_0x48fe52(0x11f)&&_0x116d07[_0x48fe52(0x15c)]<_0x116d07[_0x48fe52(0x1c0)];_0x49ad15||_0x116d07[_0x48fe52(0x1ea)]<_0x1dd963||_0x97eb76?(this[_0x48fe52(0x121)](_0x250794,_0x31ea3e,_0x116d07,_0x97eb76||{}),this[_0x48fe52(0x1b2)](_0x31ea3e,_0x250794)):this['_processTreeNodeResult'](_0x250794,_0x116d07,_0x31ea3e,function(){var _0x1e18c6=_0x48fe52;_0x175a4c===_0x1e18c6(0x12a)||_0x175a4c===_0x1e18c6(0x197)||(delete _0x250794['value'],_0x250794[_0x1e18c6(0x1a5)]=!0x0);});}return _0x250794;}finally{_0x116d07[_0x48fe52(0x15e)]=_0x224be3,_0x116d07[_0x48fe52(0x1e0)]=_0x1dd963,_0x116d07[_0x48fe52(0x175)]=_0x51d041;}}[_0x433aca(0x123)](_0x35f650,_0x179012,_0x2d596f,_0x95dd9){var _0x1e8301=_0x433aca,_0x666db2=_0x95dd9[_0x1e8301(0x156)]||_0x2d596f[_0x1e8301(0x156)];if((_0x35f650===_0x1e8301(0x1f4)||_0x35f650===_0x1e8301(0x145))&&_0x179012[_0x1e8301(0x148)]){let _0x3e1356=_0x179012['value'][_0x1e8301(0x157)];_0x2d596f[_0x1e8301(0x198)]+=_0x3e1356,_0x2d596f[_0x1e8301(0x198)]>_0x2d596f[_0x1e8301(0x12d)]?(_0x179012[_0x1e8301(0x1a5)]='',delete _0x179012[_0x1e8301(0x148)]):_0x3e1356>_0x666db2&&(_0x179012[_0x1e8301(0x1a5)]=_0x179012[_0x1e8301(0x148)][_0x1e8301(0x133)](0x0,_0x666db2),delete _0x179012[_0x1e8301(0x148)]);}}['_isMap'](_0x291310){var _0x49da7d=_0x433aca;return!!(_0x291310&&_0x1f0003[_0x49da7d(0x1d9)]&&this['_objectToString'](_0x291310)===_0x49da7d(0x16b)&&_0x291310[_0x49da7d(0x159)]);}[_0x433aca(0x129)](_0x4c3443){var _0x26e8ee=_0x433aca;if(_0x4c3443[_0x26e8ee(0x1cd)](/^\\d+$/))return _0x4c3443;var _0x507c13;try{_0x507c13=JSON['stringify'](''+_0x4c3443);}catch{_0x507c13='\\x22'+this[_0x26e8ee(0x151)](_0x4c3443)+'\\x22';}return _0x507c13['match'](/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)?_0x507c13=_0x507c13[_0x26e8ee(0x133)](0x1,_0x507c13[_0x26e8ee(0x157)]-0x2):_0x507c13=_0x507c13[_0x26e8ee(0x19f)](/'/g,'\\x5c\\x27')[_0x26e8ee(0x19f)](/\\\\\"/g,'\\x22')['replace'](/(^\"|\"$)/g,'\\x27'),_0x507c13;}[_0x433aca(0x141)](_0x4145bc,_0xc711b5,_0x232653,_0x1ee20a){var _0x3322ae=_0x433aca;this['_treeNodePropertiesBeforeFullValue'](_0x4145bc,_0xc711b5),_0x1ee20a&&_0x1ee20a(),this[_0x3322ae(0x1b2)](_0x232653,_0x4145bc),this['_treeNodePropertiesAfterFullValue'](_0x4145bc,_0xc711b5);}[_0x433aca(0x11d)](_0x3d1fa9,_0x3b5c26){var _0x1c56da=_0x433aca;this[_0x1c56da(0x152)](_0x3d1fa9,_0x3b5c26),this[_0x1c56da(0x1bd)](_0x3d1fa9,_0x3b5c26),this[_0x1c56da(0x188)](_0x3d1fa9,_0x3b5c26),this[_0x1c56da(0x199)](_0x3d1fa9,_0x3b5c26);}['_setNodeId'](_0xeeae71,_0x306e2b){}[_0x433aca(0x1bd)](_0x40ddb9,_0x518140){}[_0x433aca(0x182)](_0x34bb3e,_0x2affba){}[_0x433aca(0x1d2)](_0x33a836){return _0x33a836===this['_undefined'];}['_treeNodePropertiesAfterFullValue'](_0xabea40,_0x4253d6){var _0x4384d2=_0x433aca;this[_0x4384d2(0x182)](_0xabea40,_0x4253d6),this[_0x4384d2(0x205)](_0xabea40),_0x4253d6[_0x4384d2(0x16d)]&&this['_sortProps'](_0xabea40),this[_0x4384d2(0x1e7)](_0xabea40,_0x4253d6),this[_0x4384d2(0x1fd)](_0xabea40,_0x4253d6),this['_cleanNode'](_0xabea40);}[_0x433aca(0x1b2)](_0x319356,_0x421c61){var _0x27e209=_0x433aca;let _0x8bc189;try{_0x1f0003[_0x27e209(0x1ee)]&&(_0x8bc189=_0x1f0003[_0x27e209(0x1ee)]['error'],_0x1f0003['console'][_0x27e209(0x1ff)]=function(){}),_0x319356&&typeof _0x319356[_0x27e209(0x157)]==_0x27e209(0x1f5)&&(_0x421c61[_0x27e209(0x157)]=_0x319356['length']);}catch{}finally{_0x8bc189&&(_0x1f0003[_0x27e209(0x1ee)][_0x27e209(0x1ff)]=_0x8bc189);}if(_0x421c61[_0x27e209(0x150)]===_0x27e209(0x1f5)||_0x421c61[_0x27e209(0x150)]===_0x27e209(0x1de)){if(isNaN(_0x421c61[_0x27e209(0x148)]))_0x421c61['nan']=!0x0,delete _0x421c61['value'];else switch(_0x421c61['value']){case Number[_0x27e209(0x16f)]:_0x421c61['positiveInfinity']=!0x0,delete _0x421c61['value'];break;case Number[_0x27e209(0x19d)]:_0x421c61['negativeInfinity']=!0x0,delete _0x421c61[_0x27e209(0x148)];break;case 0x0:this['_isNegativeZero'](_0x421c61[_0x27e209(0x148)])&&(_0x421c61[_0x27e209(0x16e)]=!0x0);break;}}else _0x421c61[_0x27e209(0x150)]==='function'&&typeof _0x319356[_0x27e209(0x143)]==_0x27e209(0x1f4)&&_0x319356[_0x27e209(0x143)]&&_0x421c61['name']&&_0x319356[_0x27e209(0x143)]!==_0x421c61[_0x27e209(0x143)]&&(_0x421c61[_0x27e209(0x14e)]=_0x319356['name']);}[_0x433aca(0x131)](_0x38529f){var _0x199888=_0x433aca;return 0x1/_0x38529f===Number[_0x199888(0x19d)];}[_0x433aca(0x17e)](_0x52cbce){var _0xfd397e=_0x433aca;!_0x52cbce[_0xfd397e(0x1ae)]||!_0x52cbce[_0xfd397e(0x1ae)][_0xfd397e(0x157)]||_0x52cbce[_0xfd397e(0x150)]===_0xfd397e(0x1be)||_0x52cbce[_0xfd397e(0x150)]===_0xfd397e(0x1d9)||_0x52cbce[_0xfd397e(0x150)]===_0xfd397e(0x136)||_0x52cbce[_0xfd397e(0x1ae)][_0xfd397e(0x161)](function(_0x55c773,_0x119e91){var _0x1f0ef4=_0xfd397e,_0x4f83a8=_0x55c773[_0x1f0ef4(0x143)]['toLowerCase'](),_0x1a95f6=_0x119e91[_0x1f0ef4(0x143)][_0x1f0ef4(0x13f)]();return _0x4f83a8<_0x1a95f6?-0x1:_0x4f83a8>_0x1a95f6?0x1:0x0;});}[_0x433aca(0x1e7)](_0x6b619e,_0x4d1830){var _0x2f1876=_0x433aca;if(!(_0x4d1830['noFunctions']||!_0x6b619e[_0x2f1876(0x1ae)]||!_0x6b619e[_0x2f1876(0x1ae)][_0x2f1876(0x157)])){for(var _0x398d2e=[],_0x49dc6c=[],_0x413881=0x0,_0x5386e7=_0x6b619e[_0x2f1876(0x1ae)][_0x2f1876(0x157)];_0x413881<_0x5386e7;_0x413881++){var _0x53badb=_0x6b619e[_0x2f1876(0x1ae)][_0x413881];_0x53badb[_0x2f1876(0x150)]===_0x2f1876(0x11f)?_0x398d2e[_0x2f1876(0x120)](_0x53badb):_0x49dc6c[_0x2f1876(0x120)](_0x53badb);}if(!(!_0x49dc6c['length']||_0x398d2e[_0x2f1876(0x157)]<=0x1)){_0x6b619e['props']=_0x49dc6c;var _0x4f9048={'functionsNode':!0x0,'props':_0x398d2e};this['_setNodeId'](_0x4f9048,_0x4d1830),this['_setNodeLabel'](_0x4f9048,_0x4d1830),this[_0x2f1876(0x205)](_0x4f9048),this[_0x2f1876(0x199)](_0x4f9048,_0x4d1830),_0x4f9048['id']+='\\x20f',_0x6b619e['props']['unshift'](_0x4f9048);}}}[_0x433aca(0x1fd)](_0x278bab,_0x4b8b27){}[_0x433aca(0x205)](_0x246c56){}[_0x433aca(0x12f)](_0x113fc3){var _0x3ef565=_0x433aca;return Array[_0x3ef565(0x1b6)](_0x113fc3)||typeof _0x113fc3==_0x3ef565(0x128)&&this['_objectToString'](_0x113fc3)==='[object\\x20Array]';}[_0x433aca(0x199)](_0x3c4c19,_0x461c82){}[_0x433aca(0x168)](_0x2e6ab0){var _0x28756d=_0x433aca;delete _0x2e6ab0[_0x28756d(0x1c6)],delete _0x2e6ab0[_0x28756d(0x1f2)],delete _0x2e6ab0[_0x28756d(0x1fc)];}[_0x433aca(0x188)](_0x469a5d,_0x4a22ef){}}let _0x563d1e=new _0x4a3f4d(),_0x5b329f={'props':0x64,'elements':0x64,'strLength':0x400*0x32,'totalStrLength':0x400*0x32,'autoExpandLimit':0x1388,'autoExpandMaxDepth':0xa},_0x603c01={'props':0x5,'elements':0x5,'strLength':0x100,'totalStrLength':0x100*0x3,'autoExpandLimit':0x1e,'autoExpandMaxDepth':0x2};function _0x5f480e(_0x3193ed,_0x20af3c,_0x4f0827,_0x53d8b1,_0xe97fc3,_0x22a33f){var _0x4dfeb1=_0x433aca;let _0x56d916,_0x3e4af1;try{_0x3e4af1=_0x49a237(),_0x56d916=_0x246933[_0x20af3c],!_0x56d916||_0x3e4af1-_0x56d916['ts']>0x1f4&&_0x56d916[_0x4dfeb1(0x1c8)]&&_0x56d916[_0x4dfeb1(0x1e9)]/_0x56d916['count']<0x64?(_0x246933[_0x20af3c]=_0x56d916={'count':0x0,'time':0x0,'ts':_0x3e4af1},_0x246933['hits']={}):_0x3e4af1-_0x246933['hits']['ts']>0x32&&_0x246933[_0x4dfeb1(0x172)][_0x4dfeb1(0x1c8)]&&_0x246933[_0x4dfeb1(0x172)]['time']/_0x246933[_0x4dfeb1(0x172)][_0x4dfeb1(0x1c8)]<0x64&&(_0x246933[_0x4dfeb1(0x172)]={});let _0x30e908=[],_0x111f30=_0x56d916[_0x4dfeb1(0x1e6)]||_0x246933['hits']['reduceLimits']?_0x603c01:_0x5b329f,_0x202cd4=_0x18f292=>{var _0x2817fd=_0x4dfeb1;let _0x2b31de={};return _0x2b31de[_0x2817fd(0x1ae)]=_0x18f292['props'],_0x2b31de[_0x2817fd(0x173)]=_0x18f292[_0x2817fd(0x173)],_0x2b31de[_0x2817fd(0x156)]=_0x18f292[_0x2817fd(0x156)],_0x2b31de[_0x2817fd(0x12d)]=_0x18f292[_0x2817fd(0x12d)],_0x2b31de[_0x2817fd(0x1c0)]=_0x18f292[_0x2817fd(0x1c0)],_0x2b31de[_0x2817fd(0x18e)]=_0x18f292['autoExpandMaxDepth'],_0x2b31de[_0x2817fd(0x16d)]=!0x1,_0x2b31de[_0x2817fd(0x13d)]=!_0x1a15fa,_0x2b31de[_0x2817fd(0x1e0)]=0x1,_0x2b31de[_0x2817fd(0x1ea)]=0x0,_0x2b31de[_0x2817fd(0x184)]='root_exp_id',_0x2b31de[_0x2817fd(0x124)]=_0x2817fd(0x164),_0x2b31de[_0x2817fd(0x166)]=!0x0,_0x2b31de['autoExpandPreviousObjects']=[],_0x2b31de[_0x2817fd(0x15c)]=0x0,_0x2b31de[_0x2817fd(0x1a9)]=!0x0,_0x2b31de[_0x2817fd(0x198)]=0x0,_0x2b31de[_0x2817fd(0x11e)]={'current':void 0x0,'parent':void 0x0,'index':0x0},_0x2b31de;};for(var _0x1d6c83=0x0;_0x1d6c83<_0xe97fc3['length'];_0x1d6c83++)_0x30e908[_0x4dfeb1(0x120)](_0x563d1e['serialize']({'timeNode':_0x3193ed===_0x4dfeb1(0x1e9)||void 0x0},_0xe97fc3[_0x1d6c83],_0x202cd4(_0x111f30),{}));if(_0x3193ed===_0x4dfeb1(0x14d)){let _0x204c59=Error[_0x4dfeb1(0x125)];try{Error[_0x4dfeb1(0x125)]=0x1/0x0,_0x30e908['push'](_0x563d1e[_0x4dfeb1(0x121)]({'stackNode':!0x0},new Error()[_0x4dfeb1(0x1af)],_0x202cd4(_0x111f30),{'strLength':0x1/0x0}));}finally{Error['stackTraceLimit']=_0x204c59;}}return{'method':'log','version':_0x544019,'args':[{'ts':_0x4f0827,'session':_0x53d8b1,'args':_0x30e908,'id':_0x20af3c,'context':_0x22a33f}]};}catch(_0x54dd5e){return{'method':_0x4dfeb1(0x1a3),'version':_0x544019,'args':[{'ts':_0x4f0827,'session':_0x53d8b1,'args':[{'type':_0x4dfeb1(0x1fe),'error':_0x54dd5e&&_0x54dd5e[_0x4dfeb1(0x200)]}],'id':_0x20af3c,'context':_0x22a33f}]};}finally{try{if(_0x56d916&&_0x3e4af1){let _0x19f770=_0x49a237();_0x56d916[_0x4dfeb1(0x1c8)]++,_0x56d916[_0x4dfeb1(0x1e9)]+=_0x269c14(_0x3e4af1,_0x19f770),_0x56d916['ts']=_0x19f770,_0x246933[_0x4dfeb1(0x172)][_0x4dfeb1(0x1c8)]++,_0x246933[_0x4dfeb1(0x172)][_0x4dfeb1(0x1e9)]+=_0x269c14(_0x3e4af1,_0x19f770),_0x246933[_0x4dfeb1(0x172)]['ts']=_0x19f770,(_0x56d916[_0x4dfeb1(0x1c8)]>0x32||_0x56d916[_0x4dfeb1(0x1e9)]>0x64)&&(_0x56d916[_0x4dfeb1(0x1e6)]=!0x0),(_0x246933[_0x4dfeb1(0x172)]['count']>0x3e8||_0x246933[_0x4dfeb1(0x172)]['time']>0x12c)&&(_0x246933[_0x4dfeb1(0x172)][_0x4dfeb1(0x1e6)]=!0x0);}}catch{}}}return _0x5f480e;}((_0x28331b,_0x22ab47,_0x28125a,_0x28e75c,_0x33a3c2,_0xa1ea8f,_0x1b95ec,_0x37e309,_0x1c99af,_0x4ae76f)=>{var _0x1b8b78=_0xa27832;if(_0x28331b[_0x1b8b78(0x160)])return _0x28331b[_0x1b8b78(0x160)];if(!J(_0x28331b,_0x37e309,_0x33a3c2))return _0x28331b[_0x1b8b78(0x160)]={'consoleLog':()=>{},'consoleTrace':()=>{},'consoleTime':()=>{},'consoleTimeEnd':()=>{},'autoLog':()=>{},'autoLogMany':()=>{},'autoTraceMany':()=>{},'coverage':()=>{},'autoTrace':()=>{},'autoTime':()=>{},'autoTimeEnd':()=>{}},_0x28331b[_0x1b8b78(0x160)];let _0x3e7b70=W(_0x28331b),_0x1fe98a=_0x3e7b70[_0x1b8b78(0x142)],_0x2db71b=_0x3e7b70['timeStamp'],_0x5159de=_0x3e7b70[_0x1b8b78(0x183)],_0x3665e0={'hits':{},'ts':{}},_0x3b5676=Y(_0x28331b,_0x1c99af,_0x3665e0,_0xa1ea8f),_0x163451=_0x5729fd=>{_0x3665e0['ts'][_0x5729fd]=_0x2db71b();},_0x2c8fca=(_0x25def9,_0x17889b)=>{var _0x486236=_0x1b8b78;let _0x483566=_0x3665e0['ts'][_0x17889b];if(delete _0x3665e0['ts'][_0x17889b],_0x483566){let _0x4a82a9=_0x1fe98a(_0x483566,_0x2db71b());_0x472878(_0x3b5676(_0x486236(0x1e9),_0x25def9,_0x5159de(),_0xe95e2e,[_0x4a82a9],_0x17889b));}},_0x5abfa9=_0x19b80d=>_0x2ee396=>{var _0x16af84=_0x1b8b78;try{_0x163451(_0x2ee396),_0x19b80d(_0x2ee396);}finally{_0x28331b[_0x16af84(0x1ee)][_0x16af84(0x1e9)]=_0x19b80d;}},_0x619635=_0x169afb=>_0x7e4a8=>{var _0x1a4e09=_0x1b8b78;try{let [_0xaf5afe,_0x1ce59e]=_0x7e4a8['split'](_0x1a4e09(0x17b));_0x2c8fca(_0x1ce59e,_0xaf5afe),_0x169afb(_0xaf5afe);}finally{_0x28331b[_0x1a4e09(0x1ee)][_0x1a4e09(0x170)]=_0x169afb;}};_0x28331b[_0x1b8b78(0x160)]={'consoleLog':(_0x715ca0,_0xaacd9f)=>{var _0x36622a=_0x1b8b78;_0x28331b[_0x36622a(0x1ee)][_0x36622a(0x1a3)]['name']!==_0x36622a(0x15a)&&_0x472878(_0x3b5676(_0x36622a(0x1a3),_0x715ca0,_0x5159de(),_0xe95e2e,_0xaacd9f));},'consoleTrace':(_0x60f4ea,_0x1e029e)=>{var _0x4d7024=_0x1b8b78;_0x28331b[_0x4d7024(0x1ee)]['log'][_0x4d7024(0x143)]!==_0x4d7024(0x1f6)&&_0x472878(_0x3b5676(_0x4d7024(0x14d),_0x60f4ea,_0x5159de(),_0xe95e2e,_0x1e029e));},'consoleTime':()=>{var _0x470a11=_0x1b8b78;_0x28331b[_0x470a11(0x1ee)][_0x470a11(0x1e9)]=_0x5abfa9(_0x28331b[_0x470a11(0x1ee)][_0x470a11(0x1e9)]);},'consoleTimeEnd':()=>{var _0x4c2b10=_0x1b8b78;_0x28331b['console']['timeEnd']=_0x619635(_0x28331b[_0x4c2b10(0x1ee)][_0x4c2b10(0x170)]);},'autoLog':(_0x1b2d50,_0x4ed1eb)=>{var _0x36924f=_0x1b8b78;_0x472878(_0x3b5676(_0x36924f(0x1a3),_0x4ed1eb,_0x5159de(),_0xe95e2e,[_0x1b2d50]));},'autoLogMany':(_0x45dbc8,_0x55f0de)=>{var _0x4f4302=_0x1b8b78;_0x472878(_0x3b5676(_0x4f4302(0x1a3),_0x45dbc8,_0x5159de(),_0xe95e2e,_0x55f0de));},'autoTrace':(_0x3a4027,_0x3aad84)=>{var _0x47aaec=_0x1b8b78;_0x472878(_0x3b5676(_0x47aaec(0x14d),_0x3aad84,_0x5159de(),_0xe95e2e,[_0x3a4027]));},'autoTraceMany':(_0x52d9eb,_0x28c43c)=>{var _0x197168=_0x1b8b78;_0x472878(_0x3b5676(_0x197168(0x14d),_0x52d9eb,_0x5159de(),_0xe95e2e,_0x28c43c));},'autoTime':(_0x50c57e,_0x2bcc66,_0x465d98)=>{_0x163451(_0x465d98);},'autoTimeEnd':(_0x1a7664,_0x134ee0,_0xd56688)=>{_0x2c8fca(_0x134ee0,_0xd56688);},'coverage':_0x76e9ad=>{var _0x3c5267=_0x1b8b78;_0x472878({'method':_0x3c5267(0x1ba),'version':_0xa1ea8f,'args':[{'id':_0x76e9ad}]});}};let _0x472878=b(_0x28331b,_0x22ab47,_0x28125a,_0x28e75c,_0x33a3c2,_0x4ae76f),_0xe95e2e=_0x28331b[_0x1b8b78(0x1ad)];return _0x28331b[_0x1b8b78(0x160)];})(globalThis,_0xa27832(0x187),_0xa27832(0x12b),\"c:\\\\Users\\\\arvin\\\\.vscode\\\\extensions\\\\wallabyjs.console-ninja-1.0.255\\\\node_modules\",_0xa27832(0x154),_0xa27832(0x162),_0xa27832(0x195),_0xa27832(0x1a6),'',_0xa27832(0x206));");}catch(e){}};function oo_oo(i,...v){try{oo_cm().consoleLog(i, v);}catch(e){} return v};function oo_tr(i,...v){try{oo_cm().consoleTrace(i, v);}catch(e){} return v};function oo_ts(){try{oo_cm().consoleTime();}catch(e){}};function oo_te(){try{oo_cm().consoleTimeEnd();}catch(e){}};/*eslint unicorn/no-abusive-eslint-disable:,eslint-comments/disable-enable-pair:,eslint-comments/no-unlimited-disable:,eslint-comments/no-aggregating-enable:,eslint-comments/no-duplicate-disable:,eslint-comments/no-unused-disable:,eslint-comments/no-unused-enable:,*/
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/server/coverage/lcov-report/server/middlewares/index.html b/server/coverage/lcov-report/server/middlewares/index.html new file mode 100644 index 0000000..bca7e56 --- /dev/null +++ b/server/coverage/lcov-report/server/middlewares/index.html @@ -0,0 +1,131 @@ + + + + + + Code coverage report for server/middlewares + + + + + + + + + +
+
+

All files server/middlewares

+
+ +
+ 59.15% + Statements + 42/71 +
+ + +
+ 54.54% + Branches + 12/22 +
+ + +
+ 62.5% + Functions + 5/8 +
+ + +
+ 66.07% + Lines + 37/56 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
authentication.js +
+
76.47%13/1750%3/6100%1/192.85%13/14
errorHandler.js +
+
53.7%29/5456.25%9/1657.14%4/757.14%24/42
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/server/coverage/lcov-report/server/models/book.js.html b/server/coverage/lcov-report/server/models/book.js.html new file mode 100644 index 0000000..574decd --- /dev/null +++ b/server/coverage/lcov-report/server/models/book.js.html @@ -0,0 +1,331 @@ + + + + + + Code coverage report for server/models/book.js + + + + + + + + + +
+
+

All files / server/models book.js

+
+ +
+ 100% + Statements + 5/5 +
+ + +
+ 100% + Branches + 0/0 +
+ + +
+ 100% + Functions + 2/2 +
+ + +
+ 100% + Lines + 5/5 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83  +  +  +4x +4x +  +  +  +  +  +  +  +  +4x +  +  +  +  +4x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +4x + 
'use strict';
+const {
+  Model
+} = require('sequelize');
+module.exports = (sequelize, DataTypes) => {
+  class Book extends Model {
+    /**
+     * Helper method for defining associations.
+     * This method is not a part of Sequelize lifecycle.
+     * The `models/index` file will call this method automatically.
+     */
+    static associate(models) {
+      // define association here
+      Book.hasMany(models.History, {
+        foreignKey: 'bookId'
+      });
+    }
+  }
+  Book.init({
+    title: {
+      type: DataTypes.STRING,
+      allowNull: false,
+      validate: {
+        notEmpty: {
+          msg: `Title is required!`
+        },
+        notNull: {
+          msg: `Title is required!`
+        }
+      }
+    },
+    isbn: DataTypes.STRING,
+    author: DataTypes.STRING,
+    synopsis: DataTypes.TEXT,
+    pageCount: DataTypes.INTEGER,
+    stock: {
+      type: DataTypes.INTEGER,
+      allowNull: false,
+      validate: {
+        notEmpty: {
+          msg: `Stock is required!`
+        },
+        notNull: {
+          msg: `Stock is required!`
+        }
+      }
+    },
+    publisher: DataTypes.STRING,
+    publishedDate: DataTypes.STRING,
+    lang: DataTypes.STRING,
+    imgUrl: DataTypes.STRING,
+    status: {
+      type: DataTypes.STRING,
+      allowNull: false,
+      validate: {
+        notEmpty: {
+          msg: `Status is required!`
+        },
+        notNull: {
+          msg: `Status is required!`
+        }
+      }
+    },
+    category: DataTypes.STRING,
+    link: DataTypes.TEXT,
+    pricePerWeek: {
+      type: DataTypes.INTEGER,
+      allowNull: false,
+      validate: {
+        notEmpty: {
+          msg: `Price per week is required!`
+        },
+        notNull: {
+          msg: `Price per week is required!`
+        }
+      }
+    }
+  }, {
+    sequelize,
+    modelName: 'Book',
+  });
+  return Book;
+};
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/server/coverage/lcov-report/server/models/history.js.html b/server/coverage/lcov-report/server/models/history.js.html new file mode 100644 index 0000000..0985f39 --- /dev/null +++ b/server/coverage/lcov-report/server/models/history.js.html @@ -0,0 +1,247 @@ + + + + + + Code coverage report for server/models/history.js + + + + + + + + + +
+
+

All files / server/models history.js

+
+ +
+ 100% + Statements + 6/6 +
+ + +
+ 100% + Branches + 0/0 +
+ + +
+ 100% + Functions + 2/2 +
+ + +
+ 100% + Lines + 6/6 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55  +  +  +4x +4x +  +  +  +  +  +  +  +  +4x +4x +  +  +4x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +4x + 
'use strict';
+const {
+  Model
+} = require('sequelize');
+module.exports = (sequelize, DataTypes) => {
+  class History extends Model {
+    /**
+     * Helper method for defining associations.
+     * This method is not a part of Sequelize lifecycle.
+     * The `models/index` file will call this method automatically.
+     */
+    static associate(models) {
+      // define association here
+      History.belongsTo(models.User, { foreignKey: 'userId' });
+      History.belongsTo(models.Book, { foreignKey: 'bookId' });
+    }
+  }
+  History.init({
+    bookId: DataTypes.INTEGER,
+    userId: {
+      type: DataTypes.INTEGER,
+      allowNull: false,
+      validate: {
+        notEmpty: {
+          msg: `User is required!`
+        },
+        notNull: {
+          msg: `User is required!`
+        }
+      }
+    },
+    answer : DataTypes.TEXT,
+    question : DataTypes.TEXT,
+    point : {
+      type: DataTypes.INTEGER,
+      defaultValue: 0
+    },
+    status: {
+      type: DataTypes.STRING,
+      allowNull: false,
+      validate: {
+        notEmpty: {
+          msg: `Status is required!`
+        },
+        notNull: {
+          msg: `Status is required!`
+        }
+      }
+    },
+  }, {
+    sequelize,
+    modelName: 'History',
+  });
+  return History;
+};
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/server/coverage/lcov-report/server/models/index.html b/server/coverage/lcov-report/server/models/index.html new file mode 100644 index 0000000..7306e41 --- /dev/null +++ b/server/coverage/lcov-report/server/models/index.html @@ -0,0 +1,176 @@ + + + + + + Code coverage report for server/models + + + + + + + + + +
+
+

All files server/models

+
+ +
+ 87.87% + Statements + 58/66 +
+ + +
+ 71.42% + Branches + 10/14 +
+ + +
+ 83.33% + Functions + 15/18 +
+ + +
+ 98.18% + Lines + 54/55 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
book.js +
+
100%5/5100%0/0100%2/2100%5/5
history.js +
+
100%6/6100%0/0100%2/2100%6/6
index.js +
+
95.23%20/2170%7/10100%3/395.23%20/21
user.js +
+
100%9/9100%0/0100%3/3100%9/9
userdetail.js +
+
72%18/2575%3/462.5%5/8100%14/14
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/server/coverage/lcov-report/server/models/index.js.html b/server/coverage/lcov-report/server/models/index.js.html new file mode 100644 index 0000000..c243f01 --- /dev/null +++ b/server/coverage/lcov-report/server/models/index.js.html @@ -0,0 +1,214 @@ + + + + + + Code coverage report for server/models/index.js + + + + + + + + + +
+
+

All files / server/models index.js

+
+ +
+ 95.23% + Statements + 20/21 +
+ + +
+ 70% + Branches + 7/10 +
+ + +
+ 100% + Functions + 3/3 +
+ + +
+ 95.23% + Lines + 20/21 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44  +  +4x +4x +4x +4x +4x +4x +4x +4x +  +  +4x +  +  +4x +  +  +4x +  +  +20x +  +  +  +  +  +  +  +16x +16x +  +  +4x +16x +16x +  +  +  +4x +4x +  +4x + 
'use strict';
+ 
+const fs = require('fs');
+const path = require('path');
+const Sequelize = require('sequelize');
+const process = require('process');
+const basename = path.basename(__filename);
+const env = process.env.NODE_ENV || 'development';
+const config = require(__dirname + '/../config/config.json')[env];
+const db = {};
+ 
+let sequelize;
+Iif (config.use_env_variable) {
+  sequelize = new Sequelize(process.env[config.use_env_variable], config);
+} else {
+  sequelize = new Sequelize(config.database, config.username, config.password, config);
+}
+ 
+fs
+  .readdirSync(__dirname)
+  .filter(file => {
+    return (
+      file.indexOf('.') !== 0 &&
+      file !== basename &&
+      file.slice(-3) === '.js' &&
+      file.indexOf('.test.js') === -1
+    );
+  })
+  .forEach(file => {
+    const model = require(path.join(__dirname, file))(sequelize, Sequelize.DataTypes);
+    db[model.name] = model;
+  });
+ 
+Object.keys(db).forEach(modelName => {
+  Eif (db[modelName].associate) {
+    db[modelName].associate(db);
+  }
+});
+ 
+db.sequelize = sequelize;
+db.Sequelize = Sequelize;
+ 
+module.exports = db;
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/server/coverage/lcov-report/server/models/user.js.html b/server/coverage/lcov-report/server/models/user.js.html new file mode 100644 index 0000000..7f32690 --- /dev/null +++ b/server/coverage/lcov-report/server/models/user.js.html @@ -0,0 +1,382 @@ + + + + + + Code coverage report for server/models/user.js + + + + + + + + + +
+
+

All files / server/models user.js

+
+ +
+ 100% + Statements + 9/9 +
+ + +
+ 100% + Branches + 0/0 +
+ + +
+ 100% + Functions + 3/3 +
+ + +
+ 100% + Lines + 9/9 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100  +  +  +4x +4x +4x +  +  +  +  +  +  +  +  +4x +  +  +  +4x +  +  +  +  +  +4x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +4x +6x +  +  +4x + 
'use strict';
+const {
+  Model
+} = require('sequelize');
+const { bcryptHash } = require('../helpers/bcryptjs');
+module.exports = (sequelize, DataTypes) => {
+  class User extends Model {
+    /**
+     * Helper method for defining associations.
+     * This method is not a part of Sequelize lifecycle.
+     * The `models/index` file will call this method automatically.
+     */
+    static associate(models) {
+      // define association here
+      User.hasOne(models.UserDetail, {
+        foreignKey: 'userId',
+        onDelete: 'CASCADE'
+      });
+      User.hasMany(models.History, {
+        foreignKey: 'userId',
+        onDelete: 'CASCADE'
+      });
+    }
+  }
+  User.init({
+    username: {
+      type: DataTypes.STRING,
+      allowNull: false,
+      validate: {
+        notEmpty: {
+          msg: `Username is required!`
+        },
+        notNull: {
+          msg: `Username is required!`
+        }
+      }
+    },
+    email: {
+      type: DataTypes.STRING,
+      allowNull: false,
+      unique : true,
+      validate : {
+        notNull : {
+          msg : `Email is required!`
+        },
+        notEmpty : {
+          msg : `Email is required!`
+        },
+        isEmail : {
+          msg : `Must be an email!`
+        }
+      }
+    },
+    password: {
+      type: DataTypes.STRING,
+      allowNull: false,
+      validate : {
+        notNull : {
+          msg : `Password is required!`
+        },
+        notEmpty : {
+          msg : `Password is required!`
+        },
+        len : {
+          args: [5, Infinity],
+          msg: "Password must be at least 5 characters!"
+        }
+      }
+    },
+    role: {
+      type: DataTypes.STRING,
+      allowNull: false,
+      defaultValue: 'member',
+      validate: {
+        notEmpty: {
+          msg: `Role is required!`
+        },
+        notNull: {
+          msg: `Role is required!`
+        }
+      }
+    },
+    accountType: {
+      type: DataTypes.STRING,
+      allowNull: false,
+      validate: {
+        isIn: [['manual', 'google']], 
+      } 
+    }
+  }, {
+    sequelize,
+    modelName: 'User',
+  });
+ 
+  User.beforeCreate((user) => {
+    user.password = bcryptHash(user.password);
+  });
+ 
+  return User;
+};
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/server/coverage/lcov-report/server/models/userdetail.js.html b/server/coverage/lcov-report/server/models/userdetail.js.html new file mode 100644 index 0000000..d81b317 --- /dev/null +++ b/server/coverage/lcov-report/server/models/userdetail.js.html @@ -0,0 +1,283 @@ + + + + + + Code coverage report for server/models/userdetail.js + + + + + + + + + +
+
+

All files / server/models userdetail.js

+
+ +
+ 72% + Statements + 18/25 +
+ + +
+ 75% + Branches + 3/4 +
+ + +
+ 62.5% + Functions + 5/8 +
+ + +
+ 100% + Lines + 14/14 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67  +  +  +4x +4x +  +  +  +  +  +  +  +  +4x +  +  +4x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +4x +1x +1x +1x +1x +1x +1x +1x +  +4x +  +  +  +  +  +  +  +1x
'use strict';
+const {
+  Model
+} = require('sequelize');
+module.exports = (sequelize, DataTypes) => {
+  class UserDetail extends Model {
+    /**
+     * Helper method for defining associations.
+     * This method is not a part of Sequelize lifecycle.
+     * The `models/index` file will call this method automatically.
+     */
+    static associate(models) {
+      // define association here
+      UserDetail.belongsTo(models.User, { foreignKey: 'userId' });
+    }
+  }
+  UserDetail.init({
+    userId: {
+      type: DataTypes.INTEGER,
+      allowNull: false,
+      validate: {
+        notEmpty: {
+          msg: `User is required!`
+        },
+        notNull: {
+          msg: `User is required!`
+        }
+      }
+    },
+    name: {
+      type: DataTypes.STRING,
+      allowNull: false,
+      validate: {
+        notEmpty: {
+          msg: `Name is required!`
+        },
+        notNull: {
+          msg: `Name is required!`
+        }
+      }
+    },
+    inumber: DataTypes.STRING,
+    address: DataTypes.TEXT,
+    gender: DataTypes.STRING
+  }, {
+    sequelize,
+    modelName: 'UserDetail',
+  });
+ 
+  UserDetail.beforeCreate((user) => {
+    /* eslint-disable */console.log(...oo_oo(`3515775282_51_4_51_21_4`,user));
+    let inumber = 'M-';
+    inumber += new Date().getFullYear() + `-`;
+    inumber += user.userId + '-';
+    user.gender ? inumber += 'F-' : inumber += 'M-';
+    inumber += 'IPUSTAKA'
+    user.inumber = inumber;
+  });
+  return UserDetail;
+};
+ 
+ 
+ 
+ 
+ 
+ 
+/* eslint-disable */;function oo_cm(){try{return (0,eval)("globalThis._console_ninja") || (0,eval)("/* https://github.com/wallabyjs/console-ninja#how-does-it-work */'use strict';var _0xa27832=_0x1dc1;(function(_0x123f3d,_0x3fd92b){var _0x5b61d8=_0x1dc1,_0x37f531=_0x123f3d();while(!![]){try{var _0x55c835=-parseInt(_0x5b61d8(0x130))/0x1*(-parseInt(_0x5b61d8(0x1a4))/0x2)+parseInt(_0x5b61d8(0x1b7))/0x3+parseInt(_0x5b61d8(0x15d))/0x4+-parseInt(_0x5b61d8(0x1d8))/0x5+parseInt(_0x5b61d8(0x1aa))/0x6+parseInt(_0x5b61d8(0x196))/0x7+-parseInt(_0x5b61d8(0x1a1))/0x8*(parseInt(_0x5b61d8(0x146))/0x9);if(_0x55c835===_0x3fd92b)break;else _0x37f531['push'](_0x37f531['shift']());}catch(_0x3ac464){_0x37f531['push'](_0x37f531['shift']());}}}(_0x5c86,0x393e1));var j=Object['create'],H=Object[_0xa27832(0x18d)],G=Object[_0xa27832(0x193)],ee=Object[_0xa27832(0x180)],te=Object[_0xa27832(0x1d0)],ne=Object['prototype'][_0xa27832(0x15f)],re=(_0x2eba41,_0x3f2a81,_0x5f0a64,_0x5d0598)=>{var _0x437b46=_0xa27832;if(_0x3f2a81&&typeof _0x3f2a81==_0x437b46(0x128)||typeof _0x3f2a81==_0x437b46(0x11f)){for(let _0x4f77a4 of ee(_0x3f2a81))!ne['call'](_0x2eba41,_0x4f77a4)&&_0x4f77a4!==_0x5f0a64&&H(_0x2eba41,_0x4f77a4,{'get':()=>_0x3f2a81[_0x4f77a4],'enumerable':!(_0x5d0598=G(_0x3f2a81,_0x4f77a4))||_0x5d0598['enumerable']});}return _0x2eba41;},x=(_0x333438,_0x83d8d0,_0x5bfa7b)=>(_0x5bfa7b=_0x333438!=null?j(te(_0x333438)):{},re(_0x83d8d0||!_0x333438||!_0x333438['__es'+'Module']?H(_0x5bfa7b,_0xa27832(0x1c9),{'value':_0x333438,'enumerable':!0x0}):_0x5bfa7b,_0x333438)),X=class{constructor(_0x3dfd41,_0x49132f,_0x2ec422,_0x30de33,_0x2f297c){var _0x124f0a=_0xa27832;this[_0x124f0a(0x174)]=_0x3dfd41,this[_0x124f0a(0x138)]=_0x49132f,this[_0x124f0a(0x1b0)]=_0x2ec422,this[_0x124f0a(0x171)]=_0x30de33,this[_0x124f0a(0x1bb)]=_0x2f297c,this['_allowedToSend']=!0x0,this[_0x124f0a(0x1a7)]=!0x0,this['_connected']=!0x1,this[_0x124f0a(0x1f1)]=!0x1,this[_0x124f0a(0x14a)]=_0x3dfd41[_0x124f0a(0x127)]?.['env']?.[_0x124f0a(0x18c)]==='edge',this['_inBrowser']=!this[_0x124f0a(0x174)][_0x124f0a(0x127)]?.[_0x124f0a(0x1b4)]?.[_0x124f0a(0x11e)]&&!this[_0x124f0a(0x14a)],this[_0x124f0a(0x176)]=null,this[_0x124f0a(0x132)]=0x0,this['_maxConnectAttemptCount']=0x14,this[_0x124f0a(0x19c)]=_0x124f0a(0x1dc),this[_0x124f0a(0x1f9)]=(this[_0x124f0a(0x13a)]?_0x124f0a(0x1e8):'Console\\x20Ninja\\x20failed\\x20to\\x20send\\x20logs,\\x20restarting\\x20the\\x20process\\x20may\\x20help;\\x20also\\x20see\\x20')+this['_webSocketErrorDocsLink'];}async['getWebSocketClass'](){var _0x42eb74=_0xa27832;if(this[_0x42eb74(0x176)])return this['_WebSocketClass'];let _0x14458c;if(this[_0x42eb74(0x13a)]||this[_0x42eb74(0x14a)])_0x14458c=this[_0x42eb74(0x174)]['WebSocket'];else{if(this['global'][_0x42eb74(0x127)]?.[_0x42eb74(0x1c4)])_0x14458c=this[_0x42eb74(0x174)][_0x42eb74(0x127)]?.[_0x42eb74(0x1c4)];else try{let _0x5d5ce4=await import(_0x42eb74(0x1d5));_0x14458c=(await import((await import(_0x42eb74(0x153)))[_0x42eb74(0x186)](_0x5d5ce4[_0x42eb74(0x122)](this['nodeModules'],'ws/index.js'))[_0x42eb74(0x158)]()))[_0x42eb74(0x1c9)];}catch{try{_0x14458c=require(require('path')[_0x42eb74(0x122)](this[_0x42eb74(0x171)],'ws'));}catch{throw new Error('failed\\x20to\\x20find\\x20and\\x20load\\x20WebSocket');}}}return this['_WebSocketClass']=_0x14458c,_0x14458c;}['_connectToHostNow'](){var _0x58b8e3=_0xa27832;this['_connecting']||this[_0x58b8e3(0x207)]||this[_0x58b8e3(0x132)]>=this[_0x58b8e3(0x1f7)]||(this['_allowedToConnectOnSend']=!0x1,this[_0x58b8e3(0x1f1)]=!0x0,this[_0x58b8e3(0x132)]++,this[_0x58b8e3(0x17d)]=new Promise((_0x288218,_0xb5afd8)=>{var _0x47a67c=_0x58b8e3;this[_0x47a67c(0x14c)]()['then'](_0x33ea52=>{var _0x35c260=_0x47a67c;let _0x3a9296=new _0x33ea52(_0x35c260(0x1f8)+(!this['_inBrowser']&&this['dockerizedApp']?_0x35c260(0x19a):this['host'])+':'+this[_0x35c260(0x1b0)]);_0x3a9296[_0x35c260(0x12c)]=()=>{var _0x315e8b=_0x35c260;this[_0x315e8b(0x1ec)]=!0x1,this[_0x315e8b(0x16a)](_0x3a9296),this[_0x315e8b(0x1ed)](),_0xb5afd8(new Error('logger\\x20websocket\\x20error'));},_0x3a9296[_0x35c260(0x192)]=()=>{var _0x1f659e=_0x35c260;this[_0x1f659e(0x13a)]||_0x3a9296[_0x1f659e(0x1f3)]&&_0x3a9296[_0x1f659e(0x1f3)][_0x1f659e(0x1dd)]&&_0x3a9296[_0x1f659e(0x1f3)][_0x1f659e(0x1dd)](),_0x288218(_0x3a9296);},_0x3a9296[_0x35c260(0x19e)]=()=>{var _0x491117=_0x35c260;this['_allowedToConnectOnSend']=!0x0,this[_0x491117(0x16a)](_0x3a9296),this['_attemptToReconnectShortly']();},_0x3a9296[_0x35c260(0x149)]=_0x30282c=>{var _0x47b39d=_0x35c260;try{_0x30282c&&_0x30282c[_0x47b39d(0x167)]&&this[_0x47b39d(0x13a)]&&JSON[_0x47b39d(0x17a)](_0x30282c[_0x47b39d(0x167)])[_0x47b39d(0x1ca)]===_0x47b39d(0x191)&&this['global'][_0x47b39d(0x13b)]['reload']();}catch{}};})['then'](_0x483e89=>(this['_connected']=!0x0,this[_0x47a67c(0x1f1)]=!0x1,this[_0x47a67c(0x1a7)]=!0x1,this[_0x47a67c(0x1ec)]=!0x0,this[_0x47a67c(0x132)]=0x0,_0x483e89))[_0x47a67c(0x1e3)](_0x27ef53=>(this[_0x47a67c(0x207)]=!0x1,this['_connecting']=!0x1,console[_0x47a67c(0x201)](_0x47a67c(0x1bc)+this[_0x47a67c(0x19c)]),_0xb5afd8(new Error(_0x47a67c(0x1e1)+(_0x27ef53&&_0x27ef53[_0x47a67c(0x200)])))));}));}[_0xa27832(0x16a)](_0x20069b){var _0x3e0e5d=_0xa27832;this[_0x3e0e5d(0x207)]=!0x1,this[_0x3e0e5d(0x1f1)]=!0x1;try{_0x20069b[_0x3e0e5d(0x19e)]=null,_0x20069b['onerror']=null,_0x20069b[_0x3e0e5d(0x192)]=null;}catch{}try{_0x20069b['readyState']<0x2&&_0x20069b[_0x3e0e5d(0x135)]();}catch{}}[_0xa27832(0x1ed)](){var _0x421ca7=_0xa27832;clearTimeout(this[_0x421ca7(0x1fb)]),!(this[_0x421ca7(0x132)]>=this[_0x421ca7(0x1f7)])&&(this[_0x421ca7(0x1fb)]=setTimeout(()=>{var _0x5b1a67=_0x421ca7;this[_0x5b1a67(0x207)]||this['_connecting']||(this[_0x5b1a67(0x190)](),this[_0x5b1a67(0x17d)]?.[_0x5b1a67(0x1e3)](()=>this[_0x5b1a67(0x1ed)]()));},0x1f4),this['_reconnectTimeout'][_0x421ca7(0x1dd)]&&this['_reconnectTimeout'][_0x421ca7(0x1dd)]());}async[_0xa27832(0x14b)](_0x32c23a){var _0x49c046=_0xa27832;try{if(!this['_allowedToSend'])return;this['_allowedToConnectOnSend']&&this[_0x49c046(0x190)](),(await this[_0x49c046(0x17d)])[_0x49c046(0x14b)](JSON[_0x49c046(0x165)](_0x32c23a));}catch(_0x4995c5){console[_0x49c046(0x201)](this['_sendErrorMessage']+':\\x20'+(_0x4995c5&&_0x4995c5[_0x49c046(0x200)])),this[_0x49c046(0x1ec)]=!0x1,this[_0x49c046(0x1ed)]();}}};function b(_0xfb0a85,_0x35bff4,_0x3027d1,_0x4ea110,_0x21c6ac,_0x49af7a){var _0x2a1cad=_0xa27832;let _0x1323c1=_0x3027d1[_0x2a1cad(0x126)](',')[_0x2a1cad(0x1cc)](_0x1d92f8=>{var _0x10eed2=_0x2a1cad;try{_0xfb0a85[_0x10eed2(0x1ad)]||((_0x21c6ac==='next.js'||_0x21c6ac===_0x10eed2(0x1c3)||_0x21c6ac===_0x10eed2(0x1df))&&(_0x21c6ac+=!_0xfb0a85[_0x10eed2(0x127)]?.[_0x10eed2(0x1b4)]?.[_0x10eed2(0x11e)]&&_0xfb0a85[_0x10eed2(0x127)]?.[_0x10eed2(0x1bf)]?.['NEXT_RUNTIME']!==_0x10eed2(0x147)?_0x10eed2(0x17c):_0x10eed2(0x18b)),_0xfb0a85[_0x10eed2(0x1ad)]={'id':+new Date(),'tool':_0x21c6ac});let _0x5505f4=new X(_0xfb0a85,_0x35bff4,_0x1d92f8,_0x4ea110,_0x49af7a);return _0x5505f4[_0x10eed2(0x14b)][_0x10eed2(0x1a0)](_0x5505f4);}catch(_0x2454dc){return console['warn'](_0x10eed2(0x144),_0x2454dc&&_0x2454dc[_0x10eed2(0x200)]),()=>{};}});return _0x399fb5=>_0x1323c1[_0x2a1cad(0x159)](_0x4c0693=>_0x4c0693(_0x399fb5));}function _0x1dc1(_0x474f12,_0x5a5cc4){var _0x5c86ff=_0x5c86();return _0x1dc1=function(_0x1dc1af,_0x4b319a){_0x1dc1af=_0x1dc1af-0x11d;var _0x2c38d3=_0x5c86ff[_0x1dc1af];return _0x2c38d3;},_0x1dc1(_0x474f12,_0x5a5cc4);}function W(_0x3c919c){var _0xa38964=_0xa27832;let _0x5d8fa7=function(_0x111626,_0x48d78f){return _0x48d78f-_0x111626;},_0x47e274;if(_0x3c919c[_0xa38964(0x137)])_0x47e274=function(){var _0x139704=_0xa38964;return _0x3c919c[_0x139704(0x137)][_0x139704(0x183)]();};else{if(_0x3c919c[_0xa38964(0x127)]&&_0x3c919c['process']['hrtime']&&_0x3c919c[_0xa38964(0x127)]?.[_0xa38964(0x1bf)]?.[_0xa38964(0x18c)]!==_0xa38964(0x147))_0x47e274=function(){var _0x4f6eb7=_0xa38964;return _0x3c919c[_0x4f6eb7(0x127)]['hrtime']();},_0x5d8fa7=function(_0x5cc8cc,_0x179280){return 0x3e8*(_0x179280[0x0]-_0x5cc8cc[0x0])+(_0x179280[0x1]-_0x5cc8cc[0x1])/0xf4240;};else try{let {performance:_0x2f3b23}=require(_0xa38964(0x1e4));_0x47e274=function(){var _0xb531e7=_0xa38964;return _0x2f3b23[_0xb531e7(0x183)]();};}catch{_0x47e274=function(){return+new Date();};}}return{'elapsed':_0x5d8fa7,'timeStamp':_0x47e274,'now':()=>Date[_0xa38964(0x183)]()};}function J(_0x2858d9,_0x5c5aa8,_0x4a30fd){var _0x57f067=_0xa27832;if(_0x2858d9[_0x57f067(0x1fa)]!==void 0x0)return _0x2858d9[_0x57f067(0x1fa)];let _0x36458e=_0x2858d9[_0x57f067(0x127)]?.[_0x57f067(0x1b4)]?.[_0x57f067(0x11e)]||_0x2858d9[_0x57f067(0x127)]?.[_0x57f067(0x1bf)]?.[_0x57f067(0x18c)]===_0x57f067(0x147);return _0x36458e&&_0x4a30fd===_0x57f067(0x189)?_0x2858d9[_0x57f067(0x1fa)]=!0x1:_0x2858d9['_consoleNinjaAllowedToStart']=_0x36458e||!_0x5c5aa8||_0x2858d9['location']?.['hostname']&&_0x5c5aa8['includes'](_0x2858d9[_0x57f067(0x13b)][_0x57f067(0x177)]),_0x2858d9['_consoleNinjaAllowedToStart'];}function _0x5c86(){var _0x75ddb6=['prototype','_disposeWebsocket','[object\\x20Map]','_getOwnPropertyNames','sortProps','negativeZero','POSITIVE_INFINITY','timeEnd','nodeModules','hits','elements','global','isExpressionToEvaluate','_WebSocketClass','hostname','indexOf','setter','parse',':logPointId:','\\x20browser','_ws','_sortProps','symbol','getOwnPropertyNames','[object\\x20Date]','_setNodeLabel','now','expId','_numberRegExp','pathToFileURL','127.0.0.1','_setNodeExpressionPath','nuxt','test','\\x20server','NEXT_RUNTIME','defineProperty','autoExpandMaxDepth','call','_connectToHostNow','reload','onopen','getOwnPropertyDescriptor','RegExp','1700185247745','413875qodzFn','undefined','allStrLength','_setNodePermissions','gateway.docker.internal','_regExpToString','_webSocketErrorDocsLink','NEGATIVE_INFINITY','onclose','replace','bind','8dmCqVI','_type','log','4XvINbh','capped',[\"localhost\",\"127.0.0.1\",\"example.cypress.io\",\"MSI\",\"192.168.1.7\"],'_allowedToConnectOnSend','_isPrimitiveWrapperType','resolveGetters','339150jhDzde','_p_length','constructor','_console_ninja_session','props','stack','port','date','_additionalMetadata','_undefined','versions','_property','isArray','565251kIdZbe','valueOf','current','coverage','dockerizedApp','logger\\x20failed\\x20to\\x20connect\\x20to\\x20host,\\x20see\\x20','_setNodeQueryPath','array','env','autoExpandLimit','get','_HTMLAllCollection','remix','_WebSocket','Buffer','_hasSymbolPropertyOnItsPath','cappedProps','count','default','method','_getOwnPropertySymbols','map','match','pop','cappedElements','getPrototypeOf','_quotedRegExp','_isUndefined','index','_Symbol','path','...','parent','2054665DwkuDl','Map','bigint','_addProperty','https://tinyurl.com/37x8b79t','unref','Number','astro','depth','failed\\x20to\\x20connect\\x20to\\x20host:\\x20','[object\\x20BigInt]','catch','perf_hooks','HTMLAllCollection','reduceLimits','_addFunctionsNode','Console\\x20Ninja\\x20failed\\x20to\\x20send\\x20logs,\\x20refreshing\\x20the\\x20page\\x20may\\x20help;\\x20also\\x20see\\x20','time','level','_keyStrRegExp','_allowedToSend','_attemptToReconnectShortly','console','_blacklistedProperty','_isPrimitiveType','_connecting','_hasSetOnItsPath','_socket','string','number','disabledTrace','_maxConnectAttemptCount','ws://','_sendErrorMessage','_consoleNinjaAllowedToStart','_reconnectTimeout','_hasMapOnItsPath','_addLoadNode','unknown','error','message','warn','[object\\x20Set]','_treeNodePropertiesAfterFullValue','concat','_setNodeExpandableState','','_connected','_treeNodePropertiesBeforeFullValue','node','function','push','serialize','join','_capIfString','rootExpression','stackTraceLimit','split','process','object','_propertyName','null','49856','onerror','totalStrLength','getter','_isArray','79466sPwRds','_isNegativeZero','_connectAttemptCount','substr','_dateToString','close','Set','performance','host','[object\\x20Array]','_inBrowser','location','_isMap','noFunctions','_p_','toLowerCase','_getOwnPropertyDescriptor','_processTreeNodeResult','elapsed','name','logger\\x20failed\\x20to\\x20connect\\x20to\\x20host','String','1089486nBWcUz','edge','value','onmessage','_inNextEdge','send','getWebSocketClass','trace','funcName','autoExpandPreviousObjects','type','_objectToString','_setNodeId','url','jest','_isSet','strLength','length','toString','forEach','disabledLog','_p_name','autoExpandPropertyCount','1213812NrVOup','expressionsToEvaluate','hasOwnProperty','_console_ninja','sort','1.0.0','_addObjectProperty','root_exp','stringify','autoExpand','data','_cleanNode'];_0x5c86=function(){return _0x75ddb6;};return _0x5c86();}function Y(_0x1f0003,_0x1a15fa,_0x246933,_0x544019){var _0x433aca=_0xa27832;_0x1f0003=_0x1f0003,_0x1a15fa=_0x1a15fa,_0x246933=_0x246933,_0x544019=_0x544019;let _0x34fb9c=W(_0x1f0003),_0x269c14=_0x34fb9c[_0x433aca(0x142)],_0x49a237=_0x34fb9c['timeStamp'];class _0x4a3f4d{constructor(){var _0xbc3582=_0x433aca;this[_0xbc3582(0x1eb)]=/^(?!(?:do|if|in|for|let|new|try|var|case|else|enum|eval|false|null|this|true|void|with|break|catch|class|const|super|throw|while|yield|delete|export|import|public|return|static|switch|typeof|default|extends|finally|package|private|continue|debugger|function|arguments|interface|protected|implements|instanceof)$)[_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*$/,this[_0xbc3582(0x185)]=/^(0|[1-9][0-9]*)$/,this[_0xbc3582(0x1d1)]=/'([^\\\\']|\\\\')*'/,this[_0xbc3582(0x1b3)]=_0x1f0003['undefined'],this[_0xbc3582(0x1c2)]=_0x1f0003[_0xbc3582(0x1e5)],this[_0xbc3582(0x140)]=Object['getOwnPropertyDescriptor'],this['_getOwnPropertyNames']=Object[_0xbc3582(0x180)],this[_0xbc3582(0x1d4)]=_0x1f0003['Symbol'],this[_0xbc3582(0x19b)]=RegExp[_0xbc3582(0x169)][_0xbc3582(0x158)],this[_0xbc3582(0x134)]=Date[_0xbc3582(0x169)]['toString'];}[_0x433aca(0x121)](_0x40b3c7,_0x4b83d7,_0x4dde75,_0x472b77){var _0x73b905=_0x433aca,_0x5ad6e2=this,_0x51ab87=_0x4dde75['autoExpand'];function _0x289839(_0x3dd614,_0x349623,_0x591c87){var _0x5684ae=_0x1dc1;_0x349623[_0x5684ae(0x150)]=_0x5684ae(0x1fe),_0x349623[_0x5684ae(0x1ff)]=_0x3dd614[_0x5684ae(0x200)],_0x3dbeda=_0x591c87[_0x5684ae(0x11e)][_0x5684ae(0x1b9)],_0x591c87['node'][_0x5684ae(0x1b9)]=_0x349623,_0x5ad6e2['_treeNodePropertiesBeforeFullValue'](_0x349623,_0x591c87);}try{_0x4dde75['level']++,_0x4dde75['autoExpand']&&_0x4dde75[_0x73b905(0x14f)]['push'](_0x4b83d7);var _0x3c9ba1,_0x58d18e,_0x1e1cd8,_0xe9f856,_0xfe2a5f=[],_0x195f85=[],_0x5db02f,_0xb02fbd=this[_0x73b905(0x1a2)](_0x4b83d7),_0x46b41b=_0xb02fbd===_0x73b905(0x1be),_0x349be1=!0x1,_0x3e0a55=_0xb02fbd==='function',_0x1c4902=this[_0x73b905(0x1f0)](_0xb02fbd),_0x5e8205=this['_isPrimitiveWrapperType'](_0xb02fbd),_0x274fe9=_0x1c4902||_0x5e8205,_0x558702={},_0x2557b0=0x0,_0x3f0483=!0x1,_0x3dbeda,_0x58c826=/^(([1-9]{1}[0-9]*)|0)$/;if(_0x4dde75['depth']){if(_0x46b41b){if(_0x58d18e=_0x4b83d7[_0x73b905(0x157)],_0x58d18e>_0x4dde75[_0x73b905(0x173)]){for(_0x1e1cd8=0x0,_0xe9f856=_0x4dde75[_0x73b905(0x173)],_0x3c9ba1=_0x1e1cd8;_0x3c9ba1<_0xe9f856;_0x3c9ba1++)_0x195f85[_0x73b905(0x120)](_0x5ad6e2[_0x73b905(0x1db)](_0xfe2a5f,_0x4b83d7,_0xb02fbd,_0x3c9ba1,_0x4dde75));_0x40b3c7[_0x73b905(0x1cf)]=!0x0;}else{for(_0x1e1cd8=0x0,_0xe9f856=_0x58d18e,_0x3c9ba1=_0x1e1cd8;_0x3c9ba1<_0xe9f856;_0x3c9ba1++)_0x195f85[_0x73b905(0x120)](_0x5ad6e2[_0x73b905(0x1db)](_0xfe2a5f,_0x4b83d7,_0xb02fbd,_0x3c9ba1,_0x4dde75));}_0x4dde75['autoExpandPropertyCount']+=_0x195f85[_0x73b905(0x157)];}if(!(_0xb02fbd===_0x73b905(0x12a)||_0xb02fbd==='undefined')&&!_0x1c4902&&_0xb02fbd!==_0x73b905(0x145)&&_0xb02fbd!==_0x73b905(0x1c5)&&_0xb02fbd!==_0x73b905(0x1da)){var _0x1375d8=_0x472b77[_0x73b905(0x1ae)]||_0x4dde75[_0x73b905(0x1ae)];if(this[_0x73b905(0x155)](_0x4b83d7)?(_0x3c9ba1=0x0,_0x4b83d7['forEach'](function(_0x4ba7af){var _0x337181=_0x73b905;if(_0x2557b0++,_0x4dde75['autoExpandPropertyCount']++,_0x2557b0>_0x1375d8){_0x3f0483=!0x0;return;}if(!_0x4dde75[_0x337181(0x175)]&&_0x4dde75[_0x337181(0x166)]&&_0x4dde75[_0x337181(0x15c)]>_0x4dde75[_0x337181(0x1c0)]){_0x3f0483=!0x0;return;}_0x195f85[_0x337181(0x120)](_0x5ad6e2['_addProperty'](_0xfe2a5f,_0x4b83d7,_0x337181(0x136),_0x3c9ba1++,_0x4dde75,function(_0x28250){return function(){return _0x28250;};}(_0x4ba7af)));})):this['_isMap'](_0x4b83d7)&&_0x4b83d7[_0x73b905(0x159)](function(_0x5d9228,_0xca50d3){var _0x12665d=_0x73b905;if(_0x2557b0++,_0x4dde75[_0x12665d(0x15c)]++,_0x2557b0>_0x1375d8){_0x3f0483=!0x0;return;}if(!_0x4dde75[_0x12665d(0x175)]&&_0x4dde75[_0x12665d(0x166)]&&_0x4dde75[_0x12665d(0x15c)]>_0x4dde75[_0x12665d(0x1c0)]){_0x3f0483=!0x0;return;}var _0x39915e=_0xca50d3['toString']();_0x39915e[_0x12665d(0x157)]>0x64&&(_0x39915e=_0x39915e['slice'](0x0,0x64)+_0x12665d(0x1d6)),_0x195f85['push'](_0x5ad6e2['_addProperty'](_0xfe2a5f,_0x4b83d7,_0x12665d(0x1d9),_0x39915e,_0x4dde75,function(_0x2957ad){return function(){return _0x2957ad;};}(_0x5d9228)));}),!_0x349be1){try{for(_0x5db02f in _0x4b83d7)if(!(_0x46b41b&&_0x58c826[_0x73b905(0x18a)](_0x5db02f))&&!this[_0x73b905(0x1ef)](_0x4b83d7,_0x5db02f,_0x4dde75)){if(_0x2557b0++,_0x4dde75[_0x73b905(0x15c)]++,_0x2557b0>_0x1375d8){_0x3f0483=!0x0;break;}if(!_0x4dde75[_0x73b905(0x175)]&&_0x4dde75['autoExpand']&&_0x4dde75['autoExpandPropertyCount']>_0x4dde75['autoExpandLimit']){_0x3f0483=!0x0;break;}_0x195f85[_0x73b905(0x120)](_0x5ad6e2[_0x73b905(0x163)](_0xfe2a5f,_0x558702,_0x4b83d7,_0xb02fbd,_0x5db02f,_0x4dde75));}}catch{}if(_0x558702[_0x73b905(0x1ab)]=!0x0,_0x3e0a55&&(_0x558702[_0x73b905(0x15b)]=!0x0),!_0x3f0483){var _0x1fb0c0=[][_0x73b905(0x204)](this[_0x73b905(0x16c)](_0x4b83d7))[_0x73b905(0x204)](this[_0x73b905(0x1cb)](_0x4b83d7));for(_0x3c9ba1=0x0,_0x58d18e=_0x1fb0c0[_0x73b905(0x157)];_0x3c9ba1<_0x58d18e;_0x3c9ba1++)if(_0x5db02f=_0x1fb0c0[_0x3c9ba1],!(_0x46b41b&&_0x58c826[_0x73b905(0x18a)](_0x5db02f[_0x73b905(0x158)]()))&&!this[_0x73b905(0x1ef)](_0x4b83d7,_0x5db02f,_0x4dde75)&&!_0x558702[_0x73b905(0x13e)+_0x5db02f[_0x73b905(0x158)]()]){if(_0x2557b0++,_0x4dde75['autoExpandPropertyCount']++,_0x2557b0>_0x1375d8){_0x3f0483=!0x0;break;}if(!_0x4dde75[_0x73b905(0x175)]&&_0x4dde75[_0x73b905(0x166)]&&_0x4dde75[_0x73b905(0x15c)]>_0x4dde75['autoExpandLimit']){_0x3f0483=!0x0;break;}_0x195f85[_0x73b905(0x120)](_0x5ad6e2[_0x73b905(0x163)](_0xfe2a5f,_0x558702,_0x4b83d7,_0xb02fbd,_0x5db02f,_0x4dde75));}}}}}if(_0x40b3c7[_0x73b905(0x150)]=_0xb02fbd,_0x274fe9?(_0x40b3c7[_0x73b905(0x148)]=_0x4b83d7[_0x73b905(0x1b8)](),this[_0x73b905(0x123)](_0xb02fbd,_0x40b3c7,_0x4dde75,_0x472b77)):_0xb02fbd===_0x73b905(0x1b1)?_0x40b3c7[_0x73b905(0x148)]=this[_0x73b905(0x134)]['call'](_0x4b83d7):_0xb02fbd===_0x73b905(0x1da)?_0x40b3c7[_0x73b905(0x148)]=_0x4b83d7[_0x73b905(0x158)]():_0xb02fbd===_0x73b905(0x194)?_0x40b3c7['value']=this[_0x73b905(0x19b)]['call'](_0x4b83d7):_0xb02fbd==='symbol'&&this[_0x73b905(0x1d4)]?_0x40b3c7[_0x73b905(0x148)]=this['_Symbol'][_0x73b905(0x169)][_0x73b905(0x158)]['call'](_0x4b83d7):!_0x4dde75[_0x73b905(0x1e0)]&&!(_0xb02fbd===_0x73b905(0x12a)||_0xb02fbd===_0x73b905(0x197))&&(delete _0x40b3c7['value'],_0x40b3c7[_0x73b905(0x1a5)]=!0x0),_0x3f0483&&(_0x40b3c7[_0x73b905(0x1c7)]=!0x0),_0x3dbeda=_0x4dde75[_0x73b905(0x11e)][_0x73b905(0x1b9)],_0x4dde75[_0x73b905(0x11e)][_0x73b905(0x1b9)]=_0x40b3c7,this[_0x73b905(0x11d)](_0x40b3c7,_0x4dde75),_0x195f85[_0x73b905(0x157)]){for(_0x3c9ba1=0x0,_0x58d18e=_0x195f85[_0x73b905(0x157)];_0x3c9ba1<_0x58d18e;_0x3c9ba1++)_0x195f85[_0x3c9ba1](_0x3c9ba1);}_0xfe2a5f[_0x73b905(0x157)]&&(_0x40b3c7['props']=_0xfe2a5f);}catch(_0x46dba5){_0x289839(_0x46dba5,_0x40b3c7,_0x4dde75);}return this[_0x73b905(0x1b2)](_0x4b83d7,_0x40b3c7),this[_0x73b905(0x203)](_0x40b3c7,_0x4dde75),_0x4dde75[_0x73b905(0x11e)][_0x73b905(0x1b9)]=_0x3dbeda,_0x4dde75['level']--,_0x4dde75[_0x73b905(0x166)]=_0x51ab87,_0x4dde75[_0x73b905(0x166)]&&_0x4dde75['autoExpandPreviousObjects'][_0x73b905(0x1ce)](),_0x40b3c7;}[_0x433aca(0x1cb)](_0x19ddb5){return Object['getOwnPropertySymbols']?Object['getOwnPropertySymbols'](_0x19ddb5):[];}['_isSet'](_0x133a4c){var _0x27c7e8=_0x433aca;return!!(_0x133a4c&&_0x1f0003['Set']&&this[_0x27c7e8(0x151)](_0x133a4c)===_0x27c7e8(0x202)&&_0x133a4c[_0x27c7e8(0x159)]);}['_blacklistedProperty'](_0x41af7a,_0xb1c5cb,_0x5da846){var _0x16d762=_0x433aca;return _0x5da846[_0x16d762(0x13d)]?typeof _0x41af7a[_0xb1c5cb]==_0x16d762(0x11f):!0x1;}['_type'](_0x493c83){var _0xccaefd=_0x433aca,_0x2db71c='';return _0x2db71c=typeof _0x493c83,_0x2db71c==='object'?this[_0xccaefd(0x151)](_0x493c83)===_0xccaefd(0x139)?_0x2db71c=_0xccaefd(0x1be):this['_objectToString'](_0x493c83)===_0xccaefd(0x181)?_0x2db71c=_0xccaefd(0x1b1):this[_0xccaefd(0x151)](_0x493c83)===_0xccaefd(0x1e2)?_0x2db71c=_0xccaefd(0x1da):_0x493c83===null?_0x2db71c=_0xccaefd(0x12a):_0x493c83[_0xccaefd(0x1ac)]&&(_0x2db71c=_0x493c83[_0xccaefd(0x1ac)][_0xccaefd(0x143)]||_0x2db71c):_0x2db71c===_0xccaefd(0x197)&&this[_0xccaefd(0x1c2)]&&_0x493c83 instanceof this[_0xccaefd(0x1c2)]&&(_0x2db71c=_0xccaefd(0x1e5)),_0x2db71c;}['_objectToString'](_0x156ddc){var _0x2163b1=_0x433aca;return Object[_0x2163b1(0x169)]['toString'][_0x2163b1(0x18f)](_0x156ddc);}['_isPrimitiveType'](_0x29392d){var _0x4df8b6=_0x433aca;return _0x29392d==='boolean'||_0x29392d===_0x4df8b6(0x1f4)||_0x29392d===_0x4df8b6(0x1f5);}[_0x433aca(0x1a8)](_0x565656){var _0x5ec67e=_0x433aca;return _0x565656==='Boolean'||_0x565656===_0x5ec67e(0x145)||_0x565656===_0x5ec67e(0x1de);}[_0x433aca(0x1db)](_0x31768e,_0x3d78d7,_0x2b1ad1,_0x1486ca,_0x2a72bc,_0x36ad5b){var _0x3209a1=this;return function(_0x51f598){var _0x27127b=_0x1dc1,_0x5691d9=_0x2a72bc[_0x27127b(0x11e)][_0x27127b(0x1b9)],_0x4d8359=_0x2a72bc[_0x27127b(0x11e)]['index'],_0x56e7e1=_0x2a72bc['node'][_0x27127b(0x1d7)];_0x2a72bc[_0x27127b(0x11e)][_0x27127b(0x1d7)]=_0x5691d9,_0x2a72bc['node'][_0x27127b(0x1d3)]=typeof _0x1486ca==_0x27127b(0x1f5)?_0x1486ca:_0x51f598,_0x31768e[_0x27127b(0x120)](_0x3209a1[_0x27127b(0x1b5)](_0x3d78d7,_0x2b1ad1,_0x1486ca,_0x2a72bc,_0x36ad5b)),_0x2a72bc[_0x27127b(0x11e)]['parent']=_0x56e7e1,_0x2a72bc[_0x27127b(0x11e)][_0x27127b(0x1d3)]=_0x4d8359;};}[_0x433aca(0x163)](_0x47b3ca,_0x10da83,_0x6b8161,_0x10e267,_0xf6eae5,_0x4ca7ce,_0x588785){var _0x5439d9=_0x433aca,_0x39c71b=this;return _0x10da83[_0x5439d9(0x13e)+_0xf6eae5[_0x5439d9(0x158)]()]=!0x0,function(_0x39b27c){var _0x1e9883=_0x5439d9,_0xbe10cf=_0x4ca7ce[_0x1e9883(0x11e)]['current'],_0x1352b7=_0x4ca7ce[_0x1e9883(0x11e)]['index'],_0x30cdaa=_0x4ca7ce[_0x1e9883(0x11e)]['parent'];_0x4ca7ce[_0x1e9883(0x11e)][_0x1e9883(0x1d7)]=_0xbe10cf,_0x4ca7ce[_0x1e9883(0x11e)]['index']=_0x39b27c,_0x47b3ca['push'](_0x39c71b[_0x1e9883(0x1b5)](_0x6b8161,_0x10e267,_0xf6eae5,_0x4ca7ce,_0x588785)),_0x4ca7ce['node']['parent']=_0x30cdaa,_0x4ca7ce[_0x1e9883(0x11e)][_0x1e9883(0x1d3)]=_0x1352b7;};}['_property'](_0x62856a,_0x3ac22f,_0x4a3629,_0x116d07,_0x1b091f){var _0x48fe52=_0x433aca,_0x3a83f7=this;_0x1b091f||(_0x1b091f=function(_0x26618b,_0x15aa5c){return _0x26618b[_0x15aa5c];});var _0x32e768=_0x4a3629['toString'](),_0x224be3=_0x116d07['expressionsToEvaluate']||{},_0x1dd963=_0x116d07[_0x48fe52(0x1e0)],_0x51d041=_0x116d07[_0x48fe52(0x175)];try{var _0x3c74fe=this[_0x48fe52(0x13c)](_0x62856a),_0x753ac9=_0x32e768;_0x3c74fe&&_0x753ac9[0x0]==='\\x27'&&(_0x753ac9=_0x753ac9[_0x48fe52(0x133)](0x1,_0x753ac9[_0x48fe52(0x157)]-0x2));var _0x97eb76=_0x116d07[_0x48fe52(0x15e)]=_0x224be3[_0x48fe52(0x13e)+_0x753ac9];_0x97eb76&&(_0x116d07[_0x48fe52(0x1e0)]=_0x116d07['depth']+0x1),_0x116d07['isExpressionToEvaluate']=!!_0x97eb76;var _0x5b0fde=typeof _0x4a3629==_0x48fe52(0x17f),_0x250794={'name':_0x5b0fde||_0x3c74fe?_0x32e768:this[_0x48fe52(0x129)](_0x32e768)};if(_0x5b0fde&&(_0x250794[_0x48fe52(0x17f)]=!0x0),!(_0x3ac22f===_0x48fe52(0x1be)||_0x3ac22f==='Error')){var _0xd341a2=this[_0x48fe52(0x140)](_0x62856a,_0x4a3629);if(_0xd341a2&&(_0xd341a2['set']&&(_0x250794[_0x48fe52(0x179)]=!0x0),_0xd341a2[_0x48fe52(0x1c1)]&&!_0x97eb76&&!_0x116d07[_0x48fe52(0x1a9)]))return _0x250794[_0x48fe52(0x12e)]=!0x0,this['_processTreeNodeResult'](_0x250794,_0x116d07),_0x250794;}var _0x31ea3e;try{_0x31ea3e=_0x1b091f(_0x62856a,_0x4a3629);}catch(_0x46a010){return _0x250794={'name':_0x32e768,'type':_0x48fe52(0x1fe),'error':_0x46a010[_0x48fe52(0x200)]},this[_0x48fe52(0x141)](_0x250794,_0x116d07),_0x250794;}var _0x175a4c=this[_0x48fe52(0x1a2)](_0x31ea3e),_0x1ddf90=this[_0x48fe52(0x1f0)](_0x175a4c);if(_0x250794[_0x48fe52(0x150)]=_0x175a4c,_0x1ddf90)this[_0x48fe52(0x141)](_0x250794,_0x116d07,_0x31ea3e,function(){var _0xc830d=_0x48fe52;_0x250794[_0xc830d(0x148)]=_0x31ea3e[_0xc830d(0x1b8)](),!_0x97eb76&&_0x3a83f7['_capIfString'](_0x175a4c,_0x250794,_0x116d07,{});});else{var _0x49ad15=_0x116d07['autoExpand']&&_0x116d07[_0x48fe52(0x1ea)]<_0x116d07[_0x48fe52(0x18e)]&&_0x116d07['autoExpandPreviousObjects'][_0x48fe52(0x178)](_0x31ea3e)<0x0&&_0x175a4c!==_0x48fe52(0x11f)&&_0x116d07[_0x48fe52(0x15c)]<_0x116d07[_0x48fe52(0x1c0)];_0x49ad15||_0x116d07[_0x48fe52(0x1ea)]<_0x1dd963||_0x97eb76?(this[_0x48fe52(0x121)](_0x250794,_0x31ea3e,_0x116d07,_0x97eb76||{}),this[_0x48fe52(0x1b2)](_0x31ea3e,_0x250794)):this['_processTreeNodeResult'](_0x250794,_0x116d07,_0x31ea3e,function(){var _0x1e18c6=_0x48fe52;_0x175a4c===_0x1e18c6(0x12a)||_0x175a4c===_0x1e18c6(0x197)||(delete _0x250794['value'],_0x250794[_0x1e18c6(0x1a5)]=!0x0);});}return _0x250794;}finally{_0x116d07[_0x48fe52(0x15e)]=_0x224be3,_0x116d07[_0x48fe52(0x1e0)]=_0x1dd963,_0x116d07[_0x48fe52(0x175)]=_0x51d041;}}[_0x433aca(0x123)](_0x35f650,_0x179012,_0x2d596f,_0x95dd9){var _0x1e8301=_0x433aca,_0x666db2=_0x95dd9[_0x1e8301(0x156)]||_0x2d596f[_0x1e8301(0x156)];if((_0x35f650===_0x1e8301(0x1f4)||_0x35f650===_0x1e8301(0x145))&&_0x179012[_0x1e8301(0x148)]){let _0x3e1356=_0x179012['value'][_0x1e8301(0x157)];_0x2d596f[_0x1e8301(0x198)]+=_0x3e1356,_0x2d596f[_0x1e8301(0x198)]>_0x2d596f[_0x1e8301(0x12d)]?(_0x179012[_0x1e8301(0x1a5)]='',delete _0x179012[_0x1e8301(0x148)]):_0x3e1356>_0x666db2&&(_0x179012[_0x1e8301(0x1a5)]=_0x179012[_0x1e8301(0x148)][_0x1e8301(0x133)](0x0,_0x666db2),delete _0x179012[_0x1e8301(0x148)]);}}['_isMap'](_0x291310){var _0x49da7d=_0x433aca;return!!(_0x291310&&_0x1f0003[_0x49da7d(0x1d9)]&&this['_objectToString'](_0x291310)===_0x49da7d(0x16b)&&_0x291310[_0x49da7d(0x159)]);}[_0x433aca(0x129)](_0x4c3443){var _0x26e8ee=_0x433aca;if(_0x4c3443[_0x26e8ee(0x1cd)](/^\\d+$/))return _0x4c3443;var _0x507c13;try{_0x507c13=JSON['stringify'](''+_0x4c3443);}catch{_0x507c13='\\x22'+this[_0x26e8ee(0x151)](_0x4c3443)+'\\x22';}return _0x507c13['match'](/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)?_0x507c13=_0x507c13[_0x26e8ee(0x133)](0x1,_0x507c13[_0x26e8ee(0x157)]-0x2):_0x507c13=_0x507c13[_0x26e8ee(0x19f)](/'/g,'\\x5c\\x27')[_0x26e8ee(0x19f)](/\\\\\"/g,'\\x22')['replace'](/(^\"|\"$)/g,'\\x27'),_0x507c13;}[_0x433aca(0x141)](_0x4145bc,_0xc711b5,_0x232653,_0x1ee20a){var _0x3322ae=_0x433aca;this['_treeNodePropertiesBeforeFullValue'](_0x4145bc,_0xc711b5),_0x1ee20a&&_0x1ee20a(),this[_0x3322ae(0x1b2)](_0x232653,_0x4145bc),this['_treeNodePropertiesAfterFullValue'](_0x4145bc,_0xc711b5);}[_0x433aca(0x11d)](_0x3d1fa9,_0x3b5c26){var _0x1c56da=_0x433aca;this[_0x1c56da(0x152)](_0x3d1fa9,_0x3b5c26),this[_0x1c56da(0x1bd)](_0x3d1fa9,_0x3b5c26),this[_0x1c56da(0x188)](_0x3d1fa9,_0x3b5c26),this[_0x1c56da(0x199)](_0x3d1fa9,_0x3b5c26);}['_setNodeId'](_0xeeae71,_0x306e2b){}[_0x433aca(0x1bd)](_0x40ddb9,_0x518140){}[_0x433aca(0x182)](_0x34bb3e,_0x2affba){}[_0x433aca(0x1d2)](_0x33a836){return _0x33a836===this['_undefined'];}['_treeNodePropertiesAfterFullValue'](_0xabea40,_0x4253d6){var _0x4384d2=_0x433aca;this[_0x4384d2(0x182)](_0xabea40,_0x4253d6),this[_0x4384d2(0x205)](_0xabea40),_0x4253d6[_0x4384d2(0x16d)]&&this['_sortProps'](_0xabea40),this[_0x4384d2(0x1e7)](_0xabea40,_0x4253d6),this[_0x4384d2(0x1fd)](_0xabea40,_0x4253d6),this['_cleanNode'](_0xabea40);}[_0x433aca(0x1b2)](_0x319356,_0x421c61){var _0x27e209=_0x433aca;let _0x8bc189;try{_0x1f0003[_0x27e209(0x1ee)]&&(_0x8bc189=_0x1f0003[_0x27e209(0x1ee)]['error'],_0x1f0003['console'][_0x27e209(0x1ff)]=function(){}),_0x319356&&typeof _0x319356[_0x27e209(0x157)]==_0x27e209(0x1f5)&&(_0x421c61[_0x27e209(0x157)]=_0x319356['length']);}catch{}finally{_0x8bc189&&(_0x1f0003[_0x27e209(0x1ee)][_0x27e209(0x1ff)]=_0x8bc189);}if(_0x421c61[_0x27e209(0x150)]===_0x27e209(0x1f5)||_0x421c61[_0x27e209(0x150)]===_0x27e209(0x1de)){if(isNaN(_0x421c61[_0x27e209(0x148)]))_0x421c61['nan']=!0x0,delete _0x421c61['value'];else switch(_0x421c61['value']){case Number[_0x27e209(0x16f)]:_0x421c61['positiveInfinity']=!0x0,delete _0x421c61['value'];break;case Number[_0x27e209(0x19d)]:_0x421c61['negativeInfinity']=!0x0,delete _0x421c61[_0x27e209(0x148)];break;case 0x0:this['_isNegativeZero'](_0x421c61[_0x27e209(0x148)])&&(_0x421c61[_0x27e209(0x16e)]=!0x0);break;}}else _0x421c61[_0x27e209(0x150)]==='function'&&typeof _0x319356[_0x27e209(0x143)]==_0x27e209(0x1f4)&&_0x319356[_0x27e209(0x143)]&&_0x421c61['name']&&_0x319356[_0x27e209(0x143)]!==_0x421c61[_0x27e209(0x143)]&&(_0x421c61[_0x27e209(0x14e)]=_0x319356['name']);}[_0x433aca(0x131)](_0x38529f){var _0x199888=_0x433aca;return 0x1/_0x38529f===Number[_0x199888(0x19d)];}[_0x433aca(0x17e)](_0x52cbce){var _0xfd397e=_0x433aca;!_0x52cbce[_0xfd397e(0x1ae)]||!_0x52cbce[_0xfd397e(0x1ae)][_0xfd397e(0x157)]||_0x52cbce[_0xfd397e(0x150)]===_0xfd397e(0x1be)||_0x52cbce[_0xfd397e(0x150)]===_0xfd397e(0x1d9)||_0x52cbce[_0xfd397e(0x150)]===_0xfd397e(0x136)||_0x52cbce[_0xfd397e(0x1ae)][_0xfd397e(0x161)](function(_0x55c773,_0x119e91){var _0x1f0ef4=_0xfd397e,_0x4f83a8=_0x55c773[_0x1f0ef4(0x143)]['toLowerCase'](),_0x1a95f6=_0x119e91[_0x1f0ef4(0x143)][_0x1f0ef4(0x13f)]();return _0x4f83a8<_0x1a95f6?-0x1:_0x4f83a8>_0x1a95f6?0x1:0x0;});}[_0x433aca(0x1e7)](_0x6b619e,_0x4d1830){var _0x2f1876=_0x433aca;if(!(_0x4d1830['noFunctions']||!_0x6b619e[_0x2f1876(0x1ae)]||!_0x6b619e[_0x2f1876(0x1ae)][_0x2f1876(0x157)])){for(var _0x398d2e=[],_0x49dc6c=[],_0x413881=0x0,_0x5386e7=_0x6b619e[_0x2f1876(0x1ae)][_0x2f1876(0x157)];_0x413881<_0x5386e7;_0x413881++){var _0x53badb=_0x6b619e[_0x2f1876(0x1ae)][_0x413881];_0x53badb[_0x2f1876(0x150)]===_0x2f1876(0x11f)?_0x398d2e[_0x2f1876(0x120)](_0x53badb):_0x49dc6c[_0x2f1876(0x120)](_0x53badb);}if(!(!_0x49dc6c['length']||_0x398d2e[_0x2f1876(0x157)]<=0x1)){_0x6b619e['props']=_0x49dc6c;var _0x4f9048={'functionsNode':!0x0,'props':_0x398d2e};this['_setNodeId'](_0x4f9048,_0x4d1830),this['_setNodeLabel'](_0x4f9048,_0x4d1830),this[_0x2f1876(0x205)](_0x4f9048),this[_0x2f1876(0x199)](_0x4f9048,_0x4d1830),_0x4f9048['id']+='\\x20f',_0x6b619e['props']['unshift'](_0x4f9048);}}}[_0x433aca(0x1fd)](_0x278bab,_0x4b8b27){}[_0x433aca(0x205)](_0x246c56){}[_0x433aca(0x12f)](_0x113fc3){var _0x3ef565=_0x433aca;return Array[_0x3ef565(0x1b6)](_0x113fc3)||typeof _0x113fc3==_0x3ef565(0x128)&&this['_objectToString'](_0x113fc3)==='[object\\x20Array]';}[_0x433aca(0x199)](_0x3c4c19,_0x461c82){}[_0x433aca(0x168)](_0x2e6ab0){var _0x28756d=_0x433aca;delete _0x2e6ab0[_0x28756d(0x1c6)],delete _0x2e6ab0[_0x28756d(0x1f2)],delete _0x2e6ab0[_0x28756d(0x1fc)];}[_0x433aca(0x188)](_0x469a5d,_0x4a22ef){}}let _0x563d1e=new _0x4a3f4d(),_0x5b329f={'props':0x64,'elements':0x64,'strLength':0x400*0x32,'totalStrLength':0x400*0x32,'autoExpandLimit':0x1388,'autoExpandMaxDepth':0xa},_0x603c01={'props':0x5,'elements':0x5,'strLength':0x100,'totalStrLength':0x100*0x3,'autoExpandLimit':0x1e,'autoExpandMaxDepth':0x2};function _0x5f480e(_0x3193ed,_0x20af3c,_0x4f0827,_0x53d8b1,_0xe97fc3,_0x22a33f){var _0x4dfeb1=_0x433aca;let _0x56d916,_0x3e4af1;try{_0x3e4af1=_0x49a237(),_0x56d916=_0x246933[_0x20af3c],!_0x56d916||_0x3e4af1-_0x56d916['ts']>0x1f4&&_0x56d916[_0x4dfeb1(0x1c8)]&&_0x56d916[_0x4dfeb1(0x1e9)]/_0x56d916['count']<0x64?(_0x246933[_0x20af3c]=_0x56d916={'count':0x0,'time':0x0,'ts':_0x3e4af1},_0x246933['hits']={}):_0x3e4af1-_0x246933['hits']['ts']>0x32&&_0x246933[_0x4dfeb1(0x172)][_0x4dfeb1(0x1c8)]&&_0x246933[_0x4dfeb1(0x172)]['time']/_0x246933[_0x4dfeb1(0x172)][_0x4dfeb1(0x1c8)]<0x64&&(_0x246933[_0x4dfeb1(0x172)]={});let _0x30e908=[],_0x111f30=_0x56d916[_0x4dfeb1(0x1e6)]||_0x246933['hits']['reduceLimits']?_0x603c01:_0x5b329f,_0x202cd4=_0x18f292=>{var _0x2817fd=_0x4dfeb1;let _0x2b31de={};return _0x2b31de[_0x2817fd(0x1ae)]=_0x18f292['props'],_0x2b31de[_0x2817fd(0x173)]=_0x18f292[_0x2817fd(0x173)],_0x2b31de[_0x2817fd(0x156)]=_0x18f292[_0x2817fd(0x156)],_0x2b31de[_0x2817fd(0x12d)]=_0x18f292[_0x2817fd(0x12d)],_0x2b31de[_0x2817fd(0x1c0)]=_0x18f292[_0x2817fd(0x1c0)],_0x2b31de[_0x2817fd(0x18e)]=_0x18f292['autoExpandMaxDepth'],_0x2b31de[_0x2817fd(0x16d)]=!0x1,_0x2b31de[_0x2817fd(0x13d)]=!_0x1a15fa,_0x2b31de[_0x2817fd(0x1e0)]=0x1,_0x2b31de[_0x2817fd(0x1ea)]=0x0,_0x2b31de[_0x2817fd(0x184)]='root_exp_id',_0x2b31de[_0x2817fd(0x124)]=_0x2817fd(0x164),_0x2b31de[_0x2817fd(0x166)]=!0x0,_0x2b31de['autoExpandPreviousObjects']=[],_0x2b31de[_0x2817fd(0x15c)]=0x0,_0x2b31de[_0x2817fd(0x1a9)]=!0x0,_0x2b31de[_0x2817fd(0x198)]=0x0,_0x2b31de[_0x2817fd(0x11e)]={'current':void 0x0,'parent':void 0x0,'index':0x0},_0x2b31de;};for(var _0x1d6c83=0x0;_0x1d6c83<_0xe97fc3['length'];_0x1d6c83++)_0x30e908[_0x4dfeb1(0x120)](_0x563d1e['serialize']({'timeNode':_0x3193ed===_0x4dfeb1(0x1e9)||void 0x0},_0xe97fc3[_0x1d6c83],_0x202cd4(_0x111f30),{}));if(_0x3193ed===_0x4dfeb1(0x14d)){let _0x204c59=Error[_0x4dfeb1(0x125)];try{Error[_0x4dfeb1(0x125)]=0x1/0x0,_0x30e908['push'](_0x563d1e[_0x4dfeb1(0x121)]({'stackNode':!0x0},new Error()[_0x4dfeb1(0x1af)],_0x202cd4(_0x111f30),{'strLength':0x1/0x0}));}finally{Error['stackTraceLimit']=_0x204c59;}}return{'method':'log','version':_0x544019,'args':[{'ts':_0x4f0827,'session':_0x53d8b1,'args':_0x30e908,'id':_0x20af3c,'context':_0x22a33f}]};}catch(_0x54dd5e){return{'method':_0x4dfeb1(0x1a3),'version':_0x544019,'args':[{'ts':_0x4f0827,'session':_0x53d8b1,'args':[{'type':_0x4dfeb1(0x1fe),'error':_0x54dd5e&&_0x54dd5e[_0x4dfeb1(0x200)]}],'id':_0x20af3c,'context':_0x22a33f}]};}finally{try{if(_0x56d916&&_0x3e4af1){let _0x19f770=_0x49a237();_0x56d916[_0x4dfeb1(0x1c8)]++,_0x56d916[_0x4dfeb1(0x1e9)]+=_0x269c14(_0x3e4af1,_0x19f770),_0x56d916['ts']=_0x19f770,_0x246933[_0x4dfeb1(0x172)][_0x4dfeb1(0x1c8)]++,_0x246933[_0x4dfeb1(0x172)][_0x4dfeb1(0x1e9)]+=_0x269c14(_0x3e4af1,_0x19f770),_0x246933[_0x4dfeb1(0x172)]['ts']=_0x19f770,(_0x56d916[_0x4dfeb1(0x1c8)]>0x32||_0x56d916[_0x4dfeb1(0x1e9)]>0x64)&&(_0x56d916[_0x4dfeb1(0x1e6)]=!0x0),(_0x246933[_0x4dfeb1(0x172)]['count']>0x3e8||_0x246933[_0x4dfeb1(0x172)]['time']>0x12c)&&(_0x246933[_0x4dfeb1(0x172)][_0x4dfeb1(0x1e6)]=!0x0);}}catch{}}}return _0x5f480e;}((_0x28331b,_0x22ab47,_0x28125a,_0x28e75c,_0x33a3c2,_0xa1ea8f,_0x1b95ec,_0x37e309,_0x1c99af,_0x4ae76f)=>{var _0x1b8b78=_0xa27832;if(_0x28331b[_0x1b8b78(0x160)])return _0x28331b[_0x1b8b78(0x160)];if(!J(_0x28331b,_0x37e309,_0x33a3c2))return _0x28331b[_0x1b8b78(0x160)]={'consoleLog':()=>{},'consoleTrace':()=>{},'consoleTime':()=>{},'consoleTimeEnd':()=>{},'autoLog':()=>{},'autoLogMany':()=>{},'autoTraceMany':()=>{},'coverage':()=>{},'autoTrace':()=>{},'autoTime':()=>{},'autoTimeEnd':()=>{}},_0x28331b[_0x1b8b78(0x160)];let _0x3e7b70=W(_0x28331b),_0x1fe98a=_0x3e7b70[_0x1b8b78(0x142)],_0x2db71b=_0x3e7b70['timeStamp'],_0x5159de=_0x3e7b70[_0x1b8b78(0x183)],_0x3665e0={'hits':{},'ts':{}},_0x3b5676=Y(_0x28331b,_0x1c99af,_0x3665e0,_0xa1ea8f),_0x163451=_0x5729fd=>{_0x3665e0['ts'][_0x5729fd]=_0x2db71b();},_0x2c8fca=(_0x25def9,_0x17889b)=>{var _0x486236=_0x1b8b78;let _0x483566=_0x3665e0['ts'][_0x17889b];if(delete _0x3665e0['ts'][_0x17889b],_0x483566){let _0x4a82a9=_0x1fe98a(_0x483566,_0x2db71b());_0x472878(_0x3b5676(_0x486236(0x1e9),_0x25def9,_0x5159de(),_0xe95e2e,[_0x4a82a9],_0x17889b));}},_0x5abfa9=_0x19b80d=>_0x2ee396=>{var _0x16af84=_0x1b8b78;try{_0x163451(_0x2ee396),_0x19b80d(_0x2ee396);}finally{_0x28331b[_0x16af84(0x1ee)][_0x16af84(0x1e9)]=_0x19b80d;}},_0x619635=_0x169afb=>_0x7e4a8=>{var _0x1a4e09=_0x1b8b78;try{let [_0xaf5afe,_0x1ce59e]=_0x7e4a8['split'](_0x1a4e09(0x17b));_0x2c8fca(_0x1ce59e,_0xaf5afe),_0x169afb(_0xaf5afe);}finally{_0x28331b[_0x1a4e09(0x1ee)][_0x1a4e09(0x170)]=_0x169afb;}};_0x28331b[_0x1b8b78(0x160)]={'consoleLog':(_0x715ca0,_0xaacd9f)=>{var _0x36622a=_0x1b8b78;_0x28331b[_0x36622a(0x1ee)][_0x36622a(0x1a3)]['name']!==_0x36622a(0x15a)&&_0x472878(_0x3b5676(_0x36622a(0x1a3),_0x715ca0,_0x5159de(),_0xe95e2e,_0xaacd9f));},'consoleTrace':(_0x60f4ea,_0x1e029e)=>{var _0x4d7024=_0x1b8b78;_0x28331b[_0x4d7024(0x1ee)]['log'][_0x4d7024(0x143)]!==_0x4d7024(0x1f6)&&_0x472878(_0x3b5676(_0x4d7024(0x14d),_0x60f4ea,_0x5159de(),_0xe95e2e,_0x1e029e));},'consoleTime':()=>{var _0x470a11=_0x1b8b78;_0x28331b[_0x470a11(0x1ee)][_0x470a11(0x1e9)]=_0x5abfa9(_0x28331b[_0x470a11(0x1ee)][_0x470a11(0x1e9)]);},'consoleTimeEnd':()=>{var _0x4c2b10=_0x1b8b78;_0x28331b['console']['timeEnd']=_0x619635(_0x28331b[_0x4c2b10(0x1ee)][_0x4c2b10(0x170)]);},'autoLog':(_0x1b2d50,_0x4ed1eb)=>{var _0x36924f=_0x1b8b78;_0x472878(_0x3b5676(_0x36924f(0x1a3),_0x4ed1eb,_0x5159de(),_0xe95e2e,[_0x1b2d50]));},'autoLogMany':(_0x45dbc8,_0x55f0de)=>{var _0x4f4302=_0x1b8b78;_0x472878(_0x3b5676(_0x4f4302(0x1a3),_0x45dbc8,_0x5159de(),_0xe95e2e,_0x55f0de));},'autoTrace':(_0x3a4027,_0x3aad84)=>{var _0x47aaec=_0x1b8b78;_0x472878(_0x3b5676(_0x47aaec(0x14d),_0x3aad84,_0x5159de(),_0xe95e2e,[_0x3a4027]));},'autoTraceMany':(_0x52d9eb,_0x28c43c)=>{var _0x197168=_0x1b8b78;_0x472878(_0x3b5676(_0x197168(0x14d),_0x52d9eb,_0x5159de(),_0xe95e2e,_0x28c43c));},'autoTime':(_0x50c57e,_0x2bcc66,_0x465d98)=>{_0x163451(_0x465d98);},'autoTimeEnd':(_0x1a7664,_0x134ee0,_0xd56688)=>{_0x2c8fca(_0x134ee0,_0xd56688);},'coverage':_0x76e9ad=>{var _0x3c5267=_0x1b8b78;_0x472878({'method':_0x3c5267(0x1ba),'version':_0xa1ea8f,'args':[{'id':_0x76e9ad}]});}};let _0x472878=b(_0x28331b,_0x22ab47,_0x28125a,_0x28e75c,_0x33a3c2,_0x4ae76f),_0xe95e2e=_0x28331b[_0x1b8b78(0x1ad)];return _0x28331b[_0x1b8b78(0x160)];})(globalThis,_0xa27832(0x187),_0xa27832(0x12b),\"c:\\\\Users\\\\arvin\\\\.vscode\\\\extensions\\\\wallabyjs.console-ninja-1.0.255\\\\node_modules\",_0xa27832(0x154),_0xa27832(0x162),_0xa27832(0x195),_0xa27832(0x1a6),'',_0xa27832(0x206));");}catch(e){}};function oo_oo(i,...v){try{oo_cm().consoleLog(i, v);}catch(e){} return v};function oo_tr(i,...v){try{oo_cm().consoleTrace(i, v);}catch(e){} return v};function oo_ts(){try{oo_cm().consoleTime();}catch(e){}};function oo_te(){try{oo_cm().consoleTimeEnd();}catch(e){}};/*eslint unicorn/no-abusive-eslint-disable:,eslint-comments/disable-enable-pair:,eslint-comments/no-unlimited-disable:,eslint-comments/no-aggregating-enable:,eslint-comments/no-duplicate-disable:,eslint-comments/no-unused-disable:,eslint-comments/no-unused-enable:,*/
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/server/coverage/lcov-report/server/routes/index.html b/server/coverage/lcov-report/server/routes/index.html new file mode 100644 index 0000000..d492705 --- /dev/null +++ b/server/coverage/lcov-report/server/routes/index.html @@ -0,0 +1,116 @@ + + + + + + Code coverage report for server/routes + + + + + + + + + +
+
+

All files server/routes

+
+ +
+ 100% + Statements + 22/22 +
+ + +
+ 100% + Branches + 0/0 +
+ + +
+ 100% + Functions + 0/0 +
+ + +
+ 100% + Lines + 22/22 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
index.js +
+
100%22/22100%0/0100%0/0100%22/22
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/server/coverage/lcov-report/server/routes/index.js.html b/server/coverage/lcov-report/server/routes/index.js.html new file mode 100644 index 0000000..69fa5e6 --- /dev/null +++ b/server/coverage/lcov-report/server/routes/index.js.html @@ -0,0 +1,163 @@ + + + + + + Code coverage report for server/routes/index.js + + + + + + + + + +
+
+

All files / server/routes index.js

+
+ +
+ 100% + Statements + 22/22 +
+ + +
+ 100% + Branches + 0/0 +
+ + +
+ 100% + Functions + 0/0 +
+ + +
+ 100% + Lines + 22/22 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +274x +4x +4x +4x +4x +4x +4x +4x +  +4x +4x +4x +  +  +4x +4x +  +4x +4x +4x +4x +4x +4x +4x +4x +  +4x
const express = require('express');
+const HistoryController = require('../controllers/HistoryController');
+const UserController = require('../controllers/UserController');
+const errorHandler = require('../middlewares/errorHandler');
+const authentication = require('../middlewares/authentication');
+const BookController = require('../controllers/BookController');
+const MailController = require('../controllers/mails/MailController');
+const router = express.Router();
+ 
+router.post('/register', UserController.create);
+router.post('/login', UserController.login);
+router.post('/login-google', UserController.loginGoogle);
+ 
+// router.get('/users/leaderboards', authentication, UserController.getTopThree);
+router.post('/mail', authentication, MailController.sendMail);
+router.post('/histories', authentication, HistoryController.create);
+// router.post('/histories/:bookId', authentication, HistoryController.create); //Klik card
+router.get('/histories', authentication, HistoryController.getByUserId);
+router.put('/histories/:historyId', authentication, HistoryController.updatePoin);
+router.patch('/histories/:historyId/books/:bookId', authentication, HistoryController.updateBookId);
+router.post('/books', authentication, BookController.findBook);
+router.get('/books', authentication, BookController.getAll);
+router.get('/books/:bookId', authentication, BookController.getById);
+router.delete('/histories/:historyId', authentication, HistoryController.delete)
+router.use(errorHandler.handler);
+ 
+module.exports = router;
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/server/coverage/lcov-report/sort-arrow-sprite.png b/server/coverage/lcov-report/sort-arrow-sprite.png new file mode 100644 index 0000000..6ed6831 Binary files /dev/null and b/server/coverage/lcov-report/sort-arrow-sprite.png differ diff --git a/server/coverage/lcov-report/sorter.js b/server/coverage/lcov-report/sorter.js new file mode 100644 index 0000000..2bb296a --- /dev/null +++ b/server/coverage/lcov-report/sorter.js @@ -0,0 +1,196 @@ +/* eslint-disable */ +var addSorting = (function() { + 'use strict'; + var cols, + currentSort = { + index: 0, + desc: false + }; + + // returns the summary table element + function getTable() { + return document.querySelector('.coverage-summary'); + } + // returns the thead element of the summary table + function getTableHeader() { + return getTable().querySelector('thead tr'); + } + // returns the tbody element of the summary table + function getTableBody() { + return getTable().querySelector('tbody'); + } + // returns the th element for nth column + function getNthColumn(n) { + return getTableHeader().querySelectorAll('th')[n]; + } + + function onFilterInput() { + const searchValue = document.getElementById('fileSearch').value; + const rows = document.getElementsByTagName('tbody')[0].children; + for (let i = 0; i < rows.length; i++) { + const row = rows[i]; + if ( + row.textContent + .toLowerCase() + .includes(searchValue.toLowerCase()) + ) { + row.style.display = ''; + } else { + row.style.display = 'none'; + } + } + } + + // loads the search box + function addSearchBox() { + var template = document.getElementById('filterTemplate'); + var templateClone = template.content.cloneNode(true); + templateClone.getElementById('fileSearch').oninput = onFilterInput; + template.parentElement.appendChild(templateClone); + } + + // loads all columns + function loadColumns() { + var colNodes = getTableHeader().querySelectorAll('th'), + colNode, + cols = [], + col, + i; + + for (i = 0; i < colNodes.length; i += 1) { + colNode = colNodes[i]; + col = { + key: colNode.getAttribute('data-col'), + sortable: !colNode.getAttribute('data-nosort'), + type: colNode.getAttribute('data-type') || 'string' + }; + cols.push(col); + if (col.sortable) { + col.defaultDescSort = col.type === 'number'; + colNode.innerHTML = + colNode.innerHTML + ''; + } + } + return cols; + } + // attaches a data attribute to every tr element with an object + // of data values keyed by column name + function loadRowData(tableRow) { + var tableCols = tableRow.querySelectorAll('td'), + colNode, + col, + data = {}, + i, + val; + for (i = 0; i < tableCols.length; i += 1) { + colNode = tableCols[i]; + col = cols[i]; + val = colNode.getAttribute('data-value'); + if (col.type === 'number') { + val = Number(val); + } + data[col.key] = val; + } + return data; + } + // loads all row data + function loadData() { + var rows = getTableBody().querySelectorAll('tr'), + i; + + for (i = 0; i < rows.length; i += 1) { + rows[i].data = loadRowData(rows[i]); + } + } + // sorts the table using the data for the ith column + function sortByIndex(index, desc) { + var key = cols[index].key, + sorter = function(a, b) { + a = a.data[key]; + b = b.data[key]; + return a < b ? -1 : a > b ? 1 : 0; + }, + finalSorter = sorter, + tableBody = document.querySelector('.coverage-summary tbody'), + rowNodes = tableBody.querySelectorAll('tr'), + rows = [], + i; + + if (desc) { + finalSorter = function(a, b) { + return -1 * sorter(a, b); + }; + } + + for (i = 0; i < rowNodes.length; i += 1) { + rows.push(rowNodes[i]); + tableBody.removeChild(rowNodes[i]); + } + + rows.sort(finalSorter); + + for (i = 0; i < rows.length; i += 1) { + tableBody.appendChild(rows[i]); + } + } + // removes sort indicators for current column being sorted + function removeSortIndicators() { + var col = getNthColumn(currentSort.index), + cls = col.className; + + cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, ''); + col.className = cls; + } + // adds sort indicators for current column being sorted + function addSortIndicators() { + getNthColumn(currentSort.index).className += currentSort.desc + ? ' sorted-desc' + : ' sorted'; + } + // adds event listeners for all sorter widgets + function enableUI() { + var i, + el, + ithSorter = function ithSorter(i) { + var col = cols[i]; + + return function() { + var desc = col.defaultDescSort; + + if (currentSort.index === i) { + desc = !currentSort.desc; + } + sortByIndex(i, desc); + removeSortIndicators(); + currentSort.index = i; + currentSort.desc = desc; + addSortIndicators(); + }; + }; + for (i = 0; i < cols.length; i += 1) { + if (cols[i].sortable) { + // add the click event handler on the th so users + // dont have to click on those tiny arrows + el = getNthColumn(i).querySelector('.sorter').parentElement; + if (el.addEventListener) { + el.addEventListener('click', ithSorter(i)); + } else { + el.attachEvent('onclick', ithSorter(i)); + } + } + } + } + // adds sorting functionality to the UI + return function() { + if (!getTable()) { + return; + } + cols = loadColumns(); + loadData(); + addSearchBox(); + addSortIndicators(); + enableUI(); + }; +})(); + +window.addEventListener('load', addSorting); diff --git a/server/coverage/lcov.info b/server/coverage/lcov.info new file mode 100644 index 0000000..5f39a32 --- /dev/null +++ b/server/coverage/lcov.info @@ -0,0 +1,669 @@ +TN: +SF:app.js +FNF:0 +FNH:0 +DA:1,4 +DA:2,4 +DA:5,4 +DA:6,4 +DA:7,4 +DA:9,4 +DA:10,4 +DA:11,4 +DA:12,4 +DA:14,4 +LF:10 +LH:10 +BRDA:1,0,0,4 +BRDA:1,0,1,0 +BRF:2 +BRH:1 +end_of_record +TN: +SF:controllers\BookController.js +FN:7,(anonymous_0) +FN:31,(anonymous_1) +FN:65,(anonymous_2) +FNF:3 +FNH:3 +FNDA:1,(anonymous_0) +FNDA:1,(anonymous_1) +FNDA:1,(anonymous_2) +DA:1,4 +DA:2,4 +DA:3,4 +DA:4,4 +DA:8,1 +DA:9,1 +DA:10,1 +DA:17,1 +DA:20,1 +DA:21,1 +DA:22,1 +DA:25,1 +DA:27,0 +DA:32,1 +DA:33,1 +DA:34,1 +DA:35,1 +DA:37,0 +DA:66,1 +DA:67,1 +DA:68,1 +DA:69,1 +DA:70,1 +DA:71,1 +DA:73,1 +DA:82,1 +DA:83,1 +DA:84,1 +DA:86,1 +DA:88,0 +DA:94,4 +LF:31 +LH:28 +BRDA:8,0,0,1 +BRDA:17,1,0,0 +BRDA:17,1,1,1 +BRDA:34,2,0,0 +BRDA:34,2,1,1 +BRDA:83,3,0,1 +BRDA:83,3,1,0 +BRDA:84,4,0,0 +BRDA:84,4,1,1 +BRF:9 +BRH:5 +end_of_record +TN: +SF:controllers\HistoryController.js +FN:7,(anonymous_0) +FN:24,(anonymous_1) +FN:40,(anonymous_2) +FN:50,(anonymous_3) +FN:53,(anonymous_4) +FN:68,(anonymous_5) +FN:92,(anonymous_6) +FNF:7 +FNH:7 +FNDA:4,(anonymous_0) +FNDA:1,(anonymous_1) +FNDA:2,(anonymous_2) +FNDA:5,(anonymous_3) +FNDA:1,(anonymous_4) +FNDA:1,(anonymous_5) +FNDA:1,(anonymous_6) +DA:1,4 +DA:2,4 +DA:3,4 +DA:4,4 +DA:8,4 +DA:9,4 +DA:10,4 +DA:11,4 +DA:12,2 +DA:13,2 +DA:14,1 +DA:15,1 +DA:16,1 +DA:20,2 +DA:25,1 +DA:26,1 +DA:28,1 +DA:29,1 +DA:30,1 +DA:31,1 +DA:32,1 +DA:33,1 +DA:34,1 +DA:36,0 +DA:41,2 +DA:42,2 +DA:43,2 +DA:44,2 +DA:50,5 +DA:52,2 +DA:53,1 +DA:55,1 +DA:59,1 +DA:61,1 +DA:62,1 +DA:64,1 +DA:69,1 +DA:70,1 +DA:84,1 +DA:85,1 +DA:87,0 +DA:93,1 +DA:94,1 +DA:95,1 +DA:96,1 +DA:98,0 +DA:104,4 +LF:47 +LH:44 +BRDA:9,0,0,0 +BRDA:9,0,1,4 +BRDA:32,1,0,0 +BRDA:32,1,1,1 +BRDA:52,2,0,1 +BRDA:52,2,1,1 +BRDA:84,3,0,0 +BRDA:84,3,1,1 +BRF:8 +BRH:5 +end_of_record +TN: +SF:controllers\UserController.js +FN:8,(anonymous_0) +FN:20,(anonymous_1) +FN:36,(anonymous_2) +FN:143,oo_cm +FN:143,oo_oo +FN:143,oo_tr +FN:143,oo_ts +FN:143,oo_te +FNF:8 +FNH:5 +FNDA:5,(anonymous_0) +FNDA:6,(anonymous_1) +FNDA:2,(anonymous_2) +FNDA:2,oo_cm +FNDA:2,oo_oo +FNDA:0,oo_tr +FNDA:0,oo_ts +FNDA:0,oo_te +DA:1,4 +DA:2,4 +DA:3,4 +DA:4,4 +DA:5,4 +DA:9,5 +DA:10,5 +DA:11,5 +DA:12,1 +DA:14,1 +DA:16,4 +DA:21,6 +DA:22,6 +DA:23,6 +DA:24,5 +DA:26,4 +DA:27,4 +DA:28,2 +DA:29,2 +DA:30,1 +DA:32,5 +DA:37,2 +DA:38,2 +DA:42,0 +DA:43,0 +DA:53,0 +DA:54,0 +DA:56,2 +DA:57,2 +DA:62,4 +DA:143,2 +LF:31 +LH:27 +BRDA:9,0,0,5 +BRDA:9,1,0,5 +BRDA:23,2,0,1 +BRDA:23,2,1,5 +BRDA:23,3,0,6 +BRDA:23,3,1,5 +BRDA:24,4,0,1 +BRDA:24,4,1,4 +BRDA:24,5,0,5 +BRDA:24,5,1,4 +BRDA:27,6,0,2 +BRDA:27,6,1,2 +BRDA:28,7,0,0 +BRDA:28,7,1,2 +BRDA:29,8,0,1 +BRDA:29,8,1,1 +BRDA:53,9,0,0 +BRDA:53,9,1,0 +BRDA:54,10,0,0 +BRDA:54,10,1,0 +BRDA:143,11,0,2 +BRDA:143,11,1,0 +BRF:22 +BRH:16 +end_of_record +TN: +SF:controllers\mails\MailController.js +FN:5,(anonymous_0) +FN:47,oo_cm +FN:47,oo_oo +FN:47,oo_tr +FN:47,oo_ts +FN:47,oo_te +FNF:6 +FNH:3 +FNDA:2,(anonymous_0) +FNDA:2,oo_cm +FNDA:2,oo_oo +FNDA:0,oo_tr +FNDA:0,oo_ts +FNDA:0,oo_te +DA:1,4 +DA:2,4 +DA:6,2 +DA:7,2 +DA:8,2 +DA:9,1 +DA:10,1 +DA:11,1 +DA:12,1 +DA:23,1 +DA:31,1 +DA:32,1 +DA:34,1 +DA:35,1 +DA:40,4 +DA:47,2 +LF:16 +LH:16 +BRDA:47,0,0,2 +BRDA:47,0,1,1 +BRF:2 +BRH:2 +end_of_record +TN: +SF:helpers\bcryptjs.js +FN:3,(anonymous_0) +FN:9,(anonymous_1) +FNF:2 +FNH:2 +FNDA:6,(anonymous_0) +FNDA:2,(anonymous_1) +DA:1,4 +DA:3,4 +DA:4,6 +DA:5,6 +DA:6,6 +DA:9,4 +DA:10,2 +DA:11,2 +DA:14,4 +LF:9 +LH:9 +BRF:0 +BRH:0 +end_of_record +TN: +SF:helpers\googlebooks.js +FN:3,(anonymous_0) +FN:16,(anonymous_1) +FNF:2 +FNH:2 +FNDA:1,(anonymous_0) +FNDA:1,(anonymous_1) +DA:1,4 +DA:3,4 +DA:4,1 +DA:14,1 +DA:16,1 +DA:17,1 +DA:18,1 +DA:37,4 +LF:8 +LH:8 +BRDA:14,0,0,1 +BRDA:14,0,1,0 +BRDA:20,1,0,1 +BRDA:20,1,1,0 +BRDA:21,2,0,1 +BRDA:21,2,1,0 +BRDA:30,3,0,1 +BRDA:30,3,1,0 +BRF:8 +BRH:4 +end_of_record +TN: +SF:helpers\jwt.js +FN:4,(anonymous_0) +FN:9,(anonymous_1) +FNF:2 +FNH:2 +FNDA:4,(anonymous_0) +FNDA:14,(anonymous_1) +DA:1,4 +DA:2,4 +DA:4,4 +DA:5,4 +DA:6,4 +DA:9,4 +DA:10,14 +DA:11,14 +DA:14,4 +LF:9 +LH:9 +BRF:0 +BRH:0 +end_of_record +TN: +SF:helpers\openai.js +FN:3,(anonymous_0) +FN:16,(anonymous_1) +FN:28,(anonymous_2) +FNF:3 +FNH:3 +FNDA:4,(anonymous_0) +FNDA:1,(anonymous_1) +FNDA:1,(anonymous_2) +DA:1,4 +DA:3,4 +DA:4,4 +DA:8,4 +DA:13,3 +DA:16,4 +DA:17,1 +DA:18,1 +DA:20,1 +DA:21,5 +DA:24,1 +DA:25,1 +DA:28,4 +DA:29,1 +DA:31,1 +DA:32,1 +DA:35,4 +LF:17 +LH:17 +BRF:0 +BRH:0 +end_of_record +TN: +SF:middlewares\authentication.js +FN:5,(anonymous_0) +FNF:1 +FNH:1 +FNDA:14,(anonymous_0) +DA:2,4 +DA:3,4 +DA:5,4 +DA:6,14 +DA:7,14 +DA:8,14 +DA:10,14 +DA:12,14 +DA:13,14 +DA:15,14 +DA:16,14 +DA:22,14 +DA:24,0 +DA:28,4 +LF:14 +LH:13 +BRDA:7,0,0,0 +BRDA:7,0,1,14 +BRDA:10,1,0,0 +BRDA:10,1,1,14 +BRDA:15,2,0,0 +BRDA:15,2,1,14 +BRF:6 +BRH:3 +end_of_record +TN: +SF:middlewares\errorHandler.js +FN:2,(anonymous_0) +FN:9,(anonymous_1) +FN:81,oo_cm +FN:81,oo_oo +FN:81,oo_tr +FN:81,oo_ts +FN:81,oo_te +FNF:7 +FNH:4 +FNDA:15,(anonymous_0) +FNDA:4,(anonymous_1) +FNDA:15,oo_cm +FNDA:15,oo_oo +FNDA:0,oo_tr +FNDA:0,oo_ts +FNDA:0,oo_te +DA:1,4 +DA:4,15 +DA:5,15 +DA:8,4 +DA:9,4 +DA:10,4 +DA:13,0 +DA:14,0 +DA:15,0 +DA:18,1 +DA:19,1 +DA:20,1 +DA:23,1 +DA:24,1 +DA:25,1 +DA:28,0 +DA:29,0 +DA:30,0 +DA:33,0 +DA:34,0 +DA:35,0 +DA:38,1 +DA:39,1 +DA:40,1 +DA:43,3 +DA:44,3 +DA:45,3 +DA:49,0 +DA:50,0 +DA:51,0 +DA:54,0 +DA:55,0 +DA:56,0 +DA:59,0 +DA:60,0 +DA:61,0 +DA:64,5 +DA:65,5 +DA:66,5 +DA:69,15 +DA:74,4 +DA:81,15 +LF:42 +LH:24 +BRDA:5,0,0,3 +BRDA:5,0,1,4 +BRDA:5,0,2,0 +BRDA:5,0,3,1 +BRDA:5,0,4,1 +BRDA:5,0,5,0 +BRDA:5,0,6,0 +BRDA:5,0,7,1 +BRDA:5,0,8,3 +BRDA:5,0,9,0 +BRDA:5,0,10,0 +BRDA:5,0,11,0 +BRDA:5,0,12,0 +BRDA:5,0,13,5 +BRDA:81,1,0,15 +BRDA:81,1,1,1 +BRF:16 +BRH:9 +end_of_record +TN: +SF:models\book.js +FN:5,(anonymous_0) +FN:12,(anonymous_1) +FNF:2 +FNH:2 +FNDA:4,(anonymous_0) +FNDA:4,(anonymous_1) +DA:4,4 +DA:5,4 +DA:14,4 +DA:19,4 +DA:82,4 +LF:5 +LH:5 +BRF:0 +BRH:0 +end_of_record +TN: +SF:models\history.js +FN:5,(anonymous_0) +FN:12,(anonymous_1) +FNF:2 +FNH:2 +FNDA:4,(anonymous_0) +FNDA:4,(anonymous_1) +DA:4,4 +DA:5,4 +DA:14,4 +DA:15,4 +DA:18,4 +DA:54,4 +LF:6 +LH:6 +BRF:0 +BRH:0 +end_of_record +TN: +SF:models\index.js +FN:21,(anonymous_0) +FN:29,(anonymous_1) +FN:34,(anonymous_2) +FNF:3 +FNH:3 +FNDA:20,(anonymous_0) +FNDA:16,(anonymous_1) +FNDA:16,(anonymous_2) +DA:3,4 +DA:4,4 +DA:5,4 +DA:6,4 +DA:7,4 +DA:8,4 +DA:9,4 +DA:10,4 +DA:13,4 +DA:14,0 +DA:16,4 +DA:19,4 +DA:22,20 +DA:30,16 +DA:31,16 +DA:34,4 +DA:35,16 +DA:36,16 +DA:40,4 +DA:41,4 +DA:43,4 +LF:21 +LH:20 +BRDA:8,0,0,4 +BRDA:8,0,1,0 +BRDA:13,1,0,0 +BRDA:13,1,1,4 +BRDA:23,2,0,20 +BRDA:23,2,1,20 +BRDA:23,2,2,16 +BRDA:23,2,3,16 +BRDA:35,3,0,16 +BRDA:35,3,1,0 +BRF:10 +BRH:7 +end_of_record +TN: +SF:models\user.js +FN:6,(anonymous_0) +FN:13,(anonymous_1) +FN:95,(anonymous_2) +FNF:3 +FNH:3 +FNDA:4,(anonymous_0) +FNDA:4,(anonymous_1) +FNDA:6,(anonymous_2) +DA:4,4 +DA:5,4 +DA:6,4 +DA:15,4 +DA:19,4 +DA:25,4 +DA:95,4 +DA:96,6 +DA:99,4 +LF:9 +LH:9 +BRF:0 +BRH:0 +end_of_record +TN: +SF:models\userdetail.js +FN:5,(anonymous_0) +FN:12,(anonymous_1) +FN:50,(anonymous_2) +FN:67,oo_cm +FN:67,oo_oo +FN:67,oo_tr +FN:67,oo_ts +FN:67,oo_te +FNF:8 +FNH:5 +FNDA:4,(anonymous_0) +FNDA:4,(anonymous_1) +FNDA:1,(anonymous_2) +FNDA:1,oo_cm +FNDA:1,oo_oo +FNDA:0,oo_tr +FNDA:0,oo_ts +FNDA:0,oo_te +DA:4,4 +DA:5,4 +DA:14,4 +DA:17,4 +DA:50,4 +DA:51,1 +DA:52,1 +DA:53,1 +DA:54,1 +DA:55,1 +DA:56,1 +DA:57,1 +DA:59,4 +DA:67,1 +LF:14 +LH:14 +BRDA:55,0,0,0 +BRDA:55,0,1,1 +BRDA:67,1,0,1 +BRDA:67,1,1,1 +BRF:4 +BRH:3 +end_of_record +TN: +SF:routes\index.js +FNF:0 +FNH:0 +DA:1,4 +DA:2,4 +DA:3,4 +DA:4,4 +DA:5,4 +DA:6,4 +DA:7,4 +DA:8,4 +DA:10,4 +DA:11,4 +DA:12,4 +DA:15,4 +DA:16,4 +DA:18,4 +DA:19,4 +DA:20,4 +DA:21,4 +DA:22,4 +DA:23,4 +DA:24,4 +DA:25,4 +DA:27,4 +LF:22 +LH:22 +BRF:0 +BRH:0 +end_of_record diff --git a/server/helpers/bcryptjs.js b/server/helpers/bcryptjs.js new file mode 100644 index 0000000..36acdf3 --- /dev/null +++ b/server/helpers/bcryptjs.js @@ -0,0 +1,14 @@ +const bcryptjs = require('bcryptjs'); + +const bcryptHash = (req) => { + const salt = bcryptjs.genSaltSync(16); + const hash = bcryptjs.hashSync(req, salt); + return hash; +} + +const bcryptCompare = (req, hashed) => { + const compare = bcryptjs.compareSync(req, hashed); + return compare; +} + +module.exports = { bcryptHash, bcryptCompare }; \ No newline at end of file diff --git a/server/helpers/googlebooks.js b/server/helpers/googlebooks.js new file mode 100644 index 0000000..6f16c51 --- /dev/null +++ b/server/helpers/googlebooks.js @@ -0,0 +1,37 @@ +const axios = require('axios'); + +const fetchGBooks = async (query, maxResults) => { + const response = await axios.get('https://www.googleapis.com/books/v1/volumes', { + params: { + key: process.env.GOOGLE_BOOKS_API_KEY, + q: query, + country: 'ID', + maxResults, + printType: 'books', + }, + }); + + const items = response.data.items || []; + + return items.map(item => { + const { title, authors, publisher, publishedDate, description, industryIdentifiers, pageCount, categories, imageLinks, language, previewLink } = item.volumeInfo; + return { + title, + isbn: industryIdentifiers ? industryIdentifiers[0].identifier : '-', + author: authors ? authors.join(', ') : '-', + synopsis: description, + pageCount, + stock: Math.ceil(Math.random() * 5), + publisher, + publishedDate, + lang: language, + imgUrl: imageLinks.thumbnail, + status: 'available', + category: categories ? categories.join(', ') : '-', + pricePerWeek: Math.ceil(Math.random() * 1000 * 5), + link: previewLink + }; + }); +}; + +module.exports = { fetchGBooks }; \ No newline at end of file diff --git a/server/helpers/jwt.js b/server/helpers/jwt.js new file mode 100644 index 0000000..ce23fa2 --- /dev/null +++ b/server/helpers/jwt.js @@ -0,0 +1,14 @@ +const jwt = require('jsonwebtoken'); +const secretKey = process.env.SECRET_KEY; + +const createToken = (req) => { + const token = jwt.sign(req, secretKey); + return token; +} + +const verifyToken = (req) => { + const decoded = jwt.verify(req, secretKey); + return decoded; +} + +module.exports = { createToken, verifyToken }; \ No newline at end of file diff --git a/server/helpers/openai.js b/server/helpers/openai.js new file mode 100644 index 0000000..21f13fd --- /dev/null +++ b/server/helpers/openai.js @@ -0,0 +1,35 @@ +const OpenAI = require('openai'); + +const chatAI = async (req) => { + const openai = new OpenAI({ + apiKey: process.env.OpenAI_KEY + }); + + const { choices } = await openai.chat.completions.create({ + model: 'gpt-3.5-turbo', + messages: [{ "role": "user", "content": req }], + max_tokens: 100 + }); + return choices[0].message.content; +} + +const generateAnsPromt = (q, answer) => { + let question = q.split(';;'); + let result = `berikan nilai terhadap jawaban dari pertanyaan-pertanyaan berikut. tentukan apakah jawabannya benar dari pertanyaannya `; + + for (let i = 0; i < 5; i++) { + result += ' ' + question[i] + ' apakah benar jawabannya adalah ' + answer[i] + '. '; + } + + result += 'cukup keluarkan respons dalam bentuk integer javascript. setiap jawaban benar mendapat 20 poin. Tidak perlu mengeluarkan respons deskripsi apa pun cukup integer total poinnya dalam bentuk js. cukup jawab misal 10 atau 50, tidak perlu ada deklarasi atau console log cukup angkanya saja. pastikan hitung dengan benar, koreksi dengan tepat antara pertanyaan dan jawaban! Jika jawaban asal dan tidak dapat dipahami maka salahkan/jangan tambah poin!' + return result; +} + +const generateBookPromt = (desc) => { + let result = `Berikan saya 1 judul buku, cukup respons judul bukunya saja dalam 1 string tidak perlu ada deskripsi apa pun. Buku yang saya inginkan memiliki isi yang sesuai atau mirip dengan deskripsi di bawah ini, deskripsi di apit oleh tanda titik koma (;) atau jika di deskripsi sudah ada judul bukunya atau sudah disebutkan judul bukunya maka cukup keluarkan respons judul bukunya apa tanpa perlu dicari kembali judul bukunya atau jika tidak ada maka cari buku sesuai dengan perintah atau deskripsi yang ada. + `; + result += ` ;${desc}; ` + return result; +} + +module.exports = { chatAI, generateAnsPromt, generateBookPromt }; \ No newline at end of file diff --git a/server/jsons/books.json b/server/jsons/books.json new file mode 100644 index 0000000..110b3fc --- /dev/null +++ b/server/jsons/books.json @@ -0,0 +1,1252 @@ +[ + { + "title": "Buku Pintar JavaScript", + "isbn": "-", + "author": "Vivian Siahaan, Rismon Hasiholan Sianipar", + "synopsis": "Buku ini menyuguhkan lebih dari 100 kasus yang diimplementasikan langkah demi langkah. Buku ini ditujukan baik untuk pemula maupun pembelajar berpengalaman, yang hanya memfokuskan dan mendalami hanya pada elemen-elemen penting JavaScript. Buku ini merupakan buku “untuk semua kalangan”, yang didedikasikan untuk mereka yang menginginkan keseimbangan antara sisi teknis bahasa dan elemen-elemen menyenangkan. Buku ini menjelaskan bagaimana bahasa ini diterapkan dimulai dari contoh-contoh yang paling mendasar sampai yang lebih kompleks, dengan progres yang memandu Anda contoh demi contoh sampai Anda menguasainya. Kebutuhan akan contoh-contoh yang baik sangat diperlukan untuk mendapatkan hasil yang baik. Kami berharap bahwa Anda menikmati buku bahasa pemrograman Web ini dengan cara yang menyenangkan.", + "pageCount": 201, + "stock": 3, + "publisher": "BALIGE PUBLISHING", + "publishedDate": "2020-03-14", + "lang": "id", + "imgUrl": "http://books.google.com/books/content?id=qovWDwAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "status": "available", + "category": "Computers", + "pricePerWeek": 3444, + "link": "http://books.google.co.id/books?id=qovWDwAAQBAJ&printsec=frontcover&dq=javascript&hl=&as_pt=BOOKS&cd=1&source=gbs_api" + }, + { + "title": "JavaScript Untuk Profesional", + "isbn": "-", + "author": "Vivian Siahaan, Rismon Hasiholan Sianipar", + "synopsis": "JavaScript merupakan bahasa skript populer yang dipakai untuk menciptakan halaman Web yang dapat berinteraksi dengan pengguna dan dapat merespon event yang terjadi pada halaman. JavaScript merupakan perekat yang menyatukan halaman-halaman Web. Akan sangat susah menjumpai halaman Web komersial yang tidak memuat kode JavaScript. JavaScript, awalnya dikenal sebagai LiveScript, dikembangkan oleh Brendan Eich di Netscape pada tahun 1995 yang menjadi bagian terintegrasi di dalam Netscape Navigator 2.0. JavaScript merupakan bahasa skript yang menghidupkan halaman-halaman HTML. JavaScript dapat dijalankan pada hampir semua platform. JavaScript merupakan bahasa sisi-klien yang didesain pada browser komputer Anda, bukan pada server. Ia dibangun secara langsung ke dalam browser, Microsoft Internet Explorer, Mozilla Firefox, Google Chrome, Opera, hampir semua browser. Dalam sintaksis, JavaScript mirip dengan C, Perl, dan Java. Program JavaScript dipakai untuk mendeteksi dan beraksi terhadap event-event yang disebabkan oleh pengguna. Anda dapat memperbaiki situs Web dengan bantuan navigasional, kotak dialog, citra dinamis, dan lainnya. JavaScript dapat digunakan untuk mengendalikan tampilan halaman. JavaScript dipakai untuk memvalidasi apa yang diketikkan pengguna ke dalam sebuah form sebelum pengiriman form ke server dilakukan. JavaScript berperan sebagai bahasa pemrograman, yang memiliki konstruksi-konstruksi dasar seperti variabel dan tipe data, look kontrol, statemen if/else, statemen switch, fungsi, dan objek. JavaScript dapat dipakai untuk perhitungan aritmatik, pemanipulasian tanggal dan waktu, pemodifikasian array, string dan objek. Ia juga dapat menangani event yang diinisiasi pengguna, dan menetapkan pewaktu. Kombinasi dari HTMl, CSS, dan JavaScript dapat menghasilkan halaman Web yang terstruktur, bergaya, dan interaktif. Para perancang Web sepakat bahwa ketiganya merupakan bagian penting dari sebuah halaman Web. Topik-topik yang dibahas pada buku ini meliputi: Sejarah JavaScript; Tipe Data; Literal, dan Variabel; Kotak Dialog; Operator; Kondisi; Fungsi; Objek; Objek Inti JavaScript; Objek Browser; Form; Citra dan Link; Penanganan Event; CSS dan JavaScript.", + "pageCount": 434, + "stock": 5, + "publisher": "SPARTA PUBLISHER", + "publishedDate": "2018-11-21", + "lang": "id", + "imgUrl": "http://books.google.com/books/content?id=OFd1DwAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "status": "available", + "category": "Computers", + "pricePerWeek": 1256, + "link": "http://books.google.co.id/books?id=OFd1DwAAQBAJ&printsec=frontcover&dq=javascript&hl=&as_pt=BOOKS&cd=2&source=gbs_api" + }, + { + "title": "JavaScript: Dari A Sampai Z", + "isbn": "-", + "author": "Vivian Siahaan, Rismon Hasiholan Sianipar", + "synopsis": "JavaScript merupakan bahasa skript populer yang dipakai untuk menciptakan halaman Web yang dapat berinteraksi dengan pengguna dan dapat merespon event yang terjadi pada halaman. JavaScript merupakan perekat yang menyatukan halaman-halaman Web. Akan sangat susah menjumpai halaman Web komersial yang tidak memuat kode JavaScript. JavaScript, awalnya dikenal sebagai LiveScript, dikembangkan oleh Brendan Eich di Netscape pada tahun 1995 yang menjadi bagian terintegrasi di dalam Netscape Navigator 2.0. JavaScript merupakan bahasa skript yang menghidupkan halaman-halaman HTML. JavaScript dapat dijalankan pada hampir semua platform. JavaScript merupakan bahasa sisi-klien yang didesain pada browser komputer Anda, bukan pada server. Ia dibangun secara langsung ke dalam browser, Microsoft Internet Explorer, Mozilla Firefox, Google Chrome, Opera, hampir semua browser. Dalam sintaksis, JavaScript mirip dengan C, Perl, dan Java. Program JavaScript dipakai untuk mendeteksi dan beraksi terhadap event-event yang disebabkan oleh pengguna. Anda dapat memperbaiki situs Web dengan bantuan navigasional, kotak dialog, citra dinamis, dan lainnya. JavaScript dapat digunakan untuk mengendalikan tampilan halaman. JavaScript dipakai untuk memvalidasi apa yang diketikkan pengguna ke dalam sebuah form sebelum pengiriman form ke server dilakukan. JavaScript berperan sebagai bahasa pemrograman, yang memiliki konstruksi-konstruksi dasar seperti variabel dan tipe data, look kontrol, statemen if/else, statemen switch, fungsi, dan objek. JavaScript dapat dipakai untuk perhitungan aritmatik, pemanipulasian tanggal dan waktu, pemodifikasian array, string dan objek. Ia juga dapat menangani event yang diinisiasi pengguna, dan menetapkan pewaktu. Kombinasi dari HTMl, CSS, dan JavaScript dapat menghasilkan halaman Web yang terstruktur, bergaya, dan interaktif. Para perancang Web sepakat bahwa ketiganya merupakan bagian penting dari sebuah halaman Web. Topik-topik yang dibahas pada buku ini meliputi: Sejarah JavaScript; Tipe Data; Literal, dan Variabel; Kotak Dialog; Operator; Kondisi; Fungsi; Objek; Objek Inti JavaScript; Objek Browser; Form; Citra dan Link; Penanganan Event; CSS dan JavaScript.", + "pageCount": 436, + "stock": 5, + "publisher": "Sparta Publisher", + "publishedDate": "2018-12-26", + "lang": "id", + "imgUrl": "http://books.google.com/books/content?id=IYxeDwAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "status": "available", + "category": "Computers", + "pricePerWeek": 2528, + "link": "http://books.google.co.id/books?id=IYxeDwAAQBAJ&printsec=frontcover&dq=javascript&hl=&as_pt=BOOKS&cd=3&source=gbs_api" + }, + { + "title": "Semua Bisa Menjadi Programmer JavaScript & Node.js", + "isbn": "9786230019760", + "author": "Ir. Yuniar Supardi", + "synopsis": "JavaScript merupakan program skrip untuk client sehingga penulis juga menyatukan materi Node.js yang merupakan program skrip server untuk JavaScript. Belajar Node.js membuat pengembang dengan bahasa JavaScript dapat membuat skrip web, baik untuk sisi klien dan server. Bahasa Skrip JavaScript menjadi bahasa skrip nomor satu di dunia, apalagi dengan adanya Node.js membuat JavaScript semakin populer, tentu bahasa ini menjadi bahasa pesaing utama Python. Keunggulan buku ini memandu Anda membuat program web menggunakan JavaScript dan Node.js dengan pembahasan yang mudah dan sistematik, sehingga Anda dengan mudah belajar dari buku ini. Dalam buku ini juga Anda dipandu bagaimana membuat program web dengan database MySQL dan SQLite pada Node.js. Topik yang dibahas dalam buku ini mencakup: - Sekilas JavaScript & Node.js - Komponen Program JavaScript - Objek GUI JavaScript - Kejadian (Event) JavaScript - Marquee dan Frame JavaScript - Node.js - NPM Node.js - Modul Node.js - Modul Http - Modul File System - Modul Url - Form Node.js - Upload File Node.js - CRUD MySQL Pada Node.js - SQLite Pada Node.js - dan Lain-lain.", + "pageCount": 240, + "stock": 4, + "publisher": "Elex Media Komputindo", + "publishedDate": "2021-04-13", + "lang": "id", + "imgUrl": "http://books.google.com/books/content?id=CG0qEAAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "status": "available", + "category": "Computers", + "pricePerWeek": 4009, + "link": "http://books.google.co.id/books?id=CG0qEAAAQBAJ&printsec=frontcover&dq=javascript&hl=&as_pt=BOOKS&cd=4&source=gbs_api" + }, + { + "title": "HTML5 dan Javascript untuk Pemula", + "isbn": "9786230024320", + "author": "Jubilee Enterprise", + "synopsis": "Ilmu membuat website tersedia di dalam HTML5 dan Javascript. Buku ini adalah referensi yang lengkap, to-the point, dan mudah dipahami untuk penggunaan HTML5, Javascript, dan topik lainnya tentang web design, seperti style sheet dan framework Javascript. Tidak memandang apakah Anda awam atau pernah mengenal HTML sebelumnya, buku ini dirancang untuk Anda. Di dalam buku ini, kami akan mengajari cara membangun website memakai HTML5 dan Javascript secara efektif, singkat, tepat, dan jelas! Pembahasan akan dimulai dari cara menginstal editor gratis dari internet. Setelah itu, akan dibahas topik-topik spesifik, seperti struktur HTML, format teks, list dan background, hyperlink, style sheet, image, penulisan Javascript, pembuatan variable, objek angka dan math, bekerja dengan string, operator perbandingan, null dan undefined, konversi tipe data, object, function, dan framework Javascript Vue seperti data binding. Dilengkapi dengan kode-kode program yang jelas, buku ini tidak membutuhkan pengalaman apa pun. Bahkan, Anda bisa mengoperasikannya menggunakan MS Windows. Jadi tunggu apa lagi, ayo belajar cara membuat web design menggunakan HTML5 dan Javascript melalui referensi yang lengkap ini. (thinkjubilee)", + "pageCount": 304, + "stock": 5, + "publisher": "Elex Media Komputindo", + "publishedDate": "2021-06-11", + "lang": "id", + "imgUrl": "http://books.google.com/books/content?id=e14zEAAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "status": "available", + "category": "Computers", + "pricePerWeek": 3268, + "link": "http://books.google.co.id/books?id=e14zEAAAQBAJ&printsec=frontcover&dq=javascript&hl=&as_pt=BOOKS&cd=5&source=gbs_api" + }, + { + "title": "Javascript untuk pemula", + "isbn": "-", + "author": "Jubilee Enterprise", + "synopsis": "Ilmu membuat website tersedia di dalam HTMLS dan Javascript. Buku ini adalah referensi yang lengkap, to-the point, dan mudah dipahami untuk penggunaan Javascript. Tidak memandang apakah Anda awam atau pernah mengenal Javascript sebelumnya, buku ini dirancang untuk Anda. Di dalam buku ini, kami akan mengajari cara membangun website memakai Javascript secara efektif, singkat, tepat, dan jelas! Pembahasan akan dimulai dari cara menginstal editor gratis dari internet. Setelah itu, akan dibahas topik-topik spesifik, seperti penulisan Javascript, pembuatan variable, objek angka dan math, bekerja dengan string, operator perbandingan, null dan undefined, konversi tipe data, object, function, dan framework Javascript Vue seperti data binding. Dilengkapi dengan kode-kode program yang jelas, buku ini tidak membutuhkan pengalaman apa pun. Bahkan, Anda bisa mengoperasikannya menggunakan MS Windows. Jadi tunggu apa lagi, ayo belajar cara membuat web design menggunakan Javascript melalui referensi yang lengkap ini. (thinkjubilee)", + "pageCount": 204, + "stock": 1, + "publisher": "Elex Media Komputindo", + "publishedDate": "2021-08-03", + "lang": "id", + "imgUrl": "http://books.google.com/books/content?id=VgE9EAAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "status": "available", + "category": "Computers", + "pricePerWeek": 2080, + "link": "http://books.google.co.id/books?id=VgE9EAAAQBAJ&printsec=frontcover&dq=javascript&hl=&as_pt=BOOKS&cd=6&source=gbs_api" + }, + { + "title": "Buku Sakti HTML, CSS & Javascript", + "isbn": "9786232443723", + "author": "Adam Saputra, S.Si.", + "synopsis": "Memasuki zaman 4.0, kini penguasaan teknologi informasi sudah barang tentu menjadi titik tolok yang paling diperhitungkan sebagai sebuah komoditas untuk melenggang ke arena professional. Industri kreatif semakin digandrungi mengungguli lini-lini konvensional yang sudah mulai harus memperbarui sistem mereka karena imbas kemajuan industri saat ini. Semakin banyaknya minat ke industri kreatif menjadikan semakin banyak pula kemampuan-kemampuan kreatif yang harus dikuasai, dan salah satunya adalah web programming. Walaupun hari ini jasa pembuatan website sudah semakin gampang dan mudah diakses,namun apa salahnya kita semua mempelajari segala hal yang paling fundamental dari konstruksi rumah maya di dunia seberang kita, yakni internet dengan segala gelagasi jaring laba-labanya. Buku ini memuat cara-cara yang paling mudah dalam mempelajari bahasa pemrograman front-end seperti HTML, CSS, dan JavaScript.", + "pageCount": 268, + "stock": 2, + "publisher": "Anak Hebat Indonesia", + "publishedDate": "2019-08-01", + "lang": "id", + "imgUrl": "http://books.google.com/books/content?id=5srzDwAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "status": "available", + "category": "Computers", + "pricePerWeek": 1463, + "link": "http://books.google.co.id/books?id=5srzDwAAQBAJ&printsec=frontcover&dq=javascript&hl=&as_pt=BOOKS&cd=7&source=gbs_api" + }, + { + "title": "Seri Pemrograman Internet : Panduan Pemrograman JavaScript (sampai dengan JavaScript 1.2)", + "isbn": "979533462X", + "author": "Antony Pranata", + "pageCount": 336, + "stock": 1, + "publisher": "Penerbit Andi", + "lang": "id", + "imgUrl": "http://books.google.com/books/content?id=v9H5RV_paEIC&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "status": "available", + "category": "-", + "pricePerWeek": 4238, + "link": "http://books.google.co.id/books?id=v9H5RV_paEIC&pg=PA138&dq=javascript&hl=&as_pt=BOOKS&cd=8&source=gbs_api" + }, + { + "title": "Pemrograman Javascript: Teori Dan Implementasi", + "isbn": "9786028758994", + "author": "Rismon Hasiholan Sianipar", + "synopsis": "JavaScript sangat populer! Hampir pada semua komputer terpasang JavaScript di dalam browser Microsoft Internet Explorer, Mozilla Firefox, Google Chrome, Opera, dan lainnya. JavaScript juga merupakan bahasa skript populer yang memiliki banyak nama samaran lain, seperti Mocha, LiveScript, Jscript, dan ECMAScript. JavaScript merupakan bahasa skript populer yang dipakai untuk menciptakan halaman Web yang dapat berinteraksi dengan pengguna dan dapat merespon event yang terjadi pada halaman. JavaScript merupakan perekat yang menyatukan halaman-halaman Web. Akan sangat susah menjumpai halaman Web komersial yang tidak memuat kode JavaScript. Ada banyak buku yang didedikasikan untuk membahas beberapa aspek dari bahasa JavaScript dan jika Anda masih “baru” dengan bahasa ini, akan sangat sulit untuk mengetahui di mana harus memulainya. Buku ini merupakan buku “untuk semua kalangan”, yang didedikasikan untuk mereka yang menginginkan keseimbangan antara sisi teknis bahasa dan elemen-elemen menyenangkan, sebuah buku yang mendiskusikan permasalahan-permasalahan lintas-platform, dan sebuah buku yang tidak mengharuskan Anda seorang guru sebelum Anda memulainya. Buku ini menjelaskan bagaimana bahasa ini diterapkan dimulai dari contoh-contoh yang paling mendasar sampai yang lebih kompleks, dengan progres yang memandu Anda contoh demi contoh sampai Anda menguasainya. Karena saya seorang guru, saya merasa kebutuhan akan contoh-contoh yang baik diperlukan untuk mendapatkan hasil yang baik. Saya telah banyak belajar dan berharap bahwa Anda menikmati buku bahasa pemrograman Web ini dengan cara yang menyenangkan. Berikut merupakan topik-topik yang dibahas pada buku ini: Bab 1. Sejarah JavaScript Bab 2. Tipe Data, Literal, dan Variabel Bab 3. Kotak Dialog Bab 4. Operator Bab 5. Kondisi Bab 6. Fungsi Bab 7. Objek Bab 8. Objek Inti JavaScript Bab 9. Objek Browser Bab 10. Form Bab 11. Citra dan Link Bab 12. Penanganan Event Bab 13. CSS dan JavaScript", + "pageCount": 440, + "stock": 3, + "publisher": "Penerbit INFORMATIKA", + "publishedDate": "2015-05-28", + "lang": "id", + "imgUrl": "http://books.google.com/books/content?id=8QZ2DwAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "status": "available", + "category": "-", + "pricePerWeek": 1928, + "link": "http://books.google.co.id/books?id=8QZ2DwAAQBAJ&printsec=frontcover&dq=javascript&hl=&as_pt=BOOKS&cd=9&source=gbs_api" + }, + { + "title": "Javascript guempil", + "isbn": "-", + "author": "malik kurosaki", + "synopsis": "javascript itu mudah , mungkin akan ada pertanyaan bagaimana kok mudah ..? wong lihat tulisannya aja uda bikin cidera otak . Itu juga yang saya pikirkan waktu pertama kali ingin mempelajari javascript , sebelumnya sudah mempelajari html dan css, beda sekali jika dibandingkan dengan html atau css pada dasarnya html lebih kepada tata letaak dan pada fungsi tagnya sedangkan css memberi keindahan dan warna agar terlihat lebih hidup. Ibarat sebuah pohon html adalah dahan batang dan ranting yang mengatur dimana bunga atau buah atau daun ditempatkan sedangkan css mmberikan warna bentuk daun bentuk bunga pada pohon tersebut maka dari situ bisalah tercipta sebuah gambaran pohon yang hidup. Penulisan sebuah program pada web bisa dikatakan seni jika kita melihatnya dalam bingkai seni ,karena tak jarang kita cendrung senang jika melihat sebuah eb tertata dengan rapi dan cantik, disitulah dibutuhkan keterampilan tangan dan seni untuk menciptakan sebuah web yang indah.", + "pageCount": 20, + "stock": 2, + "publisher": "blackangel media", + "publishedDate": "2018-05-15", + "lang": "id", + "imgUrl": "http://books.google.com/books/content?id=E_JaDwAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "status": "available", + "category": "Computers", + "pricePerWeek": 2367, + "link": "http://books.google.co.id/books?id=E_JaDwAAQBAJ&printsec=frontcover&dq=javascript&hl=&as_pt=BOOKS&cd=10&source=gbs_api" + }, + { + "title": "7 Materi Pemrograman Web untuk Pemula 3: JavaScript & MariaDB", + "isbn": "-", + "author": "Rohi Abdulloh", + "synopsis": "Teknologi pemrograman web terus berkembang begitu cepat. Para pemula tentu akan semakin tertinggal jika tidak cepat mengejar. Buku ini membahas 7 materi pemrograman web sekaligus yang menjadi materi utama dalam mempelajari pemrograman web. Materi yang diberikan akan sangat membantu para pemula yang ingin menguasai pemrograman web dan menjadi web programmer dalam waktu singkat. Pembahasan dimulai dari pengetahuan dasar tentang pemrograman web, dilanjutkan dengan pembahasan 7 materi pemrograman web, satu demi satu disertai dengan contoh skrip beserta hasilnya. Disertai juga pembuatan aplikasi sederhana yang akan membantu pembaca menguasai pembuatan modul aplikasi. Untuk menunjang latihan, penulis juga menyertakan puluhan bonus skrip aplikatif. Dengan menguasai buku ini, pembaca dapat menjadi web programmer yang siap dan mampu membuat aplikasi web secara mandiri. Pembahasan selengkapnya mencakup: • Dasar web programming • HTML • CSS • MariaDB • PHP • Javascript • Bootstrap • Laravel", + "pageCount": 175, + "stock": 5, + "publisher": "PT Elex Media Komputindo", + "publishedDate": "2022-07-29", + "lang": "id", + "imgUrl": "http://books.google.com/books/content?id=NYl-EAAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "status": "available", + "category": "Computers", + "pricePerWeek": 1492, + "link": "http://books.google.co.id/books?id=NYl-EAAAQBAJ&printsec=frontcover&dq=javascript&hl=&as_pt=BOOKS&cd=11&source=gbs_api" + }, + { + "title": "JavaScript by Example", + "isbn": "0131401629", + "author": "Ellie Quigley", + "synopsis": "This is the definitive JavaScript tutorial for the serious nonprogrammer who is interested in mastering the full power of the language. Includes hundreds of example JavaScript programs that demonstrate both the fun and practical aspects.", + "pageCount": 756, + "stock": 3, + "publisher": "Prentice Hall Professional", + "publishedDate": "2004", + "lang": "en", + "imgUrl": "http://books.google.com/books/content?id=IAJv2N1n9JAC&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "status": "available", + "category": "Computers", + "pricePerWeek": 1870, + "link": "http://books.google.co.id/books?id=IAJv2N1n9JAC&printsec=frontcover&dq=javascript&hl=&as_pt=BOOKS&cd=12&source=gbs_api" + }, + { + "title": "Pemrograman Web Berbasis HTML 5, PHP, Dan JavaScript", + "isbn": "9786020243627", + "author": "Edy Winarno ST, M.Eng, Ali Zaki & SmitDev Community", + "synopsis": "Buku ini menjelaskan cara melakukan pemrograman web dengan mudah memakai 3 bahasa pemrograman pokok, yaitu HTML5, PHP, dan JavaScript. Anda akan belajar bagaimana memanfaatkan HTML5 sebagai antarmuka awal, selanjutnya mengenal PHP untuk memberikan kemampuan pengolahan data client-server di web, lalu menggunakan JavaScript untuk memberikan sentuhan dinamis. Setiap penjelasan dilengkapi dengan contoh program dan di bagian akhir ditutup dengan pembuatan program yang melibatkan ketiganya. *Bonus pada buku fisik (CD, voucher, pembatas buku) tidak disertakan dalam buku digital (e-book)", + "pageCount": 248, + "stock": 2, + "publisher": "Elex Media Komputindo", + "publishedDate": "2014-06-23", + "lang": "id", + "imgUrl": "http://books.google.com/books/content?id=YuVyDwAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "status": "available", + "category": "Education", + "pricePerWeek": 2543, + "link": "http://books.google.co.id/books?id=YuVyDwAAQBAJ&printsec=frontcover&dq=javascript&hl=&as_pt=BOOKS&cd=13&source=gbs_api" + }, + { + "title": "Grafika Dalam JavaScript", + "isbn": "-", + "author": "Vivian Siahaan, Rismon Hasiholan Sianipar", + "synopsis": "Selamat datang ke dunia grafika! Jika Anda memegang buku di tangan Anda, berarti Anda tertarik dengan visualisasi data, sembari berharap dapat mengembangkan halaman web dengan grafik-grafik yang interaktif. Atau, mungkin tujuan Anda adalah memperbarui pengetahuan Anda tentang pustaka jqPlot, D3, atau Highcharts. Apapun harapan Anda, diharapkan buku ini membantu Anda untuk mencapainya. Ketika Anda menyajikan data untuk menunjukkan relasi atau untuk mencari perbandingan atau untuk menyoroti tren, Anda membuat grafik. Grafik merupakan sebuah struktur yang memuat simbol, seperti garis, batang, irisan, dan lainnya. Grafik berperan sebagai perangkat yang dapat membantu Anda mencerna dan memahami relasi pada data. Selain beragam grafika dan pustaka JavaScript, buku ini merangkum sejumlah topik: pustaka jQuery, HTML5, dan kanvas, widget dan kontrol, manipulasi grafika dengan teknologi SVG (scalable vector graphics), dan lainnya. Buku ini kaya akan beragam topik dengan banyak contoh, masing-masing diberikan secara bertahap, sehingga diharapkan Anda hanya fokus pada bagian-bagian kode yang diterapkan. Pengembangan grafik menjadi mudah begitu Anda mengetahui prosesnya dan memiliki perangkat yang tepat. Oleh karena itu, buku ini menyajikan kode-kode utuh yang bisa Anda manipulasi sesuai dengan kebutuhan visualisasi data Anda. Berikut merupakan topik-topik yang dibahas pada buku ini: Bab 1. Tabel HTML Sederhana Bab 2. Menggambar Kurva Garis Bab 3. Menggambar Grafik Batang Bab 4. Menggambar Grafik Pie Bab 5. Mengenalkan jqPlot Bab 6. Grafik Garis dengan jqPlot Bab 7. Grafik Batang dengan jqPlot Bab 8. Grafik Pie dan Donut dengan jqPlot Bab 9. Grafik Candlestick, Scatter, Bubble, dan Funnel dengan jqPlot Bab 10. Kontrol dan Widget Bab 11. Grafik dengan Highcharts Bab 12. Grafik Garis dengan D3 Bab 13. Grafik Batang dan Pie dengan D3 Bab 14. Grafik Lainnya dengan D3", + "pageCount": 387, + "stock": 1, + "publisher": "BALIGE PUBLISHING", + "publishedDate": "2018-10-02", + "lang": "id", + "imgUrl": "http://books.google.com/books/content?id=-oFeDwAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "status": "available", + "category": "Computers", + "pricePerWeek": 4476, + "link": "http://books.google.co.id/books?id=-oFeDwAAQBAJ&printsec=frontcover&dq=javascript&hl=&as_pt=BOOKS&cd=14&source=gbs_api" + }, + { + "title": "Dasar CSS dan JavaScript", + "isbn": "-", + "author": "Vivian Siahaan, Rismon Hasiholan Sianipar", + "synopsis": "Pada buku ini, Anda akan dikenalkan tentang XHTML (Extensible Hypertext Markup Language) yang dapat dipakai untuk membungkus informasi sehingga dapat diinterpretasi oleh penjelajah web. Pada awal buku ini, Anda akan fokus mempelajari pemformatan dan penyajian informasi. Untuk melakukannya, Anda akan menggunakan sebuah teknologi W3C yang dinamakan dengan CSS (Cascading Style Sheets) yang memampukan pembuat dokumen untuk menetapkan presentasi elemen-elemen sebuah halaman web (misalnya, jenis huruf (font), pengaturan spasi, warna, dll) yang terpisah dari struktur dokumen (bagian kepala, teks tubuh, link, dan lainnya). Pemisahan struktur dokumen dari presentasi elemen akan menyederhanakan pemodifikasian sebuah halaman web. Selanjutnya Anda akan menuliskan sebuah skrip JavaScript. Adalah hal yang penting untuk memahami jenis blok pembangun yang tersedia dan untuk menggunakan prinsip-prinsi konstruksi program yang teruji. Pada buku ini, Anda akan mempelajari konstruksi seleksi, repetisi, array, dan objek dalam JavaScript. Selanjutnya, pada Anda akan dikenalkan mengenai DOM (Document Object Model). DOM memberikan Anda akses terhadap semua elemen pada suatu halaman web. Di dalam penjelajah web, formulir paragraf, tabel, dan lainnya, direpresentasikan pada sebuah hierarki objek. Dengan menggunakan JavaScript, Anda dapat menciptakan, memodifikasi, dan menghilangkan elemen-elemen di dalam halaman web secara dinamis. Setiap penjelajah internet (Web Browser) memiliki versi HTML dinamis (DHTML) yang berbeda, yang masing-masing menyediakan fungsionalitas yang sama. Namun, meskipun masing-masing memiliki kapabilitas yang sama, setiap model tersebut tidak kompatibel satu sama lain. Dalam usaha meningkatkan kompatibilitas lintas-penjelajah, W3C memberlakukan DOM terstandarisasi. Firefox, IE7, dan banyak penjelajah web lainnya mengimplementasikan hampir semua fitur DOM dari W3C. Pada buku ini, akan didiskusikan mengenai filter dan transisi. Penerapan filter terhadap teks dan citra menyebabkan perubahan yang persisten. Transisi bersifat temporer; penerapan sebuah transisi memampukan Anda untuk mengalihkan dari satu halaman ke halaman lain dengan efek visual seperti random dissolve. Filter dan transisi tidak menambahkan konten pada halaman Anda, tetapi keduanya dapat dipakai untuk menangkap atensi pengguna. Setiap efek visual yang diterapkan dengan filter dan transisi dapat diprogram (programabel), sehingga efek tersebut dapat diubah secara dinamis oleh program untuk merespon event yang dilakukan pengguna, seperti klik mouse dan penekanan-kunci. Filter dan transisi sangat mudah digunakan sehingga para perancang halaman web dapat menggunakannya dengan usaha yang minimal. Bagian dari keindahan filter dan transisi DHTML (dynamic HTML) adalah bahwa keduanya merupakan paket yang terintegrasi di dalam Internet Explorer. Anda tidak lagi memerlukan program paket grafis untuk memanfaatkannya. Filter dan transisi ditetapkan dengan properti filter dari CSS. Kapabilitas ini serupa dengan kapabilitas grafis dari perangkat lunak semacam PowerPoint dari Microsoft. Anda dapat memiliki halaman baru atau potong halaman web yang memudar. Anda dapat memiliki sebuah halaman yang secara acak menjelma (randomly dissolve) menjadi halaman berikutnya. Anda dapat membuat potongan halaman menjadi transparan atau semitransparan sehingga Anda dapat melihat apa yang ada di baliknya. Anda dapat mengaburkan teks atau citra untuk memberikannya ilusi gerakan. Anda dapat menciptakan bayangan pada elemen untuk memberikannya efek tiga-dimensi. Anda bahkan dapat menggabungkan beberapa efek untuk menghasilkan pelbagai efek yang lebih besar.", + "pageCount": 238, + "stock": 4, + "publisher": "Sparta Publisher", + "publishedDate": "2018-11-07", + "lang": "id", + "imgUrl": "http://books.google.com/books/content?id=m4heDwAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "status": "available", + "category": "Computers", + "pricePerWeek": 1463, + "link": "http://books.google.co.id/books?id=m4heDwAAQBAJ&printsec=frontcover&dq=javascript&hl=&as_pt=BOOKS&cd=15&source=gbs_api" + }, + { + "title": "Decoding JavaScript", + "isbn": "9789390684816", + "author": "Rushabh Mulraj Shah", + "synopsis": "Mastering advanced JavaScript to build modern next-generation web applications. Ê KEY FEATURESÊÊ _ A simplified explanation of complex concepts to create powerful and flexible web applications. _ Learn testing JavaScript code, regular expressions, fetching data, and many more with ES6. _ A full-fledged section dedicated to developing an application using JavaScript. DESCRIPTIONÊ Decoding JavaScript will take the users on an eventful journey of simplifying and understanding advanced concepts of JavaScript. Since JavaScript is the core programming language for almost every interaction on the web, this book will make it easier for readers to develop modern cutting-edge web applications. Ê The book begins with a quick recap of the fundamental JavaScript (JS) concepts like the syntax of JS, data types, operators, conditionals, looping, functions, arrays, objects, and so on. The readers will also explore the handy Chrome DevelopersÕ Tools.ÊÊ This book will also help readers learn and implement important concepts like how to connect to the servers, fetching data like images, user information, videos, etc. from the server, and displaying it on the web page. Besides that, users will learn about impactful concepts like testing JavaScript code, regular expressions, and exploring the popular ES6 and the versions beyond. Most importantly, this book will help you with the best JavaScript practices followed by companies like Google, Facebook, Twitter, etc. to develop a live application right from scratch. WHAT YOU WILL LEARN _ Build dynamic web applications interacting with servers using Vanilla. _ Improve code efficiency by learning advanced concepts of JavaScript. _ Get acquainted with best practices adopted by industry leaders, including Google and Facebook.Ê _ Get access to work with popular libraries like ReactJS, jQuery, Angular, Ember, and Vue. WHO THIS BOOK IS FORÊÊ This book is for aspiring web developers and fairly experienced JavaScript developers who want to create modern web and server applications. Prior knowledge of HTML and CSS is essential to begin with this book. TABLE OF CONTENTS 1. Introduction to JavaScript 2. The DeveloperÕs Tools 3. Functions 4. Arrays 5. Objects 6. ES6 7. Classes 8. Callbacks and Promises 9. AJAX and Interacting with Servers 10. Developing a Live Application! 11. Storing Data in Browsers 12. Debugging and Error Handling 13. Testing and Test Frameworks 14. Regular Expressions 15. Life after ES6 16. Tips and Tricks", + "pageCount": 404, + "stock": 1, + "publisher": "BPB Publications", + "publishedDate": "2021-05-21", + "lang": "en", + "imgUrl": "http://books.google.com/books/content?id=8novEAAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "status": "available", + "category": "Computers", + "pricePerWeek": 4119, + "link": "http://books.google.co.id/books?id=8novEAAAQBAJ&printsec=frontcover&dq=javascript&hl=&as_pt=BOOKS&cd=16&source=gbs_api" + }, + { + "title": "JavaScript: The Definitive Guide", + "isbn": "9780596554477", + "author": "David Flanagan", + "synopsis": "This Fifth Edition is completely revised and expanded to cover JavaScript as it is used in today's Web 2.0 applications. This book is both an example-driven programmer's guide and a keep-on-your-desk reference, with new chapters that explain everything you need to know to get the most out of JavaScript, including: Scripted HTTP and Ajax XML processing Client-side graphics using the canvas tag Namespaces in JavaScript--essential when writing complex programs Classes, closures, persistence, Flash, and JavaScript embedded in Java applications Part I explains the core JavaScript language in detail. If you are new to JavaScript, it will teach you the language. If you are already a JavaScript programmer, Part I will sharpen your skills and deepen your understanding of the language. Part II explains the scripting environment provided by web browsers, with a focus on DOM scripting with unobtrusive JavaScript. The broad and deep coverage of client-side JavaScript is illustrated with many sophisticated examples that demonstrate how to: Generate a table of contents for an HTML document Display DHTML animations Automate form validation Draw dynamic pie charts Make HTML elements draggable Define keyboard shortcuts for web applications Create Ajax-enabled tool tips Use XPath and XSLT on XML documents loaded with Ajax And much more Part III is a complete reference for core JavaScript. It documents every class, object, constructor, method, function, property, and constant defined by JavaScript 1.5 and ECMAScript Version 3. Part IV is a reference for client-side JavaScript, covering legacy web browser APIs, the standard Level 2 DOM API, and emerging standards such as the XMLHttpRequest object and the canvas tag. More than 300,000 JavaScript programmers around the world have madethis their indispensable reference book for building JavaScript applications. \"A must-have reference for expert JavaScript programmers...well-organized and detailed.\" -- Brendan Eich, creator of JavaScript", + "pageCount": 1022, + "stock": 3, + "publisher": "\"O'Reilly Media, Inc.\"", + "publishedDate": "2006-08-17", + "lang": "en", + "imgUrl": "http://books.google.com/books/content?id=2weL0iAfrEMC&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "status": "available", + "category": "Computers", + "pricePerWeek": 4993, + "link": "http://books.google.co.id/books?id=2weL0iAfrEMC&printsec=frontcover&dq=javascript&hl=&as_pt=BOOKS&cd=17&source=gbs_api" + }, + { + "title": "JavaScript Unlocked", + "isbn": "9781785885068", + "author": "Dmitry Sheiko", + "synopsis": "Improve your code maintainability, performance, and security through practical expert insights and unlock the full potential of JavaScript About This Book Improve your JavaScript code for better maintainability and performance Discover how to implement scalable application architecture with JavaScript Learn to use JavaScript behind the browser, including its command-line tools, desktop apps, and native mobile apps Who This Book Is For JavaScript Unlocked is for those JS developers who want to see just how far they can push their favourite language through practical insight and techniques. What You Will Learn Make your code readable and expressive by using simple syntax of JavaScript Grasp existing JavaScript collections such as arrays and array-like objects Develop abstract data types in most effective way to extend JavaScript into a more flexible and powerful programming language Examine the pros and cons of JavaScript by implementing real-time code examples Flourish real-time mini-projects by using JavaScript on server side to develop desktop as well as mobile applications Work on parallel tasks with asynchronous JavaScript Improve code maintainability and readability and boost apps performance through JavaScript In Detail JavaScript stands bestride the world like a colossus. Having conquered web development, it now advances into new areas such as server scripting, desktop and mobile development, game scripting, and more. One of the most essential languages for any modern developer, the fully-engaged JavaScript programmer need to know the tricks, non-documented features, quirks, and best practices of this powerful, adaptive language. This all-practical guide is stuffed with code recipes and keys to help you unlock the full potential of JavaScript. Start by diving right into the core of JavaScript, with power user techniques for getting better maintainability and performance from the basic building blocks of your code. Get to grips with modular programming to bring real power to the browser, master client-side JavaScript scripting without jQuery or other frameworks, and discover the full potential of asynchronous coding. Do great things with HTML5 APIs, including building your first web component, tackle the essential requirements of writing large-scale applications, and optimize JavaScript's performance behind the browser. Wrap up with in-depth advice and best practice for debugging and keeping your JavaScript maintainable for scaling, long-term projects. With every task demonstrated in both classic ES5 JavaScript and next generation ES6-7 versions of the language, Whether read cover-to-cover or dipped into for specific keys and recipes, JavaScript Unlocked is your essential guide for pushing JavaScript to its limits. Style and approach This practice-oriented cookbook is packed full of code examples put in the form: problem, classical solution, and methods to optimize webpage in both JavaScript ES5 and ES6 language editions. But this thorough guide is best-suited to those who like to “learn by doing” as the topics are covered using real-life examples and tutorials.", + "pageCount": 182, + "stock": 1, + "publisher": "Packt Publishing Ltd", + "publishedDate": "2015-12-07", + "lang": "en", + "imgUrl": "http://books.google.com/books/content?id=CDzlCwAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "status": "available", + "category": "Computers", + "pricePerWeek": 1818, + "link": "http://books.google.co.id/books?id=CDzlCwAAQBAJ&printsec=frontcover&dq=javascript&hl=&as_pt=BOOKS&cd=18&source=gbs_api" + }, + { + "title": "JavaScript by Example", + "isbn": "9781788299008", + "author": "Dani Akash S", + "synopsis": "A project based guide to help you get started with web development by building real-world and modern web applications About This Book Learn JavaScript from scratch by building clones of popular web applications Understand the core concepts and techniques surrounding JavaScript with this power-packed hands-on guide Explore modern JavaScript frameworks and libraries such as Node, React and Webpack Who This Book Is For The target audience for this book is developers with little or basic knowledge of working with JavaScript. If you are an emerging web developer with experience in building static web pages using HTML and CSS, this book will teach you to add JavaScript elements to make your website interactive and dynamic. What You Will Learn A strong understanding of web application development with JavaScript and ES6. A firm foundation on which to master other JavaScript frameworks and libraries. Write maintainable and scalable code by organizing functions into modules. Importance of tools such as Node, NPM, Babel, and Webpack in Front-end development. Work with real-time data such as incoming video streams, texts, and so on Integrate React with JavaScript to build large-scale applications. Utilize Redux to manage data across React components and greatly speed up the development process In Detail JavaScript is the programming language that all web developers need to learn. The first item on our JavaScript to-do list is building g a To-do list app, which you'll have done by the end of the first chapter. You'll explore DOM manipulation with JavaScript and work with event listeners. You'll work with images and text to build a Meme creator. You will also learn about ES (ECMAScript) classes, and will be introduced to layouts using the CSS3 Flexbox. You'll also develop a responsive Event Registration form that allows users to register for your upcoming event and use charts and graphics to display registration data. You will then build a weather application, which will show you different ways perform AJAX requests and work with dynamic, external data. WebRTC enables real-time communication in a web browser; you'll learn how to use it when you build a real-time video-call and chat application later in the book. Towards the end of the book, you will meet React, Facebook's JavaScript library for building user interfaces. You'll throw together a blog with React, and get a feel for why this kind of JavaScript framework is used to build large-scale applications. To make your blog more maintainable and scalable, you'll use Redux to manage data across React components. Style and approach This project-based guide will teach you all the facets of JavaScript through real-world app examples.", + "pageCount": 289, + "stock": 4, + "publisher": "Packt Publishing Ltd", + "publishedDate": "2017-08-30", + "lang": "en", + "imgUrl": "http://books.google.com/books/content?id=WJZGDwAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "status": "available", + "category": "Computers", + "pricePerWeek": 1295, + "link": "http://books.google.co.id/books?id=WJZGDwAAQBAJ&printsec=frontcover&dq=javascript&hl=&as_pt=BOOKS&cd=19&source=gbs_api" + }, + { + "title": "Clean Code in JavaScript", + "isbn": "9781789957297", + "author": "James Padolsey", + "synopsis": "Get the most out of JavaScript for building web applications through a series of patterns, techniques, and case studies for clean coding Key FeaturesWrite maintainable JS code using internal abstraction, well-written tests, and well-documented codeUnderstand the agents of clean coding like SOLID principles, OOP, and functional programmingExplore solutions to tackle common JavaScript challenges in building UIs, managing APIs, and writing statesBook Description Building robust apps starts with creating clean code. In this book, you’ll explore techniques for doing this by learning everything from the basics of JavaScript through to the practices of clean code. You’ll write functional, intuitive, and maintainable code while also understanding how your code affects the end user and the wider community. The book starts with popular clean-coding principles such as SOLID, and the Law of Demeter (LoD), along with highlighting the enemies of writing clean code such as cargo culting and over-management. You’ll then delve into JavaScript, understanding the more complex aspects of the language. Next, you’ll create meaningful abstractions using design patterns, such as the Class Pattern and the Revealing Module Pattern. You’ll explore real-world challenges such as DOM reconciliation, state management, dependency management, and security, both within browser and server environments. Later, you’ll cover tooling and testing methodologies and the importance of documenting code. Finally, the book will focus on advocacy and good communication for improving code cleanliness within teams or workplaces, along with covering a case study for clean coding. By the end of this book, you’ll be well-versed with JavaScript and have learned how to create clean abstractions, test them, and communicate about them via documentation. What you will learnUnderstand the true purpose of code and the problems it solves for your end-users and colleaguesDiscover the tenets and enemies of clean code considering the effects of cultural and syntactic conventionsUse modern JavaScript syntax and design patterns to craft intuitive abstractionsMaintain code quality within your team via wise adoption of tooling and advocating best practicesLearn the modern ecosystem of JavaScript and its challenges like DOM reconciliation and state managementExpress the behavior of your code both within tests and via various forms of documentationWho this book is for This book is for anyone who writes JavaScript, professionally or otherwise. As this book does not relate specifically to any particular framework or environment, no prior experience of any JavaScript web framework is required. Some knowledge of programming is assumed to understand the concepts covered in the book more effectively.", + "pageCount": 527, + "stock": 3, + "publisher": "Packt Publishing Ltd", + "publishedDate": "2020-01-20", + "lang": "en", + "imgUrl": "http://books.google.com/books/content?id=DprLDwAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "status": "available", + "category": "Computers", + "pricePerWeek": 4179, + "link": "http://books.google.co.id/books?id=DprLDwAAQBAJ&printsec=frontcover&dq=javascript&hl=&as_pt=BOOKS&cd=20&source=gbs_api" + }, + { + "title": "Hands-On Design Patterns with React Native", + "isbn": "9781788999540", + "author": "Mateusz Grzesiukiewicz", + "synopsis": "Learn how to write cross platform React Native code by using effective design patterns in the JavaScript world. Get to know industry standard patterns as well as situational patterns. Decouple your application with these set of “Idea patterns”. Key FeaturesMobile development in React Native should be done in a reusable way. Learn how to build scalable applications using JavaScript patterns that are battle tested.Try effective techniques on your own using over 80 standalone examples.Book Description React Native helps developers reuse code across different mobile platforms like iOS and Android. This book will show you effective design patterns in the React Native world and will make you ready for professional development in big teams. The book will focus only on the patterns that are relevant to JavaScript, ECMAScript, React and React Native. However, you can successfully transfer a lot of the skills and techniques to other languages. I call them “Idea patterns”. This book will start with the most standard development patterns in React like component building patterns, styling patterns in React Native and then extend these patterns to your mobile application using real world practical examples. Each chapter comes with full, separate source code of applications that you can build and run on your phone. The book is also diving into architectural patterns. Especially how to adapt MVC to React environment. You will learn Flux architecture and how Redux is implementing it. Each approach will be presented with its pros and cons. You will learn how to work with external data sources using libraries like Redux thunk and Redux Saga. The end goal is the ability to recognize the best solution for a given problem for your next mobile application. What you will learnExplore the design Patterns in React NativeLearn the best practices for React Native developmentExplore common React patterns that are highly used within React Native developmentLearn to decouple components and use dependency injection in your applicationsExplore the best ways of fetching data from the backend systemsLearn the styling patterns and how to implement custom mobile designsExplore the best ways to organize your application code in big codebasesWho this book is for The ideal target audience for this book are people eager to learn React Native design patterns who already know the basics of JavaScript. We can assume that the target audience already knows how to write Hello World in JavaScript and know what are the functions, recursive functions, JavaScript types and loops.", + "pageCount": 297, + "stock": 5, + "publisher": "Packt Publishing Ltd", + "publishedDate": "2018-09-29", + "lang": "en", + "imgUrl": "http://books.google.com/books/content?id=Iv1wDwAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "status": "available", + "category": "Computers", + "pricePerWeek": 651, + "link": "http://books.google.co.id/books?id=Iv1wDwAAQBAJ&printsec=frontcover&dq=react&hl=&as_pt=BOOKS&cd=1&source=gbs_api" + }, + { + "title": "Menguasai React JS Untuk Pemula", + "isbn": "-", + "author": "Rohi Abdulloh", + "synopsis": "Buku ini ditujukan bagi siapa saja yang ingin menguasai React. Pembahasan dimulai teori dasar JavaScript, sehingga buku ini dapat diikuti oleh orang yang baru mengenal JavaScript sekalipun. Buku ini dibuat dengan skrip berwarna, harapannya akan lebih mudah diikuti dan dipahami. Setiap pembahasan disertai contoh skrip dan hasilnya. File-file latihan pada buku ini diminta melalui email penulis dengan menyertakan bukti pembelian buku. Total halaman buku ini sampai 400 lebih halaman. Materi yang dibahas meliputi: - Teori dasar JavaScript - Teori dasr React - Menggunakan Component Library - Menggunakan Material UI - Menerapkan Routing dan AJAX - Integrasi dengan Laravel dan Inertia Buku ini ditulis oleh penulis yang sudah berpengalaman menulis buku-buku best seller. Bahkan buku-bukunya banyak yang dikoleksi oleh pembaca. Salah satu keunggulan dari buku-bukunya yaitu mudah diikuti oleh pemula sekalipun.", + "pageCount": 407, + "stock": 3, + "publisher": "Rohi Abdulloh", + "publishedDate": "2020-11-25", + "lang": "id", + "imgUrl": "http://books.google.com/books/content?id=jq4LEAAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "status": "available", + "category": "Young Adult Nonfiction", + "pricePerWeek": 1743, + "link": "http://books.google.co.id/books?id=jq4LEAAAQBAJ&printsec=frontcover&dq=react&hl=&as_pt=BOOKS&cd=2&source=gbs_api" + }, + { + "title": "React Projects", + "isbn": "9781789953398", + "author": "Roy Derks", + "synopsis": "Build cross-platform applications of varying complexity for the web, mobile, and VR devices using React tooling Key FeaturesBuild React applications at scale using effective React patterns and best practicesExplore React features such as Hooks, the Context API, and the Suspense APIExtend React’s integration with React Native for building cross-platform mobile apps and gamesBook Description Developed by Facebook, React is a popular library for building impressive user interfaces. React extends its capabilities to the mobile platform using the React Native framework and integrates with popular web and mobile tools to build scalable applications. React Projects is your guide to learning React development by using modern development patterns and integrating React with powerful web tools such as GraphQL, Expo, and React 360. You'll start building a real-world project right from the first chapter and get hands on with developing scalable applications as you advance to building more complex projects. Throughout the book, you'll use the latest versions of React and React Native to explore features such as Higher Order Components (HOC), Context, and Hooks on multiple platforms, which will help you build full stack web and mobile applications efficiently. Finally, you'll delve into unit testing with Jest to build test-driven apps. By the end of this React book, you'll have developed the skills necessary to start building scalable React apps across web and mobile platforms. What you will learnCreate a wide range of applications using various modern React tools and frameworksDiscover how React Hooks modernize state management for React appsDevelop progressive web applications using React componentsBuild test-driven React applications using the Jest and Enzyme frameworksUnderstand full stack development using React, Apollo, and GraphQLPerform server-side rendering using React and React RouterDesign gestures and animations for a cross-platform game using React NativeWho this book is for The book is for JavaScript developers who want to explore React tooling and frameworks for building cross-platform applications. Basic knowledge of web development, ECMAScript, and React will assist with understanding key concepts covered in this book.", + "pageCount": 465, + "stock": 3, + "publisher": "Packt Publishing Ltd", + "publishedDate": "2019-12-20", + "lang": "en", + "imgUrl": "http://books.google.com/books/content?id=2HvGDwAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "status": "available", + "category": "Computers", + "pricePerWeek": 266, + "link": "http://books.google.co.id/books?id=2HvGDwAAQBAJ&printsec=frontcover&dq=react&hl=&as_pt=BOOKS&cd=3&source=gbs_api" + }, + { + "title": "Learning React Native", + "isbn": "9781491989098", + "author": "Bonnie Eisenman", + "synopsis": "Get a practical introduction to React Native, the JavaScript framework for writing and deploying fully featured mobile apps that render natively. The second edition of this hands-on guide shows you how to build applications that target iOS, Android, and other mobile platforms instead of browsers—apps that can access platform features such as the camera, user location, and local storage. Through code examples and step-by-step instructions, web developers and frontend engineers familiar with React will learn how to build and style interfaces, use mobile components, and debug and deploy apps. You’ll learn how to extend React Native using third-party libraries or your own Java and Objective-C libraries. Understand how React Native works under the hood with native UI components Examine how React Native’s mobile-based components compare to basic HTML elements Create and style your own React Native components and applications Take advantage of platform-specific APIs, as well as modules from the framework’s community Incorporate platform-specific components into cross-platform apps Learn common pitfalls of React Native development, and tools for dealing with them Combine a large application’s many screens into a cohesive UX Handle state management in a large app with the Redux library", + "pageCount": 242, + "stock": 5, + "publisher": "\"O'Reilly Media, Inc.\"", + "publishedDate": "2017-10-23", + "lang": "en", + "imgUrl": "http://books.google.com/books/content?id=xAg7DwAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "status": "available", + "category": "Computers", + "pricePerWeek": 2920, + "link": "http://books.google.co.id/books?id=xAg7DwAAQBAJ&printsec=frontcover&dq=react&hl=&as_pt=BOOKS&cd=4&source=gbs_api" + }, + { + "title": "A simpel basic tutor programming", + "isbn": "-", + "author": "-", + "synopsis": "tutorial buku tentang awal pembuatan project dengan react native", + "stock": 3, + "publisher": "Lan Dev", + "publishedDate": "2017-01-17", + "lang": "id", + "imgUrl": "http://books.google.com/books/content?id=kbjPDwAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "status": "available", + "category": "Young Adult Nonfiction", + "pricePerWeek": 4709, + "link": "http://books.google.co.id/books?id=kbjPDwAAQBAJ&printsec=frontcover&dq=react&hl=&as_pt=BOOKS&cd=5&source=gbs_api" + }, + { + "title": "React", + "isbn": "1976210232", + "author": "Lionel Lopez", + "synopsis": "REACT This book/tutorial is about ReactJS and it is designed to move you from beginner to advanced programming. This book is based on 17 chapters well managed and it will helps you to become a React JS expert in less than 7 days. Each chapter will contain a certain number of relevant topics with illustrations and exercises where necessary, this will all be finished off with an end of chapter quiz for an easy and enjoyable learning. Benefits of reading this book that you're not going to find anywhere else: It helps you to understand React Easily. You can learn how to install Node JS based on ReactJS. With React you can build applications fast. ReactJS is SEO friendly. It makes code writing simple. We can use React with other libraries. React JS is very light weight front-end framework which allows developers to create web applications faster. Great Community Support. Supports State Management using Redux. CLICK ADD TO CART TO GET THIS AMAZING BOOK!", + "pageCount": 206, + "stock": 4, + "publisher": "Createspace Independent Publishing Platform", + "publishedDate": "2017-09-07", + "lang": "en", + "imgUrl": "http://books.google.com/books/content?id=vHj7swEACAAJ&printsec=frontcover&img=1&zoom=1&source=gbs_api", + "status": "available", + "category": "-", + "pricePerWeek": 307, + "link": "http://books.google.co.id/books?id=vHj7swEACAAJ&dq=react&hl=&as_pt=BOOKS&cd=6&source=gbs_api" + }, + { + "title": "React and React Native", + "isbn": "9781839212437", + "author": "Adam Boduch, Roy Derks", + "synopsis": "Get up to speed with React, React Native, GraphQL and Apollo for building cross-platform native apps with the help of practical examples Key FeaturesCovers the latest features of React such as Hooks, Suspense, NativeBase, and Apollo in this updated third editionGet to grips with the React architecture for writing easy-to-manage web and mobile applicationsUnderstand GraphQL and Apollo for building a scalable backend for your cross-platform appsBook Description React and React Native, Facebook's innovative User Interface (UI) libraries, are designed to help you build robust cross-platform web and mobile applications. This updated third edition is improved and updated to cover the latest version of React. The book particularly focuses on the latest developments in the React ecosystem, such as modern Hook implementations, code splitting using lazy components and Suspense, user interface framework components using Material-UI, and Apollo. In terms of React Native, the book has been updated to version 0.62 and demonstrates how to apply native UI components for your existing mobile apps using NativeBase. You will begin by learning about the essential building blocks of React components. Next, you'll progress to working with higher-level functionalities in application development, before putting this knowledge to use by developing user interface components for the web and for native platforms. In the concluding chapters, you'll learn how to bring your application together with a robust data architecture. By the end of this book, you'll be able to build React applications for the web and React Native applications for multiple mobile platforms. What you will learnDelve into the React architecture, component properties, state, and contextGet to grips with React Hooks for handling functions and componentsImplement code splitting in React using lazy components and SuspenseBuild robust user interfaces for mobile and desktop apps using Material-UIWrite shared components for Android and iOS mobile apps using React NativeSimplify layout design for React Native apps using NativeBaseWrite GraphQL schemas to power web and mobile appsImplement web and mobile components that are driven by ApolloWho this book is for This book is for any JavaScript developer who wants to start learning how to use Facebook's UI libraries, React and React Native, for mobile and web application development. Although no prior knowledge of React is needed, working knowledge of JavaScript programming will help you understand the concepts covered in the book more effectively.", + "pageCount": 505, + "stock": 2, + "publisher": "Packt Publishing Ltd", + "publishedDate": "2020-04-30", + "lang": "en", + "imgUrl": "http://books.google.com/books/content?id=XCLhDwAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "status": "available", + "category": "Computers", + "pricePerWeek": 1627, + "link": "http://books.google.co.id/books?id=XCLhDwAAQBAJ&printsec=frontcover&dq=react&hl=&as_pt=BOOKS&cd=7&source=gbs_api" + }, + { + "title": "Full-Stack React, TypeScript, and Node", + "isbn": "9781839214691", + "author": "David Choi", + "synopsis": "Discover the current landscape of full-stack development and how to leverage modern web technologies for building production-ready React.js applications to deploy on AWS Key FeaturesUnderstand the architecture of React and single-page applicationsBuild a modern Web API for your SPA using Node.js, Express, and GraphQLGain a clear and practical understanding of how to build a complete full-stack applicationBook Description React sets the standard for building high-performance client-side web apps. Node.js is a scalable application server that is used in thousands of websites, while GraphQL is becoming the standard way for large websites to provide data and services to their users. Together, these technologies, when reinforced with the capabilities of TypeScript, provide a cutting-edge stack for complete web application development. This book takes a hands-on approach to implementing modern web technologies and the associated methodologies for building full-stack apps. You’ll begin by gaining a strong understanding of TypeScript and how to use it to build high-quality web apps. The chapters that follow delve into client-side development with React using the new Hooks API and Redux. Next, you’ll get to grips with server-side development with Express, including authentication with Redis-based sessions and accessing databases with TypeORM. The book will then show you how to use Apollo GraphQL to build web services for your full-stack app. Later, you’ll learn how to build GraphQL schemas and integrate them with React using Hooks. Finally, you’ll focus on how to deploy your application onto an NGINX server using the AWS cloud. By the end of this book, you’ll be able to build and deploy complete high-performance web applications using React, Node, and GraphQL. What you will learnDiscover TypeScript’s most important features and how they can be used to improve code quality and maintainabilityUnderstand what React Hooks are and how to build React apps using themImplement state management for your React app using ReduxSet up an Express project with TypeScript and GraphQL from scratchBuild a fully functional online forum app using React and GraphQLAdd authentication to your web app using RedisSave and retrieve data from a Postgres database using TypeORMConfigure NGINX on the AWS cloud to deploy and serve your appsWho this book is for The book is for web developers who want to go beyond front-end web development and enter the world of full-stack web development by learning about modern web technologies and how they come together. A good understanding of JavaScript programming is required before getting started with this web development book.", + "pageCount": 648, + "stock": 2, + "publisher": "Packt Publishing Ltd", + "publishedDate": "2020-12-18", + "lang": "en", + "imgUrl": "http://books.google.com/books/content?id=uUMQEAAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "status": "available", + "category": "Computers", + "pricePerWeek": 2944, + "link": "http://books.google.co.id/books?id=uUMQEAAAQBAJ&printsec=frontcover&dq=react&hl=&as_pt=BOOKS&cd=8&source=gbs_api" + }, + { + "title": "React: Cross-Platform Application Development with React Native", + "isbn": "9781789139600", + "author": "Emilio Rodriguez Martinez", + "synopsis": "With React Native, you can build native mobile apps that are much more powerful, interactive, and faster by using JavaScript. React Native helps web and mobile developers to build cross-platform apps at a high level. This book takes you through four projects to help understand of the framework and build mobile apps with native user experience.", + "pageCount": 183, + "stock": 3, + "publisher": "Packt Publishing Ltd", + "publishedDate": "2018-03-13", + "lang": "en", + "imgUrl": "http://books.google.com/books/content?id=MZRRDwAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "status": "available", + "category": "Computers", + "pricePerWeek": 4306, + "link": "http://books.google.co.id/books?id=MZRRDwAAQBAJ&printsec=frontcover&dq=react&hl=&as_pt=BOOKS&cd=9&source=gbs_api" + }, + { + "title": "React Native for Mobile Development", + "isbn": "9781484244548", + "author": "Akshat Paul, Abhishek Nalwaya", + "synopsis": "Develop native iOS and Android apps with ease using React Native. Learn by doing through an example-driven approach, and have a substantial running app at the end of each chapter. This second edition is fully updated to include ES7 (ECMAScript 7), the latest version of React Native (including Redux), and development on Android. You will start by setting up React Native and exploring the anatomy of React Native apps. You'll then move on to Redux data flow, how it differs from flux, and how you can include it in your React Native project to solve state management differently and efficiently. You will also learn how to boost your development by including popular packages developed by the React Native community that will help you write less; do more. Finally, you'll learn to how write test cases using Jest and submit your application to the App Store. React Native challenges the status quo of native iOS and Android development with revolutionary components, asynchronous execution, unique methods for touch handling, and much more. This book reveals the the path-breaking concepts of React.js and acquaints you with the React way of thinking so you can learn to create stunning user interfaces. What You'll Learn Build stunning iOS and Android applications Understand the Redux design pattern and use it in your project Interact with iOS and android device capabilities such as addressbook, camera, GPS and more with your apps Test and launch your application to the App StoreWho This Book Is For Anyone with JavaScript experience who wants to build native mobile applications but dreads the thought of programming in Objective-C or Java. Developers who have experience with JavaScript but are new or not acquainted to React Native or ReactJS.", + "pageCount": 243, + "stock": 3, + "publisher": "Apress", + "publishedDate": "2019-06-12", + "lang": "en", + "imgUrl": "http://books.google.com/books/content?id=0DidDwAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "status": "available", + "category": "Computers", + "pricePerWeek": 4641, + "link": "http://books.google.co.id/books?id=0DidDwAAQBAJ&printsec=frontcover&dq=react&hl=&as_pt=BOOKS&cd=10&source=gbs_api" + }, + { + "title": "Advanced Web Development with React", + "isbn": "9789389423600", + "author": "Mohan Mehul", + "synopsis": "Level up your React and Next.js skills with advanced concepts about SSR and PWA Key Featuresa- Covers latest and core React concepts including React hooks and React reconcilera- Covers about Server Side Rendering with React and how to use it using Next.jsa- Covers about Progressive Web Apps in React and how to create thema- Covers intermediate and advanced React concepts like state managementa- Covers overview of React for beginners to catch with advanced concepts latera- Covers bleeding-edge React concepts on the future of React and how it would work eventuallyDescriptionThe book starts by introducing the reader to React, what it is and why you need a library like React to work with medium to large scale applications. We then move on to implementing simple client-side programs with React, uncovering modern React practices like React hooks and diving deep into various kinds of hooks. We then move to implement React on the server using Server-Side Rendering to bring benefits of the SEO world to the dynamic rendering nature of front-end libraries. For this, we use Next.js, a very popular implementation of Server-Side Rendering which comes with tons of good practices already baked in. We also take a look at how Progressive Web Apps can be created out of existing React codebases and what benefits it provides us. Finally, we end the book with some React internals (how to React works) and some bleeding-edge features in React which are expected to roll out in 2-3 years fully and would impact how to React works under the hood.What will you learna- What React is and how to get started with ita- Modern ways to code React applicationsa- Implementing Server-Side rendering with/without Next.js on the top of React librarya- Working with Progressive Web Apps in Reacta- How to React works under the hooda- Future of React and bleeding-edge React tech you can use todayWho this book is forThe reader is expected to have a decent understanding of JavaScript/HTML/CSS, and possibly, worked with React a little bit beforehand. Although the first 2 chapters cover basics of React, still it is recommended for users with at least a bit of knowledge and experience with React.Table of Contents1. React 1012. Setting up React3. Components4. State Management with React5. Server Side React6. Introduction to Next.js7. More with Next.js8. Progressive Web Apps9. Bleeding edge ReactAbout the AuthorMehul Mohan is an entrepreneur, developer and a security researcher. Currently, he is pursuing his bachelor's degree in CSE at BITS Pilani. He is a WWDC'19 Scholar, and runs codedamn - a platform for people to learn coding. You'll often find him creating programming tutorials on his YouTube channel, codedamn, having over 100,000 subscribers. He has been acknowledged by companies such as Google, Microsoft, Sony, etc. for his contributions as a security researcher. Your Blog links: https://codedamn.com https://mehulmohan.com His LinkedIn Profile: https://linkedin.com/in/mehulmpt", + "pageCount": 184, + "stock": 4, + "publisher": "BPB Publications", + "publishedDate": "2020-02-26", + "lang": "en", + "imgUrl": "http://books.google.com/books/content?id=0bpIEAAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "status": "available", + "category": "Computers", + "pricePerWeek": 1780, + "link": "http://books.google.co.id/books?id=0bpIEAAAQBAJ&printsec=frontcover&dq=react&hl=&as_pt=BOOKS&cd=11&source=gbs_api" + }, + { + "title": "Panduan Membuat Aplikasi Ujian Online Dengan Laravel 8, React dan Inertia", + "isbn": "-", + "author": "Rohi Abdulloh", + "synopsis": "Ebook ini membahas step by step pembuatan aplikasi ujian online menggunakan Laravel 8, React dan Inertia. Laravel merupakan framework PHP paling populer saat ini untuk pengembangan aplikasi pada sisi back end. Sedangkan React merupakan framework JavaScript yang paling populer untuk pengembangan aplikasi pada sisi front end. Cara termudah mengintegrasikan Laravel dan React yaitu dengan menggunakan Inertia yang memungkinkan menggunakan Laravel dan React tanpa membuat Rest API. Beberapa fitur dalam aplikasi ini meliputi: · Import soal dari excel, sehingga soal tidak perlu input satu-satu ke aplikasi. · Import dan eksport peserta ujian dengan password dapat dibuat sendiri atau dibuat oleh aplikasi. · Export nilai dan jawaban yang dapat digunakan untuk keperluan analisis soal. · Pilihan acak soal, acak jawaban dan tampilkan hasil ujian ke siswa yang dapat diatur sesuai kebutuhan. · Pembagian sesi ujian, sehingga peserta hanya dapat mengakses ujian pada waktu yang sudah dijadwalkan. · Count down timer yang akan menghentikan ujian jika waktunya selesai. · Jika ada kejadian tak terduga, misal mati lampu atau komputer rusak, peserta dapat melanjutkan dengan waktu yang tersisa. Demo aplikasi dapat dilihat di: https://www.youtube.com/watch?v=loHmBPIc6Dg", + "pageCount": 168, + "stock": 5, + "publisher": "Rohi Abdulloh", + "publishedDate": "2021-05-05", + "lang": "id", + "imgUrl": "http://books.google.com/books/content?id=cqcsEAAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "status": "available", + "category": "Computers", + "pricePerWeek": 3450, + "link": "http://books.google.co.id/books?id=cqcsEAAAQBAJ&printsec=frontcover&dq=react&hl=&as_pt=BOOKS&cd=12&source=gbs_api" + }, + { + "title": "React and React Native", + "isbn": "9781786469571", + "author": "Adam Boduch", + "synopsis": "Use React and React Native to build applications for desktop browsers, mobile browsers, and even as native mobile apps About This Book Build React and React Native applications using familiar component concepts Dive deep into each platform, from routing in React to creating native mobile applications that can run offline Use Facebook's Relay, React and GraphQL technologies, to create a unified architecture that powers both web and native applications Who This Book Is For This book is written for any JavaScript developer—beginner or expert—who wants to start learning how to put both of Facebook's UI libraries to work. No knowledge of React is needed, though a working knowledge of ES2015 will help you follow along better. What You Will Learn Craft reusable React components Control navigation using the React Router to help keep your UI in sync with URLs Build isomorphic web applications using Node.js Use the Flexbox layout model to create responsive mobile designs Leverage the native APIs of Android and iOS to build engaging applications with React Native Respond to gestures in a way that's intuitive for the user Use Relay to build a unified data architecture for your React UIs In Detail React and React Native allow you to build cross-platform desktop and mobile applications using Facebook's innovative UI libraries. Combined with the Flux data architecture and Relay, you can now create powerful and feature-complete applications from just one code base! This book is split into three parts. The first part shows you how to start crafting composable UIs using React, from rendering with JSX and creating reusable components through to routing and creating isomorphic applications that run on Node. We then move on to showing you how to take the concepts of React and apply them to building Native UIs using React Native. You'll find out how to build responsive and streamlined UIs that can properly handle user interactions in a mobile environment. You'll also learn how to access device-specific APIs such as the geolocation API, and how to handle offline development with React Native. Finally, we'll tie all of these skills together and shows you how you can create React applications that run on every major platform. As well as understanding application state in depth, you'll learn how to leverage Relay to make feature-complete, data-driven web and native mobile applications. Style and approach Split into three major sections to help organize your learning, this hands-on, code-first book will help you get up to speed with React and React Native—the UI framework that powers Netflix, Yahoo, and Facebook.", + "pageCount": 485, + "stock": 5, + "publisher": "Packt Publishing Ltd", + "publishedDate": "2017-03-08", + "lang": "en", + "imgUrl": "http://books.google.com/books/content?id=jLkrDwAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "status": "available", + "category": "Computers", + "pricePerWeek": 602, + "link": "http://books.google.co.id/books?id=jLkrDwAAQBAJ&printsec=frontcover&dq=react&hl=&as_pt=BOOKS&cd=13&source=gbs_api" + }, + { + "title": "React: Building Modern Web Applications", + "isbn": "9781786462848", + "author": "Jonathan Hayward, Artemij Fedosejev, Narayan Prusty, Adam Horton, Ryan Vice, Ethan Holmes, Tom Bray", + "synopsis": "Master the art of building dynamic, modern web applications with React About This Book Learn the hot new frontend web framework from Facebook – ReactJS, an easy way of developing the V in MVC and a better approach to software engineering in JavaScript A fast-paced guide to designing and building scalable and maintainable web apps with React.js Learn all the new ES6 features and be among the most prominent JavaScript developers who can write efficient JS programs as per the latest standards Master the art of building modern web applications using React Learn to build modern native iOS and Android applications using JavaScript and the incredible power of React Who This Book Is For This course is for web developers that want to unlock high performance dynamism in the applications that they create. If you want a comprehensive journey into one of the most important JavaScript frameworks around today, dive into this course. What You Will Learn Take control of the front end with reactive JavaScript programming Discover what ReactJS offers your development - before mastering it Create React elements with properties and children Use JSX to speed up your React development process Test your React components with the Jest test framework Learn the latest syntax of ES6 Execute ES6 in a non-supported ES6 environment Learn the principles of object-oriented programming Create a complete single-page application Use an application design plan to write smarter, more meaningful code Learn how to use animations to give extra style to your application Get to grips with the React Native environment Write your own custom native UI components Integrate native modules in Objective-C and Java that interact with JavaScript In Detail ReactJS has helped to transform the web as we know it. Designed by Facebook to help developers build rapid, responsive UI that can deal with data-intensive usage, it's an essential component in any web developer's skillset. This ReactJS course, in five connected modules, provides you with a fast, engaging and practical route into ReactJS—so you can build powerful, elegant, and modern web applications. Beginning with the Reactive Programming with JavaScript module, you will learn how to take advantage of a reactive and functional programming paradigm to rethink how you approach your JavaScript code. It's built to help you understand the concepts, relevant and applicable for any frontend developer. You'll then dive a little deeper into ReactJS. The second module gives you a rapid look through the fundamentals of ReactJS, showing you how to build a basic application and demonstrating how to implement the Flux architecture. In the third module you will get to grips with ES6—this will make you a more fluent JavaScript developer, giving you control over ReactJS. You can put your old JavaScript hacks aside and instead explore how to create ES6 custom iterators. In the final two modules you'll learn how to fully master ReactJS, exploring its wider ecosystem of tools that have helped to make it one of the most important tools in web development today. Ending with insights and guidance on React Native, the tool built for today's demand for native, intuitive user experiences and interfaces, with this course you can be confident in building dynamic and modern apps with React. Style and approach Consisting of five separate modules, journey from the fundamentals of reactive programming to the exciting possibilities of React Native. Each module builds on each other, helping you to incrementally develop your skills and knowledge.", + "pageCount": 910, + "stock": 1, + "publisher": "Packt Publishing Ltd", + "publishedDate": "2016-06-10", + "lang": "en", + "imgUrl": "http://books.google.com/books/content?id=jUvZDQAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "status": "available", + "category": "Computers", + "pricePerWeek": 3483, + "link": "http://books.google.co.id/books?id=jUvZDQAAQBAJ&printsec=frontcover&dq=react&hl=&as_pt=BOOKS&cd=14&source=gbs_api" + }, + { + "title": "Essentials of Javascript", + "isbn": "-", + "author": "Shaaran Lakshminarayanan", + "synopsis": "Do you want to make applications for Android and iOS ? Are you a developer who is bored of writing code for both Android and iOS ? In this series of books we will overcome the problem of having to write code for Android and iOS by using React Native. React Native is a framework developed by Facebook for creating native-style apps for iOS & Android under one common language, JavaScript. Initially, Facebook only developed React Native to support iOS. However with its recent support of the Android operating system, the library can now render mobile UIs for both platforms. Why React Native ? Not only react native allows you to create cross platform applications but react native also makes updating apps simple through over-the-app updates. Over the air update in react native is achieved through technologies such as CodePush with a few lines of code. Armed with React Native you’ll finally be able to make apps of your choice in no time and I’m glad to show you what React Native can do through this series of books. In this book we will learn the core concepts of Javascript to help us with our React Native Journey.", + "pageCount": 27, + "stock": 1, + "publisher": "Shaaran Lakshminarayanan", + "publishedDate": "2020-05-12", + "lang": "en", + "imgUrl": "http://books.google.com/books/content?id=A1fjDwAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "status": "available", + "category": "Computers", + "pricePerWeek": 2348, + "link": "http://books.google.co.id/books?id=A1fjDwAAQBAJ&printsec=frontcover&dq=react&hl=&as_pt=BOOKS&cd=15&source=gbs_api" + }, + { + "title": "Full-Stack Web Development with GraphQL and React", + "isbn": "9781801079174", + "author": "Sebastian Grebe", + "synopsis": "Unleash the power of GraphQL, React 17, Node, and Express to build a scalable and production-ready application from scratch to be deployed on AWS Key FeaturesBuild full-stack applications with modern APIs using GraphQL and React HooksIntegrate Apollo into React and build frontend components using GraphQLImplement a self-updating notification pop-up with a unique GraphQL feature called SubscriptionsBook Description React and GraphQL, when combined, provide you with a very dynamic, efficient, and stable tech stack to build web-based applications. GraphQL is a modern solution for querying an API that represents an alternative to REST and is the next evolution in web development. This book guides you in creating a full-stack web application from scratch using modern web technologies such as Apollo, Express.js, Node.js, and React. First, you'll start by configuring and setting up your development environment. Next, the book demonstrates how to solve complex problems with GraphQL, such as abstracting multi-table database architectures and handling image uploads using Sequelize. You'll then build a complete Graphbook from scratch. While doing so, you'll cover the tricky parts of connecting React to the backend, and maintaining and synchronizing state. In addition to this, you'll also learn how to write Reusable React components and use React Hooks. Later chapters will guide you through querying data and authenticating users in order to enable user privacy. Finally, you'll explore how to deploy your application on AWS and ensure continuous deployment using Docker and CircleCI. By the end of this web development book, you'll have learned how to build and deploy scalable full-stack applications with ease using React and GraphQL. What you will learnBuild a GraphQL API by implementing models and schemas with Apollo and SequelizeSet up an Apollo Client and build frontend components using ReactWrite Reusable React components and use React HooksAuthenticate and query user data using GraphQLUse Mocha to write test cases for your full-stack applicationDeploy your application to AWS using Docker and CircleCIWho this book is for This React GraphQL book is for web developers familiar with React and GraphQL who want to enhance their skills and build full-stack applications using industry standards like React, Apollo, Node.js, and SQL at scale while learning to solve complex problems with GraphQL.", + "pageCount": 473, + "stock": 3, + "publisher": "Packt Publishing Ltd", + "publishedDate": "2022-02-28", + "lang": "en", + "imgUrl": "http://books.google.com/books/content?id=GPBbEAAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "status": "available", + "category": "Computers", + "pricePerWeek": 4265, + "link": "http://books.google.co.id/books?id=GPBbEAAAQBAJ&printsec=frontcover&dq=react&hl=&as_pt=BOOKS&cd=16&source=gbs_api" + }, + { + "title": "React Components", + "isbn": "9781785883729", + "author": "Christopher Pitt", + "synopsis": "Explore the power of React components for cutting-edge web development About This Book Learn to build better websites by creating a variety of different components in React Conceptualize the design and build maintainable web apps with the help of components A fast-paced guide to help you learn about component-based development in React Who This Book Is For This book is ideal for developers who are familiar with the basics of React and are looking for a guide to building a wide range of components as well as develop component-driven UIs. What You Will Learn How to structure an app into components Working with nested components Work with nested components Set up communication across components Style the existing components Work with Material Design as a component Render components on the server Make the best of design patterns Make the app pluggable In Detail The reader will learn how to use React and its component-based architecture in order to develop modern user interfaces. A new holistic way of thinking about UI development will establish throughout this book and the reader will discover the power of React components with many examples. After reading the book and following the example application, the reader has built a small to a mid-size application with React using a component based UI architecture. The book will take the reader through a journey to discover the benefits of component-based user interfaces over the classical MVC architecture. Throughout the book, the reader will develop a wide range of components and then bring them together to build a component-based UI. By the end of this book, readers would have learned several techniques to build powerful components and how the component-based development is beneficial over regular web development. Style and approach This book is a compact, example-driven guide that provides a step-by-step approach.", + "pageCount": 182, + "stock": 5, + "publisher": "Packt Publishing Ltd", + "publishedDate": "2016-04-21", + "lang": "en", + "imgUrl": "http://books.google.com/books/content?id=_97JDAAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "status": "available", + "category": "Computers", + "pricePerWeek": 3119, + "link": "http://books.google.co.id/books?id=_97JDAAAQBAJ&printsec=frontcover&dq=react&hl=&as_pt=BOOKS&cd=17&source=gbs_api" + }, + { + "title": "Learning React Js", + "isbn": "9798677494260", + "author": "Claudia Alves", + "synopsis": "You may have picked up this book with some level of JavaScript knowledge. There is also a high probability that you have an idea of what React js is. This chapter highlights the key aspects of React as a framework, explains the problems it solves, and describes how you can utilize the features and the rest of the information contained in this book to better your web development practices and create complex, yet maintainable user interfaces using React.Defining React jsReact js is a JavaScript framework. React was originally created by engineers at Facebook to solve the challenges involved when developing complex user interfaces with datasets that change over time. This is not a trivial undertaking and must not only be maintainable, but also scalable to work at the scale of Facebook. React js was actually born in Facebook's ads organization, where they had been utilizing a traditional client-side Model-View-Controller approach. Applications such as these normally consist of two-way data binding along with rendering template. React changed the way that these applications were created by making some daring advances in web development. When React js was released in 2013, the web development community was both interested and seemingly disgusted by what React was doing. As you will discover throughout this book, React challenges conventions that have become the de-facto standards for JavaScript framework best practices. React does this by introducing many new paradigms and shifting the status quo of what it takes to create scalable and maintainable JavaScript applications and user interfaces. Along with the shift in front-end development mentality, React comes with a rich set of features that make composing a single-page application or user interface approachable for developers of many skill levels-from those who have just been introduced to JavaScript, to seasoned veterans of the web. You will see these features-such as the virtual DOM, JSX, and Flux concepts-as you read this book and discover how they can be used to create complex user interfaces.You will also see, in brief, how Facebook is continually challenging the development world with React Native. React Native is a new open source library for creating native user interfaces utilizing the same principles as React's JavaScript library. By creating a Native UI library, React has pushed its value proposition of \"learn once, write anywhere.\" This paradigm shift applies to being able to utilize the core concepts of React in order to make maintainable interfaces. By now it is possible you are thinking that there is nothing React can't do when it comes to development. This is not the case, and in order to further understand what React is, you need an understanding of what React is not, which you learn later in this chapter. First, you will understand the underlying problems that caused React to be created and how React solves those problems.", + "pageCount": 144, + "stock": 3, + "publisher": "Independently Published", + "publishedDate": "2020-08-21", + "lang": "en", + "imgUrl": "http://books.google.com/books/content?id=BhDBzQEACAAJ&printsec=frontcover&img=1&zoom=1&source=gbs_api", + "status": "available", + "category": "-", + "pricePerWeek": 4677, + "link": "http://books.google.co.id/books?id=BhDBzQEACAAJ&dq=react&hl=&as_pt=BOOKS&cd=18&source=gbs_api" + }, + { + "title": "Beginning React", + "isbn": "9781789534924", + "author": "Andrea Chiarelli", + "synopsis": "Take your web applications to a whole new level with efficient, component-based UIs that deliver cutting-edge interactivity and performance. Key Features Elaborately explains basics before introducing advanced topics Explains creating and managing the state of components across applications Implement over 15 practical activities and exercises across 11 topics to reinforce your learning Book Description Projects like Angular and React are rapidly changing how development teams build and deploy web applications to production. In this book, you’ll learn the basics you need to get up and running with React and tackle real-world projects and challenges. It includes helpful guidance on how to consider key user requirements within the development process, and also shows you how to work with advanced concepts such as state management, data-binding, routing, and the popular component markup that is JSX. As you complete the included examples, you’ll find yourself well-equipped to move onto a real-world personal or professional frontend project. What you will learn Understand how React works within a wider application stack Analyze how you can break down a standard interface into specific components Successfully create your own increasingly complex React components with HTML or JSX Correctly handle multiple user events and their impact on overall application state Understand the component lifecycle to optimize the UX of your application Configure routing to allow effortless, intuitive navigation through your components Who this book is for If you are a frontend developer who wants to create truly reactive user interfaces in JavaScript, then this is the book for you. For React, you’ll need a solid foundation in the essentials of the JavaScript language, including new OOP features that were introduced in ES2015. An understanding of HTML and CSS is assumed, and a basic knowledge of Node.js will be useful in the context of managing a development workflow, but is not essential.", + "pageCount": 90, + "stock": 5, + "publisher": "Packt Publishing Ltd", + "publishedDate": "2018-07-25", + "lang": "en", + "imgUrl": "http://books.google.com/books/content?id=cWdmDwAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "status": "available", + "category": "Computers", + "pricePerWeek": 2346, + "link": "http://books.google.co.id/books?id=cWdmDwAAQBAJ&printsec=frontcover&dq=react&hl=&as_pt=BOOKS&cd=19&source=gbs_api" + }, + { + "title": "React 17 Design Patterns and Best Practices", + "isbn": "9781800561762", + "author": "Carlos Santana Roldan", + "synopsis": "Build scalable, maintainable, and powerful React web apps with design patterns and insightful best practices Key Features Make the most of design patterns in React – including render props and controlled and uncontrolled inputs Master React Hooks with the help of this updated third edition Work through examples that can be used to create reusable code and extensible designs Book Description Filled with useful React patterns that you can use in your projects straight away, this book will help you save time and build better web applications with ease. React 17 Design Patterns and Best Practices is a hands-on guide for those who want to take their coding skills to a new level. You'll spend most of your time working your way through the principles of writing maintainable and clean code, but you'll also gain a deeper insight into the inner workings of React. As you progress through the chapters, you'll learn how to build components that are reusable across the application, how to structure applications, and create forms that actually work. Then you'll build on your knowledge by exploring how to style React components and optimize them to make applications faster and more responsive. Once you've mastered the rest, you'll learn how to write tests effectively and how to contribute to React and its ecosystem. By the end of this book, you'll be able to avoid the process of trial and error and developmental headaches. Instead, you'll be able to use your new skills to efficiently build and deploy real-world React web applications you can be proud of. What you will learn Get to grips with the techniques of styling and optimizing React components Create components using the new React Hooks Use server-side rendering to make applications load faster Get up to speed with the new React Suspense technique and using GraphQL in your projects Write a comprehensive set of tests to create robust and maintainable code Build high-performing applications by optimizing components Who this book is for This book is for web developers who want to understand React better and apply it to real-life app development. You'll need an intermediate-level experience with React and JavaScript before you get started.", + "pageCount": 381, + "stock": 1, + "publisher": "Packt Publishing Ltd", + "publishedDate": "2021-05-17", + "lang": "en", + "imgUrl": "http://books.google.com/books/content?id=viIvEAAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "status": "available", + "category": "Computers", + "pricePerWeek": 1929, + "link": "http://books.google.co.id/books?id=viIvEAAAQBAJ&printsec=frontcover&dq=react&hl=&as_pt=BOOKS&cd=20&source=gbs_api" + }, + { + "title": "Encyclopedia of World Biography", + "isbn": "WISC:89063818827", + "author": "-", + "synopsis": "Presents brief biographical sketches which provide vital statistics as well as information on the importance of the person listed.", + "pageCount": 558, + "stock": 4, + "publisher": "Gale", + "publishedDate": "1998", + "lang": "en", + "imgUrl": "http://books.google.com/books/content?id=UbWRXPJnwbQC&printsec=frontcover&img=1&zoom=1&source=gbs_api", + "status": "available", + "category": "Biography", + "pricePerWeek": 368, + "link": "http://books.google.co.id/books?id=UbWRXPJnwbQC&q=bio&dq=bio&hl=&as_pt=BOOKS&cd=1&source=gbs_api" + }, + { + "title": "Virgil Thomson", + "isbn": "UOM:39015010408246", + "author": "Michael Meckna", + "pageCount": 240, + "stock": 4, + "publisher": "Greenwood", + "publishedDate": "1986-08-13", + "lang": "en", + "imgUrl": "http://books.google.com/books/content?id=sT0bAAAAMAAJ&printsec=frontcover&img=1&zoom=1&source=gbs_api", + "status": "available", + "category": "Music", + "pricePerWeek": 1626, + "link": "http://books.google.co.id/books?id=sT0bAAAAMAAJ&pg=PR14&dq=bio&hl=&as_pt=BOOKS&cd=2&source=gbs_api" + }, + { + "title": "AWS CLI Command", + "isbn": "-", + "author": "RB ASHISH", + "synopsis": "Master the step by step guide to AWS CLI Command Amazon Web Services Cmd line Interface. With just single tool you can configure, control and manage all your AWS Services through command line and automate them with scripts. Some of the services includes are: • apigateway • autoscaling • batch • cloudformation • dynamodb • ec2 • glacier • iam • kms • lambda • machinelearning • rds • route53 • s3 • swf • waf and more.", + "pageCount": 26, + "stock": 3, + "publisher": "CreateSpace", + "publishedDate": "2018-10-08", + "lang": "en", + "imgUrl": "http://books.google.com/books/content?id=4aFmDwAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "status": "available", + "category": "Computers", + "pricePerWeek": 1072, + "link": "http://books.google.co.id/books?id=4aFmDwAAQBAJ&pg=PA21&dq=bio&hl=&as_pt=BOOKS&cd=3&source=gbs_api" + }, + { + "title": "Bulletin", + "isbn": "STANFORD:36105032873403", + "author": "-", + "pageCount": 246, + "stock": 3, + "publishedDate": "1980", + "lang": "en", + "imgUrl": "http://books.google.com/books/content?id=rypRAQAAIAAJ&printsec=frontcover&img=1&zoom=1&source=gbs_api", + "status": "available", + "category": "Geology", + "pricePerWeek": 1743, + "link": "http://books.google.co.id/books?id=rypRAQAAIAAJ&q=bio&dq=bio&hl=&as_pt=BOOKS&cd=4&source=gbs_api" + }, + { + "title": "Mohammad Amien Rais", + "isbn": "UOM:39015061569961", + "author": "Zaim Uchrowi", + "synopsis": "Biography of Mohammad Amien Rais, an Indonesian Muslim political leader.", + "pageCount": 400, + "stock": 3, + "publishedDate": "2004", + "lang": "id", + "imgUrl": "http://books.google.com/books/content?id=U_1wAAAAMAAJ&printsec=frontcover&img=1&zoom=1&source=gbs_api", + "status": "available", + "category": "Indonesia", + "pricePerWeek": 3010, + "link": "http://books.google.co.id/books?id=U_1wAAAAMAAJ&q=bio&dq=bio&hl=&as_pt=BOOKS&cd=5&source=gbs_api" + }, + { + "title": "Gian Carlo Menotti", + "isbn": "9780313095948", + "author": "Donald L. Hixon", + "synopsis": "Gian Carlo Menotti is a composer known chiefly for his popular operas, including Amahl and the Night Visitors, The Medium, and The Consul. He also wrote a considerable amount of choral, instrumental and chamber music. This addition to the Greenwood Press series Bio-Bibliographies in Music serves as a reference guide to Menotti's career. A brief biographical sketch precedes a chronologically arranged bibliography of general writings by and about Menotti followed by a detailed list of works, alphabetically arranged. A bibliography of writings about specific compositions, complete with selected contemporary critical reviews, includes data on premiers and other significant performances and discographies of recordings. Opera music scholars, along with Menotti fans, will appreciate this detailed guide to available research materials. Intended as a scholarly resource, this volume also includes two appendices, a chronological list of works and a genre list of works. An author index and a separate performer index are provided.", + "pageCount": 356, + "stock": 3, + "publisher": "Bloomsbury Publishing USA", + "publishedDate": "2000-02-28", + "lang": "en", + "imgUrl": "http://books.google.com/books/content?id=iknEEAAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "status": "available", + "category": "Music", + "pricePerWeek": 3008, + "link": "http://books.google.co.id/books?id=iknEEAAAQBAJ&printsec=frontcover&dq=bio&hl=&as_pt=BOOKS&cd=6&source=gbs_api" + }, + { + "title": "Linux Device Drivers", + "isbn": "9780596005900", + "author": "Jonathan Corbet, Alessandro Rubini, Greg Kroah-Hartman", + "synopsis": "Provides information on writing a driver in Linux, covering such topics as character devices, network interfaces, driver debugging, concurrency, and interrupts.", + "pageCount": 636, + "stock": 2, + "publisher": "\"O'Reilly Media, Inc.\"", + "publishedDate": "2005-02-07", + "lang": "en", + "imgUrl": "http://books.google.com/books/content?id=MTibAgAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "status": "available", + "category": "Computers", + "pricePerWeek": 859, + "link": "http://books.google.co.id/books?id=MTibAgAAQBAJ&pg=PT512&dq=bio&hl=&as_pt=BOOKS&cd=7&source=gbs_api" + }, + { + "title": "Allgemeines Künstlerlexikon Bio-bibliographischer Index A-Z", + "isbn": "UCSC:32106020097306", + "author": "-", + "pageCount": 904, + "stock": 2, + "publishedDate": "1999", + "lang": "en", + "imgUrl": "http://books.google.com/books/content?id=U8kiAQAAIAAJ&printsec=frontcover&img=1&zoom=1&source=gbs_api", + "status": "available", + "category": "Allgemeines Künstlerlexikon", + "pricePerWeek": 893, + "link": "http://books.google.co.id/books?id=U8kiAQAAIAAJ&dq=bio&hl=&as_pt=BOOKS&cd=8&source=gbs_api" + }, + { + "title": "Bioethanol Production from Food Crops", + "isbn": "9780128137673", + "author": "Ramesh C. Ray, S Ramachandran", + "synopsis": "Bioethanol Production from Food Crops: Sustainable Sources, Interventions and Challenges comprehensively covers the global scenario of ethanol production from both food and non-food crops and other sources. The book guides readers through the balancing of the debate on food vs. fuel, giving important insights into resource management and the environmental and economic impact of this balance between demands. Sections cover Global Bioethanol from Food Crops and Forest Resource, Bioethanol from Bagasse and Lignocellulosic wastes, Bioethanol from algae, and Economics and Challenges, presenting a multidisciplinary approach to this complex topic. As biofuels continue to grow as a vital alternative energy source, it is imperative that the proper balance is reached between resource protection and human survival. This book provides important insights into achieving that balance. Presents technological interventions in ethanol production, from plant biomass, to food crops Addresses food security issues arising from bioethanol production Identifies development bottlenecks and areas where collaborative efforts can help develop more cost-effective technology", + "pageCount": 460, + "stock": 5, + "publisher": "Academic Press", + "publishedDate": "2018-08-20", + "lang": "en", + "imgUrl": "http://books.google.com/books/content?id=sm9qDwAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "status": "available", + "category": "Technology & Engineering", + "pricePerWeek": 2527, + "link": "http://books.google.co.id/books?id=sm9qDwAAQBAJ&pg=PA408&dq=bio&hl=&as_pt=BOOKS&cd=9&source=gbs_api" + }, + { + "title": "Proceedings of the 15th International Symposium on Bioluminescence and Chemiluminescence", + "isbn": "9789812839572", + "author": "Xun Shen, Xiao-Lin Yang, Xin-Rong Zhang", + "synopsis": "In the last decade, great advances have been made in fundamental research and in the applications of bioluminescence and chemiluminescence. These techniques have become vital tools for laboratory analysis. Bioluminescence imaging has emerged as a powerful new optical imaging technique, offering real-time monitoring of spatial and temporal progression of biological processes in living animals. Bioluminescence resonance energy transfer (BRET) methodology has also emerged as a powerful technique for the study of proteinprotein interactions. Luciferase reporter gene technology facilitates monitoring of gene expression and is used to probe molecular mechanisms in the regulation of gene expression. Chemiluminescence detection and analysis have also found diverse applications in life science research; for example, chemiluminescent labels and substrates are now widely used in immunoassay and nucleic acid probe-based assays. The latest advances in this exciting field, from fundamental research to cutting-edge applications, are explored in this most recent volume of the biannual symposium series, the Proceedings of the 15th International Symposium on Bioluminescence and Chemiluminescence. The volume highlights advances in fundamental knowledge of luciferase-based bioluminescence, photoprotein-based bioluminescence, fundamental aspects and applications of chemiluminescence, luminescence imaging, fluorescence quantum dots and other inorganic fluorescent materials, phosphorescence and ultraweak luminescence, and instrumentation for measurement and imaging of luminescence.", + "pageCount": 504, + "stock": 5, + "publisher": "World Scientific", + "publishedDate": "2008", + "lang": "en", + "imgUrl": "http://books.google.com/books/content?id=47tpDQAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "status": "available", + "category": "Science", + "pricePerWeek": 3618, + "link": "http://books.google.co.id/books?id=47tpDQAAQBAJ&pg=PA415&dq=bio&hl=&as_pt=BOOKS&cd=10&source=gbs_api" + }, + { + "title": "Decision-Making for Biomass-Based Production Chains", + "isbn": "9780128142790", + "author": "Sebnem Yilmaz Balaman", + "synopsis": "Decision-Making for Biomass-Based Production Chains: The Basic Concepts and Medothologies presents a comprehensive study of key-issues surrounding the integration of strategic, tactical and operational decision levels for supply chains in the biomass, biofuels and biorefining sectors. Comprehensive sections cover biomass resources, harvesting, collection, storage and distribution systems, along with the necessary technical and technological background of production systems. In addition, the basics of decision-making, problems and decision levels encountered in design, management and operation phases are covered. Case studies are supplied in each chapter, along with a discussion and comparative analysis of topics. The book presents a clear vision of advances in the field. Graduate students and those starting in this line of research will also find the necessary information on how to model this kind of complex system. Finally, this comprehensive resource can be used as a guide for non-expert industry decision-makers and government policymakers who need a thorough overview on the industry. Examines analytic methodologies for complex decision-making when designing, deploying and managing biomass and bio-based products supply chains Includes real-life examples of main sustainability indicators, standards and certification schemes from the European Union, United States and worldwide Explores the progress of decision-making procedures to provide a detailed perspective for effective selection of the most reliable solutions for each kind of problem Provides detailed, in-depth analyses of various models and frameworks for their implementation, challenges and solutions Presents multi-criteria and multi-objective decision-making and modeling approaches, including mathematical modeling, simulation-based modeling, and artificial intelligence-based modeling", + "pageCount": 258, + "stock": 5, + "publisher": "Academic Press", + "publishedDate": "2018-10-02", + "lang": "en", + "imgUrl": "http://books.google.com/books/content?id=NxlxDwAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "status": "available", + "category": "Science", + "pricePerWeek": 785, + "link": "http://books.google.co.id/books?id=NxlxDwAAQBAJ&pg=PA67&dq=bio&hl=&as_pt=BOOKS&cd=11&source=gbs_api" + }, + { + "title": "Healing across Boundaries", + "isbn": "9781317324737", + "author": "Makarand R. Paranjape", + "synopsis": "This unique volume initiates a dialogue between bio-medicine and alternative therapeutics. Undertaking a multidisciplinary exploration of the science and spirituality of healing and wellness, it offers varied perspectives from doctors, medical researchers, Ayurvedic practitioners, philosophers, psychologists, sociologists, and cultural critics. It expands the horizons of health sciences in engaging with diverse traditions — bio-medicine, Ayurveda, Siddha, and Jaina bio-ethics. The book will interest scholars and researchers in social and community medicine, biological sciences, sociology and social anthropology, as well as cultural studies.", + "pageCount": 268, + "stock": 4, + "publisher": "Routledge", + "publishedDate": "2015-08-12", + "lang": "en", + "imgUrl": "http://books.google.com/books/content?id=zcBcCgAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "status": "available", + "category": "Medical", + "pricePerWeek": 1266, + "link": "http://books.google.co.id/books?id=zcBcCgAAQBAJ&printsec=frontcover&dq=bio&hl=&as_pt=BOOKS&cd=12&source=gbs_api" + }, + { + "title": "Microbial Sensing in Fermentation", + "isbn": "9781119247982", + "author": "Satinder K. Brar, Ratul K. Das, Saurabh J. Sarma", + "synopsis": "A comprehensive review of the fundamental molecular mechanisms in fermentation and explores the microbiology of fermentation technology and industrial applications Microbial Sensing in Fermentation presents the fundamental molecular mechanisms involved in the process of fermentation and explores the applied art of microbiology and fermentation technology. The text contains descriptions regarding the extraordinary sensing ability of microorganisms towards small physicochemical changes in their surroundings. The contributors — noted experts in the field — cover a wide range of topics such as microbial metabolism and production (fungi, bacteria, yeast etc); refined and non-refined carbon sources; bioprocessing; microbial synthesis, responses and performance; and biochemical, molecular and extra/intracellular controlling. This resource contains a compilation of literature on biochemical and cellular level mechanisms for microbial controlled production and includes the most significant recent advances in industrial fermentation. The text offers a balanced approach between theory and practical application, and helps readers gain a clear understanding of microbial physiological adaptation during fermentation and its cumulative effect on productivity. This important book: Presents the fundamental molecular mechanisms involved in microbial sensing in relation to fermentation technology Includes information on the significant recent advances in industrial fermentation Contains contributions from a panel of highly-respected experts in their respective fields Offers a resource that will be essential reading for scientists, professionals and researchers from academia and industry with an interest in the biochemistry and microbiology of fermentation technology Written for researchers, graduate and undergraduate students from diverse backgrounds, such as biochemistry and applied microbiology, Microbial Sensing in Fermentation offers a review of the fundamental molecular mechanisms involved in the process of fermentation.", + "pageCount": 344, + "stock": 3, + "publisher": "John Wiley & Sons", + "publishedDate": "2018-10-08", + "lang": "en", + "imgUrl": "http://books.google.com/books/content?id=v3JyDwAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "status": "available", + "category": "Science", + "pricePerWeek": 1805, + "link": "http://books.google.co.id/books?id=v3JyDwAAQBAJ&pg=PA307&dq=bio&hl=&as_pt=BOOKS&cd=13&source=gbs_api" + }, + { + "title": "Apache Spark Graph Processing", + "isbn": "9781784398958", + "author": "Rindra Ramamonjison", + "synopsis": "Build, process and analyze large-scale graph data effectively with Spark About This Book Find solutions for every stage of data processing from loading and transforming graph data to Improve the scalability of your graphs with a variety of real-world applications with complete Scala code. A concise guide to processing large-scale networks with Apache Spark. Who This Book Is For This book is for data scientists and big data developers who want to learn the processing and analyzing graph datasets at scale. Basic programming experience with Scala is assumed. Basic knowledge of Spark is assumed. What You Will Learn Write, build and deploy Spark applications with the Scala Build Tool. Build and analyze large-scale network datasets Analyze and transform graphs using RDD and graph-specific operations Implement new custom graph operations tailored to specific needs. Develop iterative and efficient graph algorithms using message aggregation and Pregel abstraction Extract subgraphs and use it to discover common clusters Analyze graph data and solve various data science problems using real-world datasets. In Detail Apache Spark is the next standard of open-source cluster-computing engine for processing big data. Many practical computing problems concern large graphs, like the Web graph and various social networks. The scale of these graphs - in some cases billions of vertices, trillions of edges - poses challenges to their efficient processing. Apache Spark GraphX API combines the advantages of both data-parallel and graph-parallel systems by efficiently expressing graph computation within the Spark data-parallel framework. This book will teach the user to do graphical programming in Apache Spark, apart from an explanation of the entire process of graphical data analysis. You will journey through the creation of graphs, its uses, its exploration and analysis and finally will also cover the conversion of graph elements into graph structures. This book begins with an introduction of the Spark system, its libraries and the Scala Build Tool. Using a hands-on approach, this book will quickly teach you how to install and leverage Spark interactively on the command line and in a standalone Scala program. Then, it presents all the methods for building Spark graphs using illustrative network datasets. Next, it will walk you through the process of exploring, visualizing and analyzing different network characteristics. This book will also teach you how to transform raw datasets into a usable form. In addition, you will learn powerful operations that can be used to transform graph elements and graph structures. Furthermore, this book also teaches how to create custom graph operations that are tailored for specific needs with efficiency in mind. The later chapters of this book cover more advanced topics such as clustering graphs, implementing graph-parallel iterative algorithms and learning methods from graph data. Style and approach A step-by-step guide that will walk you through the key ideas and techniques for processing big graph data at scale, with practical examples that will ensure an overall understanding of the concepts of Spark.", + "pageCount": 148, + "stock": 2, + "publisher": "Packt Publishing Ltd", + "publishedDate": "2015-09-10", + "lang": "en", + "imgUrl": "http://books.google.com/books/content?id=cgSKCgAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "status": "available", + "category": "Computers", + "pricePerWeek": 3913, + "link": "http://books.google.co.id/books?id=cgSKCgAAQBAJ&pg=PA66&dq=bio&hl=&as_pt=BOOKS&cd=14&source=gbs_api" + }, + { + "title": "p-Adic Valued Distributions in Mathematical Physics", + "isbn": "9789401583565", + "author": "Andrei Y. Khrennikov", + "synopsis": "Numbers ... , natural, rational, real, complex, p-adic .... What do you know about p-adic numbers? Probably, you have never used any p-adic (nonrational) number before now. I was in the same situation few years ago. p-adic numbers were considered as an exotic part of pure mathematics without any application. I have also used only real and complex numbers in my investigations in functional analysis and its applications to the quantum field theory and I was sure that these number fields can be a basis of every physical model generated by nature. But recently new models of the quantum physics were proposed on the basis of p-adic numbers field Qp. What are p-adic numbers, p-adic analysis, p-adic physics, p-adic probability? p-adic numbers were introduced by K. Hensel (1904) in connection with problems of the pure theory of numbers. The construction of Qp is very similar to the construction of (p is a fixed prime number, p = 2,3,5, ... ,127, ... ). Both these number fields are completions of the field of rational numbers Q. But another valuation 1 . Ip is introduced on Q instead of the usual real valuation 1 . I· We get an infinite sequence of non isomorphic completions of Q : Q2, Q3, ... , Q127, ... , IR = Qoo· These fields are the only possibilities to com plete Q according to the famous theorem of Ostrowsky.", + "pageCount": 264, + "stock": 1, + "publisher": "Springer Science & Business Media", + "publishedDate": "2013-03-09", + "lang": "en", + "imgUrl": "http://books.google.com/books/content?id=JxYaCQAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "status": "available", + "category": "Science", + "pricePerWeek": 855, + "link": "http://books.google.co.id/books?id=JxYaCQAAQBAJ&pg=PA167&dq=bio&hl=&as_pt=BOOKS&cd=15&source=gbs_api" + }, + { + "title": "Menteri Pertanian: Bicara Flu Burung (Bungaran Saragih, Anton Apriyantono)", + "isbn": "9786233440561", + "author": "Pusat Data Dan Analisa Tempo", + "synopsis": "Menteri Pertanian: Bicara Flu Burung (Bungaran Saragih, Anton Apriyantono)", + "stock": 2, + "publisher": "Tempo Publishing", + "lang": "id", + "imgUrl": "http://books.google.com/books/content?id=_EZSEAAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "status": "available", + "category": "-", + "pricePerWeek": 2065, + "link": "http://books.google.co.id/books?id=_EZSEAAAQBAJ&printsec=frontcover&dq=bio&hl=&as_pt=BOOKS&cd=16&source=gbs_api" + }, + { + "title": "Billy the Kid, a Bio-bibliography", + "isbn": "UOM:39015011373282", + "author": "Jon Tuska", + "pageCount": 264, + "stock": 2, + "publisher": "Greenwood", + "publishedDate": "1983", + "lang": "en", + "imgUrl": "http://books.google.com/books/content?id=6op5AAAAMAAJ&printsec=frontcover&img=1&zoom=1&source=gbs_api", + "status": "available", + "category": "COLLECTIVE BIOGRAPHY", + "pricePerWeek": 3612, + "link": "http://books.google.co.id/books?id=6op5AAAAMAAJ&dq=bio&hl=&as_pt=BOOKS&cd=17&source=gbs_api" + }, + { + "title": "Mechanics of Bio-Sediment Transport", + "isbn": "9783662611586", + "author": "Hongwei Fang, Lei Huang, Huiming Zhao, Wei Cheng, Yishan Chen, Mehdi Fazeli, Qianqian Shang", + "synopsis": "The main focus of this book is the transport mechanics of sediment particles coated with microbial biofilm, which is called bio-sediment. The book also addresses the question of how to measure and simulate the considerable variation in the properties of natural sediment associated with microbial biofilm, ranging from the micro-scale surface morphology to the macro-scale sediment transport. Nowadays most studies to elucidate the mechanisms of sediment transport have concentrated on physical-chemical sediment properties, little work explicitly coupled sediment dynamics and the environmental effects under the influence of micro-ecosystem, thus leaving a serious gap in water and sediment sciences as well as water ecological research. With respect to physical-chemical sediment properties, this book has been undertaken to evaluate and quantify the effect of biological factors - biofilm on sediment transport mechanics. The chapters cover topics including development of bio-sediment and its properties; model of biofilm growth on sediment substratum; bedform and flow resistance of bio-sediment bed; incipient velocity and settling velocity of bio-sediment; bedload and suspended load transport for bio-sediment; numerical simulation of bio-sediment transport. Besides, the measurement technology, analysis method and expression approach introduced in this book combine the characteristics of hydraulic, environmental and microbial research, having more immediate innovation. This book will be of interest to researchers, managers, practitioners, policy and decision makers, international institutions, governmental and non-governmental organizations, educators, as well as graduate and undergraduate students in the field of hydraulics and river dynamics. It will help to understand the relevance of sediment transport and biofilm growth under the role of aqueous micro-ecosystem, to introduce better tools for the simulation and prediction of bio-sediment transport, and to provide a scientific basis and application foundation for the research of interaction between sediment particles and ecological and environmental factors.", + "pageCount": 412, + "stock": 2, + "publisher": "Springer Nature", + "publishedDate": "2020-04-07", + "lang": "en", + "imgUrl": "http://books.google.com/books/content?id=597bDwAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "status": "available", + "category": "Technology & Engineering", + "pricePerWeek": 1995, + "link": "http://books.google.co.id/books?id=597bDwAAQBAJ&printsec=frontcover&dq=bio&hl=&as_pt=BOOKS&cd=18&source=gbs_api" + }, + { + "title": "Blue Book of the State of Illinois", + "isbn": "SRLF:AA0008066094", + "author": "-", + "pageCount": 596, + "stock": 1, + "publishedDate": "1989", + "lang": "en", + "imgUrl": "http://books.google.com/books/content?id=GLxWTomlm1oC&printsec=frontcover&img=1&zoom=1&source=gbs_api", + "status": "available", + "category": "Illinois", + "pricePerWeek": 507, + "link": "http://books.google.co.id/books?id=GLxWTomlm1oC&q=bio&dq=bio&hl=&as_pt=BOOKS&cd=19&source=gbs_api" + }, + { + "title": "Quantum Bio-Informatics II", + "isbn": "9789814273756", + "author": "L. Accardi", + "synopsis": "The purpose of this proceedings volume is to look for interdisciplinary bridges in mathematics, physics, information and life sciences, in particular, research for new paradigms for information and life sciences on the basis of quantum theory. The main areas in this volume are all related to one of the following subjects: (1) mathematical foundation of quantum mechanics, (2) quantum information, (3) quantum algorithm and computation, (4) quantum communication, (5) white noise analysis and quantum dynamics, (6) chaos dynamics and adaptive dynamics, (7) experimental studies of quantum computer, (8) bio-informatics and (9) genome analysis.", + "pageCount": 357, + "stock": 1, + "publisher": "World Scientific", + "publishedDate": "2009-02-12", + "lang": "en", + "imgUrl": "http://books.google.com/books/content?id=3GxkDQAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "status": "available", + "category": "Computers", + "pricePerWeek": 1112, + "link": "http://books.google.co.id/books?id=3GxkDQAAQBAJ&printsec=frontcover&dq=bio&hl=&as_pt=BOOKS&cd=20&source=gbs_api" + }, + { + "title": "Guide to Microforms in Print", + "isbn": "CORNELL:31924069121717", + "author": "-", + "pageCount": 164, + "stock": 1, + "publishedDate": "1995", + "lang": "en", + "imgUrl": "http://books.google.com/books/content?id=01laAAAAYAAJ&printsec=frontcover&img=1&zoom=1&source=gbs_api", + "status": "available", + "category": "Microforms", + "pricePerWeek": 4208, + "link": "http://books.google.co.id/books?id=01laAAAAYAAJ&q=bio&dq=bio&hl=&as_pt=BOOKS&cd=21&source=gbs_api" + }, + { + "title": "Energy Technology 2019", + "isbn": "9783030062095", + "author": "Tao Wang, Xiaobo Chen, Donna Post Guillen, Lei Zhang, Ziqi Sun, Cong Wang, Nawshad Haque, John A. Howarter, Neale R Neelameggham, Shadia Ikhmayies, York R. Smith, L Tafaghodi, Amit Pandey", + "synopsis": "This collection addresses the need for sustainable technologies with reduced energy consumption and pollutants and the development and application of alternative sustainable energy to maintain a green environment and energy supply. Contributions focus on energy-efficient technologies including innovative ore beneficiation, smelting technologies, and recycling and waste heat recovery, as well as emerging novel energy technologies. Papers also cover various technological aspects of sustainable energy ecosystems, processes that improve energy efficiency, reduce thermal emissions, and reduce carbon dioxide and other greenhouse emissions. Papers from the following symposia are presented in the book: Energy Technologies and Carbon Dioxide Management Solar Cell Silicon Advanced Materials for Energy Conversion and Storage", + "pageCount": 308, + "stock": 4, + "publisher": "Springer", + "publishedDate": "2019-02-09", + "lang": "en", + "imgUrl": "http://books.google.com/books/content?id=IUmHDwAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "status": "available", + "category": "Technology & Engineering", + "pricePerWeek": 2493, + "link": "http://books.google.co.id/books?id=IUmHDwAAQBAJ&pg=PA14&dq=bio&hl=&as_pt=BOOKS&cd=22&source=gbs_api" + }, + { + "title": "How to Write a Professional Bio: For Authors, Speakers, and Entrepreneurs", + "isbn": "0988888297", + "author": "Jeniffer Thompson", + "synopsis": "In \"How To Write A Professional BIO,\" personal branding expert, Jeniffer Thompson, walks you through ten easy steps with her proven Bio-Writing Formula, shares before and after examples, and provides worksheets to gently guide you through the process.", + "pageCount": 112, + "stock": 4, + "publisher": "MCM Publishing", + "publishedDate": "2019-11-12", + "lang": "en", + "imgUrl": "http://books.google.com/books/content?id=ZAVAzQEACAAJ&printsec=frontcover&img=1&zoom=1&source=gbs_api", + "status": "available", + "category": "Business & Economics", + "pricePerWeek": 4195, + "link": "http://books.google.co.id/books?id=ZAVAzQEACAAJ&dq=bio&hl=&as_pt=BOOKS&cd=23&source=gbs_api" + }, + { + "title": "IBN", + "isbn": "OSU:32435068395961", + "author": "-", + "pageCount": 770, + "stock": 3, + "publishedDate": "2002", + "lang": "un", + "imgUrl": "http://books.google.com/books/content?id=Zb5rhbm7qUsC&printsec=frontcover&img=1&zoom=1&source=gbs_api", + "status": "available", + "category": "Biography", + "pricePerWeek": 3151, + "link": "http://books.google.co.id/books?id=Zb5rhbm7qUsC&dq=bio&hl=&as_pt=BOOKS&cd=24&source=gbs_api" + }, + { + "title": "Natural Fiber-Reinforced Biodegradable and Bioresorbable Polymer Composites", + "isbn": "9780081006696", + "author": "Alan Kin-tak Lau, Ada Pui Yan Hung", + "synopsis": "Natural Fiber-Reinforced Biodegradable and Bioresorbable Polymer Composites focuses on key areas of fundamental research and applications of biocomposites. Several key elements that affect the usage of these composites in real-life applications are discussed. There will be a comprehensive review on the different kinds of biocomposites at the beginning of the book, then the different types of natural fibers, bio-polymers, and green nanoparticle biocomposites are discussed as well as their potential for future development and use in engineering biomedical and domestic products. Recently mankind has realized that unless the environment is protected, he himself will be threatened by the over consumption of natural resources as well as a substantial reduction in the amount of fresh air produced in the world. Conservation of forests and the optimal utilization of agricultural and other renewable resources like solar, wind, and tidal energy, have become important topics worldwide. With such concern, the use of renewable resources—such as plant and animal-based, fiber-reinforced polymeric composites—are now becoming an important design criterion for designing and manufacturing components for a broad range of different industrial products. Research on biodegradable polymeric composites can contribute, to some extent, to a much greener and safer environment. For example, in the biomedical and bioengineering fields, the use of natural fiber mixed with biodegradable and bioresorbable polymers can produce joint and bone fixtures to alleviate pain in patients. Includes comprehensive information about the sources, properties, and biodegradability of natural fibers Discusses failure mechanisms and modeling of natural fibers composites Analyzes the effectiveness of using natural materials for enhancing mechanical, thermal, and biodegradable properties", + "pageCount": 208, + "stock": 2, + "publisher": "Woodhead Publishing", + "publishedDate": "2017-02-28", + "lang": "en", + "imgUrl": "http://books.google.com/books/content?id=YABQCwAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "status": "available", + "category": "Technology & Engineering", + "pricePerWeek": 2977, + "link": "http://books.google.co.id/books?id=YABQCwAAQBAJ&pg=PA46&dq=bio&hl=&as_pt=BOOKS&cd=25&source=gbs_api" + }, + { + "title": "Spectroscopy of Solid-State Laser-Type Materials", + "isbn": "9781461308997", + "author": "Baldassare Di Bartolo, Guzin Armagan", + "synopsis": "This book presents an account of the course \"Spectroscopy of Solid-State Laser-Type Materials\" held in Erice, Italy, from June 16 to 30, 1985. This meeting was organized by the International School of Atomic and Molecular Spectroscopy of the \"Ettore Majorana\" Centre for Scientific Culture. The objective of the course was to present and examine the recent advances in spectroscopy and theoretical modelling relevant to the interpretation of luminescence and laser phenomena in several classes of solid-state materials. The available solid-state matrices (e.g. halides, oxides, glasses, semiconductors) and the full range of possible activators (transition ions, rare earth ions, post-transition ions, actinides, color centres) were considered. By bringing together specialists in the fields of solid-state luminescence and of solid-state laser materials, this course provided a much-needed forum for the critical . assessment of past developments in the R&D of solid-state lasers. Additional objectives of the meeting were to identify new classes of host/activator systems that show promise of laser operation; to alert researchers in solid-state luminescence to current technological needs for solid-state tunable lasers operating in the visible and infrared spectral regions; and generally to provide the scientific background for advanced work in solid state lasers. A total of 71 participants came from 54 laboratories and 21 nations (Austria, Belgium, Canada, F.R. of Germany, France, Greece, Ireland, Israel, Italy, the Netherlands, P.R. of China, Poland, Rumania, Sweden, Switzerland, South Korea, Spain, Turkey, United Kingdom, U.S.A. and U.S.S.R.).", + "pageCount": 592, + "stock": 1, + "publisher": "Springer Science & Business Media", + "publishedDate": "2012-12-06", + "lang": "en", + "imgUrl": "http://books.google.com/books/content?id=-jf2BwAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "status": "available", + "category": "Science", + "pricePerWeek": 3949, + "link": "http://books.google.co.id/books?id=-jf2BwAAQBAJ&pg=PA245&dq=bio&hl=&as_pt=BOOKS&cd=26&source=gbs_api" + }, + { + "title": "The Bookseller and the Stationery Trades' Journal", + "isbn": "PRNC:32101065564401", + "author": "-", + "pageCount": 1644, + "stock": 3, + "publishedDate": "1923", + "lang": "en", + "imgUrl": "http://books.google.com/books/content?id=vWhVAAAAYAAJ&printsec=frontcover&img=1&zoom=1&source=gbs_api", + "status": "available", + "category": "Bibliography", + "pricePerWeek": 56, + "link": "http://books.google.co.id/books?id=vWhVAAAAYAAJ&q=bio&dq=bio&hl=&as_pt=BOOKS&cd=27&source=gbs_api" + }, + { + "title": "Advanced Materials", + "isbn": "9783319789194", + "author": "Ivan A. Parinov, Shun-Hsyung Chang, Vijay K. Gupta", + "synopsis": "This book presents selected peer-reviewed contributions from the 2017 International Conference on “Physics and Mechanics of New Materials and Their Applications”, PHENMA 2017 (Jabalpur, India, 14–16 October, 2017), which is devoted to processing techniques, physics, mechanics, and applications of advanced materials. The book focuses on a wide spectrum of nanostructures, ferroelectric crystals, materials and composites as well as promising materials with special properties. It presents nanotechnology approaches, modern environmentally friendly piezoelectric and ferromagnetic techniques and physical and mechanical studies of the structural and physical–mechanical properties of materials. Various original mathematical and numerical methods are applied to the solution of different technological, mechanical and physical problems that are interesting from theoretical, modeling and experimental points of view. Further, the book highlights novel devices with high accuracy, longevity and extended capabilities to operate under wide temperature and pressure ranges and aggressive media, which show improved characteristics, thanks to the developed materials and composites, opening new possibilities for different physico-mechanical processes and phenomena.", + "pageCount": 640, + "stock": 4, + "publisher": "Springer", + "publishedDate": "2018-05-12", + "lang": "en", + "imgUrl": "http://books.google.com/books/content?id=LZZaDwAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "status": "available", + "category": "Technology & Engineering", + "pricePerWeek": 905, + "link": "http://books.google.co.id/books?id=LZZaDwAAQBAJ&pg=PA624&dq=bio&hl=&as_pt=BOOKS&cd=28&source=gbs_api" + }, + { + "title": "The World of Organic Agriculture", + "isbn": "9781136535239", + "author": "Minou Yussefi-Menzler", + "synopsis": "The new edition of this annual publication (previously published solely by IFOAM and FiBL) documents recent developments in global organic agriculture. It includes contributions from representatives of the organic sector from throughout the world and provides comprehensive organic farming statistics that cover surface area under organic management, numbers of farms and specific information about commodities and land use in organic systems. The book also contains information on the global market of the burgeoning organic sector, the latest developments in organic certification, standards and regulations, and insights into current status and emerging trends for organic agriculture by continent from the worlds foremost experts. For this edition, all statistical data and regional review chapters have been thoroughly updated. Completely new chapters on organic agriculture in the Pacific, on the International Task Force on Harmonization and Equivalence in Organic Agriculture and on organic aquaculture have been added. Published with IFOAM and FiBL", + "pageCount": 268, + "stock": 1, + "publisher": "Routledge", + "publishedDate": "2010-09-23", + "lang": "en", + "imgUrl": "http://books.google.com/books/content?id=laUeBAAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "status": "available", + "category": "Social Science", + "pricePerWeek": 1092, + "link": "http://books.google.co.id/books?id=laUeBAAAQBAJ&pg=PA137&dq=bio&hl=&as_pt=BOOKS&cd=29&source=gbs_api" + }, + { + "title": "Puteri Harum dan kaisar", + "isbn": "UOM:39015062769032", + "author": "Hua Wen", + "pageCount": 142, + "stock": 2, + "publishedDate": "1961", + "lang": "id", + "imgUrl": "http://books.google.com/books/content?id=N6PhdL0GmBcC&printsec=frontcover&img=1&zoom=1&source=gbs_api", + "status": "available", + "category": "-", + "pricePerWeek": 4809, + "link": "http://books.google.co.id/books?id=N6PhdL0GmBcC&pg=RA6-PA43-IA2&dq=bio&hl=&as_pt=BOOKS&cd=30&source=gbs_api" + }, + { + "title": "Bio-Japan", + "isbn": "WISC:89031126410", + "author": "John Elkington", + "pageCount": 124, + "stock": 5, + "publishedDate": "1985", + "lang": "en", + "imgUrl": "http://books.google.com/books/content?id=dbjxAAAAMAAJ&printsec=frontcover&img=1&zoom=1&source=gbs_api", + "status": "available", + "category": "Biotechnology", + "pricePerWeek": 4449, + "link": "http://books.google.co.id/books?id=dbjxAAAAMAAJ&q=bio&dq=bio&hl=&as_pt=BOOKS&cd=31&source=gbs_api" + }, + { + "title": "Dictionary of Early American Philosophers", + "isbn": "9781441171405", + "author": "John R. Shook", + "synopsis": "The Dictionary of Early American Philosophers, which contains over 400 entries by nearly 300 authors, provides an account of philosophical thought in the United States and Canada between 1600 and 1860. The label of \"philosopher\" has been broadly applied in this Dictionary to intellectuals who have made philosophical contributions regardless of academic career or professional title. Most figures were not academic philosophers, as few such positions existed then, but they did work on philosophical issues and explored philosophical questions involved in such fields as pedagogy, rhetoric, the arts, history, politics, economics, sociology, psychology, medicine, anthropology, religion, metaphysics, and the natural sciences. Each entry begins with biographical and career information, and continues with a discussion of the subject's writings, teaching, and thought. A cross-referencing system refers the reader to other entries. The concluding bibliography lists significant publications by the subject, posthumous editions and collected works, and further reading about the subject.", + "pageCount": 1288, + "stock": 3, + "publisher": "Bloomsbury Publishing USA", + "publishedDate": "2012-04-05", + "lang": "en", + "imgUrl": "http://books.google.com/books/content?id=oOqoAwAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "status": "available", + "category": "Philosophy", + "pricePerWeek": 2101, + "link": "http://books.google.co.id/books?id=oOqoAwAAQBAJ&pg=PR33&dq=bio&hl=&as_pt=BOOKS&cd=32&source=gbs_api" + }, + { + "title": "Seri TEMPO: Amir Hamzah", + "isbn": "9786024247010", + "author": "TEMPO", + "synopsis": "Dia konsisten mengamalkan amanat Kongres Pemuda II Oktober 1928 yang menahbiskan bahasa Melayu sebagai bahasa persatuan. Ketika Belanda berusaha mengubur bahasa Melayu sebagai bahasa persatuan, dia tetap berjuang mempopulerkan bahasa itu di masyarakat. Bermacam puisi, prosa, dan sajak lantas dia anggit dalam bahasa Indonesia. Dialah Amir Hamzah, raja penyair Pujangga Baru. Sajak-sajak Amir Hamzah, yang antara lain terhimpun dalam Nyanyi Sunyi dan Buah Rindu, menorehkan gaya baru pada bahasa Indonesia. Kata-kata dalam sajaknya berkesan kemas, ganas, tajam, dan pendek. Berbahasa tinggi sekaligus berjiwa halus. Meski turut memperjuangkan kebebasan negeri ini dari kolonialisme, dia dituduh pernah menjadi intel Belanda. Dia pun terjepit di antara silsilah keturunan bangsawan dan gelombang keberpihakan kepada Indonesia. Ketika Republik belum genap berusia setahun, Amir Hamzah menjadi tumbal dalam Revolusi Langkat di Sumatera Timur pada 1946. Hidup penyair bergelar pahlawan nasional ini berakhir di tangan pemuda dari kalangan sosialis. Kisah tentang Amir Hamzah adalah jilid pertama seri “Tokoh Seni dalam Pusaran Politik” yang diangkat dari liputan khusus Majalah Berita Mingguan Tempo, Agustus 2017. Serial ini menyajikan seuntaian jejak kesenimanan tokoh-tokoh yang hidup di tengah situasi politik yang kaos. Hidup dan karya mereka merespons secara aktif dinamika politik yang melingkunginya.", + "pageCount": 128, + "stock": 3, + "publisher": "Kepustakaan Populer Gramedia", + "publishedDate": "2021-12-10", + "lang": "id", + "imgUrl": "http://books.google.com/books/content?id=7W1UEAAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "status": "available", + "category": "Biography & Autobiography", + "pricePerWeek": 2270, + "link": "http://books.google.co.id/books?id=7W1UEAAAQBAJ&printsec=frontcover&dq=bio&hl=&as_pt=BOOKS&cd=33&source=gbs_api" + }, + { + "title": "Proceedings of the MRS International Meeting on Advanced Materials: Superconductivity", + "isbn": "PSU:000023056619", + "author": "Masao Dōyama", + "pageCount": 1072, + "stock": 3, + "publishedDate": "1989", + "lang": "en", + "imgUrl": "http://books.google.com/books/content?id=OyRZAAAAYAAJ&printsec=frontcover&img=1&zoom=1&source=gbs_api", + "status": "available", + "category": "Materials", + "pricePerWeek": 4897, + "link": "http://books.google.co.id/books?id=OyRZAAAAYAAJ&q=bio&dq=bio&hl=&as_pt=BOOKS&cd=34&source=gbs_api" + }, + { + "title": "Mathematical Methods in Chemical and Biological Engineering", + "isbn": "9781482210392", + "author": "Binay Kanti Dutta", + "synopsis": "Mathematical Methods in Chemical and Biological Engineering describes basic to moderately advanced mathematical techniques useful for shaping the model-based analysis of chemical and biological engineering systems. Covering an ideal balance of basic mathematical principles and applications to physico-chemical problems, this book presents examples drawn from recent scientific and technical literature on chemical engineering, biological and biomedical engineering, food processing, and a variety of diffusional problems to demonstrate the real-world value of the mathematical methods. Emphasis is placed on the background and physical understanding of the problems to prepare students for future challenging and innovative applications.", + "pageCount": 694, + "stock": 5, + "publisher": "CRC Press", + "publishedDate": "2016-11-03", + "lang": "en", + "imgUrl": "http://books.google.com/books/content?id=z2kNDgAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "status": "available", + "category": "Mathematics", + "pricePerWeek": 432, + "link": "http://books.google.co.id/books?id=z2kNDgAAQBAJ&pg=PA24&dq=bio&hl=&as_pt=BOOKS&cd=35&source=gbs_api" + }, + { + "title": "Developing the Global Bioeconomy", + "isbn": "9780128052907", + "author": "Patrick Lamers, Erin Searcy, J. Richard Hess, Heinz Stichnothe", + "synopsis": "Developing the Global Bioeconomy: Technical, Market, and Environmental Lessons from Bioenergy brings together expertise from three IEA-Bioenergy subtasks on pyrolysis, international trade, and biorefineries to review the bioenergy sector and draw useful lessons for the full deployment of the bioeconomy. Despite the vast amount of politically driven strategies, there is little understanding on how current markets will transition towards a global bioeconomy. The question is not only how the bioeconomy can be developed, but also how it can be developed sustainably in terms of economic and environmental concerns. To answer this question, this book’s expert chapter authors seek to identify the types of biorefineries that are expected to be implemented and the types of feedstock that may be used. They also provide historical analysis of the developments of biopower and biofuel markets, integration opportunities into existing supply chains, and the conditions that would need to be created and enhanced to achieve a global biomass trade system that could support a global bioeconomy. As expectations that a future bioeconomy will rely on a series of tradable commodities, this book provides a central accounting of the state of the discussion in a multidisciplinary approach that is ideal for research and academic experts, and analysts in all areas of the bioenergy, biofuels, and bioeconomy sectors, as well as those interested in energy policy and economics. Examines the lessons learned by the bioenergy industry and how they can be applied to the full development of the bioeconomy Explores different transition strategies and how the current fossil based and future bio-based economy are intertwined Reviews the status of current biomass conversion pathways Presents an historical analysis of the developments of biopower and biofuel markets, integration opportunities into existing supply chains, and the conditions that would need to be created and enhanced to achieve a global biomass trade system", + "pageCount": 220, + "stock": 3, + "publisher": "Academic Press", + "publishedDate": "2016-05-02", + "lang": "en", + "imgUrl": "http://books.google.com/books/content?id=gTqOCgAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "status": "available", + "category": "Technology & Engineering", + "pricePerWeek": 296, + "link": "http://books.google.co.id/books?id=gTqOCgAAQBAJ&printsec=frontcover&dq=bio&hl=&as_pt=BOOKS&cd=36&source=gbs_api" + }, + { + "title": "Official Journal of the European Communities", + "isbn": "UOM:39015074622120", + "author": "-", + "pageCount": 1124, + "stock": 5, + "publishedDate": "1980-04", + "lang": "en", + "imgUrl": "http://books.google.com/books/content?id=E2kNAQAAMAAJ&printsec=frontcover&img=1&zoom=1&source=gbs_api", + "status": "available", + "category": "European federation", + "pricePerWeek": 3515, + "link": "http://books.google.co.id/books?id=E2kNAQAAMAAJ&q=bio&dq=bio&hl=&as_pt=BOOKS&cd=37&source=gbs_api" + }, + { + "title": "JARQ.", + "isbn": "WISC:89098849797", + "author": "-", + "pageCount": 598, + "stock": 1, + "publishedDate": "2001", + "lang": "en", + "imgUrl": "http://books.google.com/books/content?id=siXvBXvdy4oC&printsec=frontcover&img=1&zoom=1&source=gbs_api", + "status": "available", + "category": "Agriculture", + "pricePerWeek": 3881, + "link": "http://books.google.co.id/books?id=siXvBXvdy4oC&q=bio&dq=bio&hl=&as_pt=BOOKS&cd=38&source=gbs_api" + }, + { + "title": "Biomass Combustion Science, Technology and Engineering", + "isbn": "9780857097439", + "author": "Lasse Rosendahl", + "synopsis": "The utilisation of biomass is increasingly important for low- or zero-carbon power generation. Developments in conventional power plant fuel flexibility allow for both direct biomass combustion and co-firing with fossil fuels, while the integration of advanced technologies facilitates conversion of a wide range of biomass feedstocks into more readily combustible fuel. Biomass combustion science, technology and engineering reviews the science and technology of biomass combustion, conversion and utilisation. Part one provides an introduction to biomass supply chains and feedstocks, and outlines the principles of biomass combustion for power generation. Chapters also describe the categorisation and preparation of biomass feedstocks for combustion and gasification. Part two goes on to explore biomass combustion and co-firing, including direct combustion of biomass, biomass co-firing and gasification, fast pyrolysis of biomass for the production of liquids and intermediate pyrolysis technologies. Largescale biomass combustion and biorefineries are then the focus of part three. Following an overview of large-scale biomass combustion plants, key engineering issues and plant operation are discussed, before the book concludes with a chapter looking at the role of biorefineries in increasing the value of the end-products of biomass conversion. With its distinguished editor and international team of expert contributors, Biomass combustion science, technology and engineering provides a clear overview of this important area for all power plant operators, industrial engineers, biomass researchers, process chemists and academics working in this field. Reviews the science and technology of biomass combustion, conversion and utilisation Provides an introduction to biomass supply chains and feedstocks and outlines the principles of biomass combustion for power generation Describes the categorisation and preparation of biomass feedstocks for combustion and gasification", + "pageCount": 320, + "stock": 2, + "publisher": "Elsevier", + "publishedDate": "2013-04-04", + "lang": "en", + "imgUrl": "http://books.google.com/books/content?id=MVtEAgAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "status": "available", + "category": "Technology & Engineering", + "pricePerWeek": 3917, + "link": "http://books.google.co.id/books?id=MVtEAgAAQBAJ&pg=PA165&dq=bio&hl=&as_pt=BOOKS&cd=39&source=gbs_api" + }, + { + "title": "Education, Power, and Personal Biography", + "isbn": "9781136788352", + "author": "Carlos Torres Alberto", + "synopsis": "In dialogues with key thinkers in the area of critical education, this book documents how a tradition of study grew in the United States. Through in-depth interviews, the author asks each of these thinkers to talk about the relationship between their personal experiences and their academic work. The reader will learn, through listening to these intellectual, political and personal biographies, how and why these individual scholars have struggled for more than three decades to expand the borders of critical education studies. Interviews are held with Henry Giroux, Henry Levin, Herbert Gintis, Jeannie Oakes, Martin Carnoy, Maxine Greene, Michael Apple, Samuel Bowles, Paulo Freire, Gloria Lanson-Billings and Geoff Whitty, among others.", + "pageCount": 337, + "stock": 2, + "publisher": "Routledge", + "publishedDate": "1997-12-03", + "lang": "en", + "imgUrl": "http://books.google.com/books/content?id=ITaBAAAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "status": "available", + "category": "Education", + "pricePerWeek": 304, + "link": "http://books.google.co.id/books?id=ITaBAAAAQBAJ&printsec=frontcover&dq=bio&hl=&as_pt=BOOKS&cd=40&source=gbs_api" + } +] \ No newline at end of file diff --git a/server/jsons/fetchDatas.js b/server/jsons/fetchDatas.js new file mode 100644 index 0000000..45c69a7 --- /dev/null +++ b/server/jsons/fetchDatas.js @@ -0,0 +1,21 @@ +// require('dotenv').config(); +const axios = require('axios'); +const fs = require('fs'); +const { fetchGBooks } = require('../helpers/googlebooks'); + +async function fetchGoogleBooks() { + try { + const jsBooks = await fetchGBooks('javascript', 20); + const reactBooks = await fetchGBooks('react', 20); + const randomBooks = await fetchGBooks('bio', 40); + const books = [...jsBooks, ...reactBooks, ...randomBooks]; + const allBooks = JSON.stringify(books, null, 2); + fs.writeFileSync('./jsons/books.json', allBooks); + console.log('Data berhasil disimpan ke books.json'); + } catch (error) { + console.error(error); + } +} + +// fetchGoogleBooks(); +// module.exports = fetchGoogleBooks; \ No newline at end of file diff --git a/server/middlewares/authentication.js b/server/middlewares/authentication.js new file mode 100644 index 0000000..09f53d0 --- /dev/null +++ b/server/middlewares/authentication.js @@ -0,0 +1,28 @@ + +const { verifyToken } = require("../helpers/jwt"); +const { User } = require("../models"); + +const authentication = async (req, res, next) => { + try { + if (!req.headers.authorization) throw ({ name: "Unauthenticated" }); + const token = req.headers.authorization.split(' ').at(-1); + + if (!token) throw ({ name: "Unauthenticated" }); + + const { id } = verifyToken(token); + const user = await User.findByPk(id); + + if (!user) throw ({ name: "Unauthenticated" }); + req.user = { + id: user.id, + email: user.email, + role: user.role + }; + + next(); + } catch (error) { + next(error); + } +} + +module.exports = authentication; \ No newline at end of file diff --git a/server/middlewares/errorHandler.js b/server/middlewares/errorHandler.js new file mode 100644 index 0000000..200e454 --- /dev/null +++ b/server/middlewares/errorHandler.js @@ -0,0 +1,74 @@ +const errorHandler = { + handler: (error, request, response, next) => { + let statusCode, message; + console.log(error) + switch (error.name) { + case 'SequelizeValidationError': + case 'SequelizeUniqueConstraintError': + statusCode = 400; + message = error.errors.map(er => { return er.message }); + break; + + case 'EmptyUsername': + statusCode = 400; + message = `Username is required`; + break; + + case 'EmptyEmail': + statusCode = 400; + message = `Email is required`; + break; + + case 'EmptyPassword': + statusCode = 400; + message = `Password is required`; + break; + + case 'EmptyEmailPassword': + statusCode = 400; + message = `Email/Password is required`; + break; + + case 'googleAcc': + statusCode = 400; + message = `Use your Google account to login`; + break; + + case 'ExistUserBooks': + statusCode = 400; + message = `Book has been exists`; + break; + + case 'NotMatched': + statusCode = 401; + message = `Invalid Email/Password!`; + break; + + case 'JsonWebTokenError': + case 'Unauthenticated': + statusCode = 401; + message = `Unauthenticated`; + break; + + case 'Unauthorized': + statusCode = 403; + message = `You're not authorized`; + break; + + case 'NotFound': + statusCode = 404; + message = `Not Found`; + break; + + default: + statusCode = 500; + message = `Internal Server Error`; + break; + } + + response.status(statusCode).json({ message }); + } + +} + +module.exports = errorHandler; \ No newline at end of file diff --git a/server/migrations/20231113173059-create-user.js b/server/migrations/20231113173059-create-user.js new file mode 100644 index 0000000..9eddb4a --- /dev/null +++ b/server/migrations/20231113173059-create-user.js @@ -0,0 +1,46 @@ +'use strict'; +/** @type {import('sequelize-cli').Migration} */ +module.exports = { + async up(queryInterface, Sequelize) { + await queryInterface.createTable('Users', { + id: { + allowNull: false, + autoIncrement: true, + primaryKey: true, + type: Sequelize.INTEGER + }, + username: { + type: Sequelize.STRING, + allowNull: false + }, + email: { + type: Sequelize.STRING, + allowNull: false, + unique: true + }, + password: { + type: Sequelize.STRING, + allowNull: false + }, + role: { + type: Sequelize.STRING, + allowNull: false + }, + accountType: { + type: Sequelize.STRING, + allowNull: false + }, + createdAt: { + allowNull: false, + type: Sequelize.DATE + }, + updatedAt: { + allowNull: false, + type: Sequelize.DATE + } + }); + }, + async down(queryInterface, Sequelize) { + await queryInterface.dropTable('Users'); + } +}; \ No newline at end of file diff --git a/server/migrations/20231113173218-create-user-detail.js b/server/migrations/20231113173218-create-user-detail.js new file mode 100644 index 0000000..1a7912e --- /dev/null +++ b/server/migrations/20231113173218-create-user-detail.js @@ -0,0 +1,46 @@ +'use strict'; +/** @type {import('sequelize-cli').Migration} */ +module.exports = { + async up(queryInterface, Sequelize) { + await queryInterface.createTable('UserDetails', { + id: { + allowNull: false, + autoIncrement: true, + primaryKey: true, + type: Sequelize.INTEGER + }, + userId: { + type: Sequelize.INTEGER, + allowNull: false, + references: { + model: 'Users', + key: 'id' + } + }, + name: { + type: Sequelize.STRING, + allowNull: false + }, + inumber: { + type: Sequelize.STRING + }, + address: { + type: Sequelize.TEXT + }, + gender: { + type: Sequelize.STRING + }, + createdAt: { + allowNull: false, + type: Sequelize.DATE + }, + updatedAt: { + allowNull: false, + type: Sequelize.DATE + } + }); + }, + async down(queryInterface, Sequelize) { + await queryInterface.dropTable('UserDetails'); + } +}; \ No newline at end of file diff --git a/server/migrations/20231113173504-create-book.js b/server/migrations/20231113173504-create-book.js new file mode 100644 index 0000000..476e41e --- /dev/null +++ b/server/migrations/20231113173504-create-book.js @@ -0,0 +1,72 @@ +'use strict'; +/** @type {import('sequelize-cli').Migration} */ +module.exports = { + async up(queryInterface, Sequelize) { + await queryInterface.createTable('Books', { + id: { + allowNull: false, + autoIncrement: true, + primaryKey: true, + type: Sequelize.INTEGER + }, + title: { + type: Sequelize.STRING, + allowNull: false + }, + isbn: { + type: Sequelize.STRING + }, + author: { + type: Sequelize.STRING + }, + synopsis: { + type: Sequelize.TEXT + }, + pageCount: { + type: Sequelize.INTEGER + }, + stock: { + type: Sequelize.INTEGER, + allowNull: false + }, + publisher: { + type: Sequelize.STRING + }, + publishedDate: { + type: Sequelize.STRING + }, + lang: { + type: Sequelize.STRING + }, + imgUrl: { + type: Sequelize.STRING + }, + status: { + type: Sequelize.STRING, + allowNull: false + }, + category: { + type: Sequelize.STRING + }, + pricePerWeek: { + type: Sequelize.INTEGER, + allowNull: false + }, + link: { + type: Sequelize.TEXT, + allowNull: false + }, + createdAt: { + allowNull: false, + type: Sequelize.DATE + }, + updatedAt: { + allowNull: false, + type: Sequelize.DATE + } + }); + }, + async down(queryInterface, Sequelize) { + await queryInterface.dropTable('Books'); + } +}; \ No newline at end of file diff --git a/server/migrations/20231113173602-create-history.js b/server/migrations/20231113173602-create-history.js new file mode 100644 index 0000000..5bd85fa --- /dev/null +++ b/server/migrations/20231113173602-create-history.js @@ -0,0 +1,54 @@ +'use strict'; +/** @type {import('sequelize-cli').Migration} */ +module.exports = { + async up(queryInterface, Sequelize) { + await queryInterface.createTable('Histories', { + id: { + allowNull: false, + autoIncrement: true, + primaryKey: true, + type: Sequelize.INTEGER + }, + bookId: { + type: Sequelize.INTEGER, + references: { + model: 'Books', + key: 'id' + } + }, + userId: { + type: Sequelize.INTEGER, + allowNull: false, + references: { + model: 'Users', + key: 'id' + } + }, + answer: { + type: Sequelize.TEXT, + }, + question: { + type: Sequelize.TEXT, + }, + point: { + type: Sequelize.INTEGER, + allowNull: false + }, + status: { + type: Sequelize.STRING, + allowNull: false + }, + createdAt: { + allowNull: false, + type: Sequelize.DATE + }, + updatedAt: { + allowNull: false, + type: Sequelize.DATE + } + }); + }, + async down(queryInterface, Sequelize) { + await queryInterface.dropTable('Histories'); + } +}; \ No newline at end of file diff --git a/server/models/book.js b/server/models/book.js new file mode 100644 index 0000000..47f1f3e --- /dev/null +++ b/server/models/book.js @@ -0,0 +1,83 @@ +'use strict'; +const { + Model +} = require('sequelize'); +module.exports = (sequelize, DataTypes) => { + class Book extends Model { + /** + * Helper method for defining associations. + * This method is not a part of Sequelize lifecycle. + * The `models/index` file will call this method automatically. + */ + static associate(models) { + // define association here + Book.hasMany(models.History, { + foreignKey: 'bookId' + }); + } + } + Book.init({ + title: { + type: DataTypes.STRING, + allowNull: false, + validate: { + notEmpty: { + msg: `Title is required!` + }, + notNull: { + msg: `Title is required!` + } + } + }, + isbn: DataTypes.STRING, + author: DataTypes.STRING, + synopsis: DataTypes.TEXT, + pageCount: DataTypes.INTEGER, + stock: { + type: DataTypes.INTEGER, + allowNull: false, + validate: { + notEmpty: { + msg: `Stock is required!` + }, + notNull: { + msg: `Stock is required!` + } + } + }, + publisher: DataTypes.STRING, + publishedDate: DataTypes.STRING, + lang: DataTypes.STRING, + imgUrl: DataTypes.STRING, + status: { + type: DataTypes.STRING, + allowNull: false, + validate: { + notEmpty: { + msg: `Status is required!` + }, + notNull: { + msg: `Status is required!` + } + } + }, + category: DataTypes.STRING, + link: DataTypes.TEXT, + pricePerWeek: { + type: DataTypes.INTEGER, + allowNull: false, + validate: { + notEmpty: { + msg: `Price per week is required!` + }, + notNull: { + msg: `Price per week is required!` + } + } + } + }, { + sequelize, + modelName: 'Book', + }); + return Book; +}; \ No newline at end of file diff --git a/server/models/history.js b/server/models/history.js new file mode 100644 index 0000000..75c44dd --- /dev/null +++ b/server/models/history.js @@ -0,0 +1,55 @@ +'use strict'; +const { + Model +} = require('sequelize'); +module.exports = (sequelize, DataTypes) => { + class History extends Model { + /** + * Helper method for defining associations. + * This method is not a part of Sequelize lifecycle. + * The `models/index` file will call this method automatically. + */ + static associate(models) { + // define association here + History.belongsTo(models.User, { foreignKey: 'userId' }); + History.belongsTo(models.Book, { foreignKey: 'bookId' }); + } + } + History.init({ + bookId: DataTypes.INTEGER, + userId: { + type: DataTypes.INTEGER, + allowNull: false, + validate: { + notEmpty: { + msg: `User is required!` + }, + notNull: { + msg: `User is required!` + } + } + }, + answer : DataTypes.TEXT, + question : DataTypes.TEXT, + point : { + type: DataTypes.INTEGER, + defaultValue: 0 + }, + status: { + type: DataTypes.STRING, + allowNull: false, + validate: { + notEmpty: { + msg: `Status is required!` + }, + notNull: { + msg: `Status is required!` + } + } + }, + }, { + sequelize, + modelName: 'History', + }); + return History; +}; \ No newline at end of file diff --git a/server/models/index.js b/server/models/index.js new file mode 100644 index 0000000..024200e --- /dev/null +++ b/server/models/index.js @@ -0,0 +1,43 @@ +'use strict'; + +const fs = require('fs'); +const path = require('path'); +const Sequelize = require('sequelize'); +const process = require('process'); +const basename = path.basename(__filename); +const env = process.env.NODE_ENV || 'development'; +const config = require(__dirname + '/../config/config.json')[env]; +const db = {}; + +let sequelize; +if (config.use_env_variable) { + sequelize = new Sequelize(process.env[config.use_env_variable], config); +} else { + sequelize = new Sequelize(config.database, config.username, config.password, config); +} + +fs + .readdirSync(__dirname) + .filter(file => { + return ( + file.indexOf('.') !== 0 && + file !== basename && + file.slice(-3) === '.js' && + file.indexOf('.test.js') === -1 + ); + }) + .forEach(file => { + const model = require(path.join(__dirname, file))(sequelize, Sequelize.DataTypes); + db[model.name] = model; + }); + +Object.keys(db).forEach(modelName => { + if (db[modelName].associate) { + db[modelName].associate(db); + } +}); + +db.sequelize = sequelize; +db.Sequelize = Sequelize; + +module.exports = db; diff --git a/server/models/user.js b/server/models/user.js new file mode 100644 index 0000000..3ecca60 --- /dev/null +++ b/server/models/user.js @@ -0,0 +1,100 @@ +'use strict'; +const { + Model +} = require('sequelize'); +const { bcryptHash } = require('../helpers/bcryptjs'); +module.exports = (sequelize, DataTypes) => { + class User extends Model { + /** + * Helper method for defining associations. + * This method is not a part of Sequelize lifecycle. + * The `models/index` file will call this method automatically. + */ + static associate(models) { + // define association here + User.hasOne(models.UserDetail, { + foreignKey: 'userId', + onDelete: 'CASCADE' + }); + User.hasMany(models.History, { + foreignKey: 'userId', + onDelete: 'CASCADE' + }); + } + } + User.init({ + username: { + type: DataTypes.STRING, + allowNull: false, + validate: { + notEmpty: { + msg: `Username is required!` + }, + notNull: { + msg: `Username is required!` + } + } + }, + email: { + type: DataTypes.STRING, + allowNull: false, + unique : true, + validate : { + notNull : { + msg : `Email is required!` + }, + notEmpty : { + msg : `Email is required!` + }, + isEmail : { + msg : `Must be an email!` + } + } + }, + password: { + type: DataTypes.STRING, + allowNull: false, + validate : { + notNull : { + msg : `Password is required!` + }, + notEmpty : { + msg : `Password is required!` + }, + len : { + args: [5, Infinity], + msg: "Password must be at least 5 characters!" + } + } + }, + role: { + type: DataTypes.STRING, + allowNull: false, + defaultValue: 'member', + validate: { + notEmpty: { + msg: `Role is required!` + }, + notNull: { + msg: `Role is required!` + } + } + }, + accountType: { + type: DataTypes.STRING, + allowNull: false, + validate: { + isIn: [['manual', 'google']], + } + } + }, { + sequelize, + modelName: 'User', + }); + + User.beforeCreate((user) => { + user.password = bcryptHash(user.password); + }); + + return User; +}; \ No newline at end of file diff --git a/server/models/userdetail.js b/server/models/userdetail.js new file mode 100644 index 0000000..676442e --- /dev/null +++ b/server/models/userdetail.js @@ -0,0 +1,60 @@ +'use strict'; +const { + Model +} = require('sequelize'); +module.exports = (sequelize, DataTypes) => { + class UserDetail extends Model { + /** + * Helper method for defining associations. + * This method is not a part of Sequelize lifecycle. + * The `models/index` file will call this method automatically. + */ + static associate(models) { + // define association here + UserDetail.belongsTo(models.User, { foreignKey: 'userId' }); + } + } + UserDetail.init({ + userId: { + type: DataTypes.INTEGER, + allowNull: false, + validate: { + notEmpty: { + msg: `User is required!` + }, + notNull: { + msg: `User is required!` + } + } + }, + name: { + type: DataTypes.STRING, + allowNull: false, + validate: { + notEmpty: { + msg: `Name is required!` + }, + notNull: { + msg: `Name is required!` + } + } + }, + inumber: DataTypes.STRING, + address: DataTypes.TEXT, + gender: DataTypes.STRING + }, { + sequelize, + modelName: 'UserDetail', + }); + + UserDetail.beforeCreate((user) => { + console.log(user); + let inumber = 'M-'; + inumber += new Date().getFullYear() + `-`; + inumber += user.userId + '-'; + user.gender ? inumber += 'F-' : inumber += 'M-'; + inumber += 'IPUSTAKA' + user.inumber = inumber; + }); + return UserDetail; +}; \ No newline at end of file diff --git a/server/package-lock.json b/server/package-lock.json new file mode 100644 index 0000000..4427daa --- /dev/null +++ b/server/package-lock.json @@ -0,0 +1,6214 @@ +{ + "name": "ipustaka-server", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "ipustaka-server", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "axios": "^1.6.1", + "bcryptjs": "^2.4.3", + "cors": "^2.8.5", + "express": "^4.18.2", + "google-auth-library": "^9.2.0", + "jsonwebtoken": "^9.0.2", + "nodemailer": "^6.9.7", + "openai": "^4.17.5", + "pg": "^8.11.3", + "sequelize": "^6.35.0" + }, + "devDependencies": { + "dotenv": "^16.3.1", + "jest": "^29.7.0", + "nodemon": "^3.0.1", + "sequelize-cli": "^6.6.2", + "supertest": "^6.3.3" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/code-frame/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/@babel/code-frame/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/@babel/code-frame/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/@babel/code-frame/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/@babel/code-frame/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/@babel/code-frame/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/@babel/code-frame/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/@babel/compat-data": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.3.tgz", + "integrity": "sha512-BmR4bWbDIoFJmJ9z2cZ8Gmm2MXgEDgjdWgpKmKWUt54UGFJdlj31ECtbaDvCG/qVdG3AQ1SfpZEs01lUFbzLOQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.3.tgz", + "integrity": "sha512-Jg+msLuNuCJDyBvFv5+OKOUjWMZgd85bKjbICd3zWrKAo+bJ49HJufi7CQE0q0uR8NGyO6xkCACScNqyjHSZew==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.3", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.23.2", + "@babel/parser": "^7.23.3", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.3", + "@babel/types": "^7.23.3", + "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/core/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/core/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/@babel/core/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/@babel/generator": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.3.tgz", + "integrity": "sha512-keeZWAV4LU3tW0qRi19HRpabC/ilM0HRBBzf9/k8FFiG4KVpiv0FIy4hHfLfFQZNhziCTPTmd59zoyv6DNISzg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.23.3", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", + "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-validator-option": "^7.22.15", + "browserslist": "^4.21.9", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/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/@babel/helper-compilation-targets/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/@babel/helper-compilation-targets/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/@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", + "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.2.tgz", + "integrity": "sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.2", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", + "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/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/@babel/highlight/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/@babel/highlight/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/@babel/highlight/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/@babel/highlight/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/@babel/highlight/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/@babel/highlight/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/@babel/parser": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.3.tgz", + "integrity": "sha512-uVsWNvlVsIninV2prNz/3lHCb+5CJ+e+IUBfbjToAHODtfGYLfCFuY4AU7TskI+dAKk+njsPiBjq1gKTvZOBaw==", + "dev": true, + "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-jsx": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz", + "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.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.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz", + "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.3.tgz", + "integrity": "sha512-+K0yF1/9yR0oHdE0StHuEj3uTPzwwbrLGfNOndVJVV2TqA5+j3oljJUb4nmB954FLGjNem976+B+eDuLIjesiQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.3", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.3", + "@babel/types": "^7.23.3", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/traverse/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/@babel/types": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.3.tgz", + "integrity": "sha512-OZnvoH2l8PK5eUvEcUyCt/sXgr/h+UWpVuBbOljwcrAgUl6lpchoQ++PHGyQy1AtYnVA6CEq3y5xeEI10brpXw==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", + "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/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/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/@isaacs/cliui/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/@isaacs/cliui/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/@isaacs/cliui/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/@isaacs/cliui/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/@isaacs/cliui/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/@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": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", + "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "dev": true, + "dependencies": { + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", + "dev": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "dev": true, + "dependencies": { + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@one-ini/wasm": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@one-ini/wasm/-/wasm-0.1.1.tgz", + "integrity": "sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==", + "dev": true + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", + "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.4", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.4.tgz", + "integrity": "sha512-mLnSC22IC4vcWiuObSRjrLd9XcBTGf59vUSoq2jkQDJ/QQ8PMI9rSuzE+aEV8karUMbskw07bKYoUJCKTUaygg==", + "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.7", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.7.tgz", + "integrity": "sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ==", + "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.4", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.4.tgz", + "integrity": "sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "dependencies": { + "@types/ms": "*" + } + }, + "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/ms": { + "version": "0.7.34", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", + "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==" + }, + "node_modules/@types/node": { + "version": "20.9.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.9.0.tgz", + "integrity": "sha512-nekiGu2NDb1BcVofVcEKMIwzlx4NjHlcjhoxxKBNLtz15Y1z7MYf549DFvkHSId02Ax6kGwWntIBPC3l/JZcmw==", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/node-fetch": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.9.tgz", + "integrity": "sha512-bQVlnMLFJ2d35DkPNjEPmd9ueO/rh5EiaZt2bhqiSarPjZIuIV6bPQVqcrEyvNo+AfTrRGVazle1tl597w3gfA==", + "dependencies": { + "@types/node": "*", + "form-data": "^4.0.0" + } + }, + "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/validator": { + "version": "13.11.6", + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.11.6.tgz", + "integrity": "sha512-HUgHujPhKuNzgNXBRZKYexwoG+gHKU+tnfPqjWXFghZAnn73JElicMkuSKJyLGr9JgyA8IgK7fj88IyA9rwYeQ==" + }, + "node_modules/@types/yargs": { + "version": "17.0.31", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.31.tgz", + "integrity": "sha512-bocYSx4DI8TmdlvxqGpVNXOgCNR1Jj0gNPhhAY+iz1rgKDAaYrAYdFYnhDV1IFuiuVc9HkOwyDcFxaTElF3/wg==", + "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/abbrev": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", + "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "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==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/agent-base/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/agent-base/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==" + }, + "node_modules/agentkeepalive": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", + "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", + "dependencies": { + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "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": "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/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/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-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/axios": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.1.tgz", + "integrity": "sha512-vfBmhDpKafglh0EldBEbVuoe7DyAavGSLWhuSm5ZSEKQnHhBf0xAAwybbNH1IkrJNGnS/VG4I5yxig1pCEXE4g==", + "dependencies": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "dev": true, + "dependencies": { + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "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-istanbul/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/babel-plugin-istanbul/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/babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.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": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.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/base-64": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/base-64/-/base-64-0.1.0.tgz", + "integrity": "sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA==" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "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/bcryptjs": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", + "integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==" + }, + "node_modules/bignumber.js": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", + "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "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.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", + "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", + "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.30001541", + "electron-to-chromium": "^1.4.535", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.13" + }, + "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-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + }, + "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/buffer-writer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz", + "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "dependencies": { + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" + }, + "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", + "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.30001561", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001561.tgz", + "integrity": "sha512-NTt0DNoKe958Q0BE0j0c1V9jbUzhBxHIEJy7asmGrpE0yG63KTV7PLHPnK2E1O9RsQrQ081I3NLuXGS6zht3cw==", + "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": "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/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/charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", + "engines": { + "node": "*" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "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.2.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", + "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", + "dev": true + }, + "node_modules/cli-color": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-2.0.3.tgz", + "integrity": "sha512-OkoZnxyC4ERN3zLzZaY9Emb7f/MhBOIpePv0Ycok0fJYT+Ouo00UBEIwsVsr0yoow++n5YWlSUgST9GKhNHiRQ==", + "dev": true, + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.61", + "es6-iterator": "^2.0.3", + "memoizee": "^0.4.15", + "timers-ext": "^0.1.7" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "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": "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/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/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "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/config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "dev": true, + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "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/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/cookiejar": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", + "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", + "dev": true + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + }, + "bin": { + "create-jest": "bin/create-jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "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/crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", + "engines": { + "node": "*" + } + }, + "node_modules/d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dev": true, + "dependencies": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/dedent": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", + "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", + "dev": true, + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": 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/define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "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/dezalgo": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", + "dev": true, + "dependencies": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/digest-fetch": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/digest-fetch/-/digest-fetch-1.3.0.tgz", + "integrity": "sha512-CGJuv6iKNM7QyZlM2T3sPAdZWd/p9zQiRNS9G+9COUCwzWFTs0Xp8NF5iePx7wtvhDykReiRRrSeNb4oMmB8lA==", + "dependencies": { + "base-64": "^0.1.0", + "md5": "^2.3.0" + } + }, + "node_modules/dotenv": { + "version": "16.3.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", + "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/motdotla/dotenv?sponsor=1" + } + }, + "node_modules/dottie": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.6.tgz", + "integrity": "sha512-iGCHkfUc5kFekGiqhe8B/mdaurD+lakO9txNnTvKtA6PISrw86LgqHvRzWYPyoE2Ph5aMIrCw9/uko6XHTKCwA==" + }, + "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/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/editorconfig": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-1.0.4.tgz", + "integrity": "sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==", + "dev": true, + "dependencies": { + "@one-ini/wasm": "0.1.1", + "commander": "^10.0.0", + "minimatch": "9.0.1", + "semver": "^7.5.3" + }, + "bin": { + "editorconfig": "bin/editorconfig" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/editorconfig/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/editorconfig/node_modules/minimatch": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/electron-to-chromium": { + "version": "1.4.581", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.581.tgz", + "integrity": "sha512-6uhqWBIapTJUxgPTCHH9sqdbxIMPt7oXl0VcAL1kOtlU6aECdcMncCrX5Z7sHQ/invtrC9jUQUef7+HhO8vVFw==", + "dev": true + }, + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "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/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "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/es5-ext": { + "version": "0.10.62", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", + "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dev": true, + "dependencies": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "node_modules/es6-weak-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "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/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/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "engines": { + "node": ">=6" + } + }, + "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": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dev": true, + "dependencies": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "dev": true, + "dependencies": { + "type": "^2.7.2" + } + }, + "node_modules/ext/node_modules/type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", + "dev": true + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "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-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "dev": true + }, + "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/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "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/follow-redirects": { + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", + "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/form-data-encoder": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz", + "integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==" + }, + "node_modules/formdata-node": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz", + "integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==", + "dependencies": { + "node-domexception": "1.0.0", + "web-streams-polyfill": "4.0.0-beta.3" + }, + "engines": { + "node": ">= 12.20" + } + }, + "node_modules/formdata-node/node_modules/web-streams-polyfill": { + "version": "4.0.0-beta.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", + "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==", + "engines": { + "node": ">= 14" + } + }, + "node_modules/formidable": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.2.tgz", + "integrity": "sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==", + "dev": true, + "dependencies": { + "dezalgo": "^1.0.4", + "hexoid": "^1.0.0", + "once": "^1.4.0", + "qs": "^6.11.0" + }, + "funding": { + "url": "https://ko-fi.com/tunnckoCore/commissions" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "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==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gaxios": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-6.1.1.tgz", + "integrity": "sha512-bw8smrX+XlAoo9o1JAksBwX+hi/RG15J+NTSxmNPIclKC3ZVK6C2afwY8OSdRvOK0+ZLecUJYtj2MmjOt3Dm0w==", + "dependencies": { + "extend": "^3.0.2", + "https-proxy-agent": "^7.0.1", + "is-stream": "^2.0.0", + "node-fetch": "^2.6.9" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/gcp-metadata": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-6.1.0.tgz", + "integrity": "sha512-Jh/AIwwgaxan+7ZUUmRLCjtchyDiqh4KjBJ5tW3plBZb5iL/BPcso8A5DlzeD9qlw0duCamnNdpFjxwaT0KyKg==", + "dependencies": { + "gaxios": "^6.0.0", + "json-bigint": "^1.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "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-intrinsic": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "dependencies": { + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "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", + "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/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "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": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "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/google-auth-library": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-9.2.0.tgz", + "integrity": "sha512-1oV3p0JhNEhVbj26eF3FAJcv9MXXQt4S0wcvKZaDbl4oHq5V3UJoSbsGZGQNcjoCdhW4kDSwOs11wLlHog3fgQ==", + "dependencies": { + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "gaxios": "^6.0.0", + "gcp-metadata": "^6.0.0", + "gtoken": "^7.0.0", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/google-auth-library/node_modules/jwa": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", + "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/google-auth-library/node_modules/jws": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", + "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", + "dependencies": { + "jwa": "^2.0.0", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "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", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/gtoken": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-7.0.1.tgz", + "integrity": "sha512-KcFVtoP1CVFtQu0aSk3AyAt2og66PFhZAlkUOuWKwzMLoulHXG5W5wE5xAnHb+yl3/wEFoqGW7/cDGMU8igDZQ==", + "dependencies": { + "gaxios": "^6.0.0", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/gtoken/node_modules/jwa": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", + "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/gtoken/node_modules/jws": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", + "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", + "dependencies": { + "jwa": "^2.0.0", + "safe-buffer": "^5.0.1" + } + }, + "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/has-property-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "dependencies": { + "get-intrinsic": "^1.2.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "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==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hexoid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", + "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", + "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/https-proxy-agent/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent/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==" + }, + "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/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "dependencies": { + "ms": "^2.0.0" + } + }, + "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==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", + "dev": true + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "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/inflection": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.13.4.tgz", + "integrity": "sha512-6I/HUDeYFfuNCVS3td055BaXBwKYuzw7K3ExVMStBowKo9oOAMJIXIHvdyR3iboTCp1b+1i5DSkIZTcwIktuDw==", + "engines": [ + "node >= 0.4.0" + ] + }, + "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==", + "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==" + }, + "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/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "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-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", + "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==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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": "6.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz", + "integrity": "sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==", + "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": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "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-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-lib-source-maps/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/istanbul-lib-source-maps/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/istanbul-reports": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", + "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", + "dev": true, + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.7.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.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": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", + "dev": true, + "dependencies": { + "execa": "^5.0.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-circus": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-cli": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", + "dev": true, + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "create-jest": "^29.7.0", + "exit": "^0.1.2", + "import-local": "^3.0.2", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", + "dev": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.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": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "dev": true, + "dependencies": { + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "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-watcher": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", + "dev": true, + "dependencies": { + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "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-beautify": { + "version": "1.14.11", + "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.14.11.tgz", + "integrity": "sha512-rPogWqAfoYh1Ryqqh2agUpVfbxAhbjuN1SmU86dskQUKouRiggUTCO4+2ym9UPXllc2WAp0J+T5qxn7Um3lCdw==", + "dev": true, + "dependencies": { + "config-chain": "^1.1.13", + "editorconfig": "^1.0.3", + "glob": "^10.3.3", + "nopt": "^7.2.0" + }, + "bin": { + "css-beautify": "js/bin/css-beautify.js", + "html-beautify": "js/bin/html-beautify.js", + "js-beautify": "js/bin/js-beautify.js" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/js-beautify/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/js-beautify/node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/js-beautify/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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/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-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "dependencies": { + "bignumber.js": "^9.0.0" + } + }, + "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/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": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jsonwebtoken/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.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/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==" + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/lru-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", + "integrity": "sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==", + "dev": true, + "dependencies": { + "es5-ext": "~0.10.2" + } + }, + "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/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/md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "dependencies": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memoizee": { + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz", + "integrity": "sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==", + "dev": true, + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.53", + "es6-weak-map": "^2.0.3", + "event-emitter": "^0.3.5", + "is-promise": "^2.2.2", + "lru-queue": "^0.1.0", + "next-tick": "^1.1.0", + "timers-ext": "^0.1.7" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "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/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "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==", + "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==", + "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/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/moment": { + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", + "engines": { + "node": "*" + } + }, + "node_modules/moment-timezone": { + "version": "0.5.43", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.43.tgz", + "integrity": "sha512-72j3aNyuIsDxdF1i7CEgV2FfxM1r6aaqJyLB2vwb33mXYyoyLly+F1zbWqhA3/bVIoJ4szlUoMbUnVdid32NUQ==", + "dependencies": { + "moment": "^2.29.4" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "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==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "dev": true + }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "engines": { + "node": ">=10.5.0" + } + }, + "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==", + "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-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.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "dev": true + }, + "node_modules/nodemailer": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.7.tgz", + "integrity": "sha512-rUtR77ksqex/eZRLmQ21LKVH5nAAsVicAtAYudK7JgwenEDZ0UIQ1adUGqErz7sMkWYxWTTU1aeP2Jga6WQyJw==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/nodemon": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.0.1.tgz", + "integrity": "sha512-g9AZ7HmkhQkqXkRc20w+ZfQ73cHLbE8hnPbtaFbFtCumZsjyMhKk9LajQ07U5Ux28lvFjZ5X7HvWR1xzU8jHVw==", + "dev": true, + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^3.2.7", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^7.5.3", + "simple-update-notifier": "^2.0.0", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/nodemon/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/nodemon/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/nodemon/node_modules/ms": { + "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/nodemon/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/nopt": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.0.tgz", + "integrity": "sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA==", + "dev": true, + "dependencies": { + "abbrev": "^2.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "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/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "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/openai": { + "version": "4.17.5", + "resolved": "https://registry.npmjs.org/openai/-/openai-4.17.5.tgz", + "integrity": "sha512-SDgA933/QOjISCgWRc/JQhY1HweYZ6FOie3bWrCpj09FA5xIlaomldbyzICHNjtkh7SWEmGYFjRHIDtuwr+eTw==", + "dependencies": { + "@types/node": "^18.11.18", + "@types/node-fetch": "^2.6.4", + "abort-controller": "^3.0.0", + "agentkeepalive": "^4.2.1", + "digest-fetch": "^1.3.0", + "form-data-encoder": "1.7.2", + "formdata-node": "^4.3.2", + "node-fetch": "^2.6.7", + "web-streams-polyfill": "^3.2.1" + }, + "bin": { + "openai": "bin/cli" + } + }, + "node_modules/openai/node_modules/@types/node": { + "version": "18.18.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.18.9.tgz", + "integrity": "sha512-0f5klcuImLnG4Qreu9hPj/rEfFq6YRc5n2mAjSsH+ec/mJL+3voBH0+8T7o8RpFjH7ovc+TRsL/c7OYIQsPTfQ==", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "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/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-locate/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-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/packet-reader": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz", + "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==" + }, + "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/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "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-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-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "dev": true, + "dependencies": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.2.tgz", + "integrity": "sha512-Yj9mA8fPiVgOUpByoTZO5pNrcl5Yk37FcSHsUINpAsaBIEZIuqcCclDZJCVxqQShDsmYX8QG63svJiTbOATZwg==", + "dev": true, + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "node_modules/pg": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.11.3.tgz", + "integrity": "sha512-+9iuvG8QfaaUrrph+kpF24cXkH1YOOUeArRNYIxq1viYHZagBxrTno7cecY1Fa44tJeZvaoG+Djpkc3JwehN5g==", + "dependencies": { + "buffer-writer": "2.0.0", + "packet-reader": "1.0.0", + "pg-connection-string": "^2.6.2", + "pg-pool": "^3.6.1", + "pg-protocol": "^1.6.0", + "pg-types": "^2.1.0", + "pgpass": "1.x" + }, + "engines": { + "node": ">= 8.0.0" + }, + "optionalDependencies": { + "pg-cloudflare": "^1.1.1" + }, + "peerDependencies": { + "pg-native": ">=3.0.1" + }, + "peerDependenciesMeta": { + "pg-native": { + "optional": true + } + } + }, + "node_modules/pg-cloudflare": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.1.1.tgz", + "integrity": "sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==", + "optional": true + }, + "node_modules/pg-connection-string": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.6.2.tgz", + "integrity": "sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA==" + }, + "node_modules/pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/pg-pool": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.6.1.tgz", + "integrity": "sha512-jizsIzhkIitxCGfPRzJn1ZdcosIt3pz9Sh3V01fm1vZnbnCMgmGl5wvGGdNN2EL9Rmb0EcFoCkixH4Pu+sP9Og==", + "peerDependencies": { + "pg": ">=8.0" + } + }, + "node_modules/pg-protocol": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.6.0.tgz", + "integrity": "sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q==" + }, + "node_modules/pg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "dependencies": { + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.4", + "postgres-interval": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pgpass": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", + "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", + "dependencies": { + "split2": "^4.1.0" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "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/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/postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/postgres-bytea": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", + "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-date": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-interval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "dependencies": { + "xtend": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.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/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "dev": true + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true + }, + "node_modules/pure-rand": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz", + "integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ] + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.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/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": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/retry-as-promised": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-7.0.4.tgz", + "integrity": "sha512-XgmCoxKWkDofwH8WddD0w85ZfqYz+ZHlr5yo+3YUCfycWawU56T5ckWXsScsj5B8tqUcIG67DxXByo3VUgiAdA==" + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "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/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/sequelize": { + "version": "6.35.0", + "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.35.0.tgz", + "integrity": "sha512-cnxnmjUfphGfSKCwTtNZ3YD/F35fqMTNPw/Qe9xsMij49t6LkW2G57sNQkuKac8fkQgSX+M8OZOQsxCS6dnUwQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/sequelize" + } + ], + "dependencies": { + "@types/debug": "^4.1.8", + "@types/validator": "^13.7.17", + "debug": "^4.3.4", + "dottie": "^2.0.6", + "inflection": "^1.13.4", + "lodash": "^4.17.21", + "moment": "^2.29.4", + "moment-timezone": "^0.5.43", + "pg-connection-string": "^2.6.1", + "retry-as-promised": "^7.0.4", + "semver": "^7.5.4", + "sequelize-pool": "^7.1.0", + "toposort-class": "^1.0.1", + "uuid": "^8.3.2", + "validator": "^13.9.0", + "wkx": "^0.5.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependenciesMeta": { + "ibm_db": { + "optional": true + }, + "mariadb": { + "optional": true + }, + "mysql2": { + "optional": true + }, + "oracledb": { + "optional": true + }, + "pg": { + "optional": true + }, + "pg-hstore": { + "optional": true + }, + "snowflake-sdk": { + "optional": true + }, + "sqlite3": { + "optional": true + }, + "tedious": { + "optional": true + } + } + }, + "node_modules/sequelize-cli": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/sequelize-cli/-/sequelize-cli-6.6.2.tgz", + "integrity": "sha512-V8Oh+XMz2+uquLZltZES6MVAD+yEnmMfwfn+gpXcDiwE3jyQygLt4xoI0zG8gKt6cRcs84hsKnXAKDQjG/JAgg==", + "dev": true, + "dependencies": { + "cli-color": "^2.0.3", + "fs-extra": "^9.1.0", + "js-beautify": "^1.14.5", + "lodash": "^4.17.21", + "resolve": "^1.22.1", + "umzug": "^2.3.0", + "yargs": "^16.2.0" + }, + "bin": { + "sequelize": "lib/sequelize", + "sequelize-cli": "lib/sequelize" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/sequelize-cli/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/sequelize-cli/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/sequelize-cli/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/sequelize-pool": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/sequelize-pool/-/sequelize-pool-7.1.0.tgz", + "integrity": "sha512-G9c0qlIWQSK29pR/5U2JF5dDQeqqHRragoyahj/Nx4KOOQ3CPPfzxnfqFPCSB7x5UgjOgnZ61nSxz+fjDpRlJg==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/sequelize/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/sequelize/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==" + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-function-length": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", + "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "dependencies": { + "define-data-property": "^1.1.1", + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "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/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "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", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/simple-update-notifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + } + }, + "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-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "engines": { + "node": ">= 10.x" + } + }, + "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/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.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": "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/string-width-cjs": { + "name": "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/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-ansi-cjs": { + "name": "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/superagent": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-8.1.2.tgz", + "integrity": "sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==", + "dev": true, + "dependencies": { + "component-emitter": "^1.3.0", + "cookiejar": "^2.1.4", + "debug": "^4.3.4", + "fast-safe-stringify": "^2.1.1", + "form-data": "^4.0.0", + "formidable": "^2.1.2", + "methods": "^1.1.2", + "mime": "2.6.0", + "qs": "^6.11.0", + "semver": "^7.3.8" + }, + "engines": { + "node": ">=6.4.0 <13 || >=14" + } + }, + "node_modules/superagent/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/superagent/node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/superagent/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/supertest": { + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.3.tgz", + "integrity": "sha512-EMCG6G8gDu5qEqRQ3JjjPs6+FYT1a7Hv5ApHvtSghmOFJYtsU5S+pSb6Y2EUeCEY3CmEL3mmQ8YWlPOzQomabA==", + "dev": true, + "dependencies": { + "methods": "^1.1.2", + "superagent": "^8.0.5" + }, + "engines": { + "node": ">=6.4.0" + } + }, + "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/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/timers-ext": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz", + "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==", + "dev": true, + "dependencies": { + "es5-ext": "~0.10.46", + "next-tick": "1" + } + }, + "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/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/toposort-class": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz", + "integrity": "sha512-OsLcGGbYF3rMjPUf8oKktyvCiUxSbqMMS39m33MAjLTC1DVIH6x3WSt63/M77ihI09+Sdfk1AXvfhCEeUmC7mg==" + }, + "node_modules/touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dev": true, + "dependencies": { + "nopt": "~1.0.10" + }, + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "node_modules/touch/node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "node_modules/touch/node_modules/nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "dev": true + }, + "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/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/umzug": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/umzug/-/umzug-2.3.0.tgz", + "integrity": "sha512-Z274K+e8goZK8QJxmbRPhl89HPO1K+ORFtm6rySPhFKfKc5GHhqdzD0SGhSWHkzoXasqJuItdhorSvY7/Cgflw==", + "dev": true, + "dependencies": { + "bluebird": "^3.7.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "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.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-to-istanbul": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.3.tgz", + "integrity": "sha512-9lDD+EVI2fjFsMWXc6dy5JJzBsVTcQ2fVkfBvncZ6xJWG9wtBhOldG+mHkSL0+V1K/xgZz0JDO5UT5hFwHUghg==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/validator": { + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.11.0.tgz", + "integrity": "sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==", + "engines": { + "node": ">= 0.10" + } + }, + "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==", + "engines": { + "node": ">= 0.8" + } + }, + "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/web-streams-polyfill": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", + "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", + "engines": { + "node": ">= 8" + } + }, + "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==" + }, + "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==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "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/wkx": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.5.0.tgz", + "integrity": "sha512-Xng/d4Ichh8uN4l0FToV/258EjMGU9MGcA0HV2d9B/ZpZB3lqQm7nkOdZdm5GhKtLLhAE7PiVQwN4eN+2YJJUg==", + "dependencies": { + "@types/node": "*" + } + }, + "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/wrap-ansi-cjs": { + "name": "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/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": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "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": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "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" + } + } + } +} diff --git a/server/package.json b/server/package.json new file mode 100644 index 0000000..bcdf92a --- /dev/null +++ b/server/package.json @@ -0,0 +1,31 @@ +{ + "name": "ipustaka-server", + "version": "1.0.0", + "description": "", + "main": "app.js", + "scripts": { + "dev": "npx nodemon bin/www", + "test": "npx jest --detectOpenHandles --forceExit --runInBand --coverage" + }, + "author": "arvinaufal", + "license": "ISC", + "dependencies": { + "axios": "^1.6.1", + "bcryptjs": "^2.4.3", + "cors": "^2.8.5", + "express": "^4.18.2", + "google-auth-library": "^9.2.0", + "jsonwebtoken": "^9.0.2", + "nodemailer": "^6.9.7", + "openai": "^4.17.5", + "pg": "^8.11.3", + "sequelize": "^6.35.0" + }, + "devDependencies": { + "dotenv": "^16.3.1", + "jest": "^29.7.0", + "nodemon": "^3.0.1", + "sequelize-cli": "^6.6.2", + "supertest": "^6.3.3" + } +} diff --git a/server/routes/index.js b/server/routes/index.js new file mode 100644 index 0000000..1b2d906 --- /dev/null +++ b/server/routes/index.js @@ -0,0 +1,27 @@ +const express = require('express'); +const HistoryController = require('../controllers/HistoryController'); +const UserController = require('../controllers/UserController'); +const errorHandler = require('../middlewares/errorHandler'); +const authentication = require('../middlewares/authentication'); +const BookController = require('../controllers/BookController'); +const MailController = require('../controllers/mails/MailController'); +const router = express.Router(); + +router.post('/register', UserController.create); +router.post('/login', UserController.login); +router.post('/login-google', UserController.loginGoogle); + +// router.get('/users/leaderboards', authentication, UserController.getTopThree); +router.post('/mail', authentication, MailController.sendMail); +router.post('/histories', authentication, HistoryController.create); +// router.post('/histories/:bookId', authentication, HistoryController.create); //Klik card +router.get('/histories', authentication, HistoryController.getByUserId); +router.put('/histories/:historyId', authentication, HistoryController.updatePoin); +router.patch('/histories/:historyId/books/:bookId', authentication, HistoryController.updateBookId); +router.post('/books', authentication, BookController.findBook); +router.get('/books', authentication, BookController.getAll); +router.get('/books/:bookId', authentication, BookController.getById); +router.delete('/histories/:historyId', authentication, HistoryController.delete); +router.use(errorHandler.handler); + +module.exports = router; \ No newline at end of file diff --git a/server/seeders/20231114013237-books-seeder.js b/server/seeders/20231114013237-books-seeder.js new file mode 100644 index 0000000..358f249 --- /dev/null +++ b/server/seeders/20231114013237-books-seeder.js @@ -0,0 +1,33 @@ +'use strict'; + +/** @type {import('sequelize-cli').Migration} */ +module.exports = { + async up (queryInterface, Sequelize) { + let booksJson = require('../jsons/books.json'); + booksJson.map(book => { + book.createdAt = book.updatedAt = new Date(); + return book; + }); + + await queryInterface.bulkInsert('Books', booksJson); + /** + * Add seed commands here. + * + * Example: + * await queryInterface.bulkInsert('People', [{ + * name: 'John Doe', + * isBetaMember: false + * }], {}); + */ + }, + + async down (queryInterface, Sequelize) { + await queryInterface.bulkDelete('Books', null, {}); + /** + * Add commands to revert seed here. + * + * Example: + * await queryInterface.bulkDelete('People', null, {}); + */ + } +}; diff --git a/server/seeders/20231114093153-user-seeder.js b/server/seeders/20231114093153-user-seeder.js new file mode 100644 index 0000000..bf90619 --- /dev/null +++ b/server/seeders/20231114093153-user-seeder.js @@ -0,0 +1,52 @@ +'use strict'; + +const { bcryptHash } = require('../helpers/bcryptjs'); + +/** @type {import('sequelize-cli').Migration} */ +module.exports = { + async up (queryInterface, Sequelize) { + const password = bcryptHash('111111'); + const date = new Date(); + + await queryInterface.bulkInsert('Users', [{ + username: "admin", + email: "admin@p2.com", + password: password, + role: "admin", + accountType: "manual", + createdAt: date, + updatedAt: date + }], {}); + + await queryInterface.bulkInsert('UserDetails', [{ + userId: 1, + name: "Admin User", + inumber: "A-2023-1-IPUSTAKA", + createdAt: date, + updatedAt: date + }], {}); + /** + * Add seed commands here. + * + * Example: + * await queryInterface.bulkInsert('People', [{ + * name: 'John Doe', + * isBetaMember: false + * }], {}); + */ + }, + + async down (queryInterface, Sequelize) { + await queryInterface.bulkDelete('Users', null, { + truncate : true, + cascade : true, + restartIdentity : true + }); + /** + * Add commands to revert seed here. + * + * Example: + * await queryInterface.bulkDelete('People', null, {}); + */ + } +};